Name: series-workflowp4wd4 Phase: Succeeded StartedAt: 2026-07-27 23:41:44 +0000 UTC FinishedAt: 2026-07-28 05:20:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[0] Phase: Succeeded StartedAt: 2026-07-27 23:41:44 +0000 UTC FinishedAt: 2026-07-28 00:14:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 23:41:44 +0000 UTC FinishedAt: 2026-07-28 00:14:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "97e211ad1a34a5a979558a037619b9e633ca8620", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "97e211ad1a34a5a979558a037619b9e633ca8620", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "3e47f655-bd96-4ed7-9773-b444b2468d8a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_convert_inline_data", "ext4_generic_write_inline_data", "ext4_destroy_inline_data" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI4IDAwOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhJiMzNDssCiAgICAmIzM0O2V4dDRfZGVzdHJveV9pbmxpbmVfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBkZXByZWNhdGVzIHRoZSBpbmxpbmVfZGF0YSBmZWF0dXJlIGZvciByZWd1bGFyIGZpbGVzIGluIGV4dDQsIGZvcmNpbmcgY29udmVyc2lvbiB0byBibG9jay1iYXNlZCBzdG9yYWdlIG9uIHdyaXRlLiBUaGlzIG1vZGlmaWVzIGNvcmUgZXh0NCB3cml0ZSBwYXRocyBhbmQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgZGF0YSBjb3JydXB0aW9uIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMDoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdhNTMwZDBmNTQwN2YwZmRkYjk0MmJlMTRkYzdiM2NjOTA0YzU0MTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAwMDoxMzo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQvaW5saW5lZGF0YS5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQvaW5saW5lZGF0YS5yc3RcbmluZGV4IGE3MjhhZjBkMmZkMGM1Li44ZGMxYjZkNzUzODhkNyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC9pbmxpbmVkYXRhLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0L2lubGluZWRhdGEucnN0XG5AQCAtMyw2ICYjNDM7MywxNCBAQFxuIElubGluZSBEYXRhXG4gLS0tLS0tLS0tLS1cbiBcbiYjNDM7Li4gd2FybmluZzo6XG4mIzQzO1xuJiM0MzsgICBUaGUgaW5saW5lIGRhdGEgZmVhdHVyZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmVcbiYjNDM7ICAga2VybmVsIHJlbGVhc2UuICBOZXcgcmVndWxhciBmaWxlIGlub2RlcyBubyBsb25nZXIgc3RvcmUgZGF0YSBpbmxpbmUsXG4mIzQzOyAgIGFuZCB3cml0ZXMgdG8gZXhpc3RpbmcgaW5saW5lIGRhdGEgaW5vZGVzIHRyaWdnZXIgYXV0b21hdGljIGNvbnZlcnNpb25cbiYjNDM7ICAgdG8gYmxvY2stYmFzZWQgc3RvcmFnZS4gIFVzZSBgYHR1bmUyZnMgLU8gXmlubGluZV9kYXRhYGAgdG8gY29udmVydFxuJiM0MzsgICBleGlzdGluZyBmaWxlc3lzdGVtcy5cbiYjNDM7XG4gVGhlIGlubGluZSBkYXRhIGZlYXR1cmUgd2FzIGRlc2lnbmVkIHRvIGhhbmRsZSB0aGUgY2FzZSB0aGF0IGEgZmlsZSYjMzk7c1xuIGRhdGEgaXMgc28gdGlueSB0aGF0IGl0IHJlYWRpbHkgZml0cyBpbnNpZGUgdGhlIGlub2RlLCB3aGljaFxuICh0aGVvcmV0aWNhbGx5KSByZWR1Y2VzIGRpc2sgYmxvY2sgY29uc3VtcHRpb24gYW5kIHJlZHVjZXMgc2Vla3MuIElmIHRoZVxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IDIxYTk1MWYxMDYzNjc4Li44MzJiYzFmM2I2MDAyNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTMxNDgsNyAmIzQzOzMxNDgsNiBAQCBpbnQgZG9fam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTtcbiB2b2lkIGV4dDRfc2V0X2lub2RlX21hcHBpbmdfb3JkZXIoc3RydWN0IGlub2RlICppbm9kZSk7XG4gI2RlZmluZSBGQUxMX0JBQ0tfVE9fTk9OREVMQUxMT0MgMVxuLSNkZWZpbmUgRVhUNF9XUklURV9EQVRBX0lOTElORVx0IDJcbiBcbiB0eXBlZGVmIGVudW0ge1xuIFx0RVhUNF9JR0VUX05PUk1BTCA9XHQwLFxuQEAgLTM3NTksMTIgJiM0MzszNzU4LDYgQEAgZXh0ZXJuIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSk7XG4gZXh0ZXJuIHZvaWQgZXh0NF91cGRhdGVfZmluYWxfZGUodm9pZCAqZGVfYnVmLCBpbnQgb2xkX3NpemUsIGludCBuZXdfc2l6ZSk7XG4gXG4gaW50IGV4dDRfcmVhZHBhZ2VfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLWV4dGVybiBpbnQgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0XHQgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuLVx0XHRcdFx0XHQgc3RydWN0IGZvbGlvICoqZm9saW9wKTtcbi1pbnQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuLVx0XHRcdCAgICAgICB1bnNpZ25lZCBjb3BpZWQsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGV4dGVybiBpbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdCAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaWFsbG9jLmMgYi9mcy9leHQ0L2lhbGxvYy5jXG5pbmRleCBhNDBjYjI3ZjgxMTZjYi4uMjc4ZjBhYjhjOTk2ZTQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lhbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lhbGxvYy5jXG5AQCAtMTMwNSw4ICYjNDM7MTMwNSw4IEBAIHN0cnVjdCBpbm9kZSAqX19leHQ0X25ld19pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcbiBcdGVpLVx1MDAzZWlfZXh0cmFfaXNpemUgPSBzYmktXHUwMDNlc193YW50X2V4dHJhX2lzaXplO1xuIFx0ZWktXHUwMDNlaV9pbmxpbmVfb2ZmID0gMDtcbi1cdGlmIChleHQ0X2hhc19mZWF0dXJlX2lubGluZV9kYXRhKHNiKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoIShlaS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiAoRVhUNF9EQVhfRkx8RVhUNF9FQV9JTk9ERV9GTCkpIHx8IFNfSVNESVIobW9kZSkpKVxuJiM0MztcdGlmIChleHQ0X2hhc19mZWF0dXJlX2lubGluZV9kYXRhKHNiKSBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIShlaS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0RBWF9GTCkpXG4gXHRcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4gXHRyZXQgPSBpbm9kZTtcbiBcdGVyciA9IGRxdW90X2FsbG9jX2lub2RlKGlub2RlKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lubGluZS5jIGIvZnMvZXh0NC9pbmxpbmUuY1xuaW5kZXggY2VlZTY5YTY2NDgyYmMuLmUwYjgwMjczZTMyMmQ4IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbmxpbmUuY1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7ZXh0NF9qYmQyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtleHQ0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZXh0NF9leHRlbnRzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt4YXR0ci5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dHJ1bmNhdGUuaFwmIzM0O1xuIFxuQEAgLTIwLDEwICYjNDM7MjEsNiBAQFxuICNkZWZpbmUgRVhUNF9JTkxJTkVfRE9URE9UX09GRlNFVFx0MlxuICNkZWZpbmUgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkVcdFx0NFxuIFxuLVxuLXN0YXRpYyBpbnQgZXh0NF9kYV9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHRcdFx0XHQgc3RydWN0IGlub2RlICppbm9kZSk7XG4tXG4gc3RhdGljIGludCBleHQ0X2dldF9pbmxpbmVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX29mZilcbkBAIC0yMTgsNTEgJiM0MzsyMTUsNiBAQCBzdGF0aWMgaW50IGV4dDRfcmVhZF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWZmZXIsXG4gXHRyZXR1cm4gY3BfbGVuO1xuIH1cbiBcbi0vKlxuLSAqIHdyaXRlIHRoZSBidWZmZXIgdG8gdGhlIGlubGluZSBpbm9kZS5cbi0gKiBJZiAmIzM5O2NyZWF0ZSYjMzk7IGlzIHNldCwgd2UgZG9uJiMzOTt0IG5lZWQgdG8gZG8gdGhlIGV4dHJhIGNvcHkgaW4gdGhlIHhhdHRyXG4tICogdmFsdWUgc2luY2UgaXQgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IGV4dDRfeGF0dHJfaWJvZHlfc2V0LlxuLSAqIFRoYXQgc2F2ZXMgdXMgb25lIG1lbWNweS5cbi0gKi9cbi1zdGF0aWMgdm9pZCBleHQ0X3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MsXG4tXHRcdFx0XHQgICB2b2lkICpidWZmZXIsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGludCBsZW4pXG4te1xuLVx0c3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5O1xuLVx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfaGVhZGVyICpoZWFkZXI7XG4tXHRzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlO1xuLVx0aW50IGNwX2xlbiA9IDA7XG4tXG4tXHRpZiAodW5saWtlbHkoZXh0NF9lbWVyZ2VuY3lfc3RhdGUoaW5vZGUtXHUwMDNlaV9zYikpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRCVUdfT04oIUVYVDRfSShpbm9kZSktXHUwMDNlaV9pbmxpbmVfb2ZmKTtcbi1cdEJVR19PTihwb3MgJiM0MzsgbGVuIFx1MDAzZSBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUpO1xuLVxuLVx0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoaWxvYyk7XG4tXHRidWZmZXIgJiM0Mzs9IHBvcztcbi1cbi1cdGlmIChwb3MgXHUwMDNjIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpIHtcbi1cdFx0Y3BfbGVuID0gcG9zICYjNDM7IGxlbiBcdTAwM2UgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSA/XG4tXHRcdFx0IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgLSBwb3MgOiBsZW47XG4tXHRcdG1lbWNweSgodm9pZCAqKXJhd19pbm9kZS1cdTAwM2VpX2Jsb2NrICYjNDM7IHBvcywgYnVmZmVyLCBjcF9sZW4pO1xuLVxuLVx0XHRsZW4gLT0gY3BfbGVuO1xuLVx0XHRidWZmZXIgJiM0Mzs9IGNwX2xlbjtcbi1cdFx0cG9zICYjNDM7PSBjcF9sZW47XG4tXHR9XG4tXG4tXHRpZiAoIWxlbilcbi1cdFx0cmV0dXJuO1xuLVxuLVx0cG9zIC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XG4tXHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xuLVx0ZW50cnkgPSAoc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKikoKHZvaWQgKilyYXdfaW5vZGUgJiM0Mztcbi1cdFx0XHRcdFx0ICAgIEVYVDRfSShpbm9kZSktXHUwMDNlaV9pbmxpbmVfb2ZmKTtcbi1cbi1cdG1lbWNweSgodm9pZCAqKUlGSVJTVChoZWFkZXIpICYjNDM7IGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfb2ZmcykgJiM0MzsgcG9zLFxuLVx0ICAgICAgIGJ1ZmZlciwgbGVuKTtcbi19XG4tXG4gc3RhdGljIGludCBleHQ0X2NyZWF0ZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbGVuKVxuIHtcbkBAIC00MzMsNyAmIzQzOzM4NSw4IEBAIHN0YXRpYyBpbnQgZXh0NF9wcmVwYXJlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gfVxuIFxuIHN0YXRpYyBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuLVx0XHRcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgIGV4dDRfZnNibGtfdCBwYmxrKVxuIHtcbiBcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiBcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XG5AQCAtNDgxLDcgJiM0Mzs0MzQsMjEgQEAgc3RhdGljIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdCAgICBTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdFx0ZXh0NF9zZXRfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcbiBcdFx0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XG4mIzQzO1x0XHRcdGlmIChwYmxrKSB7XG4mIzQzO1x0XHRcdFx0c3RydWN0IGV4dDRfZXh0ZW50X2hlYWRlciAqZWg7XG4mIzQzO1x0XHRcdFx0c3RydWN0IGV4dDRfZXh0ZW50ICpleDtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0ZWggPSBleHRfaW5vZGVfaGRyKGlub2RlKTtcbiYjNDM7XHRcdFx0XHRleCA9IEVYVF9GSVJTVF9FWFRFTlQoZWgpO1xuJiM0MztcdFx0XHRcdGV4LVx1MDAzZWVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4mIzQzO1x0XHRcdFx0ZXgtXHUwMDNlZWVfbGVuID0gY3B1X3RvX2xlMTYoMSk7XG4mIzQzO1x0XHRcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCBwYmxrKTtcbiYjNDM7XHRcdFx0XHRlaC1cdTAwM2VlaF9lbnRyaWVzID0gY3B1X3RvX2xlMTYoMSk7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuJiM0MztcdH0gZWxzZSBpZiAocGJsaykge1xuJiM0MztcdFx0LyogaW5kaXJlY3QgbWFwcGluZzogc2V0IGlfZGF0YVswXSBkaXJlY3RseSAqL1xuJiM0MztcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihwYmxrKTtcbiBcdH1cbiBcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7XG4gXG5AQCAtNTY4LDEyMiAmIzQzOzUzNSw2IEBAIGludCBleHQ0X3JlYWRwYWdlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIHJldCBcdTAwM2U9IDAgPyAwIDogcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4te1xuLVx0aW50IHJldCwgbmVlZGVkX2Jsb2Nrcywgbm9fZXhwYW5kO1xuLVx0aGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7XG4tXHRpbnQgcmV0cmllcyA9IDAsIHNlbV9oZWxkID0gMDtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xuLVx0dW5zaWduZWQgZnJvbSwgdG87XG4tXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4tXG4tXHRpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkge1xuLVx0XHQvKlxuLVx0XHQgKiBjbGVhciB0aGUgZmxhZyBzbyB0aGF0IG5vIG5ldyB3cml0ZVxuLVx0XHQgKiB3aWxsIHRyYXAgaGVyZSBhZ2Fpbi5cbi1cdFx0ICovXG4tXHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRuZWVkZWRfYmxvY2tzID0gZXh0NF9jaHVua190cmFuc19leHRlbnQoaW5vZGUsIDEpO1xuLVxuLVx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpbG9jKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tcmV0cnk6XG4tXHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfV1JJVEVfUEFHRSwgbmVlZGVkX2Jsb2Nrcyk7XG4tXHRpZiAoSVNfRVJSKGhhbmRsZSkpIHtcbi1cdFx0cmV0ID0gUFRSX0VSUihoYW5kbGUpO1xuLVx0XHRoYW5kbGUgPSBOVUxMO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdC8qIFdlIGNhbm5vdCByZWN1cnNlIGludG8gdGhlIGZpbGVzeXN0ZW0gYXMgdGhlIHRyYW5zYWN0aW9uIGlzIGFscmVhZHlcbi1cdCAqIHN0YXJ0ZWQgKi9cbi1cdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxuLVx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuLVx0aWYgKElTX0VSUihmb2xpbykpIHtcbi1cdFx0cmV0ID0gUFRSX0VSUihmb2xpbyk7XG4tXHRcdGdvdG8gb3V0X25vZm9saW87XG4tXHR9XG4tXG4tXHRleHQ0X3dyaXRlX2xvY2tfeGF0dHIoaW5vZGUsIFx1MDAyNm5vX2V4cGFuZCk7XG4tXHRzZW1faGVsZCA9IDE7XG4tXHQvKiBJZiBzb21lIG9uZSBoYXMgYWxyZWFkeSBkb25lIHRoaXMgZm9yIHVzLCBqdXN0IGV4aXQuICovXG4tXHRpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkge1xuLVx0XHRyZXQgPSAwO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdGZyb20gPSAwO1xuLVx0dG8gPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XG4tXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XG4tXHRcdHJldCA9IGV4dDRfcmVhZF9pbmxpbmVfZm9saW8oaW5vZGUsIGZvbGlvKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdGV4dDRfZmNfdHJhY2tfaW5vZGUoaGFuZGxlLCBpbm9kZSk7XG4tXHRyZXQgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpO1xuLVx0aWYgKHJldClcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRpZiAoZXh0NF9zaG91bGRfZGlvcmVhZF9ub2xvY2soaW5vZGUpKSB7XG4tXHRcdHJldCA9IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oaGFuZGxlLCBmb2xpbywgZnJvbSwgdG8sXG4tXHRcdFx0XHRcdCAgICAgZXh0NF9nZXRfYmxvY2tfdW53cml0dGVuKTtcbi1cdH0gZWxzZVxuLVx0XHRyZXQgPSBleHQ0X2Jsb2NrX3dyaXRlX2JlZ2luKGhhbmRsZSwgZm9saW8sIGZyb20sIHRvLFxuLVx0XHRcdFx0XHQgICAgIGV4dDRfZ2V0X2Jsb2NrKTtcbi1cdGNsZWFyX2J1ZmZlcl9uZXcoZm9saW9fYnVmZmVycyhmb2xpbykpO1xuLVxuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IGV4dDRfc2hvdWxkX2pvdXJuYWxfZGF0YShpbm9kZSkpIHtcbi1cdFx0cmV0ID0gZXh0NF93YWxrX3BhZ2VfYnVmZmVycyhoYW5kbGUsIGlub2RlLFxuLVx0XHRcdFx0XHQgICAgIGZvbGlvX2J1ZmZlcnMoZm9saW8pLCBmcm9tLCB0byxcbi1cdFx0XHRcdFx0ICAgICBOVUxMLCBkb19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MpO1xuLVx0fVxuLVxuLVx0aWYgKHJldCkge1xuLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRmb2xpbyA9IE5VTEw7XG4tXHRcdGV4dDRfb3JwaGFuX2FkZChoYW5kbGUsIGlub2RlKTtcbi1cdFx0ZXh0NF93cml0ZV91bmxvY2tfeGF0dHIoaW5vZGUsIFx1MDAyNm5vX2V4cGFuZCk7XG4tXHRcdHNlbV9oZWxkID0gMDtcbi1cdFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbi1cdFx0aGFuZGxlID0gTlVMTDtcbi1cdFx0ZXh0NF90cnVuY2F0ZV9mYWlsZWRfd3JpdGUoaW5vZGUpO1xuLVx0XHQvKlxuLVx0XHQgKiBJZiB0cnVuY2F0ZSBmYWlsZWQgZWFybHkgdGhlIGlub2RlIG1pZ2h0XG4tXHRcdCAqIHN0aWxsIGJlIG9uIHRoZSBvcnBoYW4gbGlzdDsgd2UgbmVlZCB0b1xuLVx0XHQgKiBtYWtlIHN1cmUgdGhlIGlub2RlIGlzIHJlbW92ZWQgZnJvbSB0aGVcbi1cdFx0ICogb3JwaGFuIGxpc3QgaW4gdGhhdCBjYXNlLlxuLVx0XHQgKi9cbi1cdFx0aWYgKGlub2RlLVx1MDAzZWlfbmxpbmspXG4tXHRcdFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcbi1cdH1cbi1cbi1cdGlmIChyZXQgPT0gLUVOT1NQQyBcdTAwMjZcdTAwMjYgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtXHUwMDNlaV9zYiwgXHUwMDI2cmV0cmllcykpXG4tXHRcdGdvdG8gcmV0cnk7XG4tXG4tXHRpZiAoZm9saW8pXG4tXHRcdGJsb2NrX2NvbW1pdF93cml0ZShmb2xpbywgZnJvbSwgdG8pO1xuLW91dDpcbi1cdGlmIChmb2xpbykge1xuLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0fVxuLW91dF9ub2ZvbGlvOlxuLVx0aWYgKHNlbV9oZWxkKVxuLVx0XHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXHUwMDI2bm9fZXhwYW5kKTtcbi1cdGlmIChoYW5kbGUpXG4tXHRcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4tXHRicmVsc2UoaWxvYy5iaCk7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbiAvKlxuICAqIFByZXBhcmUgdGhlIHdyaXRlIGZvciB0aGUgaW5saW5lIGRhdGEuXG4gICogSWYgdGhlIGRhdGEgY2FuIGJlIHdyaXR0ZW4gaW50byB0aGUgaW5vZGUsIHdlIGp1c3QgcmVhZFxuQEAgLTY5OCwyNDggJiM0Mzs1NDksOCBAQCBpbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCxcbiBcdFx0XHRcdFx0ICBib29sIGRhKVxuIHtcbi1cdGludCByZXQ7XG4tXHRoYW5kbGVfdCAqaGFuZGxlO1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcbi1cdGludCByZXRyaWVzID0gMDtcbi1cbi1cdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLXJldHJ5X2pvdXJuYWw6XG4tXHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfSU5PREUsIDEpO1xuLVx0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4tXHRcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcbi1cdFx0Z290byBvdXRfcmVsZWFzZV9iaDtcbi1cdH1cbi1cbi1cdHJldCA9IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBwb3MgJiM0MzsgbGVuKTtcbi1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU5PU1BDKVxuLVx0XHRnb3RvIG91dF9zdG9wX2pvdXJuYWw7XG4tXG4tXHRpZiAocmV0ID09IC1FTk9TUEMpIHtcbi1cdFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbi1cdFx0aWYgKCFkYSkge1xuLVx0XHRcdGJyZWxzZShpbG9jLmJoKTtcbi1cdFx0XHQvKiBSZXRyeSBpbnNpZGUgKi9cbi1cdFx0XHRyZXR1cm4gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XG4tXHRcdH1cbi1cbi1cdFx0cmV0ID0gZXh0NF9kYV9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XG4tXHRcdGlmIChyZXQgPT0gLUVOT1NQQyBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLVx1MDAzZWlfc2IsIFx1MDAyNnJldHJpZXMpKVxuLVx0XHRcdGdvdG8gcmV0cnlfam91cm5hbDtcbi1cdFx0Z290byBvdXRfcmVsZWFzZV9iaDtcbi1cdH1cbi1cbi1cdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxuLVx0XHRcdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbi1cdGlmIChJU19FUlIoZm9saW8pKSB7XG4tXHRcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xuLVx0XHRnb3RvIG91dF9zdG9wX2pvdXJuYWw7XG4tXHR9XG4tXG4tXHRkb3duX3JlYWQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2V4YXR0cl9zZW0pO1xuLVx0LyogU29tZW9uZSBlbHNlIGhhZCBjb252ZXJ0ZWQgaXQgdG8gZXh0ZW50ICovXG4tXHRpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkge1xuLVx0XHRyZXQgPSAwO1xuLVx0XHRnb3RvIG91dF9yZWxlYXNlX2ZvbGlvO1xuLVx0fVxuLVxuLVx0aWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkge1xuLVx0XHRyZXQgPSBleHQ0X3JlYWRfaW5saW5lX2ZvbGlvKGlub2RlLCBmb2xpbyk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBvdXRfcmVsZWFzZV9mb2xpbztcbi1cdH1cbi1cbi1cdHJldCA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XG4tXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dF9yZWxlYXNlX2ZvbGlvO1xuLVx0KmZvbGlvcCA9IGZvbGlvO1xuLVx0dXBfcmVhZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZXhhdHRyX3NlbSk7XG4tXHRicmVsc2UoaWxvYy5iaCk7XG4tXHRyZXR1cm4gMTtcbi1cbi1vdXRfcmVsZWFzZV9mb2xpbzpcbi1cdHVwX3JlYWQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2V4YXR0cl9zZW0pO1xuLVx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdGZvbGlvX3B1dChmb2xpbyk7XG4tb3V0X3N0b3Bfam91cm5hbDpcbi1cdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4tb3V0X3JlbGVhc2VfYmg6XG4tXHRicmVsc2UoaWxvYy5iaCk7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi0vKlxuLSAqIFRyeSB0byB3cml0ZSBkYXRhIGluIHRoZSBpbm9kZS5cbi0gKiBJZiB0aGUgaW5vZGUgaGFzIGlubGluZSBkYXRhLCBjaGVjayB3aGV0aGVyIHRoZSBuZXcgd3JpdGUgY2FuIGJlXG4tICogaW4gdGhlIGlub2RlIGFsc28uIElmIG5vdCwgY3JlYXRlIHRoZSBwYWdlIHRoZSBoYW5kbGUsIG1vdmUgdGhlIGRhdGFcbi0gKiB0byB0aGUgcGFnZSBtYWtlIGl0IHVwZGF0ZSBhbmQgbGV0IHRoZSBsYXRlciBjb2RlcyBjcmVhdGUgZXh0ZW50IGZvciBpdC5cbi0gKi9cbi1pbnQgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0XHQgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHQgIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbi1cdFx0XHRcdCAgc3RydWN0IGZvbGlvICoqZm9saW9wKVxuLXtcbi1cdGlmIChwb3MgJiM0MzsgbGVuIFx1MDAzZSBleHQ0X2dldF9tYXhfaW5saW5lX3NpemUoaW5vZGUpKVxuLVx0XHRyZXR1cm4gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XG4tXHRyZXR1cm4gZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKG1hcHBpbmcsIGlub2RlLCBwb3MsIGxlbixcbi1cdFx0XHRcdFx0ICAgICAgZm9saW9wLCBmYWxzZSk7XG4tfVxuLVxuLWludCBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXG4tXHRcdFx0ICAgICAgIHVuc2lnbmVkIGNvcGllZCwgc3RydWN0IGZvbGlvICpmb2xpbylcbi17XG4tXHRoYW5kbGVfdCAqaGFuZGxlID0gZXh0NF9qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCk7XG4tXHRpbnQgbm9fZXhwYW5kO1xuLVx0dm9pZCAqa2FkZHI7XG4tXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4tXHRpbnQgcmV0ID0gMCwgcmV0Mjtcbi1cbi1cdGlmICh1bmxpa2VseShjb3BpZWQgXHUwMDNjIGxlbikgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcbi1cdFx0Y29waWVkID0gMDtcbi1cbi1cdGlmIChsaWtlbHkoY29waWVkKSkge1xuLVx0XHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlsb2MpO1xuLVx0XHRpZiAocmV0KSB7XG4tXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRcdGV4dDRfc3RkX2Vycm9yKGlub2RlLVx1MDAzZWlfc2IsIHJldCk7XG4tXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdFx0ZXh0NF93cml0ZV9sb2NrX3hhdHRyKGlub2RlLCBcdTAwMjZub19leHBhbmQpO1xuLVx0XHQvKlxuLVx0XHQgKiBXZSBjb3VsZCBoYXZlIHJhY2VkIHdpdGggZXh0NF9wYWdlX21rd3JpdGUoKSBjb252ZXJ0aW5nXG4tXHRcdCAqIHRoZSBpbm9kZSBhbmQgY2xlYXJpbmcgdGhlIGlubGluZSBkYXRhIGZsYWcsIHNvIHdlIGp1c3Rcbi1cdFx0ICogcmVsZWFzZSByZXNvdXJjZXMgYW5kIHJldHJ5IHRoZSB3aG9sZSB3cml0ZS5cbi1cdFx0ICovXG4tXHRcdGlmICh1bmxpa2VseSghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSkge1xuLVx0XHRcdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcdTAwMjZub19leHBhbmQpO1xuLVx0XHRcdGJyZWxzZShpbG9jLmJoKTtcbi1cdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbi1cdFx0XHRyZXR1cm4gMDtcbi1cdFx0fVxuLVxuLVx0XHQvKlxuLVx0XHQgKiBlaS1cdTAwM2VpX2lubGluZV9vZmYgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZVxuLVx0XHQgKiBleHQ0X3dyaXRlX2JlZ2luKCkgY2FsbGVkXG4tXHRcdCAqIGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKClcbi1cdFx0ICovXG4tXHRcdCh2b2lkKSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcbi1cbi1cdFx0a2FkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCAwKTtcbi1cdFx0ZXh0NF93cml0ZV9pbmxpbmVfZGF0YShpbm9kZSwgXHUwMDI2aWxvYywga2FkZHIsIHBvcywgY29waWVkKTtcbi1cdFx0a3VubWFwX2xvY2FsKGthZGRyKTtcbi1cdFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4tXHRcdC8qIGNsZWFyIGRpcnR5IGZsYWcgc28gdGhhdCB3cml0ZXBhZ2VzIHdvdWxkbiYjMzk7dCB3b3JrIGZvciB1cy4gKi9cbi1cdFx0Zm9saW9fY2xlYXJfZGlydHkoZm9saW8pO1xuLVxuLVx0XHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXHUwMDI2bm9fZXhwYW5kKTtcbi1cdFx0YnJlbHNlKGlsb2MuYmgpO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdXBkYXRlIGlfc2l6ZSB3aGlsZSBzdGlsbCBob2xkaW5nIGZvbGlvXG4tXHRcdCAqIGxvY2s6IHBhZ2Ugd3JpdGVvdXQgY291bGQgb3RoZXJ3aXNlIGNvbWUgaW4gYW5kIHplcm9cbi1cdFx0ICogYmV5b25kIGlfc2l6ZS5cbi1cdFx0ICovXG4tXHRcdGV4dDRfdXBkYXRlX2lub2RlX3NpemUoaW5vZGUsIHBvcyAmIzQzOyBjb3BpZWQpO1xuLVx0fVxuLVx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdGZvbGlvX3B1dChmb2xpbyk7XG4tXG4tXHQvKlxuLVx0ICogRG9uJiMzOTt0IG1hcmsgdGhlIGlub2RlIGRpcnR5IHVuZGVyIGZvbGlvIGxvY2suIEZpcnN0LCBpdCB1bm5lY2Vzc2FyaWx5XG4tXHQgKiBtYWtlcyB0aGUgaG9sZGluZyB0aW1lIG9mIGZvbGlvIGxvY2sgbG9uZ2VyLiBTZWNvbmQsIGl0IGZvcmNlcyBsb2NrXG4tXHQgKiBvcmRlcmluZyBvZiBmb2xpbyBsb2NrIGFuZCB0cmFuc2FjdGlvbiBzdGFydCBmb3Igam91cm5hbGluZ1xuLVx0ICogZmlsZXN5c3RlbXMuXG4tXHQgKi9cbi1cdGlmIChsaWtlbHkoY29waWVkKSlcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4tb3V0OlxuLVx0Lypcbi1cdCAqIElmIHdlIGRpZG4mIzM5O3QgY29weSBhcyBtdWNoIGRhdGEgYXMgZXhwZWN0ZWQsIHdlIG5lZWQgdG8gdHJpbSBiYWNrXG4tXHQgKiBzaXplIG9mIHhhdHRyIGNvbnRhaW5pbmcgaW5saW5lIGRhdGEuXG4tXHQgKi9cbi1cdGlmIChwb3MgJiM0MzsgbGVuIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUgXHUwMDI2XHUwMDI2IGV4dDRfY2FuX3RydW5jYXRlKGlub2RlKSlcbi1cdFx0ZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpO1xuLVxuLVx0cmV0MiA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4tXHRpZiAoIXJldClcbi1cdFx0cmV0ID0gcmV0Mjtcbi1cdGlmIChwb3MgJiM0MzsgbGVuIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbi1cdFx0ZXh0NF90cnVuY2F0ZV9mYWlsZWRfd3JpdGUoaW5vZGUpO1xuLVx0XHQvKlxuLVx0XHQgKiBJZiB0cnVuY2F0ZSBmYWlsZWQgZWFybHkgdGhlIGlub2RlIG1pZ2h0IHN0aWxsIGJlXG4tXHRcdCAqIG9uIHRoZSBvcnBoYW4gbGlzdDsgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGlub2RlXG4tXHRcdCAqIGlzIHJlbW92ZWQgZnJvbSB0aGUgb3JwaGFuIGxpc3QgaW4gdGhhdCBjYXNlLlxuLVx0XHQgKi9cbi1cdFx0aWYgKGlub2RlLVx1MDAzZWlfbmxpbmspXG4tXHRcdFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcbi1cdH1cbi1cdHJldHVybiByZXQgPyByZXQgOiBjb3BpZWQ7XG4tfVxuLVxuLS8qXG4tICogVHJ5IHRvIG1ha2UgdGhlIHBhZ2UgY2FjaGUgYW5kIGhhbmRsZSByZWFkeSBmb3IgdGhlIGlubGluZSBkYXRhIGNhc2UuXG4tICogV2UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiAyIGNhc2VzOlxuLSAqIDEuIFRoZSBpbm9kZSBpcyBjcmVhdGVkIGFuZCB0aGUgZmlyc3Qgd3JpdGUgZXhjZWVkcyBpbmxpbmUgc2l6ZS4gV2UgY2FuXG4tICogICAgY2xlYXIgdGhlIGlub2RlIHN0YXRlIHNhZmVseS5cbi0gKiAyLiBUaGUgaW5vZGUgaGFzIGlubGluZSBkYXRhLCB0aGVuIHdlIG5lZWQgdG8gcmVhZCB0aGUgZGF0YSwgbWFrZSBpdFxuLSAqICAgIHVwZGF0ZSBhbmQgZGlydHkgc28gdGhhdCBleHQ0X2RhX3dyaXRlcGFnZXMgY2FuIGhhbmRsZSBpdC4gV2UgZG9uJiMzOTt0XG4tICogICAgbmVlZCB0byBzdGFydCB0aGUgam91cm5hbCBzaW5jZSB0aGUgZmlsZSYjMzk7cyBtZXRhZGF0YSBpc24mIzM5O3QgY2hhbmdlZCBub3cuXG4tICovXG4tc3RhdGljIGludCBleHQ0X2RhX2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLVx0XHRcdFx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGludCByZXQgPSAwLCBpbmxpbmVfc2l6ZTtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXG4tXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sXG4tXHRcdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuLVx0aWYgKElTX0VSUihmb2xpbykpXG4tXHRcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcbi1cbi1cdGRvd25fcmVhZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZXhhdHRyX3NlbSk7XG4tXHRpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkge1xuLVx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XG4tXG4tXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XG4tXHRcdHJldCA9IGV4dDRfcmVhZF9pbmxpbmVfZm9saW8oaW5vZGUsIGZvbGlvKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdHJldCA9IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oTlVMTCwgZm9saW8sIDAsIGlubGluZV9zaXplLFxuLVx0XHRcdFx0ICAgICBleHQ0X2RhX2dldF9ibG9ja19wcmVwKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0dXBfcmVhZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZXhhdHRyX3NlbSk7XG4tXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdGV4dDRfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKGlub2RlKTtcbi1cdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbi1cdGNsZWFyX2J1ZmZlcl9uZXcoZm9saW9fYnVmZmVycyhmb2xpbykpO1xuLVx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4tXHRmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcbi1cdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbi1cbi1vdXQ6XG4tXHR1cF9yZWFkKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNleGF0dHJfc2VtKTtcbi1cdGlmIChmb2xpbykge1xuLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0fVxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiBJbmxpbmUgZGF0YSBpcyBkZXByZWNhdGVkOiBhbHdheXMgY29udmVydCB0byBibG9jayBmb3JtYXQgKi9cbiYjNDM7XHRyZXR1cm4gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbiB9XG4gXG4gI2lmZGVmIElOTElORV9ESVJfREVCVUdcbkBAIC0xMDc5LDIzICYjNDM7NjkwLDYgQEAgc3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxuLVx0XHRcdFx0ICAgICB2b2lkICpidWYsIGludCBpbmxpbmVfc2l6ZSlcbi17XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSwgaW5saW5lX3NpemUpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRleHQ0X21zZyhpbm9kZS1cdTAwM2VpX3NiLCBLRVJOX0VNRVJHLFxuLVx0XHRcdFwmIzM0O2Vycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKVwmIzM0Oyxcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX2lubywgcmV0KTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVx0ZXh0NF93cml0ZV9pbmxpbmVfZGF0YShpbm9kZSwgaWxvYywgYnVmLCAwLCBpbmxpbmVfc2l6ZSk7XG4tXHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuLX1cbi1cbiBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYylcbkBAIC0xMTAzLDcgJiM0Mzs2OTcsNyBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiBcdGludCBlcnJvcjtcbiBcdHZvaWQgKmJ1ZiA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmggPSBOVUxMO1xuLVx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XG4mIzQzO1x0ZXh0NF9mc2Jsa190IHBibGs7XG4gXHRpbnQgaW5saW5lX3NpemU7XG4gXG4gXHRpbmxpbmVfc2l6ZSA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGlub2RlKTtcbkBAIC0xMTI5LDI1ICYjNDM7NzIzLDIwIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0ZXJyb3IgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWxsb2NhdGUgYSBkYXRhIGJsb2NrIGFuZCB3cml0ZSB0aGUgaW5saW5lIGRhdGEgdG8gaXQgYmVmb3JlXG4mIzQzO1x0ICogZGVzdHJveWluZyB0aGUgaW5saW5lIGRhdGEuICBUaGlzIGVuc3VyZXMgdGhhdCBvbiBmYWlsdXJlIHdlXG4mIzQzO1x0ICogY2FuIHNpbXBseSBmcmVlIHRoZSBhbGxvY2F0ZWQgYmxvY2sgd2l0aG91dCBuZWVkaW5nIHRvIHJlc3RvcmVcbiYjNDM7XHQgKiB0aGUgaW5saW5lIGRhdGEuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGJsayA9IGV4dDRfbmV3X21ldGFfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIDAsIDAsIE5VTEwsIFx1MDAyNmVycm9yKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRtYXAubV9sYmxrID0gMDtcbi1cdG1hcC5tX2xlbiA9IDE7XG4tXHRtYXAubV9mbGFncyA9IDA7XG4tXHRlcnJvciA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBcdTAwMjZtYXAsIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpO1xuLVx0aWYgKGVycm9yIFx1MDAzYyAwKVxuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuLVx0aWYgKCEobWFwLm1fZmxhZ3MgXHUwMDI2IEVYVDRfTUFQX01BUFBFRCkpIHtcbi1cdFx0ZXJyb3IgPSAtRUlPO1xuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuLVx0fVxuLVxuLVx0ZGF0YV9iaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLCBtYXAubV9wYmxrKTtcbiYjNDM7XHRkYXRhX2JoID0gc2JfZ2V0YmxrKGlub2RlLVx1MDAzZWlfc2IsIHBibGspO1xuIFx0aWYgKCFkYXRhX2JoKSB7XG4gXHRcdGVycm9yID0gLUVOT01FTTtcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWVfYmxvY2s7XG4gXHR9XG4gXG4gXHRsb2NrX2J1ZmZlcihkYXRhX2JoKTtcbkBAIC0xMTU1LDggJiM0Mzs3NDQsNyBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRcdFx0ICAgICAgIEVYVDRfSlRSX05PTkUpO1xuIFx0aWYgKGVycm9yKSB7XG4gXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRcdGVycm9yID0gLUVJTztcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWVfYmxvY2s7XG4gXHR9XG4gXHRtZW1zZXQoZGF0YV9iaC1cdTAwM2ViX2RhdGEsIDAsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuIFxuQEAgLTExNjQsMjYgJiM0Mzs3NTIsMzggQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdG1lbWNweShkYXRhX2JoLVx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XG4gXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoZGF0YV9iaCk7XG4gXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRcdGVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLFxuLVx0XHRcdFx0XHRcdCAgIGlub2RlLCBkYXRhX2JoKTtcbiYjNDM7XHRcdGVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCk7XG4gXHR9IGVsc2Uge1xuIFx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuLVx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuLVx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVxuIFx0XHRlcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBkYXRhX2JoLFxuIFx0XHRcdCAgbGUzMl90b19jcHUoKChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKWJ1ZiktXHUwMDNlaW5vZGUpLFxuIFx0XHRcdCAgYnVmICYjNDM7IEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxuIFx0XHRcdCAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XG4tXHRcdGlmICghZXJyb3IpXG4tXHRcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4gXHR9XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBvdXRfZnJlZV9ibG9jaztcbiBcbi1vdXRfcmVzdG9yZTpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERhdGEgaXMgc2FmZWx5IGluIHRoZSBhbGxvY2F0ZWQgYmxvY2suICBOb3cgZGVzdHJveSB0aGUgaW5saW5lXG4mIzQzO1x0ICogZGF0YSBhbmQgcG9wdWxhdGUgdGhlIGV4dGVudCBlbnRyeSBhdG9taWNhbGx5IHVuZGVyIGlfZGF0YV9zZW1cbiYjNDM7XHQgKiAoaW5zaWRlIGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2spLiAgVGhpcyBlbnN1cmVzIG5vXG4mIzQzO1x0ICogY29uY3VycmVudCByZWFkZXIgc2VlcyBhbiBlbXB0eSBleHRlbnQgdHJlZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnJvciA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSwgcGJsayk7XG4gXHRpZiAoZXJyb3IpXG4tXHRcdGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbG9jLCBidWYsIGlubGluZV9zaXplKTtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWVfYmxvY2s7XG4gXG4mIzQzO1x0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuJiM0MztcdFx0aW5vZGUtXHUwMDNlaV9zaXplID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbiYjNDM7XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4mIzQzO1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4mIzQzO1x0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztvdXRfZnJlZV9ibG9jazpcbiYjNDM7XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIHBibGssIDEsIDApO1xuIG91dDpcbiBcdGJyZWxzZShkYXRhX2JoKTtcbiBcdGtmcmVlKGJ1Zik7XG5AQCAtMTgyMSw3ICYjNDM7MTQyMSw3IEBAIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGludCByZXQsIG5vX2V4cGFuZDtcbiBcbiBcdGV4dDRfd3JpdGVfbG9ja194YXR0cihpbm9kZSwgXHUwMDI2bm9fZXhwYW5kKTtcbi1cdHJldCA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSk7XG4mIzQzO1x0cmV0ID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlLCAwKTtcbiBcdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcdTAwMjZub19leHBhbmQpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xOTgwLDE4ICYjNDM7MTU4MCw2IEBAIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XG4gXHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbiBcdFx0cmV0dXJuIDA7XG4tXHR9IGVsc2UgaWYgKCFleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSkge1xuLVx0XHQvKlxuLVx0XHQgKiBJbm9kZSBoYXMgaW5saW5lIGRhdGEgYnV0IEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBIGlzXG4tXHRcdCAqIGNsZWFyZWQuIFRoaXMgbWVhbnMgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgbW92aW5nIG9mXG4tXHRcdCAqIGlubGluZSBkYXRhIHRvIGRlbGF5IGFsbG9jYXRlZCBibG9jay4gSnVzdCBmb3JjZSB3cml0ZW91dFxuLVx0XHQgKiBoZXJlIHRvIGZpbmlzaCBjb252ZXJzaW9uLlxuLVx0XHQgKi9cbi1cdFx0ZXJyb3IgPSBmaWxlbWFwX2ZsdXNoKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4tXHRcdGlmIChlcnJvcilcbi1cdFx0XHRyZXR1cm4gZXJyb3I7XG4tXHRcdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxuLVx0XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0bmVlZGVkX2Jsb2NrcyA9IGV4dDRfY2h1bmtfdHJhbnNfZXh0ZW50KGlub2RlLCAxKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGFkMTRkZDU4YTAwM2IzLi4yMjU2ZmIzODI2YTlkYiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMTMwMCw4ICYjNDM7MTMwMCw2IEBAIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRpZiAodW5saWtlbHkocmV0KSlcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdCpmc2RhdGEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZykqZnNkYXRhIFx1MDAyNiB+RVhUNF9XUklURV9EQVRBX0lOTElORSk7XG4tXG4gXHR0cmFjZV9leHQ0X3dyaXRlX2JlZ2luKGlub2RlLCBwb3MsIGxlbik7XG4gXHQvKlxuIFx0ICogUmVzZXJ2ZSBvbmUgYmxvY2sgbW9yZSBmb3IgYWRkaXRpb24gdG8gb3JwaGFuIGxpc3QgaW4gY2FzZVxuQEAgLTEzMTIsMTQgJiM0MzsxMzEwLDkgQEAgc3RhdGljIGludCBleHQ0X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdGluZGV4ID0gcG9zIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7XG4tXHRcdHJldCA9IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKG1hcHBpbmcsIGlub2RlLCBwb3MsIGxlbixcbi1cdFx0XHRcdFx0XHQgICAgZm9saW9wKTtcbiYjNDM7XHRcdHJldCA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0aWYgKHJldCA9PSAxKSB7XG4tXHRcdFx0KmZzZGF0YSA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKSpmc2RhdGEgfCBFWFQ0X1dSSVRFX0RBVEFfSU5MSU5FKTtcbi1cdFx0XHRyZXR1cm4gMDtcbi1cdFx0fVxuIFx0fVxuIFxuIFx0LypcbkBAIC0xNDUyLDEwICYjNDM7MTQ0NSw2IEBAIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFxuIFx0dHJhY2VfZXh0NF93cml0ZV9lbmQoaW5vZGUsIHBvcywgbGVuLCBjb3BpZWQpO1xuIFxuLVx0aWYgKCh1bnNpZ25lZCBsb25nKWZzZGF0YSBcdTAwMjYgRVhUNF9XUklURV9EQVRBX0lOTElORSlcbi1cdFx0cmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLFxuLVx0XHRcdFx0XHRcdCAgZm9saW8pO1xuLVxuIFx0Y29waWVkID0gYmxvY2tfd3JpdGVfZW5kKHBvcywgbGVuLCBjb3BpZWQsIGZvbGlvKTtcbiBcdC8qXG4gXHQgKiBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdXBkYXRlIGlfc2l6ZSB3aGlsZSBzdGlsbCBob2xkaW5nIGZvbGlvIGxvY2s6XG5AQCAtMTU2MSwxMCAmIzQzOzE1NTAsNiBAQCBzdGF0aWMgaW50IGV4dDRfam91cm5hbGxlZF93cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFxuIFx0QlVHX09OKCFleHQ0X2hhbmRsZV92YWxpZChoYW5kbGUpKTtcbiBcbi1cdGlmICgodW5zaWduZWQgbG9uZylmc2RhdGEgXHUwMDI2IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpXG4tXHRcdHJldHVybiBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChpbm9kZSwgcG9zLCBsZW4sIGNvcGllZCxcbi1cdFx0XHRcdFx0XHQgIGZvbGlvKTtcbi1cbiBcdGlmICh1bmxpa2VseShjb3BpZWQgXHUwMDNjIGxlbikgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkge1xuIFx0XHRjb3BpZWQgPSAwO1xuIFx0XHRleHQ0X2pvdXJuYWxsZWRfemVyb19uZXdfYnVmZmVycyhoYW5kbGUsIGlub2RlLCBmb2xpbyxcbkBAIC0zMTczLDEwICYjNDM7MzE1OCw2IEBAIHN0YXRpYyBpbnQgZXh0NF9kYV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRcdFx0XHRcdFx0ICAgICBmb2xpb3AsIHRydWUpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdGlmIChyZXQgPT0gMSkge1xuLVx0XHRcdCpmc2RhdGEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZykqZnNkYXRhIHwgRVhUNF9XUklURV9EQVRBX0lOTElORSk7XG4tXHRcdFx0cmV0dXJuIDA7XG4tXHRcdH1cbiBcdH1cbiBcbiByZXRyeTpcbkBAIC0zMzEzLDEwICYjNDM7MzI5NCw2IEBAIHN0YXRpYyBpbnQgZXh0NF9kYV93cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFxuIFx0dHJhY2VfZXh0NF9kYV93cml0ZV9lbmQoaW5vZGUsIHBvcywgbGVuLCBjb3BpZWQpO1xuIFxuLVx0aWYgKHdyaXRlX21vZGUgXHUwMDI2IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpXG4tXHRcdHJldHVybiBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChpbm9kZSwgcG9zLCBsZW4sIGNvcGllZCxcbi1cdFx0XHRcdFx0XHQgIGZvbGlvKTtcbi1cbiBcdGlmICh1bmxpa2VseShjb3BpZWQgXHUwMDNjIGxlbikgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcbiBcdFx0Y29waWVkID0gMDtcbiBcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDZjMThiNWFkZmZjYTMyLi45OTEzZTMwYjcwNDAwOCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtMzE0NSw2ICYjNDM7MzE0NSwxMiBAQCBzdGF0aWMgaW50IGV4dDRfc2V0dXBfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLFxuIFx0XHRleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLFxuIFx0XHRcdCBcJiMzNDt3YXJuaW5nOiBjaGVja3RpbWUgcmVhY2hlZCwgXCYjMzQ7XG4gXHRcdFx0IFwmIzM0O3J1bm5pbmcgZTJmc2NrIGlzIHJlY29tbWVuZGVkXCYjMzQ7KTtcbiYjNDM7XHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9pbmxpbmVfZGF0YShzYikpXG4mIzQzO1x0XHRleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLFxuJiM0MztcdFx0XHQgXCYjMzQ7d2FybmluZzogaW5saW5lX2RhdGEgZmVhdHVyZSBpcyBkZXByZWNhdGVkIGFuZCBcJiMzNDtcbiYjNDM7XHRcdFx0IFwmIzM0O3dpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBrZXJuZWwgcmVsZWFzZS4gXCYjMzQ7XG4mIzQzO1x0XHRcdCBcJiMzNDtVc2UgJiMzOTt0dW5lMmZzIC1PIF5pbmxpbmVfZGF0YSYjMzk7IHRvIGNvbnZlcnQuXCYjMzQ7KTtcbiYjNDM7XG4gXHRpZiAoIXNiaS1cdTAwM2VzX2pvdXJuYWwpXG4gXHRcdGVzLVx1MDAzZXNfc3RhdGUgXHUwMDI2PSBjcHVfdG9fbGUxNih+RVhUNF9WQUxJRF9GUyk7XG4gXHRpZiAoIShfX3MxNikgbGUxNl90b19jcHUoZXMtXHUwMDNlc19tYXhfbW50X2NvdW50KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMDoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF9kZXN0cm95X2lubGluZV9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGRlcHJlY2F0ZXMgdGhlIGlubGluZV9kYXRhIGZlYXR1cmUgZm9yIHJlZ3VsYXIgZmlsZXMgaW4gZXh0NCwgZm9yY2luZyBjb252ZXJzaW9uIHRvIGJsb2NrLWJhc2VkIHN0b3JhZ2Ugb24gd3JpdGUuIFRoaXMgbW9kaWZpZXMgY29yZSBleHQ0IHdyaXRlIHBhdGhzIGFuZCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2E1MzBkMGY1NDA3ZjBmZGRiOTQyYmUxNGRjN2IzY2M5MDRjNTQxMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDI4IDAwOjEzOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0L2lubGluZWRhdGEucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0L2lubGluZWRhdGEucnN0CmluZGV4IGE3MjhhZjBkMmZkMGM1Li44ZGMxYjZkNzUzODhkNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0L2lubGluZWRhdGEucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC9pbmxpbmVkYXRhLnJzdApAQCAtMyw2ICYjNDM7MywxNCBAQAogSW5saW5lIERhdGEKIC0tLS0tLS0tLS0tCiAKJiM0MzsuLiB3YXJuaW5nOjoKJiM0MzsKJiM0MzsgICBUaGUgaW5saW5lIGRhdGEgZmVhdHVyZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUKJiM0MzsgICBrZXJuZWwgcmVsZWFzZS4gIE5ldyByZWd1bGFyIGZpbGUgaW5vZGVzIG5vIGxvbmdlciBzdG9yZSBkYXRhIGlubGluZSwKJiM0MzsgICBhbmQgd3JpdGVzIHRvIGV4aXN0aW5nIGlubGluZSBkYXRhIGlub2RlcyB0cmlnZ2VyIGF1dG9tYXRpYyBjb252ZXJzaW9uCiYjNDM7ICAgdG8gYmxvY2stYmFzZWQgc3RvcmFnZS4gIFVzZSBgYHR1bmUyZnMgLU8gXmlubGluZV9kYXRhYGAgdG8gY29udmVydAomIzQzOyAgIGV4aXN0aW5nIGZpbGVzeXN0ZW1zLgomIzQzOwogVGhlIGlubGluZSBkYXRhIGZlYXR1cmUgd2FzIGRlc2lnbmVkIHRvIGhhbmRsZSB0aGUgY2FzZSB0aGF0IGEgZmlsZSYjMzk7cwogZGF0YSBpcyBzbyB0aW55IHRoYXQgaXQgcmVhZGlseSBmaXRzIGluc2lkZSB0aGUgaW5vZGUsIHdoaWNoCiAodGhlb3JldGljYWxseSkgcmVkdWNlcyBkaXNrIGJsb2NrIGNvbnN1bXB0aW9uIGFuZCByZWR1Y2VzIHNlZWtzLiBJZiB0aGUKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggMjFhOTUxZjEwNjM2NzguLjgzMmJjMWYzYjYwMDI3IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMzE0OCw3ICYjNDM7MzE0OCw2IEBAIGludCBkb19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKIHZvaWQgZXh0NF9zZXRfaW5vZGVfbWFwcGluZ19vcmRlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKICNkZWZpbmUgRkFMTF9CQUNLX1RPX05PTkRFTEFMTE9DIDEKLSNkZWZpbmUgRVhUNF9XUklURV9EQVRBX0lOTElORQkgMgogCiB0eXBlZGVmIGVudW0gewogCUVYVDRfSUdFVF9OT1JNQUwgPQkwLApAQCAtMzc1OSwxMiAmIzQzOzM3NTgsNiBAQCBleHRlcm4gaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiB2b2lkIGV4dDRfdXBkYXRlX2ZpbmFsX2RlKHZvaWQgKmRlX2J1ZiwgaW50IG9sZF9zaXplLCBpbnQgbmV3X3NpemUpOwogCiBpbnQgZXh0NF9yZWFkcGFnZV9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1leHRlcm4gaW50IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJCQkgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwKLQkJCQkJIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCk7Ci1pbnQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLAotCQkJICAgICAgIHVuc2lnbmVkIGNvcGllZCwgc3RydWN0IGZvbGlvICpmb2xpbyk7CiBleHRlcm4gaW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaWFsbG9jLmMgYi9mcy9leHQ0L2lhbGxvYy5jCmluZGV4IGE0MGNiMjdmODExNmNiLi4yNzhmMGFiOGM5OTZlNCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lhbGxvYy5jCkBAIC0xMzA1LDggJiM0MzsxMzA1LDggQEAgc3RydWN0IGlub2RlICpfX2V4dDRfbmV3X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCiAJZWktJmd0O2lfZXh0cmFfaXNpemUgPSBzYmktJmd0O3Nfd2FudF9leHRyYV9pc2l6ZTsKIAllaS0mZ3Q7aV9pbmxpbmVfb2ZmID0gMDsKLQlpZiAoZXh0NF9oYXNfZmVhdHVyZV9pbmxpbmVfZGF0YShzYikgJmFtcDsmYW1wOwotCSAgICAoIShlaS0mZ3Q7aV9mbGFncyAmYW1wOyAoRVhUNF9EQVhfRkx8RVhUNF9FQV9JTk9ERV9GTCkpIHx8IFNfSVNESVIobW9kZSkpKQomIzQzOwlpZiAoZXh0NF9oYXNfZmVhdHVyZV9pbmxpbmVfZGF0YShzYikgJmFtcDsmYW1wOyBTX0lTRElSKG1vZGUpICZhbXA7JmFtcDsKJiM0MzsJICAgICEoZWktJmd0O2lfZmxhZ3MgJmFtcDsgRVhUNF9EQVhfRkwpKQogCQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpOwogCXJldCA9IGlub2RlOwogCWVyciA9IGRxdW90X2FsbG9jX2lub2RlKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jCmluZGV4IGNlZWU2OWE2NjQ4MmJjLi5lMGI4MDI3M2UzMjJkOCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbmxpbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lubGluZS5jCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogCiAjaW5jbHVkZSAmIzM0O2V4dDRfamJkMi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZXh0NC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2V4dDRfZXh0ZW50cy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGF0dHIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RydW5jYXRlLmgmIzM0OwogCkBAIC0yMCwxMCAmIzQzOzIxLDYgQEAKICNkZWZpbmUgRVhUNF9JTkxJTkVfRE9URE9UX09GRlNFVAkyCiAjZGVmaW5lIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFCQk0CiAKLQotc3RhdGljIGludCBleHQ0X2RhX2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotCiBzdGF0aWMgaW50IGV4dDRfZ2V0X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJaWYgKEVYVDRfSShpbm9kZSktJmd0O2lfaW5saW5lX29mZikKQEAgLTIxOCw1MSAmIzQzOzIxNSw2IEBAIHN0YXRpYyBpbnQgZXh0NF9yZWFkX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZmZlciwKIAlyZXR1cm4gY3BfbGVuOwogfQogCi0vKgotICogd3JpdGUgdGhlIGJ1ZmZlciB0byB0aGUgaW5saW5lIGlub2RlLgotICogSWYgJiMzOTtjcmVhdGUmIzM5OyBpcyBzZXQsIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGRvIHRoZSBleHRyYSBjb3B5IGluIHRoZSB4YXR0cgotICogdmFsdWUgc2luY2UgaXQgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IGV4dDRfeGF0dHJfaWJvZHlfc2V0LgotICogVGhhdCBzYXZlcyB1cyBvbmUgbWVtY3B5LgotICovCi1zdGF0aWMgdm9pZCBleHQ0X3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MsCi0JCQkJICAgdm9pZCAqYnVmZmVyLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCXN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIgKmhlYWRlcjsKLQlzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlOwotCWludCBjcF9sZW4gPSAwOwotCi0JaWYgKHVubGlrZWx5KGV4dDRfZW1lcmdlbmN5X3N0YXRlKGlub2RlLSZndDtpX3NiKSkpCi0JCXJldHVybjsKLQotCUJVR19PTighRVhUNF9JKGlub2RlKS0mZ3Q7aV9pbmxpbmVfb2ZmKTsKLQlCVUdfT04ocG9zICYjNDM7IGxlbiAmZ3Q7IEVYVDRfSShpbm9kZSktJmd0O2lfaW5saW5lX3NpemUpOwotCi0JcmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoaWxvYyk7Ci0JYnVmZmVyICYjNDM7PSBwb3M7Ci0KLQlpZiAocG9zICZsdDsgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSkgewotCQljcF9sZW4gPSBwb3MgJiM0MzsgbGVuICZndDsgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSA/Ci0JCQkgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSAtIHBvcyA6IGxlbjsKLQkJbWVtY3B5KCh2b2lkICopcmF3X2lub2RlLSZndDtpX2Jsb2NrICYjNDM7IHBvcywgYnVmZmVyLCBjcF9sZW4pOwotCi0JCWxlbiAtPSBjcF9sZW47Ci0JCWJ1ZmZlciAmIzQzOz0gY3BfbGVuOwotCQlwb3MgJiM0Mzs9IGNwX2xlbjsKLQl9Ci0KLQlpZiAoIWxlbikKLQkJcmV0dXJuOwotCi0JcG9zIC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7Ci0JaGVhZGVyID0gSUhEUihpbm9kZSwgcmF3X2lub2RlKTsKLQllbnRyeSA9IChzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqKSgodm9pZCAqKXJhd19pbm9kZSAmIzQzOwotCQkJCQkgICAgRVhUNF9JKGlub2RlKS0mZ3Q7aV9pbmxpbmVfb2ZmKTsKLQotCW1lbWNweSgodm9pZCAqKUlGSVJTVChoZWFkZXIpICYjNDM7IGxlMTZfdG9fY3B1KGVudHJ5LSZndDtlX3ZhbHVlX29mZnMpICYjNDM7IHBvcywKLQkgICAgICAgYnVmZmVyLCBsZW4pOwotfQotCiBzdGF0aWMgaW50IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbGVuKQogewpAQCAtNDMzLDcgJiM0MzszODUsOCBAQCBzdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogfQogCiBzdGF0aWMgaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkJICAgc3RydWN0IGlub2RlICppbm9kZSkKJiM0MzsJCQkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCQkgICBleHQ0X2ZzYmxrX3QgcGJsaykKIHsKIAlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CiAJc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHsKQEAgLTQ4MSw3ICYjNDM7NDM0LDIxIEBAIHN0YXRpYyBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLAogCQkgICAgU19JU1JFRyhpbm9kZS0mZ3Q7aV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLSZndDtpX21vZGUpKSB7CiAJCQlleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpOwogCQkJZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgaW5vZGUpOwomIzQzOwkJCWlmIChwYmxrKSB7CiYjNDM7CQkJCXN0cnVjdCBleHQ0X2V4dGVudF9oZWFkZXIgKmVoOwomIzQzOwkJCQlzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4OwomIzQzOwomIzQzOwkJCQllaCA9IGV4dF9pbm9kZV9oZHIoaW5vZGUpOwomIzQzOwkJCQlleCA9IEVYVF9GSVJTVF9FWFRFTlQoZWgpOwomIzQzOwkJCQlleC0mZ3Q7ZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTsKJiM0MzsJCQkJZXgtJmd0O2VlX2xlbiA9IGNwdV90b19sZTE2KDEpOwomIzQzOwkJCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIHBibGspOwomIzQzOwkJCQllaC0mZ3Q7ZWhfZW50cmllcyA9IGNwdV90b19sZTE2KDEpOwomIzQzOwkJCX0KIAkJfQomIzQzOwl9IGVsc2UgaWYgKHBibGspIHsKJiM0MzsJCS8qIGluZGlyZWN0IG1hcHBpbmc6IHNldCBpX2RhdGFbMF0gZGlyZWN0bHkgKi8KJiM0MzsJCUVYVDRfSShpbm9kZSktJmd0O2lfZGF0YVswXSA9IGNwdV90b19sZTMyKHBibGspOwogCX0KIAlleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpOwogCkBAIC01NjgsMTIyICYjNDM7NTM1LDYgQEAgaW50IGV4dDRfcmVhZHBhZ2VfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuIHJldCAmZ3Q7PSAwID8gMCA6IHJldDsKIH0KIAotc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWludCByZXQsIG5lZWRlZF9ibG9ja3MsIG5vX2V4cGFuZDsKLQloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKLQlpbnQgcmV0cmllcyA9IDAsIHNlbV9oZWxkID0gMDsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDsKLQl1bnNpZ25lZCBmcm9tLCB0bzsKLQlzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7Ci0KLQlpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkgewotCQkvKgotCQkgKiBjbGVhciB0aGUgZmxhZyBzbyB0aGF0IG5vIG5ldyB3cml0ZQotCQkgKiB3aWxsIHRyYXAgaGVyZSBhZ2Fpbi4KLQkJICovCi0JCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbmVlZGVkX2Jsb2NrcyA9IGV4dDRfY2h1bmtfdHJhbnNfZXh0ZW50KGlub2RlLCAxKTsKLQotCXJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgJmFtcDtpbG9jKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi1yZXRyeToKLQloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfV1JJVEVfUEFHRSwgbmVlZGVkX2Jsb2Nrcyk7Ci0JaWYgKElTX0VSUihoYW5kbGUpKSB7Ci0JCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKLQkJaGFuZGxlID0gTlVMTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogV2UgY2Fubm90IHJlY3Vyc2UgaW50byB0aGUgZmlsZXN5c3RlbSBhcyB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeQotCSAqIHN0YXJ0ZWQgKi8KLQlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4gfCBGR1BfTk9GUywKLQkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwotCWlmIChJU19FUlIoZm9saW8pKSB7Ci0JCXJldCA9IFBUUl9FUlIoZm9saW8pOwotCQlnb3RvIG91dF9ub2ZvbGlvOwotCX0KLQotCWV4dDRfd3JpdGVfbG9ja194YXR0cihpbm9kZSwgJmFtcDtub19leHBhbmQpOwotCXNlbV9oZWxkID0gMTsKLQkvKiBJZiBzb21lIG9uZSBoYXMgYWxyZWFkeSBkb25lIHRoaXMgZm9yIHVzLCBqdXN0IGV4aXQuICovCi0JaWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHsKLQkJcmV0ID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZnJvbSA9IDA7Ci0JdG8gPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7Ci0JaWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkgewotCQlyZXQgPSBleHQ0X3JlYWRfaW5saW5lX2ZvbGlvKGlub2RlLCBmb2xpbyk7Ci0JCWlmIChyZXQgJmx0OyAwKQotCQkJZ290byBvdXQ7Ci0JfQotCi0JZXh0NF9mY190cmFja19pbm9kZShoYW5kbGUsIGlub2RlKTsKLQlyZXQgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JaWYgKGV4dDRfc2hvdWxkX2Rpb3JlYWRfbm9sb2NrKGlub2RlKSkgewotCQlyZXQgPSBleHQ0X2Jsb2NrX3dyaXRlX2JlZ2luKGhhbmRsZSwgZm9saW8sIGZyb20sIHRvLAotCQkJCQkgICAgIGV4dDRfZ2V0X2Jsb2NrX3Vud3JpdHRlbik7Ci0JfSBlbHNlCi0JCXJldCA9IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oaGFuZGxlLCBmb2xpbywgZnJvbSwgdG8sCi0JCQkJCSAgICAgZXh0NF9nZXRfYmxvY2spOwotCWNsZWFyX2J1ZmZlcl9uZXcoZm9saW9fYnVmZmVycyhmb2xpbykpOwotCi0JaWYgKCFyZXQgJmFtcDsmYW1wOyBleHQ0X3Nob3VsZF9qb3VybmFsX2RhdGEoaW5vZGUpKSB7Ci0JCXJldCA9IGV4dDRfd2Fsa19wYWdlX2J1ZmZlcnMoaGFuZGxlLCBpbm9kZSwKLQkJCQkJICAgICBmb2xpb19idWZmZXJzKGZvbGlvKSwgZnJvbSwgdG8sCi0JCQkJCSAgICAgTlVMTCwgZG9fam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKTsKLQl9Ci0KLQlpZiAocmV0KSB7Ci0JCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0JCWZvbGlvX3B1dChmb2xpbyk7Ci0JCWZvbGlvID0gTlVMTDsKLQkJZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpOwotCQlleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgJmFtcDtub19leHBhbmQpOwotCQlzZW1faGVsZCA9IDA7Ci0JCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JCWhhbmRsZSA9IE5VTEw7Ci0JCWV4dDRfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKGlub2RlKTsKLQkJLyoKLQkJICogSWYgdHJ1bmNhdGUgZmFpbGVkIGVhcmx5IHRoZSBpbm9kZSBtaWdodAotCQkgKiBzdGlsbCBiZSBvbiB0aGUgb3JwaGFuIGxpc3Q7IHdlIG5lZWQgdG8KLQkJICogbWFrZSBzdXJlIHRoZSBpbm9kZSBpcyByZW1vdmVkIGZyb20gdGhlCi0JCSAqIG9ycGhhbiBsaXN0IGluIHRoYXQgY2FzZS4KLQkJICovCi0JCWlmIChpbm9kZS0mZ3Q7aV9ubGluaykKLQkJCWV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7Ci0JfQotCi0JaWYgKHJldCA9PSAtRU5PU1BDICZhbXA7JmFtcDsgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtJmd0O2lfc2IsICZhbXA7cmV0cmllcykpCi0JCWdvdG8gcmV0cnk7Ci0KLQlpZiAoZm9saW8pCi0JCWJsb2NrX2NvbW1pdF93cml0ZShmb2xpbywgZnJvbSwgdG8pOwotb3V0OgotCWlmIChmb2xpbykgewotCQlmb2xpb191bmxvY2soZm9saW8pOwotCQlmb2xpb19wdXQoZm9saW8pOwotCX0KLW91dF9ub2ZvbGlvOgotCWlmIChzZW1faGVsZCkKLQkJZXh0NF93cml0ZV91bmxvY2tfeGF0dHIoaW5vZGUsICZhbXA7bm9fZXhwYW5kKTsKLQlpZiAoaGFuZGxlKQotCQlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwotCWJyZWxzZShpbG9jLmJoKTsKLQlyZXR1cm4gcmV0OwotfQotCiAvKgogICogUHJlcGFyZSB0aGUgd3JpdGUgZm9yIHRoZSBpbmxpbmUgZGF0YS4KICAqIElmIHRoZSBkYXRhIGNhbiBiZSB3cml0dGVuIGludG8gdGhlIGlub2RlLCB3ZSBqdXN0IHJlYWQKQEAgLTY5OCwyNDggJiM0Mzs1NDksOCBAQCBpbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCQkgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwKIAkJCQkJICBib29sIGRhKQogewotCWludCByZXQ7Ci0JaGFuZGxlX3QgKmhhbmRsZTsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwotCXN0cnVjdCBleHQ0X2lsb2MgaWxvYzsKLQlpbnQgcmV0cmllcyA9IDA7Ci0KLQlyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsICZhbXA7aWxvYyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotcmV0cnlfam91cm5hbDoKLQloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfSU5PREUsIDEpOwotCWlmIChJU19FUlIoaGFuZGxlKSkgewotCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7Ci0JCWdvdG8gb3V0X3JlbGVhc2VfYmg7Ci0JfQotCi0JcmV0ID0gZXh0NF9wcmVwYXJlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIHBvcyAmIzQzOyBsZW4pOwotCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVOT1NQQykKLQkJZ290byBvdXRfc3RvcF9qb3VybmFsOwotCi0JaWYgKHJldCA9PSAtRU5PU1BDKSB7Ci0JCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JCWlmICghZGEpIHsKLQkJCWJyZWxzZShpbG9jLmJoKTsKLQkJCS8qIFJldHJ5IGluc2lkZSAqLwotCQkJcmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQobWFwcGluZywgaW5vZGUpOwotCQl9Ci0KLQkJcmV0ID0gZXh0NF9kYV9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7Ci0JCWlmIChyZXQgPT0gLUVOT1NQQyAmYW1wOyZhbXA7Ci0JCSAgICBleHQ0X3Nob3VsZF9yZXRyeV9hbGxvYyhpbm9kZS0mZ3Q7aV9zYiwgJmFtcDtyZXRyaWVzKSkKLQkJCWdvdG8gcmV0cnlfam91cm5hbDsKLQkJZ290byBvdXRfcmVsZWFzZV9iaDsKLQl9Ci0KLQlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4gfCBGR1BfTk9GUywKLQkJCQkJbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7Ci0JaWYgKElTX0VSUihmb2xpbykpIHsKLQkJcmV0ID0gUFRSX0VSUihmb2xpbyk7Ci0JCWdvdG8gb3V0X3N0b3Bfam91cm5hbDsKLQl9Ci0KLQlkb3duX3JlYWQoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDt4YXR0cl9zZW0pOwotCS8qIFNvbWVvbmUgZWxzZSBoYWQgY29udmVydGVkIGl0IHRvIGV4dGVudCAqLwotCWlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0X3JlbGVhc2VfZm9saW87Ci0JfQotCi0JaWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkgewotCQlyZXQgPSBleHQ0X3JlYWRfaW5saW5lX2ZvbGlvKGlub2RlLCBmb2xpbyk7Ci0JCWlmIChyZXQgJmx0OyAwKQotCQkJZ290byBvdXRfcmVsZWFzZV9mb2xpbzsKLQl9Ci0KLQlyZXQgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLSZndDtpX3NiLCBpbG9jLmJoLCBFWFQ0X0pUUl9OT05FKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9yZWxlYXNlX2ZvbGlvOwotCSpmb2xpb3AgPSBmb2xpbzsKLQl1cF9yZWFkKCZhbXA7RVhUNF9JKGlub2RlKS0mZ3Q7eGF0dHJfc2VtKTsKLQlicmVsc2UoaWxvYy5iaCk7Ci0JcmV0dXJuIDE7Ci0KLW91dF9yZWxlYXNlX2ZvbGlvOgotCXVwX3JlYWQoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDt4YXR0cl9zZW0pOwotCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0JZm9saW9fcHV0KGZvbGlvKTsKLW91dF9zdG9wX2pvdXJuYWw6Ci0JZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKLW91dF9yZWxlYXNlX2JoOgotCWJyZWxzZShpbG9jLmJoKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogVHJ5IHRvIHdyaXRlIGRhdGEgaW4gdGhlIGlub2RlLgotICogSWYgdGhlIGlub2RlIGhhcyBpbmxpbmUgZGF0YSwgY2hlY2sgd2hldGhlciB0aGUgbmV3IHdyaXRlIGNhbiBiZQotICogaW4gdGhlIGlub2RlIGFsc28uIElmIG5vdCwgY3JlYXRlIHRoZSBwYWdlIHRoZSBoYW5kbGUsIG1vdmUgdGhlIGRhdGEKLSAqIHRvIHRoZSBwYWdlIG1ha2UgaXQgdXBkYXRlIGFuZCBsZXQgdGhlIGxhdGVyIGNvZGVzIGNyZWF0ZSBleHRlbnQgZm9yIGl0LgotICovCi1pbnQgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLAotCQkJCSAgc3RydWN0IGZvbGlvICoqZm9saW9wKQotewotCWlmIChwb3MgJiM0MzsgbGVuICZndDsgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKGlub2RlKSkKLQkJcmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQobWFwcGluZywgaW5vZGUpOwotCXJldHVybiBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEobWFwcGluZywgaW5vZGUsIHBvcywgbGVuLAotCQkJCQkgICAgICBmb2xpb3AsIGZhbHNlKTsKLX0KLQotaW50IGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwKLQkJCSAgICAgICB1bnNpZ25lZCBjb3BpZWQsIHN0cnVjdCBmb2xpbyAqZm9saW8pCi17Ci0JaGFuZGxlX3QgKmhhbmRsZSA9IGV4dDRfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpOwotCWludCBub19leHBhbmQ7Ci0Jdm9pZCAqa2FkZHI7Ci0Jc3RydWN0IGV4dDRfaWxvYyBpbG9jOwotCWludCByZXQgPSAwLCByZXQyOwotCi0JaWYgKHVubGlrZWx5KGNvcGllZCAmbHQ7IGxlbikgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpCi0JCWNvcGllZCA9IDA7Ci0KLQlpZiAobGlrZWx5KGNvcGllZCkpIHsKLQkJcmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCAmYW1wO2lsb2MpOwotCQlpZiAocmV0KSB7Ci0JCQlmb2xpb191bmxvY2soZm9saW8pOwotCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCWV4dDRfc3RkX2Vycm9yKGlub2RlLSZndDtpX3NiLCByZXQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJZXh0NF93cml0ZV9sb2NrX3hhdHRyKGlub2RlLCAmYW1wO25vX2V4cGFuZCk7Ci0JCS8qCi0JCSAqIFdlIGNvdWxkIGhhdmUgcmFjZWQgd2l0aCBleHQ0X3BhZ2VfbWt3cml0ZSgpIGNvbnZlcnRpbmcKLQkJICogdGhlIGlub2RlIGFuZCBjbGVhcmluZyB0aGUgaW5saW5lIGRhdGEgZmxhZywgc28gd2UganVzdAotCQkgKiByZWxlYXNlIHJlc291cmNlcyBhbmQgcmV0cnkgdGhlIHdob2xlIHdyaXRlLgotCQkgKi8KLQkJaWYgKHVubGlrZWx5KCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpKSB7Ci0JCQlleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgJmFtcDtub19leHBhbmQpOwotCQkJYnJlbHNlKGlsb2MuYmgpOwotCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKLQkJCWZvbGlvX3B1dChmb2xpbyk7Ci0JCQlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQkvKgotCQkgKiBlaS0mZ3Q7aV9pbmxpbmVfb2ZmIG1heSBoYXZlIGNoYW5nZWQgc2luY2UKLQkJICogZXh0NF93cml0ZV9iZWdpbigpIGNhbGxlZAotCQkgKiBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YSgpCi0JCSAqLwotCQkodm9pZCkgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7Ci0KLQkJa2FkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCAwKTsKLQkJZXh0NF93cml0ZV9pbmxpbmVfZGF0YShpbm9kZSwgJmFtcDtpbG9jLCBrYWRkciwgcG9zLCBjb3BpZWQpOwotCQlrdW5tYXBfbG9jYWwoa2FkZHIpOwotCQlmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTsKLQkJLyogY2xlYXIgZGlydHkgZmxhZyBzbyB0aGF0IHdyaXRlcGFnZXMgd291bGRuJiMzOTt0IHdvcmsgZm9yIHVzLiAqLwotCQlmb2xpb19jbGVhcl9kaXJ0eShmb2xpbyk7Ci0KLQkJZXh0NF93cml0ZV91bmxvY2tfeGF0dHIoaW5vZGUsICZhbXA7bm9fZXhwYW5kKTsKLQkJYnJlbHNlKGlsb2MuYmgpOwotCi0JCS8qCi0JCSAqIEl0JiMzOTtzIGltcG9ydGFudCB0byB1cGRhdGUgaV9zaXplIHdoaWxlIHN0aWxsIGhvbGRpbmcgZm9saW8KLQkJICogbG9jazogcGFnZSB3cml0ZW91dCBjb3VsZCBvdGhlcndpc2UgY29tZSBpbiBhbmQgemVybwotCQkgKiBiZXlvbmQgaV9zaXplLgotCQkgKi8KLQkJZXh0NF91cGRhdGVfaW5vZGVfc2l6ZShpbm9kZSwgcG9zICYjNDM7IGNvcGllZCk7Ci0JfQotCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0JZm9saW9fcHV0KGZvbGlvKTsKLQotCS8qCi0JICogRG9uJiMzOTt0IG1hcmsgdGhlIGlub2RlIGRpcnR5IHVuZGVyIGZvbGlvIGxvY2suIEZpcnN0LCBpdCB1bm5lY2Vzc2FyaWx5Ci0JICogbWFrZXMgdGhlIGhvbGRpbmcgdGltZSBvZiBmb2xpbyBsb2NrIGxvbmdlci4gU2Vjb25kLCBpdCBmb3JjZXMgbG9jawotCSAqIG9yZGVyaW5nIG9mIGZvbGlvIGxvY2sgYW5kIHRyYW5zYWN0aW9uIHN0YXJ0IGZvciBqb3VybmFsaW5nCi0JICogZmlsZXN5c3RlbXMuCi0JICovCi0JaWYgKGxpa2VseShjb3BpZWQpKQotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLW91dDoKLQkvKgotCSAqIElmIHdlIGRpZG4mIzM5O3QgY29weSBhcyBtdWNoIGRhdGEgYXMgZXhwZWN0ZWQsIHdlIG5lZWQgdG8gdHJpbSBiYWNrCi0JICogc2l6ZSBvZiB4YXR0ciBjb250YWluaW5nIGlubGluZSBkYXRhLgotCSAqLwotCWlmIChwb3MgJiM0MzsgbGVuICZndDsgaW5vZGUtJmd0O2lfc2l6ZSAmYW1wOyZhbXA7IGV4dDRfY2FuX3RydW5jYXRlKGlub2RlKSkKLQkJZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpOwotCi0JcmV0MiA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IHJldDI7Ci0JaWYgKHBvcyAmIzQzOyBsZW4gJmd0OyBpbm9kZS0mZ3Q7aV9zaXplKSB7Ci0JCWV4dDRfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKGlub2RlKTsKLQkJLyoKLQkJICogSWYgdHJ1bmNhdGUgZmFpbGVkIGVhcmx5IHRoZSBpbm9kZSBtaWdodCBzdGlsbCBiZQotCQkgKiBvbiB0aGUgb3JwaGFuIGxpc3Q7IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbm9kZQotCQkgKiBpcyByZW1vdmVkIGZyb20gdGhlIG9ycGhhbiBsaXN0IGluIHRoYXQgY2FzZS4KLQkJICovCi0JCWlmIChpbm9kZS0mZ3Q7aV9ubGluaykKLQkJCWV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7Ci0JfQotCXJldHVybiByZXQgPyByZXQgOiBjb3BpZWQ7Ci19Ci0KLS8qCi0gKiBUcnkgdG8gbWFrZSB0aGUgcGFnZSBjYWNoZSBhbmQgaGFuZGxlIHJlYWR5IGZvciB0aGUgaW5saW5lIGRhdGEgY2FzZS4KLSAqIFdlIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gMiBjYXNlczoKLSAqIDEuIFRoZSBpbm9kZSBpcyBjcmVhdGVkIGFuZCB0aGUgZmlyc3Qgd3JpdGUgZXhjZWVkcyBpbmxpbmUgc2l6ZS4gV2UgY2FuCi0gKiAgICBjbGVhciB0aGUgaW5vZGUgc3RhdGUgc2FmZWx5LgotICogMi4gVGhlIGlub2RlIGhhcyBpbmxpbmUgZGF0YSwgdGhlbiB3ZSBuZWVkIHRvIHJlYWQgdGhlIGRhdGEsIG1ha2UgaXQKLSAqICAgIHVwZGF0ZSBhbmQgZGlydHkgc28gdGhhdCBleHQ0X2RhX3dyaXRlcGFnZXMgY2FuIGhhbmRsZSBpdC4gV2UgZG9uJiMzOTt0Ci0gKiAgICBuZWVkIHRvIHN0YXJ0IHRoZSBqb3VybmFsIHNpbmNlIHRoZSBmaWxlJiMzOTtzIG1ldGFkYXRhIGlzbiYjMzk7dCBjaGFuZ2VkIG5vdy4KLSAqLwotc3RhdGljIGludCBleHQ0X2RhX2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaW50IHJldCA9IDAsIGlubGluZV9zaXplOwotCXN0cnVjdCBmb2xpbyAqZm9saW87Ci0KLQlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sCi0JCQkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwotCWlmIChJU19FUlIoZm9saW8pKQotCQlyZXR1cm4gUFRSX0VSUihmb2xpbyk7Ci0KLQlkb3duX3JlYWQoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDt4YXR0cl9zZW0pOwotCWlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7Ci0JCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7Ci0KLQlpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7Ci0JCXJldCA9IGV4dDRfcmVhZF9pbmxpbmVfZm9saW8oaW5vZGUsIGZvbGlvKTsKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSBleHQ0X2Jsb2NrX3dyaXRlX2JlZ2luKE5VTEwsIGZvbGlvLCAwLCBpbmxpbmVfc2l6ZSwKLQkJCQkgICAgIGV4dDRfZGFfZ2V0X2Jsb2NrX3ByZXApOwotCWlmIChyZXQpIHsKLQkJdXBfcmVhZCgmYW1wO0VYVDRfSShpbm9kZSktJmd0O3hhdHRyX3NlbSk7Ci0JCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0JCWZvbGlvX3B1dChmb2xpbyk7Ci0JCWV4dDRfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKGlub2RlKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQljbGVhcl9idWZmZXJfbmV3KGZvbGlvX2J1ZmZlcnMoZm9saW8pKTsKLQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKLQlmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTsKLQlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7Ci0KLW91dDoKLQl1cF9yZWFkKCZhbXA7RVhUNF9JKGlub2RlKS0mZ3Q7eGF0dHJfc2VtKTsKLQlpZiAoZm9saW8pIHsKLQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKLQkJZm9saW9fcHV0KGZvbGlvKTsKLQl9Ci0JcmV0dXJuIHJldDsKJiM0MzsJLyogSW5saW5lIGRhdGEgaXMgZGVwcmVjYXRlZDogYWx3YXlzIGNvbnZlcnQgdG8gYmxvY2sgZm9ybWF0ICovCiYjNDM7CXJldHVybiBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpOwogfQogCiAjaWZkZWYgSU5MSU5FX0RJUl9ERUJVRwpAQCAtMTA3OSwyMyAmIzQzOzY5MCw2IEBAIHN0YXRpYyBpbnQgZXh0NF91cGRhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLAotCQkJCSAgICAgdm9pZCAqYnVmLCBpbnQgaW5saW5lX3NpemUpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlubGluZV9zaXplKTsKLQlpZiAocmV0KSB7Ci0JCWV4dDRfbXNnKGlub2RlLSZndDtpX3NiLCBLRVJOX0VNRVJHLAotCQkJJiMzNDtlcnJvciByZXN0b3JpbmcgaW5saW5lX2RhdGEgZm9yIGlub2RlIC0tIHBvdGVudGlhbCBkYXRhIGxvc3MhIChpbm9kZSAlbGx1LCBlcnJvciAlZCkmIzM0OywKLQkJCWlub2RlLSZndDtpX2lubywgcmV0KTsKLQkJcmV0dXJuOwotCX0KLQlleHQ0X3dyaXRlX2lubGluZV9kYXRhKGlub2RlLCBpbG9jLCBidWYsIDAsIGlubGluZV9zaXplKTsKLQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpOwotfQotCiBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSwKIAkJCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYykKQEAgLTExMDMsNyAmIzQzOzY5Nyw3IEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLAogCWludCBlcnJvcjsKIAl2b2lkICpidWYgPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGF0YV9iaCA9IE5VTEw7Ci0Jc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7CiYjNDM7CWV4dDRfZnNibGtfdCBwYmxrOwogCWludCBpbmxpbmVfc2l6ZTsKIAogCWlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpOwpAQCAtMTEyOSwyNSAmIzQzOzcyMywyMCBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSwKIAkJCWdvdG8gb3V0OwogCX0KIAotCWVycm9yID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlKTsKJiM0MzsJLyoKJiM0MzsJICogQWxsb2NhdGUgYSBkYXRhIGJsb2NrIGFuZCB3cml0ZSB0aGUgaW5saW5lIGRhdGEgdG8gaXQgYmVmb3JlCiYjNDM7CSAqIGRlc3Ryb3lpbmcgdGhlIGlubGluZSBkYXRhLiAgVGhpcyBlbnN1cmVzIHRoYXQgb24gZmFpbHVyZSB3ZQomIzQzOwkgKiBjYW4gc2ltcGx5IGZyZWUgdGhlIGFsbG9jYXRlZCBibG9jayB3aXRob3V0IG5lZWRpbmcgdG8gcmVzdG9yZQomIzQzOwkgKiB0aGUgaW5saW5lIGRhdGEuCiYjNDM7CSAqLwomIzQzOwlwYmxrID0gZXh0NF9uZXdfbWV0YV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgMCwgMCwgTlVMTCwgJmFtcDtlcnJvcik7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAotCW1hcC5tX2xibGsgPSAwOwotCW1hcC5tX2xlbiA9IDE7Ci0JbWFwLm1fZmxhZ3MgPSAwOwotCWVycm9yID0gZXh0NF9tYXBfYmxvY2tzKGhhbmRsZSwgaW5vZGUsICZhbXA7bWFwLCBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKTsKLQlpZiAoZXJyb3IgJmx0OyAwKQotCQlnb3RvIG91dF9yZXN0b3JlOwotCWlmICghKG1hcC5tX2ZsYWdzICZhbXA7IEVYVDRfTUFQX01BUFBFRCkpIHsKLQkJZXJyb3IgPSAtRUlPOwotCQlnb3RvIG91dF9yZXN0b3JlOwotCX0KLQotCWRhdGFfYmggPSBzYl9nZXRibGsoaW5vZGUtJmd0O2lfc2IsIG1hcC5tX3BibGspOwomIzQzOwlkYXRhX2JoID0gc2JfZ2V0YmxrKGlub2RlLSZndDtpX3NiLCBwYmxrKTsKIAlpZiAoIWRhdGFfYmgpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9yZXN0b3JlOwomIzQzOwkJZ290byBvdXRfZnJlZV9ibG9jazsKIAl9CiAKIAlsb2NrX2J1ZmZlcihkYXRhX2JoKTsKQEAgLTExNTUsOCAmIzQzOzc0NCw3IEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLAogCQkJCQkgICAgICAgRVhUNF9KVFJfTk9ORSk7CiAJaWYgKGVycm9yKSB7CiAJCXVubG9ja19idWZmZXIoZGF0YV9iaCk7Ci0JCWVycm9yID0gLUVJTzsKLQkJZ290byBvdXRfcmVzdG9yZTsKJiM0MzsJCWdvdG8gb3V0X2ZyZWVfYmxvY2s7CiAJfQogCW1lbXNldChkYXRhX2JoLSZndDtiX2RhdGEsIDAsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7CiAKQEAgLTExNjQsMjYgJiM0Mzs3NTIsMzggQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsCiAJCW1lbWNweShkYXRhX2JoLSZndDtiX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpOwogCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpOwogCQl1bmxvY2tfYnVmZmVyKGRhdGFfYmgpOwotCQllcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwKLQkJCQkJCSAgIGlub2RlLCBkYXRhX2JoKTsKJiM0MzsJCWVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCk7CiAJfSBlbHNlIHsKIAkJdW5sb2NrX2J1ZmZlcihkYXRhX2JoKTsKLQkJaW5vZGUtJmd0O2lfc2l6ZSA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKLQkJaV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemUpOwotCQlFWFQ0X0koaW5vZGUpLSZndDtpX2Rpc2tzaXplID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplOwotCiAJCWVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGRhdGFfYmgsCiAJCQkgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLSZndDtpbm9kZSksCiAJCQkgIGJ1ZiAmIzQzOyBFWFQ0X0lOTElORV9ET1RET1RfU0laRSwKIAkJCSAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIAl9CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gb3V0X2ZyZWVfYmxvY2s7CiAKLW91dF9yZXN0b3JlOgomIzQzOwkvKgomIzQzOwkgKiBEYXRhIGlzIHNhZmVseSBpbiB0aGUgYWxsb2NhdGVkIGJsb2NrLiAgTm93IGRlc3Ryb3kgdGhlIGlubGluZQomIzQzOwkgKiBkYXRhIGFuZCBwb3B1bGF0ZSB0aGUgZXh0ZW50IGVudHJ5IGF0b21pY2FsbHkgdW5kZXIgaV9kYXRhX3NlbQomIzQzOwkgKiAoaW5zaWRlIGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2spLiAgVGhpcyBlbnN1cmVzIG5vCiYjNDM7CSAqIGNvbmN1cnJlbnQgcmVhZGVyIHNlZXMgYW4gZW1wdHkgZXh0ZW50IHRyZWUuCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSwgcGJsayk7CiAJaWYgKGVycm9yKQotCQlleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSwgaWxvYywgYnVmLCBpbmxpbmVfc2l6ZSk7CiYjNDM7CQlnb3RvIG91dF9mcmVlX2Jsb2NrOwogCiYjNDM7CWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CQlpbm9kZS0mZ3Q7aV9zaXplID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplOwomIzQzOwkJaV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemUpOwomIzQzOwkJRVhUNF9JKGlub2RlKS0mZ3Q7aV9kaXNrc2l6ZSA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnJvciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKJiM0MzsJZ290byBvdXQ7CiYjNDM7CiYjNDM7b3V0X2ZyZWVfYmxvY2s6CiYjNDM7CWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgcGJsaywgMSwgMCk7CiBvdXQ6CiAJYnJlbHNlKGRhdGFfYmgpOwogCWtmcmVlKGJ1Zik7CkBAIC0xODIxLDcgJiM0MzsxNDIxLDcgQEAgaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCWludCByZXQsIG5vX2V4cGFuZDsKIAogCWV4dDRfd3JpdGVfbG9ja194YXR0cihpbm9kZSwgJmFtcDtub19leHBhbmQpOwotCXJldCA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSk7CiYjNDM7CXJldCA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSwgMCk7CiAJZXh0NF93cml0ZV91bmxvY2tfeGF0dHIoaW5vZGUsICZhbXA7bm9fZXhwYW5kKTsKIAogCXJldHVybiByZXQ7CkBAIC0xOTgwLDE4ICYjNDM7MTU4MCw2IEBAIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSkKIAlpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkgewogCQlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7CiAJCXJldHVybiAwOwotCX0gZWxzZSBpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7Ci0JCS8qCi0JCSAqIElub2RlIGhhcyBpbmxpbmUgZGF0YSBidXQgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEgaXMKLQkJICogY2xlYXJlZC4gVGhpcyBtZWFucyB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBtb3Zpbmcgb2YKLQkJICogaW5saW5lIGRhdGEgdG8gZGVsYXkgYWxsb2NhdGVkIGJsb2NrLiBKdXN0IGZvcmNlIHdyaXRlb3V0Ci0JCSAqIGhlcmUgdG8gZmluaXNoIGNvbnZlcnNpb24uCi0JCSAqLwotCQllcnJvciA9IGZpbGVtYXBfZmx1c2goaW5vZGUtJmd0O2lfbWFwcGluZyk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQkJaWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpCi0JCQlyZXR1cm4gMDsKIAl9CiAKIAluZWVkZWRfYmxvY2tzID0gZXh0NF9jaHVua190cmFuc19leHRlbnQoaW5vZGUsIDEpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IGFkMTRkZDU4YTAwM2IzLi4yMjU2ZmIzODI2YTlkYiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMTMwMCw4ICYjNDM7MTMwMCw2IEBAIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJaWYgKHVubGlrZWx5KHJldCkpCiAJCXJldHVybiByZXQ7CiAKLQkqZnNkYXRhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKmZzZGF0YSAmYW1wOyB+RVhUNF9XUklURV9EQVRBX0lOTElORSk7Ci0KIAl0cmFjZV9leHQ0X3dyaXRlX2JlZ2luKGlub2RlLCBwb3MsIGxlbik7CiAJLyoKIAkgKiBSZXNlcnZlIG9uZSBibG9jayBtb3JlIGZvciBhZGRpdGlvbiB0byBvcnBoYW4gbGlzdCBpbiBjYXNlCkBAIC0xMzEyLDE0ICYjNDM7MTMxMCw5IEBAIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJaW5kZXggPSBwb3MgJmd0OyZndDsgUEFHRV9TSElGVDsKIAogCWlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSkgewotCQlyZXQgPSBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sCi0JCQkJCQkgICAgZm9saW9wKTsKJiM0MzsJCXJldCA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7CiAJCWlmIChyZXQgJmx0OyAwKQogCQkJcmV0dXJuIHJldDsKLQkJaWYgKHJldCA9PSAxKSB7Ci0JCQkqZnNkYXRhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKmZzZGF0YSB8IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KIAl9CiAKIAkvKgpAQCAtMTQ1MiwxMCAmIzQzOzE0NDUsNiBAQCBzdGF0aWMgaW50IGV4dDRfd3JpdGVfZW5kKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAogCXRyYWNlX2V4dDRfd3JpdGVfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkKTsKIAotCWlmICgodW5zaWduZWQgbG9uZylmc2RhdGEgJmFtcDsgRVhUNF9XUklURV9EQVRBX0lOTElORSkKLQkJcmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLAotCQkJCQkJICBmb2xpbyk7Ci0KIAljb3BpZWQgPSBibG9ja193cml0ZV9lbmQocG9zLCBsZW4sIGNvcGllZCwgZm9saW8pOwogCS8qCiAJICogaXQmIzM5O3MgaW1wb3J0YW50IHRvIHVwZGF0ZSBpX3NpemUgd2hpbGUgc3RpbGwgaG9sZGluZyBmb2xpbyBsb2NrOgpAQCAtMTU2MSwxMCAmIzQzOzE1NTAsNiBAQCBzdGF0aWMgaW50IGV4dDRfam91cm5hbGxlZF93cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLAogCiAJQlVHX09OKCFleHQ0X2hhbmRsZV92YWxpZChoYW5kbGUpKTsKIAotCWlmICgodW5zaWduZWQgbG9uZylmc2RhdGEgJmFtcDsgRVhUNF9XUklURV9EQVRBX0lOTElORSkKLQkJcmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLAotCQkJCQkJICBmb2xpbyk7Ci0KIAlpZiAodW5saWtlbHkoY29waWVkICZsdDsgbGVuKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkgewogCQljb3BpZWQgPSAwOwogCQlleHQ0X2pvdXJuYWxsZWRfemVyb19uZXdfYnVmZmVycyhoYW5kbGUsIGlub2RlLCBmb2xpbywKQEAgLTMxNzMsMTAgJiM0MzszMTU4LDYgQEAgc3RhdGljIGludCBleHQ0X2RhX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAkJCQkJCSAgICAgZm9saW9wLCB0cnVlKTsKIAkJaWYgKHJldCAmbHQ7IDApCiAJCQlyZXR1cm4gcmV0OwotCQlpZiAocmV0ID09IDEpIHsKLQkJCSpmc2RhdGEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZykqZnNkYXRhIHwgRVhUNF9XUklURV9EQVRBX0lOTElORSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQogCX0KIAogcmV0cnk6CkBAIC0zMzEzLDEwICYjNDM7MzI5NCw2IEBAIHN0YXRpYyBpbnQgZXh0NF9kYV93cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLAogCiAJdHJhY2VfZXh0NF9kYV93cml0ZV9lbmQoaW5vZGUsIHBvcywgbGVuLCBjb3BpZWQpOwogCi0JaWYgKHdyaXRlX21vZGUgJmFtcDsgRVhUNF9XUklURV9EQVRBX0lOTElORSkKLQkJcmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLAotCQkJCQkJICBmb2xpbyk7Ci0KIAlpZiAodW5saWtlbHkoY29waWVkICZsdDsgbGVuKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkKIAkJY29waWVkID0gMDsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IDZjMThiNWFkZmZjYTMyLi45OTEzZTMwYjcwNDAwOCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtMzE0NSw2ICYjNDM7MzE0NSwxMiBAQCBzdGF0aWMgaW50IGV4dDRfc2V0dXBfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLAogCQlleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLAogCQkJICYjMzQ7d2FybmluZzogY2hlY2t0aW1lIHJlYWNoZWQsICYjMzQ7CiAJCQkgJiMzNDtydW5uaW5nIGUyZnNjayBpcyByZWNvbW1lbmRlZCYjMzQ7KTsKJiM0MzsJaWYgKGV4dDRfaGFzX2ZlYXR1cmVfaW5saW5lX2RhdGEoc2IpKQomIzQzOwkJZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORywKJiM0MzsJCQkgJiMzNDt3YXJuaW5nOiBpbmxpbmVfZGF0YSBmZWF0dXJlIGlzIGRlcHJlY2F0ZWQgYW5kICYjMzQ7CiYjNDM7CQkJICYjMzQ7d2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIGtlcm5lbCByZWxlYXNlLiAmIzM0OwomIzQzOwkJCSAmIzM0O1VzZSAmIzM5O3R1bmUyZnMgLU8gXmlubGluZV9kYXRhJiMzOTsgdG8gY29udmVydC4mIzM0Oyk7CiYjNDM7CiAJaWYgKCFzYmktJmd0O3Nfam91cm5hbCkKIAkJZXMtJmd0O3Nfc3RhdGUgJmFtcDs9IGNwdV90b19sZTE2KH5FWFQ0X1ZBTElEX0ZTKTsKIAlpZiAoIShfX3MxNikgbGUxNl90b19jcHUoZXMtJmd0O3NfbWF4X21udF9jb3VudCkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTE1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXh0NCBJbmxpbmUgRGF0YSBEZXByZWNhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGVmZmVjdGl2ZWx5IG51a2luZyB0aGUgYGlubGluZV9kYXRhYCBmZWF0dXJlIGluIGV4dDQuIEl0JiMzOTtzIG5vdCBqdXN0IGEgY2xlYW51cDsgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIGZpbGVzeXN0ZW0gY29tcG9uZW50LiBUaGUgaWRlYSBpcyB0byBzdG9wICp3cml0aW5nKiBuZXcgaW5saW5lIGRhdGEgdG8gcmVndWxhciBmaWxlcyBhbmQgY29udmVydCBhbnkgZXhpc3RpbmcgaW5saW5lIGRhdGEgdG8gdGhlIHN0YW5kYXJkIGJsb2NrIGZvcm1hdC4gVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7ZnV6emluZyB0YXJnZXQmIzM0OyB0byBtZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkYXRhIGNvcnJ1cHRpb24gb3IgdW5leHBlY3RlZCBiZWhhdmlvciBkdXJpbmcgdGhlc2UgY29udmVyc2lvbnMgYW5kIHdyaXRlIG9wZXJhdGlvbnMuCgpJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBrZXkgZnVuY3Rpb25zIGFmZmVjdGVkLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCB0b3VjaGVzIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCwgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2tgLCBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCwgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAsIGBleHQ0X3dyaXRlX2JlZ2luYCwgYGV4dDRfd3JpdGVfZW5kYCwgYGV4dDRfam91cm5hbGxlZF93cml0ZV9lbmRgLCBgZXh0NF9kYV93cml0ZV9iZWdpbmAsIGBleHQ0X2RhX3dyaXRlX2VuZGAsIGFuZCBgX19leHQ0X25ld19pbm9kZWAuCgpBIHF1aWNrIGdsYW5jZSBhdCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyByZXZlYWxzIHNvbWV0aGluZyBpbnRlcmVzdGluZzogYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGlzICpzdGF0aWMqLCBidXQgaXQmIzM5O3MgY3J1Y2lhbCBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBieSB0aGUgbm9uLXN0YXRpYyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBhbmQgYGV4dDRfdXBkYXRlX2lubGluZV9kaXJgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAgYW5kIGBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFgIGFyZSBub24tc3RhdGljIGFzIHdlbGwuICBUaGUgYGV4dDRfd3JpdGVfYmVnaW5gIGFuZCBgZXh0NF9kYV93cml0ZV9iZWdpbmAgdmFyaWFudHMgYXJlIHN0YXRpYywgYnV0IHBhcnQgb2YgdGhlIGBleHQ0X2FvcHNgIGFuZCBgZXh0NF9kYV9hb3BzYCBzbyB0aGV5IGFyZSBzdGlsbCB0YXJnZXRzLgoKTm93LCBteSBmb2N1cyBuYXJyb3dzOiBJIHdhbnQgYSBkZWVwZXIgbG9vayBhdCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCwgYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAgYW5kIGBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaGFuZGxpbmcgdGhlIGNvbnZlcnNpb24gYW5kIHBvdGVudGlhbCB3cml0aW5nIG9yIHJlbW92YWwuCgpCZWZvcmUgZGl2aW5nIGludG8gYSBkZXRhaWxlZCBjb2RlIHJldmlldywgSSBzaG91bGQgdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWUgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBhbmQgdXNlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjYWxsIGdyYXBocyBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2NyeXB0by5jPTEzMj1zdGF0aWMgaW50IGV4dDRfc2V0X2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqY3R4LCBzaXplX3QgbGVuLFxuLS1cbmZzL2V4dDQvY3J5cHRvLmMtMTUyLVxuZnMvZXh0NC9jcnlwdG8uYzoxNTM6XHRyZXMgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xuZnMvZXh0NC9jcnlwdG8uYy0xNTQtXHRpZiAocmVzKVxuLS1cbmZzL2V4dDQvZXh0NC5oPTM3OTg9ZXh0ZXJuIGludCBleHQ0X2lubGluZV9kYXRhX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqaGFzX2lubGluZSk7XG5mcy9leHQ0L2V4dDQuaC0zNzk5LVxuZnMvZXh0NC9leHQ0Lmg6MzgwMDpleHRlcm4gaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2V4dDQvZXh0NC5oLTM4MDEtXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NDg3OT1sb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00OTA4LVx0aW5vZGVfbG9jayhpbm9kZSk7XG5mcy9leHQ0L2V4dGVudHMuYzo0OTA5Olx0cmV0ID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MTAtXHRpZiAocmV0KVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9NTQ2PWludCBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy01NTItXHQvKiBJbmxpbmUgZGF0YSBpcyBkZXByZWNhdGVkOiBhbHdheXMgY29udmVydCB0byBibG9jayBmb3JtYXQgKi9cbmZzL2V4dDQvaW5saW5lLmM6NTUzOlx0cmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XG5mcy9leHQ0L2lubGluZS5jLTU1NC19XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz02NzE9c3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNjkyLVxuZnMvZXh0NC9pbmxpbmUuYzo2OTM6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9leHQ0L2lubGluZS5jLTY5NC1cdFx0XHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jPTc5OD1pbnQgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy04NTAtXHQgKi9cbmZzL2V4dDQvaW5saW5lLmM6ODUxOlx0cmV0ID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGRpciwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2lubGluZS5jLTg1Mi1cbi0tXG5mcy9leHQ0L2lubGluZS5jPTE0NjI9aW50IGV4dDRfaW5saW5lX2RhdGFfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpoYXNfaW5saW5lKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTU3My1cbmZzL2V4dDQvaW5saW5lLmM6MTU3NDppbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lubGluZS5jLTE1NzUte1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTU5OS1cdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXG5mcy9leHQ0L2lubGluZS5jOjE2MDA6XHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMTYwMS1cdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcdTAwMjZub19leHBhbmQpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0xMjg2PXN0YXRpYyBpbnQgZXh0NF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTEzMTItXHRpZiAoZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpIHtcbmZzL2V4dDQvaW5vZGUuYzoxMzEzOlx0XHRyZXQgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xuZnMvZXh0NC9pbm9kZS5jLTEzMTQtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTU5OTg9aW50IGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2V4dDQvaW5vZGUuYy02MDk1LVx0XHQgICAgYXR0ci1cdTAwM2VpYV9zaXplIFx1MDAzZSBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUpIHtcbmZzL2V4dDQvaW5vZGUuYzo2MDk2Olx0XHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbmZzL2V4dDQvaW5vZGUuYy02MDk3LVx0XHRcdGlmIChlcnJvcilcbi0tXG5mcy9leHQ0L2lub2RlLmM9Njg2MT12bV9mYXVsdF90IGV4dDRfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy02ODgyLVxuZnMvZXh0NC9pbm9kZS5jOjY4ODM6XHRlcnIgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xuZnMvZXh0NC9pbm9kZS5jLTY4ODQtXHRpZiAoZXJyKVxuLS1cbmZzL2V4dDQvdmVyaXR5LmM9MTAyPXN0YXRpYyBpbnQgZXh0NF9iZWdpbl9lbmFibGVfdmVyaXR5KHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL2V4dDQvdmVyaXR5LmMtMTI4LVxuZnMvZXh0NC92ZXJpdHkuYzoxMjk6XHRlcnIgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xuZnMvZXh0NC92ZXJpdHkuYy0xMzAtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDcwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgRXh0NCBJbmxpbmUgRGF0YSBEZXByZWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyB0aGUgZGVwcmVjYXRpb24gb2YgYGlubGluZV9kYXRhYCBmb3Igc3RhbmRhcmQgZmlsZXMgaW4gZXh0NC4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgbmVlZCBhIGNsb3NlIGxvb2suIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGludm9sdmUgcmVwbGFjaW5nIHRoZSBpbmxpbmUgZGF0YSBoYW5kbGluZyB3aXRoIGEgc3RhbmRhcmQgYmxvY2sgYWxsb2NhdGlvbiBhbmQgd3JpdGUgcHJvY2VzcyB3aXRoaW4gYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgLiBUaGF0IG1ha2VzIHNlbnNlOyBtb3ZpbmcgZGF0YSBvdXQgb2YgdGhlIGlub2RlIGFuZCBpbnRvIHJlZ3VsYXIgYmxvY2tzIGlzIHRoZSBleHBlY3RlZCBhcHByb2FjaCBmb3IgZGVwcmVjYXRpb24uCgpUaGVuLCBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9ja2AgaXMgdXBkYXRlZCB0byBoYW5kbGUgdGhlIGNsZWFudXAgdXNpbmcgYSBwaHlzaWNhbCBibG9jayAoYHBibGtgKSBhbmQgZWl0aGVyIHBvcHVsYXRlIHRoZSBleHRlbnQgdHJlZSBvciBhbiBpbmRpcmVjdCBibG9jayBkaXJlY3RseS4gVGhhdCYjMzk7cyBhIGtleSBjaGFuZ2UsIGFuZCBpdCBhbGlnbnMgd2l0aCB0aGUgZGF0YSBub3cgcmVzaWRpbmcgaW4gc3RhbmRhcmQgYmxvY2tzLgoKVGhlIHRocmVlIGZ1bmN0aW9ucywgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAsIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgLCBhbmQgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YWAgYXJlIHN0cm9uZyBjYW5kaWRhdGVzIGZvciB1c2luZyBgRm9jdXNTeW1ib2xzYC4gVGhleSBhcmUgdGhlIG1haW4gdG91Y2hwb2ludHMgb2YgdGhpcyBkZXByZWNhdGlvbiwgc28gdGhleSYjMzk7cmUgdGhlIGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGlmIEkgd2FudCB0byB0aG9yb3VnaGx5IHJldmlldyB0aGlzLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zLiBXZSBhbGwga25vdyBgQ09ORklHX0VYVDRfRlNgIGVuYWJsZXMgZXh0NCwgc28gdGhhdCYjMzk7cyB0aGUgYmFzZS4gQnV0IGlzIHRoZXJlIGEgc2VwYXJhdGUgQ09ORklHIG9wdGlvbiBzcGVjaWZpY2FsbHkgZm9yICppbmxpbmUqIGRhdGE/IElmIHRoZXJlIGlzLCBpdCB3aWxsIGJlIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgdGhlIGltcGFjdCBhbmQgcG90ZW50aWFsIGNvbXBpbGUtdGltZSBlZmZlY3RzIG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gdHJhY2sgZG93biBhbnkgY29uZmlnIGRlcGVuZGVuY2llcyB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19FWFQ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC8ua3VuaXRjb25maWc9MT1DT05GSUdfS1VOSVQ9eVxuZnMvZXh0NC8ua3VuaXRjb25maWc6MjpDT05GSUdfRVhUNF9GUz15XG5mcy9leHQ0Ly5rdW5pdGNvbmZpZzozOkNPTkZJR19FWFQ0X0tVTklUX1RFU1RTPXlcbi0tXG5mcy9leHQ0L01ha2VmaWxlLTUtXG5mcy9leHQ0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0VYVDRfRlMpICYjNDM7PSBleHQ0Lm9cbmZzL2V4dDQvTWFrZWZpbGUtNy1cbmZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG4tLVxuZnMvZXh0NC9NYWtlZmlsZS0xNC1cbmZzL2V4dDQvTWFrZWZpbGU6MTU6ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTClcdCYjNDM7PSBhY2wub1xuZnMvZXh0NC9NYWtlZmlsZToxNjpleHQ0LSQoQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkpXHRcdCYjNDM7PSB4YXR0cl9zZWN1cml0eS5vXG5mcy9leHQ0L01ha2VmaWxlLTE3LWV4dDQtdGVzdC1vYmpzXHRcdFx0XHQmIzQzOz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXG5mcy9leHQ0L01ha2VmaWxlLTE4LVx0XHRcdFx0XHQgICBleHRlbnRzLXRlc3QubyBoYXNoLXRlc3Qub1xuZnMvZXh0NC9NYWtlZmlsZToxOTpvYmotJChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcdFx0JiM0Mzs9IGV4dDQtdGVzdC5vXG5mcy9leHQ0L01ha2VmaWxlLTIwLWV4dDQtJChDT05GSUdfRlNfVkVSSVRZKVx0XHQmIzQzOz0gdmVyaXR5Lm9cbi0tXG5mcy9leHQ0L2FjbC5oPTM5PXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfYWNsX2NvdW50KHNpemVfdCBzaXplKVxuLS1cbmZzL2V4dDQvYWNsLmgtNTQtXG5mcy9leHQ0L2FjbC5oOjU1OiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvYWNsLmgtNTYtXG4tLVxuZnMvZXh0NC9hY2wuaD02MT1leHRlcm4gaW50IGV4dDRfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqKTtcbmZzL2V4dDQvYWNsLmgtNjItXG5mcy9leHQ0L2FjbC5oOjYzOiNlbHNlICAvKiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgKi9cbmZzL2V4dDQvYWNsLmgtNjQtI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuLS1cbmZzL2V4dDQvYWNsLmg9Njk9ZXh0NF9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcilcbi0tXG5mcy9leHQ0L2FjbC5oLTcyLX1cbmZzL2V4dDQvYWNsLmg6NzM6I2VuZGlmICAvKiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgKi9cbmZzL2V4dDQvYWNsLmgtNzQtXG4tLVxuZnMvZXh0NC9leHQ0LmgtOTEtICovXG5mcy9leHQ0L2V4dDQuaDo5MjojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvZXh0NC5oLTkzLSNkZWZpbmUgZXh0X2RlYnVnKGlubywgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MTU5Mj1zdHJ1Y3QgZXh0NF9zYl9pbmZvIHtcbi0tXG5mcy9leHQ0L2V4dDQuaC0xODA2LVx0dTY0IHNfZGF4X3BhcnRfb2ZmO1xuZnMvZXh0NC9leHQ0Lmg6MTgwNzojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvZXh0NC5oLTE4MDgtXHR1bnNpZ25lZCBsb25nIHNfc2ltdWxhdGVfZmFpbDtcbi0tXG5mcy9leHQ0L2V4dDQuaC0xODY5LVx0dGlkX3Qgc19mY19pbmVsaWdpYmxlX3RpZDtcbmZzL2V4dDQvZXh0NC5oOjE4NzA6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L2V4dDQuaC0xODcxLVx0aW50IHNfZmNfZGVidWdfbWF4X3JlcGxheTtcbi0tXG5mcy9leHQ0L2V4dDQuaD0xOTk0PXN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X3NpbXVsYXRlX2ZhaWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L2V4dDQuaC0xOTk2LXtcbmZzL2V4dDQvZXh0NC5oOjE5OTc6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L2V4dDQuaC0xOTk4LVx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7XG4tLVxuZnMvZXh0NC9leHQ0Lmg9NDA0NT1leHRlcm4gaW50IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9leHQ0L2V4dDQuaC00MDQ4LVxuZnMvZXh0NC9leHQ0Lmg6NDA0OTojaWYgSVNfRU5BQkxFRChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcbmZzL2V4dDQvZXh0NC5oLTQwNTAtI2RlZmluZSBFWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1Qoc3ltKSBcXFxuLS1cbmZzL2V4dDQvZXh0NF9leHRlbnRzLmg9MjcwPWV4dGVybiBpbnQgZXh0NF9leHRfemVyb291dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4KTtcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmg6MjcxOiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaC0yNzItZXh0ZXJuIGludCBleHQ0X2V4dF9zcGFjZV9yb290X2lkeF90ZXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBjaGVjayk7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NjI1Mj1pbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy02MzAzLVxuZnMvZXh0NC9leHRlbnRzLmM6NjMwNDojaWYgSVNfRU5BQkxFRChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcbmZzL2V4dDQvZXh0ZW50cy5jLTYzMDUtaW50IGV4dDRfZXh0X3NwYWNlX3Jvb3RfaWR4X3Rlc3Qoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGNoZWNrKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNTcwPXN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXkoam91cm5hbF90ICpqb3VybmFsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTk1LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1OTY6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU5Ny1cdGlmIChzYmktXHUwMDNlc19mY19kZWJ1Z19tYXhfcmVwbGF5IFx1MDAyNlx1MDAyNiBvZmYgXHUwMDNlPSBzYmktXHUwMDNlc19mY19kZWJ1Z19tYXhfcmVwbGF5KSB7XG4tLVxuZnMvZXh0NC9oYXNoLmM9MzE0PWludCBleHQ0ZnNfZGlyaGFzaChjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbixcbi0tXG5mcy9leHQ0L2hhc2guYy0zNDQtXG5mcy9leHQ0L2hhc2guYzozNDU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXG5mcy9leHQ0L2hhc2guYy0zNDYtRVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRmc19kaXJoYXNoKTtcbi0tXG5mcy9leHQ0L2lhbGxvYy5jPTg3Nj1zdGF0aWMgaW50IGV4dDRfeGF0dHJfY3JlZGl0c19mb3JfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBtb2RlX3QgbW9kZSxcbi0tXG5mcy9leHQ0L2lhbGxvYy5jLTg4MC1cdGludCBuYmxvY2tzID0gMDtcbmZzL2V4dDQvaWFsbG9jLmM6ODgxOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvaWFsbG9jLmMtODgyLVx0c3RydWN0IHBvc2l4X2FjbCAqcCA9IGdldF9pbm9kZV9hY2woZGlyLCBBQ0xfVFlQRV9ERUZBVUxUKTtcbi0tXG5mcy9leHQ0L2lub2RlLmM9NDA5PWludCBleHQ0X2lzc3VlX3plcm9vdXQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsaywgZXh0NF9mc2Jsa190IHBibGssXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTQzMy0gKi9cbmZzL2V4dDQvaW5vZGUuYzo0MzQ6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L2lub2RlLmMtNDM1LXZvaWQgZXh0NF9jaGVja19tYXBfZXh0ZW50c19lbnYoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz01NzI5PXN0YXRpYyB2b2lkIGV4dDRfbWJfcGFfcHV0X2ZyZWUoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01NzQ0LVxuZnMvZXh0NC9tYmFsbG9jLmM6NTc0NTojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvbWJhbGxvYy5jLTU3NDYtc3RhdGljIGlubGluZSB2b2lkIGV4dDRfbWJfc2hvd19wYShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTcxMzA9ZXh0NF9tYmFsbG9jX3F1ZXJ5X3JhbmdlKFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTcxODUtXG5mcy9leHQ0L21iYWxsb2MuYzo3MTg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxuZnMvZXh0NC9tYmFsbG9jLmMtNzE4Ny12b2lkIG1iX2NsZWFyX2JpdHNfdGVzdCh2b2lkICpibSwgaW50IGN1ciwgaW50IGxlbilcbi0tXG5mcy9leHQ0L21iYWxsb2MuaC0yOC0gKi9cbmZzL2V4dDQvbWJhbGxvYy5oOjI5OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9tYmFsbG9jLmgtMzAtI2RlZmluZSBtYl9kZWJ1ZyhzYiwgZm10LCAuLi4pXHRcdFx0XHRcdFx0XFxcbi0tXG5mcy9leHQ0L21iYWxsb2MuaD0yNzM9ZXh0ZXJuIGludCBleHQ0X21iX21hcmtfY29udGV4dChoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5oLTI3Ny1cdFx0ZXh0NF9ncnBibGtfdCAqcmV0X2NoYW5nZWQpO1xuZnMvZXh0NC9tYmFsbG9jLmg6Mjc4OiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxuZnMvZXh0NC9tYmFsbG9jLmgtMjc5LWV4dGVybiB2b2lkIG1iX2NsZWFyX2JpdHNfdGVzdCh2b2lkICpibSwgaW50IGN1ciwgaW50IGxlbik7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBleHQ0X2NvbnRleHRfb3BzID0ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMzItXG5mcy9leHQ0L3N1cGVyLmM6MTMzOiNpZiAhZGVmaW5lZChDT05GSUdfRVhUMl9GUykgXHUwMDI2XHUwMDI2ICFkZWZpbmVkKENPTkZJR19FWFQyX0ZTX01PRFVMRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyKVxuZnMvZXh0NC9zdXBlci5jLTEzNC1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZXh0Ml9mc190eXBlID0ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0xNzAwPWVudW0ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNzIzLVx0T3B0X2Vycm9ycywgT3B0X2RhdGEsIE9wdF9kYXRhX2VyciwgT3B0X2pxZm10LCBPcHRfZGF4X3R5cGUsXG5mcy9leHQ0L3N1cGVyLmM6MTcyNDojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvc3VwZXIuYy0xNzI1LVx0T3B0X2ZjX2RlYnVnX21heF9yZXBsYXksIE9wdF9mY19kZWJ1Z19mb3JjZVxuLS1cbmZzL2V4dDQvc3VwZXIuYz0xNzcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZXh0NF9wYXJhbV9zcGVjc1tdID0ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xODQzLVx0ZnNwYXJhbV9mbGFnXHQoXCYjMzQ7bm9pbml0X2l0YWJsZVwmIzM0OyxcdE9wdF9ub2luaXRfaXRhYmxlKSxcbmZzL2V4dDQvc3VwZXIuYzoxODQ0OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zdXBlci5jLTE4NDUtXHRmc3BhcmFtX2ZsYWdcdChcJiMzNDtmY19kZWJ1Z19mb3JjZVwmIzM0OyxcdE9wdF9mY19kZWJ1Z19mb3JjZSksXG4tLVxuZnMvZXh0NC9zdXBlci5jPTE4ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTkzMC1cdHtPcHRfdXNlcl94YXR0ciwgRVhUNF9NT1VOVF9YQVRUUl9VU0VSLCBNT1BUX1NFVH0sXG5mcy9leHQ0L3N1cGVyLmM6MTkzMTojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L3N1cGVyLmMtMTkzMi1cdHtPcHRfYWNsLCBFWFQ0X01PVU5UX1BPU0lYX0FDTCwgTU9QVF9TRVR9LFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xOTUzLVx0IE1PUFRfU0VUfSxcbmZzL2V4dDQvc3VwZXIuYzoxOTU0OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zdXBlci5jLTE5NTUtXHR7T3B0X2ZjX2RlYnVnX2ZvcmNlLCBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlULFxuLS1cbmZzL2V4dDQvc3VwZXIuYz0yMDA1PXN0cnVjdCBleHQ0X2ZzX2NvbnRleHQge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0yMDA4LVx0aW50XHRcdHNfanF1b3RhX2ZtdDtcdC8qIEZvcm1hdCBvZiBxdW90YSB0byB1c2UgKi9cbmZzL2V4dDQvc3VwZXIuYzoyMDA5OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zdXBlci5jLTIwMTAtXHRpbnQgc19mY19kZWJ1Z19tYXhfcmVwbGF5O1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0yMTc5PXN0YXRpYyBpbnQgZXh0NF9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0yMzE0LVx0XHRyZXR1cm4gMDtcbmZzL2V4dDQvc3VwZXIuYzoyMzE1OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zdXBlci5jLTIzMTYtXHRjYXNlIE9wdF9mY19kZWJ1Z19tYXhfcmVwbGF5OlxuLS1cbmZzL2V4dDQvc3VwZXIuYz0yODYzPXN0YXRpYyB2b2lkIGV4dDRfYXBwbHlfb3B0aW9ucyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTI4ODYtXG5mcy9leHQ0L3N1cGVyLmM6Mjg4NzojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvc3VwZXIuYy0yODg4LVx0QVBQTFkoc19mY19kZWJ1Z19tYXhfcmVwbGF5KTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NDQwMj1zdGF0aWMgdm9pZCBleHQ0X3NldF9kZWZfb3B0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy00NDE3LVx0c2V0X29wdChzYiwgWEFUVFJfVVNFUik7XG5mcy9leHQ0L3N1cGVyLmM6NDQxODojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L3N1cGVyLmMtNDQxOS1cdHNldF9vcHQoc2IsIFBPU0lYX0FDTCk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTc0MDM9c3RhdGljIHNzaXplX3QgZXh0NF9xdW90YV93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSxcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNzQ2My1cbmZzL2V4dDQvc3VwZXIuYzo3NDY0OiNpZiAhZGVmaW5lZChDT05GSUdfRVhUMl9GUykgXHUwMDI2XHUwMDI2ICFkZWZpbmVkKENPTkZJR19FWFQyX0ZTX01PRFVMRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyKVxuZnMvZXh0NC9zdXBlci5jLTc0NjUtc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX2FzX2V4dDIodm9pZClcbi0tXG5mcy9leHQ0L3N5c2ZzLmM9MjY2PUVYVDRfUldfQVRUUl9TQklfUEkobXNnX3JhdGVsaW1pdF9idXJzdCwgc19tc2dfcmF0ZWxpbWl0X3N0YXRlLmJ1cnN0KTtcbmZzL2V4dDQvc3lzZnMuYzoyNjc6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L3N5c2ZzLmMtMjY4LUVYVDRfUldfQVRUUl9TQklfVUwoc2ltdWxhdGVfZmFpbCwgc19zaW11bGF0ZV9mYWlsKTtcbi0tXG5mcy9leHQ0L3N5c2ZzLmM9Mjk1PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpleHQ0X2F0dHJzW10gPSB7XG4tLVxuZnMvZXh0NC9zeXNmcy5jLTMzNS1cdEFUVFJfTElTVChqb3VybmFsX3Rhc2spLFxuZnMvZXh0NC9zeXNmcy5jOjMzNjojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvc3lzZnMuYy0zMzctXHRBVFRSX0xJU1Qoc2ltdWxhdGVfZmFpbCksXG4tLVxuZnMvZXh0NC94YXR0ci5jPTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcl9tYXBbXSA9IHtcbmZzL2V4dDQveGF0dHIuYy04OS1cdFtFWFQ0X1hBVFRSX0lOREVYX1VTRVJdXHRcdCAgICAgPSBcdTAwMjZleHQ0X3hhdHRyX3VzZXJfaGFuZGxlcixcbmZzL2V4dDQveGF0dHIuYzo5MDojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L3hhdHRyLmMtOTEtXHRbRVhUNF9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTXSAgPSBcdTAwMjZub3BfcG9zaXhfYWNsX2FjY2Vzcyxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtOTQtXHRbRVhUNF9YQVRUUl9JTkRFWF9UUlVTVEVEXVx0ICAgICA9IFx1MDAyNmV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLFxuZnMvZXh0NC94YXR0ci5jOjk1OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC94YXR0ci5jLTk2LVx0W0VYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFldXHQgICAgID0gXHUwMDI2ZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyLFxuLS1cbmZzL2V4dDQveGF0dHIuYz0xMDE9Y29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTEwMy1cdFx1MDAyNmV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLFxuZnMvZXh0NC94YXR0ci5jOjEwNDojaWZkZWYgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQveGF0dHIuYy0xMDUtXHRcdTAwMjZleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsXG4tLVxuZnMvZXh0NC94YXR0ci5oPTIwOD1fX3hhdHRyX2NoZWNrX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2hlYWRlciAqaGVhZGVyLFxuLS1cbmZzL2V4dDQveGF0dHIuaC0yMTMtXG5mcy9leHQ0L3hhdHRyLmg6MjE0OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC94YXR0ci5oLTIxNS1leHRlcm4gaW50IGV4dDRfaW5pdF9zZWN1cml0eShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzQ1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRVhUNCYjMzk7cyBJbmxpbmUgRGF0YSBDb252ZXJzaW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmb2N1cyBvbiBmdXp6aW5nIHRoZSBFWFQ0IGZpbGUgc3lzdGVtJiMzOTtzIGlubGluZSBkYXRhIGZlYXR1cmVzLiBUaGUgY29yZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50IGlzIGBFWFQ0X0ZTYCwgbmF0dXJhbGx5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSBwb3BzIHVwLiBSaWdodCwgdGhlIGBpbmxpbmVfZGF0YWAgZmVhdHVyZSBpcyBpbnRlZ3JhbCB0byBFWFQ0JiMzOTtzIG9wZXJhdGlvbi4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIGl0cyBsaWZlY3ljbGU6IGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgIGFuZCBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhYC4gTG9va2luZyBhdCB3aGVyZSBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBpcyB1c2VkIGlzIHVzZWZ1bC4gSXQmIzM5O3MgZXhwb3J0ZWQsIGFuZCBJIHNlZSBpdCBjYWxsZWQgZnJvbSBzZXZlcmFsIGltcG9ydGFudCBhcmVhczogYGV4dDRfc2V0YXR0cmAsIGBleHQ0X3BhZ2VfbWt3cml0ZWAsIGBleHQ0X2ZhbGxvY2F0ZWAsIGFuZCBgZXh0NF9iZWdpbl9lbmFibGVfdmVyaXR5YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGVzZSBhcmUgaGlnaC12YWx1ZSB0YXJnZXRzIGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMgdG8gYWxzbyBpbmNsdWRlIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgLCB3aGljaCBzZWVtcyByZWxldmFudCwgYW5kIGV2ZW4gYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIChhbHRob3VnaCBpdCYjMzk7cyBzdGF0aWMgYW5kIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYyBlbnRyeXBvaW50cyksIGJ1dCBsZXQmIzM5O3Mgc3RpY2sgdG8gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciBub3cuCgpUaGVyZWZvcmUsIHRoZSBiZXN0IGNhbmRpZGF0ZXMgdG8gZnV6eiBhcmU6CgoqICAgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAKKiAgIGBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFgCgpPa2F5LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGhvdyBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBmaXRzIGluLiBJdCAqYXBwZWFycyogdG8gYmUgY2FsbGVkIGZyb20gYGV4dDRfZGFfd3JpdGVfYmVnaW5gLiBXYWl0LCBpcyBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBleHBvcnRlZD8gTGV0IG1lIGRvdWJsZS1jaGVjay4gSXQmIzM5O3MgYWN0dWFsbHkgaW4gYGZzL2V4dDQvaW5saW5lLmNgIGFuZCBkZWNsYXJlZCBpbiBgZnMvZXh0NC9leHQ0LmhgLiBTbyBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGBmcy9leHQ0L2V4dDQuaGAgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9Mzc2MD1pbnQgZXh0NF9yZWFkcGFnZV9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5mcy9leHQ0L2V4dDQuaDozNzYxOmV4dGVybiBpbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvZXh0NC9leHQ0LmgtMzc2Mi1cdFx0XHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmM9NTExPWludCBleHQ0X3JlYWRwYWdlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNTQ1LSAqL1xuZnMvZXh0NC9pbmxpbmUuYzo1NDY6aW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL2V4dDQvaW5saW5lLmMtNTQ3LVx0XHRcdFx0XHQgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTMxMzI9c3RhdGljIGludCBleHQ0X2RhX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbi0tXG5mcy9leHQ0L2lub2RlLmMtMzE1Ni1cdGlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSkge1xuZnMvZXh0NC9pbm9kZS5jOjMxNTc6XHRcdHJldCA9IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXG5mcy9leHQ0L2lub2RlLmMtMzE1OC1cdFx0XHRcdFx0XHQgICAgIGZvbGlvcCwgdHJ1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5MzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFWFQ0IElubGluZSBEYXRhIFdyaXRlIFBhdGgqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBpcyBpbmRlZWQgY2FsbGVkIGZyb20gYGV4dDRfZGFfd3JpdGVfYmVnaW5gLCB3aGljaCBhbGlnbnMgd2l0aCBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcuIEJ1dCBob2xkIG9uLCB0aGUgcGF0Y2ggbm90ZXMgc29tZXRoaW5nIGludGVyZXN0aW5nOiBgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGFgIHdhcyByZW1vdmVkLiBIbW0sIGluc3RlYWQsIHRoZSBwYXRjaCBub3cgY2FsbHMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgd2l0aGluIGBleHQ0X3dyaXRlX2JlZ2luYC4gIExldCBtZSBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGNvZGUgc25pcHBldCBmcm9tIHRoZSBwYXRjaDoKCmBgYGMKIAlpZiAoZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpIHsKLQkJcmV0ID0gZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGEobWFwcGluZywgaW5vZGUsIHBvcywgbGVuLAotCQkJCQkJICAgIGZvbGlvcCk7CiYjNDM7CQlyZXQgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7Ci0JCWlmIChyZXQgPT0gMSkgewotCQkJKmZzZGF0YSA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKSpmc2RhdGEgfCBFWFQ0X1dSSVRFX0RBVEFfSU5MSU5FKTsKLQkJCXJldHVybiAwOwotCQl9CiAJfQpgYGAKClJpZ2h0LCBpdCYjMzk7cyBjbGVhcjogYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgaGFzIHRha2VuIG92ZXIuIFRoaXMgbWVhbnMgdGhhdCBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBhIGtleSBmb2N1cyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGlubGluZSBkYXRhIGNvbnZlcnNpb24gbm93IHdvcmtzLiBBbHNvLCBJIHNlZSBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhYCBoYXMgYmVlbiBtb2RpZmllZCwgYW5kIHRoYXQgbW9kaWZpY2F0aW9uIGlzIGRvbmUgdmlhIGBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrYCwgc28gdGhhdCBsb29rcyBsaWtlIGFub3RoZXIgYXJlYSBvZiBpbnRlcmVzdC4gTm93LCBJIHNob3VsZCBkaXZlIGludG8gdGhlIGBmcy9leHQ0L2lubGluZS5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhYCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9kZXN0cm95X2lubGluZV9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9Mzc1Nj1leHRlcm4gaW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L2V4dDQuaDozNzU3OmV4dGVybiBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvZXh0NC9leHQ0LmgtMzc1OC1leHRlcm4gdm9pZCBleHQ0X3VwZGF0ZV9maW5hbF9kZSh2b2lkICpkZV9idWYsIGludCBvbGRfc2l6ZSwgaW50IG5ld19zaXplKTtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTM1OD1zdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMzg2LVxuZnMvZXh0NC9pbmxpbmUuYzozODc6c3RhdGljIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9leHQ0L2lubGluZS5jLTM4OC1cdFx0XHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jPTY5Mz1zdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTc2OC1cdCAqIGRhdGEgYW5kIHBvcHVsYXRlIHRoZSBleHRlbnQgZW50cnkgYXRvbWljYWxseSB1bmRlciBpX2RhdGFfc2VtXG5mcy9leHQ0L2lubGluZS5jOjc2OTpcdCAqIChpbnNpZGUgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jaykuICBUaGlzIGVuc3VyZXMgbm9cbmZzL2V4dDQvaW5saW5lLmMtNzcwLVx0ICogY29uY3VycmVudCByZWFkZXIgc2VlcyBhbiBlbXB0eSBleHRlbnQgdHJlZS5cbmZzL2V4dDQvaW5saW5lLmMtNzcxLVx0ICovXG5mcy9leHQ0L2lubGluZS5jOjc3MjpcdGVycm9yID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlLCBwYmxrKTtcbmZzL2V4dDQvaW5saW5lLmMtNzczLVx0aWYgKGVycm9yKVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTM1Nj1ib29sIGVtcHR5X2lubGluZV9kaXIoc3RydWN0IGlub2RlICpkaXIsIGludCAqaGFzX2lubGluZV9kYXRhKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTQxOC1cbmZzL2V4dDQvaW5saW5lLmM6MTQxOTppbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lubGluZS5jLTE0MjAte1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTQyMy1cdGV4dDRfd3JpdGVfbG9ja194YXR0cihpbm9kZSwgXHUwMDI2bm9fZXhwYW5kKTtcbmZzL2V4dDQvaW5saW5lLmM6MTQyNDpcdHJldCA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSwgMCk7XG5mcy9leHQ0L2lubGluZS5jLTE0MjUtXHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXHUwMDI2bm9fZXhwYW5kKTtcbi0tXG5mcy9leHQ0L2lub2RlLmM9Mjc3Mj1zdGF0aWMgaW50IGV4dDRfZG9fd3JpdGVwYWdlcyhzdHJ1Y3QgbXBhZ2VfZGFfZGF0YSAqbXBkKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy0yODI0LVx0XHRcdFx0RVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKTtcbmZzL2V4dDQvaW5vZGUuYzoyODI1Olx0XHRleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSk7XG5mcy9leHQ0L2lub2RlLmMtMjgyNi1cdFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MzkKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogMTA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIElubGluZSBEYXRhIERlcHJlY2F0aW9uIGluIGV4dDQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBkZXByZWNhdGVzIGlubGluZSBkYXRhIGZvciByZWd1bGFyIGZpbGVzIGluIGV4dDQuIFRoZSBwcmltYXJ5IGdvYWwgaXMgdG8gZm9yY2UgY29udmVyc2lvbiB0byBibG9jay1iYXNlZCBzdG9yYWdlIHdoZW5ldmVyIGEgd3JpdGUgb3BlcmF0aW9uIG9jY3Vycy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgd3JpdGUgcGF0aHMgYW5kIGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMsIHRoZXJlZm9yZSwgSSBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgdGhpcyBhcmVhLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbHMuIEkgc2VlIGBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFgIGNhbGxlZCBmcm9tIGBleHQ0X2RvX3dyaXRlcGFnZXNgLCBhbmQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgaXMgY2FsbGVkIGZyb20gYSBudW1iZXIgb2YgcGxhY2VzOiBgZXh0NF93cml0ZV9iZWdpbmAsIGBleHQ0X3NldGF0dHJgLCBgZXh0NF9wYWdlX21rd3JpdGVgLCBgZXh0NF9mYWxsb2NhdGVgLCBhbmQgYGV4dDRfYmVnaW5fZW5hYmxlX3Zlcml0eWAuIEFsc28sIEkmIzM5O3ZlIGdvdCBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBjYWxsZWQgZnJvbSBgZXh0NF9kYV93cml0ZV9iZWdpbmAuCgpUaGUgY29yZSBmdW5jdGlvbiB0byBmb2N1cyBvbiBzZWVtcyB0byBiZSBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCwgYXMgdGhlIHBhdGNoIGlzIGRlcHJlY2F0aW5nIGFuZCBmb3JjaW5nIGNvbnZlcnNpb24gZnJvbSBpbmxpbmUgZGF0YS4gSSBhbHNvIGhhdmUgYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAgd2hpY2ggc2VlbXMgdG8gYmUgYSBzaW1wbGUgd3JhcHBlciBub3cgYW5kIGp1c3QgY2FsbHMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSlgLiBJJiMzOTtsbCBrZWVwIHRoaXMgYXMgYSBmdXp6IHRhcmdldCBhcyBhbiBlbnRyeSBwb2ludC4gVGhlbiB0aGVyZSBpcyBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhYCwgd2hpY2ggSSB3aWxsIGFsc28gZm9jdXMgb24uCgpTbywgZm9yIHRoZSBjb25maWd1cmF0aW9ucywgdGhlIG9ubHkgbmVjZXNzYXJ5IG9uZSBzZWVtcyB0byBiZSBgRVhUNF9GU2AuIEkmIzM5O3ZlIGNoZWNrZWQgdGhlIG1vZGlmaWVkIGZpbGVzIChgZnMvZXh0NC9pbmxpbmUuY2AsIGBmcy9leHQ0L2lub2RlLmNgLCBgZnMvZXh0NC9pYWxsb2MuY2AsIGBmcy9leHQ0L3N1cGVyLmNgLCBgZnMvZXh0NC9leHQ0LmhgKSDigJMgYWxsIG9mIHRoZW0gYXJlIHdpdGhpbiB0aGUgYENPTkZJR19FWFQ0X0ZTYCBzY29wZS4KCk5vdywgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGlzIHdoZXJlIHRoZSBtYWluIGNvbnZlcnNpb24gbG9naWMgb2NjdXJzLiBIb3dldmVyLCBpdCBpcyBzdGF0aWMgYW5kIGNhbm5vdCBiZSBhY2Nlc3NlZCBkaXJlY3RseSwgYnV0IHRoYXQgaXMgZmluZSBhcyB0aGUgZW50cnkgaXMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAuCgpJIGFsc28gYnJpZWZseSBsb29rZWQgYXQgYF9fZXh0NF9uZXdfaW5vZGVgLCB3aGljaCBpcyBjaGFuZ2VkIHRvIHByZXZlbnQgdGhlIHNldHRpbmcgb2YgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEgZm9yIHJlZ3VsYXIgZmlsZXMuIEhvd2V2ZXIsIHRoaXMgc2VlbXMgbGlrZSBhIGdlbmVyaWMgY2hhbmdlIGFuZCBub3QgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgZGVwcmVjYXRpb24uIFRoZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50LgoKSSBhbSBjb25maWRlbnQgdGhhdCB0aGUgcGFyYW1ldGVycyBzaG91bGQgYmUgc2V0IGFzOgotIEVuYWJsZUNvbmZpZ3M6IGBbJiMzNDtFWFQ0X0ZTJiMzNDtdYAotIEZvY3VzU3ltYm9sczogYFsmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YSYjMzQ7LCAmIzM0O2V4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YSYjMzQ7LCAmIzM0O2V4dDRfZGVzdHJveV9pbmxpbmVfZGF0YSYjMzQ7XWAKLSBSZWFzb25pbmc6ICYjMzQ7VGhlIHBhdGNoIGRlcHJlY2F0ZXMgdGhlIGlubGluZV9kYXRhIGZlYXR1cmUgZm9yIHJlZ3VsYXIgZmlsZXMgaW4gZXh0NCwgZm9yY2luZyBjb252ZXJzaW9uIHRvIGJsb2NrLWJhc2VkIHN0b3JhZ2Ugb24gd3JpdGUuIFRoaXMgbW9kaWZpZXMgY29yZSBleHQ0IHdyaXRlIHBhdGhzIGFuZCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLiYjMzQ7Ci0gV29ydGhGdXp6aW5nOiB0cnVlCgpJIGFtIHJlYWR5IHRvIGZpbmFsaXplIG15IHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF9kZXN0cm95X2lubGluZV9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGRlcHJlY2F0ZXMgdGhlIGlubGluZV9kYXRhIGZlYXR1cmUgZm9yIHJlZ3VsYXIgZmlsZXMgaW4gZXh0NCwgZm9yY2luZyBjb252ZXJzaW9uIHRvIGJsb2NrLWJhc2VkIHN0b3JhZ2Ugb24gd3JpdGUuIFRoaXMgbW9kaWZpZXMgY29yZSBleHQ0IHdyaXRlIHBhdGhzIGFuZCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhJiMzNDssCiAgICAmIzM0O2V4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZGVwcmVjYXRlcyB0aGUgaW5saW5lX2RhdGEgZmVhdHVyZSBmb3IgcmVndWxhciBmaWxlcyBpbiBleHQ0LCBmb3JjaW5nIGNvbnZlcnNpb24gdG8gYmxvY2stYmFzZWQgc3RvcmFnZSBvbiB3cml0ZS4gVGhpcyBtb2RpZmllcyBjb3JlIGV4dDQgd3JpdGUgcGF0aHMgYW5kIGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMDoxMzo0OC45NzcxNTg3OTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODYwNTQ0NjY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsXG4gICAgXCJleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFcIixcbiAgICBcImV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGRlcHJlY2F0ZXMgdGhlIGlubGluZV9kYXRhIGZlYXR1cmUgZm9yIHJlZ3VsYXIgZmlsZXMgaW4gZXh0NCwgZm9yY2luZyBjb252ZXJzaW9uIHRvIGJsb2NrLWJhc2VkIHN0b3JhZ2Ugb24gd3JpdGUuIFRoaXMgbW9kaWZpZXMgY29yZSBleHQ0IHdyaXRlIHBhdGhzIGFuZCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMDoxMzo0OC45NzcxNzM5NDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMTI4NDcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdhNTMwZDBmNTQwN2YwZmRkYjk0MmJlMTRkYzdiM2NjOTA0YzU0MTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDA6MTM6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0L2lubGluZWRhdGEucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0L2lubGluZWRhdGEucnN0XFxuaW5kZXggYTcyOGFmMGQyZmQwYzUuLjhkYzFiNmQ3NTM4OGQ3IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC9pbmxpbmVkYXRhLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC9pbmxpbmVkYXRhLnJzdFxcbkBAIC0zLDYgKzMsMTQgQEBcXG4gSW5saW5lIERhdGFcXG4gLS0tLS0tLS0tLS1cXG4gXFxuKy4uIHdhcm5pbmc6OlxcbitcXG4rICAgVGhlIGlubGluZSBkYXRhIGZlYXR1cmUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlXFxuKyAgIGtlcm5lbCByZWxlYXNlLiAgTmV3IHJlZ3VsYXIgZmlsZSBpbm9kZXMgbm8gbG9uZ2VyIHN0b3JlIGRhdGEgaW5saW5lLFxcbisgICBhbmQgd3JpdGVzIHRvIGV4aXN0aW5nIGlubGluZSBkYXRhIGlub2RlcyB0cmlnZ2VyIGF1dG9tYXRpYyBjb252ZXJzaW9uXFxuKyAgIHRvIGJsb2NrLWJhc2VkIHN0b3JhZ2UuICBVc2UgYGB0dW5lMmZzIC1PIF5pbmxpbmVfZGF0YWBgIHRvIGNvbnZlcnRcXG4rICAgZXhpc3RpbmcgZmlsZXN5c3RlbXMuXFxuK1xcbiBUaGUgaW5saW5lIGRhdGEgZmVhdHVyZSB3YXMgZGVzaWduZWQgdG8gaGFuZGxlIHRoZSBjYXNlIHRoYXQgYSBmaWxlJ3NcXG4gZGF0YSBpcyBzbyB0aW55IHRoYXQgaXQgcmVhZGlseSBmaXRzIGluc2lkZSB0aGUgaW5vZGUsIHdoaWNoXFxuICh0aGVvcmV0aWNhbGx5KSByZWR1Y2VzIGRpc2sgYmxvY2sgY29uc3VtcHRpb24gYW5kIHJlZHVjZXMgc2Vla3MuIElmIHRoZVxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggMjFhOTUxZjEwNjM2NzguLjgzMmJjMWYzYjYwMDI3IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcXG5AQCAtMzE0OCw3ICszMTQ4LDYgQEAgaW50IGRvX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTtcXG4gdm9pZCBleHQ0X3NldF9pbm9kZV9tYXBwaW5nX29yZGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiAjZGVmaW5lIEZBTExfQkFDS19UT19OT05ERUxBTExPQyAxXFxuLSNkZWZpbmUgRVhUNF9XUklURV9EQVRBX0lOTElORVxcdCAyXFxuIFxcbiB0eXBlZGVmIGVudW0ge1xcbiBcXHRFWFQ0X0lHRVRfTk9STUFMID1cXHQwLFxcbkBAIC0zNzU5LDEyICszNzU4LDYgQEAgZXh0ZXJuIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuIGV4dGVybiB2b2lkIGV4dDRfdXBkYXRlX2ZpbmFsX2RlKHZvaWQgKmRlX2J1ZiwgaW50IG9sZF9zaXplLCBpbnQgbmV3X3NpemUpO1xcbiBcXG4gaW50IGV4dDRfcmVhZHBhZ2VfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi1leHRlcm4gaW50IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0IGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcXG4tXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBmb2xpbyAqKmZvbGlvcCk7XFxuLWludCBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXFxuLVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBjb3BpZWQsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBleHRlcm4gaW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pYWxsb2MuYyBiL2ZzL2V4dDQvaWFsbG9jLmNcXG5pbmRleCBhNDBjYjI3ZjgxMTZjYi4uMjc4ZjBhYjhjOTk2ZTQgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9pYWxsb2MuY1xcbisrKyBiL2ZzL2V4dDQvaWFsbG9jLmNcXG5AQCAtMTMwNSw4ICsxMzA1LDggQEAgc3RydWN0IGlub2RlICpfX2V4dDRfbmV3X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXG4gXFx0ZWktXFx1MDAzZWlfZXh0cmFfaXNpemUgPSBzYmktXFx1MDAzZXNfd2FudF9leHRyYV9pc2l6ZTtcXG4gXFx0ZWktXFx1MDAzZWlfaW5saW5lX29mZiA9IDA7XFxuLVxcdGlmIChleHQ0X2hhc19mZWF0dXJlX2lubGluZV9kYXRhKHNiKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKCEoZWktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiAoRVhUNF9EQVhfRkx8RVhUNF9FQV9JTk9ERV9GTCkpIHx8IFNfSVNESVIobW9kZSkpKVxcbitcXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9pbmxpbmVfZGF0YShzYikgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIShlaS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2IEVYVDRfREFYX0ZMKSlcXG4gXFx0XFx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG4gXFx0cmV0ID0gaW5vZGU7XFxuIFxcdGVyciA9IGRxdW90X2FsbG9jX2lub2RlKGlub2RlKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmNcXG5pbmRleCBjZWVlNjlhNjY0ODJiYy4uZTBiODAyNzNlMzIyZDggMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xcbisrKyBiL2ZzL2V4dDQvaW5saW5lLmNcXG5AQCAtMTIsNiArMTIsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcImV4dDRfamJkMi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZXh0NC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZXh0NF9leHRlbnRzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4YXR0ci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidHJ1bmNhdGUuaFxcXCJcXG4gXFxuQEAgLTIwLDEwICsyMSw2IEBAXFxuICNkZWZpbmUgRVhUNF9JTkxJTkVfRE9URE9UX09GRlNFVFxcdDJcXG4gI2RlZmluZSBFWFQ0X0lOTElORV9ET1RET1RfU0laRVxcdFxcdDRcXG4gXFxuLVxcbi1zdGF0aWMgaW50IGV4dDRfZGFfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4tXFxuIHN0YXRpYyBpbnQgZXh0NF9nZXRfaW5saW5lX3NpemUoc3RydWN0IGlub2RlICppbm9kZSlcXG4ge1xcbiBcXHRpZiAoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfb2ZmKVxcbkBAIC0yMTgsNTEgKzIxNSw2IEBAIHN0YXRpYyBpbnQgZXh0NF9yZWFkX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZmZlcixcXG4gXFx0cmV0dXJuIGNwX2xlbjtcXG4gfVxcbiBcXG4tLypcXG4tICogd3JpdGUgdGhlIGJ1ZmZlciB0byB0aGUgaW5saW5lIGlub2RlLlxcbi0gKiBJZiAnY3JlYXRlJyBpcyBzZXQsIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhlIGV4dHJhIGNvcHkgaW4gdGhlIHhhdHRyXFxuLSAqIHZhbHVlIHNpbmNlIGl0IGlzIGFscmVhZHkgaGFuZGxlZCBieSBleHQ0X3hhdHRyX2lib2R5X3NldC5cXG4tICogVGhhdCBzYXZlcyB1cyBvbmUgbWVtY3B5Llxcbi0gKi9cXG4tc3RhdGljIHZvaWQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxcbi1cXHRcXHRcXHRcXHQgICB2b2lkICpidWZmZXIsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGludCBsZW4pXFxuLXtcXG4tXFx0c3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5O1xcbi1cXHRzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIgKmhlYWRlcjtcXG4tXFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcXG4tXFx0aW50IGNwX2xlbiA9IDA7XFxuLVxcbi1cXHRpZiAodW5saWtlbHkoZXh0NF9lbWVyZ2VuY3lfc3RhdGUoaW5vZGUtXFx1MDAzZWlfc2IpKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0QlVHX09OKCFFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2lubGluZV9vZmYpO1xcbi1cXHRCVUdfT04ocG9zICsgbGVuIFxcdTAwM2UgRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfc2l6ZSk7XFxuLVxcbi1cXHRyYXdfaW5vZGUgPSBleHQ0X3Jhd19pbm9kZShpbG9jKTtcXG4tXFx0YnVmZmVyICs9IHBvcztcXG4tXFxuLVxcdGlmIChwb3MgXFx1MDAzYyBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKSB7XFxuLVxcdFxcdGNwX2xlbiA9IHBvcyArIGxlbiBcXHUwMDNlIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgP1xcbi1cXHRcXHRcXHQgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSAtIHBvcyA6IGxlbjtcXG4tXFx0XFx0bWVtY3B5KCh2b2lkICopcmF3X2lub2RlLVxcdTAwM2VpX2Jsb2NrICsgcG9zLCBidWZmZXIsIGNwX2xlbik7XFxuLVxcbi1cXHRcXHRsZW4gLT0gY3BfbGVuO1xcbi1cXHRcXHRidWZmZXIgKz0gY3BfbGVuO1xcbi1cXHRcXHRwb3MgKz0gY3BfbGVuO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIWxlbilcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0cG9zIC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuLVxcdGhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7XFxuLVxcdGVudHJ5ID0gKHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICopKCh2b2lkICopcmF3X2lub2RlICtcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX29mZik7XFxuLVxcbi1cXHRtZW1jcHkoKHZvaWQgKilJRklSU1QoaGVhZGVyKSArIGxlMTZfdG9fY3B1KGVudHJ5LVxcdTAwM2VlX3ZhbHVlX29mZnMpICsgcG9zLFxcbi1cXHQgICAgICAgYnVmZmVyLCBsZW4pO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxlbilcXG4ge1xcbkBAIC00MzMsNyArMzg1LDggQEAgc3RhdGljIGludCBleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gfVxcbiBcXG4gc3RhdGljIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGV4dDRfZnNibGtfdCBwYmxrKVxcbiB7XFxuIFxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcXG4gXFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHtcXG5AQCAtNDgxLDcgKzQzNCwyMSBAQCBzdGF0aWMgaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0XFx0ICAgIFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbiBcXHRcXHRcXHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xcbiBcXHRcXHRcXHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XFxuK1xcdFxcdFxcdGlmIChwYmxrKSB7XFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBleHQ0X2V4dGVudF9oZWFkZXIgKmVoO1xcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4O1xcbitcXG4rXFx0XFx0XFx0XFx0ZWggPSBleHRfaW5vZGVfaGRyKGlub2RlKTtcXG4rXFx0XFx0XFx0XFx0ZXggPSBFWFRfRklSU1RfRVhURU5UKGVoKTtcXG4rXFx0XFx0XFx0XFx0ZXgtXFx1MDAzZWVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XFxuK1xcdFxcdFxcdFxcdGV4LVxcdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNigxKTtcXG4rXFx0XFx0XFx0XFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCBwYmxrKTtcXG4rXFx0XFx0XFx0XFx0ZWgtXFx1MDAzZWVoX2VudHJpZXMgPSBjcHVfdG9fbGUxNigxKTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuK1xcdH0gZWxzZSBpZiAocGJsaykge1xcbitcXHRcXHQvKiBpbmRpcmVjdCBtYXBwaW5nOiBzZXQgaV9kYXRhWzBdIGRpcmVjdGx5ICovXFxuK1xcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZGF0YVswXSA9IGNwdV90b19sZTMyKHBibGspO1xcbiBcXHR9XFxuIFxcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7XFxuIFxcbkBAIC01NjgsMTIyICs1MzUsNiBAQCBpbnQgZXh0NF9yZWFkcGFnZV9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuIHJldCBcXHUwMDNlPSAwID8gMCA6IHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi17XFxuLVxcdGludCByZXQsIG5lZWRlZF9ibG9ja3MsIG5vX2V4cGFuZDtcXG4tXFx0aGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7XFxuLVxcdGludCByZXRyaWVzID0gMCwgc2VtX2hlbGQgPSAwO1xcbi1cXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcXG4tXFx0dW5zaWduZWQgZnJvbSwgdG87XFxuLVxcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcXG4tXFxuLVxcdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIGNsZWFyIHRoZSBmbGFnIHNvIHRoYXQgbm8gbmV3IHdyaXRlXFxuLVxcdFxcdCAqIHdpbGwgdHJhcCBoZXJlIGFnYWluLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0fVxcbi1cXG4tXFx0bmVlZGVkX2Jsb2NrcyA9IGV4dDRfY2h1bmtfdHJhbnNfZXh0ZW50KGlub2RlLCAxKTtcXG4tXFxuLVxcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tcmV0cnk6XFxuLVxcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9XUklURV9QQUdFLCBuZWVkZWRfYmxvY2tzKTtcXG4tXFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XFxuLVxcdFxcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcXG4tXFx0XFx0aGFuZGxlID0gTlVMTDtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdC8qIFdlIGNhbm5vdCByZWN1cnNlIGludG8gdGhlIGZpbGVzeXN0ZW0gYXMgdGhlIHRyYW5zYWN0aW9uIGlzIGFscmVhZHlcXG4tXFx0ICogc3RhcnRlZCAqL1xcbi1cXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4gfCBGR1BfTk9GUyxcXG4tXFx0XFx0XFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XFxuLVxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLVxcdFxcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xcbi1cXHRcXHRnb3RvIG91dF9ub2ZvbGlvO1xcbi1cXHR9XFxuLVxcbi1cXHRleHQ0X3dyaXRlX2xvY2tfeGF0dHIoaW5vZGUsIFxcdTAwMjZub19leHBhbmQpO1xcbi1cXHRzZW1faGVsZCA9IDE7XFxuLVxcdC8qIElmIHNvbWUgb25lIGhhcyBhbHJlYWR5IGRvbmUgdGhpcyBmb3IgdXMsIGp1c3QgZXhpdC4gKi9cXG4tXFx0aWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcXG4tXFx0XFx0cmV0ID0gMDtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdGZyb20gPSAwO1xcbi1cXHR0byA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGlub2RlKTtcXG4tXFx0aWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkge1xcbi1cXHRcXHRyZXQgPSBleHQ0X3JlYWRfaW5saW5lX2ZvbGlvKGlub2RlLCBmb2xpbyk7XFxuLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0fVxcbi1cXG4tXFx0ZXh0NF9mY190cmFja19pbm9kZShoYW5kbGUsIGlub2RlKTtcXG4tXFx0cmV0ID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRpZiAoZXh0NF9zaG91bGRfZGlvcmVhZF9ub2xvY2soaW5vZGUpKSB7XFxuLVxcdFxcdHJldCA9IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oaGFuZGxlLCBmb2xpbywgZnJvbSwgdG8sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgZXh0NF9nZXRfYmxvY2tfdW53cml0dGVuKTtcXG4tXFx0fSBlbHNlXFxuLVxcdFxcdHJldCA9IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oaGFuZGxlLCBmb2xpbywgZnJvbSwgdG8sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgZXh0NF9nZXRfYmxvY2spO1xcbi1cXHRjbGVhcl9idWZmZXJfbmV3KGZvbGlvX2J1ZmZlcnMoZm9saW8pKTtcXG4tXFxuLVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IGV4dDRfc2hvdWxkX2pvdXJuYWxfZGF0YShpbm9kZSkpIHtcXG4tXFx0XFx0cmV0ID0gZXh0NF93YWxrX3BhZ2VfYnVmZmVycyhoYW5kbGUsIGlub2RlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIGZvbGlvX2J1ZmZlcnMoZm9saW8pLCBmcm9tLCB0byxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBOVUxMLCBkb19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MpO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLVxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdFxcdGZvbGlvID0gTlVMTDtcXG4tXFx0XFx0ZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpO1xcbi1cXHRcXHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXFx1MDAyNm5vX2V4cGFuZCk7XFxuLVxcdFxcdHNlbV9oZWxkID0gMDtcXG4tXFx0XFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4tXFx0XFx0aGFuZGxlID0gTlVMTDtcXG4tXFx0XFx0ZXh0NF90cnVuY2F0ZV9mYWlsZWRfd3JpdGUoaW5vZGUpO1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBJZiB0cnVuY2F0ZSBmYWlsZWQgZWFybHkgdGhlIGlub2RlIG1pZ2h0XFxuLVxcdFxcdCAqIHN0aWxsIGJlIG9uIHRoZSBvcnBoYW4gbGlzdDsgd2UgbmVlZCB0b1xcbi1cXHRcXHQgKiBtYWtlIHN1cmUgdGhlIGlub2RlIGlzIHJlbW92ZWQgZnJvbSB0aGVcXG4tXFx0XFx0ICogb3JwaGFuIGxpc3QgaW4gdGhhdCBjYXNlLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGlub2RlLVxcdTAwM2VpX25saW5rKVxcbi1cXHRcXHRcXHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAocmV0ID09IC1FTk9TUEMgXFx1MDAyNlxcdTAwMjYgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtXFx1MDAzZWlfc2IsIFxcdTAwMjZyZXRyaWVzKSlcXG4tXFx0XFx0Z290byByZXRyeTtcXG4tXFxuLVxcdGlmIChmb2xpbylcXG4tXFx0XFx0YmxvY2tfY29tbWl0X3dyaXRlKGZvbGlvLCBmcm9tLCB0byk7XFxuLW91dDpcXG4tXFx0aWYgKGZvbGlvKSB7XFxuLVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLVxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdH1cXG4tb3V0X25vZm9saW86XFxuLVxcdGlmIChzZW1faGVsZClcXG4tXFx0XFx0ZXh0NF93cml0ZV91bmxvY2tfeGF0dHIoaW5vZGUsIFxcdTAwMjZub19leHBhbmQpO1xcbi1cXHRpZiAoaGFuZGxlKVxcbi1cXHRcXHRleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xcbi1cXHRicmVsc2UoaWxvYy5iaCk7XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuIC8qXFxuICAqIFByZXBhcmUgdGhlIHdyaXRlIGZvciB0aGUgaW5saW5lIGRhdGEuXFxuICAqIElmIHRoZSBkYXRhIGNhbiBiZSB3cml0dGVuIGludG8gdGhlIGlub2RlLCB3ZSBqdXN0IHJlYWRcXG5AQCAtNjk4LDI0OCArNTQ5LDggQEAgaW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZm9saW8gKipmb2xpb3AsXFxuIFxcdFxcdFxcdFxcdFxcdCAgYm9vbCBkYSlcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbi1cXHRoYW5kbGVfdCAqaGFuZGxlO1xcbi1cXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi1cXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XFxuLVxcdGludCByZXRyaWVzID0gMDtcXG4tXFxuLVxcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tcmV0cnlfam91cm5hbDpcXG4tXFx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX0lOT0RFLCAxKTtcXG4tXFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XFxuLVxcdFxcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcXG4tXFx0XFx0Z290byBvdXRfcmVsZWFzZV9iaDtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0ID0gZXh0NF9wcmVwYXJlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIHBvcyArIGxlbik7XFxuLVxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FTk9TUEMpXFxuLVxcdFxcdGdvdG8gb3V0X3N0b3Bfam91cm5hbDtcXG4tXFxuLVxcdGlmIChyZXQgPT0gLUVOT1NQQykge1xcbi1cXHRcXHRleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xcbi1cXHRcXHRpZiAoIWRhKSB7XFxuLVxcdFxcdFxcdGJyZWxzZShpbG9jLmJoKTtcXG4tXFx0XFx0XFx0LyogUmV0cnkgaW5zaWRlICovXFxuLVxcdFxcdFxcdHJldHVybiBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KG1hcHBpbmcsIGlub2RlKTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0cmV0ID0gZXh0NF9kYV9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XFxuLVxcdFxcdGlmIChyZXQgPT0gLUVOT1NQQyBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtXFx1MDAzZWlfc2IsIFxcdTAwMjZyZXRyaWVzKSlcXG4tXFx0XFx0XFx0Z290byByZXRyeV9qb3VybmFsO1xcbi1cXHRcXHRnb3RvIG91dF9yZWxlYXNlX2JoO1xcbi1cXHR9XFxuLVxcbi1cXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4gfCBGR1BfTk9GUyxcXG4tXFx0XFx0XFx0XFx0XFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XFxuLVxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLVxcdFxcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xcbi1cXHRcXHRnb3RvIG91dF9zdG9wX2pvdXJuYWw7XFxuLVxcdH1cXG4tXFxuLVxcdGRvd25fcmVhZChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNleGF0dHJfc2VtKTtcXG4tXFx0LyogU29tZW9uZSBlbHNlIGhhZCBjb252ZXJ0ZWQgaXQgdG8gZXh0ZW50ICovXFxuLVxcdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XFxuLVxcdFxcdHJldCA9IDA7XFxuLVxcdFxcdGdvdG8gb3V0X3JlbGVhc2VfZm9saW87XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpIHtcXG4tXFx0XFx0cmV0ID0gZXh0NF9yZWFkX2lubGluZV9mb2xpbyhpbm9kZSwgZm9saW8pO1xcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0Z290byBvdXRfcmVsZWFzZV9mb2xpbztcXG4tXFx0fVxcbi1cXG4tXFx0cmV0ID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cXHUwMDNlaV9zYiwgaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gb3V0X3JlbGVhc2VfZm9saW87XFxuLVxcdCpmb2xpb3AgPSBmb2xpbztcXG4tXFx0dXBfcmVhZChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNleGF0dHJfc2VtKTtcXG4tXFx0YnJlbHNlKGlsb2MuYmgpO1xcbi1cXHRyZXR1cm4gMTtcXG4tXFxuLW91dF9yZWxlYXNlX2ZvbGlvOlxcbi1cXHR1cF9yZWFkKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2V4YXR0cl9zZW0pO1xcbi1cXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi1cXHRmb2xpb19wdXQoZm9saW8pO1xcbi1vdXRfc3RvcF9qb3VybmFsOlxcbi1cXHRleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xcbi1vdXRfcmVsZWFzZV9iaDpcXG4tXFx0YnJlbHNlKGlsb2MuYmgpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi0vKlxcbi0gKiBUcnkgdG8gd3JpdGUgZGF0YSBpbiB0aGUgaW5vZGUuXFxuLSAqIElmIHRoZSBpbm9kZSBoYXMgaW5saW5lIGRhdGEsIGNoZWNrIHdoZXRoZXIgdGhlIG5ldyB3cml0ZSBjYW4gYmVcXG4tICogaW4gdGhlIGlub2RlIGFsc28uIElmIG5vdCwgY3JlYXRlIHRoZSBwYWdlIHRoZSBoYW5kbGUsIG1vdmUgdGhlIGRhdGFcXG4tICogdG8gdGhlIHBhZ2UgbWFrZSBpdCB1cGRhdGUgYW5kIGxldCB0aGUgbGF0ZXIgY29kZXMgY3JlYXRlIGV4dGVudCBmb3IgaXQuXFxuLSAqL1xcbi1pbnQgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLVxcdFxcdFxcdFxcdCAgc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0ICBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXFxuLVxcdFxcdFxcdFxcdCAgc3RydWN0IGZvbGlvICoqZm9saW9wKVxcbi17XFxuLVxcdGlmIChwb3MgKyBsZW4gXFx1MDAzZSBleHQ0X2dldF9tYXhfaW5saW5lX3NpemUoaW5vZGUpKVxcbi1cXHRcXHRyZXR1cm4gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XFxuLVxcdHJldHVybiBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEobWFwcGluZywgaW5vZGUsIHBvcywgbGVuLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBmb2xpb3AsIGZhbHNlKTtcXG4tfVxcbi1cXG4taW50IGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcXG4tXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGNvcGllZCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4te1xcbi1cXHRoYW5kbGVfdCAqaGFuZGxlID0gZXh0NF9qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCk7XFxuLVxcdGludCBub19leHBhbmQ7XFxuLVxcdHZvaWQgKmthZGRyO1xcbi1cXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XFxuLVxcdGludCByZXQgPSAwLCByZXQyO1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KGNvcGllZCBcXHUwMDNjIGxlbikgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxcbi1cXHRcXHRjb3BpZWQgPSAwO1xcbi1cXG4tXFx0aWYgKGxpa2VseShjb3BpZWQpKSB7XFxuLVxcdFxcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbi1cXHRcXHRpZiAocmV0KSB7XFxuLVxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLVxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdFxcdFxcdGV4dDRfc3RkX2Vycm9yKGlub2RlLVxcdTAwM2VpX3NiLCByZXQpO1xcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0fVxcbi1cXHRcXHRleHQ0X3dyaXRlX2xvY2tfeGF0dHIoaW5vZGUsIFxcdTAwMjZub19leHBhbmQpO1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBXZSBjb3VsZCBoYXZlIHJhY2VkIHdpdGggZXh0NF9wYWdlX21rd3JpdGUoKSBjb252ZXJ0aW5nXFxuLVxcdFxcdCAqIHRoZSBpbm9kZSBhbmQgY2xlYXJpbmcgdGhlIGlubGluZSBkYXRhIGZsYWcsIHNvIHdlIGp1c3RcXG4tXFx0XFx0ICogcmVsZWFzZSByZXNvdXJjZXMgYW5kIHJldHJ5IHRoZSB3aG9sZSB3cml0ZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmICh1bmxpa2VseSghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSkge1xcbi1cXHRcXHRcXHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXFx1MDAyNm5vX2V4cGFuZCk7XFxuLVxcdFxcdFxcdGJyZWxzZShpbG9jLmJoKTtcXG4tXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFx0XFx0XFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIGVpLVxcdTAwM2VpX2lubGluZV9vZmYgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZVxcbi1cXHRcXHQgKiBleHQ0X3dyaXRlX2JlZ2luKCkgY2FsbGVkXFxuLVxcdFxcdCAqIGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKClcXG4tXFx0XFx0ICovXFxuLVxcdFxcdCh2b2lkKSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcXG4tXFxuLVxcdFxcdGthZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgMCk7XFxuLVxcdFxcdGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoaW5vZGUsIFxcdTAwMjZpbG9jLCBrYWRkciwgcG9zLCBjb3BpZWQpO1xcbi1cXHRcXHRrdW5tYXBfbG9jYWwoa2FkZHIpO1xcbi1cXHRcXHRmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcXG4tXFx0XFx0LyogY2xlYXIgZGlydHkgZmxhZyBzbyB0aGF0IHdyaXRlcGFnZXMgd291bGRuJ3Qgd29yayBmb3IgdXMuICovXFxuLVxcdFxcdGZvbGlvX2NsZWFyX2RpcnR5KGZvbGlvKTtcXG4tXFxuLVxcdFxcdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcXHUwMDI2bm9fZXhwYW5kKTtcXG4tXFx0XFx0YnJlbHNlKGlsb2MuYmgpO1xcbi1cXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogSXQncyBpbXBvcnRhbnQgdG8gdXBkYXRlIGlfc2l6ZSB3aGlsZSBzdGlsbCBob2xkaW5nIGZvbGlvXFxuLVxcdFxcdCAqIGxvY2s6IHBhZ2Ugd3JpdGVvdXQgY291bGQgb3RoZXJ3aXNlIGNvbWUgaW4gYW5kIHplcm9cXG4tXFx0XFx0ICogYmV5b25kIGlfc2l6ZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGV4dDRfdXBkYXRlX2lub2RlX3NpemUoaW5vZGUsIHBvcyArIGNvcGllZCk7XFxuLVxcdH1cXG4tXFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIERvbid0IG1hcmsgdGhlIGlub2RlIGRpcnR5IHVuZGVyIGZvbGlvIGxvY2suIEZpcnN0LCBpdCB1bm5lY2Vzc2FyaWx5XFxuLVxcdCAqIG1ha2VzIHRoZSBob2xkaW5nIHRpbWUgb2YgZm9saW8gbG9jayBsb25nZXIuIFNlY29uZCwgaXQgZm9yY2VzIGxvY2tcXG4tXFx0ICogb3JkZXJpbmcgb2YgZm9saW8gbG9jayBhbmQgdHJhbnNhY3Rpb24gc3RhcnQgZm9yIGpvdXJuYWxpbmdcXG4tXFx0ICogZmlsZXN5c3RlbXMuXFxuLVxcdCAqL1xcbi1cXHRpZiAobGlrZWx5KGNvcGllZCkpXFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbi1vdXQ6XFxuLVxcdC8qXFxuLVxcdCAqIElmIHdlIGRpZG4ndCBjb3B5IGFzIG11Y2ggZGF0YSBhcyBleHBlY3RlZCwgd2UgbmVlZCB0byB0cmltIGJhY2tcXG4tXFx0ICogc2l6ZSBvZiB4YXR0ciBjb250YWluaW5nIGlubGluZSBkYXRhLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHBvcyArIGxlbiBcXHUwMDNlIGlub2RlLVxcdTAwM2VpX3NpemUgXFx1MDAyNlxcdTAwMjYgZXh0NF9jYW5fdHJ1bmNhdGUoaW5vZGUpKVxcbi1cXHRcXHRleHQ0X29ycGhhbl9hZGQoaGFuZGxlLCBpbm9kZSk7XFxuLVxcbi1cXHRyZXQyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4tXFx0aWYgKCFyZXQpXFxuLVxcdFxcdHJldCA9IHJldDI7XFxuLVxcdGlmIChwb3MgKyBsZW4gXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zaXplKSB7XFxuLVxcdFxcdGV4dDRfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKGlub2RlKTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogSWYgdHJ1bmNhdGUgZmFpbGVkIGVhcmx5IHRoZSBpbm9kZSBtaWdodCBzdGlsbCBiZVxcbi1cXHRcXHQgKiBvbiB0aGUgb3JwaGFuIGxpc3Q7IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbm9kZVxcbi1cXHRcXHQgKiBpcyByZW1vdmVkIGZyb20gdGhlIG9ycGhhbiBsaXN0IGluIHRoYXQgY2FzZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChpbm9kZS1cXHUwMDNlaV9ubGluaylcXG4tXFx0XFx0XFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gcmV0ID8gcmV0IDogY29waWVkO1xcbi19XFxuLVxcbi0vKlxcbi0gKiBUcnkgdG8gbWFrZSB0aGUgcGFnZSBjYWNoZSBhbmQgaGFuZGxlIHJlYWR5IGZvciB0aGUgaW5saW5lIGRhdGEgY2FzZS5cXG4tICogV2UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiAyIGNhc2VzOlxcbi0gKiAxLiBUaGUgaW5vZGUgaXMgY3JlYXRlZCBhbmQgdGhlIGZpcnN0IHdyaXRlIGV4Y2VlZHMgaW5saW5lIHNpemUuIFdlIGNhblxcbi0gKiAgICBjbGVhciB0aGUgaW5vZGUgc3RhdGUgc2FmZWx5Llxcbi0gKiAyLiBUaGUgaW5vZGUgaGFzIGlubGluZSBkYXRhLCB0aGVuIHdlIG5lZWQgdG8gcmVhZCB0aGUgZGF0YSwgbWFrZSBpdFxcbi0gKiAgICB1cGRhdGUgYW5kIGRpcnR5IHNvIHRoYXQgZXh0NF9kYV93cml0ZXBhZ2VzIGNhbiBoYW5kbGUgaXQuIFdlIGRvbid0XFxuLSAqICAgIG5lZWQgdG8gc3RhcnQgdGhlIGpvdXJuYWwgc2luY2UgdGhlIGZpbGUncyBtZXRhZGF0YSBpc24ndCBjaGFuZ2VkIG5vdy5cXG4tICovXFxuLXN0YXRpYyBpbnQgZXh0NF9kYV9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLXtcXG4tXFx0aW50IHJldCA9IDAsIGlubGluZV9zaXplO1xcbi1cXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi1cXG4tXFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOLFxcbi1cXHRcXHRcXHRcXHRcXHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcXG4tXFx0aWYgKElTX0VSUihmb2xpbykpXFxuLVxcdFxcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcXG4tXFxuLVxcdGRvd25fcmVhZChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNleGF0dHJfc2VtKTtcXG4tXFx0aWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcXG4tXFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0fVxcbi1cXG4tXFx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XFxuLVxcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XFxuLVxcdFxcdHJldCA9IGV4dDRfcmVhZF9pbmxpbmVfZm9saW8oaW5vZGUsIGZvbGlvKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuLVxcbi1cXHRyZXQgPSBleHQ0X2Jsb2NrX3dyaXRlX2JlZ2luKE5VTEwsIGZvbGlvLCAwLCBpbmxpbmVfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBleHQ0X2RhX2dldF9ibG9ja19wcmVwKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHR1cF9yZWFkKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2V4YXR0cl9zZW0pO1xcbi1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi1cXHRcXHRleHQ0X3RydW5jYXRlX2ZhaWxlZF93cml0ZShpbm9kZSk7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdH1cXG4tXFxuLVxcdGNsZWFyX2J1ZmZlcl9uZXcoZm9saW9fYnVmZmVycyhmb2xpbykpO1xcbi1cXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4tXFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuLVxcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG4tXFxuLW91dDpcXG4tXFx0dXBfcmVhZChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNleGF0dHJfc2VtKTtcXG4tXFx0aWYgKGZvbGlvKSB7XFxuLVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLVxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0LyogSW5saW5lIGRhdGEgaXMgZGVwcmVjYXRlZDogYWx3YXlzIGNvbnZlcnQgdG8gYmxvY2sgZm9ybWF0ICovXFxuK1xcdHJldHVybiBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xcbiB9XFxuIFxcbiAjaWZkZWYgSU5MSU5FX0RJUl9ERUJVR1xcbkBAIC0xMDc5LDIzICs2OTAsNiBAQCBzdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxcbi1cXHRcXHRcXHRcXHQgICAgIHZvaWQgKmJ1ZiwgaW50IGlubGluZV9zaXplKVxcbi17XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRyZXQgPSBleHQ0X2NyZWF0ZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbmxpbmVfc2l6ZSk7XFxuLVxcdGlmIChyZXQpIHtcXG4tXFx0XFx0ZXh0NF9tc2coaW5vZGUtXFx1MDAzZWlfc2IsIEtFUk5fRU1FUkcsXFxuLVxcdFxcdFxcdFxcXCJlcnJvciByZXN0b3JpbmcgaW5saW5lX2RhdGEgZm9yIGlub2RlIC0tIHBvdGVudGlhbCBkYXRhIGxvc3MhIChpbm9kZSAlbGx1LCBlcnJvciAlZClcXFwiLFxcbi1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8sIHJldCk7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0fVxcbi1cXHRleHQ0X3dyaXRlX2lubGluZV9kYXRhKGlub2RlLCBpbG9jLCBidWYsIDAsIGlubGluZV9zaXplKTtcXG4tXFx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXFxuQEAgLTExMDMsNyArNjk3LDcgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdGludCBlcnJvcjtcXG4gXFx0dm9pZCAqYnVmID0gTlVMTDtcXG4gXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkYXRhX2JoID0gTlVMTDtcXG4tXFx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XFxuK1xcdGV4dDRfZnNibGtfdCBwYmxrO1xcbiBcXHRpbnQgaW5saW5lX3NpemU7XFxuIFxcbiBcXHRpbmxpbmVfc2l6ZSA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGlub2RlKTtcXG5AQCAtMTEyOSwyNSArNzIzLDIwIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0ZXJyb3IgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpO1xcbitcXHQvKlxcbitcXHQgKiBBbGxvY2F0ZSBhIGRhdGEgYmxvY2sgYW5kIHdyaXRlIHRoZSBpbmxpbmUgZGF0YSB0byBpdCBiZWZvcmVcXG4rXFx0ICogZGVzdHJveWluZyB0aGUgaW5saW5lIGRhdGEuICBUaGlzIGVuc3VyZXMgdGhhdCBvbiBmYWlsdXJlIHdlXFxuK1xcdCAqIGNhbiBzaW1wbHkgZnJlZSB0aGUgYWxsb2NhdGVkIGJsb2NrIHdpdGhvdXQgbmVlZGluZyB0byByZXN0b3JlXFxuK1xcdCAqIHRoZSBpbmxpbmUgZGF0YS5cXG4rXFx0ICovXFxuK1xcdHBibGsgPSBleHQ0X25ld19tZXRhX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCAwLCAwLCBOVUxMLCBcXHUwMDI2ZXJyb3IpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0bWFwLm1fbGJsayA9IDA7XFxuLVxcdG1hcC5tX2xlbiA9IDE7XFxuLVxcdG1hcC5tX2ZsYWdzID0gMDtcXG4tXFx0ZXJyb3IgPSBleHQ0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNm1hcCwgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSk7XFxuLVxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gb3V0X3Jlc3RvcmU7XFxuLVxcdGlmICghKG1hcC5tX2ZsYWdzIFxcdTAwMjYgRVhUNF9NQVBfTUFQUEVEKSkge1xcbi1cXHRcXHRlcnJvciA9IC1FSU87XFxuLVxcdFxcdGdvdG8gb3V0X3Jlc3RvcmU7XFxuLVxcdH1cXG4tXFxuLVxcdGRhdGFfYmggPSBzYl9nZXRibGsoaW5vZGUtXFx1MDAzZWlfc2IsIG1hcC5tX3BibGspO1xcbitcXHRkYXRhX2JoID0gc2JfZ2V0YmxrKGlub2RlLVxcdTAwM2VpX3NiLCBwYmxrKTtcXG4gXFx0aWYgKCFkYXRhX2JoKSB7XFxuIFxcdFxcdGVycm9yID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBvdXRfcmVzdG9yZTtcXG4rXFx0XFx0Z290byBvdXRfZnJlZV9ibG9jaztcXG4gXFx0fVxcbiBcXG4gXFx0bG9ja19idWZmZXIoZGF0YV9iaCk7XFxuQEAgLTExNTUsOCArNzQ0LDcgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBFWFQ0X0pUUl9OT05FKTtcXG4gXFx0aWYgKGVycm9yKSB7XFxuIFxcdFxcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XFxuLVxcdFxcdGVycm9yID0gLUVJTztcXG4tXFx0XFx0Z290byBvdXRfcmVzdG9yZTtcXG4rXFx0XFx0Z290byBvdXRfZnJlZV9ibG9jaztcXG4gXFx0fVxcbiBcXHRtZW1zZXQoZGF0YV9iaC1cXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbiBcXG5AQCAtMTE2NCwyNiArNzUyLDM4IEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbiBcXHRcXHRtZW1jcHkoZGF0YV9iaC1cXHUwMDNlYl9kYXRhLCBidWYsIGlubGluZV9zaXplKTtcXG4gXFx0XFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShkYXRhX2JoKTtcXG4gXFx0XFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcXG4tXFx0XFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIGlub2RlLCBkYXRhX2JoKTtcXG4rXFx0XFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGlub2RlLCBkYXRhX2JoKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcXG4tXFx0XFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4tXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbi1cXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbi1cXG4gXFx0XFx0ZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCxcXG4gXFx0XFx0XFx0ICBsZTMyX3RvX2NwdSgoKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopYnVmKS1cXHUwMDNlaW5vZGUpLFxcbiBcXHRcXHRcXHQgIGJ1ZiArIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxcbiBcXHRcXHRcXHQgIGlubGluZV9zaXplIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUpO1xcbi1cXHRcXHRpZiAoIWVycm9yKVxcbi1cXHRcXHRcXHRlcnJvciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTtcXG4gXFx0fVxcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gb3V0X2ZyZWVfYmxvY2s7XFxuIFxcbi1vdXRfcmVzdG9yZTpcXG4rXFx0LypcXG4rXFx0ICogRGF0YSBpcyBzYWZlbHkgaW4gdGhlIGFsbG9jYXRlZCBibG9jay4gIE5vdyBkZXN0cm95IHRoZSBpbmxpbmVcXG4rXFx0ICogZGF0YSBhbmQgcG9wdWxhdGUgdGhlIGV4dGVudCBlbnRyeSBhdG9taWNhbGx5IHVuZGVyIGlfZGF0YV9zZW1cXG4rXFx0ICogKGluc2lkZSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKS4gIFRoaXMgZW5zdXJlcyBub1xcbitcXHQgKiBjb25jdXJyZW50IHJlYWRlciBzZWVzIGFuIGVtcHR5IGV4dGVudCB0cmVlLlxcbitcXHQgKi9cXG4rXFx0ZXJyb3IgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUsIHBibGspO1xcbiBcXHRpZiAoZXJyb3IpXFxuLVxcdFxcdGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbG9jLCBidWYsIGlubGluZV9zaXplKTtcXG4rXFx0XFx0Z290byBvdXRfZnJlZV9ibG9jaztcXG4gXFxuK1xcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuK1xcdFxcdGlub2RlLVxcdTAwM2VpX3NpemUgPSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemU7XFxuK1xcdFxcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplKTtcXG4rXFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyb3IgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XFxuK1xcdGdvdG8gb3V0O1xcbitcXG4rb3V0X2ZyZWVfYmxvY2s6XFxuK1xcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgcGJsaywgMSwgMCk7XFxuIG91dDpcXG4gXFx0YnJlbHNlKGRhdGFfYmgpO1xcbiBcXHRrZnJlZShidWYpO1xcbkBAIC0xODIxLDcgKzE0MjEsNyBAQCBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGludCByZXQsIG5vX2V4cGFuZDtcXG4gXFxuIFxcdGV4dDRfd3JpdGVfbG9ja194YXR0cihpbm9kZSwgXFx1MDAyNm5vX2V4cGFuZCk7XFxuLVxcdHJldCA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSk7XFxuK1xcdHJldCA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSwgMCk7XFxuIFxcdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcXHUwMDI2bm9fZXhwYW5kKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTE5ODAsMTggKzE1ODAsNiBAQCBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XFxuIFxcdFxcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH0gZWxzZSBpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIElub2RlIGhhcyBpbmxpbmUgZGF0YSBidXQgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEgaXNcXG4tXFx0XFx0ICogY2xlYXJlZC4gVGhpcyBtZWFucyB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBtb3Zpbmcgb2ZcXG4tXFx0XFx0ICogaW5saW5lIGRhdGEgdG8gZGVsYXkgYWxsb2NhdGVkIGJsb2NrLiBKdXN0IGZvcmNlIHdyaXRlb3V0XFxuLVxcdFxcdCAqIGhlcmUgdG8gZmluaXNoIGNvbnZlcnNpb24uXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRlcnJvciA9IGZpbGVtYXBfZmx1c2goaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuLVxcdFxcdGlmIChlcnJvcilcXG4tXFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbi1cXHRcXHRpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuIFxcdG5lZWRlZF9ibG9ja3MgPSBleHQ0X2NodW5rX3RyYW5zX2V4dGVudChpbm9kZSwgMSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xcbmluZGV4IGFkMTRkZDU4YTAwM2IzLi4yMjU2ZmIzODI2YTlkYiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcXG5AQCAtMTMwMCw4ICsxMzAwLDYgQEAgc3RhdGljIGludCBleHQ0X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0aWYgKHVubGlrZWx5KHJldCkpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHQqZnNkYXRhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKmZzZGF0YSBcXHUwMDI2IH5FWFQ0X1dSSVRFX0RBVEFfSU5MSU5FKTtcXG4tXFxuIFxcdHRyYWNlX2V4dDRfd3JpdGVfYmVnaW4oaW5vZGUsIHBvcywgbGVuKTtcXG4gXFx0LypcXG4gXFx0ICogUmVzZXJ2ZSBvbmUgYmxvY2sgbW9yZSBmb3IgYWRkaXRpb24gdG8gb3JwaGFuIGxpc3QgaW4gY2FzZVxcbkBAIC0xMzEyLDE0ICsxMzEwLDkgQEAgc3RhdGljIGludCBleHQ0X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0aW5kZXggPSBwb3MgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFxuIFxcdGlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSkge1xcbi1cXHRcXHRyZXQgPSBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBmb2xpb3ApO1xcbitcXHRcXHRyZXQgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0XFx0aWYgKHJldCA9PSAxKSB7XFxuLVxcdFxcdFxcdCpmc2RhdGEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZykqZnNkYXRhIHwgRVhUNF9XUklURV9EQVRBX0lOTElORSk7XFxuLVxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuQEAgLTE0NTIsMTAgKzE0NDUsNiBAQCBzdGF0aWMgaW50IGV4dDRfd3JpdGVfZW5kKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFxuIFxcdHRyYWNlX2V4dDRfd3JpdGVfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkKTtcXG4gXFxuLVxcdGlmICgodW5zaWduZWQgbG9uZylmc2RhdGEgXFx1MDAyNiBFWFQ0X1dSSVRFX0RBVEFfSU5MSU5FKVxcbi1cXHRcXHRyZXR1cm4gZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoaW5vZGUsIHBvcywgbGVuLCBjb3BpZWQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgZm9saW8pO1xcbi1cXG4gXFx0Y29waWVkID0gYmxvY2tfd3JpdGVfZW5kKHBvcywgbGVuLCBjb3BpZWQsIGZvbGlvKTtcXG4gXFx0LypcXG4gXFx0ICogaXQncyBpbXBvcnRhbnQgdG8gdXBkYXRlIGlfc2l6ZSB3aGlsZSBzdGlsbCBob2xkaW5nIGZvbGlvIGxvY2s6XFxuQEAgLTE1NjEsMTAgKzE1NTAsNiBAQCBzdGF0aWMgaW50IGV4dDRfam91cm5hbGxlZF93cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbiBcXG4gXFx0QlVHX09OKCFleHQ0X2hhbmRsZV92YWxpZChoYW5kbGUpKTtcXG4gXFxuLVxcdGlmICgodW5zaWduZWQgbG9uZylmc2RhdGEgXFx1MDAyNiBFWFQ0X1dSSVRFX0RBVEFfSU5MSU5FKVxcbi1cXHRcXHRyZXR1cm4gZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoaW5vZGUsIHBvcywgbGVuLCBjb3BpZWQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgZm9saW8pO1xcbi1cXG4gXFx0aWYgKHVubGlrZWx5KGNvcGllZCBcXHUwMDNjIGxlbikgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XFxuIFxcdFxcdGNvcGllZCA9IDA7XFxuIFxcdFxcdGV4dDRfam91cm5hbGxlZF96ZXJvX25ld19idWZmZXJzKGhhbmRsZSwgaW5vZGUsIGZvbGlvLFxcbkBAIC0zMTczLDEwICszMTU4LDYgQEAgc3RhdGljIGludCBleHQ0X2RhX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmb2xpb3AsIHRydWUpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0XFx0aWYgKHJldCA9PSAxKSB7XFxuLVxcdFxcdFxcdCpmc2RhdGEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZykqZnNkYXRhIHwgRVhUNF9XUklURV9EQVRBX0lOTElORSk7XFxuLVxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHR9XFxuIFxcdH1cXG4gXFxuIHJldHJ5OlxcbkBAIC0zMzEzLDEwICszMjk0LDYgQEAgc3RhdGljIGludCBleHQ0X2RhX3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuIFxcbiBcXHR0cmFjZV9leHQ0X2RhX3dyaXRlX2VuZChpbm9kZSwgcG9zLCBsZW4sIGNvcGllZCk7XFxuIFxcbi1cXHRpZiAod3JpdGVfbW9kZSBcXHUwMDI2IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpXFxuLVxcdFxcdHJldHVybiBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChpbm9kZSwgcG9zLCBsZW4sIGNvcGllZCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBmb2xpbyk7XFxuLVxcbiBcXHRpZiAodW5saWtlbHkoY29waWVkIFxcdTAwM2MgbGVuKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXFxuIFxcdFxcdGNvcGllZCA9IDA7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcXG5pbmRleCA2YzE4YjVhZGZmY2EzMi4uOTkxM2UzMGI3MDQwMDggMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXFxuKysrIGIvZnMvZXh0NC9zdXBlci5jXFxuQEAgLTMxNDUsNiArMzE0NSwxMiBAQCBzdGF0aWMgaW50IGV4dDRfc2V0dXBfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLFxcbiBcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLFxcbiBcXHRcXHRcXHQgXFxcIndhcm5pbmc6IGNoZWNrdGltZSByZWFjaGVkLCBcXFwiXFxuIFxcdFxcdFxcdCBcXFwicnVubmluZyBlMmZzY2sgaXMgcmVjb21tZW5kZWRcXFwiKTtcXG4rXFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfaW5saW5lX2RhdGEoc2IpKVxcbitcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLFxcbitcXHRcXHRcXHQgXFxcIndhcm5pbmc6IGlubGluZV9kYXRhIGZlYXR1cmUgaXMgZGVwcmVjYXRlZCBhbmQgXFxcIlxcbitcXHRcXHRcXHQgXFxcIndpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBrZXJuZWwgcmVsZWFzZS4gXFxcIlxcbitcXHRcXHRcXHQgXFxcIlVzZSAndHVuZTJmcyAtTyBeaW5saW5lX2RhdGEnIHRvIGNvbnZlcnQuXFxcIik7XFxuK1xcbiBcXHRpZiAoIXNiaS1cXHUwMDNlc19qb3VybmFsKVxcbiBcXHRcXHRlcy1cXHUwMDNlc19zdGF0ZSBcXHUwMDI2PSBjcHVfdG9fbGUxNih+RVhUNF9WQUxJRF9GUyk7XFxuIFxcdGlmICghKF9fczE2KSBsZTE2X3RvX2NwdShlcy1cXHUwMDNlc19tYXhfbW50X2NvdW50KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDA6MTM6NDkuNjkxNTE0NjYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mzc4OTEwNzI1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfY29udmVydF9pbmxpbmVfZGF0YVwiLFxuICAgIFwiZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhXCIsXG4gICAgXCJleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBkZXByZWNhdGVzIHRoZSBpbmxpbmVfZGF0YSBmZWF0dXJlIGZvciByZWd1bGFyIGZpbGVzIGluIGV4dDQsIGZvcmNpbmcgY29udmVyc2lvbiB0byBibG9jay1iYXNlZCBzdG9yYWdlIG9uIHdyaXRlLiBUaGlzIG1vZGlmaWVzIGNvcmUgZXh0NCB3cml0ZSBwYXRocyBhbmQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgZGF0YSBjb3JydXB0aW9uIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2E1MzBkMGY1NDA3ZjBmZGRiOTQyYmUxNGRjN2IzY2M5MDRjNTQxM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDAwOjEzOjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0L2lubGluZWRhdGEucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0L2lubGluZWRhdGEucnN0XG5pbmRleCBhNzI4YWYwZDJmZDBjNS4uOGRjMWI2ZDc1Mzg4ZDcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQvaW5saW5lZGF0YS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC9pbmxpbmVkYXRhLnJzdFxuQEAgLTMsNiArMywxNCBAQFxuIElubGluZSBEYXRhXG4gLS0tLS0tLS0tLS1cbiBcbisuLiB3YXJuaW5nOjpcbitcbisgICBUaGUgaW5saW5lIGRhdGEgZmVhdHVyZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmVcbisgICBrZXJuZWwgcmVsZWFzZS4gIE5ldyByZWd1bGFyIGZpbGUgaW5vZGVzIG5vIGxvbmdlciBzdG9yZSBkYXRhIGlubGluZSxcbisgICBhbmQgd3JpdGVzIHRvIGV4aXN0aW5nIGlubGluZSBkYXRhIGlub2RlcyB0cmlnZ2VyIGF1dG9tYXRpYyBjb252ZXJzaW9uXG4rICAgdG8gYmxvY2stYmFzZWQgc3RvcmFnZS4gIFVzZSBgYHR1bmUyZnMgLU8gXmlubGluZV9kYXRhYGAgdG8gY29udmVydFxuKyAgIGV4aXN0aW5nIGZpbGVzeXN0ZW1zLlxuK1xuIFRoZSBpbmxpbmUgZGF0YSBmZWF0dXJlIHdhcyBkZXNpZ25lZCB0byBoYW5kbGUgdGhlIGNhc2UgdGhhdCBhIGZpbGUnc1xuIGRhdGEgaXMgc28gdGlueSB0aGF0IGl0IHJlYWRpbHkgZml0cyBpbnNpZGUgdGhlIGlub2RlLCB3aGljaFxuICh0aGVvcmV0aWNhbGx5KSByZWR1Y2VzIGRpc2sgYmxvY2sgY29uc3VtcHRpb24gYW5kIHJlZHVjZXMgc2Vla3MuIElmIHRoZVxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IDIxYTk1MWYxMDYzNjc4Li44MzJiYzFmM2I2MDAyNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTMxNDgsNyArMzE0OCw2IEBAIGludCBkb19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpO1xuIHZvaWQgZXh0NF9zZXRfaW5vZGVfbWFwcGluZ19vcmRlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiAjZGVmaW5lIEZBTExfQkFDS19UT19OT05ERUxBTExPQyAxXG4tI2RlZmluZSBFWFQ0X1dSSVRFX0RBVEFfSU5MSU5FXHQgMlxuIFxuIHR5cGVkZWYgZW51bSB7XG4gXHRFWFQ0X0lHRVRfTk9STUFMID1cdDAsXG5AQCAtMzc1OSwxMiArMzc1OCw2IEBAIGV4dGVybiBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiB2b2lkIGV4dDRfdXBkYXRlX2ZpbmFsX2RlKHZvaWQgKmRlX2J1ZiwgaW50IG9sZF9zaXplLCBpbnQgbmV3X3NpemUpO1xuIFxuIGludCBleHQ0X3JlYWRwYWdlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1leHRlcm4gaW50IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLVx0XHRcdFx0XHQgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdFx0IGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbi1cdFx0XHRcdFx0IHN0cnVjdCBmb2xpbyAqKmZvbGlvcCk7XG4taW50IGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbi1cdFx0XHQgICAgICAgdW5zaWduZWQgY29waWVkLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBleHRlcm4gaW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHQgIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lhbGxvYy5jIGIvZnMvZXh0NC9pYWxsb2MuY1xuaW5kZXggYTQwY2IyN2Y4MTE2Y2IuLjI3OGYwYWI4Yzk5NmU0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pYWxsb2MuY1xuKysrIGIvZnMvZXh0NC9pYWxsb2MuY1xuQEAgLTEzMDUsOCArMTMwNSw4IEBAIHN0cnVjdCBpbm9kZSAqX19leHQ0X25ld19pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcbiBcdGVpLVx1MDAzZWlfZXh0cmFfaXNpemUgPSBzYmktXHUwMDNlc193YW50X2V4dHJhX2lzaXplO1xuIFx0ZWktXHUwMDNlaV9pbmxpbmVfb2ZmID0gMDtcbi1cdGlmIChleHQ0X2hhc19mZWF0dXJlX2lubGluZV9kYXRhKHNiKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoIShlaS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiAoRVhUNF9EQVhfRkx8RVhUNF9FQV9JTk9ERV9GTCkpIHx8IFNfSVNESVIobW9kZSkpKVxuK1x0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfaW5saW5lX2RhdGEoc2IpIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICEoZWktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9EQVhfRkwpKVxuIFx0XHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuIFx0cmV0ID0gaW5vZGU7XG4gXHRlcnIgPSBkcXVvdF9hbGxvY19pbm9kZShpbm9kZSk7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmNcbmluZGV4IGNlZWU2OWE2NjQ4MmJjLi5lMGI4MDI3M2UzMjJkOCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5saW5lLmNcbisrKyBiL2ZzL2V4dDQvaW5saW5lLmNcbkBAIC0xMiw2ICsxMiw3IEBAXG4gXG4gI2luY2x1ZGUgXCJleHQ0X2piZDIuaFwiXG4gI2luY2x1ZGUgXCJleHQ0LmhcIlxuKyNpbmNsdWRlIFwiZXh0NF9leHRlbnRzLmhcIlxuICNpbmNsdWRlIFwieGF0dHIuaFwiXG4gI2luY2x1ZGUgXCJ0cnVuY2F0ZS5oXCJcbiBcbkBAIC0yMCwxMCArMjEsNiBAQFxuICNkZWZpbmUgRVhUNF9JTkxJTkVfRE9URE9UX09GRlNFVFx0MlxuICNkZWZpbmUgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkVcdFx0NFxuIFxuLVxuLXN0YXRpYyBpbnQgZXh0NF9kYV9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHRcdFx0XHQgc3RydWN0IGlub2RlICppbm9kZSk7XG4tXG4gc3RhdGljIGludCBleHQ0X2dldF9pbmxpbmVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX29mZilcbkBAIC0yMTgsNTEgKzIxNSw2IEBAIHN0YXRpYyBpbnQgZXh0NF9yZWFkX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZmZlcixcbiBcdHJldHVybiBjcF9sZW47XG4gfVxuIFxuLS8qXG4tICogd3JpdGUgdGhlIGJ1ZmZlciB0byB0aGUgaW5saW5lIGlub2RlLlxuLSAqIElmICdjcmVhdGUnIGlzIHNldCwgd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGUgZXh0cmEgY29weSBpbiB0aGUgeGF0dHJcbi0gKiB2YWx1ZSBzaW5jZSBpdCBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgZXh0NF94YXR0cl9pYm9keV9zZXQuXG4tICogVGhhdCBzYXZlcyB1cyBvbmUgbWVtY3B5LlxuLSAqL1xuLXN0YXRpYyB2b2lkIGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcbi1cdFx0XHRcdCAgIHZvaWQgKmJ1ZmZlciwgbG9mZl90IHBvcywgdW5zaWduZWQgaW50IGxlbilcbi17XG4tXHRzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnk7XG4tXHRzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIgKmhlYWRlcjtcbi1cdHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGU7XG4tXHRpbnQgY3BfbGVuID0gMDtcbi1cbi1cdGlmICh1bmxpa2VseShleHQ0X2VtZXJnZW5jeV9zdGF0ZShpbm9kZS1cdTAwM2VpX3NiKSkpXG4tXHRcdHJldHVybjtcbi1cbi1cdEJVR19PTighRVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmYpO1xuLVx0QlVHX09OKHBvcyArIGxlbiBcdTAwM2UgRVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9zaXplKTtcbi1cbi1cdHJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKGlsb2MpO1xuLVx0YnVmZmVyICs9IHBvcztcbi1cbi1cdGlmIChwb3MgXHUwMDNjIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpIHtcbi1cdFx0Y3BfbGVuID0gcG9zICsgbGVuIFx1MDAzZSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFID9cbi1cdFx0XHQgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSAtIHBvcyA6IGxlbjtcbi1cdFx0bWVtY3B5KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2sgKyBwb3MsIGJ1ZmZlciwgY3BfbGVuKTtcbi1cbi1cdFx0bGVuIC09IGNwX2xlbjtcbi1cdFx0YnVmZmVyICs9IGNwX2xlbjtcbi1cdFx0cG9zICs9IGNwX2xlbjtcbi1cdH1cbi1cbi1cdGlmICghbGVuKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRwb3MgLT0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcbi1cdGhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7XG4tXHRlbnRyeSA9IChzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqKSgodm9pZCAqKXJhd19pbm9kZSArXG4tXHRcdFx0XHRcdCAgICBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX29mZik7XG4tXG4tXHRtZW1jcHkoKHZvaWQgKilJRklSU1QoaGVhZGVyKSArIGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfb2ZmcykgKyBwb3MsXG4tXHQgICAgICAgYnVmZmVyLCBsZW4pO1xuLX1cbi1cbiBzdGF0aWMgaW50IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsZW4pXG4ge1xuQEAgLTQzMyw3ICszODUsOCBAQCBzdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIH1cbiBcbiBzdGF0aWMgaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbi1cdFx0XHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSlcbitcdFx0XHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdFx0ICAgZXh0NF9mc2Jsa190IHBibGspXG4ge1xuIFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xuIFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHtcbkBAIC00ODEsNyArNDM0LDIxIEBAIHN0YXRpYyBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHQgICAgU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuIFx0XHRcdGV4dDRfc2V0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4gXHRcdFx0ZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgaW5vZGUpO1xuK1x0XHRcdGlmIChwYmxrKSB7XG4rXHRcdFx0XHRzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaDtcbitcdFx0XHRcdHN0cnVjdCBleHQ0X2V4dGVudCAqZXg7XG4rXG4rXHRcdFx0XHRlaCA9IGV4dF9pbm9kZV9oZHIoaW5vZGUpO1xuK1x0XHRcdFx0ZXggPSBFWFRfRklSU1RfRVhURU5UKGVoKTtcbitcdFx0XHRcdGV4LVx1MDAzZWVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4rXHRcdFx0XHRleC1cdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNigxKTtcbitcdFx0XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgcGJsayk7XG4rXHRcdFx0XHRlaC1cdTAwM2VlaF9lbnRyaWVzID0gY3B1X3RvX2xlMTYoMSk7XG4rXHRcdFx0fVxuIFx0XHR9XG4rXHR9IGVsc2UgaWYgKHBibGspIHtcbitcdFx0LyogaW5kaXJlY3QgbWFwcGluZzogc2V0IGlfZGF0YVswXSBkaXJlY3RseSAqL1xuK1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGF0YVswXSA9IGNwdV90b19sZTMyKHBibGspO1xuIFx0fVxuIFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKTtcbiBcbkBAIC01NjgsMTIyICs1MzUsNiBAQCBpbnQgZXh0NF9yZWFkcGFnZV9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiByZXQgXHUwMDNlPSAwID8gMCA6IHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGludCByZXQsIG5lZWRlZF9ibG9ja3MsIG5vX2V4cGFuZDtcbi1cdGhhbmRsZV90ICpoYW5kbGUgPSBOVUxMO1xuLVx0aW50IHJldHJpZXMgPSAwLCBzZW1faGVsZCA9IDA7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcbi1cdHVuc2lnbmVkIGZyb20sIHRvO1xuLVx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xuLVxuLVx0aWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcbi1cdFx0Lypcbi1cdFx0ICogY2xlYXIgdGhlIGZsYWcgc28gdGhhdCBubyBuZXcgd3JpdGVcbi1cdFx0ICogd2lsbCB0cmFwIGhlcmUgYWdhaW4uXG4tXHRcdCAqL1xuLVx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0bmVlZGVkX2Jsb2NrcyA9IGV4dDRfY2h1bmtfdHJhbnNfZXh0ZW50KGlub2RlLCAxKTtcbi1cbi1cdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLXJldHJ5OlxuLVx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX1dSSVRFX1BBR0UsIG5lZWRlZF9ibG9ja3MpO1xuLVx0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4tXHRcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcbi1cdFx0aGFuZGxlID0gTlVMTDtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHQvKiBXZSBjYW5ub3QgcmVjdXJzZSBpbnRvIHRoZSBmaWxlc3lzdGVtIGFzIHRoZSB0cmFuc2FjdGlvbiBpcyBhbHJlYWR5XG4tXHQgKiBzdGFydGVkICovXG4tXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4gfCBGR1BfTk9GUyxcbi1cdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbi1cdGlmIChJU19FUlIoZm9saW8pKSB7XG4tXHRcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xuLVx0XHRnb3RvIG91dF9ub2ZvbGlvO1xuLVx0fVxuLVxuLVx0ZXh0NF93cml0ZV9sb2NrX3hhdHRyKGlub2RlLCBcdTAwMjZub19leHBhbmQpO1xuLVx0c2VtX2hlbGQgPSAxO1xuLVx0LyogSWYgc29tZSBvbmUgaGFzIGFscmVhZHkgZG9uZSB0aGlzIGZvciB1cywganVzdCBleGl0LiAqL1xuLVx0aWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcbi1cdFx0cmV0ID0gMDtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRmcm9tID0gMDtcbi1cdHRvID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xuLVx0aWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkge1xuLVx0XHRyZXQgPSBleHQ0X3JlYWRfaW5saW5lX2ZvbGlvKGlub2RlLCBmb2xpbyk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRleHQ0X2ZjX3RyYWNrX2lub2RlKGhhbmRsZSwgaW5vZGUpO1xuLVx0cmV0ID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0aWYgKGV4dDRfc2hvdWxkX2Rpb3JlYWRfbm9sb2NrKGlub2RlKSkge1xuLVx0XHRyZXQgPSBleHQ0X2Jsb2NrX3dyaXRlX2JlZ2luKGhhbmRsZSwgZm9saW8sIGZyb20sIHRvLFxuLVx0XHRcdFx0XHQgICAgIGV4dDRfZ2V0X2Jsb2NrX3Vud3JpdHRlbik7XG4tXHR9IGVsc2Vcbi1cdFx0cmV0ID0gZXh0NF9ibG9ja193cml0ZV9iZWdpbihoYW5kbGUsIGZvbGlvLCBmcm9tLCB0byxcbi1cdFx0XHRcdFx0ICAgICBleHQ0X2dldF9ibG9jayk7XG4tXHRjbGVhcl9idWZmZXJfbmV3KGZvbGlvX2J1ZmZlcnMoZm9saW8pKTtcbi1cbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiBleHQ0X3Nob3VsZF9qb3VybmFsX2RhdGEoaW5vZGUpKSB7XG4tXHRcdHJldCA9IGV4dDRfd2Fsa19wYWdlX2J1ZmZlcnMoaGFuZGxlLCBpbm9kZSxcbi1cdFx0XHRcdFx0ICAgICBmb2xpb19idWZmZXJzKGZvbGlvKSwgZnJvbSwgdG8sXG4tXHRcdFx0XHRcdCAgICAgTlVMTCwgZG9fam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKTtcbi1cdH1cbi1cbi1cdGlmIChyZXQpIHtcbi1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0Zm9saW8gPSBOVUxMO1xuLVx0XHRleHQ0X29ycGhhbl9hZGQoaGFuZGxlLCBpbm9kZSk7XG4tXHRcdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcdTAwMjZub19leHBhbmQpO1xuLVx0XHRzZW1faGVsZCA9IDA7XG4tXHRcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4tXHRcdGhhbmRsZSA9IE5VTEw7XG4tXHRcdGV4dDRfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKGlub2RlKTtcbi1cdFx0Lypcbi1cdFx0ICogSWYgdHJ1bmNhdGUgZmFpbGVkIGVhcmx5IHRoZSBpbm9kZSBtaWdodFxuLVx0XHQgKiBzdGlsbCBiZSBvbiB0aGUgb3JwaGFuIGxpc3Q7IHdlIG5lZWQgdG9cbi1cdFx0ICogbWFrZSBzdXJlIHRoZSBpbm9kZSBpcyByZW1vdmVkIGZyb20gdGhlXG4tXHRcdCAqIG9ycGhhbiBsaXN0IGluIHRoYXQgY2FzZS5cbi1cdFx0ICovXG4tXHRcdGlmIChpbm9kZS1cdTAwM2VpX25saW5rKVxuLVx0XHRcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XG4tXHR9XG4tXG4tXHRpZiAocmV0ID09IC1FTk9TUEMgXHUwMDI2XHUwMDI2IGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLVx1MDAzZWlfc2IsIFx1MDAyNnJldHJpZXMpKVxuLVx0XHRnb3RvIHJldHJ5O1xuLVxuLVx0aWYgKGZvbGlvKVxuLVx0XHRibG9ja19jb21taXRfd3JpdGUoZm9saW8sIGZyb20sIHRvKTtcbi1vdXQ6XG4tXHRpZiAoZm9saW8pIHtcbi1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdH1cbi1vdXRfbm9mb2xpbzpcbi1cdGlmIChzZW1faGVsZClcbi1cdFx0ZXh0NF93cml0ZV91bmxvY2tfeGF0dHIoaW5vZGUsIFx1MDAyNm5vX2V4cGFuZCk7XG4tXHRpZiAoaGFuZGxlKVxuLVx0XHRleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuLVx0YnJlbHNlKGlsb2MuYmgpO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gLypcbiAgKiBQcmVwYXJlIHRoZSB3cml0ZSBmb3IgdGhlIGlubGluZSBkYXRhLlxuICAqIElmIHRoZSBkYXRhIGNhbiBiZSB3cml0dGVuIGludG8gdGhlIGlub2RlLCB3ZSBqdXN0IHJlYWRcbkBAIC02OTgsMjQ4ICs1NDksOCBAQCBpbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCxcbiBcdFx0XHRcdFx0ICBib29sIGRhKVxuIHtcbi1cdGludCByZXQ7XG4tXHRoYW5kbGVfdCAqaGFuZGxlO1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcbi1cdGludCByZXRyaWVzID0gMDtcbi1cbi1cdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLXJldHJ5X2pvdXJuYWw6XG4tXHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfSU5PREUsIDEpO1xuLVx0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4tXHRcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcbi1cdFx0Z290byBvdXRfcmVsZWFzZV9iaDtcbi1cdH1cbi1cbi1cdHJldCA9IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBwb3MgKyBsZW4pO1xuLVx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FTk9TUEMpXG4tXHRcdGdvdG8gb3V0X3N0b3Bfam91cm5hbDtcbi1cbi1cdGlmIChyZXQgPT0gLUVOT1NQQykge1xuLVx0XHRleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuLVx0XHRpZiAoIWRhKSB7XG4tXHRcdFx0YnJlbHNlKGlsb2MuYmgpO1xuLVx0XHRcdC8qIFJldHJ5IGluc2lkZSAqL1xuLVx0XHRcdHJldHVybiBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KG1hcHBpbmcsIGlub2RlKTtcbi1cdFx0fVxuLVxuLVx0XHRyZXQgPSBleHQ0X2RhX2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KG1hcHBpbmcsIGlub2RlKTtcbi1cdFx0aWYgKHJldCA9PSAtRU5PU1BDIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtXHUwMDNlaV9zYiwgXHUwMDI2cmV0cmllcykpXG4tXHRcdFx0Z290byByZXRyeV9qb3VybmFsO1xuLVx0XHRnb3RvIG91dF9yZWxlYXNlX2JoO1xuLVx0fVxuLVxuLVx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOIHwgRkdQX05PRlMsXG4tXHRcdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuLVx0aWYgKElTX0VSUihmb2xpbykpIHtcbi1cdFx0cmV0ID0gUFRSX0VSUihmb2xpbyk7XG4tXHRcdGdvdG8gb3V0X3N0b3Bfam91cm5hbDtcbi1cdH1cbi1cbi1cdGRvd25fcmVhZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZXhhdHRyX3NlbSk7XG4tXHQvKiBTb21lb25lIGVsc2UgaGFkIGNvbnZlcnRlZCBpdCB0byBleHRlbnQgKi9cbi1cdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XG4tXHRcdHJldCA9IDA7XG4tXHRcdGdvdG8gb3V0X3JlbGVhc2VfZm9saW87XG4tXHR9XG4tXG4tXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XG4tXHRcdHJldCA9IGV4dDRfcmVhZF9pbmxpbmVfZm9saW8oaW5vZGUsIGZvbGlvKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIG91dF9yZWxlYXNlX2ZvbGlvO1xuLVx0fVxuLVxuLVx0cmV0ID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cdTAwM2VpX3NiLCBpbG9jLmJoLCBFWFQ0X0pUUl9OT05FKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3JlbGVhc2VfZm9saW87XG4tXHQqZm9saW9wID0gZm9saW87XG4tXHR1cF9yZWFkKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNleGF0dHJfc2VtKTtcbi1cdGJyZWxzZShpbG9jLmJoKTtcbi1cdHJldHVybiAxO1xuLVxuLW91dF9yZWxlYXNlX2ZvbGlvOlxuLVx0dXBfcmVhZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZXhhdHRyX3NlbSk7XG4tXHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0Zm9saW9fcHV0KGZvbGlvKTtcbi1vdXRfc3RvcF9qb3VybmFsOlxuLVx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbi1vdXRfcmVsZWFzZV9iaDpcbi1cdGJyZWxzZShpbG9jLmJoKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLS8qXG4tICogVHJ5IHRvIHdyaXRlIGRhdGEgaW4gdGhlIGlub2RlLlxuLSAqIElmIHRoZSBpbm9kZSBoYXMgaW5saW5lIGRhdGEsIGNoZWNrIHdoZXRoZXIgdGhlIG5ldyB3cml0ZSBjYW4gYmVcbi0gKiBpbiB0aGUgaW5vZGUgYWxzby4gSWYgbm90LCBjcmVhdGUgdGhlIHBhZ2UgdGhlIGhhbmRsZSwgbW92ZSB0aGUgZGF0YVxuLSAqIHRvIHRoZSBwYWdlIG1ha2UgaXQgdXBkYXRlIGFuZCBsZXQgdGhlIGxhdGVyIGNvZGVzIGNyZWF0ZSBleHRlbnQgZm9yIGl0LlxuLSAqL1xuLWludCBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHRcdCAgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgZm9saW8gKipmb2xpb3ApXG4te1xuLVx0aWYgKHBvcyArIGxlbiBcdTAwM2UgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKGlub2RlKSlcbi1cdFx0cmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQobWFwcGluZywgaW5vZGUpO1xuLVx0cmV0dXJuIGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXG4tXHRcdFx0XHRcdCAgICAgIGZvbGlvcCwgZmFsc2UpO1xuLX1cbi1cbi1pbnQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuLVx0XHRcdCAgICAgICB1bnNpZ25lZCBjb3BpZWQsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4te1xuLVx0aGFuZGxlX3QgKmhhbmRsZSA9IGV4dDRfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpO1xuLVx0aW50IG5vX2V4cGFuZDtcbi1cdHZvaWQgKmthZGRyO1xuLVx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xuLVx0aW50IHJldCA9IDAsIHJldDI7XG4tXG4tXHRpZiAodW5saWtlbHkoY29waWVkIFx1MDAzYyBsZW4pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4tXHRcdGNvcGllZCA9IDA7XG4tXG4tXHRpZiAobGlrZWx5KGNvcGllZCkpIHtcbi1cdFx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpbG9jKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHRleHQ0X3N0ZF9lcnJvcihpbm9kZS1cdTAwM2VpX3NiLCByZXQpO1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4tXHRcdGV4dDRfd3JpdGVfbG9ja194YXR0cihpbm9kZSwgXHUwMDI2bm9fZXhwYW5kKTtcbi1cdFx0Lypcbi1cdFx0ICogV2UgY291bGQgaGF2ZSByYWNlZCB3aXRoIGV4dDRfcGFnZV9ta3dyaXRlKCkgY29udmVydGluZ1xuLVx0XHQgKiB0aGUgaW5vZGUgYW5kIGNsZWFyaW5nIHRoZSBpbmxpbmUgZGF0YSBmbGFnLCBzbyB3ZSBqdXN0XG4tXHRcdCAqIHJlbGVhc2UgcmVzb3VyY2VzIGFuZCByZXRyeSB0aGUgd2hvbGUgd3JpdGUuXG4tXHRcdCAqL1xuLVx0XHRpZiAodW5saWtlbHkoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkpIHtcbi1cdFx0XHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXHUwMDI2bm9fZXhwYW5kKTtcbi1cdFx0XHRicmVsc2UoaWxvYy5iaCk7XG4tXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4tXHRcdFx0cmV0dXJuIDA7XG4tXHRcdH1cbi1cbi1cdFx0Lypcbi1cdFx0ICogZWktXHUwMDNlaV9pbmxpbmVfb2ZmIG1heSBoYXZlIGNoYW5nZWQgc2luY2Vcbi1cdFx0ICogZXh0NF93cml0ZV9iZWdpbigpIGNhbGxlZFxuLVx0XHQgKiBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YSgpXG4tXHRcdCAqL1xuLVx0XHQodm9pZCkgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XG4tXG4tXHRcdGthZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgMCk7XG4tXHRcdGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoaW5vZGUsIFx1MDAyNmlsb2MsIGthZGRyLCBwb3MsIGNvcGllZCk7XG4tXHRcdGt1bm1hcF9sb2NhbChrYWRkcik7XG4tXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuLVx0XHQvKiBjbGVhciBkaXJ0eSBmbGFnIHNvIHRoYXQgd3JpdGVwYWdlcyB3b3VsZG4ndCB3b3JrIGZvciB1cy4gKi9cbi1cdFx0Zm9saW9fY2xlYXJfZGlydHkoZm9saW8pO1xuLVxuLVx0XHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXHUwMDI2bm9fZXhwYW5kKTtcbi1cdFx0YnJlbHNlKGlsb2MuYmgpO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBJdCdzIGltcG9ydGFudCB0byB1cGRhdGUgaV9zaXplIHdoaWxlIHN0aWxsIGhvbGRpbmcgZm9saW9cbi1cdFx0ICogbG9jazogcGFnZSB3cml0ZW91dCBjb3VsZCBvdGhlcndpc2UgY29tZSBpbiBhbmQgemVyb1xuLVx0XHQgKiBiZXlvbmQgaV9zaXplLlxuLVx0XHQgKi9cbi1cdFx0ZXh0NF91cGRhdGVfaW5vZGVfc2l6ZShpbm9kZSwgcG9zICsgY29waWVkKTtcbi1cdH1cbi1cdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXHRmb2xpb19wdXQoZm9saW8pO1xuLVxuLVx0Lypcbi1cdCAqIERvbid0IG1hcmsgdGhlIGlub2RlIGRpcnR5IHVuZGVyIGZvbGlvIGxvY2suIEZpcnN0LCBpdCB1bm5lY2Vzc2FyaWx5XG4tXHQgKiBtYWtlcyB0aGUgaG9sZGluZyB0aW1lIG9mIGZvbGlvIGxvY2sgbG9uZ2VyLiBTZWNvbmQsIGl0IGZvcmNlcyBsb2NrXG4tXHQgKiBvcmRlcmluZyBvZiBmb2xpbyBsb2NrIGFuZCB0cmFuc2FjdGlvbiBzdGFydCBmb3Igam91cm5hbGluZ1xuLVx0ICogZmlsZXN5c3RlbXMuXG4tXHQgKi9cbi1cdGlmIChsaWtlbHkoY29waWVkKSlcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4tb3V0OlxuLVx0Lypcbi1cdCAqIElmIHdlIGRpZG4ndCBjb3B5IGFzIG11Y2ggZGF0YSBhcyBleHBlY3RlZCwgd2UgbmVlZCB0byB0cmltIGJhY2tcbi1cdCAqIHNpemUgb2YgeGF0dHIgY29udGFpbmluZyBpbmxpbmUgZGF0YS5cbi1cdCAqL1xuLVx0aWYgKHBvcyArIGxlbiBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zaXplIFx1MDAyNlx1MDAyNiBleHQ0X2Nhbl90cnVuY2F0ZShpbm9kZSkpXG4tXHRcdGV4dDRfb3JwaGFuX2FkZChoYW5kbGUsIGlub2RlKTtcbi1cbi1cdHJldDIgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuLVx0aWYgKCFyZXQpXG4tXHRcdHJldCA9IHJldDI7XG4tXHRpZiAocG9zICsgbGVuIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbi1cdFx0ZXh0NF90cnVuY2F0ZV9mYWlsZWRfd3JpdGUoaW5vZGUpO1xuLVx0XHQvKlxuLVx0XHQgKiBJZiB0cnVuY2F0ZSBmYWlsZWQgZWFybHkgdGhlIGlub2RlIG1pZ2h0IHN0aWxsIGJlXG4tXHRcdCAqIG9uIHRoZSBvcnBoYW4gbGlzdDsgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGlub2RlXG4tXHRcdCAqIGlzIHJlbW92ZWQgZnJvbSB0aGUgb3JwaGFuIGxpc3QgaW4gdGhhdCBjYXNlLlxuLVx0XHQgKi9cbi1cdFx0aWYgKGlub2RlLVx1MDAzZWlfbmxpbmspXG4tXHRcdFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcbi1cdH1cbi1cdHJldHVybiByZXQgPyByZXQgOiBjb3BpZWQ7XG4tfVxuLVxuLS8qXG4tICogVHJ5IHRvIG1ha2UgdGhlIHBhZ2UgY2FjaGUgYW5kIGhhbmRsZSByZWFkeSBmb3IgdGhlIGlubGluZSBkYXRhIGNhc2UuXG4tICogV2UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiAyIGNhc2VzOlxuLSAqIDEuIFRoZSBpbm9kZSBpcyBjcmVhdGVkIGFuZCB0aGUgZmlyc3Qgd3JpdGUgZXhjZWVkcyBpbmxpbmUgc2l6ZS4gV2UgY2FuXG4tICogICAgY2xlYXIgdGhlIGlub2RlIHN0YXRlIHNhZmVseS5cbi0gKiAyLiBUaGUgaW5vZGUgaGFzIGlubGluZSBkYXRhLCB0aGVuIHdlIG5lZWQgdG8gcmVhZCB0aGUgZGF0YSwgbWFrZSBpdFxuLSAqICAgIHVwZGF0ZSBhbmQgZGlydHkgc28gdGhhdCBleHQ0X2RhX3dyaXRlcGFnZXMgY2FuIGhhbmRsZSBpdC4gV2UgZG9uJ3Rcbi0gKiAgICBuZWVkIHRvIHN0YXJ0IHRoZSBqb3VybmFsIHNpbmNlIHRoZSBmaWxlJ3MgbWV0YWRhdGEgaXNuJ3QgY2hhbmdlZCBub3cuXG4tICovXG4tc3RhdGljIGludCBleHQ0X2RhX2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLVx0XHRcdFx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGludCByZXQgPSAwLCBpbmxpbmVfc2l6ZTtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXG4tXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sXG4tXHRcdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuLVx0aWYgKElTX0VSUihmb2xpbykpXG4tXHRcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcbi1cbi1cdGRvd25fcmVhZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZXhhdHRyX3NlbSk7XG4tXHRpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkge1xuLVx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XG4tXG4tXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XG4tXHRcdHJldCA9IGV4dDRfcmVhZF9pbmxpbmVfZm9saW8oaW5vZGUsIGZvbGlvKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdHJldCA9IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oTlVMTCwgZm9saW8sIDAsIGlubGluZV9zaXplLFxuLVx0XHRcdFx0ICAgICBleHQ0X2RhX2dldF9ibG9ja19wcmVwKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0dXBfcmVhZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZXhhdHRyX3NlbSk7XG4tXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdGV4dDRfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKGlub2RlKTtcbi1cdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbi1cdGNsZWFyX2J1ZmZlcl9uZXcoZm9saW9fYnVmZmVycyhmb2xpbykpO1xuLVx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4tXHRmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcbi1cdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbi1cbi1vdXQ6XG4tXHR1cF9yZWFkKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNleGF0dHJfc2VtKTtcbi1cdGlmIChmb2xpbykge1xuLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0fVxuLVx0cmV0dXJuIHJldDtcbitcdC8qIElubGluZSBkYXRhIGlzIGRlcHJlY2F0ZWQ6IGFsd2F5cyBjb252ZXJ0IHRvIGJsb2NrIGZvcm1hdCAqL1xuK1x0cmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XG4gfVxuIFxuICNpZmRlZiBJTkxJTkVfRElSX0RFQlVHXG5AQCAtMTA3OSwyMyArNjkwLDYgQEAgc3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxuLVx0XHRcdFx0ICAgICB2b2lkICpidWYsIGludCBpbmxpbmVfc2l6ZSlcbi17XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSwgaW5saW5lX3NpemUpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRleHQ0X21zZyhpbm9kZS1cdTAwM2VpX3NiLCBLRVJOX0VNRVJHLFxuLVx0XHRcdFwiZXJyb3IgcmVzdG9yaW5nIGlubGluZV9kYXRhIGZvciBpbm9kZSAtLSBwb3RlbnRpYWwgZGF0YSBsb3NzISAoaW5vZGUgJWxsdSwgZXJyb3IgJWQpXCIsXG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9pbm8sIHJldCk7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cdGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoaW5vZGUsIGlsb2MsIGJ1ZiwgMCwgaW5saW5lX3NpemUpO1xuLVx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbi19XG4tXG4gc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXG5AQCAtMTEwMyw3ICs2OTcsNyBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiBcdGludCBlcnJvcjtcbiBcdHZvaWQgKmJ1ZiA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmggPSBOVUxMO1xuLVx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XG4rXHRleHQ0X2ZzYmxrX3QgcGJsaztcbiBcdGludCBpbmxpbmVfc2l6ZTtcbiBcbiBcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xuQEAgLTExMjksMjUgKzcyMywyMCBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGVycm9yID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlKTtcbitcdC8qXG4rXHQgKiBBbGxvY2F0ZSBhIGRhdGEgYmxvY2sgYW5kIHdyaXRlIHRoZSBpbmxpbmUgZGF0YSB0byBpdCBiZWZvcmVcbitcdCAqIGRlc3Ryb3lpbmcgdGhlIGlubGluZSBkYXRhLiAgVGhpcyBlbnN1cmVzIHRoYXQgb24gZmFpbHVyZSB3ZVxuK1x0ICogY2FuIHNpbXBseSBmcmVlIHRoZSBhbGxvY2F0ZWQgYmxvY2sgd2l0aG91dCBuZWVkaW5nIHRvIHJlc3RvcmVcbitcdCAqIHRoZSBpbmxpbmUgZGF0YS5cbitcdCAqL1xuK1x0cGJsayA9IGV4dDRfbmV3X21ldGFfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIDAsIDAsIE5VTEwsIFx1MDAyNmVycm9yKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRtYXAubV9sYmxrID0gMDtcbi1cdG1hcC5tX2xlbiA9IDE7XG4tXHRtYXAubV9mbGFncyA9IDA7XG4tXHRlcnJvciA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBcdTAwMjZtYXAsIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpO1xuLVx0aWYgKGVycm9yIFx1MDAzYyAwKVxuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuLVx0aWYgKCEobWFwLm1fZmxhZ3MgXHUwMDI2IEVYVDRfTUFQX01BUFBFRCkpIHtcbi1cdFx0ZXJyb3IgPSAtRUlPO1xuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuLVx0fVxuLVxuLVx0ZGF0YV9iaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLCBtYXAubV9wYmxrKTtcbitcdGRhdGFfYmggPSBzYl9nZXRibGsoaW5vZGUtXHUwMDNlaV9zYiwgcGJsayk7XG4gXHRpZiAoIWRhdGFfYmgpIHtcbiBcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuK1x0XHRnb3RvIG91dF9mcmVlX2Jsb2NrO1xuIFx0fVxuIFxuIFx0bG9ja19idWZmZXIoZGF0YV9iaCk7XG5AQCAtMTE1NSw4ICs3NDQsNyBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRcdFx0ICAgICAgIEVYVDRfSlRSX05PTkUpO1xuIFx0aWYgKGVycm9yKSB7XG4gXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRcdGVycm9yID0gLUVJTztcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbitcdFx0Z290byBvdXRfZnJlZV9ibG9jaztcbiBcdH1cbiBcdG1lbXNldChkYXRhX2JoLVx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4gXG5AQCAtMTE2NCwyNiArNzUyLDM4IEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRtZW1jcHkoZGF0YV9iaC1cdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xuIFx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpO1xuIFx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuLVx0XHRlcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSxcbi1cdFx0XHRcdFx0XHQgICBpbm9kZSwgZGF0YV9iaCk7XG4rXHRcdGVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCk7XG4gXHR9IGVsc2Uge1xuIFx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuLVx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuLVx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVxuIFx0XHRlcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBkYXRhX2JoLFxuIFx0XHRcdCAgbGUzMl90b19jcHUoKChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKWJ1ZiktXHUwMDNlaW5vZGUpLFxuIFx0XHRcdCAgYnVmICsgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUsXG4gXHRcdFx0ICBpbmxpbmVfc2l6ZSAtIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFKTtcbi1cdFx0aWYgKCFlcnJvcilcbi1cdFx0XHRlcnJvciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTtcbiBcdH1cbitcdGlmIChlcnJvcilcbitcdFx0Z290byBvdXRfZnJlZV9ibG9jaztcbiBcbi1vdXRfcmVzdG9yZTpcbitcdC8qXG4rXHQgKiBEYXRhIGlzIHNhZmVseSBpbiB0aGUgYWxsb2NhdGVkIGJsb2NrLiAgTm93IGRlc3Ryb3kgdGhlIGlubGluZVxuK1x0ICogZGF0YSBhbmQgcG9wdWxhdGUgdGhlIGV4dGVudCBlbnRyeSBhdG9taWNhbGx5IHVuZGVyIGlfZGF0YV9zZW1cbitcdCAqIChpbnNpZGUgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jaykuICBUaGlzIGVuc3VyZXMgbm9cbitcdCAqIGNvbmN1cnJlbnQgcmVhZGVyIHNlZXMgYW4gZW1wdHkgZXh0ZW50IHRyZWUuXG4rXHQgKi9cbitcdGVycm9yID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlLCBwYmxrKTtcbiBcdGlmIChlcnJvcilcbi1cdFx0ZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlsb2MsIGJ1ZiwgaW5saW5lX3NpemUpO1xuK1x0XHRnb3RvIG91dF9mcmVlX2Jsb2NrO1xuIFxuK1x0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuK1x0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuK1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuK1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuK1x0fVxuK1xuK1x0ZXJyb3IgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4rXHRnb3RvIG91dDtcbitcbitvdXRfZnJlZV9ibG9jazpcbitcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgcGJsaywgMSwgMCk7XG4gb3V0OlxuIFx0YnJlbHNlKGRhdGFfYmgpO1xuIFx0a2ZyZWUoYnVmKTtcbkBAIC0xODIxLDcgKzE0MjEsNyBAQCBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRpbnQgcmV0LCBub19leHBhbmQ7XG4gXG4gXHRleHQ0X3dyaXRlX2xvY2tfeGF0dHIoaW5vZGUsIFx1MDAyNm5vX2V4cGFuZCk7XG4tXHRyZXQgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpO1xuK1x0cmV0ID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlLCAwKTtcbiBcdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcdTAwMjZub19leHBhbmQpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xOTgwLDE4ICsxNTgwLDYgQEAgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0aWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcbiBcdFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuIFx0XHRyZXR1cm4gMDtcbi1cdH0gZWxzZSBpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7XG4tXHRcdC8qXG4tXHRcdCAqIElub2RlIGhhcyBpbmxpbmUgZGF0YSBidXQgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEgaXNcbi1cdFx0ICogY2xlYXJlZC4gVGhpcyBtZWFucyB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBtb3Zpbmcgb2Zcbi1cdFx0ICogaW5saW5lIGRhdGEgdG8gZGVsYXkgYWxsb2NhdGVkIGJsb2NrLiBKdXN0IGZvcmNlIHdyaXRlb3V0XG4tXHRcdCAqIGhlcmUgdG8gZmluaXNoIGNvbnZlcnNpb24uXG4tXHRcdCAqL1xuLVx0XHRlcnJvciA9IGZpbGVtYXBfZmx1c2goaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0aWYgKGVycm9yKVxuLVx0XHRcdHJldHVybiBlcnJvcjtcbi1cdFx0aWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXG4tXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRuZWVkZWRfYmxvY2tzID0gZXh0NF9jaHVua190cmFuc19leHRlbnQoaW5vZGUsIDEpO1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggYWQxNGRkNThhMDAzYjMuLjIyNTZmYjM4MjZhOWRiIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbm9kZS5jXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcbkBAIC0xMzAwLDggKzEzMDAsNiBAQCBzdGF0aWMgaW50IGV4dDRfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0aWYgKHVubGlrZWx5KHJldCkpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHQqZnNkYXRhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKmZzZGF0YSBcdTAwMjYgfkVYVDRfV1JJVEVfREFUQV9JTkxJTkUpO1xuLVxuIFx0dHJhY2VfZXh0NF93cml0ZV9iZWdpbihpbm9kZSwgcG9zLCBsZW4pO1xuIFx0LypcbiBcdCAqIFJlc2VydmUgb25lIGJsb2NrIG1vcmUgZm9yIGFkZGl0aW9uIHRvIG9ycGhhbiBsaXN0IGluIGNhc2VcbkBAIC0xMzEyLDE0ICsxMzEwLDkgQEAgc3RhdGljIGludCBleHQ0X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdGluZGV4ID0gcG9zIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7XG4tXHRcdHJldCA9IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKG1hcHBpbmcsIGlub2RlLCBwb3MsIGxlbixcbi1cdFx0XHRcdFx0XHQgICAgZm9saW9wKTtcbitcdFx0cmV0ID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRpZiAocmV0ID09IDEpIHtcbi1cdFx0XHQqZnNkYXRhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKmZzZGF0YSB8IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTE0NTIsMTAgKzE0NDUsNiBAQCBzdGF0aWMgaW50IGV4dDRfd3JpdGVfZW5kKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcbiBcdHRyYWNlX2V4dDRfd3JpdGVfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkKTtcbiBcbi1cdGlmICgodW5zaWduZWQgbG9uZylmc2RhdGEgXHUwMDI2IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpXG4tXHRcdHJldHVybiBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChpbm9kZSwgcG9zLCBsZW4sIGNvcGllZCxcbi1cdFx0XHRcdFx0XHQgIGZvbGlvKTtcbi1cbiBcdGNvcGllZCA9IGJsb2NrX3dyaXRlX2VuZChwb3MsIGxlbiwgY29waWVkLCBmb2xpbyk7XG4gXHQvKlxuIFx0ICogaXQncyBpbXBvcnRhbnQgdG8gdXBkYXRlIGlfc2l6ZSB3aGlsZSBzdGlsbCBob2xkaW5nIGZvbGlvIGxvY2s6XG5AQCAtMTU2MSwxMCArMTU1MCw2IEBAIHN0YXRpYyBpbnQgZXh0NF9qb3VybmFsbGVkX3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXG4gXHRCVUdfT04oIWV4dDRfaGFuZGxlX3ZhbGlkKGhhbmRsZSkpO1xuIFxuLVx0aWYgKCh1bnNpZ25lZCBsb25nKWZzZGF0YSBcdTAwMjYgRVhUNF9XUklURV9EQVRBX0lOTElORSlcbi1cdFx0cmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLFxuLVx0XHRcdFx0XHRcdCAgZm9saW8pO1xuLVxuIFx0aWYgKHVubGlrZWx5KGNvcGllZCBcdTAwM2MgbGVuKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XG4gXHRcdGNvcGllZCA9IDA7XG4gXHRcdGV4dDRfam91cm5hbGxlZF96ZXJvX25ld19idWZmZXJzKGhhbmRsZSwgaW5vZGUsIGZvbGlvLFxuQEAgLTMxNzMsMTAgKzMxNTgsNiBAQCBzdGF0aWMgaW50IGV4dDRfZGFfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdFx0XHRcdCAgICAgZm9saW9wLCB0cnVlKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRpZiAocmV0ID09IDEpIHtcbi1cdFx0XHQqZnNkYXRhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKmZzZGF0YSB8IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4gXHR9XG4gXG4gcmV0cnk6XG5AQCAtMzMxMywxMCArMzI5NCw2IEBAIHN0YXRpYyBpbnQgZXh0NF9kYV93cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFxuIFx0dHJhY2VfZXh0NF9kYV93cml0ZV9lbmQoaW5vZGUsIHBvcywgbGVuLCBjb3BpZWQpO1xuIFxuLVx0aWYgKHdyaXRlX21vZGUgXHUwMDI2IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpXG4tXHRcdHJldHVybiBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChpbm9kZSwgcG9zLCBsZW4sIGNvcGllZCxcbi1cdFx0XHRcdFx0XHQgIGZvbGlvKTtcbi1cbiBcdGlmICh1bmxpa2VseShjb3BpZWQgXHUwMDNjIGxlbikgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcbiBcdFx0Y29waWVkID0gMDtcbiBcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDZjMThiNWFkZmZjYTMyLi45OTEzZTMwYjcwNDAwOCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuKysrIGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtMzE0NSw2ICszMTQ1LDEyIEBAIHN0YXRpYyBpbnQgZXh0NF9zZXR1cF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMsXG4gXHRcdGV4dDRfbXNnKHNiLCBLRVJOX1dBUk5JTkcsXG4gXHRcdFx0IFwid2FybmluZzogY2hlY2t0aW1lIHJlYWNoZWQsIFwiXG4gXHRcdFx0IFwicnVubmluZyBlMmZzY2sgaXMgcmVjb21tZW5kZWRcIik7XG4rXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9pbmxpbmVfZGF0YShzYikpXG4rXHRcdGV4dDRfbXNnKHNiLCBLRVJOX1dBUk5JTkcsXG4rXHRcdFx0IFwid2FybmluZzogaW5saW5lX2RhdGEgZmVhdHVyZSBpcyBkZXByZWNhdGVkIGFuZCBcIlxuK1x0XHRcdCBcIndpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBrZXJuZWwgcmVsZWFzZS4gXCJcbitcdFx0XHQgXCJVc2UgJ3R1bmUyZnMgLU8gXmlubGluZV9kYXRhJyB0byBjb252ZXJ0LlwiKTtcbitcbiBcdGlmICghc2JpLVx1MDAzZXNfam91cm5hbClcbiBcdFx0ZXMtXHUwMDNlc19zdGF0ZSBcdTAwMjY9IGNwdV90b19sZTE2KH5FWFQ0X1ZBTElEX0ZTKTtcbiBcdGlmICghKF9fczE2KSBsZTE2X3RvX2NwdShlcy1cdTAwM2VzX21heF9tbnRfY291bnQpKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDA6MTM6NDkuNjkxNTE4MzIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc5ODc1MzM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEV4dDQgSW5saW5lIERhdGEgRGVwcmVjYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQncyBlZmZlY3RpdmVseSBudWtpbmcgdGhlIGBpbmxpbmVfZGF0YWAgZmVhdHVyZSBpbiBleHQ0LiBJdCdzIG5vdCBqdXN0IGEgY2xlYW51cDsgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgZmlsZXN5c3RlbSBjb21wb25lbnQuIFRoZSBpZGVhIGlzIHRvIHN0b3AgKndyaXRpbmcqIG5ldyBpbmxpbmUgZGF0YSB0byByZWd1bGFyIGZpbGVzIGFuZCBjb252ZXJ0IGFueSBleGlzdGluZyBpbmxpbmUgZGF0YSB0byB0aGUgc3RhbmRhcmQgYmxvY2sgZm9ybWF0LiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgXCJmdXp6aW5nIHRhcmdldFwiIHRvIG1lLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGRhdGEgY29ycnVwdGlvbiBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyB0aGVzZSBjb252ZXJzaW9ucyBhbmQgd3JpdGUgb3BlcmF0aW9ucy5cblxuSSBuZWVkIHRvIG5haWwgZG93biB0aGUga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZC4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCB0b3VjaGVzIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCwgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2tgLCBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCwgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAsIGBleHQ0X3dyaXRlX2JlZ2luYCwgYGV4dDRfd3JpdGVfZW5kYCwgYGV4dDRfam91cm5hbGxlZF93cml0ZV9lbmRgLCBgZXh0NF9kYV93cml0ZV9iZWdpbmAsIGBleHQ0X2RhX3dyaXRlX2VuZGAsIGFuZCBgX19leHQ0X25ld19pbm9kZWAuXG5cbkEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIHJldmVhbHMgc29tZXRoaW5nIGludGVyZXN0aW5nOiBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AgaXMgKnN0YXRpYyosIGJ1dCBpdCdzIGNydWNpYWwgYmVjYXVzZSBpdCdzIGNhbGxlZCBieSB0aGUgbm9uLXN0YXRpYyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBhbmQgYGV4dDRfdXBkYXRlX2lubGluZV9kaXJgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBhbmQgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YWAgYXJlIG5vbi1zdGF0aWMgYXMgd2VsbC4gIFRoZSBgZXh0NF93cml0ZV9iZWdpbmAgYW5kIGBleHQ0X2RhX3dyaXRlX2JlZ2luYCB2YXJpYW50cyBhcmUgc3RhdGljLCBidXQgcGFydCBvZiB0aGUgYGV4dDRfYW9wc2AgYW5kIGBleHQ0X2RhX2FvcHNgIHNvIHRoZXkgYXJlIHN0aWxsIHRhcmdldHMuXG5cbk5vdywgbXkgZm9jdXMgbmFycm93czogSSB3YW50IGEgZGVlcGVyIGxvb2sgYXQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAsIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgIGFuZCBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGhhbmRsaW5nIHRoZSBjb252ZXJzaW9uIGFuZCBwb3RlbnRpYWwgd3JpdGluZyBvciByZW1vdmFsLlxuXG5CZWZvcmUgZGl2aW5nIGludG8gYSBkZXRhaWxlZCBjb2RlIHJldmlldywgSSBzaG91bGQgdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWUgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBhbmQgdXNlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjYWxsIGdyYXBocyBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMDoxMzo1OC40OTAyNzUzNzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNTkzMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfY29udmVydF9pbmxpbmVfZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2NyeXB0by5jPTEzMj1zdGF0aWMgaW50IGV4dDRfc2V0X2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqY3R4LCBzaXplX3QgbGVuLFxcbi0tXFxuZnMvZXh0NC9jcnlwdG8uYy0xNTItXFxuZnMvZXh0NC9jcnlwdG8uYzoxNTM6XFx0cmVzID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcXG5mcy9leHQ0L2NyeXB0by5jLTE1NC1cXHRpZiAocmVzKVxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9Mzc5OD1leHRlcm4gaW50IGV4dDRfaW5saW5lX2RhdGFfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpoYXNfaW5saW5lKTtcXG5mcy9leHQ0L2V4dDQuaC0zNzk5LVxcbmZzL2V4dDQvZXh0NC5oOjM4MDA6ZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvZXh0NC9leHQ0LmgtMzgwMS1cXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ4Nzk9bG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00OTA4LVxcdGlub2RlX2xvY2soaW5vZGUpO1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5MDk6XFx0cmV0ID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcXG5mcy9leHQ0L2V4dGVudHMuYy00OTEwLVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTU0Nj1pbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy01NTItXFx0LyogSW5saW5lIGRhdGEgaXMgZGVwcmVjYXRlZDogYWx3YXlzIGNvbnZlcnQgdG8gYmxvY2sgZm9ybWF0ICovXFxuZnMvZXh0NC9pbmxpbmUuYzo1NTM6XFx0cmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XFxuZnMvZXh0NC9pbmxpbmUuYy01NTQtfVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz02NzE9c3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy02OTItXFxuZnMvZXh0NC9pbmxpbmUuYzo2OTM6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvZXh0NC9pbmxpbmUuYy02OTQtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9Nzk4PWludCBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtODUwLVxcdCAqL1xcbmZzL2V4dDQvaW5saW5lLmM6ODUxOlxcdHJldCA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBkaXIsIFxcdTAwMjZpbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jLTg1Mi1cXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTQ2Mj1pbnQgZXh0NF9pbmxpbmVfZGF0YV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmhhc19pbmxpbmUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE1NzMtXFxuZnMvZXh0NC9pbmxpbmUuYzoxNTc0OmludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L2lubGluZS5jLTE1NzUte1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNTk5LVxcdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXFxuZnMvZXh0NC9pbmxpbmUuYzoxNjAwOlxcdFxcdGVycm9yID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNjAxLVxcdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcXHUwMDI2bm9fZXhwYW5kKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0xMjg2PXN0YXRpYyBpbnQgZXh0NF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMTMxMi1cXHRpZiAoZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpIHtcXG5mcy9leHQ0L2lub2RlLmM6MTMxMzpcXHRcXHRyZXQgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xcbmZzL2V4dDQvaW5vZGUuYy0xMzE0LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTU5OTg9aW50IGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTYwOTUtXFx0XFx0ICAgIGF0dHItXFx1MDAzZWlhX3NpemUgXFx1MDAzZSBFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2lubGluZV9zaXplKSB7XFxuZnMvZXh0NC9pbm9kZS5jOjYwOTY6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xcbmZzL2V4dDQvaW5vZGUuYy02MDk3LVxcdFxcdFxcdGlmIChlcnJvcilcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz02ODYxPXZtX2ZhdWx0X3QgZXh0NF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNjg4Mi1cXG5mcy9leHQ0L2lub2RlLmM6Njg4MzpcXHRlcnIgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xcbmZzL2V4dDQvaW5vZGUuYy02ODg0LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L3Zlcml0eS5jPTEwMj1zdGF0aWMgaW50IGV4dDRfYmVnaW5fZW5hYmxlX3Zlcml0eShzdHJ1Y3QgZmlsZSAqZmlscClcXG4tLVxcbmZzL2V4dDQvdmVyaXR5LmMtMTI4LVxcbmZzL2V4dDQvdmVyaXR5LmM6MTI5OlxcdGVyciA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XFxuZnMvZXh0NC92ZXJpdHkuYy0xMzAtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDA6MTM6NTguNjAzOTMyODM3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0Mzg5NjQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEV4dDQgSW5saW5lIERhdGEgRGVwcmVjYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyB0aGUgZGVwcmVjYXRpb24gb2YgYGlubGluZV9kYXRhYCBmb3Igc3RhbmRhcmQgZmlsZXMgaW4gZXh0NC4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBpdCdzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLCBidXQgdGhlIGltcGxpY2F0aW9ucyBuZWVkIGEgY2xvc2UgbG9vay4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gaW52b2x2ZSByZXBsYWNpbmcgdGhlIGlubGluZSBkYXRhIGhhbmRsaW5nIHdpdGggYSBzdGFuZGFyZCBibG9jayBhbGxvY2F0aW9uIGFuZCB3cml0ZSBwcm9jZXNzIHdpdGhpbiBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIFRoYXQgbWFrZXMgc2Vuc2U7IG1vdmluZyBkYXRhIG91dCBvZiB0aGUgaW5vZGUgYW5kIGludG8gcmVndWxhciBibG9ja3MgaXMgdGhlIGV4cGVjdGVkIGFwcHJvYWNoIGZvciBkZXByZWNhdGlvbi5cblxuVGhlbiwgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2tgIGlzIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBjbGVhbnVwIHVzaW5nIGEgcGh5c2ljYWwgYmxvY2sgKGBwYmxrYCkgYW5kIGVpdGhlciBwb3B1bGF0ZSB0aGUgZXh0ZW50IHRyZWUgb3IgYW4gaW5kaXJlY3QgYmxvY2sgZGlyZWN0bHkuIFRoYXQncyBhIGtleSBjaGFuZ2UsIGFuZCBpdCBhbGlnbnMgd2l0aCB0aGUgZGF0YSBub3cgcmVzaWRpbmcgaW4gc3RhbmRhcmQgYmxvY2tzLlxuXG5UaGUgdGhyZWUgZnVuY3Rpb25zLCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCwgYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAsIGFuZCBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhYCBhcmUgc3Ryb25nIGNhbmRpZGF0ZXMgZm9yIHVzaW5nIGBGb2N1c1N5bWJvbHNgLiBUaGV5IGFyZSB0aGUgbWFpbiB0b3VjaHBvaW50cyBvZiB0aGlzIGRlcHJlY2F0aW9uLCBzbyB0aGV5J3JlIHRoZSBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBpZiBJIHdhbnQgdG8gdGhvcm91Z2hseSByZXZpZXcgdGhpcy5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zLiBXZSBhbGwga25vdyBgQ09ORklHX0VYVDRfRlNgIGVuYWJsZXMgZXh0NCwgc28gdGhhdCdzIHRoZSBiYXNlLiBCdXQgaXMgdGhlcmUgYSBzZXBhcmF0ZSBDT05GSUcgb3B0aW9uIHNwZWNpZmljYWxseSBmb3IgKmlubGluZSogZGF0YT8gSWYgdGhlcmUgaXMsIGl0IHdpbGwgYmUgY3JpdGljYWwgZm9yIGFzc2Vzc2luZyB0aGUgaW1wYWN0IGFuZCBwb3RlbnRpYWwgY29tcGlsZS10aW1lIGVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UuIEkgbmVlZCB0byB0cmFjayBkb3duIGFueSBjb25maWcgZGVwZW5kZW5jaWVzIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDcwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAwOjE0OjAzLjU0Nzg0MTk3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTczMDMyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfRVhUNFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0Ly5rdW5pdGNvbmZpZz0xPUNPTkZJR19LVU5JVD15XFxuZnMvZXh0NC8ua3VuaXRjb25maWc6MjpDT05GSUdfRVhUNF9GUz15XFxuZnMvZXh0NC8ua3VuaXRjb25maWc6MzpDT05GSUdfRVhUNF9LVU5JVF9URVNUUz15XFxuLS1cXG5mcy9leHQ0L01ha2VmaWxlLTUtXFxuZnMvZXh0NC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19FWFQ0X0ZTKSArPSBleHQ0Lm9cXG5mcy9leHQ0L01ha2VmaWxlLTctXFxuZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG4tLVxcbmZzL2V4dDQvTWFrZWZpbGUtMTQtXFxuZnMvZXh0NC9NYWtlZmlsZToxNTpleHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVxcdCs9IGFjbC5vXFxuZnMvZXh0NC9NYWtlZmlsZToxNjpleHQ0LSQoQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkpXFx0XFx0Kz0geGF0dHJfc2VjdXJpdHkub1xcbmZzL2V4dDQvTWFrZWZpbGUtMTctZXh0NC10ZXN0LW9ianNcXHRcXHRcXHRcXHQrPSBpbm9kZS10ZXN0Lm8gbWJhbGxvYy10ZXN0Lm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTgtXFx0XFx0XFx0XFx0XFx0ICAgZXh0ZW50cy10ZXN0Lm8gaGFzaC10ZXN0Lm9cXG5mcy9leHQ0L01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxcdFxcdCs9IGV4dDQtdGVzdC5vXFxuZnMvZXh0NC9NYWtlZmlsZS0yMC1leHQ0LSQoQ09ORklHX0ZTX1ZFUklUWSlcXHRcXHQrPSB2ZXJpdHkub1xcbi0tXFxuZnMvZXh0NC9hY2wuaD0zOT1zdGF0aWMgaW5saW5lIGludCBleHQ0X2FjbF9jb3VudChzaXplX3Qgc2l6ZSlcXG4tLVxcbmZzL2V4dDQvYWNsLmgtNTQtXFxuZnMvZXh0NC9hY2wuaDo1NTojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9hY2wuaC01Ni1cXG4tLVxcbmZzL2V4dDQvYWNsLmg9NjE9ZXh0ZXJuIGludCBleHQ0X2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7XFxuZnMvZXh0NC9hY2wuaC02Mi1cXG5mcy9leHQ0L2FjbC5oOjYzOiNlbHNlICAvKiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgKi9cXG5mcy9leHQ0L2FjbC5oLTY0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbi0tXFxuZnMvZXh0NC9hY2wuaD02OT1leHQ0X2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKVxcbi0tXFxuZnMvZXh0NC9hY2wuaC03Mi19XFxuZnMvZXh0NC9hY2wuaDo3MzojZW5kaWYgIC8qIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCAqL1xcbmZzL2V4dDQvYWNsLmgtNzQtXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC05MS0gKi9cXG5mcy9leHQ0L2V4dDQuaDo5MjojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L2V4dDQuaC05My0jZGVmaW5lIGV4dF9kZWJ1Zyhpbm8sIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTE1OTI9c3RydWN0IGV4dDRfc2JfaW5mbyB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xODA2LVxcdHU2NCBzX2RheF9wYXJ0X29mZjtcXG5mcy9leHQ0L2V4dDQuaDoxODA3OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvZXh0NC5oLTE4MDgtXFx0dW5zaWduZWQgbG9uZyBzX3NpbXVsYXRlX2ZhaWw7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xODY5LVxcdHRpZF90IHNfZmNfaW5lbGlnaWJsZV90aWQ7XFxuZnMvZXh0NC9leHQ0Lmg6MTg3MDojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L2V4dDQuaC0xODcxLVxcdGludCBzX2ZjX2RlYnVnX21heF9yZXBsYXk7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0xOTk0PXN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X3NpbXVsYXRlX2ZhaWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTE5OTYte1xcbmZzL2V4dDQvZXh0NC5oOjE5OTc6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9leHQ0LmgtMTk5OC1cXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTQwNDU9ZXh0ZXJuIGludCBleHQ0X2Jsb2NrX3dyaXRlX2JlZ2luKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC00MDQ4LVxcbmZzL2V4dDQvZXh0NC5oOjQwNDk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXFxuZnMvZXh0NC9leHQ0LmgtNDA1MC0jZGVmaW5lIEVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChzeW0pIFxcXFxcXG4tLVxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmg9MjcwPWV4dGVybiBpbnQgZXh0NF9leHRfemVyb291dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4KTtcXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oOjI3MTojaWYgSVNfRU5BQkxFRChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTI3Mi1leHRlcm4gaW50IGV4dDRfZXh0X3NwYWNlX3Jvb3RfaWR4X3Rlc3Qoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGNoZWNrKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTYyNTI9aW50IGV4dDRfZXh0X2NsZWFyX2JiKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy02MzAzLVxcbmZzL2V4dDQvZXh0ZW50cy5jOjYzMDQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXFxuZnMvZXh0NC9leHRlbnRzLmMtNjMwNS1pbnQgZXh0NF9leHRfc3BhY2Vfcm9vdF9pZHhfdGVzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2hlY2spXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjU3MD1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5KGpvdXJuYWxfdCAqam91cm5hbCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTk1LVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTk2OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTk3LVxcdGlmIChzYmktXFx1MDAzZXNfZmNfZGVidWdfbWF4X3JlcGxheSBcXHUwMDI2XFx1MDAyNiBvZmYgXFx1MDAzZT0gc2JpLVxcdTAwM2VzX2ZjX2RlYnVnX21heF9yZXBsYXkpIHtcXG4tLVxcbmZzL2V4dDQvaGFzaC5jPTMxND1pbnQgZXh0NGZzX2Rpcmhhc2goY29uc3Qgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sXFxuLS1cXG5mcy9leHQ0L2hhc2guYy0zNDQtXFxuZnMvZXh0NC9oYXNoLmM6MzQ1OiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxcbmZzL2V4dDQvaGFzaC5jLTM0Ni1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NGZzX2Rpcmhhc2gpO1xcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYz04NzY9c3RhdGljIGludCBleHQ0X3hhdHRyX2NyZWRpdHNfZm9yX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgbW9kZV90IG1vZGUsXFxuLS1cXG5mcy9leHQ0L2lhbGxvYy5jLTg4MC1cXHRpbnQgbmJsb2NrcyA9IDA7XFxuZnMvZXh0NC9pYWxsb2MuYzo4ODE6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvaWFsbG9jLmMtODgyLVxcdHN0cnVjdCBwb3NpeF9hY2wgKnAgPSBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVCk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDA5PWludCBleHQ0X2lzc3VlX3plcm9vdXQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsaywgZXh0NF9mc2Jsa190IHBibGssXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNDMzLSAqL1xcbmZzL2V4dDQvaW5vZGUuYzo0MzQ6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9pbm9kZS5jLTQzNS12b2lkIGV4dDRfY2hlY2tfbWFwX2V4dGVudHNfZW52KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz01NzI5PXN0YXRpYyB2b2lkIGV4dDRfbWJfcGFfcHV0X2ZyZWUoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTU3NDQtXFxuZnMvZXh0NC9tYmFsbG9jLmM6NTc0NTojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L21iYWxsb2MuYy01NzQ2LXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X21iX3Nob3dfcGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTcxMzA9ZXh0NF9tYmFsbG9jX3F1ZXJ5X3JhbmdlKFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNzE4NS1cXG5mcy9leHQ0L21iYWxsb2MuYzo3MTg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxcbmZzL2V4dDQvbWJhbGxvYy5jLTcxODctdm9pZCBtYl9jbGVhcl9iaXRzX3Rlc3Qodm9pZCAqYm0sIGludCBjdXIsIGludCBsZW4pXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuaC0yOC0gKi9cXG5mcy9leHQ0L21iYWxsb2MuaDoyOTojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L21iYWxsb2MuaC0zMC0jZGVmaW5lIG1iX2RlYnVnKHNiLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuaD0yNzM9ZXh0ZXJuIGludCBleHQ0X21iX21hcmtfY29udGV4dChoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmgtMjc3LVxcdFxcdGV4dDRfZ3JwYmxrX3QgKnJldF9jaGFuZ2VkKTtcXG5mcy9leHQ0L21iYWxsb2MuaDoyNzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXFxuZnMvZXh0NC9tYmFsbG9jLmgtMjc5LWV4dGVybiB2b2lkIG1iX2NsZWFyX2JpdHNfdGVzdCh2b2lkICpibSwgaW50IGN1ciwgaW50IGxlbik7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGV4dDRfY29udGV4dF9vcHMgPSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTMyLVxcbmZzL2V4dDQvc3VwZXIuYzoxMzM6I2lmICFkZWZpbmVkKENPTkZJR19FWFQyX0ZTKSBcXHUwMDI2XFx1MDAyNiAhZGVmaW5lZChDT05GSUdfRVhUMl9GU19NT0RVTEUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyKVxcbmZzL2V4dDQvc3VwZXIuYy0xMzQtc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDJfZnNfdHlwZSA9IHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xNzAwPWVudW0ge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE3MjMtXFx0T3B0X2Vycm9ycywgT3B0X2RhdGEsIE9wdF9kYXRhX2VyciwgT3B0X2pxZm10LCBPcHRfZGF4X3R5cGUsXFxuZnMvZXh0NC9zdXBlci5jOjE3MjQ6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zdXBlci5jLTE3MjUtXFx0T3B0X2ZjX2RlYnVnX21heF9yZXBsYXksIE9wdF9mY19kZWJ1Z19mb3JjZVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE3NzA9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBleHQ0X3BhcmFtX3NwZWNzW10gPSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTg0My1cXHRmc3BhcmFtX2ZsYWdcXHQoXFxcIm5vaW5pdF9pdGFibGVcXFwiLFxcdE9wdF9ub2luaXRfaXRhYmxlKSxcXG5mcy9leHQ0L3N1cGVyLmM6MTg0NDojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L3N1cGVyLmMtMTg0NS1cXHRmc3BhcmFtX2ZsYWdcXHQoXFxcImZjX2RlYnVnX2ZvcmNlXFxcIixcXHRPcHRfZmNfZGVidWdfZm9yY2UpLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE4ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xOTMwLVxcdHtPcHRfdXNlcl94YXR0ciwgRVhUNF9NT1VOVF9YQVRUUl9VU0VSLCBNT1BUX1NFVH0sXFxuZnMvZXh0NC9zdXBlci5jOjE5MzE6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvc3VwZXIuYy0xOTMyLVxcdHtPcHRfYWNsLCBFWFQ0X01PVU5UX1BPU0lYX0FDTCwgTU9QVF9TRVR9LFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE5NTMtXFx0IE1PUFRfU0VUfSxcXG5mcy9leHQ0L3N1cGVyLmM6MTk1NDojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L3N1cGVyLmMtMTk1NS1cXHR7T3B0X2ZjX2RlYnVnX2ZvcmNlLCBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlULFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTIwMDU9c3RydWN0IGV4dDRfZnNfY29udGV4dCB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjAwOC1cXHRpbnRcXHRcXHRzX2pxdW90YV9mbXQ7XFx0LyogRm9ybWF0IG9mIHF1b3RhIHRvIHVzZSAqL1xcbmZzL2V4dDQvc3VwZXIuYzoyMDA5OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvc3VwZXIuYy0yMDEwLVxcdGludCBzX2ZjX2RlYnVnX21heF9yZXBsYXk7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MjE3OT1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMzE0LVxcdFxcdHJldHVybiAwO1xcbmZzL2V4dDQvc3VwZXIuYzoyMzE1OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvc3VwZXIuYy0yMzE2LVxcdGNhc2UgT3B0X2ZjX2RlYnVnX21heF9yZXBsYXk6XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9Mjg2Mz1zdGF0aWMgdm9pZCBleHQ0X2FwcGx5X29wdGlvbnMoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTI4ODYtXFxuZnMvZXh0NC9zdXBlci5jOjI4ODc6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zdXBlci5jLTI4ODgtXFx0QVBQTFkoc19mY19kZWJ1Z19tYXhfcmVwbGF5KTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00NDAyPXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDQxNy1cXHRzZXRfb3B0KHNiLCBYQVRUUl9VU0VSKTtcXG5mcy9leHQ0L3N1cGVyLmM6NDQxODojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9zdXBlci5jLTQ0MTktXFx0c2V0X29wdChzYiwgUE9TSVhfQUNMKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz03NDAzPXN0YXRpYyBzc2l6ZV90IGV4dDRfcXVvdGFfd3JpdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNzQ2My1cXG5mcy9leHQ0L3N1cGVyLmM6NzQ2NDojaWYgIWRlZmluZWQoQ09ORklHX0VYVDJfRlMpIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkKENPTkZJR19FWFQyX0ZTX01PRFVMRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIpXFxuZnMvZXh0NC9zdXBlci5jLTc0NjUtc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX2FzX2V4dDIodm9pZClcXG4tLVxcbmZzL2V4dDQvc3lzZnMuYz0yNjY9RVhUNF9SV19BVFRSX1NCSV9QSShtc2dfcmF0ZWxpbWl0X2J1cnN0LCBzX21zZ19yYXRlbGltaXRfc3RhdGUuYnVyc3QpO1xcbmZzL2V4dDQvc3lzZnMuYzoyNjc6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zeXNmcy5jLTI2OC1FWFQ0X1JXX0FUVFJfU0JJX1VMKHNpbXVsYXRlX2ZhaWwsIHNfc2ltdWxhdGVfZmFpbCk7XFxuLS1cXG5mcy9leHQ0L3N5c2ZzLmM9Mjk1PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpleHQ0X2F0dHJzW10gPSB7XFxuLS1cXG5mcy9leHQ0L3N5c2ZzLmMtMzM1LVxcdEFUVFJfTElTVChqb3VybmFsX3Rhc2spLFxcbmZzL2V4dDQvc3lzZnMuYzozMzY6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zeXNmcy5jLTMzNy1cXHRBVFRSX0xJU1Qoc2ltdWxhdGVfZmFpbCksXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9ODg9c3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyX21hcFtdID0ge1xcbmZzL2V4dDQveGF0dHIuYy04OS1cXHRbRVhUNF9YQVRUUl9JTkRFWF9VU0VSXVxcdFxcdCAgICAgPSBcXHUwMDI2ZXh0NF94YXR0cl91c2VyX2hhbmRsZXIsXFxuZnMvZXh0NC94YXR0ci5jOjkwOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L3hhdHRyLmMtOTEtXFx0W0VYVDRfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTU10gID0gXFx1MDAyNm5vcF9wb3NpeF9hY2xfYWNjZXNzLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTk0LVxcdFtFWFQ0X1hBVFRSX0lOREVYX1RSVVNURURdXFx0ICAgICA9IFxcdTAwMjZleHQ0X3hhdHRyX3RydXN0ZWRfaGFuZGxlcixcXG5mcy9leHQ0L3hhdHRyLmM6OTU6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC94YXR0ci5jLTk2LVxcdFtFWFQ0X1hBVFRSX0lOREVYX1NFQ1VSSVRZXVxcdCAgICAgPSBcXHUwMDI2ZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTEwMT1jb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDMtXFx0XFx1MDAyNmV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLFxcbmZzL2V4dDQveGF0dHIuYzoxMDQ6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC94YXR0ci5jLTEwNS1cXHRcXHUwMDI2ZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5oPTIwOD1fX3hhdHRyX2NoZWNrX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2hlYWRlciAqaGVhZGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5oLTIxMy1cXG5mcy9leHQ0L3hhdHRyLmg6MjE0OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQveGF0dHIuaC0yMTUtZXh0ZXJuIGludCBleHQ0X2luaXRfc2VjdXJpdHkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDA6MTQ6MDMuNjMzNTgyNDA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIyMDQ0OTI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEVYVDQncyBJbmxpbmUgRGF0YSBDb252ZXJzaW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgdGhlIEVYVDQgZmlsZSBzeXN0ZW0ncyBpbmxpbmUgZGF0YSBmZWF0dXJlcy4gVGhlIGNvcmUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudCBpcyBgRVhUNF9GU2AsIG5hdHVyYWxseS4gTGV0J3Mgc2VlIHdoYXQgZWxzZSBwb3BzIHVwLiBSaWdodCwgdGhlIGBpbmxpbmVfZGF0YWAgZmVhdHVyZSBpcyBpbnRlZ3JhbCB0byBFWFQ0J3Mgb3BlcmF0aW9uLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBpdHMgbGlmZWN5Y2xlOiBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBhbmQgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YWAuIExvb2tpbmcgYXQgd2hlcmUgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgaXMgdXNlZCBpcyB1c2VmdWwuIEl0J3MgZXhwb3J0ZWQsIGFuZCBJIHNlZSBpdCBjYWxsZWQgZnJvbSBzZXZlcmFsIGltcG9ydGFudCBhcmVhczogYGV4dDRfc2V0YXR0cmAsIGBleHQ0X3BhZ2VfbWt3cml0ZWAsIGBleHQ0X2ZhbGxvY2F0ZWAsIGFuZCBgZXh0NF9iZWdpbl9lbmFibGVfdmVyaXR5YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGVzZSBhcmUgaGlnaC12YWx1ZSB0YXJnZXRzIGZvciBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBhbHNvIGluY2x1ZGUgYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAsIHdoaWNoIHNlZW1zIHJlbGV2YW50LCBhbmQgZXZlbiBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AgKGFsdGhvdWdoIGl0J3Mgc3RhdGljIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMgZW50cnlwb2ludHMpLCBidXQgbGV0J3Mgc3RpY2sgdG8gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciBub3cuXG5cblRoZXJlZm9yZSwgdGhlIGJlc3QgY2FuZGlkYXRlcyB0byBmdXp6IGFyZTpcblxuKiAgIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgXG4qICAgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YWBcblxuT2theSwgbGV0J3MgZG91YmxlLWNoZWNrIGhvdyBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBmaXRzIGluLiBJdCAqYXBwZWFycyogdG8gYmUgY2FsbGVkIGZyb20gYGV4dDRfZGFfd3JpdGVfYmVnaW5gLiBXYWl0LCBpcyBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBleHBvcnRlZD8gTGV0IG1lIGRvdWJsZS1jaGVjay4gSXQncyBhY3R1YWxseSBpbiBgZnMvZXh0NC9pbmxpbmUuY2AgYW5kIGRlY2xhcmVkIGluIGBmcy9leHQ0L2V4dDQuaGAuIFNvIGxldCdzIGRvdWJsZS1jaGVjayBgZnMvZXh0NC9leHQ0LmhgIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzQ1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAwOjE0OjA5Ljg1NDAzNjA3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk1NzI3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM3NjA9aW50IGV4dDRfcmVhZHBhZ2VfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmZzL2V4dDQvZXh0NC5oOjM3NjE6ZXh0ZXJuIGludCBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvZXh0NC9leHQ0LmgtMzc2Mi1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTUxMT1pbnQgZXh0NF9yZWFkcGFnZV9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNTQ1LSAqL1xcbmZzL2V4dDQvaW5saW5lLmM6NTQ2OmludCBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvZXh0NC9pbmxpbmUuYy01NDctXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTMxMzI9c3RhdGljIGludCBleHQ0X2RhX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0zMTU2LVxcdGlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSkge1xcbmZzL2V4dDQvaW5vZGUuYzozMTU3OlxcdFxcdHJldCA9IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXFxuZnMvZXh0NC9pbm9kZS5jLTMxNTgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmb2xpb3AsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMDoxNDoxMC4wMDM2MTUzNTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzE1OTU3MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRVhUNCBJbmxpbmUgRGF0YSBXcml0ZSBQYXRoKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBpcyBpbmRlZWQgY2FsbGVkIGZyb20gYGV4dDRfZGFfd3JpdGVfYmVnaW5gLCB3aGljaCBhbGlnbnMgd2l0aCBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcuIEJ1dCBob2xkIG9uLCB0aGUgcGF0Y2ggbm90ZXMgc29tZXRoaW5nIGludGVyZXN0aW5nOiBgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGFgIHdhcyByZW1vdmVkLiBIbW0sIGluc3RlYWQsIHRoZSBwYXRjaCBub3cgY2FsbHMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgd2l0aGluIGBleHQ0X3dyaXRlX2JlZ2luYC4gIExldCBtZSBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGNvZGUgc25pcHBldCBmcm9tIHRoZSBwYXRjaDpcblxuYGBgY1xuIFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7XG4tXHRcdHJldCA9IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKG1hcHBpbmcsIGlub2RlLCBwb3MsIGxlbixcbi1cdFx0XHRcdFx0XHQgICAgZm9saW9wKTtcbitcdFx0cmV0ID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRpZiAocmV0ID09IDEpIHtcbi1cdFx0XHQqZnNkYXRhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKmZzZGF0YSB8IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4gXHR9XG5gYGBcblxuUmlnaHQsIGl0J3MgY2xlYXI6IGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgIGhhcyB0YWtlbiBvdmVyLiBUaGlzIG1lYW5zIHRoYXQgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgYSBrZXkgZm9jdXMgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIG5vdyB3b3Jrcy4gQWxzbywgSSBzZWUgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YWAgaGFzIGJlZW4gbW9kaWZpZWQsIGFuZCB0aGF0IG1vZGlmaWNhdGlvbiBpcyBkb25lIHZpYSBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9ja2AsIHNvIHRoYXQgbG9va3MgbGlrZSBhbm90aGVyIGFyZWEgb2YgaW50ZXJlc3QuIE5vdywgSSBzaG91bGQgZGl2ZSBpbnRvIHRoZSBgZnMvZXh0NC9pbmxpbmUuY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YWAgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTM4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAwOjE0OjE1LjMxOTU3NTY2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTM3ODMxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9Mzc1Nj1leHRlcm4gaW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvZXh0NC9leHQ0Lmg6Mzc1NzpleHRlcm4gaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9leHQ0L2V4dDQuaC0zNzU4LWV4dGVybiB2b2lkIGV4dDRfdXBkYXRlX2ZpbmFsX2RlKHZvaWQgKmRlX2J1ZiwgaW50IG9sZF9zaXplLCBpbnQgbmV3X3NpemUpO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0zNTg9c3RhdGljIGludCBleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMzg2LVxcbmZzL2V4dDQvaW5saW5lLmM6Mzg3OnN0YXRpYyBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL2V4dDQvaW5saW5lLmMtMzg4LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTY5Mz1zdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNzY4LVxcdCAqIGRhdGEgYW5kIHBvcHVsYXRlIHRoZSBleHRlbnQgZW50cnkgYXRvbWljYWxseSB1bmRlciBpX2RhdGFfc2VtXFxuZnMvZXh0NC9pbmxpbmUuYzo3Njk6XFx0ICogKGluc2lkZSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKS4gIFRoaXMgZW5zdXJlcyBub1xcbmZzL2V4dDQvaW5saW5lLmMtNzcwLVxcdCAqIGNvbmN1cnJlbnQgcmVhZGVyIHNlZXMgYW4gZW1wdHkgZXh0ZW50IHRyZWUuXFxuZnMvZXh0NC9pbmxpbmUuYy03NzEtXFx0ICovXFxuZnMvZXh0NC9pbmxpbmUuYzo3NzI6XFx0ZXJyb3IgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUsIHBibGspO1xcbmZzL2V4dDQvaW5saW5lLmMtNzczLVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTM1Nj1ib29sIGVtcHR5X2lubGluZV9kaXIoc3RydWN0IGlub2RlICpkaXIsIGludCAqaGFzX2lubGluZV9kYXRhKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNDE4LVxcbmZzL2V4dDQvaW5saW5lLmM6MTQxOTppbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9pbmxpbmUuYy0xNDIwLXtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTQyMy1cXHRleHQ0X3dyaXRlX2xvY2tfeGF0dHIoaW5vZGUsIFxcdTAwMjZub19leHBhbmQpO1xcbmZzL2V4dDQvaW5saW5lLmM6MTQyNDpcXHRyZXQgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUsIDApO1xcbmZzL2V4dDQvaW5saW5lLmMtMTQyNS1cXHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXFx1MDAyNm5vX2V4cGFuZCk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9Mjc3Mj1zdGF0aWMgaW50IGV4dDRfZG9fd3JpdGVwYWdlcyhzdHJ1Y3QgbXBhZ2VfZGFfZGF0YSAqbXBkKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTI4MjQtXFx0XFx0XFx0XFx0RVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKTtcXG5mcy9leHQ0L2lub2RlLmM6MjgyNTpcXHRcXHRleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSk7XFxuZnMvZXh0NC9pbm9kZS5jLTI4MjYtXFx0XFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDA6MTQ6MTUuNDE0OTYwNzM4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODI2ODIzMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUGxhbiBmb3IgSW5saW5lIERhdGEgRGVwcmVjYXRpb24gaW4gZXh0NCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBkZXByZWNhdGVzIGlubGluZSBkYXRhIGZvciByZWd1bGFyIGZpbGVzIGluIGV4dDQuIFRoZSBwcmltYXJ5IGdvYWwgaXMgdG8gZm9yY2UgY29udmVyc2lvbiB0byBibG9jay1iYXNlZCBzdG9yYWdlIHdoZW5ldmVyIGEgd3JpdGUgb3BlcmF0aW9uIG9jY3Vycy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgd3JpdGUgcGF0aHMgYW5kIGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMsIHRoZXJlZm9yZSwgSSBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgdGhpcyBhcmVhLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjYWxscy4gSSBzZWUgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YWAgY2FsbGVkIGZyb20gYGV4dDRfZG9fd3JpdGVwYWdlc2AsIGFuZCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBpcyBjYWxsZWQgZnJvbSBhIG51bWJlciBvZiBwbGFjZXM6IGBleHQ0X3dyaXRlX2JlZ2luYCwgYGV4dDRfc2V0YXR0cmAsIGBleHQ0X3BhZ2VfbWt3cml0ZWAsIGBleHQ0X2ZhbGxvY2F0ZWAsIGFuZCBgZXh0NF9iZWdpbl9lbmFibGVfdmVyaXR5YC4gQWxzbywgSSd2ZSBnb3QgYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAgY2FsbGVkIGZyb20gYGV4dDRfZGFfd3JpdGVfYmVnaW5gLlxuXG5UaGUgY29yZSBmdW5jdGlvbiB0byBmb2N1cyBvbiBzZWVtcyB0byBiZSBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCwgYXMgdGhlIHBhdGNoIGlzIGRlcHJlY2F0aW5nIGFuZCBmb3JjaW5nIGNvbnZlcnNpb24gZnJvbSBpbmxpbmUgZGF0YS4gSSBhbHNvIGhhdmUgYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAgd2hpY2ggc2VlbXMgdG8gYmUgYSBzaW1wbGUgd3JhcHBlciBub3cgYW5kIGp1c3QgY2FsbHMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSlgLiBJJ2xsIGtlZXAgdGhpcyBhcyBhIGZ1enogdGFyZ2V0IGFzIGFuIGVudHJ5IHBvaW50LiBUaGVuIHRoZXJlIGlzIGBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFgLCB3aGljaCBJIHdpbGwgYWxzbyBmb2N1cyBvbi5cblxuU28sIGZvciB0aGUgY29uZmlndXJhdGlvbnMsIHRoZSBvbmx5IG5lY2Vzc2FyeSBvbmUgc2VlbXMgdG8gYmUgYEVYVDRfRlNgLiBJJ3ZlIGNoZWNrZWQgdGhlIG1vZGlmaWVkIGZpbGVzIChgZnMvZXh0NC9pbmxpbmUuY2AsIGBmcy9leHQ0L2lub2RlLmNgLCBgZnMvZXh0NC9pYWxsb2MuY2AsIGBmcy9leHQ0L3N1cGVyLmNgLCBgZnMvZXh0NC9leHQ0LmhgKSDigJMgYWxsIG9mIHRoZW0gYXJlIHdpdGhpbiB0aGUgYENPTkZJR19FWFQ0X0ZTYCBzY29wZS5cblxuTm93LCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AgaXMgd2hlcmUgdGhlIG1haW4gY29udmVyc2lvbiBsb2dpYyBvY2N1cnMuIEhvd2V2ZXIsIGl0IGlzIHN0YXRpYyBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkIGRpcmVjdGx5LCBidXQgdGhhdCBpcyBmaW5lIGFzIHRoZSBlbnRyeSBpcyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYC5cblxuSSBhbHNvIGJyaWVmbHkgbG9va2VkIGF0IGBfX2V4dDRfbmV3X2lub2RlYCwgd2hpY2ggaXMgY2hhbmdlZCB0byBwcmV2ZW50IHRoZSBzZXR0aW5nIG9mIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBIGZvciByZWd1bGFyIGZpbGVzLiBIb3dldmVyLCB0aGlzIHNlZW1zIGxpa2UgYSBnZW5lcmljIGNoYW5nZSBhbmQgbm90IGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGRlcHJlY2F0aW9uLiBUaGUgY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IGltcG9ydGFudC5cblxuSSBhbSBjb25maWRlbnQgdGhhdCB0aGUgcGFyYW1ldGVycyBzaG91bGQgYmUgc2V0IGFzOlxuLSBFbmFibGVDb25maWdzOiBgW1wiRVhUNF9GU1wiXWBcbi0gRm9jdXNTeW1ib2xzOiBgW1wiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsIFwiZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhXCIsIFwiZXh0NF9kZXN0cm95X2lubGluZV9kYXRhXCJdYFxuLSBSZWFzb25pbmc6IFwiVGhlIHBhdGNoIGRlcHJlY2F0ZXMgdGhlIGlubGluZV9kYXRhIGZlYXR1cmUgZm9yIHJlZ3VsYXIgZmlsZXMgaW4gZXh0NCwgZm9yY2luZyBjb252ZXJzaW9uIHRvIGJsb2NrLWJhc2VkIHN0b3JhZ2Ugb24gd3JpdGUuIFRoaXMgbW9kaWZpZXMgY29yZSBleHQ0IHdyaXRlIHBhdGhzIGFuZCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLlwiXG4tIFdvcnRoRnV6emluZzogdHJ1ZVxuXG5JIGFtIHJlYWR5IHRvIGZpbmFsaXplIG15IHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQzOSwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAwOjE0OjI3LjI0MTc4NzY0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MDc5MzQxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfY29udmVydF9pbmxpbmVfZGF0YVwiLFxuICAgIFwiZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhXCIsXG4gICAgXCJleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBkZXByZWNhdGVzIHRoZSBpbmxpbmVfZGF0YSBmZWF0dXJlIGZvciByZWd1bGFyIGZpbGVzIGluIGV4dDQsIGZvcmNpbmcgY29udmVyc2lvbiB0byBibG9jay1iYXNlZCBzdG9yYWdlIG9uIHdyaXRlLiBUaGlzIG1vZGlmaWVzIGNvcmUgZXh0NCB3cml0ZSBwYXRocyBhbmQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgZGF0YSBjb3JydXB0aW9uIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsXG4gICAgXCJleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFcIixcbiAgICBcImV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGRlcHJlY2F0ZXMgdGhlIGlubGluZV9kYXRhIGZlYXR1cmUgZm9yIHJlZ3VsYXIgZmlsZXMgaW4gZXh0NCwgZm9yY2luZyBjb252ZXJzaW9uIHRvIGJsb2NrLWJhc2VkIHN0b3JhZ2Ugb24gd3JpdGUuIFRoaXMgbW9kaWZpZXMgY29yZSBleHQ0IHdyaXRlIHBhdGhzIGFuZCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowp4wd4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 23:41:44 +0000 UTC FinishedAt: 2026-07-28 00:14:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "97e211ad1a34a5a979558a037619b9e633ca8620", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "97e211ad1a34a5a979558a037619b9e633ca8620", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "3e47f655-bd96-4ed7-9773-b444b2468d8a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_convert_inline_data", "ext4_generic_write_inline_data", "ext4_destroy_inline_data" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI4IDAwOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhJiMzNDssCiAgICAmIzM0O2V4dDRfZGVzdHJveV9pbmxpbmVfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBkZXByZWNhdGVzIHRoZSBpbmxpbmVfZGF0YSBmZWF0dXJlIGZvciByZWd1bGFyIGZpbGVzIGluIGV4dDQsIGZvcmNpbmcgY29udmVyc2lvbiB0byBibG9jay1iYXNlZCBzdG9yYWdlIG9uIHdyaXRlLiBUaGlzIG1vZGlmaWVzIGNvcmUgZXh0NCB3cml0ZSBwYXRocyBhbmQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgZGF0YSBjb3JydXB0aW9uIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMDoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdhNTMwZDBmNTQwN2YwZmRkYjk0MmJlMTRkYzdiM2NjOTA0YzU0MTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAwMDoxMzo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQvaW5saW5lZGF0YS5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQvaW5saW5lZGF0YS5yc3RcbmluZGV4IGE3MjhhZjBkMmZkMGM1Li44ZGMxYjZkNzUzODhkNyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC9pbmxpbmVkYXRhLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0L2lubGluZWRhdGEucnN0XG5AQCAtMyw2ICYjNDM7MywxNCBAQFxuIElubGluZSBEYXRhXG4gLS0tLS0tLS0tLS1cbiBcbiYjNDM7Li4gd2FybmluZzo6XG4mIzQzO1xuJiM0MzsgICBUaGUgaW5saW5lIGRhdGEgZmVhdHVyZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmVcbiYjNDM7ICAga2VybmVsIHJlbGVhc2UuICBOZXcgcmVndWxhciBmaWxlIGlub2RlcyBubyBsb25nZXIgc3RvcmUgZGF0YSBpbmxpbmUsXG4mIzQzOyAgIGFuZCB3cml0ZXMgdG8gZXhpc3RpbmcgaW5saW5lIGRhdGEgaW5vZGVzIHRyaWdnZXIgYXV0b21hdGljIGNvbnZlcnNpb25cbiYjNDM7ICAgdG8gYmxvY2stYmFzZWQgc3RvcmFnZS4gIFVzZSBgYHR1bmUyZnMgLU8gXmlubGluZV9kYXRhYGAgdG8gY29udmVydFxuJiM0MzsgICBleGlzdGluZyBmaWxlc3lzdGVtcy5cbiYjNDM7XG4gVGhlIGlubGluZSBkYXRhIGZlYXR1cmUgd2FzIGRlc2lnbmVkIHRvIGhhbmRsZSB0aGUgY2FzZSB0aGF0IGEgZmlsZSYjMzk7c1xuIGRhdGEgaXMgc28gdGlueSB0aGF0IGl0IHJlYWRpbHkgZml0cyBpbnNpZGUgdGhlIGlub2RlLCB3aGljaFxuICh0aGVvcmV0aWNhbGx5KSByZWR1Y2VzIGRpc2sgYmxvY2sgY29uc3VtcHRpb24gYW5kIHJlZHVjZXMgc2Vla3MuIElmIHRoZVxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IDIxYTk1MWYxMDYzNjc4Li44MzJiYzFmM2I2MDAyNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTMxNDgsNyAmIzQzOzMxNDgsNiBAQCBpbnQgZG9fam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTtcbiB2b2lkIGV4dDRfc2V0X2lub2RlX21hcHBpbmdfb3JkZXIoc3RydWN0IGlub2RlICppbm9kZSk7XG4gI2RlZmluZSBGQUxMX0JBQ0tfVE9fTk9OREVMQUxMT0MgMVxuLSNkZWZpbmUgRVhUNF9XUklURV9EQVRBX0lOTElORVx0IDJcbiBcbiB0eXBlZGVmIGVudW0ge1xuIFx0RVhUNF9JR0VUX05PUk1BTCA9XHQwLFxuQEAgLTM3NTksMTIgJiM0MzszNzU4LDYgQEAgZXh0ZXJuIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSk7XG4gZXh0ZXJuIHZvaWQgZXh0NF91cGRhdGVfZmluYWxfZGUodm9pZCAqZGVfYnVmLCBpbnQgb2xkX3NpemUsIGludCBuZXdfc2l6ZSk7XG4gXG4gaW50IGV4dDRfcmVhZHBhZ2VfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLWV4dGVybiBpbnQgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0XHQgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuLVx0XHRcdFx0XHQgc3RydWN0IGZvbGlvICoqZm9saW9wKTtcbi1pbnQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuLVx0XHRcdCAgICAgICB1bnNpZ25lZCBjb3BpZWQsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGV4dGVybiBpbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdCAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaWFsbG9jLmMgYi9mcy9leHQ0L2lhbGxvYy5jXG5pbmRleCBhNDBjYjI3ZjgxMTZjYi4uMjc4ZjBhYjhjOTk2ZTQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lhbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lhbGxvYy5jXG5AQCAtMTMwNSw4ICYjNDM7MTMwNSw4IEBAIHN0cnVjdCBpbm9kZSAqX19leHQ0X25ld19pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcbiBcdGVpLVx1MDAzZWlfZXh0cmFfaXNpemUgPSBzYmktXHUwMDNlc193YW50X2V4dHJhX2lzaXplO1xuIFx0ZWktXHUwMDNlaV9pbmxpbmVfb2ZmID0gMDtcbi1cdGlmIChleHQ0X2hhc19mZWF0dXJlX2lubGluZV9kYXRhKHNiKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoIShlaS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiAoRVhUNF9EQVhfRkx8RVhUNF9FQV9JTk9ERV9GTCkpIHx8IFNfSVNESVIobW9kZSkpKVxuJiM0MztcdGlmIChleHQ0X2hhc19mZWF0dXJlX2lubGluZV9kYXRhKHNiKSBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIShlaS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0RBWF9GTCkpXG4gXHRcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4gXHRyZXQgPSBpbm9kZTtcbiBcdGVyciA9IGRxdW90X2FsbG9jX2lub2RlKGlub2RlKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lubGluZS5jIGIvZnMvZXh0NC9pbmxpbmUuY1xuaW5kZXggY2VlZTY5YTY2NDgyYmMuLmUwYjgwMjczZTMyMmQ4IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbmxpbmUuY1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7ZXh0NF9qYmQyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtleHQ0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZXh0NF9leHRlbnRzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt4YXR0ci5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dHJ1bmNhdGUuaFwmIzM0O1xuIFxuQEAgLTIwLDEwICYjNDM7MjEsNiBAQFxuICNkZWZpbmUgRVhUNF9JTkxJTkVfRE9URE9UX09GRlNFVFx0MlxuICNkZWZpbmUgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkVcdFx0NFxuIFxuLVxuLXN0YXRpYyBpbnQgZXh0NF9kYV9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHRcdFx0XHQgc3RydWN0IGlub2RlICppbm9kZSk7XG4tXG4gc3RhdGljIGludCBleHQ0X2dldF9pbmxpbmVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX29mZilcbkBAIC0yMTgsNTEgJiM0MzsyMTUsNiBAQCBzdGF0aWMgaW50IGV4dDRfcmVhZF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWZmZXIsXG4gXHRyZXR1cm4gY3BfbGVuO1xuIH1cbiBcbi0vKlxuLSAqIHdyaXRlIHRoZSBidWZmZXIgdG8gdGhlIGlubGluZSBpbm9kZS5cbi0gKiBJZiAmIzM5O2NyZWF0ZSYjMzk7IGlzIHNldCwgd2UgZG9uJiMzOTt0IG5lZWQgdG8gZG8gdGhlIGV4dHJhIGNvcHkgaW4gdGhlIHhhdHRyXG4tICogdmFsdWUgc2luY2UgaXQgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IGV4dDRfeGF0dHJfaWJvZHlfc2V0LlxuLSAqIFRoYXQgc2F2ZXMgdXMgb25lIG1lbWNweS5cbi0gKi9cbi1zdGF0aWMgdm9pZCBleHQ0X3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MsXG4tXHRcdFx0XHQgICB2b2lkICpidWZmZXIsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGludCBsZW4pXG4te1xuLVx0c3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5O1xuLVx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfaGVhZGVyICpoZWFkZXI7XG4tXHRzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlO1xuLVx0aW50IGNwX2xlbiA9IDA7XG4tXG4tXHRpZiAodW5saWtlbHkoZXh0NF9lbWVyZ2VuY3lfc3RhdGUoaW5vZGUtXHUwMDNlaV9zYikpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRCVUdfT04oIUVYVDRfSShpbm9kZSktXHUwMDNlaV9pbmxpbmVfb2ZmKTtcbi1cdEJVR19PTihwb3MgJiM0MzsgbGVuIFx1MDAzZSBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUpO1xuLVxuLVx0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoaWxvYyk7XG4tXHRidWZmZXIgJiM0Mzs9IHBvcztcbi1cbi1cdGlmIChwb3MgXHUwMDNjIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpIHtcbi1cdFx0Y3BfbGVuID0gcG9zICYjNDM7IGxlbiBcdTAwM2UgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSA/XG4tXHRcdFx0IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgLSBwb3MgOiBsZW47XG4tXHRcdG1lbWNweSgodm9pZCAqKXJhd19pbm9kZS1cdTAwM2VpX2Jsb2NrICYjNDM7IHBvcywgYnVmZmVyLCBjcF9sZW4pO1xuLVxuLVx0XHRsZW4gLT0gY3BfbGVuO1xuLVx0XHRidWZmZXIgJiM0Mzs9IGNwX2xlbjtcbi1cdFx0cG9zICYjNDM7PSBjcF9sZW47XG4tXHR9XG4tXG4tXHRpZiAoIWxlbilcbi1cdFx0cmV0dXJuO1xuLVxuLVx0cG9zIC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XG4tXHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xuLVx0ZW50cnkgPSAoc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKikoKHZvaWQgKilyYXdfaW5vZGUgJiM0Mztcbi1cdFx0XHRcdFx0ICAgIEVYVDRfSShpbm9kZSktXHUwMDNlaV9pbmxpbmVfb2ZmKTtcbi1cbi1cdG1lbWNweSgodm9pZCAqKUlGSVJTVChoZWFkZXIpICYjNDM7IGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfb2ZmcykgJiM0MzsgcG9zLFxuLVx0ICAgICAgIGJ1ZmZlciwgbGVuKTtcbi19XG4tXG4gc3RhdGljIGludCBleHQ0X2NyZWF0ZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbGVuKVxuIHtcbkBAIC00MzMsNyAmIzQzOzM4NSw4IEBAIHN0YXRpYyBpbnQgZXh0NF9wcmVwYXJlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gfVxuIFxuIHN0YXRpYyBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuLVx0XHRcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgIGV4dDRfZnNibGtfdCBwYmxrKVxuIHtcbiBcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiBcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XG5AQCAtNDgxLDcgJiM0Mzs0MzQsMjEgQEAgc3RhdGljIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdCAgICBTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdFx0ZXh0NF9zZXRfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcbiBcdFx0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XG4mIzQzO1x0XHRcdGlmIChwYmxrKSB7XG4mIzQzO1x0XHRcdFx0c3RydWN0IGV4dDRfZXh0ZW50X2hlYWRlciAqZWg7XG4mIzQzO1x0XHRcdFx0c3RydWN0IGV4dDRfZXh0ZW50ICpleDtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0ZWggPSBleHRfaW5vZGVfaGRyKGlub2RlKTtcbiYjNDM7XHRcdFx0XHRleCA9IEVYVF9GSVJTVF9FWFRFTlQoZWgpO1xuJiM0MztcdFx0XHRcdGV4LVx1MDAzZWVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4mIzQzO1x0XHRcdFx0ZXgtXHUwMDNlZWVfbGVuID0gY3B1X3RvX2xlMTYoMSk7XG4mIzQzO1x0XHRcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCBwYmxrKTtcbiYjNDM7XHRcdFx0XHRlaC1cdTAwM2VlaF9lbnRyaWVzID0gY3B1X3RvX2xlMTYoMSk7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuJiM0MztcdH0gZWxzZSBpZiAocGJsaykge1xuJiM0MztcdFx0LyogaW5kaXJlY3QgbWFwcGluZzogc2V0IGlfZGF0YVswXSBkaXJlY3RseSAqL1xuJiM0MztcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihwYmxrKTtcbiBcdH1cbiBcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7XG4gXG5AQCAtNTY4LDEyMiAmIzQzOzUzNSw2IEBAIGludCBleHQ0X3JlYWRwYWdlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIHJldCBcdTAwM2U9IDAgPyAwIDogcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4te1xuLVx0aW50IHJldCwgbmVlZGVkX2Jsb2Nrcywgbm9fZXhwYW5kO1xuLVx0aGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7XG4tXHRpbnQgcmV0cmllcyA9IDAsIHNlbV9oZWxkID0gMDtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xuLVx0dW5zaWduZWQgZnJvbSwgdG87XG4tXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4tXG4tXHRpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkge1xuLVx0XHQvKlxuLVx0XHQgKiBjbGVhciB0aGUgZmxhZyBzbyB0aGF0IG5vIG5ldyB3cml0ZVxuLVx0XHQgKiB3aWxsIHRyYXAgaGVyZSBhZ2Fpbi5cbi1cdFx0ICovXG4tXHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRuZWVkZWRfYmxvY2tzID0gZXh0NF9jaHVua190cmFuc19leHRlbnQoaW5vZGUsIDEpO1xuLVxuLVx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpbG9jKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tcmV0cnk6XG4tXHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfV1JJVEVfUEFHRSwgbmVlZGVkX2Jsb2Nrcyk7XG4tXHRpZiAoSVNfRVJSKGhhbmRsZSkpIHtcbi1cdFx0cmV0ID0gUFRSX0VSUihoYW5kbGUpO1xuLVx0XHRoYW5kbGUgPSBOVUxMO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdC8qIFdlIGNhbm5vdCByZWN1cnNlIGludG8gdGhlIGZpbGVzeXN0ZW0gYXMgdGhlIHRyYW5zYWN0aW9uIGlzIGFscmVhZHlcbi1cdCAqIHN0YXJ0ZWQgKi9cbi1cdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxuLVx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuLVx0aWYgKElTX0VSUihmb2xpbykpIHtcbi1cdFx0cmV0ID0gUFRSX0VSUihmb2xpbyk7XG4tXHRcdGdvdG8gb3V0X25vZm9saW87XG4tXHR9XG4tXG4tXHRleHQ0X3dyaXRlX2xvY2tfeGF0dHIoaW5vZGUsIFx1MDAyNm5vX2V4cGFuZCk7XG4tXHRzZW1faGVsZCA9IDE7XG4tXHQvKiBJZiBzb21lIG9uZSBoYXMgYWxyZWFkeSBkb25lIHRoaXMgZm9yIHVzLCBqdXN0IGV4aXQuICovXG4tXHRpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkge1xuLVx0XHRyZXQgPSAwO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdGZyb20gPSAwO1xuLVx0dG8gPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XG4tXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XG4tXHRcdHJldCA9IGV4dDRfcmVhZF9pbmxpbmVfZm9saW8oaW5vZGUsIGZvbGlvKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdGV4dDRfZmNfdHJhY2tfaW5vZGUoaGFuZGxlLCBpbm9kZSk7XG4tXHRyZXQgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpO1xuLVx0aWYgKHJldClcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRpZiAoZXh0NF9zaG91bGRfZGlvcmVhZF9ub2xvY2soaW5vZGUpKSB7XG4tXHRcdHJldCA9IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oaGFuZGxlLCBmb2xpbywgZnJvbSwgdG8sXG4tXHRcdFx0XHRcdCAgICAgZXh0NF9nZXRfYmxvY2tfdW53cml0dGVuKTtcbi1cdH0gZWxzZVxuLVx0XHRyZXQgPSBleHQ0X2Jsb2NrX3dyaXRlX2JlZ2luKGhhbmRsZSwgZm9saW8sIGZyb20sIHRvLFxuLVx0XHRcdFx0XHQgICAgIGV4dDRfZ2V0X2Jsb2NrKTtcbi1cdGNsZWFyX2J1ZmZlcl9uZXcoZm9saW9fYnVmZmVycyhmb2xpbykpO1xuLVxuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IGV4dDRfc2hvdWxkX2pvdXJuYWxfZGF0YShpbm9kZSkpIHtcbi1cdFx0cmV0ID0gZXh0NF93YWxrX3BhZ2VfYnVmZmVycyhoYW5kbGUsIGlub2RlLFxuLVx0XHRcdFx0XHQgICAgIGZvbGlvX2J1ZmZlcnMoZm9saW8pLCBmcm9tLCB0byxcbi1cdFx0XHRcdFx0ICAgICBOVUxMLCBkb19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MpO1xuLVx0fVxuLVxuLVx0aWYgKHJldCkge1xuLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRmb2xpbyA9IE5VTEw7XG4tXHRcdGV4dDRfb3JwaGFuX2FkZChoYW5kbGUsIGlub2RlKTtcbi1cdFx0ZXh0NF93cml0ZV91bmxvY2tfeGF0dHIoaW5vZGUsIFx1MDAyNm5vX2V4cGFuZCk7XG4tXHRcdHNlbV9oZWxkID0gMDtcbi1cdFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbi1cdFx0aGFuZGxlID0gTlVMTDtcbi1cdFx0ZXh0NF90cnVuY2F0ZV9mYWlsZWRfd3JpdGUoaW5vZGUpO1xuLVx0XHQvKlxuLVx0XHQgKiBJZiB0cnVuY2F0ZSBmYWlsZWQgZWFybHkgdGhlIGlub2RlIG1pZ2h0XG4tXHRcdCAqIHN0aWxsIGJlIG9uIHRoZSBvcnBoYW4gbGlzdDsgd2UgbmVlZCB0b1xuLVx0XHQgKiBtYWtlIHN1cmUgdGhlIGlub2RlIGlzIHJlbW92ZWQgZnJvbSB0aGVcbi1cdFx0ICogb3JwaGFuIGxpc3QgaW4gdGhhdCBjYXNlLlxuLVx0XHQgKi9cbi1cdFx0aWYgKGlub2RlLVx1MDAzZWlfbmxpbmspXG4tXHRcdFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcbi1cdH1cbi1cbi1cdGlmIChyZXQgPT0gLUVOT1NQQyBcdTAwMjZcdTAwMjYgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtXHUwMDNlaV9zYiwgXHUwMDI2cmV0cmllcykpXG4tXHRcdGdvdG8gcmV0cnk7XG4tXG4tXHRpZiAoZm9saW8pXG4tXHRcdGJsb2NrX2NvbW1pdF93cml0ZShmb2xpbywgZnJvbSwgdG8pO1xuLW91dDpcbi1cdGlmIChmb2xpbykge1xuLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0fVxuLW91dF9ub2ZvbGlvOlxuLVx0aWYgKHNlbV9oZWxkKVxuLVx0XHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXHUwMDI2bm9fZXhwYW5kKTtcbi1cdGlmIChoYW5kbGUpXG4tXHRcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4tXHRicmVsc2UoaWxvYy5iaCk7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbiAvKlxuICAqIFByZXBhcmUgdGhlIHdyaXRlIGZvciB0aGUgaW5saW5lIGRhdGEuXG4gICogSWYgdGhlIGRhdGEgY2FuIGJlIHdyaXR0ZW4gaW50byB0aGUgaW5vZGUsIHdlIGp1c3QgcmVhZFxuQEAgLTY5OCwyNDggJiM0Mzs1NDksOCBAQCBpbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCxcbiBcdFx0XHRcdFx0ICBib29sIGRhKVxuIHtcbi1cdGludCByZXQ7XG4tXHRoYW5kbGVfdCAqaGFuZGxlO1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcbi1cdGludCByZXRyaWVzID0gMDtcbi1cbi1cdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLXJldHJ5X2pvdXJuYWw6XG4tXHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfSU5PREUsIDEpO1xuLVx0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4tXHRcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcbi1cdFx0Z290byBvdXRfcmVsZWFzZV9iaDtcbi1cdH1cbi1cbi1cdHJldCA9IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBwb3MgJiM0MzsgbGVuKTtcbi1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU5PU1BDKVxuLVx0XHRnb3RvIG91dF9zdG9wX2pvdXJuYWw7XG4tXG4tXHRpZiAocmV0ID09IC1FTk9TUEMpIHtcbi1cdFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbi1cdFx0aWYgKCFkYSkge1xuLVx0XHRcdGJyZWxzZShpbG9jLmJoKTtcbi1cdFx0XHQvKiBSZXRyeSBpbnNpZGUgKi9cbi1cdFx0XHRyZXR1cm4gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XG4tXHRcdH1cbi1cbi1cdFx0cmV0ID0gZXh0NF9kYV9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XG4tXHRcdGlmIChyZXQgPT0gLUVOT1NQQyBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLVx1MDAzZWlfc2IsIFx1MDAyNnJldHJpZXMpKVxuLVx0XHRcdGdvdG8gcmV0cnlfam91cm5hbDtcbi1cdFx0Z290byBvdXRfcmVsZWFzZV9iaDtcbi1cdH1cbi1cbi1cdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxuLVx0XHRcdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbi1cdGlmIChJU19FUlIoZm9saW8pKSB7XG4tXHRcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xuLVx0XHRnb3RvIG91dF9zdG9wX2pvdXJuYWw7XG4tXHR9XG4tXG4tXHRkb3duX3JlYWQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2V4YXR0cl9zZW0pO1xuLVx0LyogU29tZW9uZSBlbHNlIGhhZCBjb252ZXJ0ZWQgaXQgdG8gZXh0ZW50ICovXG4tXHRpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkge1xuLVx0XHRyZXQgPSAwO1xuLVx0XHRnb3RvIG91dF9yZWxlYXNlX2ZvbGlvO1xuLVx0fVxuLVxuLVx0aWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkge1xuLVx0XHRyZXQgPSBleHQ0X3JlYWRfaW5saW5lX2ZvbGlvKGlub2RlLCBmb2xpbyk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBvdXRfcmVsZWFzZV9mb2xpbztcbi1cdH1cbi1cbi1cdHJldCA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XG4tXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dF9yZWxlYXNlX2ZvbGlvO1xuLVx0KmZvbGlvcCA9IGZvbGlvO1xuLVx0dXBfcmVhZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZXhhdHRyX3NlbSk7XG4tXHRicmVsc2UoaWxvYy5iaCk7XG4tXHRyZXR1cm4gMTtcbi1cbi1vdXRfcmVsZWFzZV9mb2xpbzpcbi1cdHVwX3JlYWQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2V4YXR0cl9zZW0pO1xuLVx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdGZvbGlvX3B1dChmb2xpbyk7XG4tb3V0X3N0b3Bfam91cm5hbDpcbi1cdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4tb3V0X3JlbGVhc2VfYmg6XG4tXHRicmVsc2UoaWxvYy5iaCk7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi0vKlxuLSAqIFRyeSB0byB3cml0ZSBkYXRhIGluIHRoZSBpbm9kZS5cbi0gKiBJZiB0aGUgaW5vZGUgaGFzIGlubGluZSBkYXRhLCBjaGVjayB3aGV0aGVyIHRoZSBuZXcgd3JpdGUgY2FuIGJlXG4tICogaW4gdGhlIGlub2RlIGFsc28uIElmIG5vdCwgY3JlYXRlIHRoZSBwYWdlIHRoZSBoYW5kbGUsIG1vdmUgdGhlIGRhdGFcbi0gKiB0byB0aGUgcGFnZSBtYWtlIGl0IHVwZGF0ZSBhbmQgbGV0IHRoZSBsYXRlciBjb2RlcyBjcmVhdGUgZXh0ZW50IGZvciBpdC5cbi0gKi9cbi1pbnQgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0XHQgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHQgIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbi1cdFx0XHRcdCAgc3RydWN0IGZvbGlvICoqZm9saW9wKVxuLXtcbi1cdGlmIChwb3MgJiM0MzsgbGVuIFx1MDAzZSBleHQ0X2dldF9tYXhfaW5saW5lX3NpemUoaW5vZGUpKVxuLVx0XHRyZXR1cm4gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XG4tXHRyZXR1cm4gZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKG1hcHBpbmcsIGlub2RlLCBwb3MsIGxlbixcbi1cdFx0XHRcdFx0ICAgICAgZm9saW9wLCBmYWxzZSk7XG4tfVxuLVxuLWludCBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXG4tXHRcdFx0ICAgICAgIHVuc2lnbmVkIGNvcGllZCwgc3RydWN0IGZvbGlvICpmb2xpbylcbi17XG4tXHRoYW5kbGVfdCAqaGFuZGxlID0gZXh0NF9qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCk7XG4tXHRpbnQgbm9fZXhwYW5kO1xuLVx0dm9pZCAqa2FkZHI7XG4tXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4tXHRpbnQgcmV0ID0gMCwgcmV0Mjtcbi1cbi1cdGlmICh1bmxpa2VseShjb3BpZWQgXHUwMDNjIGxlbikgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcbi1cdFx0Y29waWVkID0gMDtcbi1cbi1cdGlmIChsaWtlbHkoY29waWVkKSkge1xuLVx0XHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlsb2MpO1xuLVx0XHRpZiAocmV0KSB7XG4tXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRcdGV4dDRfc3RkX2Vycm9yKGlub2RlLVx1MDAzZWlfc2IsIHJldCk7XG4tXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cdFx0ZXh0NF93cml0ZV9sb2NrX3hhdHRyKGlub2RlLCBcdTAwMjZub19leHBhbmQpO1xuLVx0XHQvKlxuLVx0XHQgKiBXZSBjb3VsZCBoYXZlIHJhY2VkIHdpdGggZXh0NF9wYWdlX21rd3JpdGUoKSBjb252ZXJ0aW5nXG4tXHRcdCAqIHRoZSBpbm9kZSBhbmQgY2xlYXJpbmcgdGhlIGlubGluZSBkYXRhIGZsYWcsIHNvIHdlIGp1c3Rcbi1cdFx0ICogcmVsZWFzZSByZXNvdXJjZXMgYW5kIHJldHJ5IHRoZSB3aG9sZSB3cml0ZS5cbi1cdFx0ICovXG4tXHRcdGlmICh1bmxpa2VseSghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSkge1xuLVx0XHRcdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcdTAwMjZub19leHBhbmQpO1xuLVx0XHRcdGJyZWxzZShpbG9jLmJoKTtcbi1cdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbi1cdFx0XHRyZXR1cm4gMDtcbi1cdFx0fVxuLVxuLVx0XHQvKlxuLVx0XHQgKiBlaS1cdTAwM2VpX2lubGluZV9vZmYgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZVxuLVx0XHQgKiBleHQ0X3dyaXRlX2JlZ2luKCkgY2FsbGVkXG4tXHRcdCAqIGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKClcbi1cdFx0ICovXG4tXHRcdCh2b2lkKSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcbi1cbi1cdFx0a2FkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCAwKTtcbi1cdFx0ZXh0NF93cml0ZV9pbmxpbmVfZGF0YShpbm9kZSwgXHUwMDI2aWxvYywga2FkZHIsIHBvcywgY29waWVkKTtcbi1cdFx0a3VubWFwX2xvY2FsKGthZGRyKTtcbi1cdFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4tXHRcdC8qIGNsZWFyIGRpcnR5IGZsYWcgc28gdGhhdCB3cml0ZXBhZ2VzIHdvdWxkbiYjMzk7dCB3b3JrIGZvciB1cy4gKi9cbi1cdFx0Zm9saW9fY2xlYXJfZGlydHkoZm9saW8pO1xuLVxuLVx0XHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXHUwMDI2bm9fZXhwYW5kKTtcbi1cdFx0YnJlbHNlKGlsb2MuYmgpO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdXBkYXRlIGlfc2l6ZSB3aGlsZSBzdGlsbCBob2xkaW5nIGZvbGlvXG4tXHRcdCAqIGxvY2s6IHBhZ2Ugd3JpdGVvdXQgY291bGQgb3RoZXJ3aXNlIGNvbWUgaW4gYW5kIHplcm9cbi1cdFx0ICogYmV5b25kIGlfc2l6ZS5cbi1cdFx0ICovXG4tXHRcdGV4dDRfdXBkYXRlX2lub2RlX3NpemUoaW5vZGUsIHBvcyAmIzQzOyBjb3BpZWQpO1xuLVx0fVxuLVx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdGZvbGlvX3B1dChmb2xpbyk7XG4tXG4tXHQvKlxuLVx0ICogRG9uJiMzOTt0IG1hcmsgdGhlIGlub2RlIGRpcnR5IHVuZGVyIGZvbGlvIGxvY2suIEZpcnN0LCBpdCB1bm5lY2Vzc2FyaWx5XG4tXHQgKiBtYWtlcyB0aGUgaG9sZGluZyB0aW1lIG9mIGZvbGlvIGxvY2sgbG9uZ2VyLiBTZWNvbmQsIGl0IGZvcmNlcyBsb2NrXG4tXHQgKiBvcmRlcmluZyBvZiBmb2xpbyBsb2NrIGFuZCB0cmFuc2FjdGlvbiBzdGFydCBmb3Igam91cm5hbGluZ1xuLVx0ICogZmlsZXN5c3RlbXMuXG4tXHQgKi9cbi1cdGlmIChsaWtlbHkoY29waWVkKSlcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4tb3V0OlxuLVx0Lypcbi1cdCAqIElmIHdlIGRpZG4mIzM5O3QgY29weSBhcyBtdWNoIGRhdGEgYXMgZXhwZWN0ZWQsIHdlIG5lZWQgdG8gdHJpbSBiYWNrXG4tXHQgKiBzaXplIG9mIHhhdHRyIGNvbnRhaW5pbmcgaW5saW5lIGRhdGEuXG4tXHQgKi9cbi1cdGlmIChwb3MgJiM0MzsgbGVuIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUgXHUwMDI2XHUwMDI2IGV4dDRfY2FuX3RydW5jYXRlKGlub2RlKSlcbi1cdFx0ZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpO1xuLVxuLVx0cmV0MiA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4tXHRpZiAoIXJldClcbi1cdFx0cmV0ID0gcmV0Mjtcbi1cdGlmIChwb3MgJiM0MzsgbGVuIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbi1cdFx0ZXh0NF90cnVuY2F0ZV9mYWlsZWRfd3JpdGUoaW5vZGUpO1xuLVx0XHQvKlxuLVx0XHQgKiBJZiB0cnVuY2F0ZSBmYWlsZWQgZWFybHkgdGhlIGlub2RlIG1pZ2h0IHN0aWxsIGJlXG4tXHRcdCAqIG9uIHRoZSBvcnBoYW4gbGlzdDsgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGlub2RlXG4tXHRcdCAqIGlzIHJlbW92ZWQgZnJvbSB0aGUgb3JwaGFuIGxpc3QgaW4gdGhhdCBjYXNlLlxuLVx0XHQgKi9cbi1cdFx0aWYgKGlub2RlLVx1MDAzZWlfbmxpbmspXG4tXHRcdFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcbi1cdH1cbi1cdHJldHVybiByZXQgPyByZXQgOiBjb3BpZWQ7XG4tfVxuLVxuLS8qXG4tICogVHJ5IHRvIG1ha2UgdGhlIHBhZ2UgY2FjaGUgYW5kIGhhbmRsZSByZWFkeSBmb3IgdGhlIGlubGluZSBkYXRhIGNhc2UuXG4tICogV2UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiAyIGNhc2VzOlxuLSAqIDEuIFRoZSBpbm9kZSBpcyBjcmVhdGVkIGFuZCB0aGUgZmlyc3Qgd3JpdGUgZXhjZWVkcyBpbmxpbmUgc2l6ZS4gV2UgY2FuXG4tICogICAgY2xlYXIgdGhlIGlub2RlIHN0YXRlIHNhZmVseS5cbi0gKiAyLiBUaGUgaW5vZGUgaGFzIGlubGluZSBkYXRhLCB0aGVuIHdlIG5lZWQgdG8gcmVhZCB0aGUgZGF0YSwgbWFrZSBpdFxuLSAqICAgIHVwZGF0ZSBhbmQgZGlydHkgc28gdGhhdCBleHQ0X2RhX3dyaXRlcGFnZXMgY2FuIGhhbmRsZSBpdC4gV2UgZG9uJiMzOTt0XG4tICogICAgbmVlZCB0byBzdGFydCB0aGUgam91cm5hbCBzaW5jZSB0aGUgZmlsZSYjMzk7cyBtZXRhZGF0YSBpc24mIzM5O3QgY2hhbmdlZCBub3cuXG4tICovXG4tc3RhdGljIGludCBleHQ0X2RhX2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLVx0XHRcdFx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGludCByZXQgPSAwLCBpbmxpbmVfc2l6ZTtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXG4tXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sXG4tXHRcdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuLVx0aWYgKElTX0VSUihmb2xpbykpXG4tXHRcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcbi1cbi1cdGRvd25fcmVhZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZXhhdHRyX3NlbSk7XG4tXHRpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkge1xuLVx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XG4tXG4tXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XG4tXHRcdHJldCA9IGV4dDRfcmVhZF9pbmxpbmVfZm9saW8oaW5vZGUsIGZvbGlvKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdHJldCA9IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oTlVMTCwgZm9saW8sIDAsIGlubGluZV9zaXplLFxuLVx0XHRcdFx0ICAgICBleHQ0X2RhX2dldF9ibG9ja19wcmVwKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0dXBfcmVhZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZXhhdHRyX3NlbSk7XG4tXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdGV4dDRfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKGlub2RlKTtcbi1cdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbi1cdGNsZWFyX2J1ZmZlcl9uZXcoZm9saW9fYnVmZmVycyhmb2xpbykpO1xuLVx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4tXHRmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcbi1cdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbi1cbi1vdXQ6XG4tXHR1cF9yZWFkKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNleGF0dHJfc2VtKTtcbi1cdGlmIChmb2xpbykge1xuLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0fVxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiBJbmxpbmUgZGF0YSBpcyBkZXByZWNhdGVkOiBhbHdheXMgY29udmVydCB0byBibG9jayBmb3JtYXQgKi9cbiYjNDM7XHRyZXR1cm4gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbiB9XG4gXG4gI2lmZGVmIElOTElORV9ESVJfREVCVUdcbkBAIC0xMDc5LDIzICYjNDM7NjkwLDYgQEAgc3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxuLVx0XHRcdFx0ICAgICB2b2lkICpidWYsIGludCBpbmxpbmVfc2l6ZSlcbi17XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSwgaW5saW5lX3NpemUpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRleHQ0X21zZyhpbm9kZS1cdTAwM2VpX3NiLCBLRVJOX0VNRVJHLFxuLVx0XHRcdFwmIzM0O2Vycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKVwmIzM0Oyxcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX2lubywgcmV0KTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVx0ZXh0NF93cml0ZV9pbmxpbmVfZGF0YShpbm9kZSwgaWxvYywgYnVmLCAwLCBpbmxpbmVfc2l6ZSk7XG4tXHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuLX1cbi1cbiBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYylcbkBAIC0xMTAzLDcgJiM0Mzs2OTcsNyBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiBcdGludCBlcnJvcjtcbiBcdHZvaWQgKmJ1ZiA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmggPSBOVUxMO1xuLVx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XG4mIzQzO1x0ZXh0NF9mc2Jsa190IHBibGs7XG4gXHRpbnQgaW5saW5lX3NpemU7XG4gXG4gXHRpbmxpbmVfc2l6ZSA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGlub2RlKTtcbkBAIC0xMTI5LDI1ICYjNDM7NzIzLDIwIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0ZXJyb3IgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWxsb2NhdGUgYSBkYXRhIGJsb2NrIGFuZCB3cml0ZSB0aGUgaW5saW5lIGRhdGEgdG8gaXQgYmVmb3JlXG4mIzQzO1x0ICogZGVzdHJveWluZyB0aGUgaW5saW5lIGRhdGEuICBUaGlzIGVuc3VyZXMgdGhhdCBvbiBmYWlsdXJlIHdlXG4mIzQzO1x0ICogY2FuIHNpbXBseSBmcmVlIHRoZSBhbGxvY2F0ZWQgYmxvY2sgd2l0aG91dCBuZWVkaW5nIHRvIHJlc3RvcmVcbiYjNDM7XHQgKiB0aGUgaW5saW5lIGRhdGEuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGJsayA9IGV4dDRfbmV3X21ldGFfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIDAsIDAsIE5VTEwsIFx1MDAyNmVycm9yKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRtYXAubV9sYmxrID0gMDtcbi1cdG1hcC5tX2xlbiA9IDE7XG4tXHRtYXAubV9mbGFncyA9IDA7XG4tXHRlcnJvciA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBcdTAwMjZtYXAsIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpO1xuLVx0aWYgKGVycm9yIFx1MDAzYyAwKVxuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuLVx0aWYgKCEobWFwLm1fZmxhZ3MgXHUwMDI2IEVYVDRfTUFQX01BUFBFRCkpIHtcbi1cdFx0ZXJyb3IgPSAtRUlPO1xuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuLVx0fVxuLVxuLVx0ZGF0YV9iaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLCBtYXAubV9wYmxrKTtcbiYjNDM7XHRkYXRhX2JoID0gc2JfZ2V0YmxrKGlub2RlLVx1MDAzZWlfc2IsIHBibGspO1xuIFx0aWYgKCFkYXRhX2JoKSB7XG4gXHRcdGVycm9yID0gLUVOT01FTTtcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWVfYmxvY2s7XG4gXHR9XG4gXG4gXHRsb2NrX2J1ZmZlcihkYXRhX2JoKTtcbkBAIC0xMTU1LDggJiM0Mzs3NDQsNyBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRcdFx0ICAgICAgIEVYVDRfSlRSX05PTkUpO1xuIFx0aWYgKGVycm9yKSB7XG4gXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRcdGVycm9yID0gLUVJTztcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWVfYmxvY2s7XG4gXHR9XG4gXHRtZW1zZXQoZGF0YV9iaC1cdTAwM2ViX2RhdGEsIDAsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuIFxuQEAgLTExNjQsMjYgJiM0Mzs3NTIsMzggQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdG1lbWNweShkYXRhX2JoLVx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XG4gXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoZGF0YV9iaCk7XG4gXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRcdGVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLFxuLVx0XHRcdFx0XHRcdCAgIGlub2RlLCBkYXRhX2JoKTtcbiYjNDM7XHRcdGVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCk7XG4gXHR9IGVsc2Uge1xuIFx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuLVx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuLVx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVxuIFx0XHRlcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBkYXRhX2JoLFxuIFx0XHRcdCAgbGUzMl90b19jcHUoKChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKWJ1ZiktXHUwMDNlaW5vZGUpLFxuIFx0XHRcdCAgYnVmICYjNDM7IEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxuIFx0XHRcdCAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XG4tXHRcdGlmICghZXJyb3IpXG4tXHRcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4gXHR9XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBvdXRfZnJlZV9ibG9jaztcbiBcbi1vdXRfcmVzdG9yZTpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERhdGEgaXMgc2FmZWx5IGluIHRoZSBhbGxvY2F0ZWQgYmxvY2suICBOb3cgZGVzdHJveSB0aGUgaW5saW5lXG4mIzQzO1x0ICogZGF0YSBhbmQgcG9wdWxhdGUgdGhlIGV4dGVudCBlbnRyeSBhdG9taWNhbGx5IHVuZGVyIGlfZGF0YV9zZW1cbiYjNDM7XHQgKiAoaW5zaWRlIGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2spLiAgVGhpcyBlbnN1cmVzIG5vXG4mIzQzO1x0ICogY29uY3VycmVudCByZWFkZXIgc2VlcyBhbiBlbXB0eSBleHRlbnQgdHJlZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnJvciA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSwgcGJsayk7XG4gXHRpZiAoZXJyb3IpXG4tXHRcdGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbG9jLCBidWYsIGlubGluZV9zaXplKTtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWVfYmxvY2s7XG4gXG4mIzQzO1x0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuJiM0MztcdFx0aW5vZGUtXHUwMDNlaV9zaXplID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbiYjNDM7XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4mIzQzO1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4mIzQzO1x0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztvdXRfZnJlZV9ibG9jazpcbiYjNDM7XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIHBibGssIDEsIDApO1xuIG91dDpcbiBcdGJyZWxzZShkYXRhX2JoKTtcbiBcdGtmcmVlKGJ1Zik7XG5AQCAtMTgyMSw3ICYjNDM7MTQyMSw3IEBAIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGludCByZXQsIG5vX2V4cGFuZDtcbiBcbiBcdGV4dDRfd3JpdGVfbG9ja194YXR0cihpbm9kZSwgXHUwMDI2bm9fZXhwYW5kKTtcbi1cdHJldCA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSk7XG4mIzQzO1x0cmV0ID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlLCAwKTtcbiBcdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcdTAwMjZub19leHBhbmQpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xOTgwLDE4ICYjNDM7MTU4MCw2IEBAIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XG4gXHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbiBcdFx0cmV0dXJuIDA7XG4tXHR9IGVsc2UgaWYgKCFleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSkge1xuLVx0XHQvKlxuLVx0XHQgKiBJbm9kZSBoYXMgaW5saW5lIGRhdGEgYnV0IEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBIGlzXG4tXHRcdCAqIGNsZWFyZWQuIFRoaXMgbWVhbnMgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgbW92aW5nIG9mXG4tXHRcdCAqIGlubGluZSBkYXRhIHRvIGRlbGF5IGFsbG9jYXRlZCBibG9jay4gSnVzdCBmb3JjZSB3cml0ZW91dFxuLVx0XHQgKiBoZXJlIHRvIGZpbmlzaCBjb252ZXJzaW9uLlxuLVx0XHQgKi9cbi1cdFx0ZXJyb3IgPSBmaWxlbWFwX2ZsdXNoKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4tXHRcdGlmIChlcnJvcilcbi1cdFx0XHRyZXR1cm4gZXJyb3I7XG4tXHRcdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxuLVx0XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0bmVlZGVkX2Jsb2NrcyA9IGV4dDRfY2h1bmtfdHJhbnNfZXh0ZW50KGlub2RlLCAxKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGFkMTRkZDU4YTAwM2IzLi4yMjU2ZmIzODI2YTlkYiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMTMwMCw4ICYjNDM7MTMwMCw2IEBAIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRpZiAodW5saWtlbHkocmV0KSlcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdCpmc2RhdGEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZykqZnNkYXRhIFx1MDAyNiB+RVhUNF9XUklURV9EQVRBX0lOTElORSk7XG4tXG4gXHR0cmFjZV9leHQ0X3dyaXRlX2JlZ2luKGlub2RlLCBwb3MsIGxlbik7XG4gXHQvKlxuIFx0ICogUmVzZXJ2ZSBvbmUgYmxvY2sgbW9yZSBmb3IgYWRkaXRpb24gdG8gb3JwaGFuIGxpc3QgaW4gY2FzZVxuQEAgLTEzMTIsMTQgJiM0MzsxMzEwLDkgQEAgc3RhdGljIGludCBleHQ0X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdGluZGV4ID0gcG9zIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7XG4tXHRcdHJldCA9IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKG1hcHBpbmcsIGlub2RlLCBwb3MsIGxlbixcbi1cdFx0XHRcdFx0XHQgICAgZm9saW9wKTtcbiYjNDM7XHRcdHJldCA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0aWYgKHJldCA9PSAxKSB7XG4tXHRcdFx0KmZzZGF0YSA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKSpmc2RhdGEgfCBFWFQ0X1dSSVRFX0RBVEFfSU5MSU5FKTtcbi1cdFx0XHRyZXR1cm4gMDtcbi1cdFx0fVxuIFx0fVxuIFxuIFx0LypcbkBAIC0xNDUyLDEwICYjNDM7MTQ0NSw2IEBAIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFxuIFx0dHJhY2VfZXh0NF93cml0ZV9lbmQoaW5vZGUsIHBvcywgbGVuLCBjb3BpZWQpO1xuIFxuLVx0aWYgKCh1bnNpZ25lZCBsb25nKWZzZGF0YSBcdTAwMjYgRVhUNF9XUklURV9EQVRBX0lOTElORSlcbi1cdFx0cmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLFxuLVx0XHRcdFx0XHRcdCAgZm9saW8pO1xuLVxuIFx0Y29waWVkID0gYmxvY2tfd3JpdGVfZW5kKHBvcywgbGVuLCBjb3BpZWQsIGZvbGlvKTtcbiBcdC8qXG4gXHQgKiBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdXBkYXRlIGlfc2l6ZSB3aGlsZSBzdGlsbCBob2xkaW5nIGZvbGlvIGxvY2s6XG5AQCAtMTU2MSwxMCAmIzQzOzE1NTAsNiBAQCBzdGF0aWMgaW50IGV4dDRfam91cm5hbGxlZF93cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFxuIFx0QlVHX09OKCFleHQ0X2hhbmRsZV92YWxpZChoYW5kbGUpKTtcbiBcbi1cdGlmICgodW5zaWduZWQgbG9uZylmc2RhdGEgXHUwMDI2IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpXG4tXHRcdHJldHVybiBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChpbm9kZSwgcG9zLCBsZW4sIGNvcGllZCxcbi1cdFx0XHRcdFx0XHQgIGZvbGlvKTtcbi1cbiBcdGlmICh1bmxpa2VseShjb3BpZWQgXHUwMDNjIGxlbikgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkge1xuIFx0XHRjb3BpZWQgPSAwO1xuIFx0XHRleHQ0X2pvdXJuYWxsZWRfemVyb19uZXdfYnVmZmVycyhoYW5kbGUsIGlub2RlLCBmb2xpbyxcbkBAIC0zMTczLDEwICYjNDM7MzE1OCw2IEBAIHN0YXRpYyBpbnQgZXh0NF9kYV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRcdFx0XHRcdFx0ICAgICBmb2xpb3AsIHRydWUpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdGlmIChyZXQgPT0gMSkge1xuLVx0XHRcdCpmc2RhdGEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZykqZnNkYXRhIHwgRVhUNF9XUklURV9EQVRBX0lOTElORSk7XG4tXHRcdFx0cmV0dXJuIDA7XG4tXHRcdH1cbiBcdH1cbiBcbiByZXRyeTpcbkBAIC0zMzEzLDEwICYjNDM7MzI5NCw2IEBAIHN0YXRpYyBpbnQgZXh0NF9kYV93cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFxuIFx0dHJhY2VfZXh0NF9kYV93cml0ZV9lbmQoaW5vZGUsIHBvcywgbGVuLCBjb3BpZWQpO1xuIFxuLVx0aWYgKHdyaXRlX21vZGUgXHUwMDI2IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpXG4tXHRcdHJldHVybiBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChpbm9kZSwgcG9zLCBsZW4sIGNvcGllZCxcbi1cdFx0XHRcdFx0XHQgIGZvbGlvKTtcbi1cbiBcdGlmICh1bmxpa2VseShjb3BpZWQgXHUwMDNjIGxlbikgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcbiBcdFx0Y29waWVkID0gMDtcbiBcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDZjMThiNWFkZmZjYTMyLi45OTEzZTMwYjcwNDAwOCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtMzE0NSw2ICYjNDM7MzE0NSwxMiBAQCBzdGF0aWMgaW50IGV4dDRfc2V0dXBfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLFxuIFx0XHRleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLFxuIFx0XHRcdCBcJiMzNDt3YXJuaW5nOiBjaGVja3RpbWUgcmVhY2hlZCwgXCYjMzQ7XG4gXHRcdFx0IFwmIzM0O3J1bm5pbmcgZTJmc2NrIGlzIHJlY29tbWVuZGVkXCYjMzQ7KTtcbiYjNDM7XHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9pbmxpbmVfZGF0YShzYikpXG4mIzQzO1x0XHRleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLFxuJiM0MztcdFx0XHQgXCYjMzQ7d2FybmluZzogaW5saW5lX2RhdGEgZmVhdHVyZSBpcyBkZXByZWNhdGVkIGFuZCBcJiMzNDtcbiYjNDM7XHRcdFx0IFwmIzM0O3dpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBrZXJuZWwgcmVsZWFzZS4gXCYjMzQ7XG4mIzQzO1x0XHRcdCBcJiMzNDtVc2UgJiMzOTt0dW5lMmZzIC1PIF5pbmxpbmVfZGF0YSYjMzk7IHRvIGNvbnZlcnQuXCYjMzQ7KTtcbiYjNDM7XG4gXHRpZiAoIXNiaS1cdTAwM2VzX2pvdXJuYWwpXG4gXHRcdGVzLVx1MDAzZXNfc3RhdGUgXHUwMDI2PSBjcHVfdG9fbGUxNih+RVhUNF9WQUxJRF9GUyk7XG4gXHRpZiAoIShfX3MxNikgbGUxNl90b19jcHUoZXMtXHUwMDNlc19tYXhfbW50X2NvdW50KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMDoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF9kZXN0cm95X2lubGluZV9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGRlcHJlY2F0ZXMgdGhlIGlubGluZV9kYXRhIGZlYXR1cmUgZm9yIHJlZ3VsYXIgZmlsZXMgaW4gZXh0NCwgZm9yY2luZyBjb252ZXJzaW9uIHRvIGJsb2NrLWJhc2VkIHN0b3JhZ2Ugb24gd3JpdGUuIFRoaXMgbW9kaWZpZXMgY29yZSBleHQ0IHdyaXRlIHBhdGhzIGFuZCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2E1MzBkMGY1NDA3ZjBmZGRiOTQyYmUxNGRjN2IzY2M5MDRjNTQxMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDI4IDAwOjEzOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0L2lubGluZWRhdGEucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0L2lubGluZWRhdGEucnN0CmluZGV4IGE3MjhhZjBkMmZkMGM1Li44ZGMxYjZkNzUzODhkNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0L2lubGluZWRhdGEucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC9pbmxpbmVkYXRhLnJzdApAQCAtMyw2ICYjNDM7MywxNCBAQAogSW5saW5lIERhdGEKIC0tLS0tLS0tLS0tCiAKJiM0MzsuLiB3YXJuaW5nOjoKJiM0MzsKJiM0MzsgICBUaGUgaW5saW5lIGRhdGEgZmVhdHVyZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUKJiM0MzsgICBrZXJuZWwgcmVsZWFzZS4gIE5ldyByZWd1bGFyIGZpbGUgaW5vZGVzIG5vIGxvbmdlciBzdG9yZSBkYXRhIGlubGluZSwKJiM0MzsgICBhbmQgd3JpdGVzIHRvIGV4aXN0aW5nIGlubGluZSBkYXRhIGlub2RlcyB0cmlnZ2VyIGF1dG9tYXRpYyBjb252ZXJzaW9uCiYjNDM7ICAgdG8gYmxvY2stYmFzZWQgc3RvcmFnZS4gIFVzZSBgYHR1bmUyZnMgLU8gXmlubGluZV9kYXRhYGAgdG8gY29udmVydAomIzQzOyAgIGV4aXN0aW5nIGZpbGVzeXN0ZW1zLgomIzQzOwogVGhlIGlubGluZSBkYXRhIGZlYXR1cmUgd2FzIGRlc2lnbmVkIHRvIGhhbmRsZSB0aGUgY2FzZSB0aGF0IGEgZmlsZSYjMzk7cwogZGF0YSBpcyBzbyB0aW55IHRoYXQgaXQgcmVhZGlseSBmaXRzIGluc2lkZSB0aGUgaW5vZGUsIHdoaWNoCiAodGhlb3JldGljYWxseSkgcmVkdWNlcyBkaXNrIGJsb2NrIGNvbnN1bXB0aW9uIGFuZCByZWR1Y2VzIHNlZWtzLiBJZiB0aGUKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggMjFhOTUxZjEwNjM2NzguLjgzMmJjMWYzYjYwMDI3IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMzE0OCw3ICYjNDM7MzE0OCw2IEBAIGludCBkb19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKIHZvaWQgZXh0NF9zZXRfaW5vZGVfbWFwcGluZ19vcmRlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKICNkZWZpbmUgRkFMTF9CQUNLX1RPX05PTkRFTEFMTE9DIDEKLSNkZWZpbmUgRVhUNF9XUklURV9EQVRBX0lOTElORQkgMgogCiB0eXBlZGVmIGVudW0gewogCUVYVDRfSUdFVF9OT1JNQUwgPQkwLApAQCAtMzc1OSwxMiAmIzQzOzM3NTgsNiBAQCBleHRlcm4gaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiB2b2lkIGV4dDRfdXBkYXRlX2ZpbmFsX2RlKHZvaWQgKmRlX2J1ZiwgaW50IG9sZF9zaXplLCBpbnQgbmV3X3NpemUpOwogCiBpbnQgZXh0NF9yZWFkcGFnZV9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1leHRlcm4gaW50IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJCQkgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwKLQkJCQkJIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCk7Ci1pbnQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLAotCQkJICAgICAgIHVuc2lnbmVkIGNvcGllZCwgc3RydWN0IGZvbGlvICpmb2xpbyk7CiBleHRlcm4gaW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaWFsbG9jLmMgYi9mcy9leHQ0L2lhbGxvYy5jCmluZGV4IGE0MGNiMjdmODExNmNiLi4yNzhmMGFiOGM5OTZlNCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lhbGxvYy5jCkBAIC0xMzA1LDggJiM0MzsxMzA1LDggQEAgc3RydWN0IGlub2RlICpfX2V4dDRfbmV3X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCiAJZWktJmd0O2lfZXh0cmFfaXNpemUgPSBzYmktJmd0O3Nfd2FudF9leHRyYV9pc2l6ZTsKIAllaS0mZ3Q7aV9pbmxpbmVfb2ZmID0gMDsKLQlpZiAoZXh0NF9oYXNfZmVhdHVyZV9pbmxpbmVfZGF0YShzYikgJmFtcDsmYW1wOwotCSAgICAoIShlaS0mZ3Q7aV9mbGFncyAmYW1wOyAoRVhUNF9EQVhfRkx8RVhUNF9FQV9JTk9ERV9GTCkpIHx8IFNfSVNESVIobW9kZSkpKQomIzQzOwlpZiAoZXh0NF9oYXNfZmVhdHVyZV9pbmxpbmVfZGF0YShzYikgJmFtcDsmYW1wOyBTX0lTRElSKG1vZGUpICZhbXA7JmFtcDsKJiM0MzsJICAgICEoZWktJmd0O2lfZmxhZ3MgJmFtcDsgRVhUNF9EQVhfRkwpKQogCQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpOwogCXJldCA9IGlub2RlOwogCWVyciA9IGRxdW90X2FsbG9jX2lub2RlKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jCmluZGV4IGNlZWU2OWE2NjQ4MmJjLi5lMGI4MDI3M2UzMjJkOCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbmxpbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lubGluZS5jCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogCiAjaW5jbHVkZSAmIzM0O2V4dDRfamJkMi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZXh0NC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2V4dDRfZXh0ZW50cy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGF0dHIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RydW5jYXRlLmgmIzM0OwogCkBAIC0yMCwxMCAmIzQzOzIxLDYgQEAKICNkZWZpbmUgRVhUNF9JTkxJTkVfRE9URE9UX09GRlNFVAkyCiAjZGVmaW5lIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFCQk0CiAKLQotc3RhdGljIGludCBleHQ0X2RhX2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotCiBzdGF0aWMgaW50IGV4dDRfZ2V0X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJaWYgKEVYVDRfSShpbm9kZSktJmd0O2lfaW5saW5lX29mZikKQEAgLTIxOCw1MSAmIzQzOzIxNSw2IEBAIHN0YXRpYyBpbnQgZXh0NF9yZWFkX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZmZlciwKIAlyZXR1cm4gY3BfbGVuOwogfQogCi0vKgotICogd3JpdGUgdGhlIGJ1ZmZlciB0byB0aGUgaW5saW5lIGlub2RlLgotICogSWYgJiMzOTtjcmVhdGUmIzM5OyBpcyBzZXQsIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGRvIHRoZSBleHRyYSBjb3B5IGluIHRoZSB4YXR0cgotICogdmFsdWUgc2luY2UgaXQgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IGV4dDRfeGF0dHJfaWJvZHlfc2V0LgotICogVGhhdCBzYXZlcyB1cyBvbmUgbWVtY3B5LgotICovCi1zdGF0aWMgdm9pZCBleHQ0X3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MsCi0JCQkJICAgdm9pZCAqYnVmZmVyLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCXN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIgKmhlYWRlcjsKLQlzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlOwotCWludCBjcF9sZW4gPSAwOwotCi0JaWYgKHVubGlrZWx5KGV4dDRfZW1lcmdlbmN5X3N0YXRlKGlub2RlLSZndDtpX3NiKSkpCi0JCXJldHVybjsKLQotCUJVR19PTighRVhUNF9JKGlub2RlKS0mZ3Q7aV9pbmxpbmVfb2ZmKTsKLQlCVUdfT04ocG9zICYjNDM7IGxlbiAmZ3Q7IEVYVDRfSShpbm9kZSktJmd0O2lfaW5saW5lX3NpemUpOwotCi0JcmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoaWxvYyk7Ci0JYnVmZmVyICYjNDM7PSBwb3M7Ci0KLQlpZiAocG9zICZsdDsgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSkgewotCQljcF9sZW4gPSBwb3MgJiM0MzsgbGVuICZndDsgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSA/Ci0JCQkgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSAtIHBvcyA6IGxlbjsKLQkJbWVtY3B5KCh2b2lkICopcmF3X2lub2RlLSZndDtpX2Jsb2NrICYjNDM7IHBvcywgYnVmZmVyLCBjcF9sZW4pOwotCi0JCWxlbiAtPSBjcF9sZW47Ci0JCWJ1ZmZlciAmIzQzOz0gY3BfbGVuOwotCQlwb3MgJiM0Mzs9IGNwX2xlbjsKLQl9Ci0KLQlpZiAoIWxlbikKLQkJcmV0dXJuOwotCi0JcG9zIC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7Ci0JaGVhZGVyID0gSUhEUihpbm9kZSwgcmF3X2lub2RlKTsKLQllbnRyeSA9IChzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqKSgodm9pZCAqKXJhd19pbm9kZSAmIzQzOwotCQkJCQkgICAgRVhUNF9JKGlub2RlKS0mZ3Q7aV9pbmxpbmVfb2ZmKTsKLQotCW1lbWNweSgodm9pZCAqKUlGSVJTVChoZWFkZXIpICYjNDM7IGxlMTZfdG9fY3B1KGVudHJ5LSZndDtlX3ZhbHVlX29mZnMpICYjNDM7IHBvcywKLQkgICAgICAgYnVmZmVyLCBsZW4pOwotfQotCiBzdGF0aWMgaW50IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbGVuKQogewpAQCAtNDMzLDcgJiM0MzszODUsOCBAQCBzdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogfQogCiBzdGF0aWMgaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkJICAgc3RydWN0IGlub2RlICppbm9kZSkKJiM0MzsJCQkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCQkgICBleHQ0X2ZzYmxrX3QgcGJsaykKIHsKIAlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CiAJc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHsKQEAgLTQ4MSw3ICYjNDM7NDM0LDIxIEBAIHN0YXRpYyBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLAogCQkgICAgU19JU1JFRyhpbm9kZS0mZ3Q7aV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLSZndDtpX21vZGUpKSB7CiAJCQlleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpOwogCQkJZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgaW5vZGUpOwomIzQzOwkJCWlmIChwYmxrKSB7CiYjNDM7CQkJCXN0cnVjdCBleHQ0X2V4dGVudF9oZWFkZXIgKmVoOwomIzQzOwkJCQlzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4OwomIzQzOwomIzQzOwkJCQllaCA9IGV4dF9pbm9kZV9oZHIoaW5vZGUpOwomIzQzOwkJCQlleCA9IEVYVF9GSVJTVF9FWFRFTlQoZWgpOwomIzQzOwkJCQlleC0mZ3Q7ZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTsKJiM0MzsJCQkJZXgtJmd0O2VlX2xlbiA9IGNwdV90b19sZTE2KDEpOwomIzQzOwkJCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIHBibGspOwomIzQzOwkJCQllaC0mZ3Q7ZWhfZW50cmllcyA9IGNwdV90b19sZTE2KDEpOwomIzQzOwkJCX0KIAkJfQomIzQzOwl9IGVsc2UgaWYgKHBibGspIHsKJiM0MzsJCS8qIGluZGlyZWN0IG1hcHBpbmc6IHNldCBpX2RhdGFbMF0gZGlyZWN0bHkgKi8KJiM0MzsJCUVYVDRfSShpbm9kZSktJmd0O2lfZGF0YVswXSA9IGNwdV90b19sZTMyKHBibGspOwogCX0KIAlleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpOwogCkBAIC01NjgsMTIyICYjNDM7NTM1LDYgQEAgaW50IGV4dDRfcmVhZHBhZ2VfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuIHJldCAmZ3Q7PSAwID8gMCA6IHJldDsKIH0KIAotc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWludCByZXQsIG5lZWRlZF9ibG9ja3MsIG5vX2V4cGFuZDsKLQloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKLQlpbnQgcmV0cmllcyA9IDAsIHNlbV9oZWxkID0gMDsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDsKLQl1bnNpZ25lZCBmcm9tLCB0bzsKLQlzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7Ci0KLQlpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkgewotCQkvKgotCQkgKiBjbGVhciB0aGUgZmxhZyBzbyB0aGF0IG5vIG5ldyB3cml0ZQotCQkgKiB3aWxsIHRyYXAgaGVyZSBhZ2Fpbi4KLQkJICovCi0JCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbmVlZGVkX2Jsb2NrcyA9IGV4dDRfY2h1bmtfdHJhbnNfZXh0ZW50KGlub2RlLCAxKTsKLQotCXJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgJmFtcDtpbG9jKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi1yZXRyeToKLQloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfV1JJVEVfUEFHRSwgbmVlZGVkX2Jsb2Nrcyk7Ci0JaWYgKElTX0VSUihoYW5kbGUpKSB7Ci0JCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKLQkJaGFuZGxlID0gTlVMTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogV2UgY2Fubm90IHJlY3Vyc2UgaW50byB0aGUgZmlsZXN5c3RlbSBhcyB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeQotCSAqIHN0YXJ0ZWQgKi8KLQlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4gfCBGR1BfTk9GUywKLQkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwotCWlmIChJU19FUlIoZm9saW8pKSB7Ci0JCXJldCA9IFBUUl9FUlIoZm9saW8pOwotCQlnb3RvIG91dF9ub2ZvbGlvOwotCX0KLQotCWV4dDRfd3JpdGVfbG9ja194YXR0cihpbm9kZSwgJmFtcDtub19leHBhbmQpOwotCXNlbV9oZWxkID0gMTsKLQkvKiBJZiBzb21lIG9uZSBoYXMgYWxyZWFkeSBkb25lIHRoaXMgZm9yIHVzLCBqdXN0IGV4aXQuICovCi0JaWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHsKLQkJcmV0ID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZnJvbSA9IDA7Ci0JdG8gPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7Ci0JaWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkgewotCQlyZXQgPSBleHQ0X3JlYWRfaW5saW5lX2ZvbGlvKGlub2RlLCBmb2xpbyk7Ci0JCWlmIChyZXQgJmx0OyAwKQotCQkJZ290byBvdXQ7Ci0JfQotCi0JZXh0NF9mY190cmFja19pbm9kZShoYW5kbGUsIGlub2RlKTsKLQlyZXQgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JaWYgKGV4dDRfc2hvdWxkX2Rpb3JlYWRfbm9sb2NrKGlub2RlKSkgewotCQlyZXQgPSBleHQ0X2Jsb2NrX3dyaXRlX2JlZ2luKGhhbmRsZSwgZm9saW8sIGZyb20sIHRvLAotCQkJCQkgICAgIGV4dDRfZ2V0X2Jsb2NrX3Vud3JpdHRlbik7Ci0JfSBlbHNlCi0JCXJldCA9IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oaGFuZGxlLCBmb2xpbywgZnJvbSwgdG8sCi0JCQkJCSAgICAgZXh0NF9nZXRfYmxvY2spOwotCWNsZWFyX2J1ZmZlcl9uZXcoZm9saW9fYnVmZmVycyhmb2xpbykpOwotCi0JaWYgKCFyZXQgJmFtcDsmYW1wOyBleHQ0X3Nob3VsZF9qb3VybmFsX2RhdGEoaW5vZGUpKSB7Ci0JCXJldCA9IGV4dDRfd2Fsa19wYWdlX2J1ZmZlcnMoaGFuZGxlLCBpbm9kZSwKLQkJCQkJICAgICBmb2xpb19idWZmZXJzKGZvbGlvKSwgZnJvbSwgdG8sCi0JCQkJCSAgICAgTlVMTCwgZG9fam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKTsKLQl9Ci0KLQlpZiAocmV0KSB7Ci0JCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0JCWZvbGlvX3B1dChmb2xpbyk7Ci0JCWZvbGlvID0gTlVMTDsKLQkJZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpOwotCQlleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgJmFtcDtub19leHBhbmQpOwotCQlzZW1faGVsZCA9IDA7Ci0JCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JCWhhbmRsZSA9IE5VTEw7Ci0JCWV4dDRfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKGlub2RlKTsKLQkJLyoKLQkJICogSWYgdHJ1bmNhdGUgZmFpbGVkIGVhcmx5IHRoZSBpbm9kZSBtaWdodAotCQkgKiBzdGlsbCBiZSBvbiB0aGUgb3JwaGFuIGxpc3Q7IHdlIG5lZWQgdG8KLQkJICogbWFrZSBzdXJlIHRoZSBpbm9kZSBpcyByZW1vdmVkIGZyb20gdGhlCi0JCSAqIG9ycGhhbiBsaXN0IGluIHRoYXQgY2FzZS4KLQkJICovCi0JCWlmIChpbm9kZS0mZ3Q7aV9ubGluaykKLQkJCWV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7Ci0JfQotCi0JaWYgKHJldCA9PSAtRU5PU1BDICZhbXA7JmFtcDsgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtJmd0O2lfc2IsICZhbXA7cmV0cmllcykpCi0JCWdvdG8gcmV0cnk7Ci0KLQlpZiAoZm9saW8pCi0JCWJsb2NrX2NvbW1pdF93cml0ZShmb2xpbywgZnJvbSwgdG8pOwotb3V0OgotCWlmIChmb2xpbykgewotCQlmb2xpb191bmxvY2soZm9saW8pOwotCQlmb2xpb19wdXQoZm9saW8pOwotCX0KLW91dF9ub2ZvbGlvOgotCWlmIChzZW1faGVsZCkKLQkJZXh0NF93cml0ZV91bmxvY2tfeGF0dHIoaW5vZGUsICZhbXA7bm9fZXhwYW5kKTsKLQlpZiAoaGFuZGxlKQotCQlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwotCWJyZWxzZShpbG9jLmJoKTsKLQlyZXR1cm4gcmV0OwotfQotCiAvKgogICogUHJlcGFyZSB0aGUgd3JpdGUgZm9yIHRoZSBpbmxpbmUgZGF0YS4KICAqIElmIHRoZSBkYXRhIGNhbiBiZSB3cml0dGVuIGludG8gdGhlIGlub2RlLCB3ZSBqdXN0IHJlYWQKQEAgLTY5OCwyNDggJiM0Mzs1NDksOCBAQCBpbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCQkgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwKIAkJCQkJICBib29sIGRhKQogewotCWludCByZXQ7Ci0JaGFuZGxlX3QgKmhhbmRsZTsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwotCXN0cnVjdCBleHQ0X2lsb2MgaWxvYzsKLQlpbnQgcmV0cmllcyA9IDA7Ci0KLQlyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsICZhbXA7aWxvYyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotcmV0cnlfam91cm5hbDoKLQloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfSU5PREUsIDEpOwotCWlmIChJU19FUlIoaGFuZGxlKSkgewotCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7Ci0JCWdvdG8gb3V0X3JlbGVhc2VfYmg7Ci0JfQotCi0JcmV0ID0gZXh0NF9wcmVwYXJlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIHBvcyAmIzQzOyBsZW4pOwotCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVOT1NQQykKLQkJZ290byBvdXRfc3RvcF9qb3VybmFsOwotCi0JaWYgKHJldCA9PSAtRU5PU1BDKSB7Ci0JCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JCWlmICghZGEpIHsKLQkJCWJyZWxzZShpbG9jLmJoKTsKLQkJCS8qIFJldHJ5IGluc2lkZSAqLwotCQkJcmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQobWFwcGluZywgaW5vZGUpOwotCQl9Ci0KLQkJcmV0ID0gZXh0NF9kYV9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7Ci0JCWlmIChyZXQgPT0gLUVOT1NQQyAmYW1wOyZhbXA7Ci0JCSAgICBleHQ0X3Nob3VsZF9yZXRyeV9hbGxvYyhpbm9kZS0mZ3Q7aV9zYiwgJmFtcDtyZXRyaWVzKSkKLQkJCWdvdG8gcmV0cnlfam91cm5hbDsKLQkJZ290byBvdXRfcmVsZWFzZV9iaDsKLQl9Ci0KLQlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4gfCBGR1BfTk9GUywKLQkJCQkJbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7Ci0JaWYgKElTX0VSUihmb2xpbykpIHsKLQkJcmV0ID0gUFRSX0VSUihmb2xpbyk7Ci0JCWdvdG8gb3V0X3N0b3Bfam91cm5hbDsKLQl9Ci0KLQlkb3duX3JlYWQoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDt4YXR0cl9zZW0pOwotCS8qIFNvbWVvbmUgZWxzZSBoYWQgY29udmVydGVkIGl0IHRvIGV4dGVudCAqLwotCWlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0X3JlbGVhc2VfZm9saW87Ci0JfQotCi0JaWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkgewotCQlyZXQgPSBleHQ0X3JlYWRfaW5saW5lX2ZvbGlvKGlub2RlLCBmb2xpbyk7Ci0JCWlmIChyZXQgJmx0OyAwKQotCQkJZ290byBvdXRfcmVsZWFzZV9mb2xpbzsKLQl9Ci0KLQlyZXQgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLSZndDtpX3NiLCBpbG9jLmJoLCBFWFQ0X0pUUl9OT05FKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9yZWxlYXNlX2ZvbGlvOwotCSpmb2xpb3AgPSBmb2xpbzsKLQl1cF9yZWFkKCZhbXA7RVhUNF9JKGlub2RlKS0mZ3Q7eGF0dHJfc2VtKTsKLQlicmVsc2UoaWxvYy5iaCk7Ci0JcmV0dXJuIDE7Ci0KLW91dF9yZWxlYXNlX2ZvbGlvOgotCXVwX3JlYWQoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDt4YXR0cl9zZW0pOwotCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0JZm9saW9fcHV0KGZvbGlvKTsKLW91dF9zdG9wX2pvdXJuYWw6Ci0JZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKLW91dF9yZWxlYXNlX2JoOgotCWJyZWxzZShpbG9jLmJoKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogVHJ5IHRvIHdyaXRlIGRhdGEgaW4gdGhlIGlub2RlLgotICogSWYgdGhlIGlub2RlIGhhcyBpbmxpbmUgZGF0YSwgY2hlY2sgd2hldGhlciB0aGUgbmV3IHdyaXRlIGNhbiBiZQotICogaW4gdGhlIGlub2RlIGFsc28uIElmIG5vdCwgY3JlYXRlIHRoZSBwYWdlIHRoZSBoYW5kbGUsIG1vdmUgdGhlIGRhdGEKLSAqIHRvIHRoZSBwYWdlIG1ha2UgaXQgdXBkYXRlIGFuZCBsZXQgdGhlIGxhdGVyIGNvZGVzIGNyZWF0ZSBleHRlbnQgZm9yIGl0LgotICovCi1pbnQgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLAotCQkJCSAgc3RydWN0IGZvbGlvICoqZm9saW9wKQotewotCWlmIChwb3MgJiM0MzsgbGVuICZndDsgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKGlub2RlKSkKLQkJcmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQobWFwcGluZywgaW5vZGUpOwotCXJldHVybiBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEobWFwcGluZywgaW5vZGUsIHBvcywgbGVuLAotCQkJCQkgICAgICBmb2xpb3AsIGZhbHNlKTsKLX0KLQotaW50IGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwKLQkJCSAgICAgICB1bnNpZ25lZCBjb3BpZWQsIHN0cnVjdCBmb2xpbyAqZm9saW8pCi17Ci0JaGFuZGxlX3QgKmhhbmRsZSA9IGV4dDRfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpOwotCWludCBub19leHBhbmQ7Ci0Jdm9pZCAqa2FkZHI7Ci0Jc3RydWN0IGV4dDRfaWxvYyBpbG9jOwotCWludCByZXQgPSAwLCByZXQyOwotCi0JaWYgKHVubGlrZWx5KGNvcGllZCAmbHQ7IGxlbikgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpCi0JCWNvcGllZCA9IDA7Ci0KLQlpZiAobGlrZWx5KGNvcGllZCkpIHsKLQkJcmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCAmYW1wO2lsb2MpOwotCQlpZiAocmV0KSB7Ci0JCQlmb2xpb191bmxvY2soZm9saW8pOwotCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCWV4dDRfc3RkX2Vycm9yKGlub2RlLSZndDtpX3NiLCByZXQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJZXh0NF93cml0ZV9sb2NrX3hhdHRyKGlub2RlLCAmYW1wO25vX2V4cGFuZCk7Ci0JCS8qCi0JCSAqIFdlIGNvdWxkIGhhdmUgcmFjZWQgd2l0aCBleHQ0X3BhZ2VfbWt3cml0ZSgpIGNvbnZlcnRpbmcKLQkJICogdGhlIGlub2RlIGFuZCBjbGVhcmluZyB0aGUgaW5saW5lIGRhdGEgZmxhZywgc28gd2UganVzdAotCQkgKiByZWxlYXNlIHJlc291cmNlcyBhbmQgcmV0cnkgdGhlIHdob2xlIHdyaXRlLgotCQkgKi8KLQkJaWYgKHVubGlrZWx5KCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpKSB7Ci0JCQlleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgJmFtcDtub19leHBhbmQpOwotCQkJYnJlbHNlKGlsb2MuYmgpOwotCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKLQkJCWZvbGlvX3B1dChmb2xpbyk7Ci0JCQlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQkvKgotCQkgKiBlaS0mZ3Q7aV9pbmxpbmVfb2ZmIG1heSBoYXZlIGNoYW5nZWQgc2luY2UKLQkJICogZXh0NF93cml0ZV9iZWdpbigpIGNhbGxlZAotCQkgKiBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YSgpCi0JCSAqLwotCQkodm9pZCkgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7Ci0KLQkJa2FkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCAwKTsKLQkJZXh0NF93cml0ZV9pbmxpbmVfZGF0YShpbm9kZSwgJmFtcDtpbG9jLCBrYWRkciwgcG9zLCBjb3BpZWQpOwotCQlrdW5tYXBfbG9jYWwoa2FkZHIpOwotCQlmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTsKLQkJLyogY2xlYXIgZGlydHkgZmxhZyBzbyB0aGF0IHdyaXRlcGFnZXMgd291bGRuJiMzOTt0IHdvcmsgZm9yIHVzLiAqLwotCQlmb2xpb19jbGVhcl9kaXJ0eShmb2xpbyk7Ci0KLQkJZXh0NF93cml0ZV91bmxvY2tfeGF0dHIoaW5vZGUsICZhbXA7bm9fZXhwYW5kKTsKLQkJYnJlbHNlKGlsb2MuYmgpOwotCi0JCS8qCi0JCSAqIEl0JiMzOTtzIGltcG9ydGFudCB0byB1cGRhdGUgaV9zaXplIHdoaWxlIHN0aWxsIGhvbGRpbmcgZm9saW8KLQkJICogbG9jazogcGFnZSB3cml0ZW91dCBjb3VsZCBvdGhlcndpc2UgY29tZSBpbiBhbmQgemVybwotCQkgKiBiZXlvbmQgaV9zaXplLgotCQkgKi8KLQkJZXh0NF91cGRhdGVfaW5vZGVfc2l6ZShpbm9kZSwgcG9zICYjNDM7IGNvcGllZCk7Ci0JfQotCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0JZm9saW9fcHV0KGZvbGlvKTsKLQotCS8qCi0JICogRG9uJiMzOTt0IG1hcmsgdGhlIGlub2RlIGRpcnR5IHVuZGVyIGZvbGlvIGxvY2suIEZpcnN0LCBpdCB1bm5lY2Vzc2FyaWx5Ci0JICogbWFrZXMgdGhlIGhvbGRpbmcgdGltZSBvZiBmb2xpbyBsb2NrIGxvbmdlci4gU2Vjb25kLCBpdCBmb3JjZXMgbG9jawotCSAqIG9yZGVyaW5nIG9mIGZvbGlvIGxvY2sgYW5kIHRyYW5zYWN0aW9uIHN0YXJ0IGZvciBqb3VybmFsaW5nCi0JICogZmlsZXN5c3RlbXMuCi0JICovCi0JaWYgKGxpa2VseShjb3BpZWQpKQotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLW91dDoKLQkvKgotCSAqIElmIHdlIGRpZG4mIzM5O3QgY29weSBhcyBtdWNoIGRhdGEgYXMgZXhwZWN0ZWQsIHdlIG5lZWQgdG8gdHJpbSBiYWNrCi0JICogc2l6ZSBvZiB4YXR0ciBjb250YWluaW5nIGlubGluZSBkYXRhLgotCSAqLwotCWlmIChwb3MgJiM0MzsgbGVuICZndDsgaW5vZGUtJmd0O2lfc2l6ZSAmYW1wOyZhbXA7IGV4dDRfY2FuX3RydW5jYXRlKGlub2RlKSkKLQkJZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpOwotCi0JcmV0MiA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IHJldDI7Ci0JaWYgKHBvcyAmIzQzOyBsZW4gJmd0OyBpbm9kZS0mZ3Q7aV9zaXplKSB7Ci0JCWV4dDRfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKGlub2RlKTsKLQkJLyoKLQkJICogSWYgdHJ1bmNhdGUgZmFpbGVkIGVhcmx5IHRoZSBpbm9kZSBtaWdodCBzdGlsbCBiZQotCQkgKiBvbiB0aGUgb3JwaGFuIGxpc3Q7IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbm9kZQotCQkgKiBpcyByZW1vdmVkIGZyb20gdGhlIG9ycGhhbiBsaXN0IGluIHRoYXQgY2FzZS4KLQkJICovCi0JCWlmIChpbm9kZS0mZ3Q7aV9ubGluaykKLQkJCWV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7Ci0JfQotCXJldHVybiByZXQgPyByZXQgOiBjb3BpZWQ7Ci19Ci0KLS8qCi0gKiBUcnkgdG8gbWFrZSB0aGUgcGFnZSBjYWNoZSBhbmQgaGFuZGxlIHJlYWR5IGZvciB0aGUgaW5saW5lIGRhdGEgY2FzZS4KLSAqIFdlIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gMiBjYXNlczoKLSAqIDEuIFRoZSBpbm9kZSBpcyBjcmVhdGVkIGFuZCB0aGUgZmlyc3Qgd3JpdGUgZXhjZWVkcyBpbmxpbmUgc2l6ZS4gV2UgY2FuCi0gKiAgICBjbGVhciB0aGUgaW5vZGUgc3RhdGUgc2FmZWx5LgotICogMi4gVGhlIGlub2RlIGhhcyBpbmxpbmUgZGF0YSwgdGhlbiB3ZSBuZWVkIHRvIHJlYWQgdGhlIGRhdGEsIG1ha2UgaXQKLSAqICAgIHVwZGF0ZSBhbmQgZGlydHkgc28gdGhhdCBleHQ0X2RhX3dyaXRlcGFnZXMgY2FuIGhhbmRsZSBpdC4gV2UgZG9uJiMzOTt0Ci0gKiAgICBuZWVkIHRvIHN0YXJ0IHRoZSBqb3VybmFsIHNpbmNlIHRoZSBmaWxlJiMzOTtzIG1ldGFkYXRhIGlzbiYjMzk7dCBjaGFuZ2VkIG5vdy4KLSAqLwotc3RhdGljIGludCBleHQ0X2RhX2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaW50IHJldCA9IDAsIGlubGluZV9zaXplOwotCXN0cnVjdCBmb2xpbyAqZm9saW87Ci0KLQlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sCi0JCQkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwotCWlmIChJU19FUlIoZm9saW8pKQotCQlyZXR1cm4gUFRSX0VSUihmb2xpbyk7Ci0KLQlkb3duX3JlYWQoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDt4YXR0cl9zZW0pOwotCWlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7Ci0JCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7Ci0KLQlpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7Ci0JCXJldCA9IGV4dDRfcmVhZF9pbmxpbmVfZm9saW8oaW5vZGUsIGZvbGlvKTsKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSBleHQ0X2Jsb2NrX3dyaXRlX2JlZ2luKE5VTEwsIGZvbGlvLCAwLCBpbmxpbmVfc2l6ZSwKLQkJCQkgICAgIGV4dDRfZGFfZ2V0X2Jsb2NrX3ByZXApOwotCWlmIChyZXQpIHsKLQkJdXBfcmVhZCgmYW1wO0VYVDRfSShpbm9kZSktJmd0O3hhdHRyX3NlbSk7Ci0JCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0JCWZvbGlvX3B1dChmb2xpbyk7Ci0JCWV4dDRfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKGlub2RlKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQljbGVhcl9idWZmZXJfbmV3KGZvbGlvX2J1ZmZlcnMoZm9saW8pKTsKLQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKLQlmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTsKLQlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7Ci0KLW91dDoKLQl1cF9yZWFkKCZhbXA7RVhUNF9JKGlub2RlKS0mZ3Q7eGF0dHJfc2VtKTsKLQlpZiAoZm9saW8pIHsKLQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKLQkJZm9saW9fcHV0KGZvbGlvKTsKLQl9Ci0JcmV0dXJuIHJldDsKJiM0MzsJLyogSW5saW5lIGRhdGEgaXMgZGVwcmVjYXRlZDogYWx3YXlzIGNvbnZlcnQgdG8gYmxvY2sgZm9ybWF0ICovCiYjNDM7CXJldHVybiBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpOwogfQogCiAjaWZkZWYgSU5MSU5FX0RJUl9ERUJVRwpAQCAtMTA3OSwyMyAmIzQzOzY5MCw2IEBAIHN0YXRpYyBpbnQgZXh0NF91cGRhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLAotCQkJCSAgICAgdm9pZCAqYnVmLCBpbnQgaW5saW5lX3NpemUpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlubGluZV9zaXplKTsKLQlpZiAocmV0KSB7Ci0JCWV4dDRfbXNnKGlub2RlLSZndDtpX3NiLCBLRVJOX0VNRVJHLAotCQkJJiMzNDtlcnJvciByZXN0b3JpbmcgaW5saW5lX2RhdGEgZm9yIGlub2RlIC0tIHBvdGVudGlhbCBkYXRhIGxvc3MhIChpbm9kZSAlbGx1LCBlcnJvciAlZCkmIzM0OywKLQkJCWlub2RlLSZndDtpX2lubywgcmV0KTsKLQkJcmV0dXJuOwotCX0KLQlleHQ0X3dyaXRlX2lubGluZV9kYXRhKGlub2RlLCBpbG9jLCBidWYsIDAsIGlubGluZV9zaXplKTsKLQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpOwotfQotCiBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSwKIAkJCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYykKQEAgLTExMDMsNyAmIzQzOzY5Nyw3IEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLAogCWludCBlcnJvcjsKIAl2b2lkICpidWYgPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGF0YV9iaCA9IE5VTEw7Ci0Jc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7CiYjNDM7CWV4dDRfZnNibGtfdCBwYmxrOwogCWludCBpbmxpbmVfc2l6ZTsKIAogCWlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpOwpAQCAtMTEyOSwyNSAmIzQzOzcyMywyMCBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSwKIAkJCWdvdG8gb3V0OwogCX0KIAotCWVycm9yID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlKTsKJiM0MzsJLyoKJiM0MzsJICogQWxsb2NhdGUgYSBkYXRhIGJsb2NrIGFuZCB3cml0ZSB0aGUgaW5saW5lIGRhdGEgdG8gaXQgYmVmb3JlCiYjNDM7CSAqIGRlc3Ryb3lpbmcgdGhlIGlubGluZSBkYXRhLiAgVGhpcyBlbnN1cmVzIHRoYXQgb24gZmFpbHVyZSB3ZQomIzQzOwkgKiBjYW4gc2ltcGx5IGZyZWUgdGhlIGFsbG9jYXRlZCBibG9jayB3aXRob3V0IG5lZWRpbmcgdG8gcmVzdG9yZQomIzQzOwkgKiB0aGUgaW5saW5lIGRhdGEuCiYjNDM7CSAqLwomIzQzOwlwYmxrID0gZXh0NF9uZXdfbWV0YV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgMCwgMCwgTlVMTCwgJmFtcDtlcnJvcik7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAotCW1hcC5tX2xibGsgPSAwOwotCW1hcC5tX2xlbiA9IDE7Ci0JbWFwLm1fZmxhZ3MgPSAwOwotCWVycm9yID0gZXh0NF9tYXBfYmxvY2tzKGhhbmRsZSwgaW5vZGUsICZhbXA7bWFwLCBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKTsKLQlpZiAoZXJyb3IgJmx0OyAwKQotCQlnb3RvIG91dF9yZXN0b3JlOwotCWlmICghKG1hcC5tX2ZsYWdzICZhbXA7IEVYVDRfTUFQX01BUFBFRCkpIHsKLQkJZXJyb3IgPSAtRUlPOwotCQlnb3RvIG91dF9yZXN0b3JlOwotCX0KLQotCWRhdGFfYmggPSBzYl9nZXRibGsoaW5vZGUtJmd0O2lfc2IsIG1hcC5tX3BibGspOwomIzQzOwlkYXRhX2JoID0gc2JfZ2V0YmxrKGlub2RlLSZndDtpX3NiLCBwYmxrKTsKIAlpZiAoIWRhdGFfYmgpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9yZXN0b3JlOwomIzQzOwkJZ290byBvdXRfZnJlZV9ibG9jazsKIAl9CiAKIAlsb2NrX2J1ZmZlcihkYXRhX2JoKTsKQEAgLTExNTUsOCAmIzQzOzc0NCw3IEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLAogCQkJCQkgICAgICAgRVhUNF9KVFJfTk9ORSk7CiAJaWYgKGVycm9yKSB7CiAJCXVubG9ja19idWZmZXIoZGF0YV9iaCk7Ci0JCWVycm9yID0gLUVJTzsKLQkJZ290byBvdXRfcmVzdG9yZTsKJiM0MzsJCWdvdG8gb3V0X2ZyZWVfYmxvY2s7CiAJfQogCW1lbXNldChkYXRhX2JoLSZndDtiX2RhdGEsIDAsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7CiAKQEAgLTExNjQsMjYgJiM0Mzs3NTIsMzggQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsCiAJCW1lbWNweShkYXRhX2JoLSZndDtiX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpOwogCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpOwogCQl1bmxvY2tfYnVmZmVyKGRhdGFfYmgpOwotCQllcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwKLQkJCQkJCSAgIGlub2RlLCBkYXRhX2JoKTsKJiM0MzsJCWVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCk7CiAJfSBlbHNlIHsKIAkJdW5sb2NrX2J1ZmZlcihkYXRhX2JoKTsKLQkJaW5vZGUtJmd0O2lfc2l6ZSA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKLQkJaV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemUpOwotCQlFWFQ0X0koaW5vZGUpLSZndDtpX2Rpc2tzaXplID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplOwotCiAJCWVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGRhdGFfYmgsCiAJCQkgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLSZndDtpbm9kZSksCiAJCQkgIGJ1ZiAmIzQzOyBFWFQ0X0lOTElORV9ET1RET1RfU0laRSwKIAkJCSAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIAl9CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gb3V0X2ZyZWVfYmxvY2s7CiAKLW91dF9yZXN0b3JlOgomIzQzOwkvKgomIzQzOwkgKiBEYXRhIGlzIHNhZmVseSBpbiB0aGUgYWxsb2NhdGVkIGJsb2NrLiAgTm93IGRlc3Ryb3kgdGhlIGlubGluZQomIzQzOwkgKiBkYXRhIGFuZCBwb3B1bGF0ZSB0aGUgZXh0ZW50IGVudHJ5IGF0b21pY2FsbHkgdW5kZXIgaV9kYXRhX3NlbQomIzQzOwkgKiAoaW5zaWRlIGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2spLiAgVGhpcyBlbnN1cmVzIG5vCiYjNDM7CSAqIGNvbmN1cnJlbnQgcmVhZGVyIHNlZXMgYW4gZW1wdHkgZXh0ZW50IHRyZWUuCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSwgcGJsayk7CiAJaWYgKGVycm9yKQotCQlleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSwgaWxvYywgYnVmLCBpbmxpbmVfc2l6ZSk7CiYjNDM7CQlnb3RvIG91dF9mcmVlX2Jsb2NrOwogCiYjNDM7CWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CQlpbm9kZS0mZ3Q7aV9zaXplID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplOwomIzQzOwkJaV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemUpOwomIzQzOwkJRVhUNF9JKGlub2RlKS0mZ3Q7aV9kaXNrc2l6ZSA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnJvciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKJiM0MzsJZ290byBvdXQ7CiYjNDM7CiYjNDM7b3V0X2ZyZWVfYmxvY2s6CiYjNDM7CWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgcGJsaywgMSwgMCk7CiBvdXQ6CiAJYnJlbHNlKGRhdGFfYmgpOwogCWtmcmVlKGJ1Zik7CkBAIC0xODIxLDcgJiM0MzsxNDIxLDcgQEAgaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCWludCByZXQsIG5vX2V4cGFuZDsKIAogCWV4dDRfd3JpdGVfbG9ja194YXR0cihpbm9kZSwgJmFtcDtub19leHBhbmQpOwotCXJldCA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSk7CiYjNDM7CXJldCA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSwgMCk7CiAJZXh0NF93cml0ZV91bmxvY2tfeGF0dHIoaW5vZGUsICZhbXA7bm9fZXhwYW5kKTsKIAogCXJldHVybiByZXQ7CkBAIC0xOTgwLDE4ICYjNDM7MTU4MCw2IEBAIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSkKIAlpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkgewogCQlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7CiAJCXJldHVybiAwOwotCX0gZWxzZSBpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7Ci0JCS8qCi0JCSAqIElub2RlIGhhcyBpbmxpbmUgZGF0YSBidXQgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEgaXMKLQkJICogY2xlYXJlZC4gVGhpcyBtZWFucyB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBtb3Zpbmcgb2YKLQkJICogaW5saW5lIGRhdGEgdG8gZGVsYXkgYWxsb2NhdGVkIGJsb2NrLiBKdXN0IGZvcmNlIHdyaXRlb3V0Ci0JCSAqIGhlcmUgdG8gZmluaXNoIGNvbnZlcnNpb24uCi0JCSAqLwotCQllcnJvciA9IGZpbGVtYXBfZmx1c2goaW5vZGUtJmd0O2lfbWFwcGluZyk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQkJaWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpCi0JCQlyZXR1cm4gMDsKIAl9CiAKIAluZWVkZWRfYmxvY2tzID0gZXh0NF9jaHVua190cmFuc19leHRlbnQoaW5vZGUsIDEpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IGFkMTRkZDU4YTAwM2IzLi4yMjU2ZmIzODI2YTlkYiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMTMwMCw4ICYjNDM7MTMwMCw2IEBAIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJaWYgKHVubGlrZWx5KHJldCkpCiAJCXJldHVybiByZXQ7CiAKLQkqZnNkYXRhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKmZzZGF0YSAmYW1wOyB+RVhUNF9XUklURV9EQVRBX0lOTElORSk7Ci0KIAl0cmFjZV9leHQ0X3dyaXRlX2JlZ2luKGlub2RlLCBwb3MsIGxlbik7CiAJLyoKIAkgKiBSZXNlcnZlIG9uZSBibG9jayBtb3JlIGZvciBhZGRpdGlvbiB0byBvcnBoYW4gbGlzdCBpbiBjYXNlCkBAIC0xMzEyLDE0ICYjNDM7MTMxMCw5IEBAIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJaW5kZXggPSBwb3MgJmd0OyZndDsgUEFHRV9TSElGVDsKIAogCWlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSkgewotCQlyZXQgPSBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sCi0JCQkJCQkgICAgZm9saW9wKTsKJiM0MzsJCXJldCA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7CiAJCWlmIChyZXQgJmx0OyAwKQogCQkJcmV0dXJuIHJldDsKLQkJaWYgKHJldCA9PSAxKSB7Ci0JCQkqZnNkYXRhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKmZzZGF0YSB8IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KIAl9CiAKIAkvKgpAQCAtMTQ1MiwxMCAmIzQzOzE0NDUsNiBAQCBzdGF0aWMgaW50IGV4dDRfd3JpdGVfZW5kKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAogCXRyYWNlX2V4dDRfd3JpdGVfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkKTsKIAotCWlmICgodW5zaWduZWQgbG9uZylmc2RhdGEgJmFtcDsgRVhUNF9XUklURV9EQVRBX0lOTElORSkKLQkJcmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLAotCQkJCQkJICBmb2xpbyk7Ci0KIAljb3BpZWQgPSBibG9ja193cml0ZV9lbmQocG9zLCBsZW4sIGNvcGllZCwgZm9saW8pOwogCS8qCiAJICogaXQmIzM5O3MgaW1wb3J0YW50IHRvIHVwZGF0ZSBpX3NpemUgd2hpbGUgc3RpbGwgaG9sZGluZyBmb2xpbyBsb2NrOgpAQCAtMTU2MSwxMCAmIzQzOzE1NTAsNiBAQCBzdGF0aWMgaW50IGV4dDRfam91cm5hbGxlZF93cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLAogCiAJQlVHX09OKCFleHQ0X2hhbmRsZV92YWxpZChoYW5kbGUpKTsKIAotCWlmICgodW5zaWduZWQgbG9uZylmc2RhdGEgJmFtcDsgRVhUNF9XUklURV9EQVRBX0lOTElORSkKLQkJcmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLAotCQkJCQkJICBmb2xpbyk7Ci0KIAlpZiAodW5saWtlbHkoY29waWVkICZsdDsgbGVuKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkgewogCQljb3BpZWQgPSAwOwogCQlleHQ0X2pvdXJuYWxsZWRfemVyb19uZXdfYnVmZmVycyhoYW5kbGUsIGlub2RlLCBmb2xpbywKQEAgLTMxNzMsMTAgJiM0MzszMTU4LDYgQEAgc3RhdGljIGludCBleHQ0X2RhX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwKIAkJCQkJCSAgICAgZm9saW9wLCB0cnVlKTsKIAkJaWYgKHJldCAmbHQ7IDApCiAJCQlyZXR1cm4gcmV0OwotCQlpZiAocmV0ID09IDEpIHsKLQkJCSpmc2RhdGEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZykqZnNkYXRhIHwgRVhUNF9XUklURV9EQVRBX0lOTElORSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQogCX0KIAogcmV0cnk6CkBAIC0zMzEzLDEwICYjNDM7MzI5NCw2IEBAIHN0YXRpYyBpbnQgZXh0NF9kYV93cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLAogCiAJdHJhY2VfZXh0NF9kYV93cml0ZV9lbmQoaW5vZGUsIHBvcywgbGVuLCBjb3BpZWQpOwogCi0JaWYgKHdyaXRlX21vZGUgJmFtcDsgRVhUNF9XUklURV9EQVRBX0lOTElORSkKLQkJcmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLAotCQkJCQkJICBmb2xpbyk7Ci0KIAlpZiAodW5saWtlbHkoY29waWVkICZsdDsgbGVuKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkKIAkJY29waWVkID0gMDsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IDZjMThiNWFkZmZjYTMyLi45OTEzZTMwYjcwNDAwOCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtMzE0NSw2ICYjNDM7MzE0NSwxMiBAQCBzdGF0aWMgaW50IGV4dDRfc2V0dXBfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLAogCQlleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLAogCQkJICYjMzQ7d2FybmluZzogY2hlY2t0aW1lIHJlYWNoZWQsICYjMzQ7CiAJCQkgJiMzNDtydW5uaW5nIGUyZnNjayBpcyByZWNvbW1lbmRlZCYjMzQ7KTsKJiM0MzsJaWYgKGV4dDRfaGFzX2ZlYXR1cmVfaW5saW5lX2RhdGEoc2IpKQomIzQzOwkJZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORywKJiM0MzsJCQkgJiMzNDt3YXJuaW5nOiBpbmxpbmVfZGF0YSBmZWF0dXJlIGlzIGRlcHJlY2F0ZWQgYW5kICYjMzQ7CiYjNDM7CQkJICYjMzQ7d2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIGtlcm5lbCByZWxlYXNlLiAmIzM0OwomIzQzOwkJCSAmIzM0O1VzZSAmIzM5O3R1bmUyZnMgLU8gXmlubGluZV9kYXRhJiMzOTsgdG8gY29udmVydC4mIzM0Oyk7CiYjNDM7CiAJaWYgKCFzYmktJmd0O3Nfam91cm5hbCkKIAkJZXMtJmd0O3Nfc3RhdGUgJmFtcDs9IGNwdV90b19sZTE2KH5FWFQ0X1ZBTElEX0ZTKTsKIAlpZiAoIShfX3MxNikgbGUxNl90b19jcHUoZXMtJmd0O3NfbWF4X21udF9jb3VudCkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTE1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXh0NCBJbmxpbmUgRGF0YSBEZXByZWNhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGVmZmVjdGl2ZWx5IG51a2luZyB0aGUgYGlubGluZV9kYXRhYCBmZWF0dXJlIGluIGV4dDQuIEl0JiMzOTtzIG5vdCBqdXN0IGEgY2xlYW51cDsgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIGZpbGVzeXN0ZW0gY29tcG9uZW50LiBUaGUgaWRlYSBpcyB0byBzdG9wICp3cml0aW5nKiBuZXcgaW5saW5lIGRhdGEgdG8gcmVndWxhciBmaWxlcyBhbmQgY29udmVydCBhbnkgZXhpc3RpbmcgaW5saW5lIGRhdGEgdG8gdGhlIHN0YW5kYXJkIGJsb2NrIGZvcm1hdC4gVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7ZnV6emluZyB0YXJnZXQmIzM0OyB0byBtZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkYXRhIGNvcnJ1cHRpb24gb3IgdW5leHBlY3RlZCBiZWhhdmlvciBkdXJpbmcgdGhlc2UgY29udmVyc2lvbnMgYW5kIHdyaXRlIG9wZXJhdGlvbnMuCgpJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBrZXkgZnVuY3Rpb25zIGFmZmVjdGVkLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCB0b3VjaGVzIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCwgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2tgLCBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCwgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAsIGBleHQ0X3dyaXRlX2JlZ2luYCwgYGV4dDRfd3JpdGVfZW5kYCwgYGV4dDRfam91cm5hbGxlZF93cml0ZV9lbmRgLCBgZXh0NF9kYV93cml0ZV9iZWdpbmAsIGBleHQ0X2RhX3dyaXRlX2VuZGAsIGFuZCBgX19leHQ0X25ld19pbm9kZWAuCgpBIHF1aWNrIGdsYW5jZSBhdCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyByZXZlYWxzIHNvbWV0aGluZyBpbnRlcmVzdGluZzogYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGlzICpzdGF0aWMqLCBidXQgaXQmIzM5O3MgY3J1Y2lhbCBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBieSB0aGUgbm9uLXN0YXRpYyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBhbmQgYGV4dDRfdXBkYXRlX2lubGluZV9kaXJgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAgYW5kIGBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFgIGFyZSBub24tc3RhdGljIGFzIHdlbGwuICBUaGUgYGV4dDRfd3JpdGVfYmVnaW5gIGFuZCBgZXh0NF9kYV93cml0ZV9iZWdpbmAgdmFyaWFudHMgYXJlIHN0YXRpYywgYnV0IHBhcnQgb2YgdGhlIGBleHQ0X2FvcHNgIGFuZCBgZXh0NF9kYV9hb3BzYCBzbyB0aGV5IGFyZSBzdGlsbCB0YXJnZXRzLgoKTm93LCBteSBmb2N1cyBuYXJyb3dzOiBJIHdhbnQgYSBkZWVwZXIgbG9vayBhdCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCwgYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAgYW5kIGBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaGFuZGxpbmcgdGhlIGNvbnZlcnNpb24gYW5kIHBvdGVudGlhbCB3cml0aW5nIG9yIHJlbW92YWwuCgpCZWZvcmUgZGl2aW5nIGludG8gYSBkZXRhaWxlZCBjb2RlIHJldmlldywgSSBzaG91bGQgdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWUgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBhbmQgdXNlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjYWxsIGdyYXBocyBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2NyeXB0by5jPTEzMj1zdGF0aWMgaW50IGV4dDRfc2V0X2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqY3R4LCBzaXplX3QgbGVuLFxuLS1cbmZzL2V4dDQvY3J5cHRvLmMtMTUyLVxuZnMvZXh0NC9jcnlwdG8uYzoxNTM6XHRyZXMgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xuZnMvZXh0NC9jcnlwdG8uYy0xNTQtXHRpZiAocmVzKVxuLS1cbmZzL2V4dDQvZXh0NC5oPTM3OTg9ZXh0ZXJuIGludCBleHQ0X2lubGluZV9kYXRhX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqaGFzX2lubGluZSk7XG5mcy9leHQ0L2V4dDQuaC0zNzk5LVxuZnMvZXh0NC9leHQ0Lmg6MzgwMDpleHRlcm4gaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2V4dDQvZXh0NC5oLTM4MDEtXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NDg3OT1sb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00OTA4LVx0aW5vZGVfbG9jayhpbm9kZSk7XG5mcy9leHQ0L2V4dGVudHMuYzo0OTA5Olx0cmV0ID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MTAtXHRpZiAocmV0KVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9NTQ2PWludCBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy01NTItXHQvKiBJbmxpbmUgZGF0YSBpcyBkZXByZWNhdGVkOiBhbHdheXMgY29udmVydCB0byBibG9jayBmb3JtYXQgKi9cbmZzL2V4dDQvaW5saW5lLmM6NTUzOlx0cmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XG5mcy9leHQ0L2lubGluZS5jLTU1NC19XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz02NzE9c3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNjkyLVxuZnMvZXh0NC9pbmxpbmUuYzo2OTM6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9leHQ0L2lubGluZS5jLTY5NC1cdFx0XHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jPTc5OD1pbnQgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy04NTAtXHQgKi9cbmZzL2V4dDQvaW5saW5lLmM6ODUxOlx0cmV0ID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGRpciwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2lubGluZS5jLTg1Mi1cbi0tXG5mcy9leHQ0L2lubGluZS5jPTE0NjI9aW50IGV4dDRfaW5saW5lX2RhdGFfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpoYXNfaW5saW5lKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTU3My1cbmZzL2V4dDQvaW5saW5lLmM6MTU3NDppbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lubGluZS5jLTE1NzUte1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTU5OS1cdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXG5mcy9leHQ0L2lubGluZS5jOjE2MDA6XHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMTYwMS1cdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcdTAwMjZub19leHBhbmQpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0xMjg2PXN0YXRpYyBpbnQgZXh0NF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTEzMTItXHRpZiAoZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpIHtcbmZzL2V4dDQvaW5vZGUuYzoxMzEzOlx0XHRyZXQgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xuZnMvZXh0NC9pbm9kZS5jLTEzMTQtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTU5OTg9aW50IGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2V4dDQvaW5vZGUuYy02MDk1LVx0XHQgICAgYXR0ci1cdTAwM2VpYV9zaXplIFx1MDAzZSBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUpIHtcbmZzL2V4dDQvaW5vZGUuYzo2MDk2Olx0XHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbmZzL2V4dDQvaW5vZGUuYy02MDk3LVx0XHRcdGlmIChlcnJvcilcbi0tXG5mcy9leHQ0L2lub2RlLmM9Njg2MT12bV9mYXVsdF90IGV4dDRfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy02ODgyLVxuZnMvZXh0NC9pbm9kZS5jOjY4ODM6XHRlcnIgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xuZnMvZXh0NC9pbm9kZS5jLTY4ODQtXHRpZiAoZXJyKVxuLS1cbmZzL2V4dDQvdmVyaXR5LmM9MTAyPXN0YXRpYyBpbnQgZXh0NF9iZWdpbl9lbmFibGVfdmVyaXR5KHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL2V4dDQvdmVyaXR5LmMtMTI4LVxuZnMvZXh0NC92ZXJpdHkuYzoxMjk6XHRlcnIgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xuZnMvZXh0NC92ZXJpdHkuYy0xMzAtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDcwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgRXh0NCBJbmxpbmUgRGF0YSBEZXByZWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyB0aGUgZGVwcmVjYXRpb24gb2YgYGlubGluZV9kYXRhYCBmb3Igc3RhbmRhcmQgZmlsZXMgaW4gZXh0NC4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgbmVlZCBhIGNsb3NlIGxvb2suIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGludm9sdmUgcmVwbGFjaW5nIHRoZSBpbmxpbmUgZGF0YSBoYW5kbGluZyB3aXRoIGEgc3RhbmRhcmQgYmxvY2sgYWxsb2NhdGlvbiBhbmQgd3JpdGUgcHJvY2VzcyB3aXRoaW4gYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgLiBUaGF0IG1ha2VzIHNlbnNlOyBtb3ZpbmcgZGF0YSBvdXQgb2YgdGhlIGlub2RlIGFuZCBpbnRvIHJlZ3VsYXIgYmxvY2tzIGlzIHRoZSBleHBlY3RlZCBhcHByb2FjaCBmb3IgZGVwcmVjYXRpb24uCgpUaGVuLCBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9ja2AgaXMgdXBkYXRlZCB0byBoYW5kbGUgdGhlIGNsZWFudXAgdXNpbmcgYSBwaHlzaWNhbCBibG9jayAoYHBibGtgKSBhbmQgZWl0aGVyIHBvcHVsYXRlIHRoZSBleHRlbnQgdHJlZSBvciBhbiBpbmRpcmVjdCBibG9jayBkaXJlY3RseS4gVGhhdCYjMzk7cyBhIGtleSBjaGFuZ2UsIGFuZCBpdCBhbGlnbnMgd2l0aCB0aGUgZGF0YSBub3cgcmVzaWRpbmcgaW4gc3RhbmRhcmQgYmxvY2tzLgoKVGhlIHRocmVlIGZ1bmN0aW9ucywgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAsIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgLCBhbmQgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YWAgYXJlIHN0cm9uZyBjYW5kaWRhdGVzIGZvciB1c2luZyBgRm9jdXNTeW1ib2xzYC4gVGhleSBhcmUgdGhlIG1haW4gdG91Y2hwb2ludHMgb2YgdGhpcyBkZXByZWNhdGlvbiwgc28gdGhleSYjMzk7cmUgdGhlIGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGlmIEkgd2FudCB0byB0aG9yb3VnaGx5IHJldmlldyB0aGlzLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zLiBXZSBhbGwga25vdyBgQ09ORklHX0VYVDRfRlNgIGVuYWJsZXMgZXh0NCwgc28gdGhhdCYjMzk7cyB0aGUgYmFzZS4gQnV0IGlzIHRoZXJlIGEgc2VwYXJhdGUgQ09ORklHIG9wdGlvbiBzcGVjaWZpY2FsbHkgZm9yICppbmxpbmUqIGRhdGE/IElmIHRoZXJlIGlzLCBpdCB3aWxsIGJlIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgdGhlIGltcGFjdCBhbmQgcG90ZW50aWFsIGNvbXBpbGUtdGltZSBlZmZlY3RzIG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gdHJhY2sgZG93biBhbnkgY29uZmlnIGRlcGVuZGVuY2llcyB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19FWFQ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC8ua3VuaXRjb25maWc9MT1DT05GSUdfS1VOSVQ9eVxuZnMvZXh0NC8ua3VuaXRjb25maWc6MjpDT05GSUdfRVhUNF9GUz15XG5mcy9leHQ0Ly5rdW5pdGNvbmZpZzozOkNPTkZJR19FWFQ0X0tVTklUX1RFU1RTPXlcbi0tXG5mcy9leHQ0L01ha2VmaWxlLTUtXG5mcy9leHQ0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0VYVDRfRlMpICYjNDM7PSBleHQ0Lm9cbmZzL2V4dDQvTWFrZWZpbGUtNy1cbmZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG4tLVxuZnMvZXh0NC9NYWtlZmlsZS0xNC1cbmZzL2V4dDQvTWFrZWZpbGU6MTU6ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTClcdCYjNDM7PSBhY2wub1xuZnMvZXh0NC9NYWtlZmlsZToxNjpleHQ0LSQoQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkpXHRcdCYjNDM7PSB4YXR0cl9zZWN1cml0eS5vXG5mcy9leHQ0L01ha2VmaWxlLTE3LWV4dDQtdGVzdC1vYmpzXHRcdFx0XHQmIzQzOz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXG5mcy9leHQ0L01ha2VmaWxlLTE4LVx0XHRcdFx0XHQgICBleHRlbnRzLXRlc3QubyBoYXNoLXRlc3Qub1xuZnMvZXh0NC9NYWtlZmlsZToxOTpvYmotJChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcdFx0JiM0Mzs9IGV4dDQtdGVzdC5vXG5mcy9leHQ0L01ha2VmaWxlLTIwLWV4dDQtJChDT05GSUdfRlNfVkVSSVRZKVx0XHQmIzQzOz0gdmVyaXR5Lm9cbi0tXG5mcy9leHQ0L2FjbC5oPTM5PXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfYWNsX2NvdW50KHNpemVfdCBzaXplKVxuLS1cbmZzL2V4dDQvYWNsLmgtNTQtXG5mcy9leHQ0L2FjbC5oOjU1OiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvYWNsLmgtNTYtXG4tLVxuZnMvZXh0NC9hY2wuaD02MT1leHRlcm4gaW50IGV4dDRfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqKTtcbmZzL2V4dDQvYWNsLmgtNjItXG5mcy9leHQ0L2FjbC5oOjYzOiNlbHNlICAvKiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgKi9cbmZzL2V4dDQvYWNsLmgtNjQtI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuLS1cbmZzL2V4dDQvYWNsLmg9Njk9ZXh0NF9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcilcbi0tXG5mcy9leHQ0L2FjbC5oLTcyLX1cbmZzL2V4dDQvYWNsLmg6NzM6I2VuZGlmICAvKiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgKi9cbmZzL2V4dDQvYWNsLmgtNzQtXG4tLVxuZnMvZXh0NC9leHQ0LmgtOTEtICovXG5mcy9leHQ0L2V4dDQuaDo5MjojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvZXh0NC5oLTkzLSNkZWZpbmUgZXh0X2RlYnVnKGlubywgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MTU5Mj1zdHJ1Y3QgZXh0NF9zYl9pbmZvIHtcbi0tXG5mcy9leHQ0L2V4dDQuaC0xODA2LVx0dTY0IHNfZGF4X3BhcnRfb2ZmO1xuZnMvZXh0NC9leHQ0Lmg6MTgwNzojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvZXh0NC5oLTE4MDgtXHR1bnNpZ25lZCBsb25nIHNfc2ltdWxhdGVfZmFpbDtcbi0tXG5mcy9leHQ0L2V4dDQuaC0xODY5LVx0dGlkX3Qgc19mY19pbmVsaWdpYmxlX3RpZDtcbmZzL2V4dDQvZXh0NC5oOjE4NzA6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L2V4dDQuaC0xODcxLVx0aW50IHNfZmNfZGVidWdfbWF4X3JlcGxheTtcbi0tXG5mcy9leHQ0L2V4dDQuaD0xOTk0PXN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X3NpbXVsYXRlX2ZhaWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L2V4dDQuaC0xOTk2LXtcbmZzL2V4dDQvZXh0NC5oOjE5OTc6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L2V4dDQuaC0xOTk4LVx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7XG4tLVxuZnMvZXh0NC9leHQ0Lmg9NDA0NT1leHRlcm4gaW50IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9leHQ0L2V4dDQuaC00MDQ4LVxuZnMvZXh0NC9leHQ0Lmg6NDA0OTojaWYgSVNfRU5BQkxFRChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcbmZzL2V4dDQvZXh0NC5oLTQwNTAtI2RlZmluZSBFWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1Qoc3ltKSBcXFxuLS1cbmZzL2V4dDQvZXh0NF9leHRlbnRzLmg9MjcwPWV4dGVybiBpbnQgZXh0NF9leHRfemVyb291dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4KTtcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmg6MjcxOiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaC0yNzItZXh0ZXJuIGludCBleHQ0X2V4dF9zcGFjZV9yb290X2lkeF90ZXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBjaGVjayk7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NjI1Mj1pbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy02MzAzLVxuZnMvZXh0NC9leHRlbnRzLmM6NjMwNDojaWYgSVNfRU5BQkxFRChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcbmZzL2V4dDQvZXh0ZW50cy5jLTYzMDUtaW50IGV4dDRfZXh0X3NwYWNlX3Jvb3RfaWR4X3Rlc3Qoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGNoZWNrKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNTcwPXN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXkoam91cm5hbF90ICpqb3VybmFsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTk1LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1OTY6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU5Ny1cdGlmIChzYmktXHUwMDNlc19mY19kZWJ1Z19tYXhfcmVwbGF5IFx1MDAyNlx1MDAyNiBvZmYgXHUwMDNlPSBzYmktXHUwMDNlc19mY19kZWJ1Z19tYXhfcmVwbGF5KSB7XG4tLVxuZnMvZXh0NC9oYXNoLmM9MzE0PWludCBleHQ0ZnNfZGlyaGFzaChjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbixcbi0tXG5mcy9leHQ0L2hhc2guYy0zNDQtXG5mcy9leHQ0L2hhc2guYzozNDU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXG5mcy9leHQ0L2hhc2guYy0zNDYtRVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRmc19kaXJoYXNoKTtcbi0tXG5mcy9leHQ0L2lhbGxvYy5jPTg3Nj1zdGF0aWMgaW50IGV4dDRfeGF0dHJfY3JlZGl0c19mb3JfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBtb2RlX3QgbW9kZSxcbi0tXG5mcy9leHQ0L2lhbGxvYy5jLTg4MC1cdGludCBuYmxvY2tzID0gMDtcbmZzL2V4dDQvaWFsbG9jLmM6ODgxOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvaWFsbG9jLmMtODgyLVx0c3RydWN0IHBvc2l4X2FjbCAqcCA9IGdldF9pbm9kZV9hY2woZGlyLCBBQ0xfVFlQRV9ERUZBVUxUKTtcbi0tXG5mcy9leHQ0L2lub2RlLmM9NDA5PWludCBleHQ0X2lzc3VlX3plcm9vdXQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsaywgZXh0NF9mc2Jsa190IHBibGssXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTQzMy0gKi9cbmZzL2V4dDQvaW5vZGUuYzo0MzQ6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L2lub2RlLmMtNDM1LXZvaWQgZXh0NF9jaGVja19tYXBfZXh0ZW50c19lbnYoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz01NzI5PXN0YXRpYyB2b2lkIGV4dDRfbWJfcGFfcHV0X2ZyZWUoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcbi0tXG5mcy9leHQ0L21iYWxsb2MuYy01NzQ0LVxuZnMvZXh0NC9tYmFsbG9jLmM6NTc0NTojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvbWJhbGxvYy5jLTU3NDYtc3RhdGljIGlubGluZSB2b2lkIGV4dDRfbWJfc2hvd19wYShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTcxMzA9ZXh0NF9tYmFsbG9jX3F1ZXJ5X3JhbmdlKFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTcxODUtXG5mcy9leHQ0L21iYWxsb2MuYzo3MTg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxuZnMvZXh0NC9tYmFsbG9jLmMtNzE4Ny12b2lkIG1iX2NsZWFyX2JpdHNfdGVzdCh2b2lkICpibSwgaW50IGN1ciwgaW50IGxlbilcbi0tXG5mcy9leHQ0L21iYWxsb2MuaC0yOC0gKi9cbmZzL2V4dDQvbWJhbGxvYy5oOjI5OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9tYmFsbG9jLmgtMzAtI2RlZmluZSBtYl9kZWJ1ZyhzYiwgZm10LCAuLi4pXHRcdFx0XHRcdFx0XFxcbi0tXG5mcy9leHQ0L21iYWxsb2MuaD0yNzM9ZXh0ZXJuIGludCBleHQ0X21iX21hcmtfY29udGV4dChoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5oLTI3Ny1cdFx0ZXh0NF9ncnBibGtfdCAqcmV0X2NoYW5nZWQpO1xuZnMvZXh0NC9tYmFsbG9jLmg6Mjc4OiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxuZnMvZXh0NC9tYmFsbG9jLmgtMjc5LWV4dGVybiB2b2lkIG1iX2NsZWFyX2JpdHNfdGVzdCh2b2lkICpibSwgaW50IGN1ciwgaW50IGxlbik7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBleHQ0X2NvbnRleHRfb3BzID0ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xMzItXG5mcy9leHQ0L3N1cGVyLmM6MTMzOiNpZiAhZGVmaW5lZChDT05GSUdfRVhUMl9GUykgXHUwMDI2XHUwMDI2ICFkZWZpbmVkKENPTkZJR19FWFQyX0ZTX01PRFVMRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyKVxuZnMvZXh0NC9zdXBlci5jLTEzNC1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZXh0Ml9mc190eXBlID0ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0xNzAwPWVudW0ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNzIzLVx0T3B0X2Vycm9ycywgT3B0X2RhdGEsIE9wdF9kYXRhX2VyciwgT3B0X2pxZm10LCBPcHRfZGF4X3R5cGUsXG5mcy9leHQ0L3N1cGVyLmM6MTcyNDojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvc3VwZXIuYy0xNzI1LVx0T3B0X2ZjX2RlYnVnX21heF9yZXBsYXksIE9wdF9mY19kZWJ1Z19mb3JjZVxuLS1cbmZzL2V4dDQvc3VwZXIuYz0xNzcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgZXh0NF9wYXJhbV9zcGVjc1tdID0ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xODQzLVx0ZnNwYXJhbV9mbGFnXHQoXCYjMzQ7bm9pbml0X2l0YWJsZVwmIzM0OyxcdE9wdF9ub2luaXRfaXRhYmxlKSxcbmZzL2V4dDQvc3VwZXIuYzoxODQ0OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zdXBlci5jLTE4NDUtXHRmc3BhcmFtX2ZsYWdcdChcJiMzNDtmY19kZWJ1Z19mb3JjZVwmIzM0OyxcdE9wdF9mY19kZWJ1Z19mb3JjZSksXG4tLVxuZnMvZXh0NC9zdXBlci5jPTE4ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTkzMC1cdHtPcHRfdXNlcl94YXR0ciwgRVhUNF9NT1VOVF9YQVRUUl9VU0VSLCBNT1BUX1NFVH0sXG5mcy9leHQ0L3N1cGVyLmM6MTkzMTojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L3N1cGVyLmMtMTkzMi1cdHtPcHRfYWNsLCBFWFQ0X01PVU5UX1BPU0lYX0FDTCwgTU9QVF9TRVR9LFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xOTUzLVx0IE1PUFRfU0VUfSxcbmZzL2V4dDQvc3VwZXIuYzoxOTU0OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zdXBlci5jLTE5NTUtXHR7T3B0X2ZjX2RlYnVnX2ZvcmNlLCBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlULFxuLS1cbmZzL2V4dDQvc3VwZXIuYz0yMDA1PXN0cnVjdCBleHQ0X2ZzX2NvbnRleHQge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0yMDA4LVx0aW50XHRcdHNfanF1b3RhX2ZtdDtcdC8qIEZvcm1hdCBvZiBxdW90YSB0byB1c2UgKi9cbmZzL2V4dDQvc3VwZXIuYzoyMDA5OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zdXBlci5jLTIwMTAtXHRpbnQgc19mY19kZWJ1Z19tYXhfcmVwbGF5O1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0yMTc5PXN0YXRpYyBpbnQgZXh0NF9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0yMzE0LVx0XHRyZXR1cm4gMDtcbmZzL2V4dDQvc3VwZXIuYzoyMzE1OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zdXBlci5jLTIzMTYtXHRjYXNlIE9wdF9mY19kZWJ1Z19tYXhfcmVwbGF5OlxuLS1cbmZzL2V4dDQvc3VwZXIuYz0yODYzPXN0YXRpYyB2b2lkIGV4dDRfYXBwbHlfb3B0aW9ucyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTI4ODYtXG5mcy9leHQ0L3N1cGVyLmM6Mjg4NzojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvc3VwZXIuYy0yODg4LVx0QVBQTFkoc19mY19kZWJ1Z19tYXhfcmVwbGF5KTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NDQwMj1zdGF0aWMgdm9pZCBleHQ0X3NldF9kZWZfb3B0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy00NDE3LVx0c2V0X29wdChzYiwgWEFUVFJfVVNFUik7XG5mcy9leHQ0L3N1cGVyLmM6NDQxODojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L3N1cGVyLmMtNDQxOS1cdHNldF9vcHQoc2IsIFBPU0lYX0FDTCk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTc0MDM9c3RhdGljIHNzaXplX3QgZXh0NF9xdW90YV93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSxcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNzQ2My1cbmZzL2V4dDQvc3VwZXIuYzo3NDY0OiNpZiAhZGVmaW5lZChDT05GSUdfRVhUMl9GUykgXHUwMDI2XHUwMDI2ICFkZWZpbmVkKENPTkZJR19FWFQyX0ZTX01PRFVMRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyKVxuZnMvZXh0NC9zdXBlci5jLTc0NjUtc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX2FzX2V4dDIodm9pZClcbi0tXG5mcy9leHQ0L3N5c2ZzLmM9MjY2PUVYVDRfUldfQVRUUl9TQklfUEkobXNnX3JhdGVsaW1pdF9idXJzdCwgc19tc2dfcmF0ZWxpbWl0X3N0YXRlLmJ1cnN0KTtcbmZzL2V4dDQvc3lzZnMuYzoyNjc6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L3N5c2ZzLmMtMjY4LUVYVDRfUldfQVRUUl9TQklfVUwoc2ltdWxhdGVfZmFpbCwgc19zaW11bGF0ZV9mYWlsKTtcbi0tXG5mcy9leHQ0L3N5c2ZzLmM9Mjk1PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpleHQ0X2F0dHJzW10gPSB7XG4tLVxuZnMvZXh0NC9zeXNmcy5jLTMzNS1cdEFUVFJfTElTVChqb3VybmFsX3Rhc2spLFxuZnMvZXh0NC9zeXNmcy5jOjMzNjojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvc3lzZnMuYy0zMzctXHRBVFRSX0xJU1Qoc2ltdWxhdGVfZmFpbCksXG4tLVxuZnMvZXh0NC94YXR0ci5jPTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcl9tYXBbXSA9IHtcbmZzL2V4dDQveGF0dHIuYy04OS1cdFtFWFQ0X1hBVFRSX0lOREVYX1VTRVJdXHRcdCAgICAgPSBcdTAwMjZleHQ0X3hhdHRyX3VzZXJfaGFuZGxlcixcbmZzL2V4dDQveGF0dHIuYzo5MDojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L3hhdHRyLmMtOTEtXHRbRVhUNF9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTXSAgPSBcdTAwMjZub3BfcG9zaXhfYWNsX2FjY2Vzcyxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtOTQtXHRbRVhUNF9YQVRUUl9JTkRFWF9UUlVTVEVEXVx0ICAgICA9IFx1MDAyNmV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLFxuZnMvZXh0NC94YXR0ci5jOjk1OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC94YXR0ci5jLTk2LVx0W0VYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFldXHQgICAgID0gXHUwMDI2ZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyLFxuLS1cbmZzL2V4dDQveGF0dHIuYz0xMDE9Y29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTEwMy1cdFx1MDAyNmV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLFxuZnMvZXh0NC94YXR0ci5jOjEwNDojaWZkZWYgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQveGF0dHIuYy0xMDUtXHRcdTAwMjZleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsXG4tLVxuZnMvZXh0NC94YXR0ci5oPTIwOD1fX3hhdHRyX2NoZWNrX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2hlYWRlciAqaGVhZGVyLFxuLS1cbmZzL2V4dDQveGF0dHIuaC0yMTMtXG5mcy9leHQ0L3hhdHRyLmg6MjE0OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC94YXR0ci5oLTIxNS1leHRlcm4gaW50IGV4dDRfaW5pdF9zZWN1cml0eShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzQ1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRVhUNCYjMzk7cyBJbmxpbmUgRGF0YSBDb252ZXJzaW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmb2N1cyBvbiBmdXp6aW5nIHRoZSBFWFQ0IGZpbGUgc3lzdGVtJiMzOTtzIGlubGluZSBkYXRhIGZlYXR1cmVzLiBUaGUgY29yZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50IGlzIGBFWFQ0X0ZTYCwgbmF0dXJhbGx5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSBwb3BzIHVwLiBSaWdodCwgdGhlIGBpbmxpbmVfZGF0YWAgZmVhdHVyZSBpcyBpbnRlZ3JhbCB0byBFWFQ0JiMzOTtzIG9wZXJhdGlvbi4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIGl0cyBsaWZlY3ljbGU6IGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgIGFuZCBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhYC4gTG9va2luZyBhdCB3aGVyZSBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBpcyB1c2VkIGlzIHVzZWZ1bC4gSXQmIzM5O3MgZXhwb3J0ZWQsIGFuZCBJIHNlZSBpdCBjYWxsZWQgZnJvbSBzZXZlcmFsIGltcG9ydGFudCBhcmVhczogYGV4dDRfc2V0YXR0cmAsIGBleHQ0X3BhZ2VfbWt3cml0ZWAsIGBleHQ0X2ZhbGxvY2F0ZWAsIGFuZCBgZXh0NF9iZWdpbl9lbmFibGVfdmVyaXR5YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGVzZSBhcmUgaGlnaC12YWx1ZSB0YXJnZXRzIGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMgdG8gYWxzbyBpbmNsdWRlIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgLCB3aGljaCBzZWVtcyByZWxldmFudCwgYW5kIGV2ZW4gYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIChhbHRob3VnaCBpdCYjMzk7cyBzdGF0aWMgYW5kIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYyBlbnRyeXBvaW50cyksIGJ1dCBsZXQmIzM5O3Mgc3RpY2sgdG8gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciBub3cuCgpUaGVyZWZvcmUsIHRoZSBiZXN0IGNhbmRpZGF0ZXMgdG8gZnV6eiBhcmU6CgoqICAgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAKKiAgIGBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFgCgpPa2F5LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGhvdyBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBmaXRzIGluLiBJdCAqYXBwZWFycyogdG8gYmUgY2FsbGVkIGZyb20gYGV4dDRfZGFfd3JpdGVfYmVnaW5gLiBXYWl0LCBpcyBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBleHBvcnRlZD8gTGV0IG1lIGRvdWJsZS1jaGVjay4gSXQmIzM5O3MgYWN0dWFsbHkgaW4gYGZzL2V4dDQvaW5saW5lLmNgIGFuZCBkZWNsYXJlZCBpbiBgZnMvZXh0NC9leHQ0LmhgLiBTbyBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGBmcy9leHQ0L2V4dDQuaGAgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9Mzc2MD1pbnQgZXh0NF9yZWFkcGFnZV9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5mcy9leHQ0L2V4dDQuaDozNzYxOmV4dGVybiBpbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvZXh0NC9leHQ0LmgtMzc2Mi1cdFx0XHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmM9NTExPWludCBleHQ0X3JlYWRwYWdlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNTQ1LSAqL1xuZnMvZXh0NC9pbmxpbmUuYzo1NDY6aW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL2V4dDQvaW5saW5lLmMtNTQ3LVx0XHRcdFx0XHQgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTMxMzI9c3RhdGljIGludCBleHQ0X2RhX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbi0tXG5mcy9leHQ0L2lub2RlLmMtMzE1Ni1cdGlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSkge1xuZnMvZXh0NC9pbm9kZS5jOjMxNTc6XHRcdHJldCA9IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXG5mcy9leHQ0L2lub2RlLmMtMzE1OC1cdFx0XHRcdFx0XHQgICAgIGZvbGlvcCwgdHJ1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5MzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFWFQ0IElubGluZSBEYXRhIFdyaXRlIFBhdGgqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBpcyBpbmRlZWQgY2FsbGVkIGZyb20gYGV4dDRfZGFfd3JpdGVfYmVnaW5gLCB3aGljaCBhbGlnbnMgd2l0aCBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcuIEJ1dCBob2xkIG9uLCB0aGUgcGF0Y2ggbm90ZXMgc29tZXRoaW5nIGludGVyZXN0aW5nOiBgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGFgIHdhcyByZW1vdmVkLiBIbW0sIGluc3RlYWQsIHRoZSBwYXRjaCBub3cgY2FsbHMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgd2l0aGluIGBleHQ0X3dyaXRlX2JlZ2luYC4gIExldCBtZSBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGNvZGUgc25pcHBldCBmcm9tIHRoZSBwYXRjaDoKCmBgYGMKIAlpZiAoZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpIHsKLQkJcmV0ID0gZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGEobWFwcGluZywgaW5vZGUsIHBvcywgbGVuLAotCQkJCQkJICAgIGZvbGlvcCk7CiYjNDM7CQlyZXQgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7Ci0JCWlmIChyZXQgPT0gMSkgewotCQkJKmZzZGF0YSA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKSpmc2RhdGEgfCBFWFQ0X1dSSVRFX0RBVEFfSU5MSU5FKTsKLQkJCXJldHVybiAwOwotCQl9CiAJfQpgYGAKClJpZ2h0LCBpdCYjMzk7cyBjbGVhcjogYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgaGFzIHRha2VuIG92ZXIuIFRoaXMgbWVhbnMgdGhhdCBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBhIGtleSBmb2N1cyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGlubGluZSBkYXRhIGNvbnZlcnNpb24gbm93IHdvcmtzLiBBbHNvLCBJIHNlZSBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhYCBoYXMgYmVlbiBtb2RpZmllZCwgYW5kIHRoYXQgbW9kaWZpY2F0aW9uIGlzIGRvbmUgdmlhIGBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrYCwgc28gdGhhdCBsb29rcyBsaWtlIGFub3RoZXIgYXJlYSBvZiBpbnRlcmVzdC4gTm93LCBJIHNob3VsZCBkaXZlIGludG8gdGhlIGBmcy9leHQ0L2lubGluZS5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhYCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9kZXN0cm95X2lubGluZV9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9Mzc1Nj1leHRlcm4gaW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L2V4dDQuaDozNzU3OmV4dGVybiBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvZXh0NC9leHQ0LmgtMzc1OC1leHRlcm4gdm9pZCBleHQ0X3VwZGF0ZV9maW5hbF9kZSh2b2lkICpkZV9idWYsIGludCBvbGRfc2l6ZSwgaW50IG5ld19zaXplKTtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTM1OD1zdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMzg2LVxuZnMvZXh0NC9pbmxpbmUuYzozODc6c3RhdGljIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9leHQ0L2lubGluZS5jLTM4OC1cdFx0XHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jPTY5Mz1zdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTc2OC1cdCAqIGRhdGEgYW5kIHBvcHVsYXRlIHRoZSBleHRlbnQgZW50cnkgYXRvbWljYWxseSB1bmRlciBpX2RhdGFfc2VtXG5mcy9leHQ0L2lubGluZS5jOjc2OTpcdCAqIChpbnNpZGUgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jaykuICBUaGlzIGVuc3VyZXMgbm9cbmZzL2V4dDQvaW5saW5lLmMtNzcwLVx0ICogY29uY3VycmVudCByZWFkZXIgc2VlcyBhbiBlbXB0eSBleHRlbnQgdHJlZS5cbmZzL2V4dDQvaW5saW5lLmMtNzcxLVx0ICovXG5mcy9leHQ0L2lubGluZS5jOjc3MjpcdGVycm9yID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlLCBwYmxrKTtcbmZzL2V4dDQvaW5saW5lLmMtNzczLVx0aWYgKGVycm9yKVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTM1Nj1ib29sIGVtcHR5X2lubGluZV9kaXIoc3RydWN0IGlub2RlICpkaXIsIGludCAqaGFzX2lubGluZV9kYXRhKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTQxOC1cbmZzL2V4dDQvaW5saW5lLmM6MTQxOTppbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lubGluZS5jLTE0MjAte1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTQyMy1cdGV4dDRfd3JpdGVfbG9ja194YXR0cihpbm9kZSwgXHUwMDI2bm9fZXhwYW5kKTtcbmZzL2V4dDQvaW5saW5lLmM6MTQyNDpcdHJldCA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSwgMCk7XG5mcy9leHQ0L2lubGluZS5jLTE0MjUtXHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXHUwMDI2bm9fZXhwYW5kKTtcbi0tXG5mcy9leHQ0L2lub2RlLmM9Mjc3Mj1zdGF0aWMgaW50IGV4dDRfZG9fd3JpdGVwYWdlcyhzdHJ1Y3QgbXBhZ2VfZGFfZGF0YSAqbXBkKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy0yODI0LVx0XHRcdFx0RVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKTtcbmZzL2V4dDQvaW5vZGUuYzoyODI1Olx0XHRleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSk7XG5mcy9leHQ0L2lub2RlLmMtMjgyNi1cdFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MzkKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogMTA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIElubGluZSBEYXRhIERlcHJlY2F0aW9uIGluIGV4dDQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBkZXByZWNhdGVzIGlubGluZSBkYXRhIGZvciByZWd1bGFyIGZpbGVzIGluIGV4dDQuIFRoZSBwcmltYXJ5IGdvYWwgaXMgdG8gZm9yY2UgY29udmVyc2lvbiB0byBibG9jay1iYXNlZCBzdG9yYWdlIHdoZW5ldmVyIGEgd3JpdGUgb3BlcmF0aW9uIG9jY3Vycy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgd3JpdGUgcGF0aHMgYW5kIGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMsIHRoZXJlZm9yZSwgSSBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgdGhpcyBhcmVhLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbHMuIEkgc2VlIGBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFgIGNhbGxlZCBmcm9tIGBleHQ0X2RvX3dyaXRlcGFnZXNgLCBhbmQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgaXMgY2FsbGVkIGZyb20gYSBudW1iZXIgb2YgcGxhY2VzOiBgZXh0NF93cml0ZV9iZWdpbmAsIGBleHQ0X3NldGF0dHJgLCBgZXh0NF9wYWdlX21rd3JpdGVgLCBgZXh0NF9mYWxsb2NhdGVgLCBhbmQgYGV4dDRfYmVnaW5fZW5hYmxlX3Zlcml0eWAuIEFsc28sIEkmIzM5O3ZlIGdvdCBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBjYWxsZWQgZnJvbSBgZXh0NF9kYV93cml0ZV9iZWdpbmAuCgpUaGUgY29yZSBmdW5jdGlvbiB0byBmb2N1cyBvbiBzZWVtcyB0byBiZSBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCwgYXMgdGhlIHBhdGNoIGlzIGRlcHJlY2F0aW5nIGFuZCBmb3JjaW5nIGNvbnZlcnNpb24gZnJvbSBpbmxpbmUgZGF0YS4gSSBhbHNvIGhhdmUgYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAgd2hpY2ggc2VlbXMgdG8gYmUgYSBzaW1wbGUgd3JhcHBlciBub3cgYW5kIGp1c3QgY2FsbHMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSlgLiBJJiMzOTtsbCBrZWVwIHRoaXMgYXMgYSBmdXp6IHRhcmdldCBhcyBhbiBlbnRyeSBwb2ludC4gVGhlbiB0aGVyZSBpcyBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhYCwgd2hpY2ggSSB3aWxsIGFsc28gZm9jdXMgb24uCgpTbywgZm9yIHRoZSBjb25maWd1cmF0aW9ucywgdGhlIG9ubHkgbmVjZXNzYXJ5IG9uZSBzZWVtcyB0byBiZSBgRVhUNF9GU2AuIEkmIzM5O3ZlIGNoZWNrZWQgdGhlIG1vZGlmaWVkIGZpbGVzIChgZnMvZXh0NC9pbmxpbmUuY2AsIGBmcy9leHQ0L2lub2RlLmNgLCBgZnMvZXh0NC9pYWxsb2MuY2AsIGBmcy9leHQ0L3N1cGVyLmNgLCBgZnMvZXh0NC9leHQ0LmhgKSDigJMgYWxsIG9mIHRoZW0gYXJlIHdpdGhpbiB0aGUgYENPTkZJR19FWFQ0X0ZTYCBzY29wZS4KCk5vdywgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGlzIHdoZXJlIHRoZSBtYWluIGNvbnZlcnNpb24gbG9naWMgb2NjdXJzLiBIb3dldmVyLCBpdCBpcyBzdGF0aWMgYW5kIGNhbm5vdCBiZSBhY2Nlc3NlZCBkaXJlY3RseSwgYnV0IHRoYXQgaXMgZmluZSBhcyB0aGUgZW50cnkgaXMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAuCgpJIGFsc28gYnJpZWZseSBsb29rZWQgYXQgYF9fZXh0NF9uZXdfaW5vZGVgLCB3aGljaCBpcyBjaGFuZ2VkIHRvIHByZXZlbnQgdGhlIHNldHRpbmcgb2YgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEgZm9yIHJlZ3VsYXIgZmlsZXMuIEhvd2V2ZXIsIHRoaXMgc2VlbXMgbGlrZSBhIGdlbmVyaWMgY2hhbmdlIGFuZCBub3QgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgZGVwcmVjYXRpb24uIFRoZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50LgoKSSBhbSBjb25maWRlbnQgdGhhdCB0aGUgcGFyYW1ldGVycyBzaG91bGQgYmUgc2V0IGFzOgotIEVuYWJsZUNvbmZpZ3M6IGBbJiMzNDtFWFQ0X0ZTJiMzNDtdYAotIEZvY3VzU3ltYm9sczogYFsmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YSYjMzQ7LCAmIzM0O2V4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YSYjMzQ7LCAmIzM0O2V4dDRfZGVzdHJveV9pbmxpbmVfZGF0YSYjMzQ7XWAKLSBSZWFzb25pbmc6ICYjMzQ7VGhlIHBhdGNoIGRlcHJlY2F0ZXMgdGhlIGlubGluZV9kYXRhIGZlYXR1cmUgZm9yIHJlZ3VsYXIgZmlsZXMgaW4gZXh0NCwgZm9yY2luZyBjb252ZXJzaW9uIHRvIGJsb2NrLWJhc2VkIHN0b3JhZ2Ugb24gd3JpdGUuIFRoaXMgbW9kaWZpZXMgY29yZSBleHQ0IHdyaXRlIHBhdGhzIGFuZCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLiYjMzQ7Ci0gV29ydGhGdXp6aW5nOiB0cnVlCgpJIGFtIHJlYWR5IHRvIGZpbmFsaXplIG15IHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF9kZXN0cm95X2lubGluZV9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGRlcHJlY2F0ZXMgdGhlIGlubGluZV9kYXRhIGZlYXR1cmUgZm9yIHJlZ3VsYXIgZmlsZXMgaW4gZXh0NCwgZm9yY2luZyBjb252ZXJzaW9uIHRvIGJsb2NrLWJhc2VkIHN0b3JhZ2Ugb24gd3JpdGUuIFRoaXMgbW9kaWZpZXMgY29yZSBleHQ0IHdyaXRlIHBhdGhzIGFuZCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhJiMzNDssCiAgICAmIzM0O2V4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZGVwcmVjYXRlcyB0aGUgaW5saW5lX2RhdGEgZmVhdHVyZSBmb3IgcmVndWxhciBmaWxlcyBpbiBleHQ0LCBmb3JjaW5nIGNvbnZlcnNpb24gdG8gYmxvY2stYmFzZWQgc3RvcmFnZSBvbiB3cml0ZS4gVGhpcyBtb2RpZmllcyBjb3JlIGV4dDQgd3JpdGUgcGF0aHMgYW5kIGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMDoxMzo0OC45NzcxNTg3OTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODYwNTQ0NjY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsXG4gICAgXCJleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFcIixcbiAgICBcImV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGRlcHJlY2F0ZXMgdGhlIGlubGluZV9kYXRhIGZlYXR1cmUgZm9yIHJlZ3VsYXIgZmlsZXMgaW4gZXh0NCwgZm9yY2luZyBjb252ZXJzaW9uIHRvIGJsb2NrLWJhc2VkIHN0b3JhZ2Ugb24gd3JpdGUuIFRoaXMgbW9kaWZpZXMgY29yZSBleHQ0IHdyaXRlIHBhdGhzIGFuZCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMDoxMzo0OC45NzcxNzM5NDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMTI4NDcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdhNTMwZDBmNTQwN2YwZmRkYjk0MmJlMTRkYzdiM2NjOTA0YzU0MTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDA6MTM6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0L2lubGluZWRhdGEucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0L2lubGluZWRhdGEucnN0XFxuaW5kZXggYTcyOGFmMGQyZmQwYzUuLjhkYzFiNmQ3NTM4OGQ3IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC9pbmxpbmVkYXRhLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC9pbmxpbmVkYXRhLnJzdFxcbkBAIC0zLDYgKzMsMTQgQEBcXG4gSW5saW5lIERhdGFcXG4gLS0tLS0tLS0tLS1cXG4gXFxuKy4uIHdhcm5pbmc6OlxcbitcXG4rICAgVGhlIGlubGluZSBkYXRhIGZlYXR1cmUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlXFxuKyAgIGtlcm5lbCByZWxlYXNlLiAgTmV3IHJlZ3VsYXIgZmlsZSBpbm9kZXMgbm8gbG9uZ2VyIHN0b3JlIGRhdGEgaW5saW5lLFxcbisgICBhbmQgd3JpdGVzIHRvIGV4aXN0aW5nIGlubGluZSBkYXRhIGlub2RlcyB0cmlnZ2VyIGF1dG9tYXRpYyBjb252ZXJzaW9uXFxuKyAgIHRvIGJsb2NrLWJhc2VkIHN0b3JhZ2UuICBVc2UgYGB0dW5lMmZzIC1PIF5pbmxpbmVfZGF0YWBgIHRvIGNvbnZlcnRcXG4rICAgZXhpc3RpbmcgZmlsZXN5c3RlbXMuXFxuK1xcbiBUaGUgaW5saW5lIGRhdGEgZmVhdHVyZSB3YXMgZGVzaWduZWQgdG8gaGFuZGxlIHRoZSBjYXNlIHRoYXQgYSBmaWxlJ3NcXG4gZGF0YSBpcyBzbyB0aW55IHRoYXQgaXQgcmVhZGlseSBmaXRzIGluc2lkZSB0aGUgaW5vZGUsIHdoaWNoXFxuICh0aGVvcmV0aWNhbGx5KSByZWR1Y2VzIGRpc2sgYmxvY2sgY29uc3VtcHRpb24gYW5kIHJlZHVjZXMgc2Vla3MuIElmIHRoZVxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggMjFhOTUxZjEwNjM2NzguLjgzMmJjMWYzYjYwMDI3IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcXG5AQCAtMzE0OCw3ICszMTQ4LDYgQEAgaW50IGRvX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTtcXG4gdm9pZCBleHQ0X3NldF9pbm9kZV9tYXBwaW5nX29yZGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiAjZGVmaW5lIEZBTExfQkFDS19UT19OT05ERUxBTExPQyAxXFxuLSNkZWZpbmUgRVhUNF9XUklURV9EQVRBX0lOTElORVxcdCAyXFxuIFxcbiB0eXBlZGVmIGVudW0ge1xcbiBcXHRFWFQ0X0lHRVRfTk9STUFMID1cXHQwLFxcbkBAIC0zNzU5LDEyICszNzU4LDYgQEAgZXh0ZXJuIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuIGV4dGVybiB2b2lkIGV4dDRfdXBkYXRlX2ZpbmFsX2RlKHZvaWQgKmRlX2J1ZiwgaW50IG9sZF9zaXplLCBpbnQgbmV3X3NpemUpO1xcbiBcXG4gaW50IGV4dDRfcmVhZHBhZ2VfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi1leHRlcm4gaW50IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0IGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcXG4tXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBmb2xpbyAqKmZvbGlvcCk7XFxuLWludCBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXFxuLVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBjb3BpZWQsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBleHRlcm4gaW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pYWxsb2MuYyBiL2ZzL2V4dDQvaWFsbG9jLmNcXG5pbmRleCBhNDBjYjI3ZjgxMTZjYi4uMjc4ZjBhYjhjOTk2ZTQgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9pYWxsb2MuY1xcbisrKyBiL2ZzL2V4dDQvaWFsbG9jLmNcXG5AQCAtMTMwNSw4ICsxMzA1LDggQEAgc3RydWN0IGlub2RlICpfX2V4dDRfbmV3X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXG4gXFx0ZWktXFx1MDAzZWlfZXh0cmFfaXNpemUgPSBzYmktXFx1MDAzZXNfd2FudF9leHRyYV9pc2l6ZTtcXG4gXFx0ZWktXFx1MDAzZWlfaW5saW5lX29mZiA9IDA7XFxuLVxcdGlmIChleHQ0X2hhc19mZWF0dXJlX2lubGluZV9kYXRhKHNiKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKCEoZWktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiAoRVhUNF9EQVhfRkx8RVhUNF9FQV9JTk9ERV9GTCkpIHx8IFNfSVNESVIobW9kZSkpKVxcbitcXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9pbmxpbmVfZGF0YShzYikgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIShlaS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2IEVYVDRfREFYX0ZMKSlcXG4gXFx0XFx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG4gXFx0cmV0ID0gaW5vZGU7XFxuIFxcdGVyciA9IGRxdW90X2FsbG9jX2lub2RlKGlub2RlKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmNcXG5pbmRleCBjZWVlNjlhNjY0ODJiYy4uZTBiODAyNzNlMzIyZDggMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xcbisrKyBiL2ZzL2V4dDQvaW5saW5lLmNcXG5AQCAtMTIsNiArMTIsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcImV4dDRfamJkMi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZXh0NC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZXh0NF9leHRlbnRzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4YXR0ci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidHJ1bmNhdGUuaFxcXCJcXG4gXFxuQEAgLTIwLDEwICsyMSw2IEBAXFxuICNkZWZpbmUgRVhUNF9JTkxJTkVfRE9URE9UX09GRlNFVFxcdDJcXG4gI2RlZmluZSBFWFQ0X0lOTElORV9ET1RET1RfU0laRVxcdFxcdDRcXG4gXFxuLVxcbi1zdGF0aWMgaW50IGV4dDRfZGFfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4tXFxuIHN0YXRpYyBpbnQgZXh0NF9nZXRfaW5saW5lX3NpemUoc3RydWN0IGlub2RlICppbm9kZSlcXG4ge1xcbiBcXHRpZiAoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfb2ZmKVxcbkBAIC0yMTgsNTEgKzIxNSw2IEBAIHN0YXRpYyBpbnQgZXh0NF9yZWFkX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZmZlcixcXG4gXFx0cmV0dXJuIGNwX2xlbjtcXG4gfVxcbiBcXG4tLypcXG4tICogd3JpdGUgdGhlIGJ1ZmZlciB0byB0aGUgaW5saW5lIGlub2RlLlxcbi0gKiBJZiAnY3JlYXRlJyBpcyBzZXQsIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhlIGV4dHJhIGNvcHkgaW4gdGhlIHhhdHRyXFxuLSAqIHZhbHVlIHNpbmNlIGl0IGlzIGFscmVhZHkgaGFuZGxlZCBieSBleHQ0X3hhdHRyX2lib2R5X3NldC5cXG4tICogVGhhdCBzYXZlcyB1cyBvbmUgbWVtY3B5Llxcbi0gKi9cXG4tc3RhdGljIHZvaWQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxcbi1cXHRcXHRcXHRcXHQgICB2b2lkICpidWZmZXIsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGludCBsZW4pXFxuLXtcXG4tXFx0c3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5O1xcbi1cXHRzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIgKmhlYWRlcjtcXG4tXFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcXG4tXFx0aW50IGNwX2xlbiA9IDA7XFxuLVxcbi1cXHRpZiAodW5saWtlbHkoZXh0NF9lbWVyZ2VuY3lfc3RhdGUoaW5vZGUtXFx1MDAzZWlfc2IpKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0QlVHX09OKCFFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2lubGluZV9vZmYpO1xcbi1cXHRCVUdfT04ocG9zICsgbGVuIFxcdTAwM2UgRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfc2l6ZSk7XFxuLVxcbi1cXHRyYXdfaW5vZGUgPSBleHQ0X3Jhd19pbm9kZShpbG9jKTtcXG4tXFx0YnVmZmVyICs9IHBvcztcXG4tXFxuLVxcdGlmIChwb3MgXFx1MDAzYyBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKSB7XFxuLVxcdFxcdGNwX2xlbiA9IHBvcyArIGxlbiBcXHUwMDNlIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgP1xcbi1cXHRcXHRcXHQgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSAtIHBvcyA6IGxlbjtcXG4tXFx0XFx0bWVtY3B5KCh2b2lkICopcmF3X2lub2RlLVxcdTAwM2VpX2Jsb2NrICsgcG9zLCBidWZmZXIsIGNwX2xlbik7XFxuLVxcbi1cXHRcXHRsZW4gLT0gY3BfbGVuO1xcbi1cXHRcXHRidWZmZXIgKz0gY3BfbGVuO1xcbi1cXHRcXHRwb3MgKz0gY3BfbGVuO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIWxlbilcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0cG9zIC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuLVxcdGhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7XFxuLVxcdGVudHJ5ID0gKHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICopKCh2b2lkICopcmF3X2lub2RlICtcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX29mZik7XFxuLVxcbi1cXHRtZW1jcHkoKHZvaWQgKilJRklSU1QoaGVhZGVyKSArIGxlMTZfdG9fY3B1KGVudHJ5LVxcdTAwM2VlX3ZhbHVlX29mZnMpICsgcG9zLFxcbi1cXHQgICAgICAgYnVmZmVyLCBsZW4pO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxlbilcXG4ge1xcbkBAIC00MzMsNyArMzg1LDggQEAgc3RhdGljIGludCBleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gfVxcbiBcXG4gc3RhdGljIGludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGV4dDRfZnNibGtfdCBwYmxrKVxcbiB7XFxuIFxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcXG4gXFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHtcXG5AQCAtNDgxLDcgKzQzNCwyMSBAQCBzdGF0aWMgaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0XFx0ICAgIFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbiBcXHRcXHRcXHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xcbiBcXHRcXHRcXHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XFxuK1xcdFxcdFxcdGlmIChwYmxrKSB7XFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBleHQ0X2V4dGVudF9oZWFkZXIgKmVoO1xcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4O1xcbitcXG4rXFx0XFx0XFx0XFx0ZWggPSBleHRfaW5vZGVfaGRyKGlub2RlKTtcXG4rXFx0XFx0XFx0XFx0ZXggPSBFWFRfRklSU1RfRVhURU5UKGVoKTtcXG4rXFx0XFx0XFx0XFx0ZXgtXFx1MDAzZWVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XFxuK1xcdFxcdFxcdFxcdGV4LVxcdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNigxKTtcXG4rXFx0XFx0XFx0XFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCBwYmxrKTtcXG4rXFx0XFx0XFx0XFx0ZWgtXFx1MDAzZWVoX2VudHJpZXMgPSBjcHVfdG9fbGUxNigxKTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuK1xcdH0gZWxzZSBpZiAocGJsaykge1xcbitcXHRcXHQvKiBpbmRpcmVjdCBtYXBwaW5nOiBzZXQgaV9kYXRhWzBdIGRpcmVjdGx5ICovXFxuK1xcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZGF0YVswXSA9IGNwdV90b19sZTMyKHBibGspO1xcbiBcXHR9XFxuIFxcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7XFxuIFxcbkBAIC01NjgsMTIyICs1MzUsNiBAQCBpbnQgZXh0NF9yZWFkcGFnZV9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuIHJldCBcXHUwMDNlPSAwID8gMCA6IHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi17XFxuLVxcdGludCByZXQsIG5lZWRlZF9ibG9ja3MsIG5vX2V4cGFuZDtcXG4tXFx0aGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7XFxuLVxcdGludCByZXRyaWVzID0gMCwgc2VtX2hlbGQgPSAwO1xcbi1cXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcXG4tXFx0dW5zaWduZWQgZnJvbSwgdG87XFxuLVxcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcXG4tXFxuLVxcdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIGNsZWFyIHRoZSBmbGFnIHNvIHRoYXQgbm8gbmV3IHdyaXRlXFxuLVxcdFxcdCAqIHdpbGwgdHJhcCBoZXJlIGFnYWluLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0fVxcbi1cXG4tXFx0bmVlZGVkX2Jsb2NrcyA9IGV4dDRfY2h1bmtfdHJhbnNfZXh0ZW50KGlub2RlLCAxKTtcXG4tXFxuLVxcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tcmV0cnk6XFxuLVxcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9XUklURV9QQUdFLCBuZWVkZWRfYmxvY2tzKTtcXG4tXFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XFxuLVxcdFxcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcXG4tXFx0XFx0aGFuZGxlID0gTlVMTDtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdC8qIFdlIGNhbm5vdCByZWN1cnNlIGludG8gdGhlIGZpbGVzeXN0ZW0gYXMgdGhlIHRyYW5zYWN0aW9uIGlzIGFscmVhZHlcXG4tXFx0ICogc3RhcnRlZCAqL1xcbi1cXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4gfCBGR1BfTk9GUyxcXG4tXFx0XFx0XFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XFxuLVxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLVxcdFxcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xcbi1cXHRcXHRnb3RvIG91dF9ub2ZvbGlvO1xcbi1cXHR9XFxuLVxcbi1cXHRleHQ0X3dyaXRlX2xvY2tfeGF0dHIoaW5vZGUsIFxcdTAwMjZub19leHBhbmQpO1xcbi1cXHRzZW1faGVsZCA9IDE7XFxuLVxcdC8qIElmIHNvbWUgb25lIGhhcyBhbHJlYWR5IGRvbmUgdGhpcyBmb3IgdXMsIGp1c3QgZXhpdC4gKi9cXG4tXFx0aWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcXG4tXFx0XFx0cmV0ID0gMDtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdGZyb20gPSAwO1xcbi1cXHR0byA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGlub2RlKTtcXG4tXFx0aWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkge1xcbi1cXHRcXHRyZXQgPSBleHQ0X3JlYWRfaW5saW5lX2ZvbGlvKGlub2RlLCBmb2xpbyk7XFxuLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0fVxcbi1cXG4tXFx0ZXh0NF9mY190cmFja19pbm9kZShoYW5kbGUsIGlub2RlKTtcXG4tXFx0cmV0ID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRpZiAoZXh0NF9zaG91bGRfZGlvcmVhZF9ub2xvY2soaW5vZGUpKSB7XFxuLVxcdFxcdHJldCA9IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oaGFuZGxlLCBmb2xpbywgZnJvbSwgdG8sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgZXh0NF9nZXRfYmxvY2tfdW53cml0dGVuKTtcXG4tXFx0fSBlbHNlXFxuLVxcdFxcdHJldCA9IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oaGFuZGxlLCBmb2xpbywgZnJvbSwgdG8sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgZXh0NF9nZXRfYmxvY2spO1xcbi1cXHRjbGVhcl9idWZmZXJfbmV3KGZvbGlvX2J1ZmZlcnMoZm9saW8pKTtcXG4tXFxuLVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IGV4dDRfc2hvdWxkX2pvdXJuYWxfZGF0YShpbm9kZSkpIHtcXG4tXFx0XFx0cmV0ID0gZXh0NF93YWxrX3BhZ2VfYnVmZmVycyhoYW5kbGUsIGlub2RlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIGZvbGlvX2J1ZmZlcnMoZm9saW8pLCBmcm9tLCB0byxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBOVUxMLCBkb19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MpO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLVxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdFxcdGZvbGlvID0gTlVMTDtcXG4tXFx0XFx0ZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpO1xcbi1cXHRcXHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXFx1MDAyNm5vX2V4cGFuZCk7XFxuLVxcdFxcdHNlbV9oZWxkID0gMDtcXG4tXFx0XFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4tXFx0XFx0aGFuZGxlID0gTlVMTDtcXG4tXFx0XFx0ZXh0NF90cnVuY2F0ZV9mYWlsZWRfd3JpdGUoaW5vZGUpO1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBJZiB0cnVuY2F0ZSBmYWlsZWQgZWFybHkgdGhlIGlub2RlIG1pZ2h0XFxuLVxcdFxcdCAqIHN0aWxsIGJlIG9uIHRoZSBvcnBoYW4gbGlzdDsgd2UgbmVlZCB0b1xcbi1cXHRcXHQgKiBtYWtlIHN1cmUgdGhlIGlub2RlIGlzIHJlbW92ZWQgZnJvbSB0aGVcXG4tXFx0XFx0ICogb3JwaGFuIGxpc3QgaW4gdGhhdCBjYXNlLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGlub2RlLVxcdTAwM2VpX25saW5rKVxcbi1cXHRcXHRcXHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAocmV0ID09IC1FTk9TUEMgXFx1MDAyNlxcdTAwMjYgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtXFx1MDAzZWlfc2IsIFxcdTAwMjZyZXRyaWVzKSlcXG4tXFx0XFx0Z290byByZXRyeTtcXG4tXFxuLVxcdGlmIChmb2xpbylcXG4tXFx0XFx0YmxvY2tfY29tbWl0X3dyaXRlKGZvbGlvLCBmcm9tLCB0byk7XFxuLW91dDpcXG4tXFx0aWYgKGZvbGlvKSB7XFxuLVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLVxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdH1cXG4tb3V0X25vZm9saW86XFxuLVxcdGlmIChzZW1faGVsZClcXG4tXFx0XFx0ZXh0NF93cml0ZV91bmxvY2tfeGF0dHIoaW5vZGUsIFxcdTAwMjZub19leHBhbmQpO1xcbi1cXHRpZiAoaGFuZGxlKVxcbi1cXHRcXHRleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xcbi1cXHRicmVsc2UoaWxvYy5iaCk7XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuIC8qXFxuICAqIFByZXBhcmUgdGhlIHdyaXRlIGZvciB0aGUgaW5saW5lIGRhdGEuXFxuICAqIElmIHRoZSBkYXRhIGNhbiBiZSB3cml0dGVuIGludG8gdGhlIGlub2RlLCB3ZSBqdXN0IHJlYWRcXG5AQCAtNjk4LDI0OCArNTQ5LDggQEAgaW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZm9saW8gKipmb2xpb3AsXFxuIFxcdFxcdFxcdFxcdFxcdCAgYm9vbCBkYSlcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbi1cXHRoYW5kbGVfdCAqaGFuZGxlO1xcbi1cXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi1cXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XFxuLVxcdGludCByZXRyaWVzID0gMDtcXG4tXFxuLVxcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tcmV0cnlfam91cm5hbDpcXG4tXFx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX0lOT0RFLCAxKTtcXG4tXFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XFxuLVxcdFxcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcXG4tXFx0XFx0Z290byBvdXRfcmVsZWFzZV9iaDtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0ID0gZXh0NF9wcmVwYXJlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIHBvcyArIGxlbik7XFxuLVxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FTk9TUEMpXFxuLVxcdFxcdGdvdG8gb3V0X3N0b3Bfam91cm5hbDtcXG4tXFxuLVxcdGlmIChyZXQgPT0gLUVOT1NQQykge1xcbi1cXHRcXHRleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xcbi1cXHRcXHRpZiAoIWRhKSB7XFxuLVxcdFxcdFxcdGJyZWxzZShpbG9jLmJoKTtcXG4tXFx0XFx0XFx0LyogUmV0cnkgaW5zaWRlICovXFxuLVxcdFxcdFxcdHJldHVybiBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KG1hcHBpbmcsIGlub2RlKTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0cmV0ID0gZXh0NF9kYV9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XFxuLVxcdFxcdGlmIChyZXQgPT0gLUVOT1NQQyBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtXFx1MDAzZWlfc2IsIFxcdTAwMjZyZXRyaWVzKSlcXG4tXFx0XFx0XFx0Z290byByZXRyeV9qb3VybmFsO1xcbi1cXHRcXHRnb3RvIG91dF9yZWxlYXNlX2JoO1xcbi1cXHR9XFxuLVxcbi1cXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4gfCBGR1BfTk9GUyxcXG4tXFx0XFx0XFx0XFx0XFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XFxuLVxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLVxcdFxcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xcbi1cXHRcXHRnb3RvIG91dF9zdG9wX2pvdXJuYWw7XFxuLVxcdH1cXG4tXFxuLVxcdGRvd25fcmVhZChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNleGF0dHJfc2VtKTtcXG4tXFx0LyogU29tZW9uZSBlbHNlIGhhZCBjb252ZXJ0ZWQgaXQgdG8gZXh0ZW50ICovXFxuLVxcdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XFxuLVxcdFxcdHJldCA9IDA7XFxuLVxcdFxcdGdvdG8gb3V0X3JlbGVhc2VfZm9saW87XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpIHtcXG4tXFx0XFx0cmV0ID0gZXh0NF9yZWFkX2lubGluZV9mb2xpbyhpbm9kZSwgZm9saW8pO1xcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0Z290byBvdXRfcmVsZWFzZV9mb2xpbztcXG4tXFx0fVxcbi1cXG4tXFx0cmV0ID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cXHUwMDNlaV9zYiwgaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gb3V0X3JlbGVhc2VfZm9saW87XFxuLVxcdCpmb2xpb3AgPSBmb2xpbztcXG4tXFx0dXBfcmVhZChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNleGF0dHJfc2VtKTtcXG4tXFx0YnJlbHNlKGlsb2MuYmgpO1xcbi1cXHRyZXR1cm4gMTtcXG4tXFxuLW91dF9yZWxlYXNlX2ZvbGlvOlxcbi1cXHR1cF9yZWFkKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2V4YXR0cl9zZW0pO1xcbi1cXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi1cXHRmb2xpb19wdXQoZm9saW8pO1xcbi1vdXRfc3RvcF9qb3VybmFsOlxcbi1cXHRleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xcbi1vdXRfcmVsZWFzZV9iaDpcXG4tXFx0YnJlbHNlKGlsb2MuYmgpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi0vKlxcbi0gKiBUcnkgdG8gd3JpdGUgZGF0YSBpbiB0aGUgaW5vZGUuXFxuLSAqIElmIHRoZSBpbm9kZSBoYXMgaW5saW5lIGRhdGEsIGNoZWNrIHdoZXRoZXIgdGhlIG5ldyB3cml0ZSBjYW4gYmVcXG4tICogaW4gdGhlIGlub2RlIGFsc28uIElmIG5vdCwgY3JlYXRlIHRoZSBwYWdlIHRoZSBoYW5kbGUsIG1vdmUgdGhlIGRhdGFcXG4tICogdG8gdGhlIHBhZ2UgbWFrZSBpdCB1cGRhdGUgYW5kIGxldCB0aGUgbGF0ZXIgY29kZXMgY3JlYXRlIGV4dGVudCBmb3IgaXQuXFxuLSAqL1xcbi1pbnQgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLVxcdFxcdFxcdFxcdCAgc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0ICBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXFxuLVxcdFxcdFxcdFxcdCAgc3RydWN0IGZvbGlvICoqZm9saW9wKVxcbi17XFxuLVxcdGlmIChwb3MgKyBsZW4gXFx1MDAzZSBleHQ0X2dldF9tYXhfaW5saW5lX3NpemUoaW5vZGUpKVxcbi1cXHRcXHRyZXR1cm4gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XFxuLVxcdHJldHVybiBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEobWFwcGluZywgaW5vZGUsIHBvcywgbGVuLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBmb2xpb3AsIGZhbHNlKTtcXG4tfVxcbi1cXG4taW50IGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcXG4tXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGNvcGllZCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4te1xcbi1cXHRoYW5kbGVfdCAqaGFuZGxlID0gZXh0NF9qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCk7XFxuLVxcdGludCBub19leHBhbmQ7XFxuLVxcdHZvaWQgKmthZGRyO1xcbi1cXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XFxuLVxcdGludCByZXQgPSAwLCByZXQyO1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KGNvcGllZCBcXHUwMDNjIGxlbikgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxcbi1cXHRcXHRjb3BpZWQgPSAwO1xcbi1cXG4tXFx0aWYgKGxpa2VseShjb3BpZWQpKSB7XFxuLVxcdFxcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbi1cXHRcXHRpZiAocmV0KSB7XFxuLVxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLVxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdFxcdFxcdGV4dDRfc3RkX2Vycm9yKGlub2RlLVxcdTAwM2VpX3NiLCByZXQpO1xcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0fVxcbi1cXHRcXHRleHQ0X3dyaXRlX2xvY2tfeGF0dHIoaW5vZGUsIFxcdTAwMjZub19leHBhbmQpO1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBXZSBjb3VsZCBoYXZlIHJhY2VkIHdpdGggZXh0NF9wYWdlX21rd3JpdGUoKSBjb252ZXJ0aW5nXFxuLVxcdFxcdCAqIHRoZSBpbm9kZSBhbmQgY2xlYXJpbmcgdGhlIGlubGluZSBkYXRhIGZsYWcsIHNvIHdlIGp1c3RcXG4tXFx0XFx0ICogcmVsZWFzZSByZXNvdXJjZXMgYW5kIHJldHJ5IHRoZSB3aG9sZSB3cml0ZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmICh1bmxpa2VseSghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSkge1xcbi1cXHRcXHRcXHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXFx1MDAyNm5vX2V4cGFuZCk7XFxuLVxcdFxcdFxcdGJyZWxzZShpbG9jLmJoKTtcXG4tXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFx0XFx0XFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIGVpLVxcdTAwM2VpX2lubGluZV9vZmYgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZVxcbi1cXHRcXHQgKiBleHQ0X3dyaXRlX2JlZ2luKCkgY2FsbGVkXFxuLVxcdFxcdCAqIGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKClcXG4tXFx0XFx0ICovXFxuLVxcdFxcdCh2b2lkKSBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKGlub2RlKTtcXG4tXFxuLVxcdFxcdGthZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgMCk7XFxuLVxcdFxcdGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoaW5vZGUsIFxcdTAwMjZpbG9jLCBrYWRkciwgcG9zLCBjb3BpZWQpO1xcbi1cXHRcXHRrdW5tYXBfbG9jYWwoa2FkZHIpO1xcbi1cXHRcXHRmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcXG4tXFx0XFx0LyogY2xlYXIgZGlydHkgZmxhZyBzbyB0aGF0IHdyaXRlcGFnZXMgd291bGRuJ3Qgd29yayBmb3IgdXMuICovXFxuLVxcdFxcdGZvbGlvX2NsZWFyX2RpcnR5KGZvbGlvKTtcXG4tXFxuLVxcdFxcdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcXHUwMDI2bm9fZXhwYW5kKTtcXG4tXFx0XFx0YnJlbHNlKGlsb2MuYmgpO1xcbi1cXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogSXQncyBpbXBvcnRhbnQgdG8gdXBkYXRlIGlfc2l6ZSB3aGlsZSBzdGlsbCBob2xkaW5nIGZvbGlvXFxuLVxcdFxcdCAqIGxvY2s6IHBhZ2Ugd3JpdGVvdXQgY291bGQgb3RoZXJ3aXNlIGNvbWUgaW4gYW5kIHplcm9cXG4tXFx0XFx0ICogYmV5b25kIGlfc2l6ZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGV4dDRfdXBkYXRlX2lub2RlX3NpemUoaW5vZGUsIHBvcyArIGNvcGllZCk7XFxuLVxcdH1cXG4tXFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIERvbid0IG1hcmsgdGhlIGlub2RlIGRpcnR5IHVuZGVyIGZvbGlvIGxvY2suIEZpcnN0LCBpdCB1bm5lY2Vzc2FyaWx5XFxuLVxcdCAqIG1ha2VzIHRoZSBob2xkaW5nIHRpbWUgb2YgZm9saW8gbG9jayBsb25nZXIuIFNlY29uZCwgaXQgZm9yY2VzIGxvY2tcXG4tXFx0ICogb3JkZXJpbmcgb2YgZm9saW8gbG9jayBhbmQgdHJhbnNhY3Rpb24gc3RhcnQgZm9yIGpvdXJuYWxpbmdcXG4tXFx0ICogZmlsZXN5c3RlbXMuXFxuLVxcdCAqL1xcbi1cXHRpZiAobGlrZWx5KGNvcGllZCkpXFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbi1vdXQ6XFxuLVxcdC8qXFxuLVxcdCAqIElmIHdlIGRpZG4ndCBjb3B5IGFzIG11Y2ggZGF0YSBhcyBleHBlY3RlZCwgd2UgbmVlZCB0byB0cmltIGJhY2tcXG4tXFx0ICogc2l6ZSBvZiB4YXR0ciBjb250YWluaW5nIGlubGluZSBkYXRhLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHBvcyArIGxlbiBcXHUwMDNlIGlub2RlLVxcdTAwM2VpX3NpemUgXFx1MDAyNlxcdTAwMjYgZXh0NF9jYW5fdHJ1bmNhdGUoaW5vZGUpKVxcbi1cXHRcXHRleHQ0X29ycGhhbl9hZGQoaGFuZGxlLCBpbm9kZSk7XFxuLVxcbi1cXHRyZXQyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4tXFx0aWYgKCFyZXQpXFxuLVxcdFxcdHJldCA9IHJldDI7XFxuLVxcdGlmIChwb3MgKyBsZW4gXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zaXplKSB7XFxuLVxcdFxcdGV4dDRfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKGlub2RlKTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogSWYgdHJ1bmNhdGUgZmFpbGVkIGVhcmx5IHRoZSBpbm9kZSBtaWdodCBzdGlsbCBiZVxcbi1cXHRcXHQgKiBvbiB0aGUgb3JwaGFuIGxpc3Q7IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbm9kZVxcbi1cXHRcXHQgKiBpcyByZW1vdmVkIGZyb20gdGhlIG9ycGhhbiBsaXN0IGluIHRoYXQgY2FzZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChpbm9kZS1cXHUwMDNlaV9ubGluaylcXG4tXFx0XFx0XFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gcmV0ID8gcmV0IDogY29waWVkO1xcbi19XFxuLVxcbi0vKlxcbi0gKiBUcnkgdG8gbWFrZSB0aGUgcGFnZSBjYWNoZSBhbmQgaGFuZGxlIHJlYWR5IGZvciB0aGUgaW5saW5lIGRhdGEgY2FzZS5cXG4tICogV2UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiAyIGNhc2VzOlxcbi0gKiAxLiBUaGUgaW5vZGUgaXMgY3JlYXRlZCBhbmQgdGhlIGZpcnN0IHdyaXRlIGV4Y2VlZHMgaW5saW5lIHNpemUuIFdlIGNhblxcbi0gKiAgICBjbGVhciB0aGUgaW5vZGUgc3RhdGUgc2FmZWx5Llxcbi0gKiAyLiBUaGUgaW5vZGUgaGFzIGlubGluZSBkYXRhLCB0aGVuIHdlIG5lZWQgdG8gcmVhZCB0aGUgZGF0YSwgbWFrZSBpdFxcbi0gKiAgICB1cGRhdGUgYW5kIGRpcnR5IHNvIHRoYXQgZXh0NF9kYV93cml0ZXBhZ2VzIGNhbiBoYW5kbGUgaXQuIFdlIGRvbid0XFxuLSAqICAgIG5lZWQgdG8gc3RhcnQgdGhlIGpvdXJuYWwgc2luY2UgdGhlIGZpbGUncyBtZXRhZGF0YSBpc24ndCBjaGFuZ2VkIG5vdy5cXG4tICovXFxuLXN0YXRpYyBpbnQgZXh0NF9kYV9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLXtcXG4tXFx0aW50IHJldCA9IDAsIGlubGluZV9zaXplO1xcbi1cXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi1cXG4tXFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOLFxcbi1cXHRcXHRcXHRcXHRcXHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcXG4tXFx0aWYgKElTX0VSUihmb2xpbykpXFxuLVxcdFxcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcXG4tXFxuLVxcdGRvd25fcmVhZChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNleGF0dHJfc2VtKTtcXG4tXFx0aWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcXG4tXFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0fVxcbi1cXG4tXFx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XFxuLVxcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XFxuLVxcdFxcdHJldCA9IGV4dDRfcmVhZF9pbmxpbmVfZm9saW8oaW5vZGUsIGZvbGlvKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuLVxcbi1cXHRyZXQgPSBleHQ0X2Jsb2NrX3dyaXRlX2JlZ2luKE5VTEwsIGZvbGlvLCAwLCBpbmxpbmVfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBleHQ0X2RhX2dldF9ibG9ja19wcmVwKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHR1cF9yZWFkKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2V4YXR0cl9zZW0pO1xcbi1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi1cXHRcXHRleHQ0X3RydW5jYXRlX2ZhaWxlZF93cml0ZShpbm9kZSk7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdH1cXG4tXFxuLVxcdGNsZWFyX2J1ZmZlcl9uZXcoZm9saW9fYnVmZmVycyhmb2xpbykpO1xcbi1cXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4tXFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuLVxcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG4tXFxuLW91dDpcXG4tXFx0dXBfcmVhZChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNleGF0dHJfc2VtKTtcXG4tXFx0aWYgKGZvbGlvKSB7XFxuLVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLVxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0LyogSW5saW5lIGRhdGEgaXMgZGVwcmVjYXRlZDogYWx3YXlzIGNvbnZlcnQgdG8gYmxvY2sgZm9ybWF0ICovXFxuK1xcdHJldHVybiBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xcbiB9XFxuIFxcbiAjaWZkZWYgSU5MSU5FX0RJUl9ERUJVR1xcbkBAIC0xMDc5LDIzICs2OTAsNiBAQCBzdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxcbi1cXHRcXHRcXHRcXHQgICAgIHZvaWQgKmJ1ZiwgaW50IGlubGluZV9zaXplKVxcbi17XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRyZXQgPSBleHQ0X2NyZWF0ZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbmxpbmVfc2l6ZSk7XFxuLVxcdGlmIChyZXQpIHtcXG4tXFx0XFx0ZXh0NF9tc2coaW5vZGUtXFx1MDAzZWlfc2IsIEtFUk5fRU1FUkcsXFxuLVxcdFxcdFxcdFxcXCJlcnJvciByZXN0b3JpbmcgaW5saW5lX2RhdGEgZm9yIGlub2RlIC0tIHBvdGVudGlhbCBkYXRhIGxvc3MhIChpbm9kZSAlbGx1LCBlcnJvciAlZClcXFwiLFxcbi1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8sIHJldCk7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0fVxcbi1cXHRleHQ0X3dyaXRlX2lubGluZV9kYXRhKGlub2RlLCBpbG9jLCBidWYsIDAsIGlubGluZV9zaXplKTtcXG4tXFx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXFxuQEAgLTExMDMsNyArNjk3LDcgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdGludCBlcnJvcjtcXG4gXFx0dm9pZCAqYnVmID0gTlVMTDtcXG4gXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkYXRhX2JoID0gTlVMTDtcXG4tXFx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XFxuK1xcdGV4dDRfZnNibGtfdCBwYmxrO1xcbiBcXHRpbnQgaW5saW5lX3NpemU7XFxuIFxcbiBcXHRpbmxpbmVfc2l6ZSA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGlub2RlKTtcXG5AQCAtMTEyOSwyNSArNzIzLDIwIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0ZXJyb3IgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpO1xcbitcXHQvKlxcbitcXHQgKiBBbGxvY2F0ZSBhIGRhdGEgYmxvY2sgYW5kIHdyaXRlIHRoZSBpbmxpbmUgZGF0YSB0byBpdCBiZWZvcmVcXG4rXFx0ICogZGVzdHJveWluZyB0aGUgaW5saW5lIGRhdGEuICBUaGlzIGVuc3VyZXMgdGhhdCBvbiBmYWlsdXJlIHdlXFxuK1xcdCAqIGNhbiBzaW1wbHkgZnJlZSB0aGUgYWxsb2NhdGVkIGJsb2NrIHdpdGhvdXQgbmVlZGluZyB0byByZXN0b3JlXFxuK1xcdCAqIHRoZSBpbmxpbmUgZGF0YS5cXG4rXFx0ICovXFxuK1xcdHBibGsgPSBleHQ0X25ld19tZXRhX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCAwLCAwLCBOVUxMLCBcXHUwMDI2ZXJyb3IpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0bWFwLm1fbGJsayA9IDA7XFxuLVxcdG1hcC5tX2xlbiA9IDE7XFxuLVxcdG1hcC5tX2ZsYWdzID0gMDtcXG4tXFx0ZXJyb3IgPSBleHQ0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNm1hcCwgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSk7XFxuLVxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gb3V0X3Jlc3RvcmU7XFxuLVxcdGlmICghKG1hcC5tX2ZsYWdzIFxcdTAwMjYgRVhUNF9NQVBfTUFQUEVEKSkge1xcbi1cXHRcXHRlcnJvciA9IC1FSU87XFxuLVxcdFxcdGdvdG8gb3V0X3Jlc3RvcmU7XFxuLVxcdH1cXG4tXFxuLVxcdGRhdGFfYmggPSBzYl9nZXRibGsoaW5vZGUtXFx1MDAzZWlfc2IsIG1hcC5tX3BibGspO1xcbitcXHRkYXRhX2JoID0gc2JfZ2V0YmxrKGlub2RlLVxcdTAwM2VpX3NiLCBwYmxrKTtcXG4gXFx0aWYgKCFkYXRhX2JoKSB7XFxuIFxcdFxcdGVycm9yID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBvdXRfcmVzdG9yZTtcXG4rXFx0XFx0Z290byBvdXRfZnJlZV9ibG9jaztcXG4gXFx0fVxcbiBcXG4gXFx0bG9ja19idWZmZXIoZGF0YV9iaCk7XFxuQEAgLTExNTUsOCArNzQ0LDcgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBFWFQ0X0pUUl9OT05FKTtcXG4gXFx0aWYgKGVycm9yKSB7XFxuIFxcdFxcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XFxuLVxcdFxcdGVycm9yID0gLUVJTztcXG4tXFx0XFx0Z290byBvdXRfcmVzdG9yZTtcXG4rXFx0XFx0Z290byBvdXRfZnJlZV9ibG9jaztcXG4gXFx0fVxcbiBcXHRtZW1zZXQoZGF0YV9iaC1cXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbiBcXG5AQCAtMTE2NCwyNiArNzUyLDM4IEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbiBcXHRcXHRtZW1jcHkoZGF0YV9iaC1cXHUwMDNlYl9kYXRhLCBidWYsIGlubGluZV9zaXplKTtcXG4gXFx0XFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShkYXRhX2JoKTtcXG4gXFx0XFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcXG4tXFx0XFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIGlub2RlLCBkYXRhX2JoKTtcXG4rXFx0XFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGlub2RlLCBkYXRhX2JoKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcXG4tXFx0XFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4tXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbi1cXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbi1cXG4gXFx0XFx0ZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCxcXG4gXFx0XFx0XFx0ICBsZTMyX3RvX2NwdSgoKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopYnVmKS1cXHUwMDNlaW5vZGUpLFxcbiBcXHRcXHRcXHQgIGJ1ZiArIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxcbiBcXHRcXHRcXHQgIGlubGluZV9zaXplIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUpO1xcbi1cXHRcXHRpZiAoIWVycm9yKVxcbi1cXHRcXHRcXHRlcnJvciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTtcXG4gXFx0fVxcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gb3V0X2ZyZWVfYmxvY2s7XFxuIFxcbi1vdXRfcmVzdG9yZTpcXG4rXFx0LypcXG4rXFx0ICogRGF0YSBpcyBzYWZlbHkgaW4gdGhlIGFsbG9jYXRlZCBibG9jay4gIE5vdyBkZXN0cm95IHRoZSBpbmxpbmVcXG4rXFx0ICogZGF0YSBhbmQgcG9wdWxhdGUgdGhlIGV4dGVudCBlbnRyeSBhdG9taWNhbGx5IHVuZGVyIGlfZGF0YV9zZW1cXG4rXFx0ICogKGluc2lkZSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKS4gIFRoaXMgZW5zdXJlcyBub1xcbitcXHQgKiBjb25jdXJyZW50IHJlYWRlciBzZWVzIGFuIGVtcHR5IGV4dGVudCB0cmVlLlxcbitcXHQgKi9cXG4rXFx0ZXJyb3IgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUsIHBibGspO1xcbiBcXHRpZiAoZXJyb3IpXFxuLVxcdFxcdGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbG9jLCBidWYsIGlubGluZV9zaXplKTtcXG4rXFx0XFx0Z290byBvdXRfZnJlZV9ibG9jaztcXG4gXFxuK1xcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuK1xcdFxcdGlub2RlLVxcdTAwM2VpX3NpemUgPSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemU7XFxuK1xcdFxcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplKTtcXG4rXFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyb3IgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XFxuK1xcdGdvdG8gb3V0O1xcbitcXG4rb3V0X2ZyZWVfYmxvY2s6XFxuK1xcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgcGJsaywgMSwgMCk7XFxuIG91dDpcXG4gXFx0YnJlbHNlKGRhdGFfYmgpO1xcbiBcXHRrZnJlZShidWYpO1xcbkBAIC0xODIxLDcgKzE0MjEsNyBAQCBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGludCByZXQsIG5vX2V4cGFuZDtcXG4gXFxuIFxcdGV4dDRfd3JpdGVfbG9ja194YXR0cihpbm9kZSwgXFx1MDAyNm5vX2V4cGFuZCk7XFxuLVxcdHJldCA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSk7XFxuK1xcdHJldCA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSwgMCk7XFxuIFxcdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcXHUwMDI2bm9fZXhwYW5kKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTE5ODAsMTggKzE1ODAsNiBAQCBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XFxuIFxcdFxcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH0gZWxzZSBpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIElub2RlIGhhcyBpbmxpbmUgZGF0YSBidXQgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEgaXNcXG4tXFx0XFx0ICogY2xlYXJlZC4gVGhpcyBtZWFucyB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBtb3Zpbmcgb2ZcXG4tXFx0XFx0ICogaW5saW5lIGRhdGEgdG8gZGVsYXkgYWxsb2NhdGVkIGJsb2NrLiBKdXN0IGZvcmNlIHdyaXRlb3V0XFxuLVxcdFxcdCAqIGhlcmUgdG8gZmluaXNoIGNvbnZlcnNpb24uXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRlcnJvciA9IGZpbGVtYXBfZmx1c2goaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuLVxcdFxcdGlmIChlcnJvcilcXG4tXFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbi1cXHRcXHRpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuIFxcdG5lZWRlZF9ibG9ja3MgPSBleHQ0X2NodW5rX3RyYW5zX2V4dGVudChpbm9kZSwgMSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xcbmluZGV4IGFkMTRkZDU4YTAwM2IzLi4yMjU2ZmIzODI2YTlkYiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcXG5AQCAtMTMwMCw4ICsxMzAwLDYgQEAgc3RhdGljIGludCBleHQ0X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0aWYgKHVubGlrZWx5KHJldCkpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHQqZnNkYXRhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKmZzZGF0YSBcXHUwMDI2IH5FWFQ0X1dSSVRFX0RBVEFfSU5MSU5FKTtcXG4tXFxuIFxcdHRyYWNlX2V4dDRfd3JpdGVfYmVnaW4oaW5vZGUsIHBvcywgbGVuKTtcXG4gXFx0LypcXG4gXFx0ICogUmVzZXJ2ZSBvbmUgYmxvY2sgbW9yZSBmb3IgYWRkaXRpb24gdG8gb3JwaGFuIGxpc3QgaW4gY2FzZVxcbkBAIC0xMzEyLDE0ICsxMzEwLDkgQEAgc3RhdGljIGludCBleHQ0X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0aW5kZXggPSBwb3MgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFxuIFxcdGlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSkge1xcbi1cXHRcXHRyZXQgPSBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBmb2xpb3ApO1xcbitcXHRcXHRyZXQgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0XFx0aWYgKHJldCA9PSAxKSB7XFxuLVxcdFxcdFxcdCpmc2RhdGEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZykqZnNkYXRhIHwgRVhUNF9XUklURV9EQVRBX0lOTElORSk7XFxuLVxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuQEAgLTE0NTIsMTAgKzE0NDUsNiBAQCBzdGF0aWMgaW50IGV4dDRfd3JpdGVfZW5kKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFxuIFxcdHRyYWNlX2V4dDRfd3JpdGVfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkKTtcXG4gXFxuLVxcdGlmICgodW5zaWduZWQgbG9uZylmc2RhdGEgXFx1MDAyNiBFWFQ0X1dSSVRFX0RBVEFfSU5MSU5FKVxcbi1cXHRcXHRyZXR1cm4gZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoaW5vZGUsIHBvcywgbGVuLCBjb3BpZWQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgZm9saW8pO1xcbi1cXG4gXFx0Y29waWVkID0gYmxvY2tfd3JpdGVfZW5kKHBvcywgbGVuLCBjb3BpZWQsIGZvbGlvKTtcXG4gXFx0LypcXG4gXFx0ICogaXQncyBpbXBvcnRhbnQgdG8gdXBkYXRlIGlfc2l6ZSB3aGlsZSBzdGlsbCBob2xkaW5nIGZvbGlvIGxvY2s6XFxuQEAgLTE1NjEsMTAgKzE1NTAsNiBAQCBzdGF0aWMgaW50IGV4dDRfam91cm5hbGxlZF93cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbiBcXG4gXFx0QlVHX09OKCFleHQ0X2hhbmRsZV92YWxpZChoYW5kbGUpKTtcXG4gXFxuLVxcdGlmICgodW5zaWduZWQgbG9uZylmc2RhdGEgXFx1MDAyNiBFWFQ0X1dSSVRFX0RBVEFfSU5MSU5FKVxcbi1cXHRcXHRyZXR1cm4gZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoaW5vZGUsIHBvcywgbGVuLCBjb3BpZWQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgZm9saW8pO1xcbi1cXG4gXFx0aWYgKHVubGlrZWx5KGNvcGllZCBcXHUwMDNjIGxlbikgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XFxuIFxcdFxcdGNvcGllZCA9IDA7XFxuIFxcdFxcdGV4dDRfam91cm5hbGxlZF96ZXJvX25ld19idWZmZXJzKGhhbmRsZSwgaW5vZGUsIGZvbGlvLFxcbkBAIC0zMTczLDEwICszMTU4LDYgQEAgc3RhdGljIGludCBleHQ0X2RhX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmb2xpb3AsIHRydWUpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0XFx0aWYgKHJldCA9PSAxKSB7XFxuLVxcdFxcdFxcdCpmc2RhdGEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZykqZnNkYXRhIHwgRVhUNF9XUklURV9EQVRBX0lOTElORSk7XFxuLVxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHR9XFxuIFxcdH1cXG4gXFxuIHJldHJ5OlxcbkBAIC0zMzEzLDEwICszMjk0LDYgQEAgc3RhdGljIGludCBleHQ0X2RhX3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuIFxcbiBcXHR0cmFjZV9leHQ0X2RhX3dyaXRlX2VuZChpbm9kZSwgcG9zLCBsZW4sIGNvcGllZCk7XFxuIFxcbi1cXHRpZiAod3JpdGVfbW9kZSBcXHUwMDI2IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpXFxuLVxcdFxcdHJldHVybiBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChpbm9kZSwgcG9zLCBsZW4sIGNvcGllZCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBmb2xpbyk7XFxuLVxcbiBcXHRpZiAodW5saWtlbHkoY29waWVkIFxcdTAwM2MgbGVuKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXFxuIFxcdFxcdGNvcGllZCA9IDA7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcXG5pbmRleCA2YzE4YjVhZGZmY2EzMi4uOTkxM2UzMGI3MDQwMDggMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXFxuKysrIGIvZnMvZXh0NC9zdXBlci5jXFxuQEAgLTMxNDUsNiArMzE0NSwxMiBAQCBzdGF0aWMgaW50IGV4dDRfc2V0dXBfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLFxcbiBcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLFxcbiBcXHRcXHRcXHQgXFxcIndhcm5pbmc6IGNoZWNrdGltZSByZWFjaGVkLCBcXFwiXFxuIFxcdFxcdFxcdCBcXFwicnVubmluZyBlMmZzY2sgaXMgcmVjb21tZW5kZWRcXFwiKTtcXG4rXFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfaW5saW5lX2RhdGEoc2IpKVxcbitcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLFxcbitcXHRcXHRcXHQgXFxcIndhcm5pbmc6IGlubGluZV9kYXRhIGZlYXR1cmUgaXMgZGVwcmVjYXRlZCBhbmQgXFxcIlxcbitcXHRcXHRcXHQgXFxcIndpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBrZXJuZWwgcmVsZWFzZS4gXFxcIlxcbitcXHRcXHRcXHQgXFxcIlVzZSAndHVuZTJmcyAtTyBeaW5saW5lX2RhdGEnIHRvIGNvbnZlcnQuXFxcIik7XFxuK1xcbiBcXHRpZiAoIXNiaS1cXHUwMDNlc19qb3VybmFsKVxcbiBcXHRcXHRlcy1cXHUwMDNlc19zdGF0ZSBcXHUwMDI2PSBjcHVfdG9fbGUxNih+RVhUNF9WQUxJRF9GUyk7XFxuIFxcdGlmICghKF9fczE2KSBsZTE2X3RvX2NwdShlcy1cXHUwMDNlc19tYXhfbW50X2NvdW50KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDA6MTM6NDkuNjkxNTE0NjYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mzc4OTEwNzI1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfY29udmVydF9pbmxpbmVfZGF0YVwiLFxuICAgIFwiZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhXCIsXG4gICAgXCJleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBkZXByZWNhdGVzIHRoZSBpbmxpbmVfZGF0YSBmZWF0dXJlIGZvciByZWd1bGFyIGZpbGVzIGluIGV4dDQsIGZvcmNpbmcgY29udmVyc2lvbiB0byBibG9jay1iYXNlZCBzdG9yYWdlIG9uIHdyaXRlLiBUaGlzIG1vZGlmaWVzIGNvcmUgZXh0NCB3cml0ZSBwYXRocyBhbmQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgZGF0YSBjb3JydXB0aW9uIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2E1MzBkMGY1NDA3ZjBmZGRiOTQyYmUxNGRjN2IzY2M5MDRjNTQxM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDAwOjEzOjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0L2lubGluZWRhdGEucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0L2lubGluZWRhdGEucnN0XG5pbmRleCBhNzI4YWYwZDJmZDBjNS4uOGRjMWI2ZDc1Mzg4ZDcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQvaW5saW5lZGF0YS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC9pbmxpbmVkYXRhLnJzdFxuQEAgLTMsNiArMywxNCBAQFxuIElubGluZSBEYXRhXG4gLS0tLS0tLS0tLS1cbiBcbisuLiB3YXJuaW5nOjpcbitcbisgICBUaGUgaW5saW5lIGRhdGEgZmVhdHVyZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmVcbisgICBrZXJuZWwgcmVsZWFzZS4gIE5ldyByZWd1bGFyIGZpbGUgaW5vZGVzIG5vIGxvbmdlciBzdG9yZSBkYXRhIGlubGluZSxcbisgICBhbmQgd3JpdGVzIHRvIGV4aXN0aW5nIGlubGluZSBkYXRhIGlub2RlcyB0cmlnZ2VyIGF1dG9tYXRpYyBjb252ZXJzaW9uXG4rICAgdG8gYmxvY2stYmFzZWQgc3RvcmFnZS4gIFVzZSBgYHR1bmUyZnMgLU8gXmlubGluZV9kYXRhYGAgdG8gY29udmVydFxuKyAgIGV4aXN0aW5nIGZpbGVzeXN0ZW1zLlxuK1xuIFRoZSBpbmxpbmUgZGF0YSBmZWF0dXJlIHdhcyBkZXNpZ25lZCB0byBoYW5kbGUgdGhlIGNhc2UgdGhhdCBhIGZpbGUnc1xuIGRhdGEgaXMgc28gdGlueSB0aGF0IGl0IHJlYWRpbHkgZml0cyBpbnNpZGUgdGhlIGlub2RlLCB3aGljaFxuICh0aGVvcmV0aWNhbGx5KSByZWR1Y2VzIGRpc2sgYmxvY2sgY29uc3VtcHRpb24gYW5kIHJlZHVjZXMgc2Vla3MuIElmIHRoZVxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IDIxYTk1MWYxMDYzNjc4Li44MzJiYzFmM2I2MDAyNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTMxNDgsNyArMzE0OCw2IEBAIGludCBkb19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpO1xuIHZvaWQgZXh0NF9zZXRfaW5vZGVfbWFwcGluZ19vcmRlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiAjZGVmaW5lIEZBTExfQkFDS19UT19OT05ERUxBTExPQyAxXG4tI2RlZmluZSBFWFQ0X1dSSVRFX0RBVEFfSU5MSU5FXHQgMlxuIFxuIHR5cGVkZWYgZW51bSB7XG4gXHRFWFQ0X0lHRVRfTk9STUFMID1cdDAsXG5AQCAtMzc1OSwxMiArMzc1OCw2IEBAIGV4dGVybiBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiB2b2lkIGV4dDRfdXBkYXRlX2ZpbmFsX2RlKHZvaWQgKmRlX2J1ZiwgaW50IG9sZF9zaXplLCBpbnQgbmV3X3NpemUpO1xuIFxuIGludCBleHQ0X3JlYWRwYWdlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1leHRlcm4gaW50IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLVx0XHRcdFx0XHQgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdFx0IGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbi1cdFx0XHRcdFx0IHN0cnVjdCBmb2xpbyAqKmZvbGlvcCk7XG4taW50IGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbi1cdFx0XHQgICAgICAgdW5zaWduZWQgY29waWVkLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBleHRlcm4gaW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHQgIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lhbGxvYy5jIGIvZnMvZXh0NC9pYWxsb2MuY1xuaW5kZXggYTQwY2IyN2Y4MTE2Y2IuLjI3OGYwYWI4Yzk5NmU0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pYWxsb2MuY1xuKysrIGIvZnMvZXh0NC9pYWxsb2MuY1xuQEAgLTEzMDUsOCArMTMwNSw4IEBAIHN0cnVjdCBpbm9kZSAqX19leHQ0X25ld19pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcbiBcdGVpLVx1MDAzZWlfZXh0cmFfaXNpemUgPSBzYmktXHUwMDNlc193YW50X2V4dHJhX2lzaXplO1xuIFx0ZWktXHUwMDNlaV9pbmxpbmVfb2ZmID0gMDtcbi1cdGlmIChleHQ0X2hhc19mZWF0dXJlX2lubGluZV9kYXRhKHNiKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoIShlaS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiAoRVhUNF9EQVhfRkx8RVhUNF9FQV9JTk9ERV9GTCkpIHx8IFNfSVNESVIobW9kZSkpKVxuK1x0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfaW5saW5lX2RhdGEoc2IpIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICEoZWktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9EQVhfRkwpKVxuIFx0XHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuIFx0cmV0ID0gaW5vZGU7XG4gXHRlcnIgPSBkcXVvdF9hbGxvY19pbm9kZShpbm9kZSk7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmNcbmluZGV4IGNlZWU2OWE2NjQ4MmJjLi5lMGI4MDI3M2UzMjJkOCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5saW5lLmNcbisrKyBiL2ZzL2V4dDQvaW5saW5lLmNcbkBAIC0xMiw2ICsxMiw3IEBAXG4gXG4gI2luY2x1ZGUgXCJleHQ0X2piZDIuaFwiXG4gI2luY2x1ZGUgXCJleHQ0LmhcIlxuKyNpbmNsdWRlIFwiZXh0NF9leHRlbnRzLmhcIlxuICNpbmNsdWRlIFwieGF0dHIuaFwiXG4gI2luY2x1ZGUgXCJ0cnVuY2F0ZS5oXCJcbiBcbkBAIC0yMCwxMCArMjEsNiBAQFxuICNkZWZpbmUgRVhUNF9JTkxJTkVfRE9URE9UX09GRlNFVFx0MlxuICNkZWZpbmUgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkVcdFx0NFxuIFxuLVxuLXN0YXRpYyBpbnQgZXh0NF9kYV9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHRcdFx0XHQgc3RydWN0IGlub2RlICppbm9kZSk7XG4tXG4gc3RhdGljIGludCBleHQ0X2dldF9pbmxpbmVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX29mZilcbkBAIC0yMTgsNTEgKzIxNSw2IEBAIHN0YXRpYyBpbnQgZXh0NF9yZWFkX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZmZlcixcbiBcdHJldHVybiBjcF9sZW47XG4gfVxuIFxuLS8qXG4tICogd3JpdGUgdGhlIGJ1ZmZlciB0byB0aGUgaW5saW5lIGlub2RlLlxuLSAqIElmICdjcmVhdGUnIGlzIHNldCwgd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGUgZXh0cmEgY29weSBpbiB0aGUgeGF0dHJcbi0gKiB2YWx1ZSBzaW5jZSBpdCBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgZXh0NF94YXR0cl9pYm9keV9zZXQuXG4tICogVGhhdCBzYXZlcyB1cyBvbmUgbWVtY3B5LlxuLSAqL1xuLXN0YXRpYyB2b2lkIGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcbi1cdFx0XHRcdCAgIHZvaWQgKmJ1ZmZlciwgbG9mZl90IHBvcywgdW5zaWduZWQgaW50IGxlbilcbi17XG4tXHRzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnk7XG4tXHRzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIgKmhlYWRlcjtcbi1cdHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGU7XG4tXHRpbnQgY3BfbGVuID0gMDtcbi1cbi1cdGlmICh1bmxpa2VseShleHQ0X2VtZXJnZW5jeV9zdGF0ZShpbm9kZS1cdTAwM2VpX3NiKSkpXG4tXHRcdHJldHVybjtcbi1cbi1cdEJVR19PTighRVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmYpO1xuLVx0QlVHX09OKHBvcyArIGxlbiBcdTAwM2UgRVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9zaXplKTtcbi1cbi1cdHJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKGlsb2MpO1xuLVx0YnVmZmVyICs9IHBvcztcbi1cbi1cdGlmIChwb3MgXHUwMDNjIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpIHtcbi1cdFx0Y3BfbGVuID0gcG9zICsgbGVuIFx1MDAzZSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFID9cbi1cdFx0XHQgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSAtIHBvcyA6IGxlbjtcbi1cdFx0bWVtY3B5KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2sgKyBwb3MsIGJ1ZmZlciwgY3BfbGVuKTtcbi1cbi1cdFx0bGVuIC09IGNwX2xlbjtcbi1cdFx0YnVmZmVyICs9IGNwX2xlbjtcbi1cdFx0cG9zICs9IGNwX2xlbjtcbi1cdH1cbi1cbi1cdGlmICghbGVuKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRwb3MgLT0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcbi1cdGhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7XG4tXHRlbnRyeSA9IChzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqKSgodm9pZCAqKXJhd19pbm9kZSArXG4tXHRcdFx0XHRcdCAgICBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX29mZik7XG4tXG4tXHRtZW1jcHkoKHZvaWQgKilJRklSU1QoaGVhZGVyKSArIGxlMTZfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfb2ZmcykgKyBwb3MsXG4tXHQgICAgICAgYnVmZmVyLCBsZW4pO1xuLX1cbi1cbiBzdGF0aWMgaW50IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsZW4pXG4ge1xuQEAgLTQzMyw3ICszODUsOCBAQCBzdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIH1cbiBcbiBzdGF0aWMgaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbi1cdFx0XHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSlcbitcdFx0XHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdFx0ICAgZXh0NF9mc2Jsa190IHBibGspXG4ge1xuIFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xuIFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHtcbkBAIC00ODEsNyArNDM0LDIxIEBAIHN0YXRpYyBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHQgICAgU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuIFx0XHRcdGV4dDRfc2V0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4gXHRcdFx0ZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgaW5vZGUpO1xuK1x0XHRcdGlmIChwYmxrKSB7XG4rXHRcdFx0XHRzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaDtcbitcdFx0XHRcdHN0cnVjdCBleHQ0X2V4dGVudCAqZXg7XG4rXG4rXHRcdFx0XHRlaCA9IGV4dF9pbm9kZV9oZHIoaW5vZGUpO1xuK1x0XHRcdFx0ZXggPSBFWFRfRklSU1RfRVhURU5UKGVoKTtcbitcdFx0XHRcdGV4LVx1MDAzZWVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4rXHRcdFx0XHRleC1cdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNigxKTtcbitcdFx0XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgcGJsayk7XG4rXHRcdFx0XHRlaC1cdTAwM2VlaF9lbnRyaWVzID0gY3B1X3RvX2xlMTYoMSk7XG4rXHRcdFx0fVxuIFx0XHR9XG4rXHR9IGVsc2UgaWYgKHBibGspIHtcbitcdFx0LyogaW5kaXJlY3QgbWFwcGluZzogc2V0IGlfZGF0YVswXSBkaXJlY3RseSAqL1xuK1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGF0YVswXSA9IGNwdV90b19sZTMyKHBibGspO1xuIFx0fVxuIFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKTtcbiBcbkBAIC01NjgsMTIyICs1MzUsNiBAQCBpbnQgZXh0NF9yZWFkcGFnZV9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiByZXQgXHUwMDNlPSAwID8gMCA6IHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGludCByZXQsIG5lZWRlZF9ibG9ja3MsIG5vX2V4cGFuZDtcbi1cdGhhbmRsZV90ICpoYW5kbGUgPSBOVUxMO1xuLVx0aW50IHJldHJpZXMgPSAwLCBzZW1faGVsZCA9IDA7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcbi1cdHVuc2lnbmVkIGZyb20sIHRvO1xuLVx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xuLVxuLVx0aWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcbi1cdFx0Lypcbi1cdFx0ICogY2xlYXIgdGhlIGZsYWcgc28gdGhhdCBubyBuZXcgd3JpdGVcbi1cdFx0ICogd2lsbCB0cmFwIGhlcmUgYWdhaW4uXG4tXHRcdCAqL1xuLVx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0bmVlZGVkX2Jsb2NrcyA9IGV4dDRfY2h1bmtfdHJhbnNfZXh0ZW50KGlub2RlLCAxKTtcbi1cbi1cdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLXJldHJ5OlxuLVx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX1dSSVRFX1BBR0UsIG5lZWRlZF9ibG9ja3MpO1xuLVx0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4tXHRcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcbi1cdFx0aGFuZGxlID0gTlVMTDtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHQvKiBXZSBjYW5ub3QgcmVjdXJzZSBpbnRvIHRoZSBmaWxlc3lzdGVtIGFzIHRoZSB0cmFuc2FjdGlvbiBpcyBhbHJlYWR5XG4tXHQgKiBzdGFydGVkICovXG4tXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4gfCBGR1BfTk9GUyxcbi1cdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbi1cdGlmIChJU19FUlIoZm9saW8pKSB7XG4tXHRcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xuLVx0XHRnb3RvIG91dF9ub2ZvbGlvO1xuLVx0fVxuLVxuLVx0ZXh0NF93cml0ZV9sb2NrX3hhdHRyKGlub2RlLCBcdTAwMjZub19leHBhbmQpO1xuLVx0c2VtX2hlbGQgPSAxO1xuLVx0LyogSWYgc29tZSBvbmUgaGFzIGFscmVhZHkgZG9uZSB0aGlzIGZvciB1cywganVzdCBleGl0LiAqL1xuLVx0aWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcbi1cdFx0cmV0ID0gMDtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRmcm9tID0gMDtcbi1cdHRvID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xuLVx0aWYgKCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkge1xuLVx0XHRyZXQgPSBleHQ0X3JlYWRfaW5saW5lX2ZvbGlvKGlub2RlLCBmb2xpbyk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRleHQ0X2ZjX3RyYWNrX2lub2RlKGhhbmRsZSwgaW5vZGUpO1xuLVx0cmV0ID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0aWYgKGV4dDRfc2hvdWxkX2Rpb3JlYWRfbm9sb2NrKGlub2RlKSkge1xuLVx0XHRyZXQgPSBleHQ0X2Jsb2NrX3dyaXRlX2JlZ2luKGhhbmRsZSwgZm9saW8sIGZyb20sIHRvLFxuLVx0XHRcdFx0XHQgICAgIGV4dDRfZ2V0X2Jsb2NrX3Vud3JpdHRlbik7XG4tXHR9IGVsc2Vcbi1cdFx0cmV0ID0gZXh0NF9ibG9ja193cml0ZV9iZWdpbihoYW5kbGUsIGZvbGlvLCBmcm9tLCB0byxcbi1cdFx0XHRcdFx0ICAgICBleHQ0X2dldF9ibG9jayk7XG4tXHRjbGVhcl9idWZmZXJfbmV3KGZvbGlvX2J1ZmZlcnMoZm9saW8pKTtcbi1cbi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiBleHQ0X3Nob3VsZF9qb3VybmFsX2RhdGEoaW5vZGUpKSB7XG4tXHRcdHJldCA9IGV4dDRfd2Fsa19wYWdlX2J1ZmZlcnMoaGFuZGxlLCBpbm9kZSxcbi1cdFx0XHRcdFx0ICAgICBmb2xpb19idWZmZXJzKGZvbGlvKSwgZnJvbSwgdG8sXG4tXHRcdFx0XHRcdCAgICAgTlVMTCwgZG9fam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKTtcbi1cdH1cbi1cbi1cdGlmIChyZXQpIHtcbi1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0Zm9saW8gPSBOVUxMO1xuLVx0XHRleHQ0X29ycGhhbl9hZGQoaGFuZGxlLCBpbm9kZSk7XG4tXHRcdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcdTAwMjZub19leHBhbmQpO1xuLVx0XHRzZW1faGVsZCA9IDA7XG4tXHRcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4tXHRcdGhhbmRsZSA9IE5VTEw7XG4tXHRcdGV4dDRfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKGlub2RlKTtcbi1cdFx0Lypcbi1cdFx0ICogSWYgdHJ1bmNhdGUgZmFpbGVkIGVhcmx5IHRoZSBpbm9kZSBtaWdodFxuLVx0XHQgKiBzdGlsbCBiZSBvbiB0aGUgb3JwaGFuIGxpc3Q7IHdlIG5lZWQgdG9cbi1cdFx0ICogbWFrZSBzdXJlIHRoZSBpbm9kZSBpcyByZW1vdmVkIGZyb20gdGhlXG4tXHRcdCAqIG9ycGhhbiBsaXN0IGluIHRoYXQgY2FzZS5cbi1cdFx0ICovXG4tXHRcdGlmIChpbm9kZS1cdTAwM2VpX25saW5rKVxuLVx0XHRcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XG4tXHR9XG4tXG4tXHRpZiAocmV0ID09IC1FTk9TUEMgXHUwMDI2XHUwMDI2IGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLVx1MDAzZWlfc2IsIFx1MDAyNnJldHJpZXMpKVxuLVx0XHRnb3RvIHJldHJ5O1xuLVxuLVx0aWYgKGZvbGlvKVxuLVx0XHRibG9ja19jb21taXRfd3JpdGUoZm9saW8sIGZyb20sIHRvKTtcbi1vdXQ6XG4tXHRpZiAoZm9saW8pIHtcbi1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdH1cbi1vdXRfbm9mb2xpbzpcbi1cdGlmIChzZW1faGVsZClcbi1cdFx0ZXh0NF93cml0ZV91bmxvY2tfeGF0dHIoaW5vZGUsIFx1MDAyNm5vX2V4cGFuZCk7XG4tXHRpZiAoaGFuZGxlKVxuLVx0XHRleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuLVx0YnJlbHNlKGlsb2MuYmgpO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gLypcbiAgKiBQcmVwYXJlIHRoZSB3cml0ZSBmb3IgdGhlIGlubGluZSBkYXRhLlxuICAqIElmIHRoZSBkYXRhIGNhbiBiZSB3cml0dGVuIGludG8gdGhlIGlub2RlLCB3ZSBqdXN0IHJlYWRcbkBAIC02OTgsMjQ4ICs1NDksOCBAQCBpbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCxcbiBcdFx0XHRcdFx0ICBib29sIGRhKVxuIHtcbi1cdGludCByZXQ7XG4tXHRoYW5kbGVfdCAqaGFuZGxlO1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcbi1cdGludCByZXRyaWVzID0gMDtcbi1cbi1cdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLXJldHJ5X2pvdXJuYWw6XG4tXHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfSU5PREUsIDEpO1xuLVx0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4tXHRcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcbi1cdFx0Z290byBvdXRfcmVsZWFzZV9iaDtcbi1cdH1cbi1cbi1cdHJldCA9IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBwb3MgKyBsZW4pO1xuLVx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FTk9TUEMpXG4tXHRcdGdvdG8gb3V0X3N0b3Bfam91cm5hbDtcbi1cbi1cdGlmIChyZXQgPT0gLUVOT1NQQykge1xuLVx0XHRleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuLVx0XHRpZiAoIWRhKSB7XG4tXHRcdFx0YnJlbHNlKGlsb2MuYmgpO1xuLVx0XHRcdC8qIFJldHJ5IGluc2lkZSAqL1xuLVx0XHRcdHJldHVybiBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KG1hcHBpbmcsIGlub2RlKTtcbi1cdFx0fVxuLVxuLVx0XHRyZXQgPSBleHQ0X2RhX2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KG1hcHBpbmcsIGlub2RlKTtcbi1cdFx0aWYgKHJldCA9PSAtRU5PU1BDIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtXHUwMDNlaV9zYiwgXHUwMDI2cmV0cmllcykpXG4tXHRcdFx0Z290byByZXRyeV9qb3VybmFsO1xuLVx0XHRnb3RvIG91dF9yZWxlYXNlX2JoO1xuLVx0fVxuLVxuLVx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOIHwgRkdQX05PRlMsXG4tXHRcdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuLVx0aWYgKElTX0VSUihmb2xpbykpIHtcbi1cdFx0cmV0ID0gUFRSX0VSUihmb2xpbyk7XG4tXHRcdGdvdG8gb3V0X3N0b3Bfam91cm5hbDtcbi1cdH1cbi1cbi1cdGRvd25fcmVhZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZXhhdHRyX3NlbSk7XG4tXHQvKiBTb21lb25lIGVsc2UgaGFkIGNvbnZlcnRlZCBpdCB0byBleHRlbnQgKi9cbi1cdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XG4tXHRcdHJldCA9IDA7XG4tXHRcdGdvdG8gb3V0X3JlbGVhc2VfZm9saW87XG4tXHR9XG4tXG4tXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XG4tXHRcdHJldCA9IGV4dDRfcmVhZF9pbmxpbmVfZm9saW8oaW5vZGUsIGZvbGlvKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIG91dF9yZWxlYXNlX2ZvbGlvO1xuLVx0fVxuLVxuLVx0cmV0ID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cdTAwM2VpX3NiLCBpbG9jLmJoLCBFWFQ0X0pUUl9OT05FKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3JlbGVhc2VfZm9saW87XG4tXHQqZm9saW9wID0gZm9saW87XG4tXHR1cF9yZWFkKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNleGF0dHJfc2VtKTtcbi1cdGJyZWxzZShpbG9jLmJoKTtcbi1cdHJldHVybiAxO1xuLVxuLW91dF9yZWxlYXNlX2ZvbGlvOlxuLVx0dXBfcmVhZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZXhhdHRyX3NlbSk7XG4tXHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0Zm9saW9fcHV0KGZvbGlvKTtcbi1vdXRfc3RvcF9qb3VybmFsOlxuLVx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbi1vdXRfcmVsZWFzZV9iaDpcbi1cdGJyZWxzZShpbG9jLmJoKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLS8qXG4tICogVHJ5IHRvIHdyaXRlIGRhdGEgaW4gdGhlIGlub2RlLlxuLSAqIElmIHRoZSBpbm9kZSBoYXMgaW5saW5lIGRhdGEsIGNoZWNrIHdoZXRoZXIgdGhlIG5ldyB3cml0ZSBjYW4gYmVcbi0gKiBpbiB0aGUgaW5vZGUgYWxzby4gSWYgbm90LCBjcmVhdGUgdGhlIHBhZ2UgdGhlIGhhbmRsZSwgbW92ZSB0aGUgZGF0YVxuLSAqIHRvIHRoZSBwYWdlIG1ha2UgaXQgdXBkYXRlIGFuZCBsZXQgdGhlIGxhdGVyIGNvZGVzIGNyZWF0ZSBleHRlbnQgZm9yIGl0LlxuLSAqL1xuLWludCBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHRcdCAgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgZm9saW8gKipmb2xpb3ApXG4te1xuLVx0aWYgKHBvcyArIGxlbiBcdTAwM2UgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKGlub2RlKSlcbi1cdFx0cmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQobWFwcGluZywgaW5vZGUpO1xuLVx0cmV0dXJuIGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXG4tXHRcdFx0XHRcdCAgICAgIGZvbGlvcCwgZmFsc2UpO1xuLX1cbi1cbi1pbnQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuLVx0XHRcdCAgICAgICB1bnNpZ25lZCBjb3BpZWQsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4te1xuLVx0aGFuZGxlX3QgKmhhbmRsZSA9IGV4dDRfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpO1xuLVx0aW50IG5vX2V4cGFuZDtcbi1cdHZvaWQgKmthZGRyO1xuLVx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xuLVx0aW50IHJldCA9IDAsIHJldDI7XG4tXG4tXHRpZiAodW5saWtlbHkoY29waWVkIFx1MDAzYyBsZW4pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4tXHRcdGNvcGllZCA9IDA7XG4tXG4tXHRpZiAobGlrZWx5KGNvcGllZCkpIHtcbi1cdFx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpbG9jKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHRleHQ0X3N0ZF9lcnJvcihpbm9kZS1cdTAwM2VpX3NiLCByZXQpO1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4tXHRcdGV4dDRfd3JpdGVfbG9ja194YXR0cihpbm9kZSwgXHUwMDI2bm9fZXhwYW5kKTtcbi1cdFx0Lypcbi1cdFx0ICogV2UgY291bGQgaGF2ZSByYWNlZCB3aXRoIGV4dDRfcGFnZV9ta3dyaXRlKCkgY29udmVydGluZ1xuLVx0XHQgKiB0aGUgaW5vZGUgYW5kIGNsZWFyaW5nIHRoZSBpbmxpbmUgZGF0YSBmbGFnLCBzbyB3ZSBqdXN0XG4tXHRcdCAqIHJlbGVhc2UgcmVzb3VyY2VzIGFuZCByZXRyeSB0aGUgd2hvbGUgd3JpdGUuXG4tXHRcdCAqL1xuLVx0XHRpZiAodW5saWtlbHkoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkpIHtcbi1cdFx0XHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXHUwMDI2bm9fZXhwYW5kKTtcbi1cdFx0XHRicmVsc2UoaWxvYy5iaCk7XG4tXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4tXHRcdFx0cmV0dXJuIDA7XG4tXHRcdH1cbi1cbi1cdFx0Lypcbi1cdFx0ICogZWktXHUwMDNlaV9pbmxpbmVfb2ZmIG1heSBoYXZlIGNoYW5nZWQgc2luY2Vcbi1cdFx0ICogZXh0NF93cml0ZV9iZWdpbigpIGNhbGxlZFxuLVx0XHQgKiBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YSgpXG4tXHRcdCAqL1xuLVx0XHQodm9pZCkgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhpbm9kZSk7XG4tXG4tXHRcdGthZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgMCk7XG4tXHRcdGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoaW5vZGUsIFx1MDAyNmlsb2MsIGthZGRyLCBwb3MsIGNvcGllZCk7XG4tXHRcdGt1bm1hcF9sb2NhbChrYWRkcik7XG4tXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuLVx0XHQvKiBjbGVhciBkaXJ0eSBmbGFnIHNvIHRoYXQgd3JpdGVwYWdlcyB3b3VsZG4ndCB3b3JrIGZvciB1cy4gKi9cbi1cdFx0Zm9saW9fY2xlYXJfZGlydHkoZm9saW8pO1xuLVxuLVx0XHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXHUwMDI2bm9fZXhwYW5kKTtcbi1cdFx0YnJlbHNlKGlsb2MuYmgpO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBJdCdzIGltcG9ydGFudCB0byB1cGRhdGUgaV9zaXplIHdoaWxlIHN0aWxsIGhvbGRpbmcgZm9saW9cbi1cdFx0ICogbG9jazogcGFnZSB3cml0ZW91dCBjb3VsZCBvdGhlcndpc2UgY29tZSBpbiBhbmQgemVyb1xuLVx0XHQgKiBiZXlvbmQgaV9zaXplLlxuLVx0XHQgKi9cbi1cdFx0ZXh0NF91cGRhdGVfaW5vZGVfc2l6ZShpbm9kZSwgcG9zICsgY29waWVkKTtcbi1cdH1cbi1cdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXHRmb2xpb19wdXQoZm9saW8pO1xuLVxuLVx0Lypcbi1cdCAqIERvbid0IG1hcmsgdGhlIGlub2RlIGRpcnR5IHVuZGVyIGZvbGlvIGxvY2suIEZpcnN0LCBpdCB1bm5lY2Vzc2FyaWx5XG4tXHQgKiBtYWtlcyB0aGUgaG9sZGluZyB0aW1lIG9mIGZvbGlvIGxvY2sgbG9uZ2VyLiBTZWNvbmQsIGl0IGZvcmNlcyBsb2NrXG4tXHQgKiBvcmRlcmluZyBvZiBmb2xpbyBsb2NrIGFuZCB0cmFuc2FjdGlvbiBzdGFydCBmb3Igam91cm5hbGluZ1xuLVx0ICogZmlsZXN5c3RlbXMuXG4tXHQgKi9cbi1cdGlmIChsaWtlbHkoY29waWVkKSlcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4tb3V0OlxuLVx0Lypcbi1cdCAqIElmIHdlIGRpZG4ndCBjb3B5IGFzIG11Y2ggZGF0YSBhcyBleHBlY3RlZCwgd2UgbmVlZCB0byB0cmltIGJhY2tcbi1cdCAqIHNpemUgb2YgeGF0dHIgY29udGFpbmluZyBpbmxpbmUgZGF0YS5cbi1cdCAqL1xuLVx0aWYgKHBvcyArIGxlbiBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zaXplIFx1MDAyNlx1MDAyNiBleHQ0X2Nhbl90cnVuY2F0ZShpbm9kZSkpXG4tXHRcdGV4dDRfb3JwaGFuX2FkZChoYW5kbGUsIGlub2RlKTtcbi1cbi1cdHJldDIgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuLVx0aWYgKCFyZXQpXG4tXHRcdHJldCA9IHJldDI7XG4tXHRpZiAocG9zICsgbGVuIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbi1cdFx0ZXh0NF90cnVuY2F0ZV9mYWlsZWRfd3JpdGUoaW5vZGUpO1xuLVx0XHQvKlxuLVx0XHQgKiBJZiB0cnVuY2F0ZSBmYWlsZWQgZWFybHkgdGhlIGlub2RlIG1pZ2h0IHN0aWxsIGJlXG4tXHRcdCAqIG9uIHRoZSBvcnBoYW4gbGlzdDsgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGlub2RlXG4tXHRcdCAqIGlzIHJlbW92ZWQgZnJvbSB0aGUgb3JwaGFuIGxpc3QgaW4gdGhhdCBjYXNlLlxuLVx0XHQgKi9cbi1cdFx0aWYgKGlub2RlLVx1MDAzZWlfbmxpbmspXG4tXHRcdFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcbi1cdH1cbi1cdHJldHVybiByZXQgPyByZXQgOiBjb3BpZWQ7XG4tfVxuLVxuLS8qXG4tICogVHJ5IHRvIG1ha2UgdGhlIHBhZ2UgY2FjaGUgYW5kIGhhbmRsZSByZWFkeSBmb3IgdGhlIGlubGluZSBkYXRhIGNhc2UuXG4tICogV2UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiAyIGNhc2VzOlxuLSAqIDEuIFRoZSBpbm9kZSBpcyBjcmVhdGVkIGFuZCB0aGUgZmlyc3Qgd3JpdGUgZXhjZWVkcyBpbmxpbmUgc2l6ZS4gV2UgY2FuXG4tICogICAgY2xlYXIgdGhlIGlub2RlIHN0YXRlIHNhZmVseS5cbi0gKiAyLiBUaGUgaW5vZGUgaGFzIGlubGluZSBkYXRhLCB0aGVuIHdlIG5lZWQgdG8gcmVhZCB0aGUgZGF0YSwgbWFrZSBpdFxuLSAqICAgIHVwZGF0ZSBhbmQgZGlydHkgc28gdGhhdCBleHQ0X2RhX3dyaXRlcGFnZXMgY2FuIGhhbmRsZSBpdC4gV2UgZG9uJ3Rcbi0gKiAgICBuZWVkIHRvIHN0YXJ0IHRoZSBqb3VybmFsIHNpbmNlIHRoZSBmaWxlJ3MgbWV0YWRhdGEgaXNuJ3QgY2hhbmdlZCBub3cuXG4tICovXG4tc3RhdGljIGludCBleHQ0X2RhX2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLVx0XHRcdFx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGludCByZXQgPSAwLCBpbmxpbmVfc2l6ZTtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXG4tXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sXG4tXHRcdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuLVx0aWYgKElTX0VSUihmb2xpbykpXG4tXHRcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcbi1cbi1cdGRvd25fcmVhZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZXhhdHRyX3NlbSk7XG4tXHRpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkge1xuLVx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XG4tXG4tXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XG4tXHRcdHJldCA9IGV4dDRfcmVhZF9pbmxpbmVfZm9saW8oaW5vZGUsIGZvbGlvKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdHJldCA9IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oTlVMTCwgZm9saW8sIDAsIGlubGluZV9zaXplLFxuLVx0XHRcdFx0ICAgICBleHQ0X2RhX2dldF9ibG9ja19wcmVwKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0dXBfcmVhZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZXhhdHRyX3NlbSk7XG4tXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdGV4dDRfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKGlub2RlKTtcbi1cdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbi1cdGNsZWFyX2J1ZmZlcl9uZXcoZm9saW9fYnVmZmVycyhmb2xpbykpO1xuLVx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4tXHRmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcbi1cdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbi1cbi1vdXQ6XG4tXHR1cF9yZWFkKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNleGF0dHJfc2VtKTtcbi1cdGlmIChmb2xpbykge1xuLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0fVxuLVx0cmV0dXJuIHJldDtcbitcdC8qIElubGluZSBkYXRhIGlzIGRlcHJlY2F0ZWQ6IGFsd2F5cyBjb252ZXJ0IHRvIGJsb2NrIGZvcm1hdCAqL1xuK1x0cmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XG4gfVxuIFxuICNpZmRlZiBJTkxJTkVfRElSX0RFQlVHXG5AQCAtMTA3OSwyMyArNjkwLDYgQEAgc3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxuLVx0XHRcdFx0ICAgICB2b2lkICpidWYsIGludCBpbmxpbmVfc2l6ZSlcbi17XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSwgaW5saW5lX3NpemUpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRleHQ0X21zZyhpbm9kZS1cdTAwM2VpX3NiLCBLRVJOX0VNRVJHLFxuLVx0XHRcdFwiZXJyb3IgcmVzdG9yaW5nIGlubGluZV9kYXRhIGZvciBpbm9kZSAtLSBwb3RlbnRpYWwgZGF0YSBsb3NzISAoaW5vZGUgJWxsdSwgZXJyb3IgJWQpXCIsXG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9pbm8sIHJldCk7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cdGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoaW5vZGUsIGlsb2MsIGJ1ZiwgMCwgaW5saW5lX3NpemUpO1xuLVx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbi19XG4tXG4gc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXG5AQCAtMTEwMyw3ICs2OTcsNyBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiBcdGludCBlcnJvcjtcbiBcdHZvaWQgKmJ1ZiA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmggPSBOVUxMO1xuLVx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XG4rXHRleHQ0X2ZzYmxrX3QgcGJsaztcbiBcdGludCBpbmxpbmVfc2l6ZTtcbiBcbiBcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xuQEAgLTExMjksMjUgKzcyMywyMCBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGVycm9yID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlKTtcbitcdC8qXG4rXHQgKiBBbGxvY2F0ZSBhIGRhdGEgYmxvY2sgYW5kIHdyaXRlIHRoZSBpbmxpbmUgZGF0YSB0byBpdCBiZWZvcmVcbitcdCAqIGRlc3Ryb3lpbmcgdGhlIGlubGluZSBkYXRhLiAgVGhpcyBlbnN1cmVzIHRoYXQgb24gZmFpbHVyZSB3ZVxuK1x0ICogY2FuIHNpbXBseSBmcmVlIHRoZSBhbGxvY2F0ZWQgYmxvY2sgd2l0aG91dCBuZWVkaW5nIHRvIHJlc3RvcmVcbitcdCAqIHRoZSBpbmxpbmUgZGF0YS5cbitcdCAqL1xuK1x0cGJsayA9IGV4dDRfbmV3X21ldGFfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIDAsIDAsIE5VTEwsIFx1MDAyNmVycm9yKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRtYXAubV9sYmxrID0gMDtcbi1cdG1hcC5tX2xlbiA9IDE7XG4tXHRtYXAubV9mbGFncyA9IDA7XG4tXHRlcnJvciA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBcdTAwMjZtYXAsIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpO1xuLVx0aWYgKGVycm9yIFx1MDAzYyAwKVxuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuLVx0aWYgKCEobWFwLm1fZmxhZ3MgXHUwMDI2IEVYVDRfTUFQX01BUFBFRCkpIHtcbi1cdFx0ZXJyb3IgPSAtRUlPO1xuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuLVx0fVxuLVxuLVx0ZGF0YV9iaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLCBtYXAubV9wYmxrKTtcbitcdGRhdGFfYmggPSBzYl9nZXRibGsoaW5vZGUtXHUwMDNlaV9zYiwgcGJsayk7XG4gXHRpZiAoIWRhdGFfYmgpIHtcbiBcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuK1x0XHRnb3RvIG91dF9mcmVlX2Jsb2NrO1xuIFx0fVxuIFxuIFx0bG9ja19idWZmZXIoZGF0YV9iaCk7XG5AQCAtMTE1NSw4ICs3NDQsNyBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRcdFx0ICAgICAgIEVYVDRfSlRSX05PTkUpO1xuIFx0aWYgKGVycm9yKSB7XG4gXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRcdGVycm9yID0gLUVJTztcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbitcdFx0Z290byBvdXRfZnJlZV9ibG9jaztcbiBcdH1cbiBcdG1lbXNldChkYXRhX2JoLVx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4gXG5AQCAtMTE2NCwyNiArNzUyLDM4IEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRtZW1jcHkoZGF0YV9iaC1cdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xuIFx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpO1xuIFx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuLVx0XHRlcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSxcbi1cdFx0XHRcdFx0XHQgICBpbm9kZSwgZGF0YV9iaCk7XG4rXHRcdGVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCk7XG4gXHR9IGVsc2Uge1xuIFx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuLVx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuLVx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVxuIFx0XHRlcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBkYXRhX2JoLFxuIFx0XHRcdCAgbGUzMl90b19jcHUoKChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKWJ1ZiktXHUwMDNlaW5vZGUpLFxuIFx0XHRcdCAgYnVmICsgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUsXG4gXHRcdFx0ICBpbmxpbmVfc2l6ZSAtIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFKTtcbi1cdFx0aWYgKCFlcnJvcilcbi1cdFx0XHRlcnJvciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTtcbiBcdH1cbitcdGlmIChlcnJvcilcbitcdFx0Z290byBvdXRfZnJlZV9ibG9jaztcbiBcbi1vdXRfcmVzdG9yZTpcbitcdC8qXG4rXHQgKiBEYXRhIGlzIHNhZmVseSBpbiB0aGUgYWxsb2NhdGVkIGJsb2NrLiAgTm93IGRlc3Ryb3kgdGhlIGlubGluZVxuK1x0ICogZGF0YSBhbmQgcG9wdWxhdGUgdGhlIGV4dGVudCBlbnRyeSBhdG9taWNhbGx5IHVuZGVyIGlfZGF0YV9zZW1cbitcdCAqIChpbnNpZGUgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jaykuICBUaGlzIGVuc3VyZXMgbm9cbitcdCAqIGNvbmN1cnJlbnQgcmVhZGVyIHNlZXMgYW4gZW1wdHkgZXh0ZW50IHRyZWUuXG4rXHQgKi9cbitcdGVycm9yID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlLCBwYmxrKTtcbiBcdGlmIChlcnJvcilcbi1cdFx0ZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlsb2MsIGJ1ZiwgaW5saW5lX3NpemUpO1xuK1x0XHRnb3RvIG91dF9mcmVlX2Jsb2NrO1xuIFxuK1x0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuK1x0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuK1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuK1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuK1x0fVxuK1xuK1x0ZXJyb3IgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4rXHRnb3RvIG91dDtcbitcbitvdXRfZnJlZV9ibG9jazpcbitcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgcGJsaywgMSwgMCk7XG4gb3V0OlxuIFx0YnJlbHNlKGRhdGFfYmgpO1xuIFx0a2ZyZWUoYnVmKTtcbkBAIC0xODIxLDcgKzE0MjEsNyBAQCBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRpbnQgcmV0LCBub19leHBhbmQ7XG4gXG4gXHRleHQ0X3dyaXRlX2xvY2tfeGF0dHIoaW5vZGUsIFx1MDAyNm5vX2V4cGFuZCk7XG4tXHRyZXQgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpO1xuK1x0cmV0ID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlLCAwKTtcbiBcdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcdTAwMjZub19leHBhbmQpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xOTgwLDE4ICsxNTgwLDYgQEAgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0aWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcbiBcdFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuIFx0XHRyZXR1cm4gMDtcbi1cdH0gZWxzZSBpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7XG4tXHRcdC8qXG4tXHRcdCAqIElub2RlIGhhcyBpbmxpbmUgZGF0YSBidXQgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEgaXNcbi1cdFx0ICogY2xlYXJlZC4gVGhpcyBtZWFucyB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBtb3Zpbmcgb2Zcbi1cdFx0ICogaW5saW5lIGRhdGEgdG8gZGVsYXkgYWxsb2NhdGVkIGJsb2NrLiBKdXN0IGZvcmNlIHdyaXRlb3V0XG4tXHRcdCAqIGhlcmUgdG8gZmluaXNoIGNvbnZlcnNpb24uXG4tXHRcdCAqL1xuLVx0XHRlcnJvciA9IGZpbGVtYXBfZmx1c2goaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0aWYgKGVycm9yKVxuLVx0XHRcdHJldHVybiBlcnJvcjtcbi1cdFx0aWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXG4tXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRuZWVkZWRfYmxvY2tzID0gZXh0NF9jaHVua190cmFuc19leHRlbnQoaW5vZGUsIDEpO1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggYWQxNGRkNThhMDAzYjMuLjIyNTZmYjM4MjZhOWRiIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbm9kZS5jXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcbkBAIC0xMzAwLDggKzEzMDAsNiBAQCBzdGF0aWMgaW50IGV4dDRfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0aWYgKHVubGlrZWx5KHJldCkpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHQqZnNkYXRhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKmZzZGF0YSBcdTAwMjYgfkVYVDRfV1JJVEVfREFUQV9JTkxJTkUpO1xuLVxuIFx0dHJhY2VfZXh0NF93cml0ZV9iZWdpbihpbm9kZSwgcG9zLCBsZW4pO1xuIFx0LypcbiBcdCAqIFJlc2VydmUgb25lIGJsb2NrIG1vcmUgZm9yIGFkZGl0aW9uIHRvIG9ycGhhbiBsaXN0IGluIGNhc2VcbkBAIC0xMzEyLDE0ICsxMzEwLDkgQEAgc3RhdGljIGludCBleHQ0X3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdGluZGV4ID0gcG9zIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7XG4tXHRcdHJldCA9IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKG1hcHBpbmcsIGlub2RlLCBwb3MsIGxlbixcbi1cdFx0XHRcdFx0XHQgICAgZm9saW9wKTtcbitcdFx0cmV0ID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRpZiAocmV0ID09IDEpIHtcbi1cdFx0XHQqZnNkYXRhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKmZzZGF0YSB8IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTE0NTIsMTAgKzE0NDUsNiBAQCBzdGF0aWMgaW50IGV4dDRfd3JpdGVfZW5kKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcbiBcdHRyYWNlX2V4dDRfd3JpdGVfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkKTtcbiBcbi1cdGlmICgodW5zaWduZWQgbG9uZylmc2RhdGEgXHUwMDI2IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpXG4tXHRcdHJldHVybiBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChpbm9kZSwgcG9zLCBsZW4sIGNvcGllZCxcbi1cdFx0XHRcdFx0XHQgIGZvbGlvKTtcbi1cbiBcdGNvcGllZCA9IGJsb2NrX3dyaXRlX2VuZChwb3MsIGxlbiwgY29waWVkLCBmb2xpbyk7XG4gXHQvKlxuIFx0ICogaXQncyBpbXBvcnRhbnQgdG8gdXBkYXRlIGlfc2l6ZSB3aGlsZSBzdGlsbCBob2xkaW5nIGZvbGlvIGxvY2s6XG5AQCAtMTU2MSwxMCArMTU1MCw2IEBAIHN0YXRpYyBpbnQgZXh0NF9qb3VybmFsbGVkX3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXG4gXHRCVUdfT04oIWV4dDRfaGFuZGxlX3ZhbGlkKGhhbmRsZSkpO1xuIFxuLVx0aWYgKCh1bnNpZ25lZCBsb25nKWZzZGF0YSBcdTAwMjYgRVhUNF9XUklURV9EQVRBX0lOTElORSlcbi1cdFx0cmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLFxuLVx0XHRcdFx0XHRcdCAgZm9saW8pO1xuLVxuIFx0aWYgKHVubGlrZWx5KGNvcGllZCBcdTAwM2MgbGVuKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSB7XG4gXHRcdGNvcGllZCA9IDA7XG4gXHRcdGV4dDRfam91cm5hbGxlZF96ZXJvX25ld19idWZmZXJzKGhhbmRsZSwgaW5vZGUsIGZvbGlvLFxuQEAgLTMxNzMsMTAgKzMxNTgsNiBAQCBzdGF0aWMgaW50IGV4dDRfZGFfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdFx0XHRcdCAgICAgZm9saW9wLCB0cnVlKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRpZiAocmV0ID09IDEpIHtcbi1cdFx0XHQqZnNkYXRhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKmZzZGF0YSB8IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4gXHR9XG4gXG4gcmV0cnk6XG5AQCAtMzMxMywxMCArMzI5NCw2IEBAIHN0YXRpYyBpbnQgZXh0NF9kYV93cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFxuIFx0dHJhY2VfZXh0NF9kYV93cml0ZV9lbmQoaW5vZGUsIHBvcywgbGVuLCBjb3BpZWQpO1xuIFxuLVx0aWYgKHdyaXRlX21vZGUgXHUwMDI2IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpXG4tXHRcdHJldHVybiBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChpbm9kZSwgcG9zLCBsZW4sIGNvcGllZCxcbi1cdFx0XHRcdFx0XHQgIGZvbGlvKTtcbi1cbiBcdGlmICh1bmxpa2VseShjb3BpZWQgXHUwMDNjIGxlbikgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcbiBcdFx0Y29waWVkID0gMDtcbiBcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDZjMThiNWFkZmZjYTMyLi45OTEzZTMwYjcwNDAwOCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuKysrIGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtMzE0NSw2ICszMTQ1LDEyIEBAIHN0YXRpYyBpbnQgZXh0NF9zZXR1cF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMsXG4gXHRcdGV4dDRfbXNnKHNiLCBLRVJOX1dBUk5JTkcsXG4gXHRcdFx0IFwid2FybmluZzogY2hlY2t0aW1lIHJlYWNoZWQsIFwiXG4gXHRcdFx0IFwicnVubmluZyBlMmZzY2sgaXMgcmVjb21tZW5kZWRcIik7XG4rXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9pbmxpbmVfZGF0YShzYikpXG4rXHRcdGV4dDRfbXNnKHNiLCBLRVJOX1dBUk5JTkcsXG4rXHRcdFx0IFwid2FybmluZzogaW5saW5lX2RhdGEgZmVhdHVyZSBpcyBkZXByZWNhdGVkIGFuZCBcIlxuK1x0XHRcdCBcIndpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBrZXJuZWwgcmVsZWFzZS4gXCJcbitcdFx0XHQgXCJVc2UgJ3R1bmUyZnMgLU8gXmlubGluZV9kYXRhJyB0byBjb252ZXJ0LlwiKTtcbitcbiBcdGlmICghc2JpLVx1MDAzZXNfam91cm5hbClcbiBcdFx0ZXMtXHUwMDNlc19zdGF0ZSBcdTAwMjY9IGNwdV90b19sZTE2KH5FWFQ0X1ZBTElEX0ZTKTtcbiBcdGlmICghKF9fczE2KSBsZTE2X3RvX2NwdShlcy1cdTAwM2VzX21heF9tbnRfY291bnQpKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDA6MTM6NDkuNjkxNTE4MzIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc5ODc1MzM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEV4dDQgSW5saW5lIERhdGEgRGVwcmVjYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQncyBlZmZlY3RpdmVseSBudWtpbmcgdGhlIGBpbmxpbmVfZGF0YWAgZmVhdHVyZSBpbiBleHQ0LiBJdCdzIG5vdCBqdXN0IGEgY2xlYW51cDsgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgZmlsZXN5c3RlbSBjb21wb25lbnQuIFRoZSBpZGVhIGlzIHRvIHN0b3AgKndyaXRpbmcqIG5ldyBpbmxpbmUgZGF0YSB0byByZWd1bGFyIGZpbGVzIGFuZCBjb252ZXJ0IGFueSBleGlzdGluZyBpbmxpbmUgZGF0YSB0byB0aGUgc3RhbmRhcmQgYmxvY2sgZm9ybWF0LiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgXCJmdXp6aW5nIHRhcmdldFwiIHRvIG1lLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGRhdGEgY29ycnVwdGlvbiBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyB0aGVzZSBjb252ZXJzaW9ucyBhbmQgd3JpdGUgb3BlcmF0aW9ucy5cblxuSSBuZWVkIHRvIG5haWwgZG93biB0aGUga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZC4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCB0b3VjaGVzIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCwgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2tgLCBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCwgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAsIGBleHQ0X3dyaXRlX2JlZ2luYCwgYGV4dDRfd3JpdGVfZW5kYCwgYGV4dDRfam91cm5hbGxlZF93cml0ZV9lbmRgLCBgZXh0NF9kYV93cml0ZV9iZWdpbmAsIGBleHQ0X2RhX3dyaXRlX2VuZGAsIGFuZCBgX19leHQ0X25ld19pbm9kZWAuXG5cbkEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIHJldmVhbHMgc29tZXRoaW5nIGludGVyZXN0aW5nOiBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AgaXMgKnN0YXRpYyosIGJ1dCBpdCdzIGNydWNpYWwgYmVjYXVzZSBpdCdzIGNhbGxlZCBieSB0aGUgbm9uLXN0YXRpYyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBhbmQgYGV4dDRfdXBkYXRlX2lubGluZV9kaXJgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBhbmQgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YWAgYXJlIG5vbi1zdGF0aWMgYXMgd2VsbC4gIFRoZSBgZXh0NF93cml0ZV9iZWdpbmAgYW5kIGBleHQ0X2RhX3dyaXRlX2JlZ2luYCB2YXJpYW50cyBhcmUgc3RhdGljLCBidXQgcGFydCBvZiB0aGUgYGV4dDRfYW9wc2AgYW5kIGBleHQ0X2RhX2FvcHNgIHNvIHRoZXkgYXJlIHN0aWxsIHRhcmdldHMuXG5cbk5vdywgbXkgZm9jdXMgbmFycm93czogSSB3YW50IGEgZGVlcGVyIGxvb2sgYXQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAsIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgIGFuZCBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGhhbmRsaW5nIHRoZSBjb252ZXJzaW9uIGFuZCBwb3RlbnRpYWwgd3JpdGluZyBvciByZW1vdmFsLlxuXG5CZWZvcmUgZGl2aW5nIGludG8gYSBkZXRhaWxlZCBjb2RlIHJldmlldywgSSBzaG91bGQgdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWUgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBhbmQgdXNlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjYWxsIGdyYXBocyBhbmQgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMDoxMzo1OC40OTAyNzUzNzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNTkzMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfY29udmVydF9pbmxpbmVfZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2NyeXB0by5jPTEzMj1zdGF0aWMgaW50IGV4dDRfc2V0X2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqY3R4LCBzaXplX3QgbGVuLFxcbi0tXFxuZnMvZXh0NC9jcnlwdG8uYy0xNTItXFxuZnMvZXh0NC9jcnlwdG8uYzoxNTM6XFx0cmVzID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcXG5mcy9leHQ0L2NyeXB0by5jLTE1NC1cXHRpZiAocmVzKVxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9Mzc5OD1leHRlcm4gaW50IGV4dDRfaW5saW5lX2RhdGFfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpoYXNfaW5saW5lKTtcXG5mcy9leHQ0L2V4dDQuaC0zNzk5LVxcbmZzL2V4dDQvZXh0NC5oOjM4MDA6ZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvZXh0NC9leHQ0LmgtMzgwMS1cXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ4Nzk9bG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00OTA4LVxcdGlub2RlX2xvY2soaW5vZGUpO1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5MDk6XFx0cmV0ID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcXG5mcy9leHQ0L2V4dGVudHMuYy00OTEwLVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTU0Nj1pbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy01NTItXFx0LyogSW5saW5lIGRhdGEgaXMgZGVwcmVjYXRlZDogYWx3YXlzIGNvbnZlcnQgdG8gYmxvY2sgZm9ybWF0ICovXFxuZnMvZXh0NC9pbmxpbmUuYzo1NTM6XFx0cmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XFxuZnMvZXh0NC9pbmxpbmUuYy01NTQtfVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz02NzE9c3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy02OTItXFxuZnMvZXh0NC9pbmxpbmUuYzo2OTM6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvZXh0NC9pbmxpbmUuYy02OTQtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9Nzk4PWludCBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtODUwLVxcdCAqL1xcbmZzL2V4dDQvaW5saW5lLmM6ODUxOlxcdHJldCA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBkaXIsIFxcdTAwMjZpbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jLTg1Mi1cXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTQ2Mj1pbnQgZXh0NF9pbmxpbmVfZGF0YV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmhhc19pbmxpbmUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE1NzMtXFxuZnMvZXh0NC9pbmxpbmUuYzoxNTc0OmludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L2lubGluZS5jLTE1NzUte1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNTk5LVxcdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXFxuZnMvZXh0NC9pbmxpbmUuYzoxNjAwOlxcdFxcdGVycm9yID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNjAxLVxcdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcXHUwMDI2bm9fZXhwYW5kKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0xMjg2PXN0YXRpYyBpbnQgZXh0NF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMTMxMi1cXHRpZiAoZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpIHtcXG5mcy9leHQ0L2lub2RlLmM6MTMxMzpcXHRcXHRyZXQgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xcbmZzL2V4dDQvaW5vZGUuYy0xMzE0LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTU5OTg9aW50IGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTYwOTUtXFx0XFx0ICAgIGF0dHItXFx1MDAzZWlhX3NpemUgXFx1MDAzZSBFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2lubGluZV9zaXplKSB7XFxuZnMvZXh0NC9pbm9kZS5jOjYwOTY6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xcbmZzL2V4dDQvaW5vZGUuYy02MDk3LVxcdFxcdFxcdGlmIChlcnJvcilcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz02ODYxPXZtX2ZhdWx0X3QgZXh0NF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNjg4Mi1cXG5mcy9leHQ0L2lub2RlLmM6Njg4MzpcXHRlcnIgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xcbmZzL2V4dDQvaW5vZGUuYy02ODg0LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L3Zlcml0eS5jPTEwMj1zdGF0aWMgaW50IGV4dDRfYmVnaW5fZW5hYmxlX3Zlcml0eShzdHJ1Y3QgZmlsZSAqZmlscClcXG4tLVxcbmZzL2V4dDQvdmVyaXR5LmMtMTI4LVxcbmZzL2V4dDQvdmVyaXR5LmM6MTI5OlxcdGVyciA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XFxuZnMvZXh0NC92ZXJpdHkuYy0xMzAtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDA6MTM6NTguNjAzOTMyODM3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0Mzg5NjQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEV4dDQgSW5saW5lIERhdGEgRGVwcmVjYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyB0aGUgZGVwcmVjYXRpb24gb2YgYGlubGluZV9kYXRhYCBmb3Igc3RhbmRhcmQgZmlsZXMgaW4gZXh0NC4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBpdCdzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLCBidXQgdGhlIGltcGxpY2F0aW9ucyBuZWVkIGEgY2xvc2UgbG9vay4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gaW52b2x2ZSByZXBsYWNpbmcgdGhlIGlubGluZSBkYXRhIGhhbmRsaW5nIHdpdGggYSBzdGFuZGFyZCBibG9jayBhbGxvY2F0aW9uIGFuZCB3cml0ZSBwcm9jZXNzIHdpdGhpbiBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIFRoYXQgbWFrZXMgc2Vuc2U7IG1vdmluZyBkYXRhIG91dCBvZiB0aGUgaW5vZGUgYW5kIGludG8gcmVndWxhciBibG9ja3MgaXMgdGhlIGV4cGVjdGVkIGFwcHJvYWNoIGZvciBkZXByZWNhdGlvbi5cblxuVGhlbiwgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2tgIGlzIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBjbGVhbnVwIHVzaW5nIGEgcGh5c2ljYWwgYmxvY2sgKGBwYmxrYCkgYW5kIGVpdGhlciBwb3B1bGF0ZSB0aGUgZXh0ZW50IHRyZWUgb3IgYW4gaW5kaXJlY3QgYmxvY2sgZGlyZWN0bHkuIFRoYXQncyBhIGtleSBjaGFuZ2UsIGFuZCBpdCBhbGlnbnMgd2l0aCB0aGUgZGF0YSBub3cgcmVzaWRpbmcgaW4gc3RhbmRhcmQgYmxvY2tzLlxuXG5UaGUgdGhyZWUgZnVuY3Rpb25zLCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCwgYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAsIGFuZCBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhYCBhcmUgc3Ryb25nIGNhbmRpZGF0ZXMgZm9yIHVzaW5nIGBGb2N1c1N5bWJvbHNgLiBUaGV5IGFyZSB0aGUgbWFpbiB0b3VjaHBvaW50cyBvZiB0aGlzIGRlcHJlY2F0aW9uLCBzbyB0aGV5J3JlIHRoZSBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBpZiBJIHdhbnQgdG8gdGhvcm91Z2hseSByZXZpZXcgdGhpcy5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zLiBXZSBhbGwga25vdyBgQ09ORklHX0VYVDRfRlNgIGVuYWJsZXMgZXh0NCwgc28gdGhhdCdzIHRoZSBiYXNlLiBCdXQgaXMgdGhlcmUgYSBzZXBhcmF0ZSBDT05GSUcgb3B0aW9uIHNwZWNpZmljYWxseSBmb3IgKmlubGluZSogZGF0YT8gSWYgdGhlcmUgaXMsIGl0IHdpbGwgYmUgY3JpdGljYWwgZm9yIGFzc2Vzc2luZyB0aGUgaW1wYWN0IGFuZCBwb3RlbnRpYWwgY29tcGlsZS10aW1lIGVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UuIEkgbmVlZCB0byB0cmFjayBkb3duIGFueSBjb25maWcgZGVwZW5kZW5jaWVzIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDcwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAwOjE0OjAzLjU0Nzg0MTk3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTczMDMyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfRVhUNFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0Ly5rdW5pdGNvbmZpZz0xPUNPTkZJR19LVU5JVD15XFxuZnMvZXh0NC8ua3VuaXRjb25maWc6MjpDT05GSUdfRVhUNF9GUz15XFxuZnMvZXh0NC8ua3VuaXRjb25maWc6MzpDT05GSUdfRVhUNF9LVU5JVF9URVNUUz15XFxuLS1cXG5mcy9leHQ0L01ha2VmaWxlLTUtXFxuZnMvZXh0NC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19FWFQ0X0ZTKSArPSBleHQ0Lm9cXG5mcy9leHQ0L01ha2VmaWxlLTctXFxuZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG4tLVxcbmZzL2V4dDQvTWFrZWZpbGUtMTQtXFxuZnMvZXh0NC9NYWtlZmlsZToxNTpleHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVxcdCs9IGFjbC5vXFxuZnMvZXh0NC9NYWtlZmlsZToxNjpleHQ0LSQoQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkpXFx0XFx0Kz0geGF0dHJfc2VjdXJpdHkub1xcbmZzL2V4dDQvTWFrZWZpbGUtMTctZXh0NC10ZXN0LW9ianNcXHRcXHRcXHRcXHQrPSBpbm9kZS10ZXN0Lm8gbWJhbGxvYy10ZXN0Lm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTgtXFx0XFx0XFx0XFx0XFx0ICAgZXh0ZW50cy10ZXN0Lm8gaGFzaC10ZXN0Lm9cXG5mcy9leHQ0L01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxcdFxcdCs9IGV4dDQtdGVzdC5vXFxuZnMvZXh0NC9NYWtlZmlsZS0yMC1leHQ0LSQoQ09ORklHX0ZTX1ZFUklUWSlcXHRcXHQrPSB2ZXJpdHkub1xcbi0tXFxuZnMvZXh0NC9hY2wuaD0zOT1zdGF0aWMgaW5saW5lIGludCBleHQ0X2FjbF9jb3VudChzaXplX3Qgc2l6ZSlcXG4tLVxcbmZzL2V4dDQvYWNsLmgtNTQtXFxuZnMvZXh0NC9hY2wuaDo1NTojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9hY2wuaC01Ni1cXG4tLVxcbmZzL2V4dDQvYWNsLmg9NjE9ZXh0ZXJuIGludCBleHQ0X2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7XFxuZnMvZXh0NC9hY2wuaC02Mi1cXG5mcy9leHQ0L2FjbC5oOjYzOiNlbHNlICAvKiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgKi9cXG5mcy9leHQ0L2FjbC5oLTY0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbi0tXFxuZnMvZXh0NC9hY2wuaD02OT1leHQ0X2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKVxcbi0tXFxuZnMvZXh0NC9hY2wuaC03Mi19XFxuZnMvZXh0NC9hY2wuaDo3MzojZW5kaWYgIC8qIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCAqL1xcbmZzL2V4dDQvYWNsLmgtNzQtXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC05MS0gKi9cXG5mcy9leHQ0L2V4dDQuaDo5MjojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L2V4dDQuaC05My0jZGVmaW5lIGV4dF9kZWJ1Zyhpbm8sIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTE1OTI9c3RydWN0IGV4dDRfc2JfaW5mbyB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xODA2LVxcdHU2NCBzX2RheF9wYXJ0X29mZjtcXG5mcy9leHQ0L2V4dDQuaDoxODA3OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvZXh0NC5oLTE4MDgtXFx0dW5zaWduZWQgbG9uZyBzX3NpbXVsYXRlX2ZhaWw7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xODY5LVxcdHRpZF90IHNfZmNfaW5lbGlnaWJsZV90aWQ7XFxuZnMvZXh0NC9leHQ0Lmg6MTg3MDojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L2V4dDQuaC0xODcxLVxcdGludCBzX2ZjX2RlYnVnX21heF9yZXBsYXk7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0xOTk0PXN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X3NpbXVsYXRlX2ZhaWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTE5OTYte1xcbmZzL2V4dDQvZXh0NC5oOjE5OTc6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9leHQ0LmgtMTk5OC1cXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTQwNDU9ZXh0ZXJuIGludCBleHQ0X2Jsb2NrX3dyaXRlX2JlZ2luKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC00MDQ4LVxcbmZzL2V4dDQvZXh0NC5oOjQwNDk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXFxuZnMvZXh0NC9leHQ0LmgtNDA1MC0jZGVmaW5lIEVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChzeW0pIFxcXFxcXG4tLVxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmg9MjcwPWV4dGVybiBpbnQgZXh0NF9leHRfemVyb291dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4KTtcXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oOjI3MTojaWYgSVNfRU5BQkxFRChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTI3Mi1leHRlcm4gaW50IGV4dDRfZXh0X3NwYWNlX3Jvb3RfaWR4X3Rlc3Qoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGNoZWNrKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTYyNTI9aW50IGV4dDRfZXh0X2NsZWFyX2JiKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy02MzAzLVxcbmZzL2V4dDQvZXh0ZW50cy5jOjYzMDQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXFxuZnMvZXh0NC9leHRlbnRzLmMtNjMwNS1pbnQgZXh0NF9leHRfc3BhY2Vfcm9vdF9pZHhfdGVzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2hlY2spXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjU3MD1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5KGpvdXJuYWxfdCAqam91cm5hbCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTk1LVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTk2OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTk3LVxcdGlmIChzYmktXFx1MDAzZXNfZmNfZGVidWdfbWF4X3JlcGxheSBcXHUwMDI2XFx1MDAyNiBvZmYgXFx1MDAzZT0gc2JpLVxcdTAwM2VzX2ZjX2RlYnVnX21heF9yZXBsYXkpIHtcXG4tLVxcbmZzL2V4dDQvaGFzaC5jPTMxND1pbnQgZXh0NGZzX2Rpcmhhc2goY29uc3Qgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sXFxuLS1cXG5mcy9leHQ0L2hhc2guYy0zNDQtXFxuZnMvZXh0NC9oYXNoLmM6MzQ1OiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxcbmZzL2V4dDQvaGFzaC5jLTM0Ni1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NGZzX2Rpcmhhc2gpO1xcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYz04NzY9c3RhdGljIGludCBleHQ0X3hhdHRyX2NyZWRpdHNfZm9yX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgbW9kZV90IG1vZGUsXFxuLS1cXG5mcy9leHQ0L2lhbGxvYy5jLTg4MC1cXHRpbnQgbmJsb2NrcyA9IDA7XFxuZnMvZXh0NC9pYWxsb2MuYzo4ODE6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvaWFsbG9jLmMtODgyLVxcdHN0cnVjdCBwb3NpeF9hY2wgKnAgPSBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVCk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDA5PWludCBleHQ0X2lzc3VlX3plcm9vdXQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsaywgZXh0NF9mc2Jsa190IHBibGssXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNDMzLSAqL1xcbmZzL2V4dDQvaW5vZGUuYzo0MzQ6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9pbm9kZS5jLTQzNS12b2lkIGV4dDRfY2hlY2tfbWFwX2V4dGVudHNfZW52KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz01NzI5PXN0YXRpYyB2b2lkIGV4dDRfbWJfcGFfcHV0X2ZyZWUoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTU3NDQtXFxuZnMvZXh0NC9tYmFsbG9jLmM6NTc0NTojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L21iYWxsb2MuYy01NzQ2LXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X21iX3Nob3dfcGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTcxMzA9ZXh0NF9tYmFsbG9jX3F1ZXJ5X3JhbmdlKFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNzE4NS1cXG5mcy9leHQ0L21iYWxsb2MuYzo3MTg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxcbmZzL2V4dDQvbWJhbGxvYy5jLTcxODctdm9pZCBtYl9jbGVhcl9iaXRzX3Rlc3Qodm9pZCAqYm0sIGludCBjdXIsIGludCBsZW4pXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuaC0yOC0gKi9cXG5mcy9leHQ0L21iYWxsb2MuaDoyOTojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L21iYWxsb2MuaC0zMC0jZGVmaW5lIG1iX2RlYnVnKHNiLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuaD0yNzM9ZXh0ZXJuIGludCBleHQ0X21iX21hcmtfY29udGV4dChoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmgtMjc3LVxcdFxcdGV4dDRfZ3JwYmxrX3QgKnJldF9jaGFuZ2VkKTtcXG5mcy9leHQ0L21iYWxsb2MuaDoyNzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXFxuZnMvZXh0NC9tYmFsbG9jLmgtMjc5LWV4dGVybiB2b2lkIG1iX2NsZWFyX2JpdHNfdGVzdCh2b2lkICpibSwgaW50IGN1ciwgaW50IGxlbik7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGV4dDRfY29udGV4dF9vcHMgPSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTMyLVxcbmZzL2V4dDQvc3VwZXIuYzoxMzM6I2lmICFkZWZpbmVkKENPTkZJR19FWFQyX0ZTKSBcXHUwMDI2XFx1MDAyNiAhZGVmaW5lZChDT05GSUdfRVhUMl9GU19NT0RVTEUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyKVxcbmZzL2V4dDQvc3VwZXIuYy0xMzQtc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDJfZnNfdHlwZSA9IHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xNzAwPWVudW0ge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE3MjMtXFx0T3B0X2Vycm9ycywgT3B0X2RhdGEsIE9wdF9kYXRhX2VyciwgT3B0X2pxZm10LCBPcHRfZGF4X3R5cGUsXFxuZnMvZXh0NC9zdXBlci5jOjE3MjQ6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zdXBlci5jLTE3MjUtXFx0T3B0X2ZjX2RlYnVnX21heF9yZXBsYXksIE9wdF9mY19kZWJ1Z19mb3JjZVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE3NzA9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBleHQ0X3BhcmFtX3NwZWNzW10gPSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTg0My1cXHRmc3BhcmFtX2ZsYWdcXHQoXFxcIm5vaW5pdF9pdGFibGVcXFwiLFxcdE9wdF9ub2luaXRfaXRhYmxlKSxcXG5mcy9leHQ0L3N1cGVyLmM6MTg0NDojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L3N1cGVyLmMtMTg0NS1cXHRmc3BhcmFtX2ZsYWdcXHQoXFxcImZjX2RlYnVnX2ZvcmNlXFxcIixcXHRPcHRfZmNfZGVidWdfZm9yY2UpLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE4ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xOTMwLVxcdHtPcHRfdXNlcl94YXR0ciwgRVhUNF9NT1VOVF9YQVRUUl9VU0VSLCBNT1BUX1NFVH0sXFxuZnMvZXh0NC9zdXBlci5jOjE5MzE6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvc3VwZXIuYy0xOTMyLVxcdHtPcHRfYWNsLCBFWFQ0X01PVU5UX1BPU0lYX0FDTCwgTU9QVF9TRVR9LFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE5NTMtXFx0IE1PUFRfU0VUfSxcXG5mcy9leHQ0L3N1cGVyLmM6MTk1NDojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L3N1cGVyLmMtMTk1NS1cXHR7T3B0X2ZjX2RlYnVnX2ZvcmNlLCBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlULFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTIwMDU9c3RydWN0IGV4dDRfZnNfY29udGV4dCB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjAwOC1cXHRpbnRcXHRcXHRzX2pxdW90YV9mbXQ7XFx0LyogRm9ybWF0IG9mIHF1b3RhIHRvIHVzZSAqL1xcbmZzL2V4dDQvc3VwZXIuYzoyMDA5OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvc3VwZXIuYy0yMDEwLVxcdGludCBzX2ZjX2RlYnVnX21heF9yZXBsYXk7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MjE3OT1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMzE0LVxcdFxcdHJldHVybiAwO1xcbmZzL2V4dDQvc3VwZXIuYzoyMzE1OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvc3VwZXIuYy0yMzE2LVxcdGNhc2UgT3B0X2ZjX2RlYnVnX21heF9yZXBsYXk6XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9Mjg2Mz1zdGF0aWMgdm9pZCBleHQ0X2FwcGx5X29wdGlvbnMoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTI4ODYtXFxuZnMvZXh0NC9zdXBlci5jOjI4ODc6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zdXBlci5jLTI4ODgtXFx0QVBQTFkoc19mY19kZWJ1Z19tYXhfcmVwbGF5KTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00NDAyPXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDQxNy1cXHRzZXRfb3B0KHNiLCBYQVRUUl9VU0VSKTtcXG5mcy9leHQ0L3N1cGVyLmM6NDQxODojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9zdXBlci5jLTQ0MTktXFx0c2V0X29wdChzYiwgUE9TSVhfQUNMKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz03NDAzPXN0YXRpYyBzc2l6ZV90IGV4dDRfcXVvdGFfd3JpdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNzQ2My1cXG5mcy9leHQ0L3N1cGVyLmM6NzQ2NDojaWYgIWRlZmluZWQoQ09ORklHX0VYVDJfRlMpIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkKENPTkZJR19FWFQyX0ZTX01PRFVMRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIpXFxuZnMvZXh0NC9zdXBlci5jLTc0NjUtc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX2FzX2V4dDIodm9pZClcXG4tLVxcbmZzL2V4dDQvc3lzZnMuYz0yNjY9RVhUNF9SV19BVFRSX1NCSV9QSShtc2dfcmF0ZWxpbWl0X2J1cnN0LCBzX21zZ19yYXRlbGltaXRfc3RhdGUuYnVyc3QpO1xcbmZzL2V4dDQvc3lzZnMuYzoyNjc6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zeXNmcy5jLTI2OC1FWFQ0X1JXX0FUVFJfU0JJX1VMKHNpbXVsYXRlX2ZhaWwsIHNfc2ltdWxhdGVfZmFpbCk7XFxuLS1cXG5mcy9leHQ0L3N5c2ZzLmM9Mjk1PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpleHQ0X2F0dHJzW10gPSB7XFxuLS1cXG5mcy9leHQ0L3N5c2ZzLmMtMzM1LVxcdEFUVFJfTElTVChqb3VybmFsX3Rhc2spLFxcbmZzL2V4dDQvc3lzZnMuYzozMzY6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zeXNmcy5jLTMzNy1cXHRBVFRSX0xJU1Qoc2ltdWxhdGVfZmFpbCksXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9ODg9c3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyX21hcFtdID0ge1xcbmZzL2V4dDQveGF0dHIuYy04OS1cXHRbRVhUNF9YQVRUUl9JTkRFWF9VU0VSXVxcdFxcdCAgICAgPSBcXHUwMDI2ZXh0NF94YXR0cl91c2VyX2hhbmRsZXIsXFxuZnMvZXh0NC94YXR0ci5jOjkwOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L3hhdHRyLmMtOTEtXFx0W0VYVDRfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTU10gID0gXFx1MDAyNm5vcF9wb3NpeF9hY2xfYWNjZXNzLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTk0LVxcdFtFWFQ0X1hBVFRSX0lOREVYX1RSVVNURURdXFx0ICAgICA9IFxcdTAwMjZleHQ0X3hhdHRyX3RydXN0ZWRfaGFuZGxlcixcXG5mcy9leHQ0L3hhdHRyLmM6OTU6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC94YXR0ci5jLTk2LVxcdFtFWFQ0X1hBVFRSX0lOREVYX1NFQ1VSSVRZXVxcdCAgICAgPSBcXHUwMDI2ZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTEwMT1jb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDMtXFx0XFx1MDAyNmV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLFxcbmZzL2V4dDQveGF0dHIuYzoxMDQ6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC94YXR0ci5jLTEwNS1cXHRcXHUwMDI2ZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5oPTIwOD1fX3hhdHRyX2NoZWNrX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2hlYWRlciAqaGVhZGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5oLTIxMy1cXG5mcy9leHQ0L3hhdHRyLmg6MjE0OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQveGF0dHIuaC0yMTUtZXh0ZXJuIGludCBleHQ0X2luaXRfc2VjdXJpdHkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDA6MTQ6MDMuNjMzNTgyNDA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIyMDQ0OTI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEVYVDQncyBJbmxpbmUgRGF0YSBDb252ZXJzaW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgdGhlIEVYVDQgZmlsZSBzeXN0ZW0ncyBpbmxpbmUgZGF0YSBmZWF0dXJlcy4gVGhlIGNvcmUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudCBpcyBgRVhUNF9GU2AsIG5hdHVyYWxseS4gTGV0J3Mgc2VlIHdoYXQgZWxzZSBwb3BzIHVwLiBSaWdodCwgdGhlIGBpbmxpbmVfZGF0YWAgZmVhdHVyZSBpcyBpbnRlZ3JhbCB0byBFWFQ0J3Mgb3BlcmF0aW9uLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBpdHMgbGlmZWN5Y2xlOiBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBhbmQgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YWAuIExvb2tpbmcgYXQgd2hlcmUgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgaXMgdXNlZCBpcyB1c2VmdWwuIEl0J3MgZXhwb3J0ZWQsIGFuZCBJIHNlZSBpdCBjYWxsZWQgZnJvbSBzZXZlcmFsIGltcG9ydGFudCBhcmVhczogYGV4dDRfc2V0YXR0cmAsIGBleHQ0X3BhZ2VfbWt3cml0ZWAsIGBleHQ0X2ZhbGxvY2F0ZWAsIGFuZCBgZXh0NF9iZWdpbl9lbmFibGVfdmVyaXR5YC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGVzZSBhcmUgaGlnaC12YWx1ZSB0YXJnZXRzIGZvciBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBhbHNvIGluY2x1ZGUgYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAsIHdoaWNoIHNlZW1zIHJlbGV2YW50LCBhbmQgZXZlbiBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AgKGFsdGhvdWdoIGl0J3Mgc3RhdGljIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMgZW50cnlwb2ludHMpLCBidXQgbGV0J3Mgc3RpY2sgdG8gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciBub3cuXG5cblRoZXJlZm9yZSwgdGhlIGJlc3QgY2FuZGlkYXRlcyB0byBmdXp6IGFyZTpcblxuKiAgIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgXG4qICAgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YWBcblxuT2theSwgbGV0J3MgZG91YmxlLWNoZWNrIGhvdyBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBmaXRzIGluLiBJdCAqYXBwZWFycyogdG8gYmUgY2FsbGVkIGZyb20gYGV4dDRfZGFfd3JpdGVfYmVnaW5gLiBXYWl0LCBpcyBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBleHBvcnRlZD8gTGV0IG1lIGRvdWJsZS1jaGVjay4gSXQncyBhY3R1YWxseSBpbiBgZnMvZXh0NC9pbmxpbmUuY2AgYW5kIGRlY2xhcmVkIGluIGBmcy9leHQ0L2V4dDQuaGAuIFNvIGxldCdzIGRvdWJsZS1jaGVjayBgZnMvZXh0NC9leHQ0LmhgIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzQ1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAwOjE0OjA5Ljg1NDAzNjA3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk1NzI3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM3NjA9aW50IGV4dDRfcmVhZHBhZ2VfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmZzL2V4dDQvZXh0NC5oOjM3NjE6ZXh0ZXJuIGludCBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvZXh0NC9leHQ0LmgtMzc2Mi1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTUxMT1pbnQgZXh0NF9yZWFkcGFnZV9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNTQ1LSAqL1xcbmZzL2V4dDQvaW5saW5lLmM6NTQ2OmludCBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvZXh0NC9pbmxpbmUuYy01NDctXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTMxMzI9c3RhdGljIGludCBleHQ0X2RhX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0zMTU2LVxcdGlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSkge1xcbmZzL2V4dDQvaW5vZGUuYzozMTU3OlxcdFxcdHJldCA9IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXFxuZnMvZXh0NC9pbm9kZS5jLTMxNTgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmb2xpb3AsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMDoxNDoxMC4wMDM2MTUzNTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzE1OTU3MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRVhUNCBJbmxpbmUgRGF0YSBXcml0ZSBQYXRoKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBpcyBpbmRlZWQgY2FsbGVkIGZyb20gYGV4dDRfZGFfd3JpdGVfYmVnaW5gLCB3aGljaCBhbGlnbnMgd2l0aCBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcuIEJ1dCBob2xkIG9uLCB0aGUgcGF0Y2ggbm90ZXMgc29tZXRoaW5nIGludGVyZXN0aW5nOiBgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGFgIHdhcyByZW1vdmVkLiBIbW0sIGluc3RlYWQsIHRoZSBwYXRjaCBub3cgY2FsbHMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgd2l0aGluIGBleHQ0X3dyaXRlX2JlZ2luYC4gIExldCBtZSBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGNvZGUgc25pcHBldCBmcm9tIHRoZSBwYXRjaDpcblxuYGBgY1xuIFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7XG4tXHRcdHJldCA9IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKG1hcHBpbmcsIGlub2RlLCBwb3MsIGxlbixcbi1cdFx0XHRcdFx0XHQgICAgZm9saW9wKTtcbitcdFx0cmV0ID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRpZiAocmV0ID09IDEpIHtcbi1cdFx0XHQqZnNkYXRhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKmZzZGF0YSB8IEVYVDRfV1JJVEVfREFUQV9JTkxJTkUpO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4gXHR9XG5gYGBcblxuUmlnaHQsIGl0J3MgY2xlYXI6IGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgIGhhcyB0YWtlbiBvdmVyLiBUaGlzIG1lYW5zIHRoYXQgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgYSBrZXkgZm9jdXMgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIG5vdyB3b3Jrcy4gQWxzbywgSSBzZWUgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YWAgaGFzIGJlZW4gbW9kaWZpZWQsIGFuZCB0aGF0IG1vZGlmaWNhdGlvbiBpcyBkb25lIHZpYSBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9ja2AsIHNvIHRoYXQgbG9va3MgbGlrZSBhbm90aGVyIGFyZWEgb2YgaW50ZXJlc3QuIE5vdywgSSBzaG91bGQgZGl2ZSBpbnRvIHRoZSBgZnMvZXh0NC9pbmxpbmUuY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YWAgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTM4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAwOjE0OjE1LjMxOTU3NTY2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTM3ODMxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9Mzc1Nj1leHRlcm4gaW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvZXh0NC9leHQ0Lmg6Mzc1NzpleHRlcm4gaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9leHQ0L2V4dDQuaC0zNzU4LWV4dGVybiB2b2lkIGV4dDRfdXBkYXRlX2ZpbmFsX2RlKHZvaWQgKmRlX2J1ZiwgaW50IG9sZF9zaXplLCBpbnQgbmV3X3NpemUpO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0zNTg9c3RhdGljIGludCBleHQ0X3ByZXBhcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMzg2LVxcbmZzL2V4dDQvaW5saW5lLmM6Mzg3OnN0YXRpYyBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL2V4dDQvaW5saW5lLmMtMzg4LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTY5Mz1zdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNzY4LVxcdCAqIGRhdGEgYW5kIHBvcHVsYXRlIHRoZSBleHRlbnQgZW50cnkgYXRvbWljYWxseSB1bmRlciBpX2RhdGFfc2VtXFxuZnMvZXh0NC9pbmxpbmUuYzo3Njk6XFx0ICogKGluc2lkZSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKS4gIFRoaXMgZW5zdXJlcyBub1xcbmZzL2V4dDQvaW5saW5lLmMtNzcwLVxcdCAqIGNvbmN1cnJlbnQgcmVhZGVyIHNlZXMgYW4gZW1wdHkgZXh0ZW50IHRyZWUuXFxuZnMvZXh0NC9pbmxpbmUuYy03NzEtXFx0ICovXFxuZnMvZXh0NC9pbmxpbmUuYzo3NzI6XFx0ZXJyb3IgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUsIHBibGspO1xcbmZzL2V4dDQvaW5saW5lLmMtNzczLVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTM1Nj1ib29sIGVtcHR5X2lubGluZV9kaXIoc3RydWN0IGlub2RlICpkaXIsIGludCAqaGFzX2lubGluZV9kYXRhKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNDE4LVxcbmZzL2V4dDQvaW5saW5lLmM6MTQxOTppbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9pbmxpbmUuYy0xNDIwLXtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTQyMy1cXHRleHQ0X3dyaXRlX2xvY2tfeGF0dHIoaW5vZGUsIFxcdTAwMjZub19leHBhbmQpO1xcbmZzL2V4dDQvaW5saW5lLmM6MTQyNDpcXHRyZXQgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUsIDApO1xcbmZzL2V4dDQvaW5saW5lLmMtMTQyNS1cXHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXFx1MDAyNm5vX2V4cGFuZCk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9Mjc3Mj1zdGF0aWMgaW50IGV4dDRfZG9fd3JpdGVwYWdlcyhzdHJ1Y3QgbXBhZ2VfZGFfZGF0YSAqbXBkKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTI4MjQtXFx0XFx0XFx0XFx0RVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKTtcXG5mcy9leHQ0L2lub2RlLmM6MjgyNTpcXHRcXHRleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSk7XFxuZnMvZXh0NC9pbm9kZS5jLTI4MjYtXFx0XFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDA6MTQ6MTUuNDE0OTYwNzM4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODI2ODIzMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUGxhbiBmb3IgSW5saW5lIERhdGEgRGVwcmVjYXRpb24gaW4gZXh0NCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBkZXByZWNhdGVzIGlubGluZSBkYXRhIGZvciByZWd1bGFyIGZpbGVzIGluIGV4dDQuIFRoZSBwcmltYXJ5IGdvYWwgaXMgdG8gZm9yY2UgY29udmVyc2lvbiB0byBibG9jay1iYXNlZCBzdG9yYWdlIHdoZW5ldmVyIGEgd3JpdGUgb3BlcmF0aW9uIG9jY3Vycy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgd3JpdGUgcGF0aHMgYW5kIGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMsIHRoZXJlZm9yZSwgSSBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgdGhpcyBhcmVhLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjYWxscy4gSSBzZWUgYGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YWAgY2FsbGVkIGZyb20gYGV4dDRfZG9fd3JpdGVwYWdlc2AsIGFuZCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBpcyBjYWxsZWQgZnJvbSBhIG51bWJlciBvZiBwbGFjZXM6IGBleHQ0X3dyaXRlX2JlZ2luYCwgYGV4dDRfc2V0YXR0cmAsIGBleHQ0X3BhZ2VfbWt3cml0ZWAsIGBleHQ0X2ZhbGxvY2F0ZWAsIGFuZCBgZXh0NF9iZWdpbl9lbmFibGVfdmVyaXR5YC4gQWxzbywgSSd2ZSBnb3QgYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAgY2FsbGVkIGZyb20gYGV4dDRfZGFfd3JpdGVfYmVnaW5gLlxuXG5UaGUgY29yZSBmdW5jdGlvbiB0byBmb2N1cyBvbiBzZWVtcyB0byBiZSBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCwgYXMgdGhlIHBhdGNoIGlzIGRlcHJlY2F0aW5nIGFuZCBmb3JjaW5nIGNvbnZlcnNpb24gZnJvbSBpbmxpbmUgZGF0YS4gSSBhbHNvIGhhdmUgYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAgd2hpY2ggc2VlbXMgdG8gYmUgYSBzaW1wbGUgd3JhcHBlciBub3cgYW5kIGp1c3QgY2FsbHMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSlgLiBJJ2xsIGtlZXAgdGhpcyBhcyBhIGZ1enogdGFyZ2V0IGFzIGFuIGVudHJ5IHBvaW50LiBUaGVuIHRoZXJlIGlzIGBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFgLCB3aGljaCBJIHdpbGwgYWxzbyBmb2N1cyBvbi5cblxuU28sIGZvciB0aGUgY29uZmlndXJhdGlvbnMsIHRoZSBvbmx5IG5lY2Vzc2FyeSBvbmUgc2VlbXMgdG8gYmUgYEVYVDRfRlNgLiBJJ3ZlIGNoZWNrZWQgdGhlIG1vZGlmaWVkIGZpbGVzIChgZnMvZXh0NC9pbmxpbmUuY2AsIGBmcy9leHQ0L2lub2RlLmNgLCBgZnMvZXh0NC9pYWxsb2MuY2AsIGBmcy9leHQ0L3N1cGVyLmNgLCBgZnMvZXh0NC9leHQ0LmhgKSDigJMgYWxsIG9mIHRoZW0gYXJlIHdpdGhpbiB0aGUgYENPTkZJR19FWFQ0X0ZTYCBzY29wZS5cblxuTm93LCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AgaXMgd2hlcmUgdGhlIG1haW4gY29udmVyc2lvbiBsb2dpYyBvY2N1cnMuIEhvd2V2ZXIsIGl0IGlzIHN0YXRpYyBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkIGRpcmVjdGx5LCBidXQgdGhhdCBpcyBmaW5lIGFzIHRoZSBlbnRyeSBpcyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYC5cblxuSSBhbHNvIGJyaWVmbHkgbG9va2VkIGF0IGBfX2V4dDRfbmV3X2lub2RlYCwgd2hpY2ggaXMgY2hhbmdlZCB0byBwcmV2ZW50IHRoZSBzZXR0aW5nIG9mIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBIGZvciByZWd1bGFyIGZpbGVzLiBIb3dldmVyLCB0aGlzIHNlZW1zIGxpa2UgYSBnZW5lcmljIGNoYW5nZSBhbmQgbm90IGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGRlcHJlY2F0aW9uLiBUaGUgY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IGltcG9ydGFudC5cblxuSSBhbSBjb25maWRlbnQgdGhhdCB0aGUgcGFyYW1ldGVycyBzaG91bGQgYmUgc2V0IGFzOlxuLSBFbmFibGVDb25maWdzOiBgW1wiRVhUNF9GU1wiXWBcbi0gRm9jdXNTeW1ib2xzOiBgW1wiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsIFwiZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhXCIsIFwiZXh0NF9kZXN0cm95X2lubGluZV9kYXRhXCJdYFxuLSBSZWFzb25pbmc6IFwiVGhlIHBhdGNoIGRlcHJlY2F0ZXMgdGhlIGlubGluZV9kYXRhIGZlYXR1cmUgZm9yIHJlZ3VsYXIgZmlsZXMgaW4gZXh0NCwgZm9yY2luZyBjb252ZXJzaW9uIHRvIGJsb2NrLWJhc2VkIHN0b3JhZ2Ugb24gd3JpdGUuIFRoaXMgbW9kaWZpZXMgY29yZSBleHQ0IHdyaXRlIHBhdGhzIGFuZCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLlwiXG4tIFdvcnRoRnV6emluZzogdHJ1ZVxuXG5JIGFtIHJlYWR5IHRvIGZpbmFsaXplIG15IHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQzOSwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAwOjE0OjI3LjI0MTc4NzY0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MDc5MzQxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfY29udmVydF9pbmxpbmVfZGF0YVwiLFxuICAgIFwiZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhXCIsXG4gICAgXCJleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBkZXByZWNhdGVzIHRoZSBpbmxpbmVfZGF0YSBmZWF0dXJlIGZvciByZWd1bGFyIGZpbGVzIGluIGV4dDQsIGZvcmNpbmcgY29udmVyc2lvbiB0byBibG9jay1iYXNlZCBzdG9yYWdlIG9uIHdyaXRlLiBUaGlzIG1vZGlmaWVzIGNvcmUgZXh0NCB3cml0ZSBwYXRocyBhbmQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgZGF0YSBjb3JydXB0aW9uIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsXG4gICAgXCJleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFcIixcbiAgICBcImV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGRlcHJlY2F0ZXMgdGhlIGlubGluZV9kYXRhIGZlYXR1cmUgZm9yIHJlZ3VsYXIgZmlsZXMgaW4gZXh0NCwgZm9yY2luZyBjb252ZXJzaW9uIHRvIGJsb2NrLWJhc2VkIHN0b3JhZ2Ugb24gd3JpdGUuIFRoaXMgbW9kaWZpZXMgY29yZSBleHQ0IHdyaXRlIHBhdGhzIGFuZCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowp4wd4[1] Phase: Succeeded StartedAt: 2026-07-28 00:14:40 +0000 UTC FinishedAt: 2026-07-28 00:14:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 00:14:40 +0000 UTC FinishedAt: 2026-07-28 00:14:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2] Phase: Succeeded StartedAt: 2026-07-28 00:14:40 +0000 UTC FinishedAt: 2026-07-28 05:20:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-28 00:14:40 +0000 UTC FinishedAt: 2026-07-28 05:20:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-28 00:14:40 +0000 UTC FinishedAt: 2026-07-28 00:14:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-28 00:14:40 +0000 UTC FinishedAt: 2026-07-28 00:14:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp4wd4/series-workflowp4wd4-convert-artifact-287848479/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-28 00:14:51 +0000 UTC FinishedAt: 2026-07-28 01:17:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-28 00:14:51 +0000 UTC FinishedAt: 2026-07-28 01:17:13 +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:*eca5ade0-a641-4ce9-b707-397118b127da,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-workflowp4wd4/series-workflowp4wd4-convert-artifact-287848479/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": "c61ec123-88ed-450c-900e-d3f099814ac7", "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-workflowp4wd4/series-workflowp4wd4-build-action-3530598949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-28 00:14:51 +0000 UTC FinishedAt: 2026-07-28 01:17:03 +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:*eca5ade0-a641-4ce9-b707-397118b127da,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-workflowp4wd4/series-workflowp4wd4-convert-artifact-287848479/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": "c61ec123-88ed-450c-900e-d3f099814ac7", "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-workflowp4wd4/series-workflowp4wd4-build-action-3530598949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-28 01:17:13 +0000 UTC FinishedAt: 2026-07-28 01:17:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-28 01:17:13 +0000 UTC FinishedAt: 2026-07-28 01:17:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-28 01:17:13 +0000 UTC FinishedAt: 2026-07-28 01:17:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-28 01:17:13 +0000 UTC FinishedAt: 2026-07-28 01:17:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp4wd4/series-workflowp4wd4-convert-artifact-155243694/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-28 01:17:33 +0000 UTC FinishedAt: 2026-07-28 01:19:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-28 01:17:33 +0000 UTC FinishedAt: 2026-07-28 01:19:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c61ec123-88ed-450c-900e-d3f099814ac7,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-workflowp4wd4/series-workflowp4wd4-build-action-3530598949/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-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-28 01:19:54 +0000 UTC FinishedAt: 2026-07-28 01:19:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-28 01:19:54 +0000 UTC FinishedAt: 2026-07-28 01:19:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-28 01:19:54 +0000 UTC FinishedAt: 2026-07-28 02:14:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-28 01:19:54 +0000 UTC FinishedAt: 2026-07-28 02:14:03 +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:*eca5ade0-a641-4ce9-b707-397118b127da,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-workflowp4wd4/series-workflowp4wd4-convert-artifact-155243694/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": "a51623bc-148e-41d3-b3ac-e38e5de0f194", "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-workflowp4wd4/series-workflowp4wd4-build-action-695831490/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-28 01:19:54 +0000 UTC FinishedAt: 2026-07-28 02:13:53 +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:*eca5ade0-a641-4ce9-b707-397118b127da,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-workflowp4wd4/series-workflowp4wd4-convert-artifact-155243694/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": "a51623bc-148e-41d3-b3ac-e38e5de0f194", "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-workflowp4wd4/series-workflowp4wd4-build-action-695831490/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-28 02:14:03 +0000 UTC FinishedAt: 2026-07-28 02:14:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-28 02:14:03 +0000 UTC FinishedAt: 2026-07-28 02:14:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-28 02:14:03 +0000 UTC FinishedAt: 2026-07-28 02:16:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-28 02:14:03 +0000 UTC FinishedAt: 2026-07-28 02:16:16 +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:*a51623bc-148e-41d3-b3ac-e38e5de0f194,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-workflowp4wd4/series-workflowp4wd4-build-action-695831490/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-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-28 02:16:26 +0000 UTC FinishedAt: 2026-07-28 05:20:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-28 02:16:26 +0000 UTC FinishedAt: 2026-07-28 05:20:38 +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":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"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:*c61ec123-88ed-450c-900e-d3f099814ac7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a51623bc-148e-41d3-b3ac-e38e5de0f194,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-workflowp4wd4/series-workflowp4wd4-build-action-3530598949/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-workflowp4wd4/series-workflowp4wd4-build-action-695831490/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-28 02:16:26 +0000 UTC FinishedAt: 2026-07-28 02:18:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-28 02:16:26 +0000 UTC FinishedAt: 2026-07-28 02:18:21 +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":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"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-workflowp4wd4/series-workflowp4wd4-convert-artifact-2764134227/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-28 02:16:26 +0000 UTC FinishedAt: 2026-07-28 02:16:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-28 02:16:26 +0000 UTC FinishedAt: 2026-07-28 02:16:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-28 02:16:26 +0000 UTC FinishedAt: 2026-07-28 02:16:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-28 02:18:29 +0000 UTC FinishedAt: 2026-07-28 05:20:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4wd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_generic_write_inline_data","ext4_destroy_inline_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97e211ad1a34a5a979558a037619b9e633ca8620","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"3e47f655-bd96-4ed7-9773-b444b2468d8a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-28 02:18:29 +0000 UTC FinishedAt: 2026-07-28 05:20:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c61ec123-88ed-450c-900e-d3f099814ac7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a51623bc-148e-41d3-b3ac-e38e5de0f194,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-workflowp4wd4/series-workflowp4wd4-build-action-3530598949/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-workflowp4wd4/series-workflowp4wd4-build-action-695831490/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-workflowp4wd4/series-workflowp4wd4-convert-artifact-2764134227/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,}