Name: series-workflowjpcpb Phase: Succeeded StartedAt: 2026-08-03 18:38:54 +0000 UTC FinishedAt: 2026-08-03 22:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[0] Phase: Succeeded StartedAt: 2026-08-03 18:38:54 +0000 UTC FinishedAt: 2026-08-03 19:05:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 18:38:54 +0000 UTC FinishedAt: 2026-08-03 19:05:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "6c5fc504d0d6934132637aa3db4b9b58148eaa78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "MAC80211_HWSIM", "MAC80211_MESH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "6c5fc504d0d6934132637aa3db4b9b58148eaa78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "MAC80211_HWSIM", "MAC80211_MESH" ], "series_id": "cd0db072-d6ba-4d56-b46b-07c23b3548a5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_tx_control_port", "ieee80211_tdls_prep_mgmt_packet", "ieee80211_probe_mesh_link" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O01BQzgwMjExX01FU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3Byb2JlX21lc2hfbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1hYzgwMjExIHRyYW5zbWlzc2lvbiBsb2dpYywgaW5jbHVkaW5nIFRYIGluZm8gaW5pdGlhbGl6YXRpb24sIGhlYWRlciBidWlsZGluZywgYW5kIGNvbnRyb2wgcG9ydCB0cmFuc21pc3Npb24uIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgdmlydHVhbGl6ZWQgd2lyZWxlc3MgaW50ZXJmYWNlcyAobWFjODAyMTFfaHdzaW0pLiBXZSBzaG91bGQgZm9jdXMgZnV6emluZyBvbiB0aGUgbW9kaWZpZWQgZW50cnkgcG9pbnRzIGxpa2UgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIGFuZCBgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldGAuIGBNQUM4MDIxMV9NRVNIYCBpcyBuZWVkZWQgdG8gcmVhY2ggdGhlIG1vZGlmaWVkIG1lc2gtc3BlY2lmaWMgbG9naWMgaW4gYGllZWU4MDIxMV9sb29rdXBfcmFfc3RhYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVkMTNiZDFhYWMyM2MwNGRjYzI4N2JmMjM2NTA5ZmM2NGU4OGEwMDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE5OjAzOjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbmluZGV4IDU3NjFlOTYyMTQ5MTQuLmY0YWM5NDViNTUwODggMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC0yMjMzLDggJiM0MzsyMjMzLDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyMyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICB1MzIgaW5mb19mbGFncyxcbi1cdFx0XHRcdCAgdTMyIGN0cmxfZmxhZ3MsXG4tXHRcdFx0XHQgIHU2NCBjb29raWUpO1xuJiM0MztcdFx0XHRcdCAgdTMyIGN0cmxfZmxhZ3MpO1xuIHN0cnVjdCBza19idWZmICpcbiBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mb19mbGFncyk7XG5AQCAtMjQ3MiwxMSAmIzQzOzI0NzEsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX3JlcXVpcmVfZW5jcnlwdGVkX2Fzc29jKF9fbGUxNiBmYyxcbiBcdHJldHVybiBzdGEgXHUwMDI2XHUwMDI2IHN0YS1cdTAwM2VzdGEuZXBwX3BlZXIgXHUwMDI2XHUwMDI2IGllZWU4MDIxMV9pc19hc3NvYyhmYyk7XG4gfVxuIFxuLS8qIHN0YV9vdXQgbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgRVJSX1BUUigpIGJlZm9yZSB1c2luZyAqL1xuLWludCBpZWVlODAyMTFfbG9va3VwX3JhX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgICAgc3RydWN0IHN0YV9pbmZvICoqc3RhX291dCk7XG4tXG4gc3RhdGljIGlubGluZSB2b2lkXG4gaWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3RkbHMuYyBiL25ldC9tYWM4MDIxMS90ZGxzLmNcbmluZGV4IGRjMmY2NjJmZTRjNDYuLjRmNGNhZTlmZDI3NGMgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdGRscy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvdGRscy5jXG5AQCAtMTEyMSw3ICYjNDM7MTEyMSw3IEBAIGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdC8qIGRpc2FibGUgYm90dG9tIGhhbHZlcyB3aGVuIGVudGVyaW5nIHRoZSBUeCBwYXRoICovXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCBmbGFncyxcbi1cdFx0XHRcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLCAwKTtcbiYjNDM7XHRcdFx0XHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyk7XG4gXHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguY1xuaW5kZXggM2ExZTJjOWUxNTY1ZS4uOTExYzRiNTcwMGQwOSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS90eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvdHguY1xuQEAgLTI1MDQsOSAmIzQzOzI1MDQsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9pc190ZGxzX3NldHVwKHN0cnVjdCBza19idWZmICpza2IpXG4gXHQgICAgICAgc2tiLVx1MDAzZWRhdGFbMTRdID09IFdMQU5fVERMU19TTkFQX1JGVFlQRTtcbiB9XG4gXG4taW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdCAgICBzdHJ1Y3Qgc3RhX2luZm8gKipzdGFfb3V0KVxuJiM0MzsvKlxuJiM0MzsgKiBSZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBmcmFtZSBzaG91bGQgYmUgZHJvcHBlZCwgb3RoZXJ3aXNlXG4mIzQzOyAqIHRoZSAqc3RhX291dCBwb2ludGVyIGlzIGZpbGxlZDpcbiYjNDM7ICogIC0gdmFsaWQgc3RhIHBvaW50ZXI6IGZyYW1lIGdvZXMgdG8gdGhhdCBzdGF0aW9uXG4mIzQzOyAqICAtIE5VTEw6IGZyYW1lIHdpbGwgYmUgdW5pY2FzdCB0byBhIHlldCB1bmtub3duIHN0YXRpb25cbiYjNDM7ICogIC0gRVJSX1BUUigtRU5PRU5UKTogZnJhbWUgd2lsbCBiZSBncm91cCBhZGRyZXNzZWRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3Qgc3RhX2luZm8gKipzdGFfb3V0KVxuIHtcbiBcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuIFxuQEAgLTI1MzEsNiAmIzQzOzI1MzgsMTAgQEAgaW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRicmVhaztcbiAjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbiBcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcbiYjNDM7XHRcdGlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihza2ItXHUwMDNlZGF0YSkpIHtcbiYjNDM7XHRcdFx0KnN0YV9vdXQgPSBFUlJfUFRSKC1FTk9FTlQpO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiBcdFx0LyogZGV0ZXJtaW5lZCBtdWNoIGxhdGVyICovXG4gXHRcdCpzdGFfb3V0ID0gTlVMTDtcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMjU3MywxNyAmIzQzOzI1ODQsMTUgQEAgaW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdCpzdGFfb3V0ID0gc3RhID86IEVSUl9QVFIoLUVOT0VOVCk7XG4mIzQzO1x0KnN0YV9vdXQgPSBzdGE7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHUxNiBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICB1MzIgKmluZm9fZmxhZ3MsXG4tXHRcdFx0XHQgICB1NjQgY29va2llKVxuJiM0MztzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IGNvb2tpZSlcbiB7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuIFx0c3RydWN0IHNrX2J1ZmYgKmFja19za2I7XG4tXHR1MTYgaW5mb19pZCA9IDA7XG4gXG4gXHRpZiAoc2tiLVx1MDAzZXNrKVxuIFx0XHRhY2tfc2tiID0gc2tiX2Nsb25lX3NrKHNrYik7XG5AQCAtMjYwMCw1OCAmIzQzOzI2MDksNDEgQEAgc3RhdGljIHUxNiBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiBcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZsb2NhbC1cdTAwM2VhY2tfc3RhdHVzX2xvY2ssIGZsYWdzKTtcbiBcbiBcdFx0aWYgKGlkIFx1MDAzZT0gMCkge1xuLVx0XHRcdGluZm9faWQgPSBpZDtcbi1cdFx0XHQqaW5mb19mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7XG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlc3RhdHVzX2RhdGEgPSBpZDtcbiYjNDM7XHRcdFx0aW5mby1cdTAwM2VzdGF0dXNfZGF0YV9pZHIgPSAxO1xuJiM0MztcdFx0XHRpbmZvLVx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUztcbiBcdFx0XHRpZiAoY29va2llKVxuIFx0XHRcdFx0SUVFRTgwMjExX1NLQl9DQihhY2tfc2tiKS1cdTAwM2VhY2suY29va2llID0gY29va2llO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGtmcmVlX3NrYihhY2tfc2tiKTtcbiBcdFx0fVxuIFx0fVxuLVxuLVx0cmV0dXJuIGluZm9faWQ7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZW1vdmVfYWNrX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTE2IGluZm9faWQpXG4te1xuLVx0c3RydWN0IHNrX2J1ZmYgKmFja19za2I7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVxuLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bG9jYWwtXHUwMDNlYWNrX3N0YXR1c19sb2NrLCBmbGFncyk7XG4tXHRhY2tfc2tiID0gaWRyX3JlbW92ZShcdTAwMjZsb2NhbC1cdTAwM2VhY2tfc3RhdHVzX2ZyYW1lcywgaW5mb19pZCk7XG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmxvY2FsLVx1MDAzZWFja19zdGF0dXNfbG9jaywgZmxhZ3MpO1xuLVxuLVx0a2ZyZWVfc2tiKGFja19za2IpO1xuIH1cbiBcbiAvKipcbiAgKiBpZWVlODAyMTFfYnVpbGRfaGRyIC0gYnVpbGQgODAyLjExIGhlYWRlciBpbiB0aGUgZ2l2ZW4gZnJhbWVcbiAgKiBAc2RhdGE6IHZpcnR1YWwgaW50ZXJmYWNlIHRvIGJ1aWxkIHRoZSBoZWFkZXIgZm9yXG4gICogQHNrYjogdGhlIHNrYiB0byBidWlsZCB0aGUgaGVhZGVyIGluXG4tICogQGluZm9fZmxhZ3M6IHNrYiBmbGFncyB0byBzZXRcbiAgKiBAc3RhOiB0aGUgc3RhdGlvbiBwb2ludGVyXG4tICogQGN0cmxfZmxhZ3M6IGluZm8gY29udHJvbCBmbGFncyB0byBzZXRcbi0gKiBAY29va2llOiBjb29raWUgcG9pbnRlciB0byBmaWxsIChpZiBub3QgJU5VTEwpXG4gICpcbiAgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBza2Igd2l0aCA4MDIuMyBoZWFkZXIgYW5kIHJlZm9ybWF0cyB0aGUgaGVhZGVyIHRvXG4gICogdGhlIGFwcHJvcHJpYXRlIElFRUUgODAyLjExIGhlYWRlciBiYXNlZCBvbiB3aGljaCBpbnRlcmZhY2UgdGhlIHBhY2tldCBpc1xuICAqIGJlaW5nIHRyYW5zbWl0dGVkIG9uLlxuICAqXG4tICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gYWxzbyB0YWtlcyBjYXJlIG9mIHRoZSBUWCBzdGF0dXMgcmVxdWVzdCBhbmRcbi0gKiBwb3RlbnRpYWwgdW5zaGFyaW5nIG9mIHRoZSBTS0IgLSB0aGlzIG5lZWRzIHRvIGJlIGludGVybGVhdmVkIHdpdGggdGhlXG4tICogaGVhZGVyIGJ1aWxkaW5nLlxuJiM0MzsgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBhbHNvIHRha2VzIGNhcmUgb2YgdGhlIFRYIHN0YXR1cyByZXF1ZXN0LiBUaGUgc2tiXG4mIzQzOyAqIG11c3Qgbm90IGJlIHNoYXJlZCwgYW5kIGl0cyBUWCBpbmZvIG11c3QgYWxyZWFkeSBiZSBpbml0aWFsaXNlZCAtIHRoaXNcbiYjNDM7ICogZnVuY3Rpb24gb25seSBmaWxscyBpbiB3aGF0IGl0IGRldGVybWluZXMgaXRzZWxmLlxuICAqXG4gICogVGhlIGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSByZWFkLXNpZGUgUkNVIGxvY2sgaGVsZFxuICAqXG4gICogUmV0dXJuczogdGhlIChwb3NzaWJseSByZWFsbG9jYXRlZCkgc2tiIG9yIGFuIEVSUl9QVFIoKSBjb2RlXG4gICovXG4gc3RhdGljIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfaGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mb19mbGFncyxcbi1cdFx0XHRcdFx0ICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUzMiBjdHJsX2ZsYWdzLFxuLVx0XHRcdFx0XHQgICB1NjQgY29va2llKVxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuLVx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvO1xuIFx0aW50IGhlYWRfbmVlZDtcbiBcdHUxNiBldGhlcnR5cGUsIGhkcmxlbiwgIG1lc2hoZHJsZW4gPSAwO1xuIFx0X19sZTE2IGZjO1xuQEAgLTI2NjMsMTggJiM0MzsyNjU1LDE4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX2hkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdGJvb2wgd21lX3N0YSA9IGZhbHNlLCBhdXRob3JpemVkID0gZmFsc2U7XG4gXHRib29sIHRkbHNfcGVlcjtcbiBcdGJvb2wgbXVsdGljYXN0O1xuLVx0dTE2IGluZm9faWQgPSAwO1xuIFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZiA9IE5VTEw7XG4gXHRlbnVtIG5sODAyMTFfYmFuZCBiYW5kO1xuIFx0aW50IHJldDtcbi1cdHU4IGxpbmtfaWQgPSB1MzJfZ2V0X2JpdHMoY3RybF9mbGFncywgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xuJiM0MztcdHU4IGxpbmtfaWQgPSB1MzJfZ2V0X2JpdHMoaW5mby1cdTAwM2Vjb250cm9sLmZsYWdzLFxuJiM0MztcdFx0XHRcdCAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xuIFxuIFx0aWYgKElTX0VSUihzdGEpKVxuIFx0XHRzdGEgPSBOVUxMO1xuIFxuICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xuIFx0aWYgKGxvY2FsLVx1MDAzZWZvcmNlX3R4X3N0YXR1cylcbi1cdFx0aW5mb19mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7XG4mIzQzO1x0XHRpbmZvLVx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUztcbiAjZW5kaWZcbiBcbiBcdC8qIGNvbnZlcnQgRXRoZXJuZXQgaGVhZGVyIHRvIHByb3BlciA4MDIuMTEgaGVhZGVyIChiYXNlZCBvblxuQEAgLTI4MTUsNyAmIzQzOzI4MDcsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdC8qIEZvciBpbmplY3RlZCBmcmFtZXMsIGZpbGwgUkEgcmlnaHQgYXdheSBhcyBuZXh0aG9wIGxvb2t1cFxuIFx0XHQgKiB3aWxsIGJlIHNraXBwZWQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoKGN0cmxfZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9DVFJMX1NLSVBfTVBBVEhfTE9PS1VQKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGlmICgoaW5mby1cdTAwM2Vjb250cm9sLmZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBpc196ZXJvX2V0aGVyX2FkZHIoaGRyLmFkZHIxKSlcbiBcdFx0XHRtZW1jcHkoaGRyLmFkZHIxLCBza2ItXHUwMDNlZGF0YSwgRVRIX0FMRU4pO1xuIFx0XHRicmVhaztcbkBAIC0yOTQ0LDIxICYjNDM7MjkzNiw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX2hkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0Z290byBmcmVlO1xuIFx0fVxuIFxuLVx0aWYgKHVubGlrZWx5KCFtdWx0aWNhc3QgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgKHNrX3JlcXVlc3RzX3dpZmlfc3RhdHVzKHNrYi1cdTAwM2VzaykgfHxcbi1cdFx0ICAgICAgY3RybF9mbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTKSkpXG4tXHRcdGluZm9faWQgPSBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLCBcdTAwMjZpbmZvX2ZsYWdzLFxuLVx0XHRcdFx0XHRcdCAgY29va2llKTtcbi1cbi1cdC8qXG4tXHQgKiBJZiB0aGUgc2tiIGlzIHNoYXJlZCB3ZSBuZWVkIHRvIG9idGFpbiBvdXIgb3duIGNvcHkuXG4tXHQgKi9cbi1cdHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKHVubGlrZWx5KCFza2IpKSB7XG4tXHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdGdvdG8gZnJlZTtcbi1cdH1cbi1cbiBcdGhkci5mcmFtZV9jb250cm9sID0gZmM7XG4gXHRoZHIuZHVyYXRpb25faWQgPSAwO1xuIFx0aGRyLnNlcV9jdHJsID0gMDtcbkBAIC0yOTk3LDggJiM0MzsyOTc0LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfaGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRoZWFkX25lZWQgJiM0Mzs9IGxvY2FsLVx1MDAzZXR4X2hlYWRyb29tO1xuIFx0XHRoZWFkX25lZWQgPSBtYXhfdChpbnQsIDAsIGhlYWRfbmVlZCk7XG4gXHRcdGlmIChpZWVlODAyMTFfc2tiX3Jlc2l6ZShzZGF0YSwgc2tiLCBoZWFkX25lZWQsIEVOQ1JZUFRfREFUQSkpIHtcbi1cdFx0XHRpZWVlODAyMTFfZnJlZV90eHNrYihcdTAwMjZsb2NhbC1cdTAwM2Vodywgc2tiKTtcbi1cdFx0XHRza2IgPSBOVUxMO1xuIFx0XHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdFx0Z290byBmcmVlO1xuIFx0XHR9XG5AQCAtMzAyNyw1MCAmIzQzOzMwMDIsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfaGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFxuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcbi1cdGluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4tXHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XG4tXG4tXHRpbmZvLVx1MDAzZWZsYWdzID0gaW5mb19mbGFncztcbi1cdGlmIChpbmZvX2lkKSB7XG4tXHRcdGluZm8tXHUwMDNlc3RhdHVzX2RhdGEgPSBpbmZvX2lkO1xuLVx0XHRpbmZvLVx1MDAzZXN0YXR1c19kYXRhX2lkciA9IDE7XG4tXHR9XG4gXHRpbmZvLVx1MDAzZWJhbmQgPSBiYW5kO1xuIFxuLVx0aWYgKGxpa2VseSghY29va2llKSkge1xuLVx0XHRjdHJsX2ZsYWdzIHw9IHUzMl9lbmNvZGVfYml0cyhsaW5rX2lkLFxuLVx0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4tXHR9IGVsc2Uge1xuLVx0XHR1bnNpZ25lZCBpbnQgcHJlX2NvbmZfbGlua19pZDtcbi1cbi1cdFx0Lypcbi1cdFx0ICogY3RybF9mbGFncyBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgYnlcbi1cdFx0ICogaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydCgpLCBoZXJlXG4tXHRcdCAqIHdlIGp1c3Qgc2FuaXR5IGNoZWNrIHRoYXRcbi1cdFx0ICovXG4tXG4tXHRcdHByZV9jb25mX2xpbmtfaWQgPSB1MzJfZ2V0X2JpdHMoY3RybF9mbGFncyxcbi1cdFx0XHRcdFx0XHRJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4tXG4tXHRcdGlmIChwcmVfY29uZl9saW5rX2lkICE9IGxpbmtfaWQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBsaW5rX2lkICE9IElFRUU4MDIxMV9MSU5LX1VOU1BFQ0lGSUVEKSB7XG4tI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG4tXHRcdFx0bmV0X2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7JXM6IGRyb3BwZWQgZnJhbWUgdG8gJXBNIHdpdGggYmFkIGxpbmsgSUQgcmVxdWVzdCAoJWQgdnMuICVkKVxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0ICAgICBzZGF0YS1cdTAwM2VuYW1lLCBoZHIuYWRkcjEsXG4tXHRcdFx0XHRcdCAgICAgcHJlX2NvbmZfbGlua19pZCwgbGlua19pZCk7XG4tI2VuZGlmXG4tXHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRnb3RvIGZyZWU7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdGluZm8tXHUwMDNlY29udHJvbC5mbGFncyA9IGN0cmxfZmxhZ3M7XG4tXG4mIzQzO1x0aW5mby1cdTAwM2Vjb250cm9sLmZsYWdzID1cbiYjNDM7XHRcdHUzMl9yZXBsYWNlX2JpdHMoaW5mby1cdTAwM2Vjb250cm9sLmZsYWdzLCBsaW5rX2lkLFxuJiM0MztcdFx0XHRcdCBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4gXHRyZXR1cm4gc2tiO1xuICBmcmVlOlxuLVx0aWYgKGluZm9faWQpXG4tXHRcdGllZWU4MDIxMV9yZW1vdmVfYWNrX3NrYihsb2NhbCwgaW5mb19pZCk7XG4tXHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfZnJlZV90eHNrYihcdTAwMjZsb2NhbC1cdTAwM2Vodywgc2tiKTtcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuQEAgLTQzNjgsMTMgJiM0Mzs0MzA3LDE0IEBAIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydCk7XG4gdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgIHUzMiBpbmZvX2ZsYWdzLFxuLVx0XHRcdFx0ICB1MzIgY3RybF9mbGFncyxcbi1cdFx0XHRcdCAgdTY0IGNvb2tpZSlcbiYjNDM7XHRcdFx0XHQgIHUzMiBjdHJsX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvO1xuIFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqbmV4dDtcbiYjNDM7XHRib29sIGdyb3VwX2FkZHJlc3NlZDtcbiBcdGludCBsZW4gPSBza2ItXHUwMDNlbGVuO1xuIFxuIFx0aWYgKHVubGlrZWx5KCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkgfHwgc2tiLVx1MDAzZWxlbiBcdTAwM2MgRVRIX0hMRU4pKSB7XG5AQCAtNDM5NCw2ICYjNDM7NDMzNCw3IEBAIHZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHNkYXRhLCBza2IsIFx1MDAyNnN0YSkpXG4gXHRcdGdvdG8gb3V0X2ZyZWU7XG4gXG4mIzQzO1x0Z3JvdXBfYWRkcmVzc2VkID0gSVNfRVJSKHN0YSk7XG4gXHRpZiAoSVNfRVJSKHN0YSkpXG4gXHRcdHN0YSA9IE5VTEw7XG4gXG5AQCAtNDQyNiw4ICYjNDM7NDM2NywyMiBAQCB2b2lkIF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBzZGF0YS1cdTAwM2Vjb250cm9sX3BvcnRfcHJvdG9jb2wpXG4gXHRcdFx0Y3RybF9mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUDtcbiBcbi1cdFx0c2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBpbmZvX2ZsYWdzLFxuLVx0XHRcdFx0XHQgIHN0YSwgY3RybF9mbGFncywgY29va2llKTtcbiYjNDM7XHRcdHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KCFza2IpKSB7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYl9saXN0KG5leHQpO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuJiM0MztcdFx0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xuJiM0MztcdFx0aW5mby1cdTAwM2VmbGFncyA9IGluZm9fZmxhZ3M7XG4mIzQzO1x0XHRpbmZvLVx1MDAzZWNvbnRyb2wuZmxhZ3MgPSBjdHJsX2ZsYWdzO1xuJiM0MztcbiYjNDM7XHRcdGlmICh1bmxpa2VseSghZ3JvdXBfYWRkcmVzc2VkIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIHNrX3JlcXVlc3RzX3dpZmlfc3RhdHVzKHNrYi1cdTAwM2VzaykpKVxuJiM0MztcdFx0XHRpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRza2IgPSBpZWVlODAyMTFfYnVpbGRfaGRyKHNkYXRhLCBza2IsIHN0YSk7XG4gXHRcdGlmIChJU19FUlIoc2tiKSkge1xuIFx0XHRcdGtmcmVlX3NrYl9saXN0KG5leHQpO1xuIFx0XHRcdGdvdG8gb3V0O1xuQEAgLTQ1NjQsNyAmIzQzOzQ1MTksNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eF9vbmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdHJldHVybjtcbiBcbiBcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKGxpbmtfaWQsIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcbi1cdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQob3V0LCBzZGF0YS1cdTAwM2VkZXYsIDAsIGN0cmxfZmxhZ3MsIDApO1xuJiM0MztcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQob3V0LCBzZGF0YS1cdTAwM2VkZXYsIDAsIGN0cmxfZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTQ1NzksNyAmIzQzOzQ1MzQsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRjdHJsX2ZsYWdzIHw9IHUzMl9lbmNvZGVfYml0cyhfX2ZmcyhsaW5rcyksXG4gXHRcdFx0XHRcdCAgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcbiBcbi1cdFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIHNkYXRhLVx1MDAzZWRldiwgMCwgY3RybF9mbGFncywgMCk7XG4mIzQzO1x0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2RhdGEtXHUwMDNlZGV2LCAwLCBjdHJsX2ZsYWdzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTQ2MjAsOCAmIzQzOzQ1NzUsNyBAQCBuZXRkZXZfdHhfdCBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZWVlODAyMTFfY29udmVydF90b191bmljYXN0KHNrYiwgZGV2LCBcdTAwMjZxdWV1ZSk7XG4gXHRcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZxdWV1ZSkpKVxuIFx0XHRcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIDAsXG4tXHRcdFx0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMsXG4tXHRcdFx0XHRcdFx0ICAgICAwKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpO1xuIFx0fSBlbHNlIGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZzZGF0YS1cdTAwM2V2aWYpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAoKHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgICFpZWVlODAyMTFfaHdfY2hlY2soXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcsIE1MT19NQ0FTVF9NVUxUSV9MSU5LX1RYKSkgfHxcbkBAIC00NjMxLDggJiM0Mzs0NTg1LDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdH0gZWxzZSB7XG4gbm9ybWFsOlxuIFx0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCAwLFxuLVx0XHRcdFx0XHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyxcbi1cdFx0XHRcdFx0ICAgICAwKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDKTtcbiBcdH1cbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG5AQCAtNDczMCw4ICYjNDM7NDY4Myw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV84MDIzX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdGlmICghdGVzdF9iaXQoSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMLCBcdTAwMjZ0aWRfdHgtXHUwMDNlc3RhdGUpKSB7XG4gXHRcdFx0LyogZmFsbCBiYWNrIHRvIG5vbi1vZmZsb2FkIHNsb3cgcGF0aCAqL1xuIFx0XHRcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIDAsXG4tXHRcdFx0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMsXG4tXHRcdFx0XHRcdFx0ICAgICAwKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuQEAgLTQ3NjUsMTIgJiM0Mzs0NzE3LDggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRtZW1jcHkoSUVFRTgwMjExX1NLQl9DQihzZWcpLCBpbmZvLCBzaXplb2YoKmluZm8pKTtcbiBcdH1cbiBcbi1cdGlmICh1bmxpa2VseShza19yZXF1ZXN0c193aWZpX3N0YXR1cyhza2ItXHUwMDNlc2spKSkge1xuLVx0XHRpbmZvLVx1MDAzZXN0YXR1c19kYXRhID0gaWVlZTgwMjExX3N0b3JlX2Fja19za2IobG9jYWwsIHNrYixcbi1cdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZpbmZvLVx1MDAzZWZsYWdzLCAwKTtcbi1cdFx0aWYgKGluZm8tXHUwMDNlc3RhdHVzX2RhdGEpXG4tXHRcdFx0aW5mby1cdTAwM2VzdGF0dXNfZGF0YV9pZHIgPSAxO1xuLVx0fVxuJiM0MztcdGlmICh1bmxpa2VseShza19yZXF1ZXN0c193aWZpX3N0YXR1cyhza2ItXHUwMDNlc2spKSlcbiYjNDM7XHRcdGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKGxvY2FsLCBza2IsIDApO1xuIFxuIFx0ZGV2X3N3X25ldHN0YXRzX3R4X2FkZChkZXYsIHNrYnMsIGxlbik7XG4gXG5AQCAtNDg5OSw2ICYjNDM7NDg0Nyw3IEBAIGllZWU4MDIxMV9idWlsZF9kYXRhX3RlbXBsYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHQubG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbCxcbiBcdFx0LnNkYXRhID0gc2RhdGEsXG4gXHR9O1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbztcbiBcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuQEAgLTQ5MDksOCAmIzQzOzQ4NTgsMTIgQEAgaWVlZTgwMjExX2J1aWxkX2RhdGFfdGVtcGxhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0c2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBpbmZvX2ZsYWdzLCBzdGEsXG4tXHRcdFx0XHQgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQywgMCk7XG4mIzQzO1x0aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcbiYjNDM7XHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XG4mIzQzO1x0aW5mby1cdTAwM2VmbGFncyA9IGluZm9fZmxhZ3M7XG4mIzQzO1x0aW5mby1cdTAwM2Vjb250cm9sLmZsYWdzID0gSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDO1xuJiM0MztcbiYjNDM7XHRza2IgPSBpZWVlODAyMTFfYnVpbGRfaGRyKHNkYXRhLCBza2IsIHN0YSk7XG4gXHRpZiAoSVNfRVJSKHNrYikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTY1MzAsNiAmIzQzOzY0ODMsOCBAQCBpbnQgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvO1xuJiM0MztcdGJvb2wgZ3JvdXBfYWRkcmVzc2VkO1xuIFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0c3RydWN0IGV0aGhkciAqZWhkcjtcbkBAIC02NTU0LDkgJiM0Mzs2NTA5LDYgQEAgaW50IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmICh1bmVuY3J5cHRlZClcbiBcdFx0ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVDtcbiBcbi1cdGlmIChjb29raWUpXG4tXHRcdGN0cmxfZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xuLVxuIFx0ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX05MODAyMTFfRlJBTUVfVFg7XG4gXG4gXHRza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLVx1MDAzZWh3LmV4dHJhX3R4X2hlYWRyb29tICYjNDM7XG5AQCAtNjU3MywxNSAmIzQzOzY1MjUsMTEgQEAgaW50IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBcdC8qIHdlIG1heSBvdmVycmlkZSB0aGUgU0EgZm9yIE1MTyBTVEEgbGF0ZXIgKi9cbiBcdGlmIChsaW5rX2lkIFx1MDAzYyAwKSB7XG4tXHRcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKElFRUU4MDIxMV9MSU5LX1VOU1BFQ0lGSUVELFxuLVx0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4mIzQzO1x0XHRsaW5rX2lkID0gSUVFRTgwMjExX0xJTktfVU5TUEVDSUZJRUQ7XG4gXHRcdG1lbWNweShlaGRyLVx1MDAzZWhfc291cmNlLCBzZGF0YS1cdTAwM2V2aWYuYWRkciwgRVRIX0FMRU4pO1xuIFx0fSBlbHNlIHtcbiBcdFx0c3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqbGlua19jb25mO1xuIFxuLVx0XHRjdHJsX2ZsYWdzIHw9IHUzMl9lbmNvZGVfYml0cyhsaW5rX2lkLFxuLVx0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4tXG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0bGlua19jb25mID0gcmN1X2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZXZpZi5saW5rX2NvbmZbbGlua19pZF0pO1xuIFx0XHRpZiAoIWxpbmtfY29uZikge1xuQEAgLTY2MDAsOSAmIzQzOzY1NDgsNiBAQCBpbnQgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4gXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFxuLVx0aWYgKGxvY2FsLVx1MDAzZWh3LnF1ZXVlcyBcdTAwM2MgSUVFRTgwMjExX05VTV9BQ1MpXG4tXHRcdGdvdG8gc3RhcnRfeG1pdDtcbi1cbiBcdC8qIHVwZGF0ZSBRb1MgaGVhZGVyIHRvIHByaW9yaXRpemUgY29udHJvbCBwb3J0IGZyYW1lcyBpZiBwb3NzaWJsZSxcbiBcdCAqIHByaW9yaXRpemF0aW9uIGFsc28gaGFwcGVucyBmb3IgY29udHJvbCBwb3J0IGZyYW1lcyBzZW5kIG92ZXJcbiBcdCAqIEFGX1BBQ0tFVFxuQEAgLTY2MTUsMjQgJiM0Mzs2NTYwLDQ4IEBAIGludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRpZiAoIUlTX0VSUihzdGEpKSB7XG4tXHRcdHUxNiBxdWV1ZSA9IGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc2RhdGEsIHN0YSwgc2tiKTtcbiYjNDM7XHRncm91cF9hZGRyZXNzZWQgPSBJU19FUlIoc3RhKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHN0YSkpXG4mIzQzO1x0XHRzdGEgPSBOVUxMO1xuIFxuLVx0XHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBxdWV1ZSk7XG4mIzQzO1x0c2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgaWVlZTgwMjExX3NlbGVjdF9xdWV1ZShzZGF0YSwgc3RhLCBza2IpKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogZm9yIE1MTyBTVEEsIHRoZSBTQSBzaG91bGQgYmUgdGhlIEFQIE1MRCBhZGRyZXNzLCBidXRcbi1cdFx0ICogdGhlIGxpbmsgSUQgaGFzIGJlZW4gc2VsZWN0ZWQgYWxyZWFkeVxuLVx0XHQgKi9cbi1cdFx0aWYgKHN0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXN0YS5tbG8pXG4tXHRcdFx0bWVtY3B5KGVoZHItXHUwMDNlaF9zb3VyY2UsIHNkYXRhLVx1MDAzZXZpZi5hZGRyLCBFVEhfQUxFTik7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBmb3IgTUxPIFNUQSwgdGhlIFNBIHNob3VsZCBiZSB0aGUgQVAgTUxEIGFkZHJlc3MsIGJ1dFxuJiM0MztcdCAqIHRoZSBsaW5rIElEIGhhcyBiZWVuIHNlbGVjdGVkIGFscmVhZHlcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3RhIFx1MDAyNlx1MDAyNiBzdGEtXHUwMDNlc3RhLm1sbylcbiYjNDM7XHRcdG1lbWNweShlaGRyLVx1MDAzZWhfc291cmNlLCBzZGF0YS1cdTAwM2V2aWYuYWRkciwgRVRIX0FMRU4pO1xuJiM0MztcbiYjNDM7XHRpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuJiM0MztcdG1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTtcbiYjNDM7XHRpbmZvLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4mIzQzO1x0Y3RybF9mbGFncyB8PSB1MzJfZW5jb2RlX2JpdHMobGlua19pZCwgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xuJiM0MztcdGluZm8tXHUwMDNlY29udHJvbC5mbGFncyA9IGN0cmxfZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGlmICghZ3JvdXBfYWRkcmVzc2VkKVxuJiM0MztcdFx0aWVlZTgwMjExX3N0b3JlX2Fja19za2IobG9jYWwsIHNrYiwgY29va2llKTtcbiYjNDM7XG4mIzQzO1x0c2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBzdGEpO1xuJiM0MztcdGlmIChJU19FUlIoc2tiKSkge1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihza2IpO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4tc3RhcnRfeG1pdDpcbiYjNDM7XHRpZiAobGlua19pZCAhPSB1MzJfZ2V0X2JpdHMoaW5mby1cdTAwM2Vjb250cm9sLmZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSykpIHtcbiYjNDM7XHRcdGllZWU4MDIxMV9mcmVlX3R4c2tiKFx1MDAyNmxvY2FsLVx1MDAzZWh3LCBza2IpO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRldl9zd19uZXRzdGF0c190eF9hZGQoZGV2LCAxLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHRpZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KGxvY2FsLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4tXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2tiLVx1MDAzZWRldiwgZmxhZ3MsIGN0cmxfZmxhZ3MsIGNvb2tpZSk7XG4mIzQzO1x0aWVlZTgwMjExX3htaXQoc2RhdGEsIHN0YSwgc2tiKTtcbiBcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTY2NjAsOCAmIzQzOzY2MjksNyBAQCBpbnQgaWVlZTgwMjExX3Byb2JlX21lc2hfbGluayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFxuIFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIHNrYi1cdTAwM2VkZXYsIDAsXG4tXHRcdFx0XHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX1NLSVBfTVBBVEhfTE9PS1VQLFxuLVx0XHRcdFx0ICAgICAwKTtcbiYjNDM7XHRcdFx0XHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX1NLSVBfTVBBVEhfTE9PS1VQKTtcbiBcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O01BQzgwMjExX01FU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3Byb2JlX21lc2hfbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1hYzgwMjExIHRyYW5zbWlzc2lvbiBsb2dpYywgaW5jbHVkaW5nIFRYIGluZm8gaW5pdGlhbGl6YXRpb24sIGhlYWRlciBidWlsZGluZywgYW5kIGNvbnRyb2wgcG9ydCB0cmFuc21pc3Npb24uIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgdmlydHVhbGl6ZWQgd2lyZWxlc3MgaW50ZXJmYWNlcyAobWFjODAyMTFfaHdzaW0pLiBXZSBzaG91bGQgZm9jdXMgZnV6emluZyBvbiB0aGUgbW9kaWZpZWQgZW50cnkgcG9pbnRzIGxpa2UgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIGFuZCBgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldGAuIGBNQUM4MDIxMV9NRVNIYCBpcyBuZWVkZWQgdG8gcmVhY2ggdGhlIG1vZGlmaWVkIG1lc2gtc3BlY2lmaWMgbG9naWMgaW4gYGllZWU4MDIxMV9sb29rdXBfcmFfc3RhYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVkMTNiZDFhYWMyM2MwNGRjYzI4N2JmMjM2NTA5ZmM2NGU4OGEwMDUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDE5OjAzOjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCA1NzYxZTk2MjE0OTE0Li5mNGFjOTQ1YjU1MDg4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtMjIzMyw4ICYjNDM7MjIzMyw3IEBAIG5ldGRldl90eF90IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIHZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgIHUzMiBpbmZvX2ZsYWdzLAotCQkJCSAgdTMyIGN0cmxfZmxhZ3MsCi0JCQkJICB1NjQgY29va2llKTsKJiM0MzsJCQkJICB1MzIgY3RybF9mbGFncyk7CiBzdHJ1Y3Qgc2tfYnVmZiAqCiBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvX2ZsYWdzKTsKQEAgLTI0NzIsMTEgJiM0MzsyNDcxLDYgQEAgc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yZXF1aXJlX2VuY3J5cHRlZF9hc3NvYyhfX2xlMTYgZmMsCiAJcmV0dXJuIHN0YSAmYW1wOyZhbXA7IHN0YS0mZ3Q7c3RhLmVwcF9wZWVyICZhbXA7JmFtcDsgaWVlZTgwMjExX2lzX2Fzc29jKGZjKTsKIH0KIAotLyogc3RhX291dCBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBFUlJfUFRSKCkgYmVmb3JlIHVzaW5nICovCi1pbnQgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICBzdHJ1Y3Qgc3RhX2luZm8gKipzdGFfb3V0KTsKLQogc3RhdGljIGlubGluZSB2b2lkCiBpZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3RkbHMuYyBiL25ldC9tYWM4MDIxMS90ZGxzLmMKaW5kZXggZGMyZjY2MmZlNGM0Ni4uNGY0Y2FlOWZkMjc0YyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3RkbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvdGRscy5jCkBAIC0xMTIxLDcgJiM0MzsxMTIxLDcgQEAgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCS8qIGRpc2FibGUgYm90dG9tIGhhbHZlcyB3aGVuIGVudGVyaW5nIHRoZSBUeCBwYXRoICovCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCV9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIGZsYWdzLAotCQkJCSAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLCAwKTsKJiM0MzsJCQkJICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpOwogCWxvY2FsX2JoX2VuYWJsZSgpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmMKaW5kZXggM2ExZTJjOWUxNTY1ZS4uOTExYzRiNTcwMGQwOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTI1MDQsOSAmIzQzOzI1MDQsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9pc190ZGxzX3NldHVwKHN0cnVjdCBza19idWZmICpza2IpCiAJICAgICAgIHNrYi0mZ3Q7ZGF0YVsxNF0gPT0gV0xBTl9URExTX1NOQVBfUkZUWVBFOwogfQogCi1pbnQgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICBzdHJ1Y3Qgc3RhX2luZm8gKipzdGFfb3V0KQomIzQzOy8qCiYjNDM7ICogUmV0dXJucyBhbiBlcnJvciBpZiB0aGUgZnJhbWUgc2hvdWxkIGJlIGRyb3BwZWQsIG90aGVyd2lzZQomIzQzOyAqIHRoZSAqc3RhX291dCBwb2ludGVyIGlzIGZpbGxlZDoKJiM0MzsgKiAgLSB2YWxpZCBzdGEgcG9pbnRlcjogZnJhbWUgZ29lcyB0byB0aGF0IHN0YXRpb24KJiM0MzsgKiAgLSBOVUxMOiBmcmFtZSB3aWxsIGJlIHVuaWNhc3QgdG8gYSB5ZXQgdW5rbm93biBzdGF0aW9uCiYjNDM7ICogIC0gRVJSX1BUUigtRU5PRU5UKTogZnJhbWUgd2lsbCBiZSBncm91cCBhZGRyZXNzZWQKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAomIzQzOwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKipzdGFfb3V0KQogewogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCkBAIC0yNTMxLDYgJiM0MzsyNTM4LDEwIEBAIGludCBpZWVlODAyMTFfbG9va3VwX3JhX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKIAljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiYjNDM7CQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoc2tiLSZndDtkYXRhKSkgewomIzQzOwkJCSpzdGFfb3V0ID0gRVJSX1BUUigtRU5PRU5UKTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KIAkJLyogZGV0ZXJtaW5lZCBtdWNoIGxhdGVyICovCiAJCSpzdGFfb3V0ID0gTlVMTDsKIAkJcmV0dXJuIDA7CkBAIC0yNTczLDE3ICYjNDM7MjU4NCwxNSBAQCBpbnQgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCSpzdGFfb3V0ID0gc3RhID86IEVSUl9QVFIoLUVOT0VOVCk7CiYjNDM7CSpzdGFfb3V0ID0gc3RhOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTE2IGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgdTMyICppbmZvX2ZsYWdzLAotCQkJCSAgIHU2NCBjb29raWUpCiYjNDM7c3RhdGljIHZvaWQgaWVlZTgwMjExX3N0b3JlX2Fja19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiYjNDM7CQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgY29va2llKQogewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IHNrX2J1ZmYgKmFja19za2I7Ci0JdTE2IGluZm9faWQgPSAwOwogCiAJaWYgKHNrYi0mZ3Q7c2spCiAJCWFja19za2IgPSBza2JfY2xvbmVfc2soc2tiKTsKQEAgLTI2MDAsNTggJiM0MzsyNjA5LDQxIEBAIHN0YXRpYyB1MTYgaWVlZTgwMjExX3N0b3JlX2Fja19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtsb2NhbC0mZ3Q7YWNrX3N0YXR1c19sb2NrLCBmbGFncyk7CiAKIAkJaWYgKGlkICZndDs9IDApIHsKLQkJCWluZm9faWQgPSBpZDsKLQkJCSppbmZvX2ZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUzsKJiM0MzsJCQlpbmZvLSZndDtzdGF0dXNfZGF0YSA9IGlkOwomIzQzOwkJCWluZm8tJmd0O3N0YXR1c19kYXRhX2lkciA9IDE7CiYjNDM7CQkJaW5mby0mZ3Q7ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTOwogCQkJaWYgKGNvb2tpZSkKIAkJCQlJRUVFODAyMTFfU0tCX0NCKGFja19za2IpLSZndDthY2suY29va2llID0gY29va2llOwogCQl9IGVsc2UgewogCQkJa2ZyZWVfc2tiKGFja19za2IpOwogCQl9CiAJfQotCi0JcmV0dXJuIGluZm9faWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZW1vdmVfYWNrX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTE2IGluZm9faWQpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKmFja19za2I7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bG9jYWwtJmd0O2Fja19zdGF0dXNfbG9jaywgZmxhZ3MpOwotCWFja19za2IgPSBpZHJfcmVtb3ZlKCZhbXA7bG9jYWwtJmd0O2Fja19zdGF0dXNfZnJhbWVzLCBpbmZvX2lkKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bG9jYWwtJmd0O2Fja19zdGF0dXNfbG9jaywgZmxhZ3MpOwotCi0Ja2ZyZWVfc2tiKGFja19za2IpOwogfQogCiAvKioKICAqIGllZWU4MDIxMV9idWlsZF9oZHIgLSBidWlsZCA4MDIuMTEgaGVhZGVyIGluIHRoZSBnaXZlbiBmcmFtZQogICogQHNkYXRhOiB2aXJ0dWFsIGludGVyZmFjZSB0byBidWlsZCB0aGUgaGVhZGVyIGZvcgogICogQHNrYjogdGhlIHNrYiB0byBidWlsZCB0aGUgaGVhZGVyIGluCi0gKiBAaW5mb19mbGFnczogc2tiIGZsYWdzIHRvIHNldAogICogQHN0YTogdGhlIHN0YXRpb24gcG9pbnRlcgotICogQGN0cmxfZmxhZ3M6IGluZm8gY29udHJvbCBmbGFncyB0byBzZXQKLSAqIEBjb29raWU6IGNvb2tpZSBwb2ludGVyIHRvIGZpbGwgKGlmIG5vdCAlTlVMTCkKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBza2Igd2l0aCA4MDIuMyBoZWFkZXIgYW5kIHJlZm9ybWF0cyB0aGUgaGVhZGVyIHRvCiAgKiB0aGUgYXBwcm9wcmlhdGUgSUVFRSA4MDIuMTEgaGVhZGVyIGJhc2VkIG9uIHdoaWNoIGludGVyZmFjZSB0aGUgcGFja2V0IGlzCiAgKiBiZWluZyB0cmFuc21pdHRlZCBvbi4KICAqCi0gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBhbHNvIHRha2VzIGNhcmUgb2YgdGhlIFRYIHN0YXR1cyByZXF1ZXN0IGFuZAotICogcG90ZW50aWFsIHVuc2hhcmluZyBvZiB0aGUgU0tCIC0gdGhpcyBuZWVkcyB0byBiZSBpbnRlcmxlYXZlZCB3aXRoIHRoZQotICogaGVhZGVyIGJ1aWxkaW5nLgomIzQzOyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFsc28gdGFrZXMgY2FyZSBvZiB0aGUgVFggc3RhdHVzIHJlcXVlc3QuIFRoZSBza2IKJiM0MzsgKiBtdXN0IG5vdCBiZSBzaGFyZWQsIGFuZCBpdHMgVFggaW5mbyBtdXN0IGFscmVhZHkgYmUgaW5pdGlhbGlzZWQgLSB0aGlzCiYjNDM7ICogZnVuY3Rpb24gb25seSBmaWxscyBpbiB3aGF0IGl0IGRldGVybWluZXMgaXRzZWxmLgogICoKICAqIFRoZSBmdW5jdGlvbiByZXF1aXJlcyB0aGUgcmVhZC1zaWRlIFJDVSBsb2NrIGhlbGQKICAqCiAgKiBSZXR1cm5zOiB0aGUgKHBvc3NpYmx5IHJlYWxsb2NhdGVkKSBza2Igb3IgYW4gRVJSX1BUUigpIGNvZGUKICAqLwogc3RhdGljIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfaGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mb19mbGFncywKLQkJCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUzMiBjdHJsX2ZsYWdzLAotCQkJCQkgICB1NjQgY29va2llKQomIzQzOwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJCSAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0mZ3Q7bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCWludCBoZWFkX25lZWQ7CiAJdTE2IGV0aGVydHlwZSwgaGRybGVuLCAgbWVzaGhkcmxlbiA9IDA7CiAJX19sZTE2IGZjOwpAQCAtMjY2MywxOCAmIzQzOzI2NTUsMTggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfaGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCWJvb2wgd21lX3N0YSA9IGZhbHNlLCBhdXRob3JpemVkID0gZmFsc2U7CiAJYm9vbCB0ZGxzX3BlZXI7CiAJYm9vbCBtdWx0aWNhc3Q7Ci0JdTE2IGluZm9faWQgPSAwOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjaGFuY3R4X2NvbmYgPSBOVUxMOwogCWVudW0gbmw4MDIxMV9iYW5kIGJhbmQ7CiAJaW50IHJldDsKLQl1OCBsaW5rX2lkID0gdTMyX2dldF9iaXRzKGN0cmxfZmxhZ3MsIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTsKJiM0MzsJdTggbGlua19pZCA9IHUzMl9nZXRfYml0cyhpbmZvLSZndDtjb250cm9sLmZsYWdzLAomIzQzOwkJCQkgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTsKIAogCWlmIChJU19FUlIoc3RhKSkKIAkJc3RhID0gTlVMTDsKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCiAJaWYgKGxvY2FsLSZndDtmb3JjZV90eF9zdGF0dXMpCi0JCWluZm9fZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTOwomIzQzOwkJaW5mby0mZ3Q7ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTOwogI2VuZGlmCiAKIAkvKiBjb252ZXJ0IEV0aGVybmV0IGhlYWRlciB0byBwcm9wZXIgODAyLjExIGhlYWRlciAoYmFzZWQgb24KQEAgLTI4MTUsNyAmIzQzOzI4MDcsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCS8qIEZvciBpbmplY3RlZCBmcmFtZXMsIGZpbGwgUkEgcmlnaHQgYXdheSBhcyBuZXh0aG9wIGxvb2t1cAogCQkgKiB3aWxsIGJlIHNraXBwZWQuCiAJCSAqLwotCQlpZiAoKGN0cmxfZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1RYX0NUUkxfU0tJUF9NUEFUSF9MT09LVVApICZhbXA7JmFtcDsKJiM0MzsJCWlmICgoaW5mby0mZ3Q7Y29udHJvbC5mbGFncyAmYW1wOyBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUCkgJmFtcDsmYW1wOwogCQkgICAgaXNfemVyb19ldGhlcl9hZGRyKGhkci5hZGRyMSkpCiAJCQltZW1jcHkoaGRyLmFkZHIxLCBza2ItJmd0O2RhdGEsIEVUSF9BTEVOKTsKIAkJYnJlYWs7CkBAIC0yOTQ0LDIxICYjNDM7MjkzNiw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX2hkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJZ290byBmcmVlOwogCX0KIAotCWlmICh1bmxpa2VseSghbXVsdGljYXN0ICZhbXA7JmFtcDsKLQkJICAgICAoc2tfcmVxdWVzdHNfd2lmaV9zdGF0dXMoc2tiLSZndDtzaykgfHwKLQkJICAgICAgY3RybF9mbGFncyAmYW1wOyBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVMpKSkKLQkJaW5mb19pZCA9IGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKGxvY2FsLCBza2IsICZhbXA7aW5mb19mbGFncywKLQkJCQkJCSAgY29va2llKTsKLQotCS8qCi0JICogSWYgdGhlIHNrYiBpcyBzaGFyZWQgd2UgbmVlZCB0byBvYnRhaW4gb3VyIG93biBjb3B5LgotCSAqLwotCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOwotCWlmICh1bmxpa2VseSghc2tiKSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWU7Ci0JfQotCiAJaGRyLmZyYW1lX2NvbnRyb2wgPSBmYzsKIAloZHIuZHVyYXRpb25faWQgPSAwOwogCWhkci5zZXFfY3RybCA9IDA7CkBAIC0yOTk3LDggJiM0MzsyOTc0LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfaGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQloZWFkX25lZWQgJiM0Mzs9IGxvY2FsLSZndDt0eF9oZWFkcm9vbTsKIAkJaGVhZF9uZWVkID0gbWF4X3QoaW50LCAwLCBoZWFkX25lZWQpOwogCQlpZiAoaWVlZTgwMjExX3NrYl9yZXNpemUoc2RhdGEsIHNrYiwgaGVhZF9uZWVkLCBFTkNSWVBUX0RBVEEpKSB7Ci0JCQlpZWVlODAyMTFfZnJlZV90eHNrYigmYW1wO2xvY2FsLSZndDtodywgc2tiKTsKLQkJCXNrYiA9IE5VTEw7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBmcmVlOwogCQl9CkBAIC0zMDI3LDUwICYjNDM7MzAwMiwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCi0JaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7Ci0KLQlpbmZvLSZndDtmbGFncyA9IGluZm9fZmxhZ3M7Ci0JaWYgKGluZm9faWQpIHsKLQkJaW5mby0mZ3Q7c3RhdHVzX2RhdGEgPSBpbmZvX2lkOwotCQlpbmZvLSZndDtzdGF0dXNfZGF0YV9pZHIgPSAxOwotCX0KIAlpbmZvLSZndDtiYW5kID0gYmFuZDsKIAotCWlmIChsaWtlbHkoIWNvb2tpZSkpIHsKLQkJY3RybF9mbGFncyB8PSB1MzJfZW5jb2RlX2JpdHMobGlua19pZCwKLQkJCQkJICAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspOwotCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGludCBwcmVfY29uZl9saW5rX2lkOwotCi0JCS8qCi0JCSAqIGN0cmxfZmxhZ3MgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IGJ5Ci0JCSAqIGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoKSwgaGVyZQotCQkgKiB3ZSBqdXN0IHNhbml0eSBjaGVjayB0aGF0Ci0JCSAqLwotCi0JCXByZV9jb25mX2xpbmtfaWQgPSB1MzJfZ2V0X2JpdHMoY3RybF9mbGFncywKLQkJCQkJCUlFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTsKLQotCQlpZiAocHJlX2NvbmZfbGlua19pZCAhPSBsaW5rX2lkICZhbXA7JmFtcDsKLQkJICAgIGxpbmtfaWQgIT0gSUVFRTgwMjExX0xJTktfVU5TUEVDSUZJRUQpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCQkJbmV0X2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDslczogZHJvcHBlZCBmcmFtZSB0byAlcE0gd2l0aCBiYWQgbGluayBJRCByZXF1ZXN0ICglZCB2cy4gJWQpXG4mIzM0OywKLQkJCQkJICAgICBzZGF0YS0mZ3Q7bmFtZSwgaGRyLmFkZHIxLAotCQkJCQkgICAgIHByZV9jb25mX2xpbmtfaWQsIGxpbmtfaWQpOwotI2VuZGlmCi0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBmcmVlOwotCQl9Ci0JfQotCi0JaW5mby0mZ3Q7Y29udHJvbC5mbGFncyA9IGN0cmxfZmxhZ3M7Ci0KJiM0MzsJaW5mby0mZ3Q7Y29udHJvbC5mbGFncyA9CiYjNDM7CQl1MzJfcmVwbGFjZV9iaXRzKGluZm8tJmd0O2NvbnRyb2wuZmxhZ3MsIGxpbmtfaWQsCiYjNDM7CQkJCSBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7CiAJcmV0dXJuIHNrYjsKICBmcmVlOgotCWlmIChpbmZvX2lkKQotCQlpZWVlODAyMTFfcmVtb3ZlX2Fja19za2IobG9jYWwsIGluZm9faWQpOwotCWtmcmVlX3NrYihza2IpOwomIzQzOwlpZWVlODAyMTFfZnJlZV90eHNrYigmYW1wO2xvY2FsLSZndDtodywgc2tiKTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCkBAIC00MzY4LDEzICYjNDM7NDMwNywxNCBAQCBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQpOwogdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgdTMyIGluZm9fZmxhZ3MsCi0JCQkJICB1MzIgY3RybF9mbGFncywKLQkJCQkgIHU2NCBjb29raWUpCiYjNDM7CQkJCSAgdTMyIGN0cmxfZmxhZ3MpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtJmd0O2xvY2FsOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJc3RydWN0IHNrX2J1ZmYgKm5leHQ7CiYjNDM7CWJvb2wgZ3JvdXBfYWRkcmVzc2VkOwogCWludCBsZW4gPSBza2ItJmd0O2xlbjsKIAogCWlmICh1bmxpa2VseSghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpIHx8IHNrYi0mZ3Q7bGVuICZsdDsgRVRIX0hMRU4pKSB7CkBAIC00Mzk0LDYgJiM0Mzs0MzM0LDcgQEAgdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHNkYXRhLCBza2IsICZhbXA7c3RhKSkKIAkJZ290byBvdXRfZnJlZTsKIAomIzQzOwlncm91cF9hZGRyZXNzZWQgPSBJU19FUlIoc3RhKTsKIAlpZiAoSVNfRVJSKHN0YSkpCiAJCXN0YSA9IE5VTEw7CiAKQEAgLTQ0MjYsOCAmIzQzOzQzNjcsMjIgQEAgdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCWlmIChza2ItJmd0O3Byb3RvY29sID09IHNkYXRhLSZndDtjb250cm9sX3BvcnRfcHJvdG9jb2wpCiAJCQljdHJsX2ZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVFJMX1NLSVBfTVBBVEhfTE9PS1VQOwogCi0JCXNrYiA9IGllZWU4MDIxMV9idWlsZF9oZHIoc2RhdGEsIHNrYiwgaW5mb19mbGFncywKLQkJCQkJICBzdGEsIGN0cmxfZmxhZ3MsIGNvb2tpZSk7CiYjNDM7CQlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKJiM0MzsJCWlmICh1bmxpa2VseSghc2tiKSkgewomIzQzOwkJCWtmcmVlX3NrYl9saXN0KG5leHQpOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKJiM0MzsJCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKJiM0MzsJCWluZm8tJmd0O2ZsYWdzID0gaW5mb19mbGFnczsKJiM0MzsJCWluZm8tJmd0O2NvbnRyb2wuZmxhZ3MgPSBjdHJsX2ZsYWdzOwomIzQzOwomIzQzOwkJaWYgKHVubGlrZWx5KCFncm91cF9hZGRyZXNzZWQgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgc2tfcmVxdWVzdHNfd2lmaV9zdGF0dXMoc2tiLSZndDtzaykpKQomIzQzOwkJCWllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKGxvY2FsLCBza2IsIDApOwomIzQzOwomIzQzOwkJc2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBzdGEpOwogCQlpZiAoSVNfRVJSKHNrYikpIHsKIAkJCWtmcmVlX3NrYl9saXN0KG5leHQpOwogCQkJZ290byBvdXQ7CkBAIC00NTY0LDcgJiM0Mzs0NTE5LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX21sb19tdWx0aWNhc3RfdHhfb25lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQlyZXR1cm47CiAKIAljdHJsX2ZsYWdzIHw9IHUzMl9lbmNvZGVfYml0cyhsaW5rX2lkLCBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7Ci0JX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChvdXQsIHNkYXRhLSZndDtkZXYsIDAsIGN0cmxfZmxhZ3MsIDApOwomIzQzOwlfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KG91dCwgc2RhdGEtJmd0O2RldiwgMCwgY3RybF9mbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC00NTc5LDcgJiM0Mzs0NTM0LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX21sb19tdWx0aWNhc3RfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJY3RybF9mbGFncyB8PSB1MzJfZW5jb2RlX2JpdHMoX19mZnMobGlua3MpLAogCQkJCQkgICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7CiAKLQkJX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIHNkYXRhLSZndDtkZXYsIDAsIGN0cmxfZmxhZ3MsIDApOwomIzQzOwkJX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIHNkYXRhLSZndDtkZXYsIDAsIGN0cmxfZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCkBAIC00NjIwLDggJiM0Mzs0NTc1LDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJaWVlZTgwMjExX2NvbnZlcnRfdG9fdW5pY2FzdChza2IsIGRldiwgJmFtcDtxdWV1ZSk7CiAJCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmYW1wO3F1ZXVlKSkpCiAJCQlfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCAwLAotCQkJCQkJICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMsCi0JCQkJCQkgICAgIDApOwomIzQzOwkJCQkJCSAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDKTsKIAl9IGVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKCZhbXA7c2RhdGEtJmd0O3ZpZikgJmFtcDsmYW1wOwogCQkgICAoKHNkYXRhLSZndDt2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCAmYW1wOyZhbXA7CiAJCSAgICAgIWllZWU4MDIxMV9od19jaGVjaygmYW1wO3NkYXRhLSZndDtsb2NhbC0mZ3Q7aHcsIE1MT19NQ0FTVF9NVUxUSV9MSU5LX1RYKSkgfHwKQEAgLTQ2MzEsOCAmIzQzOzQ1ODUsNyBAQCBuZXRkZXZfdHhfdCBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCX0gZWxzZSB7CiBub3JtYWw6CiAJCV9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIDAsCi0JCQkJCSAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLAotCQkJCQkgICAgIDApOwomIzQzOwkJCQkJICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpOwogCX0KIAogCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC00NzMwLDggJiM0Mzs0NjgzLDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJaWYgKCF0ZXN0X2JpdChIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwsICZhbXA7dGlkX3R4LSZndDtzdGF0ZSkpIHsKIAkJCS8qIGZhbGwgYmFjayB0byBub24tb2ZmbG9hZCBzbG93IHBhdGggKi8KIAkJCV9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIDAsCi0JCQkJCQkgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQywKLQkJCQkJCSAgICAgMCk7CiYjNDM7CQkJCQkJICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTQ3NjUsMTIgJiM0Mzs0NzE3LDggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCW1lbWNweShJRUVFODAyMTFfU0tCX0NCKHNlZyksIGluZm8sIHNpemVvZigqaW5mbykpOwogCX0KIAotCWlmICh1bmxpa2VseShza19yZXF1ZXN0c193aWZpX3N0YXR1cyhza2ItJmd0O3NrKSkpIHsKLQkJaW5mby0mZ3Q7c3RhdHVzX2RhdGEgPSBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLAotCQkJCQkJCSAgICAmYW1wO2luZm8tJmd0O2ZsYWdzLCAwKTsKLQkJaWYgKGluZm8tJmd0O3N0YXR1c19kYXRhKQotCQkJaW5mby0mZ3Q7c3RhdHVzX2RhdGFfaWRyID0gMTsKLQl9CiYjNDM7CWlmICh1bmxpa2VseShza19yZXF1ZXN0c193aWZpX3N0YXR1cyhza2ItJmd0O3NrKSkpCiYjNDM7CQlpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLCAwKTsKIAogCWRldl9zd19uZXRzdGF0c190eF9hZGQoZGV2LCBza2JzLCBsZW4pOwogCkBAIC00ODk5LDYgJiM0Mzs0ODQ3LDcgQEAgaWVlZTgwMjExX2J1aWxkX2RhdGFfdGVtcGxhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCS5sb2NhbCA9IHNkYXRhLSZndDtsb2NhbCwKIAkJLnNkYXRhID0gc2RhdGEsCiAJfTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtNDkwOSw4ICYjNDM7NDg1OCwxMiBAQCBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJZ290byBvdXQ7CiAJfQogCi0Jc2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBpbmZvX2ZsYWdzLCBzdGEsCi0JCQkJICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMsIDApOwomIzQzOwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwomIzQzOwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CiYjNDM7CWluZm8tJmd0O2ZsYWdzID0gaW5mb19mbGFnczsKJiM0MzsJaW5mby0mZ3Q7Y29udHJvbC5mbGFncyA9IElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQzsKJiM0MzsKJiM0MzsJc2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBzdGEpOwogCWlmIChJU19FUlIoc2tiKSkKIAkJZ290byBvdXQ7CiAKQEAgLTY1MzAsNiAmIzQzOzY0ODMsOCBAQCBpbnQgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLSZndDtsb2NhbDsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwomIzQzOwlib29sIGdyb3VwX2FkZHJlc3NlZDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBldGhoZHIgKmVoZHI7CkBAIC02NTU0LDkgJiM0Mzs2NTA5LDYgQEAgaW50IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAodW5lbmNyeXB0ZWQpCiAJCWZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7CiAKLQlpZiAoY29va2llKQotCQljdHJsX2ZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUzsKLQogCWZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9OTDgwMjExX0ZSQU1FX1RYOwogCiAJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0mZ3Q7aHcuZXh0cmFfdHhfaGVhZHJvb20gJiM0MzsKQEAgLTY1NzMsMTUgJiM0Mzs2NTI1LDExIEBAIGludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAkvKiB3ZSBtYXkgb3ZlcnJpZGUgdGhlIFNBIGZvciBNTE8gU1RBIGxhdGVyICovCiAJaWYgKGxpbmtfaWQgJmx0OyAwKSB7Ci0JCWN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKElFRUU4MDIxMV9MSU5LX1VOU1BFQ0lGSUVELAotCQkJCQkgICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7CiYjNDM7CQlsaW5rX2lkID0gSUVFRTgwMjExX0xJTktfVU5TUEVDSUZJRUQ7CiAJCW1lbWNweShlaGRyLSZndDtoX3NvdXJjZSwgc2RhdGEtJmd0O3ZpZi5hZGRyLCBFVEhfQUxFTik7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqbGlua19jb25mOwogCi0JCWN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKGxpbmtfaWQsCi0JCQkJCSAgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTsKLQogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWxpbmtfY29uZiA9IHJjdV9kZXJlZmVyZW5jZShzZGF0YS0mZ3Q7dmlmLmxpbmtfY29uZltsaW5rX2lkXSk7CiAJCWlmICghbGlua19jb25mKSB7CkBAIC02NjAwLDkgJiM0Mzs2NTQ4LDYgQEAgaW50IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCi0JaWYgKGxvY2FsLSZndDtody5xdWV1ZXMgJmx0OyBJRUVFODAyMTFfTlVNX0FDUykKLQkJZ290byBzdGFydF94bWl0OwotCiAJLyogdXBkYXRlIFFvUyBoZWFkZXIgdG8gcHJpb3JpdGl6ZSBjb250cm9sIHBvcnQgZnJhbWVzIGlmIHBvc3NpYmxlLAogCSAqIHByaW9yaXRpemF0aW9uIGFsc28gaGFwcGVucyBmb3IgY29udHJvbCBwb3J0IGZyYW1lcyBzZW5kIG92ZXIKIAkgKiBBRl9QQUNLRVQKQEAgLTY2MTUsMjQgJiM0Mzs2NTYwLDQ4IEBAIGludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCXJldHVybiBlcnI7CiAJfQogCi0JaWYgKCFJU19FUlIoc3RhKSkgewotCQl1MTYgcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKHNkYXRhLCBzdGEsIHNrYik7CiYjNDM7CWdyb3VwX2FkZHJlc3NlZCA9IElTX0VSUihzdGEpOwomIzQzOwlpZiAoSVNfRVJSKHN0YSkpCiYjNDM7CQlzdGEgPSBOVUxMOwogCi0JCXNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIHF1ZXVlKTsKJiM0MzsJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgaWVlZTgwMjExX3NlbGVjdF9xdWV1ZShzZGF0YSwgc3RhLCBza2IpKTsKIAotCQkvKgotCQkgKiBmb3IgTUxPIFNUQSwgdGhlIFNBIHNob3VsZCBiZSB0aGUgQVAgTUxEIGFkZHJlc3MsIGJ1dAotCQkgKiB0aGUgbGluayBJRCBoYXMgYmVlbiBzZWxlY3RlZCBhbHJlYWR5Ci0JCSAqLwotCQlpZiAoc3RhICZhbXA7JmFtcDsgc3RhLSZndDtzdGEubWxvKQotCQkJbWVtY3B5KGVoZHItJmd0O2hfc291cmNlLCBzZGF0YS0mZ3Q7dmlmLmFkZHIsIEVUSF9BTEVOKTsKJiM0MzsJLyoKJiM0MzsJICogZm9yIE1MTyBTVEEsIHRoZSBTQSBzaG91bGQgYmUgdGhlIEFQIE1MRCBhZGRyZXNzLCBidXQKJiM0MzsJICogdGhlIGxpbmsgSUQgaGFzIGJlZW4gc2VsZWN0ZWQgYWxyZWFkeQomIzQzOwkgKi8KJiM0MzsJaWYgKHN0YSAmYW1wOyZhbXA7IHN0YS0mZ3Q7c3RhLm1sbykKJiM0MzsJCW1lbWNweShlaGRyLSZndDtoX3NvdXJjZSwgc2RhdGEtJmd0O3ZpZi5hZGRyLCBFVEhfQUxFTik7CiYjNDM7CiYjNDM7CWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiYjNDM7CW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKJiM0MzsJaW5mby0mZ3Q7ZmxhZ3MgPSBmbGFnczsKJiM0MzsJY3RybF9mbGFncyB8PSB1MzJfZW5jb2RlX2JpdHMobGlua19pZCwgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspOwomIzQzOwlpbmZvLSZndDtjb250cm9sLmZsYWdzID0gY3RybF9mbGFnczsKJiM0MzsKJiM0MzsJaWYgKCFncm91cF9hZGRyZXNzZWQpCiYjNDM7CQlpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLCBjb29raWUpOwomIzQzOwomIzQzOwlza2IgPSBpZWVlODAyMTFfYnVpbGRfaGRyKHNkYXRhLCBza2IsIHN0YSk7CiYjNDM7CWlmIChJU19FUlIoc2tiKSkgewomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4gUFRSX0VSUihza2IpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAotc3RhcnRfeG1pdDoKJiM0MzsJaWYgKGxpbmtfaWQgIT0gdTMyX2dldF9iaXRzKGluZm8tJmd0O2NvbnRyb2wuZmxhZ3MsCiYjNDM7CQkJCSAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSykpIHsKJiM0MzsJCWllZWU4MDIxMV9mcmVlX3R4c2tiKCZhbXA7bG9jYWwtJmd0O2h3LCBza2IpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXZfc3dfbmV0c3RhdHNfdHhfYWRkKGRldiwgMSwgc2tiLSZndDtsZW4pOwomIzQzOwlpZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KGxvY2FsLCBza2ItJmd0O2xlbik7CiYjNDM7CiAJbG9jYWxfYmhfZGlzYWJsZSgpOwotCV9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBza2ItJmd0O2RldiwgZmxhZ3MsIGN0cmxfZmxhZ3MsIGNvb2tpZSk7CiYjNDM7CWllZWU4MDIxMV94bWl0KHNkYXRhLCBzdGEsIHNrYik7CiAJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NjYwLDggJiM0Mzs2NjI5LDcgQEAgaW50IGllZWU4MDIxMV9wcm9iZV9tZXNoX2xpbmsoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2tiLSZndDtkZXYsIDAsCi0JCQkJICAgICBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUCwKLQkJCQkgICAgIDApOwomIzQzOwkJCQkgICAgIElFRUU4MDIxMV9UWF9DVFJMX1NLSVBfTVBBVEhfTE9PS1VQKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKIAogCXJldHVybiAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA2MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDcyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBtYWM4MDIxMSBUWCBQYXRoIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGluIGBuZXQvbWFjODAyMTEvYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyB0b3VjaGluZyBzb21lIGZ1bmRhbWVudGFsIFRYIHBhdGggY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgY29tbWl0IGFmZmVjdHMgYSBudW1iZXIgb2Yga2V5IGZ1bmN0aW9uczogYGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCwgYGllZWU4MDIxMV9idWlsZF9oZHJgLCBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGAsIGFuZCBzbyBvbi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBpbnZvbHZlIHJlbW92aW5nIHRoZSBgY29va2llYCBhcmd1bWVudCBmcm9tIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCBhbmQgYWx0ZXJpbmcgdGhlIGNhbGwgdG8gYGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiYCBhbG9uZyB3aXRoIGhvdyBgaW5mb2AgKHRoZSBza2ImIzM5O3MgY29udHJvbCBibG9jaykgZ2V0cyBpbml0aWFsaXplZC4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uIGluIGhvdyBtYWM4MDIxMSBoYW5kbGVzIHRyYW5zbWlzc2lvbnMuIFRoaXMgaGFzIHdpZGUgaW1wbGljYXRpb25zLCBuYXR1cmFsbHksIGJlaW5nIHJpZ2h0IGluIHRoZSBjb3JlIG9mIHRoZSA4MDIuMTEgd2lyZWxlc3Mgc3RhY2suCgpGaXJzdCB0aGluZyBJIHRoaW5rIGlzLCBpcyB0aGlzIGZ1enplci1mcmllbmRseT8gQW5kLCB5ZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBleGlzdGVuY2Ugb2YgYG1hYzgwMjExX2h3c2ltYCwgdGhlIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGRyaXZlciwgaXMgY3J1Y2lhbCBoZXJlLiAgSXQgbWVhbnMgSSBjYW4gdGVzdCB0aGlzIGVhc2lseSBpbiBRRU1VLiBHb29kLgoKSSBzaG91bGQgbGlzdCBhbGwgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucy4gTGV0IG1lIHF1aWNrbHkgbm90ZSB0aG9zZSBkb3duOiBgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGFgLCBgaWVlZTgwMjExX3N0b3JlX2Fja19za2JgLCBgaWVlZTgwMjExX2J1aWxkX2hkcmAsIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCwgYGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4X29uZWAsIGBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eGAsIGBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAsIGBpZWVlODAyMTFfODAyM194bWl0YCwgYGllZWU4MDIxMV9idWlsZF9kYXRhX3RlbXBsYXRlYCwgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgLCBgaWVlZTgwMjExX3Byb2JlX21lc2hfbGlua2AuCgpOb3csIGxldCYjMzk7cyB6b29tIGluIGEgbGl0dGxlLiBCYXNlZCBvbiBhIHF1aWNrIGdsYW5jZSwgSSYjMzk7bGwgcGF5IGNsb3NlciBhdHRlbnRpb24gdG8gYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgLCBgaWVlZTgwMjExX3Byb2JlX21lc2hfbGlua2AsIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCwgYGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCwgYW5kIGBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZWAuIFdhaXQgYSBtaW51dGUsIGBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAgaXMgKnRoZSogaG90LXBhdGggZm9yIG1hYzgwMjExIGludGVyZmFjZXMsIGl0JiMzOTtzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uLCBzbyB0aGlzIGNoYW5nZSB3aWxsIGJlIGNyaXRpY2FsLiBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGAgaXMgYWxzbyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGhhbmRsZXMgODAyLjFYL0VBUE9MIHRyYWZmaWMgYW5kIHJlbGF0ZWQgY29udHJvbCBwb3J0IGZyYW1lcywgd2hpY2ggd2hpbGUgbGVzcyAmIzM0O2hvdCYjMzQ7IHRoYW4gdGhlIGNvcmUgVFggcGF0aCwgaXMgc3RpbGwgdml0YWwuIGBpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rYCBkZWFscyB3aXRoIG1lc2ggbmV0d29ya3MuIGBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZWAgaXMgdXNlZCBmb3IsIG9idmlvdXNseSwgYnVpbGRpbmcgZGF0YSB0ZW1wbGF0ZXMuCgpJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHVzYWdlIG9mIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBhbmQgYGllZWU4MDIxMV9wcm9iZV9tZXNoX2xpbmtgLiBBbHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY2hhbmdlZCBhYm91dCBkYXRhIHRlbXBsYXRlIGJ1aWxkaW5nLiBJIHNob3VsZCBzZWFyY2ggZm9yIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBpbiB0aGUgc291cmNlIGJhc2UgYW5kIHNlZSB3aGVyZSB0aGF0JiMzOTtzIGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9jZmcuYz01OTc2PWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNjA3MC1cdC5zZXRfbXVsdGljYXN0X3RvX3VuaWNhc3QgPSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF90b191bmljYXN0LFxubmV0L21hYzgwMjExL2NmZy5jOjYwNzE6XHQudHhfY29udHJvbF9wb3J0ID0gaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydCxcbm5ldC9tYWM4MDIxMS9jZmcuYy02MDcyLVx0LmdldF90eHFfc3RhdHMgPSBpZWVlODAyMTFfZ2V0X3R4cV9zdGF0cyxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMjQ2PXZvaWQgaWVlZTgwMjExX2NsZWFyX2Zhc3RfeG1pdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjQ3OmludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjQ4LVx0XHRcdCAgICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sXG4tLVxubmV0L21hYzgwMjExL3R4LmM9NjQ0OD12b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTY0NzgtXG5uZXQvbWFjODAyMTEvdHguYzo2NDc5OmludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvbWFjODAyMTEvdHguYy02NDgwLVx0XHRcdCAgICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MjcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENoYW5nZXMgdG8gdGhlIDgwMi4xMSBTdGFjayBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L21hYzgwMjExL3R4LmNgLCBgbmV0L21hYzgwMjExL3RkbHMuY2AsIGFuZCBgbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhgLiBUaGF0JiMzOTtzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgbWFjODAyMTEgY29yZSwgd2hpY2gsIGZvciB0aG9zZSBub3QgZmFtaWxpYXIsIGlzIHRoZSBMaW51eCBrZXJuZWwmIzM5O3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIDgwMi4xMSBzdGFjay4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGZvY3VzZWQgb24gaG93IHRyYW5zbWl0IG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQuCgpTcGVjaWZpY2FsbHksIEkgc2VlIGEgcmVmYWN0b3JpbmcgZWZmb3J0IGdvaW5nIG9uLiBUaGUgc2lnbmF0dXJlIG9mIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCBpcyBiZWluZyBjaGFuZ2VkLCByZW1vdmluZyB0aGUgYGNvb2tpZWAgYXJndW1lbnQuIEFsc28sIGBpZWVlODAyMTFfYnVpbGRfaGRyYCBpcyBiZWluZyByZWZhY3RvcmVkIHRvIHJlbHkgb24gcHJlLXBvcHVsYXRlZCBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGBza2JgIGNvbnRyb2wgYmxvY2ssIHJlbW92aW5nIHRoZSBgaW5mb19mbGFnc2AsIGBjdHJsX2ZsYWdzYCwgYW5kIGBjb29raWVgIGFyZ3VtZW50cy4gSXQgc2VlbXMgbGlrZSBhIGNvbnNvbGlkYXRpb24gb2YgZGF0YSB3aXRoaW4gdGhlIGBza2JgJiMzOTtzIGNvbnRyb2wgYmxvY2ssIGBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYmAgaXMgYWxzbyBiZWluZyB1cGRhdGVkLCBhbmQgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHBvcHVsYXRlIHRoaXMgYGluZm9gIGFuZCBjYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgZGlyZWN0bHkuIFRoaXMgaXMgZ29vZDogcmVtb3ZpbmcgZnVuY3Rpb24gYXJndW1lbnRzIGFuZCBtb3ZpbmcgdGhhdCByZXNwb25zaWJpbGl0eSB0byBvdGhlciB2YXJpYWJsZXMgaW4gdGhlIHN0cnVjdCBoZWxwcyBwcmV2ZW50IGluY29ycmVjdCB1c2FnZSBhbmQgcmVkdWNlcyB0aGUgYW1vdW50IG9mIHN0YXRlIHBhc3NlZCBhcyBhcmd1bWVudHMuCgpXYWl0IGEgc2Vjb25kLi4uICptYWM4MDIxMSo/IFllcywgaXQmIzM5O3MgdGhlIDgwMi4xMSBzdGFjay4gQW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIGBtYWM4MDIxMV9od3NpbWAsIHdoaWNoIGlzIGEgc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUgZHJpdmVyLiBUaGlzIG1lYW5zIHdlIGhhdmUgYSB2aWFibGUgcGF0aCBmb3IgZnV6emluZyEgKipXb3J0aEZ1enppbmc9dHJ1ZSoqIC0gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gYSBrZXkgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjaywgYW5kIHdlIGhhdmUgYSBwYXRoIGZvciBmdXp6aW5nIHRoZSBjb21wb25lbnRzLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGltcG9ydGFudCBzeW1ib2xzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgbW9kaWZpZWQgb3IgaGVhdmlseSBpbnZvbHZlZCBpbiB0aGUgY2hhbmdlczogYF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgLCBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGAsIGBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZWAsIGBpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rYCAodGhvdWdoIHRoYXQgbGFzdCBvbmUgc2VlbXMgbGlrZSBqdXN0IGEgY2FsbCBzaXRlLCBub3QgYSBrZXkgZW50cnkgcG9pbnQpLCBgaWVlZTgwMjExX21sb19tdWx0aWNhc3RfdHhgICh0aG91Z2ggaXQmIzM5O3Mgc3RhdGljKSBhbmQgYGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCAodGhlIG5ldGRldl90eF90KS4KCkEgY2xvc2VyIGxvb2suIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCBpcyAqZXhwb3J0ZWQqLiBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGAgaXMgdXNlZCBpbiBgbWFjODAyMTFfY29uZmlnX29wc2Agd2hpY2ggbWVhbnMgaXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBgY2ZnODAyMTFgLiBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIGlzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZvciBtYWM4MDIxMSBpbnRlcmZhY2VzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdXJmYWNlIHRvIHRhcmdldCwgcGFydGljdWxhcmx5IHdpdGggb3VyIGZ1enppbmcgc2V0dXAuCgpJJiMzOTttIGNoZWNraW5nIGlmIHRoZXNlIGtleSBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYXMgc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGxpbWl0ZWQgdmlzaWJpbGl0eTogYF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIGlzbiYjMzk7dCBzdGF0aWMsIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBpc24mIzM5O3Qgc3RhdGljLCBgaWVlZTgwMjExX2J1aWxkX2RhdGFfdGVtcGxhdGVgIGlzbiYjMzk7dCBzdGF0aWMsIGFuZCBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIGlzIGFsc28gbm90IHN0YXRpYy4gR3JlYXQsIG1lYW5zIHRoZXkgY2FuIGJlIGVhc2lseSBjYWxsZWQuCgpBbHJpZ2h0LCB0aW1lIHRvIGdvIGFuZCBjaGVjayB0aGUgS2NvbmZpZyB0byBzZWUgd2hhdCBtb2R1bGVzIGFuZCBkZXBlbmRlbmNpZXMgd2UgbmVlZCB0byBlbmFibGUgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MTk9aWYgTUFDODAyMTEgIT0gblxubmV0L21hYzgwMjExL0tjb25maWctMjAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMi1cdGJvb2xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ6Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7TWluc3RyZWxcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MzE9Y2hvaWNlXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNDAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0MTpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctNDItXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9NDg9ZW5kY2hvaWNlXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01MS1cdHN0cmluZ1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXCYjMzQ7U29tZSB3aXJlbGVzcyBkcml2ZXJzIHJlcXVpcmUgYSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNTktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MDpjb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxubmV0L21hYzgwMjExL0tjb25maWctNjEtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgbWFjODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTcxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03OC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjc5OmNvbmZpZyBNQUM4MDIxMV9MRURTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIExFRCB0cmlnZ2Vyc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg3LVxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk3OmNvbmZpZyBNQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk4LVx0Ym9vbCBcJiMzNDtUcmFjZSBhbGwgbWFjODAyMTEgZGVidWcgbWVzc2FnZXNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTA6bWVudWNvbmZpZyBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXHRib29sIFwmIzM0O1NlbGVjdCBtYWM4MDIxMSBkZWJ1Z2dpbmcgZmVhdHVyZXNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTUtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTY6Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0RvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzEtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMzI6Y29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMy1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTQyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTQzOmNvbmZpZyBNQUM4MDIxMV9NTE1FX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWFuYWdlZCBNTE1FIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1My1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NDpjb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTUtXHRib29sIFwmIzM0O1ZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjM6Y29uZmlnIE1BQzgwMjExX0hUX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjQtXHRib29sIFwmIzM0O1ZlcmJvc2UgSFQgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTc0LVxubmV0L21hYzgwMjExL0tjb25maWc6MTc1OmNvbmZpZyBNQUM4MDIxMV9PQ0JfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBPQ0IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTg1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTg2OmNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODctXHRib29sIFwmIzM0O1ZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTc6Y29uZmlnIE1BQzgwMjExX1BTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTgtXHRib29sIFwmIzM0O1ZlcmJvc2UgcG93ZXJzYXZlIG1vZGUgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjA4LVxubmV0L21hYzgwMjExL0tjb25maWc6MjA5OmNvbmZpZyBNQUM4MDIxMV9NUExfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBlZXIgbGluayBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjEtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjI6Y29uZmlnIE1BQzgwMjExX01QQVRIX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwYXRoIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNTpjb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1OC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjcxLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4MC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI4MTpjb25maWcgTUFDODAyMTFfVERMU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjgyLVx0Ym9vbCBcJiMzNDtWZXJib3NlIFRETFMgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjkyLVxubmV0L21hYzgwMjExL0tjb25maWc6MjkzOmNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xubmV0L21hYzgwMjExL0tjb25maWctMjk0LVx0Ym9vbCBcJiMzNDtFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDktXHRpbnQgXCYjMzQ7U3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVwmIzM0OyBpZiBNQUM4MDIxMV9ERUJVR19NRU5VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NzcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENoZWNrKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhpcyBmdXp6aW5nIHNldHVwIGlzIGdvaW5nIHRvIHdvcmsgYXMgaW50ZW5kZWQuIE15IGltbWVkaWF0ZSBjb25jZXJucyByZXZvbHZlIGFyb3VuZCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRvIGVuc3VyZSB0aGUgZnV6emluZyBpcyBhY3RpdmUgYW5kIGVmZmVjdGl2ZSwgSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIGBNQUM4MDIxMWAgYW5kIGBNQUM4MDIxMV9IV1NJTWAgYWN0aXZhdGVkLiBCdXQsIGhvbGQgb24uIEkgcmVtZW1iZXIgdGhhdCBgQ0ZHODAyMTFgIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBgTUFDODAyMTFgLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCB0aGF0IGRlcGVuZGVuY3kgaXMgbWV0LiBBbmQgZmluYWxseSwgSSBzaG91bGQgY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTUFDODAyMTFfSFdTSU1gIHRvIGVuc3VyZSBJIGhhdmUgZXZlcnl0aGluZyBpbiBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDODAyMTFfSFdTSU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgZm9yIFZpcnR1YWwgV2lyZWxlc3MgRHJpdmVycyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxLCBhcyB0aGF0JiMzOTtzIG9mdGVuIHRoZSBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmb3IgYSBwYXJ0aWN1bGFyIHN1YnN5c3RlbSBvciBtb2R1bGUuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgY3JpdGljYWwgaW4gZGV0ZXJtaW5pbmcgaG93IHRoZSB2aXJ0dWFsIHdpcmVsZXNzIGRyaXZlcihzKSBhcmUgYnVpbHQsIGVuYWJsZWQsIGFuZCBjb25maWd1cmVkIHdpdGhpbiB0aGUgbGFyZ2VyIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgLSB0aGUgdG9wLWxldmVsIG1lbnUgZW50cmllcywgYW55IGRlcGVuZGVuY2llcyBvciBwcmVyZXF1aXNpdGVzLCBhbmQgdGhlIGRlZmF1bHQgc3RhdGVzIG9mIHJlbGV2YW50IG9wdGlvbnMuIEl0JiMzOTtzIHRpbWUgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBrZXkgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byBlYWNoIG90aGVyLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgaW1wYWN0cyB0aGUgYXZhaWxhYmlsaXR5IG9mIGZlYXR1cmVzIG9yIGRyaXZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Y29uZmlnIE1BQzgwMjExX0hXU0lNXG4gICAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAgNDpcdFx0aGVscFxuICAgNTpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XG4gICA2Olx0XHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxuICAgNzpcdFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxuICAgODpcdFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XG4gICA5Olx0XHQgIHRvIHVzZSB0aGlzIHRvb2wuXG4gIDEwOlx0XG4gIDExOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuICAxMjpcdFx0ICBjYWxsZWQgbWFjODAyMTFfaHdzaW0uICBJZiB1bnN1cmUsIHNheSBOLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBWSVJUX1dJRklcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O1dpZmkgd3JhcHBlciBmb3IgZXRoZXJuZXQgZHJpdmVyc1wmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbm5lY3Rpb25zIHRvIGFwcGVhciBhcyBpZiB0aGV5XG4gIDE5Olx0XHQgIGFyZSB3aWZpIGNvbm5lY3Rpb25zIHRocm91Z2ggYSBzcGVjaWFsIHJ0bmV0bGluayBkZXZpY2UuXG4gIDIwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzM1CgkJCQkJCQlvdXRwdXQ6IDI0MgoJCQkJCQkJdGhvdWdodHM6IDE1MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGb2N1czogbWFjODAyMTEgVFggTG9naWMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IG1lc3Npbmcgd2l0aCBzb21lIGZ1bmRhbWVudGFsIG1hYzgwMjExIHN0dWZmIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBjb3JlIFRYIGxvZ2ljLiBJdCYjMzk7cyB0b3VjaGluZyBgbmV0L21hYzgwMjExL3R4LmNgLCBgbmV0L21hYzgwMjExL3RkbHMuY2AsIGFuZCBhIGhlYWRlciBmaWxlLCBzbyBpdCYjMzk7cyBhIGRlZXAgZGl2ZS4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyB0byB0aGUgc2lnbmF0dXJlcyBvZiBgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAgYW5kIGBpZWVlODAyMTFfbG9va3VwX3JhX3N0YWAsIGFsb25nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBob3cgVFggaW5mbyBpcyBoYW5kbGVkIGluIGBpZWVlODAyMTFfYnVpbGRfaGRyYCBhbmQgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgcGFja2V0IHRyYW5zbWlzc2lvbiwgcXVldWluZywgYW5kIGhlYWRlciBjb25zdHJ1Y3Rpb24uIEdpdmVuIHRoYXQgdGhpcyBpcyBjb3JlIHN0dWZmLCBhbmQgcmVhY2hhYmxlIHRocm91Z2ggYG1hYzgwMjExX2h3c2ltYCAod2hpY2ggaXMgZ3JlYXQgYmVjYXVzZSB0aGF0IG1lYW5zIFFFTVUvc3l6a2FsbGVyIGFyZSB2aWFibGUpLCBpdCYjMzk7cyBzY3JlYW1pbmcgZm9yIHNvbWUgZnV6emluZy4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcuIEFmdGVyIGRpZ2dpbmcgaW50byB0aGUgY29kZSwgSSBjYW4gc2VlIHRoYXQgaXQmIzM5O3MgZm9jdXNpbmcgb246CgoqICAgYGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXRgCiogICBgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGFgICh0aG91Z2ggc3RhdGljLCBzbyB3b3J0aCBjb25zaWRlcmluZyBjb250ZXh0KQoqICAgYGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiYAoqICAgYGllZWU4MDIxMV9idWlsZF9oZHJgCiogICBgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAKKiAgIGBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eF9vbmVgCiogICBgaWVlZTgwMjExX21sb19tdWx0aWNhc3RfdHhgCiogICBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgCiogICBgaWVlZTgwMjExXzgwMjNfeG1pdGAKKiAgIGBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZWAKKiAgIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YAoqICAgYGllZWU4MDIxMV9wcm9iZV9tZXNoX2xpbmtgCgpMZXQmIzM5O3MgcmVmaW5lIHRoZSBsaXN0LiBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIChib3RoIHRoZSBpbnRlcm5hbCBhbmQgZXhwb3J0ZWQgdmVyc2lvbnMpIGxvb2sgbGlrZSBob3QgcGF0aHMg4oCTIHRoZXkmIzM5O3JlIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9ucywgbWFraW5nIHRoZW0gaGlnaC1wcmlvcml0eSBjYW5kaWRhdGVzLiBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGAgaXMgYWxzbyBnb29kLiBJdCYjMzk7cyB1c2VkIGZvciBjb250cm9sIHBvcnQgZnJhbWVzIGxpa2UgRUFQT0wsIHNvIGEgbW9yZSBzcGVjaWZpYyB0YXJnZXQuIEFsc28sIGBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZWAgd2lsbCBiZSB1c2VmdWwgYW5kIGBpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rYCBmb3IgbWVzaCBsaW5rcy4gYGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXRgIGxvb2tzIGdvb2QgdG9vLgoKU2luY2UgSSYjMzk7bGwgYmUgZnV6emluZywgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGVmZm9ydHMgb246CgoqICAgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIChBUEkgZW50cnlwb2ludCkKKiAgIGBpZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0YAoqICAgYGllZWU4MDIxMV9wcm9iZV9tZXNoX2xpbmtgCgpGb3IgdGVzdGluZyB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIG1ha2Ugc3VyZSB0aGF0IEkgZW5hYmxlIGEgZmV3IGNvbmZpZ3VyYXRpb25zOgoKKiAgIGBNQUM4MDIxMWAgKG9idmlvdXNseSkKKiAgIGBNQUM4MDIxMV9IV1NJTWAgKHRvIHVzZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBlc3NlbnRpYWwgZm9yIHByYWN0aWNhbCB0ZXN0aW5nKQoqICAgYE1BQzgwMjExX01FU0hgIChiZWNhdXNlIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgYmxvY2sgcmVsYXRlZCB0byBgQ09ORklHX01BQzgwMjExX01FU0hgIGluIGBpZWVlODAyMTFfbG9va3VwX3JhX3N0YWApLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgc2hha2luZyB1cCBjb3JlIHRyYW5zbWlzc2lvbiBsb2dpYy4gQnkgdGFyZ2V0aW5nIHNwZWNpZmljIGVudHJ5IHBvaW50cyBhbmQgc2V0dGluZyB1cCBhIHByb3BlciBlbnZpcm9ubWVudCAodXNpbmcgSFdTSU0gYW5kIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zKSwgSSB0aGluayB0aGlzIGZ1enppbmcgY2FtcGFpZ24gd2lsbCBoYXZlIGEgaGlnaCBsaWtlbGlob29kIG9mIGZpbmRpbmcgc29tZSBpbnRlcmVzdGluZyBidWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OywKICAgICYjMzQ7TUFDODAyMTFfTUVTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxMV90eF9jb250cm9sX3BvcnQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWFjODAyMTEgdHJhbnNtaXNzaW9uIGxvZ2ljLCBpbmNsdWRpbmcgVFggaW5mbyBpbml0aWFsaXphdGlvbiwgaGVhZGVyIGJ1aWxkaW5nLCBhbmQgY29udHJvbCBwb3J0IHRyYW5zbWlzc2lvbi4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsaXplZCB3aXJlbGVzcyBpbnRlcmZhY2VzIChtYWM4MDIxMV9od3NpbSkuIFdlIHNob3VsZCBmb2N1cyBmdXp6aW5nIG9uIHRoZSBtb2RpZmllZCBlbnRyeSBwb2ludHMgbGlrZSBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGAgYW5kIGBpZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0YC4gYE1BQzgwMjExX01FU0hgIGlzIG5lZWRlZCB0byByZWFjaCB0aGUgbW9kaWZpZWQgbWVzaC1zcGVjaWZpYyBsb2dpYyBpbiBgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGFgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9NRVNIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9wcm9iZV9tZXNoX2xpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtYWM4MDIxMSB0cmFuc21pc3Npb24gbG9naWMsIGluY2x1ZGluZyBUWCBpbmZvIGluaXRpYWxpemF0aW9uLCBoZWFkZXIgYnVpbGRpbmcsIGFuZCBjb250cm9sIHBvcnQgdHJhbnNtaXNzaW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIHZpcnR1YWxpemVkIHdpcmVsZXNzIGludGVyZmFjZXMgKG1hYzgwMjExX2h3c2ltKS4gV2Ugc2hvdWxkIGZvY3VzIGZ1enppbmcgb24gdGhlIG1vZGlmaWVkIGVudHJ5IHBvaW50cyBsaWtlIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBhbmQgYGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXRgLiBgTUFDODAyMTFfTUVTSGAgaXMgbmVlZGVkIHRvIHJlYWNoIHRoZSBtb2RpZmllZCBtZXNoLXNwZWNpZmljIGxvZ2ljIGluIGBpZWVlODAyMTFfbG9va3VwX3JhX3N0YWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTowMzo0Ny42MjU1MDMzMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQ2OTgzNDc5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIixcbiAgICBcIk1BQzgwMjExX01FU0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0XCIsXG4gICAgXCJpZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0XCIsXG4gICAgXCJpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtYWM4MDIxMSB0cmFuc21pc3Npb24gbG9naWMsIGluY2x1ZGluZyBUWCBpbmZvIGluaXRpYWxpemF0aW9uLCBoZWFkZXIgYnVpbGRpbmcsIGFuZCBjb250cm9sIHBvcnQgdHJhbnNtaXNzaW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIHZpcnR1YWxpemVkIHdpcmVsZXNzIGludGVyZmFjZXMgKG1hYzgwMjExX2h3c2ltKS4gV2Ugc2hvdWxkIGZvY3VzIGZ1enppbmcgb24gdGhlIG1vZGlmaWVkIGVudHJ5IHBvaW50cyBsaWtlIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBhbmQgYGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXRgLiBgTUFDODAyMTFfTUVTSGAgaXMgbmVlZGVkIHRvIHJlYWNoIHRoZSBtb2RpZmllZCBtZXNoLXNwZWNpZmljIGxvZ2ljIGluIGBpZWVlODAyMTFfbG9va3VwX3JhX3N0YWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjAzOjQ3LjYyNTUxMDQ0NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4ODg2OTc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVkMTNiZDFhYWMyM2MwNGRjYzI4N2JmMjM2NTA5ZmM2NGU4OGEwMDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAxOTowMzo0NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuaW5kZXggNTc2MWU5NjIxNDkxNC4uZjRhYzk0NWI1NTA4OCAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxcbisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuQEAgLTIyMzMsOCArMjIzMyw3IEBAIG5ldGRldl90eF90IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0ICB1MzIgaW5mb19mbGFncyxcXG4tXFx0XFx0XFx0XFx0ICB1MzIgY3RybF9mbGFncyxcXG4tXFx0XFx0XFx0XFx0ICB1NjQgY29va2llKTtcXG4rXFx0XFx0XFx0XFx0ICB1MzIgY3RybF9mbGFncyk7XFxuIHN0cnVjdCBza19idWZmICpcXG4gaWVlZTgwMjExX2J1aWxkX2RhdGFfdGVtcGxhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvX2ZsYWdzKTtcXG5AQCAtMjQ3MiwxMSArMjQ3MSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfcmVxdWlyZV9lbmNyeXB0ZWRfYXNzb2MoX19sZTE2IGZjLFxcbiBcXHRyZXR1cm4gc3RhIFxcdTAwMjZcXHUwMDI2IHN0YS1cXHUwMDNlc3RhLmVwcF9wZWVyIFxcdTAwMjZcXHUwMDI2IGllZWU4MDIxMV9pc19hc3NvYyhmYyk7XFxuIH1cXG4gXFxuLS8qIHN0YV9vdXQgbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgRVJSX1BUUigpIGJlZm9yZSB1c2luZyAqL1xcbi1pbnQgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IHN0YV9pbmZvICoqc3RhX291dCk7XFxuLVxcbiBzdGF0aWMgaW5saW5lIHZvaWRcXG4gaWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLFxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdGRscy5jIGIvbmV0L21hYzgwMjExL3RkbHMuY1xcbmluZGV4IGRjMmY2NjJmZTRjNDYuLjRmNGNhZTlmZDI3NGMgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL3RkbHMuY1xcbisrKyBiL25ldC9tYWM4MDIxMS90ZGxzLmNcXG5AQCAtMTEyMSw3ICsxMTIxLDcgQEAgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHQvKiBkaXNhYmxlIGJvdHRvbSBoYWx2ZXMgd2hlbiBlbnRlcmluZyB0aGUgVHggcGF0aCAqL1xcbiBcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuIFxcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIGZsYWdzLFxcbi1cXHRcXHRcXHRcXHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQywgMCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDKTtcXG4gXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXFxuaW5kZXggM2ExZTJjOWUxNTY1ZS4uOTExYzRiNTcwMGQwOSAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xcbisrKyBiL25ldC9tYWM4MDIxMS90eC5jXFxuQEAgLTI1MDQsOSArMjUwNCwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX2lzX3RkbHNfc2V0dXAoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0ICAgICAgIHNrYi1cXHUwMDNlZGF0YVsxNF0gPT0gV0xBTl9URExTX1NOQVBfUkZUWVBFO1xcbiB9XFxuIFxcbi1pbnQgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IHN0YV9pbmZvICoqc3RhX291dClcXG4rLypcXG4rICogUmV0dXJucyBhbiBlcnJvciBpZiB0aGUgZnJhbWUgc2hvdWxkIGJlIGRyb3BwZWQsIG90aGVyd2lzZVxcbisgKiB0aGUgKnN0YV9vdXQgcG9pbnRlciBpcyBmaWxsZWQ6XFxuKyAqICAtIHZhbGlkIHN0YSBwb2ludGVyOiBmcmFtZSBnb2VzIHRvIHRoYXQgc3RhdGlvblxcbisgKiAgLSBOVUxMOiBmcmFtZSB3aWxsIGJlIHVuaWNhc3QgdG8gYSB5ZXQgdW5rbm93biBzdGF0aW9uXFxuKyAqICAtIEVSUl9QVFIoLUVOT0VOVCk6IGZyYW1lIHdpbGwgYmUgZ3JvdXAgYWRkcmVzc2VkXFxuKyAqL1xcbitzdGF0aWMgaW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc3RhX2luZm8gKipzdGFfb3V0KVxcbiB7XFxuIFxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xcbiBcXG5AQCAtMjUzMSw2ICsyNTM4LDEwIEBAIGludCBpZWVlODAyMTFfbG9va3VwX3JhX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0YnJlYWs7XFxuICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbiBcXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XFxuK1xcdFxcdGlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihza2ItXFx1MDAzZWRhdGEpKSB7XFxuK1xcdFxcdFxcdCpzdGFfb3V0ID0gRVJSX1BUUigtRU5PRU5UKTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4gXFx0XFx0LyogZGV0ZXJtaW5lZCBtdWNoIGxhdGVyICovXFxuIFxcdFxcdCpzdGFfb3V0ID0gTlVMTDtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTI1NzMsMTcgKzI1ODQsMTUgQEAgaW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0KnN0YV9vdXQgPSBzdGEgPzogRVJSX1BUUigtRU5PRU5UKTtcXG4rXFx0KnN0YV9vdXQgPSBzdGE7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdTE2IGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHQgICB1MzIgKmluZm9fZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdCAgIHU2NCBjb29raWUpXFxuK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IGNvb2tpZSlcXG4ge1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XFxuIFxcdHN0cnVjdCBza19idWZmICphY2tfc2tiO1xcbi1cXHR1MTYgaW5mb19pZCA9IDA7XFxuIFxcbiBcXHRpZiAoc2tiLVxcdTAwM2VzaylcXG4gXFx0XFx0YWNrX3NrYiA9IHNrYl9jbG9uZV9zayhza2IpO1xcbkBAIC0yNjAwLDU4ICsyNjA5LDQxIEBAIHN0YXRpYyB1MTYgaWVlZTgwMjExX3N0b3JlX2Fja19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuIFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmxvY2FsLVxcdTAwM2VhY2tfc3RhdHVzX2xvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdFxcdGlmIChpZCBcXHUwMDNlPSAwKSB7XFxuLVxcdFxcdFxcdGluZm9faWQgPSBpZDtcXG4tXFx0XFx0XFx0KmluZm9fZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2VzdGF0dXNfZGF0YSA9IGlkO1xcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2VzdGF0dXNfZGF0YV9pZHIgPSAxO1xcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7XFxuIFxcdFxcdFxcdGlmIChjb29raWUpXFxuIFxcdFxcdFxcdFxcdElFRUU4MDIxMV9TS0JfQ0IoYWNrX3NrYiktXFx1MDAzZWFjay5jb29raWUgPSBjb29raWU7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGtmcmVlX3NrYihhY2tfc2tiKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcbi1cXHRyZXR1cm4gaW5mb19pZDtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgaWVlZTgwMjExX3JlbW92ZV9hY2tfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1MTYgaW5mb19pZClcXG4te1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqYWNrX3NrYjtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tXFxuLVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWNrX3N0YXR1c19sb2NrLCBmbGFncyk7XFxuLVxcdGFja19za2IgPSBpZHJfcmVtb3ZlKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWNrX3N0YXR1c19mcmFtZXMsIGluZm9faWQpO1xcbi1cXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWNrX3N0YXR1c19sb2NrLCBmbGFncyk7XFxuLVxcbi1cXHRrZnJlZV9za2IoYWNrX3NrYik7XFxuIH1cXG4gXFxuIC8qKlxcbiAgKiBpZWVlODAyMTFfYnVpbGRfaGRyIC0gYnVpbGQgODAyLjExIGhlYWRlciBpbiB0aGUgZ2l2ZW4gZnJhbWVcXG4gICogQHNkYXRhOiB2aXJ0dWFsIGludGVyZmFjZSB0byBidWlsZCB0aGUgaGVhZGVyIGZvclxcbiAgKiBAc2tiOiB0aGUgc2tiIHRvIGJ1aWxkIHRoZSBoZWFkZXIgaW5cXG4tICogQGluZm9fZmxhZ3M6IHNrYiBmbGFncyB0byBzZXRcXG4gICogQHN0YTogdGhlIHN0YXRpb24gcG9pbnRlclxcbi0gKiBAY3RybF9mbGFnczogaW5mbyBjb250cm9sIGZsYWdzIHRvIHNldFxcbi0gKiBAY29va2llOiBjb29raWUgcG9pbnRlciB0byBmaWxsIChpZiBub3QgJU5VTEwpXFxuICAqXFxuICAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIHNrYiB3aXRoIDgwMi4zIGhlYWRlciBhbmQgcmVmb3JtYXRzIHRoZSBoZWFkZXIgdG9cXG4gICogdGhlIGFwcHJvcHJpYXRlIElFRUUgODAyLjExIGhlYWRlciBiYXNlZCBvbiB3aGljaCBpbnRlcmZhY2UgdGhlIHBhY2tldCBpc1xcbiAgKiBiZWluZyB0cmFuc21pdHRlZCBvbi5cXG4gICpcXG4tICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gYWxzbyB0YWtlcyBjYXJlIG9mIHRoZSBUWCBzdGF0dXMgcmVxdWVzdCBhbmRcXG4tICogcG90ZW50aWFsIHVuc2hhcmluZyBvZiB0aGUgU0tCIC0gdGhpcyBuZWVkcyB0byBiZSBpbnRlcmxlYXZlZCB3aXRoIHRoZVxcbi0gKiBoZWFkZXIgYnVpbGRpbmcuXFxuKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFsc28gdGFrZXMgY2FyZSBvZiB0aGUgVFggc3RhdHVzIHJlcXVlc3QuIFRoZSBza2JcXG4rICogbXVzdCBub3QgYmUgc2hhcmVkLCBhbmQgaXRzIFRYIGluZm8gbXVzdCBhbHJlYWR5IGJlIGluaXRpYWxpc2VkIC0gdGhpc1xcbisgKiBmdW5jdGlvbiBvbmx5IGZpbGxzIGluIHdoYXQgaXQgZGV0ZXJtaW5lcyBpdHNlbGYuXFxuICAqXFxuICAqIFRoZSBmdW5jdGlvbiByZXF1aXJlcyB0aGUgcmVhZC1zaWRlIFJDVSBsb2NrIGhlbGRcXG4gICpcXG4gICogUmV0dXJuczogdGhlIChwb3NzaWJseSByZWFsbG9jYXRlZCkgc2tiIG9yIGFuIEVSUl9QVFIoKSBjb2RlXFxuICAqL1xcbiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvX2ZsYWdzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTMyIGN0cmxfZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHU2NCBjb29raWUpXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbiB7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuLVxcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbztcXG4gXFx0aW50IGhlYWRfbmVlZDtcXG4gXFx0dTE2IGV0aGVydHlwZSwgaGRybGVuLCAgbWVzaGhkcmxlbiA9IDA7XFxuIFxcdF9fbGUxNiBmYztcXG5AQCAtMjY2MywxOCArMjY1NSwxOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdGJvb2wgd21lX3N0YSA9IGZhbHNlLCBhdXRob3JpemVkID0gZmFsc2U7XFxuIFxcdGJvb2wgdGRsc19wZWVyO1xcbiBcXHRib29sIG11bHRpY2FzdDtcXG4tXFx0dTE2IGluZm9faWQgPSAwO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY2hhbmN0eF9jb25mID0gTlVMTDtcXG4gXFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcXG4gXFx0aW50IHJldDtcXG4tXFx0dTggbGlua19pZCA9IHUzMl9nZXRfYml0cyhjdHJsX2ZsYWdzLCBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XFxuK1xcdHU4IGxpbmtfaWQgPSB1MzJfZ2V0X2JpdHMoaW5mby1cXHUwMDNlY29udHJvbC5mbGFncyxcXG4rXFx0XFx0XFx0XFx0ICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XFxuIFxcbiBcXHRpZiAoSVNfRVJSKHN0YSkpXFxuIFxcdFxcdHN0YSA9IE5VTEw7XFxuIFxcbiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG4gXFx0aWYgKGxvY2FsLVxcdTAwM2Vmb3JjZV90eF9zdGF0dXMpXFxuLVxcdFxcdGluZm9fZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xcbitcXHRcXHRpbmZvLVxcdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7XFxuICNlbmRpZlxcbiBcXG4gXFx0LyogY29udmVydCBFdGhlcm5ldCBoZWFkZXIgdG8gcHJvcGVyIDgwMi4xMSBoZWFkZXIgKGJhc2VkIG9uXFxuQEAgLTI4MTUsNyArMjgwNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX2hkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0LyogRm9yIGluamVjdGVkIGZyYW1lcywgZmlsbCBSQSByaWdodCBhd2F5IGFzIG5leHRob3AgbG9va3VwXFxuIFxcdFxcdCAqIHdpbGwgYmUgc2tpcHBlZC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICgoY3RybF9mbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9DVFJMX1NLSVBfTVBBVEhfTE9PS1VQKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRpZiAoKGluZm8tXFx1MDAzZWNvbnRyb2wuZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGlzX3plcm9fZXRoZXJfYWRkcihoZHIuYWRkcjEpKVxcbiBcXHRcXHRcXHRtZW1jcHkoaGRyLmFkZHIxLCBza2ItXFx1MDAzZWRhdGEsIEVUSF9BTEVOKTtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTI5NDQsMjEgKzI5MzYsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdGdvdG8gZnJlZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHVubGlrZWx5KCFtdWx0aWNhc3QgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICAoc2tfcmVxdWVzdHNfd2lmaV9zdGF0dXMoc2tiLVxcdTAwM2VzaykgfHxcXG4tXFx0XFx0ICAgICAgY3RybF9mbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUykpKVxcbi1cXHRcXHRpbmZvX2lkID0gaWVlZTgwMjExX3N0b3JlX2Fja19za2IobG9jYWwsIHNrYiwgXFx1MDAyNmluZm9fZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgY29va2llKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIElmIHRoZSBza2IgaXMgc2hhcmVkIHdlIG5lZWQgdG8gb2J0YWluIG91ciBvd24gY29weS5cXG4tXFx0ICovXFxuLVxcdHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpO1xcbi1cXHRpZiAodW5saWtlbHkoIXNrYikpIHtcXG4tXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBmcmVlO1xcbi1cXHR9XFxuLVxcbiBcXHRoZHIuZnJhbWVfY29udHJvbCA9IGZjO1xcbiBcXHRoZHIuZHVyYXRpb25faWQgPSAwO1xcbiBcXHRoZHIuc2VxX2N0cmwgPSAwO1xcbkBAIC0yOTk3LDggKzI5NzQsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdGhlYWRfbmVlZCArPSBsb2NhbC1cXHUwMDNldHhfaGVhZHJvb207XFxuIFxcdFxcdGhlYWRfbmVlZCA9IG1heF90KGludCwgMCwgaGVhZF9uZWVkKTtcXG4gXFx0XFx0aWYgKGllZWU4MDIxMV9za2JfcmVzaXplKHNkYXRhLCBza2IsIGhlYWRfbmVlZCwgRU5DUllQVF9EQVRBKSkge1xcbi1cXHRcXHRcXHRpZWVlODAyMTFfZnJlZV90eHNrYihcXHUwMDI2bG9jYWwtXFx1MDAzZWh3LCBza2IpO1xcbi1cXHRcXHRcXHRza2IgPSBOVUxMO1xcbiBcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiBcXHRcXHRcXHRnb3RvIGZyZWU7XFxuIFxcdFxcdH1cXG5AQCAtMzAyNyw1MCArMzAwMiwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcbiBcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbiBcXG4tXFx0aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG4tXFx0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xcbi1cXG4tXFx0aW5mby1cXHUwMDNlZmxhZ3MgPSBpbmZvX2ZsYWdzO1xcbi1cXHRpZiAoaW5mb19pZCkge1xcbi1cXHRcXHRpbmZvLVxcdTAwM2VzdGF0dXNfZGF0YSA9IGluZm9faWQ7XFxuLVxcdFxcdGluZm8tXFx1MDAzZXN0YXR1c19kYXRhX2lkciA9IDE7XFxuLVxcdH1cXG4gXFx0aW5mby1cXHUwMDNlYmFuZCA9IGJhbmQ7XFxuIFxcbi1cXHRpZiAobGlrZWx5KCFjb29raWUpKSB7XFxuLVxcdFxcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKGxpbmtfaWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IHByZV9jb25mX2xpbmtfaWQ7XFxuLVxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBjdHJsX2ZsYWdzIGFscmVhZHkgaGF2ZSBiZWVuIHNldCBieVxcbi1cXHRcXHQgKiBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KCksIGhlcmVcXG4tXFx0XFx0ICogd2UganVzdCBzYW5pdHkgY2hlY2sgdGhhdFxcbi1cXHRcXHQgKi9cXG4tXFxuLVxcdFxcdHByZV9jb25mX2xpbmtfaWQgPSB1MzJfZ2V0X2JpdHMoY3RybF9mbGFncyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xcbi1cXG4tXFx0XFx0aWYgKHByZV9jb25mX2xpbmtfaWQgIT0gbGlua19pZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgbGlua19pZCAhPSBJRUVFODAyMTFfTElOS19VTlNQRUNJRklFRCkge1xcbi0jaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUdcXG4tXFx0XFx0XFx0bmV0X2luZm9fcmF0ZWxpbWl0ZWQoXFxcIiVzOiBkcm9wcGVkIGZyYW1lIHRvICVwTSB3aXRoIGJhZCBsaW5rIElEIHJlcXVlc3QgKCVkIHZzLiAlZClcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgc2RhdGEtXFx1MDAzZW5hbWUsIGhkci5hZGRyMSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBwcmVfY29uZl9saW5rX2lkLCBsaW5rX2lkKTtcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdGdvdG8gZnJlZTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHRpbmZvLVxcdTAwM2Vjb250cm9sLmZsYWdzID0gY3RybF9mbGFncztcXG4tXFxuK1xcdGluZm8tXFx1MDAzZWNvbnRyb2wuZmxhZ3MgPVxcbitcXHRcXHR1MzJfcmVwbGFjZV9iaXRzKGluZm8tXFx1MDAzZWNvbnRyb2wuZmxhZ3MsIGxpbmtfaWQsXFxuK1xcdFxcdFxcdFxcdCBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XFxuIFxcdHJldHVybiBza2I7XFxuICBmcmVlOlxcbi1cXHRpZiAoaW5mb19pZClcXG4tXFx0XFx0aWVlZTgwMjExX3JlbW92ZV9hY2tfc2tiKGxvY2FsLCBpbmZvX2lkKTtcXG4tXFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdGllZWU4MDIxMV9mcmVlX3R4c2tiKFxcdTAwMjZsb2NhbC1cXHUwMDNlaHcsIHNrYik7XFxuIFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIH1cXG4gXFxuQEAgLTQzNjgsMTMgKzQzMDcsMTQgQEAgRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KTtcXG4gdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0ICB1MzIgaW5mb19mbGFncyxcXG4tXFx0XFx0XFx0XFx0ICB1MzIgY3RybF9mbGFncyxcXG4tXFx0XFx0XFx0XFx0ICB1NjQgY29va2llKVxcbitcXHRcXHRcXHRcXHQgIHUzMiBjdHJsX2ZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbztcXG4gXFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XFxuIFxcdHN0cnVjdCBza19idWZmICpuZXh0O1xcbitcXHRib29sIGdyb3VwX2FkZHJlc3NlZDtcXG4gXFx0aW50IGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkgfHwgc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBFVEhfSExFTikpIHtcXG5AQCAtNDM5NCw2ICs0MzM0LDcgQEAgdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChpZWVlODAyMTFfbG9va3VwX3JhX3N0YShzZGF0YSwgc2tiLCBcXHUwMDI2c3RhKSlcXG4gXFx0XFx0Z290byBvdXRfZnJlZTtcXG4gXFxuK1xcdGdyb3VwX2FkZHJlc3NlZCA9IElTX0VSUihzdGEpO1xcbiBcXHRpZiAoSVNfRVJSKHN0YSkpXFxuIFxcdFxcdHN0YSA9IE5VTEw7XFxuIFxcbkBAIC00NDI2LDggKzQzNjcsMjIgQEAgdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IHNkYXRhLVxcdTAwM2Vjb250cm9sX3BvcnRfcHJvdG9jb2wpXFxuIFxcdFxcdFxcdGN0cmxfZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUUkxfU0tJUF9NUEFUSF9MT09LVVA7XFxuIFxcbi1cXHRcXHRza2IgPSBpZWVlODAyMTFfYnVpbGRfaGRyKHNkYXRhLCBza2IsIGluZm9fZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdFxcdCAgc3RhLCBjdHJsX2ZsYWdzLCBjb29raWUpO1xcbitcXHRcXHRza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKSB7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYl9saXN0KG5leHQpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG4rXFx0XFx0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xcbitcXHRcXHRpbmZvLVxcdTAwM2VmbGFncyA9IGluZm9fZmxhZ3M7XFxuK1xcdFxcdGluZm8tXFx1MDAzZWNvbnRyb2wuZmxhZ3MgPSBjdHJsX2ZsYWdzO1xcbitcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFncm91cF9hZGRyZXNzZWQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICBza19yZXF1ZXN0c193aWZpX3N0YXR1cyhza2ItXFx1MDAzZXNrKSkpXFxuK1xcdFxcdFxcdGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKGxvY2FsLCBza2IsIDApO1xcbitcXG4rXFx0XFx0c2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBzdGEpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4gXFx0XFx0XFx0a2ZyZWVfc2tiX2xpc3QobmV4dCk7XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbkBAIC00NTY0LDcgKzQ1MTksNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eF9vbmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKGxpbmtfaWQsIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcXG4tXFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChvdXQsIHNkYXRhLVxcdTAwM2VkZXYsIDAsIGN0cmxfZmxhZ3MsIDApO1xcbitcXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KG91dCwgc2RhdGEtXFx1MDAzZWRldiwgMCwgY3RybF9mbGFncyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuQEAgLTQ1NzksNyArNDUzNCw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKF9fZmZzKGxpbmtzKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xcbiBcXG4tXFx0XFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIHNkYXRhLVxcdTAwM2VkZXYsIDAsIGN0cmxfZmxhZ3MsIDApO1xcbitcXHRcXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2RhdGEtXFx1MDAzZWRldiwgMCwgY3RybF9mbGFncyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtNDYyMCw4ICs0NTc1LDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0aWVlZTgwMjExX2NvbnZlcnRfdG9fdW5pY2FzdChza2IsIGRldiwgXFx1MDAyNnF1ZXVlKTtcXG4gXFx0XFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFxcdTAwMjZxdWV1ZSkpKVxcbiBcXHRcXHRcXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCAwLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAwKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpO1xcbiBcXHR9IGVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFxcdTAwMjZzZGF0YS1cXHUwMDNldmlmKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAoKHNkYXRhLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgICFpZWVlODAyMTFfaHdfY2hlY2soXFx1MDAyNnNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcsIE1MT19NQ0FTVF9NVUxUSV9MSU5LX1RYKSkgfHxcXG5AQCAtNDYzMSw4ICs0NTg1LDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0fSBlbHNlIHtcXG4gbm9ybWFsOlxcbiBcXHRcXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCAwLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAwKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbkBAIC00NzMwLDggKzQ2ODMsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfODAyM194bWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRpZiAoIXRlc3RfYml0KEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCwgXFx1MDAyNnRpZF90eC1cXHUwMDNlc3RhdGUpKSB7XFxuIFxcdFxcdFxcdC8qIGZhbGwgYmFjayB0byBub24tb2ZmbG9hZCBzbG93IHBhdGggKi9cXG4gXFx0XFx0XFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIGRldiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgMCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDKTtcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC00NzY1LDEyICs0NzE3LDggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0XFx0bWVtY3B5KElFRUU4MDIxMV9TS0JfQ0Ioc2VnKSwgaW5mbywgc2l6ZW9mKCppbmZvKSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICh1bmxpa2VseShza19yZXF1ZXN0c193aWZpX3N0YXR1cyhza2ItXFx1MDAzZXNrKSkpIHtcXG4tXFx0XFx0aW5mby1cXHUwMDNlc3RhdHVzX2RhdGEgPSBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmluZm8tXFx1MDAzZWZsYWdzLCAwKTtcXG4tXFx0XFx0aWYgKGluZm8tXFx1MDAzZXN0YXR1c19kYXRhKVxcbi1cXHRcXHRcXHRpbmZvLVxcdTAwM2VzdGF0dXNfZGF0YV9pZHIgPSAxO1xcbi1cXHR9XFxuK1xcdGlmICh1bmxpa2VseShza19yZXF1ZXN0c193aWZpX3N0YXR1cyhza2ItXFx1MDAzZXNrKSkpXFxuK1xcdFxcdGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKGxvY2FsLCBza2IsIDApO1xcbiBcXG4gXFx0ZGV2X3N3X25ldHN0YXRzX3R4X2FkZChkZXYsIHNrYnMsIGxlbik7XFxuIFxcbkBAIC00ODk5LDYgKzQ4NDcsNyBAQCBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0LmxvY2FsID0gc2RhdGEtXFx1MDAzZWxvY2FsLFxcbiBcXHRcXHQuc2RhdGEgPSBzZGF0YSxcXG4gXFx0fTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvO1xcbiBcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG5AQCAtNDkwOSw4ICs0ODU4LDEyIEBAIGllZWU4MDIxMV9idWlsZF9kYXRhX3RlbXBsYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0c2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBpbmZvX2ZsYWdzLCBzdGEsXFxuLVxcdFxcdFxcdFxcdCAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLCAwKTtcXG4rXFx0aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG4rXFx0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xcbitcXHRpbmZvLVxcdTAwM2VmbGFncyA9IGluZm9fZmxhZ3M7XFxuK1xcdGluZm8tXFx1MDAzZWNvbnRyb2wuZmxhZ3MgPSBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUM7XFxuK1xcbitcXHRza2IgPSBpZWVlODAyMTFfYnVpbGRfaGRyKHNkYXRhLCBza2IsIHN0YSk7XFxuIFxcdGlmIChJU19FUlIoc2tiKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbkBAIC02NTMwLDYgKzY0ODMsOCBAQCBpbnQgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbztcXG4rXFx0Ym9vbCBncm91cF9hZGRyZXNzZWQ7XFxuIFxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXHRzdHJ1Y3QgZXRoaGRyICplaGRyO1xcbkBAIC02NTU0LDkgKzY1MDksNiBAQCBpbnQgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRpZiAodW5lbmNyeXB0ZWQpXFxuIFxcdFxcdGZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7XFxuIFxcbi1cXHRpZiAoY29va2llKVxcbi1cXHRcXHRjdHJsX2ZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUztcXG4tXFxuIFxcdGZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9OTDgwMjExX0ZSQU1FX1RYO1xcbiBcXG4gXFx0c2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC1cXHUwMDNlaHcuZXh0cmFfdHhfaGVhZHJvb20gK1xcbkBAIC02NTczLDE1ICs2NTI1LDExIEBAIGludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcbiBcXHQvKiB3ZSBtYXkgb3ZlcnJpZGUgdGhlIFNBIGZvciBNTE8gU1RBIGxhdGVyICovXFxuIFxcdGlmIChsaW5rX2lkIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRjdHJsX2ZsYWdzIHw9IHUzMl9lbmNvZGVfYml0cyhJRUVFODAyMTFfTElOS19VTlNQRUNJRklFRCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xcbitcXHRcXHRsaW5rX2lkID0gSUVFRTgwMjExX0xJTktfVU5TUEVDSUZJRUQ7XFxuIFxcdFxcdG1lbWNweShlaGRyLVxcdTAwM2VoX3NvdXJjZSwgc2RhdGEtXFx1MDAzZXZpZi5hZGRyLCBFVEhfQUxFTik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmxpbmtfY29uZjtcXG4gXFxuLVxcdFxcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKGxpbmtfaWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcXG4tXFxuIFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0XFx0bGlua19jb25mID0gcmN1X2RlcmVmZXJlbmNlKHNkYXRhLVxcdTAwM2V2aWYubGlua19jb25mW2xpbmtfaWRdKTtcXG4gXFx0XFx0aWYgKCFsaW5rX2NvbmYpIHtcXG5AQCAtNjYwMCw5ICs2NTQ4LDYgQEAgaW50IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuIFxcbi1cXHRpZiAobG9jYWwtXFx1MDAzZWh3LnF1ZXVlcyBcXHUwMDNjIElFRUU4MDIxMV9OVU1fQUNTKVxcbi1cXHRcXHRnb3RvIHN0YXJ0X3htaXQ7XFxuLVxcbiBcXHQvKiB1cGRhdGUgUW9TIGhlYWRlciB0byBwcmlvcml0aXplIGNvbnRyb2wgcG9ydCBmcmFtZXMgaWYgcG9zc2libGUsXFxuIFxcdCAqIHByaW9yaXRpemF0aW9uIGFsc28gaGFwcGVucyBmb3IgY29udHJvbCBwb3J0IGZyYW1lcyBzZW5kIG92ZXJcXG4gXFx0ICogQUZfUEFDS0VUXFxuQEAgLTY2MTUsMjQgKzY1NjAsNDggQEAgaW50IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFJU19FUlIoc3RhKSkge1xcbi1cXHRcXHR1MTYgcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKHNkYXRhLCBzdGEsIHNrYik7XFxuK1xcdGdyb3VwX2FkZHJlc3NlZCA9IElTX0VSUihzdGEpO1xcbitcXHRpZiAoSVNfRVJSKHN0YSkpXFxuK1xcdFxcdHN0YSA9IE5VTEw7XFxuIFxcbi1cXHRcXHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBxdWV1ZSk7XFxuK1xcdHNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc2RhdGEsIHN0YSwgc2tiKSk7XFxuIFxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBmb3IgTUxPIFNUQSwgdGhlIFNBIHNob3VsZCBiZSB0aGUgQVAgTUxEIGFkZHJlc3MsIGJ1dFxcbi1cXHRcXHQgKiB0aGUgbGluayBJRCBoYXMgYmVlbiBzZWxlY3RlZCBhbHJlYWR5XFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoc3RhIFxcdTAwMjZcXHUwMDI2IHN0YS1cXHUwMDNlc3RhLm1sbylcXG4tXFx0XFx0XFx0bWVtY3B5KGVoZHItXFx1MDAzZWhfc291cmNlLCBzZGF0YS1cXHUwMDNldmlmLmFkZHIsIEVUSF9BTEVOKTtcXG4rXFx0LypcXG4rXFx0ICogZm9yIE1MTyBTVEEsIHRoZSBTQSBzaG91bGQgYmUgdGhlIEFQIE1MRCBhZGRyZXNzLCBidXRcXG4rXFx0ICogdGhlIGxpbmsgSUQgaGFzIGJlZW4gc2VsZWN0ZWQgYWxyZWFkeVxcbitcXHQgKi9cXG4rXFx0aWYgKHN0YSBcXHUwMDI2XFx1MDAyNiBzdGEtXFx1MDAzZXN0YS5tbG8pXFxuK1xcdFxcdG1lbWNweShlaGRyLVxcdTAwM2VoX3NvdXJjZSwgc2RhdGEtXFx1MDAzZXZpZi5hZGRyLCBFVEhfQUxFTik7XFxuK1xcbitcXHRpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xcbitcXHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XFxuK1xcdGluZm8tXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuK1xcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKGxpbmtfaWQsIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcXG4rXFx0aW5mby1cXHUwMDNlY29udHJvbC5mbGFncyA9IGN0cmxfZmxhZ3M7XFxuK1xcbitcXHRpZiAoIWdyb3VwX2FkZHJlc3NlZClcXG4rXFx0XFx0aWVlZTgwMjExX3N0b3JlX2Fja19za2IobG9jYWwsIHNrYiwgY29va2llKTtcXG4rXFxuK1xcdHNrYiA9IGllZWU4MDIxMV9idWlsZF9oZHIoc2RhdGEsIHNrYiwgc3RhKTtcXG4rXFx0aWYgKElTX0VSUihza2IpKSB7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihza2IpO1xcbiBcXHR9XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4tc3RhcnRfeG1pdDpcXG4rXFx0aWYgKGxpbmtfaWQgIT0gdTMyX2dldF9iaXRzKGluZm8tXFx1MDAzZWNvbnRyb2wuZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSykpIHtcXG4rXFx0XFx0aWVlZTgwMjExX2ZyZWVfdHhza2IoXFx1MDAyNmxvY2FsLVxcdTAwM2Vodywgc2tiKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRkZXZfc3dfbmV0c3RhdHNfdHhfYWRkKGRldiwgMSwgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHRpZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KGxvY2FsLCBza2ItXFx1MDAzZWxlbik7XFxuK1xcbiBcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuLVxcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBza2ItXFx1MDAzZWRldiwgZmxhZ3MsIGN0cmxfZmxhZ3MsIGNvb2tpZSk7XFxuK1xcdGllZWU4MDIxMV94bWl0KHNkYXRhLCBzdGEsIHNrYik7XFxuIFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTY2NjAsOCArNjYyOSw3IEBAIGludCBpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcbiBcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuIFxcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBza2ItXFx1MDAzZWRldiwgMCxcXG4tXFx0XFx0XFx0XFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUCxcXG4tXFx0XFx0XFx0XFx0ICAgICAwKTtcXG4rXFx0XFx0XFx0XFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUCk7XFxuIFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjAzOjQ4LjgxNTE0MjA0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg5MjgwMTg3ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiLFxuICAgIFwiTUFDODAyMTFfTUVTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV90eF9jb250cm9sX3BvcnRcIixcbiAgICBcImllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXRcIixcbiAgICBcImllZWU4MDIxMV9wcm9iZV9tZXNoX2xpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1hYzgwMjExIHRyYW5zbWlzc2lvbiBsb2dpYywgaW5jbHVkaW5nIFRYIGluZm8gaW5pdGlhbGl6YXRpb24sIGhlYWRlciBidWlsZGluZywgYW5kIGNvbnRyb2wgcG9ydCB0cmFuc21pc3Npb24uIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgdmlydHVhbGl6ZWQgd2lyZWxlc3MgaW50ZXJmYWNlcyAobWFjODAyMTFfaHdzaW0pLiBXZSBzaG91bGQgZm9jdXMgZnV6emluZyBvbiB0aGUgbW9kaWZpZWQgZW50cnkgcG9pbnRzIGxpa2UgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIGFuZCBgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldGAuIGBNQUM4MDIxMV9NRVNIYCBpcyBuZWVkZWQgdG8gcmVhY2ggdGhlIG1vZGlmaWVkIG1lc2gtc3BlY2lmaWMgbG9naWMgaW4gYGllZWU4MDIxMV9sb29rdXBfcmFfc3RhYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWQxM2JkMWFhYzIzYzA0ZGNjMjg3YmYyMzY1MDlmYzY0ZTg4YTAwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTk6MDM6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5pbmRleCA1NzYxZTk2MjE0OTE0Li5mNGFjOTQ1YjU1MDg4IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5AQCAtMjIzMyw4ICsyMjMzLDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyMyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICB1MzIgaW5mb19mbGFncyxcbi1cdFx0XHRcdCAgdTMyIGN0cmxfZmxhZ3MsXG4tXHRcdFx0XHQgIHU2NCBjb29raWUpO1xuK1x0XHRcdFx0ICB1MzIgY3RybF9mbGFncyk7XG4gc3RydWN0IHNrX2J1ZmYgKlxuIGllZWU4MDIxMV9idWlsZF9kYXRhX3RlbXBsYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvX2ZsYWdzKTtcbkBAIC0yNDcyLDExICsyNDcxLDYgQEAgc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yZXF1aXJlX2VuY3J5cHRlZF9hc3NvYyhfX2xlMTYgZmMsXG4gXHRyZXR1cm4gc3RhIFx1MDAyNlx1MDAyNiBzdGEtXHUwMDNlc3RhLmVwcF9wZWVyIFx1MDAyNlx1MDAyNiBpZWVlODAyMTFfaXNfYXNzb2MoZmMpO1xuIH1cbiBcbi0vKiBzdGFfb3V0IG5lZWRzIHRvIGJlIGNoZWNrZWQgZm9yIEVSUl9QVFIoKSBiZWZvcmUgdXNpbmcgKi9cbi1pbnQgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0ICAgIHN0cnVjdCBzdGFfaW5mbyAqKnN0YV9vdXQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgdm9pZFxuIGllZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90ZGxzLmMgYi9uZXQvbWFjODAyMTEvdGRscy5jXG5pbmRleCBkYzJmNjYyZmU0YzQ2Li40ZjRjYWU5ZmQyNzRjIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3RkbHMuY1xuKysrIGIvbmV0L21hYzgwMjExL3RkbHMuY1xuQEAgLTExMjEsNyArMTEyMSw3IEBAIGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdC8qIGRpc2FibGUgYm90dG9tIGhhbHZlcyB3aGVuIGVudGVyaW5nIHRoZSBUeCBwYXRoICovXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCBmbGFncyxcbi1cdFx0XHRcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLCAwKTtcbitcdFx0XHRcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDKTtcbiBcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXG5pbmRleCAzYTFlMmM5ZTE1NjVlLi45MTFjNGI1NzAwZDA5IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3R4LmNcbisrKyBiL25ldC9tYWM4MDIxMS90eC5jXG5AQCAtMjUwNCw5ICsyNTA0LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfaXNfdGRsc19zZXR1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0ICAgICAgIHNrYi1cdTAwM2VkYXRhWzE0XSA9PSBXTEFOX1RETFNfU05BUF9SRlRZUEU7XG4gfVxuIFxuLWludCBpZWVlODAyMTFfbG9va3VwX3JhX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgICAgc3RydWN0IHN0YV9pbmZvICoqc3RhX291dClcbisvKlxuKyAqIFJldHVybnMgYW4gZXJyb3IgaWYgdGhlIGZyYW1lIHNob3VsZCBiZSBkcm9wcGVkLCBvdGhlcndpc2VcbisgKiB0aGUgKnN0YV9vdXQgcG9pbnRlciBpcyBmaWxsZWQ6XG4rICogIC0gdmFsaWQgc3RhIHBvaW50ZXI6IGZyYW1lIGdvZXMgdG8gdGhhdCBzdGF0aW9uXG4rICogIC0gTlVMTDogZnJhbWUgd2lsbCBiZSB1bmljYXN0IHRvIGEgeWV0IHVua25vd24gc3RhdGlvblxuKyAqICAtIEVSUl9QVFIoLUVOT0VOVCk6IGZyYW1lIHdpbGwgYmUgZ3JvdXAgYWRkcmVzc2VkXG4rICovXG4rc3RhdGljIGludCBpZWVlODAyMTFfbG9va3VwX3JhX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbitcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgc3RhX2luZm8gKipzdGFfb3V0KVxuIHtcbiBcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuIFxuQEAgLTI1MzEsNiArMjUzOCwxMCBAQCBpbnQgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdGJyZWFrO1xuICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxuIFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxuK1x0XHRpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoc2tiLVx1MDAzZWRhdGEpKSB7XG4rXHRcdFx0KnN0YV9vdXQgPSBFUlJfUFRSKC1FTk9FTlQpO1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4gXHRcdC8qIGRldGVybWluZWQgbXVjaCBsYXRlciAqL1xuIFx0XHQqc3RhX291dCA9IE5VTEw7XG4gXHRcdHJldHVybiAwO1xuQEAgLTI1NzMsMTcgKzI1ODQsMTUgQEAgaW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdCpzdGFfb3V0ID0gc3RhID86IEVSUl9QVFIoLUVOT0VOVCk7XG4rXHQqc3RhX291dCA9IHN0YTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdTE2IGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgIHUzMiAqaW5mb19mbGFncyxcbi1cdFx0XHRcdCAgIHU2NCBjb29raWUpXG4rc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0b3JlX2Fja19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4rXHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IGNvb2tpZSlcbiB7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqYWNrX3NrYjtcbi1cdHUxNiBpbmZvX2lkID0gMDtcbiBcbiBcdGlmIChza2ItXHUwMDNlc2spXG4gXHRcdGFja19za2IgPSBza2JfY2xvbmVfc2soc2tiKTtcbkBAIC0yNjAwLDU4ICsyNjA5LDQxIEBAIHN0YXRpYyB1MTYgaWVlZTgwMjExX3N0b3JlX2Fja19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bG9jYWwtXHUwMDNlYWNrX3N0YXR1c19sb2NrLCBmbGFncyk7XG4gXG4gXHRcdGlmIChpZCBcdTAwM2U9IDApIHtcbi1cdFx0XHRpbmZvX2lkID0gaWQ7XG4tXHRcdFx0KmluZm9fZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xuK1x0XHRcdGluZm8tXHUwMDNlc3RhdHVzX2RhdGEgPSBpZDtcbitcdFx0XHRpbmZvLVx1MDAzZXN0YXR1c19kYXRhX2lkciA9IDE7XG4rXHRcdFx0aW5mby1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7XG4gXHRcdFx0aWYgKGNvb2tpZSlcbiBcdFx0XHRcdElFRUU4MDIxMV9TS0JfQ0IoYWNrX3NrYiktXHUwMDNlYWNrLmNvb2tpZSA9IGNvb2tpZTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRrZnJlZV9za2IoYWNrX3NrYik7XG4gXHRcdH1cbiBcdH1cbi1cbi1cdHJldHVybiBpbmZvX2lkO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcmVtb3ZlX2Fja19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHUxNiBpbmZvX2lkKVxuLXtcbi1cdHN0cnVjdCBza19idWZmICphY2tfc2tiO1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmxvY2FsLVx1MDAzZWFja19zdGF0dXNfbG9jaywgZmxhZ3MpO1xuLVx0YWNrX3NrYiA9IGlkcl9yZW1vdmUoXHUwMDI2bG9jYWwtXHUwMDNlYWNrX3N0YXR1c19mcmFtZXMsIGluZm9faWQpO1xuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZsb2NhbC1cdTAwM2VhY2tfc3RhdHVzX2xvY2ssIGZsYWdzKTtcbi1cbi1cdGtmcmVlX3NrYihhY2tfc2tiKTtcbiB9XG4gXG4gLyoqXG4gICogaWVlZTgwMjExX2J1aWxkX2hkciAtIGJ1aWxkIDgwMi4xMSBoZWFkZXIgaW4gdGhlIGdpdmVuIGZyYW1lXG4gICogQHNkYXRhOiB2aXJ0dWFsIGludGVyZmFjZSB0byBidWlsZCB0aGUgaGVhZGVyIGZvclxuICAqIEBza2I6IHRoZSBza2IgdG8gYnVpbGQgdGhlIGhlYWRlciBpblxuLSAqIEBpbmZvX2ZsYWdzOiBza2IgZmxhZ3MgdG8gc2V0XG4gICogQHN0YTogdGhlIHN0YXRpb24gcG9pbnRlclxuLSAqIEBjdHJsX2ZsYWdzOiBpbmZvIGNvbnRyb2wgZmxhZ3MgdG8gc2V0XG4tICogQGNvb2tpZTogY29va2llIHBvaW50ZXIgdG8gZmlsbCAoaWYgbm90ICVOVUxMKVxuICAqXG4gICogVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgc2tiIHdpdGggODAyLjMgaGVhZGVyIGFuZCByZWZvcm1hdHMgdGhlIGhlYWRlciB0b1xuICAqIHRoZSBhcHByb3ByaWF0ZSBJRUVFIDgwMi4xMSBoZWFkZXIgYmFzZWQgb24gd2hpY2ggaW50ZXJmYWNlIHRoZSBwYWNrZXQgaXNcbiAgKiBiZWluZyB0cmFuc21pdHRlZCBvbi5cbiAgKlxuLSAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFsc28gdGFrZXMgY2FyZSBvZiB0aGUgVFggc3RhdHVzIHJlcXVlc3QgYW5kXG4tICogcG90ZW50aWFsIHVuc2hhcmluZyBvZiB0aGUgU0tCIC0gdGhpcyBuZWVkcyB0byBiZSBpbnRlcmxlYXZlZCB3aXRoIHRoZVxuLSAqIGhlYWRlciBidWlsZGluZy5cbisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBhbHNvIHRha2VzIGNhcmUgb2YgdGhlIFRYIHN0YXR1cyByZXF1ZXN0LiBUaGUgc2tiXG4rICogbXVzdCBub3QgYmUgc2hhcmVkLCBhbmQgaXRzIFRYIGluZm8gbXVzdCBhbHJlYWR5IGJlIGluaXRpYWxpc2VkIC0gdGhpc1xuKyAqIGZ1bmN0aW9uIG9ubHkgZmlsbHMgaW4gd2hhdCBpdCBkZXRlcm1pbmVzIGl0c2VsZi5cbiAgKlxuICAqIFRoZSBmdW5jdGlvbiByZXF1aXJlcyB0aGUgcmVhZC1zaWRlIFJDVSBsb2NrIGhlbGRcbiAgKlxuICAqIFJldHVybnM6IHRoZSAocG9zc2libHkgcmVhbGxvY2F0ZWQpIHNrYiBvciBhbiBFUlJfUFRSKCkgY29kZVxuICAqL1xuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX2hkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm9fZmxhZ3MsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MzIgY3RybF9mbGFncyxcbi1cdFx0XHRcdFx0ICAgdTY0IGNvb2tpZSlcbitcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0ICAgc3RydWN0IHN0YV9pbmZvICpzdGEpXG4ge1xuK1x0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbi1cdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbztcbiBcdGludCBoZWFkX25lZWQ7XG4gXHR1MTYgZXRoZXJ0eXBlLCBoZHJsZW4sICBtZXNoaGRybGVuID0gMDtcbiBcdF9fbGUxNiBmYztcbkBAIC0yNjYzLDE4ICsyNjU1LDE4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX2hkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdGJvb2wgd21lX3N0YSA9IGZhbHNlLCBhdXRob3JpemVkID0gZmFsc2U7XG4gXHRib29sIHRkbHNfcGVlcjtcbiBcdGJvb2wgbXVsdGljYXN0O1xuLVx0dTE2IGluZm9faWQgPSAwO1xuIFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZiA9IE5VTEw7XG4gXHRlbnVtIG5sODAyMTFfYmFuZCBiYW5kO1xuIFx0aW50IHJldDtcbi1cdHU4IGxpbmtfaWQgPSB1MzJfZ2V0X2JpdHMoY3RybF9mbGFncywgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xuK1x0dTggbGlua19pZCA9IHUzMl9nZXRfYml0cyhpbmZvLVx1MDAzZWNvbnRyb2wuZmxhZ3MsXG4rXHRcdFx0XHQgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcbiBcbiBcdGlmIChJU19FUlIoc3RhKSlcbiBcdFx0c3RhID0gTlVMTDtcbiBcbiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbiBcdGlmIChsb2NhbC1cdTAwM2Vmb3JjZV90eF9zdGF0dXMpXG4tXHRcdGluZm9fZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xuK1x0XHRpbmZvLVx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUztcbiAjZW5kaWZcbiBcbiBcdC8qIGNvbnZlcnQgRXRoZXJuZXQgaGVhZGVyIHRvIHByb3BlciA4MDIuMTEgaGVhZGVyIChiYXNlZCBvblxuQEAgLTI4MTUsNyArMjgwNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX2hkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0LyogRm9yIGluamVjdGVkIGZyYW1lcywgZmlsbCBSQSByaWdodCBhd2F5IGFzIG5leHRob3AgbG9va3VwXG4gXHRcdCAqIHdpbGwgYmUgc2tpcHBlZC5cbiBcdFx0ICovXG4tXHRcdGlmICgoY3RybF9mbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUUkxfU0tJUF9NUEFUSF9MT09LVVApIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoKGluZm8tXHUwMDNlY29udHJvbC5mbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUUkxfU0tJUF9NUEFUSF9MT09LVVApIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgaXNfemVyb19ldGhlcl9hZGRyKGhkci5hZGRyMSkpXG4gXHRcdFx0bWVtY3B5KGhkci5hZGRyMSwgc2tiLVx1MDAzZWRhdGEsIEVUSF9BTEVOKTtcbiBcdFx0YnJlYWs7XG5AQCAtMjk0NCwyMSArMjkzNiw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX2hkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0Z290byBmcmVlO1xuIFx0fVxuIFxuLVx0aWYgKHVubGlrZWx5KCFtdWx0aWNhc3QgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgKHNrX3JlcXVlc3RzX3dpZmlfc3RhdHVzKHNrYi1cdTAwM2VzaykgfHxcbi1cdFx0ICAgICAgY3RybF9mbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTKSkpXG4tXHRcdGluZm9faWQgPSBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLCBcdTAwMjZpbmZvX2ZsYWdzLFxuLVx0XHRcdFx0XHRcdCAgY29va2llKTtcbi1cbi1cdC8qXG4tXHQgKiBJZiB0aGUgc2tiIGlzIHNoYXJlZCB3ZSBuZWVkIHRvIG9idGFpbiBvdXIgb3duIGNvcHkuXG4tXHQgKi9cbi1cdHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKHVubGlrZWx5KCFza2IpKSB7XG4tXHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdGdvdG8gZnJlZTtcbi1cdH1cbi1cbiBcdGhkci5mcmFtZV9jb250cm9sID0gZmM7XG4gXHRoZHIuZHVyYXRpb25faWQgPSAwO1xuIFx0aGRyLnNlcV9jdHJsID0gMDtcbkBAIC0yOTk3LDggKzI5NzQsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdGhlYWRfbmVlZCArPSBsb2NhbC1cdTAwM2V0eF9oZWFkcm9vbTtcbiBcdFx0aGVhZF9uZWVkID0gbWF4X3QoaW50LCAwLCBoZWFkX25lZWQpO1xuIFx0XHRpZiAoaWVlZTgwMjExX3NrYl9yZXNpemUoc2RhdGEsIHNrYiwgaGVhZF9uZWVkLCBFTkNSWVBUX0RBVEEpKSB7XG4tXHRcdFx0aWVlZTgwMjExX2ZyZWVfdHhza2IoXHUwMDI2bG9jYWwtXHUwMDNlaHcsIHNrYik7XG4tXHRcdFx0c2tiID0gTlVMTDtcbiBcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZnJlZTtcbiBcdFx0fVxuQEAgLTMwMjcsNTAgKzMwMDIsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfaGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFxuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcbi1cdGluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4tXHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XG4tXG4tXHRpbmZvLVx1MDAzZWZsYWdzID0gaW5mb19mbGFncztcbi1cdGlmIChpbmZvX2lkKSB7XG4tXHRcdGluZm8tXHUwMDNlc3RhdHVzX2RhdGEgPSBpbmZvX2lkO1xuLVx0XHRpbmZvLVx1MDAzZXN0YXR1c19kYXRhX2lkciA9IDE7XG4tXHR9XG4gXHRpbmZvLVx1MDAzZWJhbmQgPSBiYW5kO1xuIFxuLVx0aWYgKGxpa2VseSghY29va2llKSkge1xuLVx0XHRjdHJsX2ZsYWdzIHw9IHUzMl9lbmNvZGVfYml0cyhsaW5rX2lkLFxuLVx0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4tXHR9IGVsc2Uge1xuLVx0XHR1bnNpZ25lZCBpbnQgcHJlX2NvbmZfbGlua19pZDtcbi1cbi1cdFx0Lypcbi1cdFx0ICogY3RybF9mbGFncyBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgYnlcbi1cdFx0ICogaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydCgpLCBoZXJlXG4tXHRcdCAqIHdlIGp1c3Qgc2FuaXR5IGNoZWNrIHRoYXRcbi1cdFx0ICovXG4tXG4tXHRcdHByZV9jb25mX2xpbmtfaWQgPSB1MzJfZ2V0X2JpdHMoY3RybF9mbGFncyxcbi1cdFx0XHRcdFx0XHRJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4tXG4tXHRcdGlmIChwcmVfY29uZl9saW5rX2lkICE9IGxpbmtfaWQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBsaW5rX2lkICE9IElFRUU4MDIxMV9MSU5LX1VOU1BFQ0lGSUVEKSB7XG4tI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG4tXHRcdFx0bmV0X2luZm9fcmF0ZWxpbWl0ZWQoXCIlczogZHJvcHBlZCBmcmFtZSB0byAlcE0gd2l0aCBiYWQgbGluayBJRCByZXF1ZXN0ICglZCB2cy4gJWQpXFxuXCIsXG4tXHRcdFx0XHRcdCAgICAgc2RhdGEtXHUwMDNlbmFtZSwgaGRyLmFkZHIxLFxuLVx0XHRcdFx0XHQgICAgIHByZV9jb25mX2xpbmtfaWQsIGxpbmtfaWQpO1xuLSNlbmRpZlxuLVx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0Z290byBmcmVlO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHRpbmZvLVx1MDAzZWNvbnRyb2wuZmxhZ3MgPSBjdHJsX2ZsYWdzO1xuLVxuK1x0aW5mby1cdTAwM2Vjb250cm9sLmZsYWdzID1cbitcdFx0dTMyX3JlcGxhY2VfYml0cyhpbmZvLVx1MDAzZWNvbnRyb2wuZmxhZ3MsIGxpbmtfaWQsXG4rXHRcdFx0XHQgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xuIFx0cmV0dXJuIHNrYjtcbiAgZnJlZTpcbi1cdGlmIChpbmZvX2lkKVxuLVx0XHRpZWVlODAyMTFfcmVtb3ZlX2Fja19za2IobG9jYWwsIGluZm9faWQpO1xuLVx0a2ZyZWVfc2tiKHNrYik7XG4rXHRpZWVlODAyMTFfZnJlZV90eHNrYihcdTAwMjZsb2NhbC1cdTAwM2Vodywgc2tiKTtcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuQEAgLTQzNjgsMTMgKzQzMDcsMTQgQEAgRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KTtcbiB2b2lkIF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgdTMyIGluZm9fZmxhZ3MsXG4tXHRcdFx0XHQgIHUzMiBjdHJsX2ZsYWdzLFxuLVx0XHRcdFx0ICB1NjQgY29va2llKVxuK1x0XHRcdFx0ICB1MzIgY3RybF9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuK1x0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvO1xuIFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqbmV4dDtcbitcdGJvb2wgZ3JvdXBfYWRkcmVzc2VkO1xuIFx0aW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXG4gXHRpZiAodW5saWtlbHkoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSB8fCBza2ItXHUwMDNlbGVuIFx1MDAzYyBFVEhfSExFTikpIHtcbkBAIC00Mzk0LDYgKzQzMzQsNyBAQCB2b2lkIF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChpZWVlODAyMTFfbG9va3VwX3JhX3N0YShzZGF0YSwgc2tiLCBcdTAwMjZzdGEpKVxuIFx0XHRnb3RvIG91dF9mcmVlO1xuIFxuK1x0Z3JvdXBfYWRkcmVzc2VkID0gSVNfRVJSKHN0YSk7XG4gXHRpZiAoSVNfRVJSKHN0YSkpXG4gXHRcdHN0YSA9IE5VTEw7XG4gXG5AQCAtNDQyNiw4ICs0MzY3LDIyIEBAIHZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IHNkYXRhLVx1MDAzZWNvbnRyb2xfcG9ydF9wcm90b2NvbClcbiBcdFx0XHRjdHJsX2ZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVFJMX1NLSVBfTVBBVEhfTE9PS1VQO1xuIFxuLVx0XHRza2IgPSBpZWVlODAyMTFfYnVpbGRfaGRyKHNkYXRhLCBza2IsIGluZm9fZmxhZ3MsXG4tXHRcdFx0XHRcdCAgc3RhLCBjdHJsX2ZsYWdzLCBjb29raWUpO1xuK1x0XHRza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTtcbitcdFx0aWYgKHVubGlrZWx5KCFza2IpKSB7XG4rXHRcdFx0a2ZyZWVfc2tiX2xpc3QobmV4dCk7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcbitcdFx0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xuK1x0XHRpbmZvLVx1MDAzZWZsYWdzID0gaW5mb19mbGFncztcbitcdFx0aW5mby1cdTAwM2Vjb250cm9sLmZsYWdzID0gY3RybF9mbGFncztcbitcbitcdFx0aWYgKHVubGlrZWx5KCFncm91cF9hZGRyZXNzZWQgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICBza19yZXF1ZXN0c193aWZpX3N0YXR1cyhza2ItXHUwMDNlc2spKSlcbitcdFx0XHRpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLCAwKTtcbitcbitcdFx0c2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBzdGEpO1xuIFx0XHRpZiAoSVNfRVJSKHNrYikpIHtcbiBcdFx0XHRrZnJlZV9za2JfbGlzdChuZXh0KTtcbiBcdFx0XHRnb3RvIG91dDtcbkBAIC00NTY0LDcgKzQ1MTksNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eF9vbmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdHJldHVybjtcbiBcbiBcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKGxpbmtfaWQsIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcbi1cdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQob3V0LCBzZGF0YS1cdTAwM2VkZXYsIDAsIGN0cmxfZmxhZ3MsIDApO1xuK1x0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChvdXQsIHNkYXRhLVx1MDAzZWRldiwgMCwgY3RybF9mbGFncyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtNDU3OSw3ICs0NTM0LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX21sb19tdWx0aWNhc3RfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0Y3RybF9mbGFncyB8PSB1MzJfZW5jb2RlX2JpdHMoX19mZnMobGlua3MpLFxuIFx0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4gXG4tXHRcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBzZGF0YS1cdTAwM2VkZXYsIDAsIGN0cmxfZmxhZ3MsIDApO1xuK1x0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2RhdGEtXHUwMDNlZGV2LCAwLCBjdHJsX2ZsYWdzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTQ2MjAsOCArNDU3NSw3IEBAIG5ldGRldl90eF90IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGllZWU4MDIxMV9jb252ZXJ0X3RvX3VuaWNhc3Qoc2tiLCBkZXYsIFx1MDAyNnF1ZXVlKTtcbiBcdFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNnF1ZXVlKSkpXG4gXHRcdFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIGRldiwgMCxcbi1cdFx0XHRcdFx0XHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyxcbi1cdFx0XHRcdFx0XHQgICAgIDApO1xuK1x0XHRcdFx0XHRcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDKTtcbiBcdH0gZWxzZSBpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2c2RhdGEtXHUwMDNldmlmKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgKChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAhaWVlZTgwMjExX2h3X2NoZWNrKFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LCBNTE9fTUNBU1RfTVVMVElfTElOS19UWCkpIHx8XG5AQCAtNDYzMSw4ICs0NTg1LDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdH0gZWxzZSB7XG4gbm9ybWFsOlxuIFx0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCAwLFxuLVx0XHRcdFx0XHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyxcbi1cdFx0XHRcdFx0ICAgICAwKTtcbitcdFx0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbkBAIC00NzMwLDggKzQ2ODMsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfODAyM194bWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRpZiAoIXRlc3RfYml0KEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCwgXHUwMDI2dGlkX3R4LVx1MDAzZXN0YXRlKSkge1xuIFx0XHRcdC8qIGZhbGwgYmFjayB0byBub24tb2ZmbG9hZCBzbG93IHBhdGggKi9cbiBcdFx0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCAwLFxuLVx0XHRcdFx0XHRcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLFxuLVx0XHRcdFx0XHRcdCAgICAgMCk7XG4rXHRcdFx0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuQEAgLTQ3NjUsMTIgKzQ3MTcsOCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfODAyM194bWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdG1lbWNweShJRUVFODAyMTFfU0tCX0NCKHNlZyksIGluZm8sIHNpemVvZigqaW5mbykpO1xuIFx0fVxuIFxuLVx0aWYgKHVubGlrZWx5KHNrX3JlcXVlc3RzX3dpZmlfc3RhdHVzKHNrYi1cdTAwM2VzaykpKSB7XG4tXHRcdGluZm8tXHUwMDNlc3RhdHVzX2RhdGEgPSBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLFxuLVx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmluZm8tXHUwMDNlZmxhZ3MsIDApO1xuLVx0XHRpZiAoaW5mby1cdTAwM2VzdGF0dXNfZGF0YSlcbi1cdFx0XHRpbmZvLVx1MDAzZXN0YXR1c19kYXRhX2lkciA9IDE7XG4tXHR9XG4rXHRpZiAodW5saWtlbHkoc2tfcmVxdWVzdHNfd2lmaV9zdGF0dXMoc2tiLVx1MDAzZXNrKSkpXG4rXHRcdGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKGxvY2FsLCBza2IsIDApO1xuIFxuIFx0ZGV2X3N3X25ldHN0YXRzX3R4X2FkZChkZXYsIHNrYnMsIGxlbik7XG4gXG5AQCAtNDg5OSw2ICs0ODQ3LDcgQEAgaWVlZTgwMjExX2J1aWxkX2RhdGFfdGVtcGxhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdC5sb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsLFxuIFx0XHQuc2RhdGEgPSBzZGF0YSxcbiBcdH07XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87XG4gXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbkBAIC00OTA5LDggKzQ4NTgsMTIgQEAgaWVlZTgwMjExX2J1aWxkX2RhdGFfdGVtcGxhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0c2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBpbmZvX2ZsYWdzLCBzdGEsXG4tXHRcdFx0XHQgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQywgMCk7XG4rXHRpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuK1x0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xuK1x0aW5mby1cdTAwM2VmbGFncyA9IGluZm9fZmxhZ3M7XG4rXHRpbmZvLVx1MDAzZWNvbnRyb2wuZmxhZ3MgPSBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUM7XG4rXG4rXHRza2IgPSBpZWVlODAyMTFfYnVpbGRfaGRyKHNkYXRhLCBza2IsIHN0YSk7XG4gXHRpZiAoSVNfRVJSKHNrYikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTY1MzAsNiArNjQ4Myw4IEBAIGludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbitcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbztcbitcdGJvb2wgZ3JvdXBfYWRkcmVzc2VkO1xuIFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0c3RydWN0IGV0aGhkciAqZWhkcjtcbkBAIC02NTU0LDkgKzY1MDksNiBAQCBpbnQgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKHVuZW5jcnlwdGVkKVxuIFx0XHRmbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUO1xuIFxuLVx0aWYgKGNvb2tpZSlcbi1cdFx0Y3RybF9mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7XG4tXG4gXHRmbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfTkw4MDIxMV9GUkFNRV9UWDtcbiBcbiBcdHNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtXHUwMDNlaHcuZXh0cmFfdHhfaGVhZHJvb20gK1xuQEAgLTY1NzMsMTUgKzY1MjUsMTEgQEAgaW50IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBcdC8qIHdlIG1heSBvdmVycmlkZSB0aGUgU0EgZm9yIE1MTyBTVEEgbGF0ZXIgKi9cbiBcdGlmIChsaW5rX2lkIFx1MDAzYyAwKSB7XG4tXHRcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKElFRUU4MDIxMV9MSU5LX1VOU1BFQ0lGSUVELFxuLVx0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4rXHRcdGxpbmtfaWQgPSBJRUVFODAyMTFfTElOS19VTlNQRUNJRklFRDtcbiBcdFx0bWVtY3B5KGVoZHItXHUwMDNlaF9zb3VyY2UsIHNkYXRhLVx1MDAzZXZpZi5hZGRyLCBFVEhfQUxFTik7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpsaW5rX2NvbmY7XG4gXG4tXHRcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKGxpbmtfaWQsXG4tXHRcdFx0XHRcdCAgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcbi1cbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRsaW5rX2NvbmYgPSByY3VfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNldmlmLmxpbmtfY29uZltsaW5rX2lkXSk7XG4gXHRcdGlmICghbGlua19jb25mKSB7XG5AQCAtNjYwMCw5ICs2NTQ4LDYgQEAgaW50IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcbi1cdGlmIChsb2NhbC1cdTAwM2Vody5xdWV1ZXMgXHUwMDNjIElFRUU4MDIxMV9OVU1fQUNTKVxuLVx0XHRnb3RvIHN0YXJ0X3htaXQ7XG4tXG4gXHQvKiB1cGRhdGUgUW9TIGhlYWRlciB0byBwcmlvcml0aXplIGNvbnRyb2wgcG9ydCBmcmFtZXMgaWYgcG9zc2libGUsXG4gXHQgKiBwcmlvcml0aXphdGlvbiBhbHNvIGhhcHBlbnMgZm9yIGNvbnRyb2wgcG9ydCBmcmFtZXMgc2VuZCBvdmVyXG4gXHQgKiBBRl9QQUNLRVRcbkBAIC02NjE1LDI0ICs2NTYwLDQ4IEBAIGludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRpZiAoIUlTX0VSUihzdGEpKSB7XG4tXHRcdHUxNiBxdWV1ZSA9IGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc2RhdGEsIHN0YSwgc2tiKTtcbitcdGdyb3VwX2FkZHJlc3NlZCA9IElTX0VSUihzdGEpO1xuK1x0aWYgKElTX0VSUihzdGEpKVxuK1x0XHRzdGEgPSBOVUxMO1xuIFxuLVx0XHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBxdWV1ZSk7XG4rXHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKHNkYXRhLCBzdGEsIHNrYikpO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBmb3IgTUxPIFNUQSwgdGhlIFNBIHNob3VsZCBiZSB0aGUgQVAgTUxEIGFkZHJlc3MsIGJ1dFxuLVx0XHQgKiB0aGUgbGluayBJRCBoYXMgYmVlbiBzZWxlY3RlZCBhbHJlYWR5XG4tXHRcdCAqL1xuLVx0XHRpZiAoc3RhIFx1MDAyNlx1MDAyNiBzdGEtXHUwMDNlc3RhLm1sbylcbi1cdFx0XHRtZW1jcHkoZWhkci1cdTAwM2VoX3NvdXJjZSwgc2RhdGEtXHUwMDNldmlmLmFkZHIsIEVUSF9BTEVOKTtcbitcdC8qXG4rXHQgKiBmb3IgTUxPIFNUQSwgdGhlIFNBIHNob3VsZCBiZSB0aGUgQVAgTUxEIGFkZHJlc3MsIGJ1dFxuK1x0ICogdGhlIGxpbmsgSUQgaGFzIGJlZW4gc2VsZWN0ZWQgYWxyZWFkeVxuK1x0ICovXG4rXHRpZiAoc3RhIFx1MDAyNlx1MDAyNiBzdGEtXHUwMDNlc3RhLm1sbylcbitcdFx0bWVtY3B5KGVoZHItXHUwMDNlaF9zb3VyY2UsIHNkYXRhLVx1MDAzZXZpZi5hZGRyLCBFVEhfQUxFTik7XG4rXG4rXHRpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuK1x0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xuK1x0aW5mby1cdTAwM2VmbGFncyA9IGZsYWdzO1xuK1x0Y3RybF9mbGFncyB8PSB1MzJfZW5jb2RlX2JpdHMobGlua19pZCwgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xuK1x0aW5mby1cdTAwM2Vjb250cm9sLmZsYWdzID0gY3RybF9mbGFncztcbitcbitcdGlmICghZ3JvdXBfYWRkcmVzc2VkKVxuK1x0XHRpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLCBjb29raWUpO1xuK1xuK1x0c2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBzdGEpO1xuK1x0aWYgKElTX0VSUihza2IpKSB7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4gUFRSX0VSUihza2IpO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4tc3RhcnRfeG1pdDpcbitcdGlmIChsaW5rX2lkICE9IHUzMl9nZXRfYml0cyhpbmZvLVx1MDAzZWNvbnRyb2wuZmxhZ3MsXG4rXHRcdFx0XHQgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspKSB7XG4rXHRcdGllZWU4MDIxMV9mcmVlX3R4c2tiKFx1MDAyNmxvY2FsLVx1MDAzZWh3LCBza2IpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRkZXZfc3dfbmV0c3RhdHNfdHhfYWRkKGRldiwgMSwgc2tiLVx1MDAzZWxlbik7XG4rXHRpZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KGxvY2FsLCBza2ItXHUwMDNlbGVuKTtcbitcbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbi1cdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBza2ItXHUwMDNlZGV2LCBmbGFncywgY3RybF9mbGFncywgY29va2llKTtcbitcdGllZWU4MDIxMV94bWl0KHNkYXRhLCBzdGEsIHNrYik7XG4gXHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTY2NjAsOCArNjYyOSw3IEBAIGludCBpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2tiLVx1MDAzZWRldiwgMCxcbi1cdFx0XHRcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfU0tJUF9NUEFUSF9MT09LVVAsXG4tXHRcdFx0XHQgICAgIDApO1xuK1x0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUCk7XG4gXHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcbiBcdHJldHVybiAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6MDM6NDguODE1MTQzNTg3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5MDM5MjYyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgbWFjODAyMTEgVFggUGF0aCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYG5ldC9tYWM4MDIxMS9gLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIHRvdWNoaW5nIHNvbWUgZnVuZGFtZW50YWwgVFggcGF0aCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBjb21taXQgYWZmZWN0cyBhIG51bWJlciBvZiBrZXkgZnVuY3Rpb25zOiBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgLCBgaWVlZTgwMjExX2J1aWxkX2hkcmAsIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCwgYW5kIHNvIG9uLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgcmVtb3ZpbmcgdGhlIGBjb29raWVgIGFyZ3VtZW50IGZyb20gYF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIGFuZCBhbHRlcmluZyB0aGUgY2FsbCB0byBgaWVlZTgwMjExX3N0b3JlX2Fja19za2JgIGFsb25nIHdpdGggaG93IGBpbmZvYCAodGhlIHNrYidzIGNvbnRyb2wgYmxvY2spIGdldHMgaW5pdGlhbGl6ZWQuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uIGluIGhvdyBtYWM4MDIxMSBoYW5kbGVzIHRyYW5zbWlzc2lvbnMuIFRoaXMgaGFzIHdpZGUgaW1wbGljYXRpb25zLCBuYXR1cmFsbHksIGJlaW5nIHJpZ2h0IGluIHRoZSBjb3JlIG9mIHRoZSA4MDIuMTEgd2lyZWxlc3Mgc3RhY2suXG5cbkZpcnN0IHRoaW5nIEkgdGhpbmsgaXMsIGlzIHRoaXMgZnV6emVyLWZyaWVuZGx5PyBBbmQsIHllcywgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgZXhpc3RlbmNlIG9mIGBtYWM4MDIxMV9od3NpbWAsIHRoZSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBkcml2ZXIsIGlzIGNydWNpYWwgaGVyZS4gIEl0IG1lYW5zIEkgY2FuIHRlc3QgdGhpcyBlYXNpbHkgaW4gUUVNVS4gR29vZC5cblxuSSBzaG91bGQgbGlzdCBhbGwgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucy4gTGV0IG1lIHF1aWNrbHkgbm90ZSB0aG9zZSBkb3duOiBgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGFgLCBgaWVlZTgwMjExX3N0b3JlX2Fja19za2JgLCBgaWVlZTgwMjExX2J1aWxkX2hkcmAsIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCwgYGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4X29uZWAsIGBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eGAsIGBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAsIGBpZWVlODAyMTFfODAyM194bWl0YCwgYGllZWU4MDIxMV9idWlsZF9kYXRhX3RlbXBsYXRlYCwgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgLCBgaWVlZTgwMjExX3Byb2JlX21lc2hfbGlua2AuXG5cbk5vdywgbGV0J3Mgem9vbSBpbiBhIGxpdHRsZS4gQmFzZWQgb24gYSBxdWljayBnbGFuY2UsIEknbGwgcGF5IGNsb3NlciBhdHRlbnRpb24gdG8gYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgLCBgaWVlZTgwMjExX3Byb2JlX21lc2hfbGlua2AsIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCwgYGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCwgYW5kIGBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZWAuIFdhaXQgYSBtaW51dGUsIGBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAgaXMgKnRoZSogaG90LXBhdGggZm9yIG1hYzgwMjExIGludGVyZmFjZXMsIGl0J3MgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZnVuY3Rpb24sIHNvIHRoaXMgY2hhbmdlIHdpbGwgYmUgY3JpdGljYWwuIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBpcyBhbHNvIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgaGFuZGxlcyA4MDIuMVgvRUFQT0wgdHJhZmZpYyBhbmQgcmVsYXRlZCBjb250cm9sIHBvcnQgZnJhbWVzLCB3aGljaCB3aGlsZSBsZXNzIFwiaG90XCIgdGhhbiB0aGUgY29yZSBUWCBwYXRoLCBpcyBzdGlsbCB2aXRhbC4gYGllZWU4MDIxMV9wcm9iZV9tZXNoX2xpbmtgIGRlYWxzIHdpdGggbWVzaCBuZXR3b3Jrcy4gYGllZWU4MDIxMV9idWlsZF9kYXRhX3RlbXBsYXRlYCBpcyB1c2VkIGZvciwgb2J2aW91c2x5LCBidWlsZGluZyBkYXRhIHRlbXBsYXRlcy5cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHVzYWdlIG9mIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBhbmQgYGllZWU4MDIxMV9wcm9iZV9tZXNoX2xpbmtgLiBBbHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY2hhbmdlZCBhYm91dCBkYXRhIHRlbXBsYXRlIGJ1aWxkaW5nLiBJIHNob3VsZCBzZWFyY2ggZm9yIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBpbiB0aGUgc291cmNlIGJhc2UgYW5kIHNlZSB3aGVyZSB0aGF0J3MgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA2MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjA0OjAwLjcxOTA3MTY3MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg2MTM5NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV90eF9jb250cm9sX3BvcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2NmZy5jPTU5NzY9Y29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0ge1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTYwNzAtXFx0LnNldF9tdWx0aWNhc3RfdG9fdW5pY2FzdCA9IGllZWU4MDIxMV9zZXRfbXVsdGljYXN0X3RvX3VuaWNhc3QsXFxubmV0L21hYzgwMjExL2NmZy5jOjYwNzE6XFx0LnR4X2NvbnRyb2xfcG9ydCA9IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQsXFxubmV0L21hYzgwMjExL2NmZy5jLTYwNzItXFx0LmdldF90eHFfc3RhdHMgPSBpZWVlODAyMTFfZ2V0X3R4cV9zdGF0cyxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTIyNDY9dm9pZCBpZWVlODAyMTFfY2xlYXJfZmFzdF94bWl0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjQ3OmludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjI0OC1cXHRcXHRcXHQgICAgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9NjQ0OD12b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNjQ3OC1cXG5uZXQvbWFjODAyMTEvdHguYzo2NDc5OmludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L21hYzgwMjExL3R4LmMtNjQ4MC1cXHRcXHRcXHQgICAgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTowNDowMi40MDUyMTc5NDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzc3OTQ4OTMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ2hhbmdlcyB0byB0aGUgODAyLjExIFN0YWNrIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9tYWM4MDIxMS90eC5jYCwgYG5ldC9tYWM4MDIxMS90ZGxzLmNgLCBhbmQgYG5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oYC4gVGhhdCdzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgbWFjODAyMTEgY29yZSwgd2hpY2gsIGZvciB0aG9zZSBub3QgZmFtaWxpYXIsIGlzIHRoZSBMaW51eCBrZXJuZWwncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgODAyLjExIHN0YWNrLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgZm9jdXNlZCBvbiBob3cgdHJhbnNtaXQgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZC5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSBhIHJlZmFjdG9yaW5nIGVmZm9ydCBnb2luZyBvbi4gVGhlIHNpZ25hdHVyZSBvZiBgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAgaXMgYmVpbmcgY2hhbmdlZCwgcmVtb3ZpbmcgdGhlIGBjb29raWVgIGFyZ3VtZW50LiBBbHNvLCBgaWVlZTgwMjExX2J1aWxkX2hkcmAgaXMgYmVpbmcgcmVmYWN0b3JlZCB0byByZWx5IG9uIHByZS1wb3B1bGF0ZWQgaW5mb3JtYXRpb24gd2l0aGluIHRoZSBgc2tiYCBjb250cm9sIGJsb2NrLCByZW1vdmluZyB0aGUgYGluZm9fZmxhZ3NgLCBgY3RybF9mbGFnc2AsIGFuZCBgY29va2llYCBhcmd1bWVudHMuIEl0IHNlZW1zIGxpa2UgYSBjb25zb2xpZGF0aW9uIG9mIGRhdGEgd2l0aGluIHRoZSBgc2tiYCdzIGNvbnRyb2wgYmxvY2ssIGBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYmAgaXMgYWxzbyBiZWluZyB1cGRhdGVkLCBhbmQgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHBvcHVsYXRlIHRoaXMgYGluZm9gIGFuZCBjYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgZGlyZWN0bHkuIFRoaXMgaXMgZ29vZDogcmVtb3ZpbmcgZnVuY3Rpb24gYXJndW1lbnRzIGFuZCBtb3ZpbmcgdGhhdCByZXNwb25zaWJpbGl0eSB0byBvdGhlciB2YXJpYWJsZXMgaW4gdGhlIHN0cnVjdCBoZWxwcyBwcmV2ZW50IGluY29ycmVjdCB1c2FnZSBhbmQgcmVkdWNlcyB0aGUgYW1vdW50IG9mIHN0YXRlIHBhc3NlZCBhcyBhcmd1bWVudHMuXG5cbldhaXQgYSBzZWNvbmQuLi4gKm1hYzgwMjExKj8gWWVzLCBpdCdzIHRoZSA4MDIuMTEgc3RhY2suIEFuZCBpdCdzIHJlYWNoYWJsZSB0aHJvdWdoIGBtYWM4MDIxMV9od3NpbWAsIHdoaWNoIGlzIGEgc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUgZHJpdmVyLiBUaGlzIG1lYW5zIHdlIGhhdmUgYSB2aWFibGUgcGF0aCBmb3IgZnV6emluZyEgKipXb3J0aEZ1enppbmc9dHJ1ZSoqIC0gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gYSBrZXkgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjaywgYW5kIHdlIGhhdmUgYSBwYXRoIGZvciBmdXp6aW5nIHRoZSBjb21wb25lbnRzLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBpbXBvcnRhbnQgc3ltYm9scy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgbW9kaWZpZWQgb3IgaGVhdmlseSBpbnZvbHZlZCBpbiB0aGUgY2hhbmdlczogYF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgLCBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGAsIGBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZWAsIGBpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rYCAodGhvdWdoIHRoYXQgbGFzdCBvbmUgc2VlbXMgbGlrZSBqdXN0IGEgY2FsbCBzaXRlLCBub3QgYSBrZXkgZW50cnkgcG9pbnQpLCBgaWVlZTgwMjExX21sb19tdWx0aWNhc3RfdHhgICh0aG91Z2ggaXQncyBzdGF0aWMpIGFuZCBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgICh0aGUgbmV0ZGV2X3R4X3QpLlxuXG5BIGNsb3NlciBsb29rLiBgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAgaXMgKmV4cG9ydGVkKi4gYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIGlzIHVzZWQgaW4gYG1hYzgwMjExX2NvbmZpZ19vcHNgIHdoaWNoIG1lYW5zIGl0J3MgcmVhY2hhYmxlIHZpYSBgY2ZnODAyMTFgLiBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIGlzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZvciBtYWM4MDIxMSBpbnRlcmZhY2VzLiBUaGF0J3MgYSBnb29kIHN1cmZhY2UgdG8gdGFyZ2V0LCBwYXJ0aWN1bGFybHkgd2l0aCBvdXIgZnV6emluZyBzZXR1cC5cblxuSSdtIGNoZWNraW5nIGlmIHRoZXNlIGtleSBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYXMgc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGxpbWl0ZWQgdmlzaWJpbGl0eTogYF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIGlzbid0IHN0YXRpYywgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIGlzbid0IHN0YXRpYywgYGllZWU4MDIxMV9idWlsZF9kYXRhX3RlbXBsYXRlYCBpc24ndCBzdGF0aWMsIGFuZCBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIGlzIGFsc28gbm90IHN0YXRpYy4gR3JlYXQsIG1lYW5zIHRoZXkgY2FuIGJlIGVhc2lseSBjYWxsZWQuXG5cbkFscmlnaHQsIHRpbWUgdG8gZ28gYW5kIGNoZWNrIHRoZSBLY29uZmlnIHRvIHNlZSB3aGF0IG1vZHVsZXMgYW5kIGRlcGVuZGVuY2llcyB3ZSBuZWVkIHRvIGVuYWJsZSBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MjcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6MDQ6MzAuMTg0NzE0MjUzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDM0NzgzNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXFxubmV0L21hYzgwMjExL0tjb25maWctMjItXFx0Ym9vbFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNDAtXFxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cXHRib29sIFxcXCJNaW5zdHJlbFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXFx0c3RyaW5nXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFxcXCJTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MDpjb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgbWFjODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNzgtXFxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctODctXFxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cXHRib29sIFxcXCJFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXFxubmV0L21hYzgwMjExL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiVHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiU2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTY6Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXFxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkRvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzEtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTMzLVxcdGJvb2wgXFxcIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NDpjb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIlZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cXHRib29sIFxcXCJWZXJib3NlIEhUIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCJWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTg2OmNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTg3LVxcdGJvb2wgXFxcIlZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjI6Y29uZmlnIE1BQzgwMjExX01QQVRIX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjIzLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjgyLVxcdGJvb2wgXFxcIlZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXFxubmV0L21hYzgwMjExL0tjb25maWc6MjkzOmNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cXHRib29sIFxcXCJFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cXHRpbnQgXFxcIlN0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcXFwiIGlmIE1BQzgwMjExX0RFQlVHX01FTlVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6MDQ6MzEuODg4MTk4NDU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc4NjQ2MDMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoaXMgZnV6emluZyBzZXR1cCBpcyBnb2luZyB0byB3b3JrIGFzIGludGVuZGVkLiBNeSBpbW1lZGlhdGUgY29uY2VybnMgcmV2b2x2ZSBhcm91bmQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUbyBlbnN1cmUgdGhlIGZ1enppbmcgaXMgYWN0aXZlIGFuZCBlZmZlY3RpdmUsIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgYE1BQzgwMjExYCBhbmQgYE1BQzgwMjExX0hXU0lNYCBhY3RpdmF0ZWQuIEJ1dCwgaG9sZCBvbi4gSSByZW1lbWJlciB0aGF0IGBDRkc4MDIxMWAgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGBNQUM4MDIxMWAuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IHRoYXQgZGVwZW5kZW5jeSBpcyBtZXQuIEFuZCBmaW5hbGx5LCBJIHNob3VsZCBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBNQUM4MDIxMV9IV1NJTWAgdG8gZW5zdXJlIEkgaGF2ZSBldmVyeXRoaW5nIGluIHBsYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk3NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjA0OjM2LjY3NDY2NTcwMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYyNTExMzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMV9IV1NJTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjA0OjM4LjIzNzE4MTA5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODg2MTExOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgVmlydHVhbCBXaXJlbGVzcyBEcml2ZXJzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYCBmaWxlLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEsIGFzIHRoYXQncyBvZnRlbiB0aGUgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZm9yIGEgcGFydGljdWxhciBzdWJzeXN0ZW0gb3IgbW9kdWxlLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIGNyaXRpY2FsIGluIGRldGVybWluaW5nIGhvdyB0aGUgdmlydHVhbCB3aXJlbGVzcyBkcml2ZXIocykgYXJlIGJ1aWx0LCBlbmFibGVkLCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSdtIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgLSB0aGUgdG9wLWxldmVsIG1lbnUgZW50cmllcywgYW55IGRlcGVuZGVuY2llcyBvciBwcmVyZXF1aXNpdGVzLCBhbmQgdGhlIGRlZmF1bHQgc3RhdGVzIG9mIHJlbGV2YW50IG9wdGlvbnMuIEl0J3MgdGltZSB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIGtleSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGltcGFjdHMgdGhlIGF2YWlsYWJpbGl0eSBvZiBmZWF0dXJlcyBvciBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMwNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjA0OjQyLjEyNTc5NTU3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuICAgMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3RcXG4gICA2OlxcdFxcdCAgSUVFRSA4MDIuMTEgbmV0d29ya2luZyBzdGFjayAobWFjODAyMTEpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgbm90XFxuICAgNzpcXHRcXHQgIG5lZWRlZCBmb3Igbm9ybWFsIHdpcmVsZXNzIExBTiB1c2FnZSBhbmQgaXMgb25seSBmb3IgdGVzdGluZy4gU2VlXFxuICAgODpcXHRcXHQgIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9tYWM4MDIxMV9od3NpbSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3dcXG4gICA5OlxcdFxcdCAgdG8gdXNlIHRoaXMgdG9vbC5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcXG4gIDEyOlxcdFxcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFZJUlRfV0lGSVxcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIldpZmkgd3JhcHBlciBmb3IgZXRoZXJuZXQgZHJpdmVyc1xcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxcbiAgMTk6XFx0XFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxcbiAgMjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjA0OjQyLjEyNTk2NDkwNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg5NDY5NTExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBtYWM4MDIxMSBUWCBMb2dpYyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBtZXNzaW5nIHdpdGggc29tZSBmdW5kYW1lbnRhbCBtYWM4MDIxMSBzdHVmZiDigJMgc3BlY2lmaWNhbGx5LCB0aGUgY29yZSBUWCBsb2dpYy4gSXQncyB0b3VjaGluZyBgbmV0L21hYzgwMjExL3R4LmNgLCBgbmV0L21hYzgwMjExL3RkbHMuY2AsIGFuZCBhIGhlYWRlciBmaWxlLCBzbyBpdCdzIGEgZGVlcCBkaXZlLiBJJ20gc2VlaW5nIGNoYW5nZXMgdG8gdGhlIHNpZ25hdHVyZXMgb2YgYF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIGFuZCBgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGFgLCBhbG9uZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gaG93IFRYIGluZm8gaXMgaGFuZGxlZCBpbiBgaWVlZTgwMjExX2J1aWxkX2hkcmAgYW5kIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YC4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIHBhY2tldCB0cmFuc21pc3Npb24sIHF1ZXVpbmcsIGFuZCBoZWFkZXIgY29uc3RydWN0aW9uLiBHaXZlbiB0aGF0IHRoaXMgaXMgY29yZSBzdHVmZiwgYW5kIHJlYWNoYWJsZSB0aHJvdWdoIGBtYWM4MDIxMV9od3NpbWAgKHdoaWNoIGlzIGdyZWF0IGJlY2F1c2UgdGhhdCBtZWFucyBRRU1VL3N5emthbGxlciBhcmUgdmlhYmxlKSwgaXQncyBzY3JlYW1pbmcgZm9yIHNvbWUgZnV6emluZy5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGlzIHRhcmdldGluZy4gQWZ0ZXIgZGlnZ2luZyBpbnRvIHRoZSBjb2RlLCBJIGNhbiBzZWUgdGhhdCBpdCdzIGZvY3VzaW5nIG9uOlxuXG4qICAgYGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXRgXG4qICAgYGllZWU4MDIxMV9sb29rdXBfcmFfc3RhYCAodGhvdWdoIHN0YXRpYywgc28gd29ydGggY29uc2lkZXJpbmcgY29udGV4dClcbiogICBgaWVlZTgwMjExX3N0b3JlX2Fja19za2JgXG4qICAgYGllZWU4MDIxMV9idWlsZF9oZHJgXG4qICAgYF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgXG4qICAgYGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4X29uZWBcbiogICBgaWVlZTgwMjExX21sb19tdWx0aWNhc3RfdHhgXG4qICAgYGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YFxuKiAgIGBpZWVlODAyMTFfODAyM194bWl0YFxuKiAgIGBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZWBcbiogICBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGBcbiogICBgaWVlZTgwMjExX3Byb2JlX21lc2hfbGlua2BcblxuTGV0J3MgcmVmaW5lIHRoZSBsaXN0LiBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIChib3RoIHRoZSBpbnRlcm5hbCBhbmQgZXhwb3J0ZWQgdmVyc2lvbnMpIGxvb2sgbGlrZSBob3QgcGF0aHMg4oCTIHRoZXkncmUgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZnVuY3Rpb25zLCBtYWtpbmcgdGhlbSBoaWdoLXByaW9yaXR5IGNhbmRpZGF0ZXMuIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBpcyBhbHNvIGdvb2QuIEl0J3MgdXNlZCBmb3IgY29udHJvbCBwb3J0IGZyYW1lcyBsaWtlIEVBUE9MLCBzbyBhIG1vcmUgc3BlY2lmaWMgdGFyZ2V0LiBBbHNvLCBgaWVlZTgwMjExX2J1aWxkX2RhdGFfdGVtcGxhdGVgIHdpbGwgYmUgdXNlZnVsIGFuZCBgaWVlZTgwMjExX3Byb2JlX21lc2hfbGlua2AgZm9yIG1lc2ggbGlua3MuIGBpZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0YCBsb29rcyBnb29kIHRvby5cblxuU2luY2UgSSdsbCBiZSBmdXp6aW5nLCBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBlZmZvcnRzIG9uOlxuXG4qICAgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIChBUEkgZW50cnlwb2ludClcbiogICBgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldGBcbiogICBgaWVlZTgwMjExX3Byb2JlX21lc2hfbGlua2BcblxuRm9yIHRlc3RpbmcgdGhpcywgSSdtIGdvaW5nIHRvIG1ha2Ugc3VyZSB0aGF0IEkgZW5hYmxlIGEgZmV3IGNvbmZpZ3VyYXRpb25zOlxuXG4qICAgYE1BQzgwMjExYCAob2J2aW91c2x5KVxuKiAgIGBNQUM4MDIxMV9IV1NJTWAgKHRvIHVzZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBlc3NlbnRpYWwgZm9yIHByYWN0aWNhbCB0ZXN0aW5nKVxuKiAgIGBNQUM4MDIxMV9NRVNIYCAoYmVjYXVzZSB0aGVyZSdzIGEgY29uZGl0aW9uYWwgYmxvY2sgcmVsYXRlZCB0byBgQ09ORklHX01BQzgwMjExX01FU0hgIGluIGBpZWVlODAyMTFfbG9va3VwX3JhX3N0YWApLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBzaGFraW5nIHVwIGNvcmUgdHJhbnNtaXNzaW9uIGxvZ2ljLiBCeSB0YXJnZXRpbmcgc3BlY2lmaWMgZW50cnkgcG9pbnRzIGFuZCBzZXR0aW5nIHVwIGEgcHJvcGVyIGVudmlyb25tZW50ICh1c2luZyBIV1NJTSBhbmQgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMpLCBJIHRoaW5rIHRoaXMgZnV6emluZyBjYW1wYWlnbiB3aWxsIGhhdmUgYSBoaWdoIGxpa2VsaWhvb2Qgb2YgZmluZGluZyBzb21lIGludGVyZXN0aW5nIGJ1Z3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzM1LCJPdXRwdXRUb2tlbnMiOjI0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTowNToxOC4wMjA2NjMxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjYzODczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIixcbiAgICBcIk1BQzgwMjExX01FU0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0XCIsXG4gICAgXCJpZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0XCIsXG4gICAgXCJpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtYWM4MDIxMSB0cmFuc21pc3Npb24gbG9naWMsIGluY2x1ZGluZyBUWCBpbmZvIGluaXRpYWxpemF0aW9uLCBoZWFkZXIgYnVpbGRpbmcsIGFuZCBjb250cm9sIHBvcnQgdHJhbnNtaXNzaW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIHZpcnR1YWxpemVkIHdpcmVsZXNzIGludGVyZmFjZXMgKG1hYzgwMjExX2h3c2ltKS4gV2Ugc2hvdWxkIGZvY3VzIGZ1enppbmcgb24gdGhlIG1vZGlmaWVkIGVudHJ5IHBvaW50cyBsaWtlIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBhbmQgYGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXRgLiBgTUFDODAyMTFfTUVTSGAgaXMgbmVlZGVkIHRvIHJlYWNoIHRoZSBtb2RpZmllZCBtZXNoLXNwZWNpZmljIGxvZ2ljIGluIGBpZWVlODAyMTFfbG9va3VwX3JhX3N0YWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCIsXG4gICAgXCJNQUM4MDIxMV9NRVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydFwiLFxuICAgIFwiaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldFwiLFxuICAgIFwiaWVlZTgwMjExX3Byb2JlX21lc2hfbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWFjODAyMTEgdHJhbnNtaXNzaW9uIGxvZ2ljLCBpbmNsdWRpbmcgVFggaW5mbyBpbml0aWFsaXphdGlvbiwgaGVhZGVyIGJ1aWxkaW5nLCBhbmQgY29udHJvbCBwb3J0IHRyYW5zbWlzc2lvbi4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsaXplZCB3aXJlbGVzcyBpbnRlcmZhY2VzIChtYWM4MDIxMV9od3NpbSkuIFdlIHNob3VsZCBmb2N1cyBmdXp6aW5nIG9uIHRoZSBtb2RpZmllZCBlbnRyeSBwb2ludHMgbGlrZSBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGAgYW5kIGBpZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0YC4gYE1BQzgwMjExX01FU0hgIGlzIG5lZWRlZCB0byByZWFjaCB0aGUgbW9kaWZpZWQgbWVzaC1zcGVjaWZpYyBsb2dpYyBpbiBgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGFgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowjpcpb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 18:38:54 +0000 UTC FinishedAt: 2026-08-03 19:05:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "6c5fc504d0d6934132637aa3db4b9b58148eaa78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "MAC80211_HWSIM", "MAC80211_MESH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "6c5fc504d0d6934132637aa3db4b9b58148eaa78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "MAC80211_HWSIM", "MAC80211_MESH" ], "series_id": "cd0db072-d6ba-4d56-b46b-07c23b3548a5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_tx_control_port", "ieee80211_tdls_prep_mgmt_packet", "ieee80211_probe_mesh_link" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O01BQzgwMjExX01FU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3Byb2JlX21lc2hfbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1hYzgwMjExIHRyYW5zbWlzc2lvbiBsb2dpYywgaW5jbHVkaW5nIFRYIGluZm8gaW5pdGlhbGl6YXRpb24sIGhlYWRlciBidWlsZGluZywgYW5kIGNvbnRyb2wgcG9ydCB0cmFuc21pc3Npb24uIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgdmlydHVhbGl6ZWQgd2lyZWxlc3MgaW50ZXJmYWNlcyAobWFjODAyMTFfaHdzaW0pLiBXZSBzaG91bGQgZm9jdXMgZnV6emluZyBvbiB0aGUgbW9kaWZpZWQgZW50cnkgcG9pbnRzIGxpa2UgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIGFuZCBgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldGAuIGBNQUM4MDIxMV9NRVNIYCBpcyBuZWVkZWQgdG8gcmVhY2ggdGhlIG1vZGlmaWVkIG1lc2gtc3BlY2lmaWMgbG9naWMgaW4gYGllZWU4MDIxMV9sb29rdXBfcmFfc3RhYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVkMTNiZDFhYWMyM2MwNGRjYzI4N2JmMjM2NTA5ZmM2NGU4OGEwMDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE5OjAzOjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbmluZGV4IDU3NjFlOTYyMTQ5MTQuLmY0YWM5NDViNTUwODggMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbkBAIC0yMjMzLDggJiM0MzsyMjMzLDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyMyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICB1MzIgaW5mb19mbGFncyxcbi1cdFx0XHRcdCAgdTMyIGN0cmxfZmxhZ3MsXG4tXHRcdFx0XHQgIHU2NCBjb29raWUpO1xuJiM0MztcdFx0XHRcdCAgdTMyIGN0cmxfZmxhZ3MpO1xuIHN0cnVjdCBza19idWZmICpcbiBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mb19mbGFncyk7XG5AQCAtMjQ3MiwxMSAmIzQzOzI0NzEsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX3JlcXVpcmVfZW5jcnlwdGVkX2Fzc29jKF9fbGUxNiBmYyxcbiBcdHJldHVybiBzdGEgXHUwMDI2XHUwMDI2IHN0YS1cdTAwM2VzdGEuZXBwX3BlZXIgXHUwMDI2XHUwMDI2IGllZWU4MDIxMV9pc19hc3NvYyhmYyk7XG4gfVxuIFxuLS8qIHN0YV9vdXQgbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgRVJSX1BUUigpIGJlZm9yZSB1c2luZyAqL1xuLWludCBpZWVlODAyMTFfbG9va3VwX3JhX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgICAgc3RydWN0IHN0YV9pbmZvICoqc3RhX291dCk7XG4tXG4gc3RhdGljIGlubGluZSB2b2lkXG4gaWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3RkbHMuYyBiL25ldC9tYWM4MDIxMS90ZGxzLmNcbmluZGV4IGRjMmY2NjJmZTRjNDYuLjRmNGNhZTlmZDI3NGMgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdGRscy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvdGRscy5jXG5AQCAtMTEyMSw3ICYjNDM7MTEyMSw3IEBAIGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdC8qIGRpc2FibGUgYm90dG9tIGhhbHZlcyB3aGVuIGVudGVyaW5nIHRoZSBUeCBwYXRoICovXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCBmbGFncyxcbi1cdFx0XHRcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLCAwKTtcbiYjNDM7XHRcdFx0XHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyk7XG4gXHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguY1xuaW5kZXggM2ExZTJjOWUxNTY1ZS4uOTExYzRiNTcwMGQwOSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS90eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvdHguY1xuQEAgLTI1MDQsOSAmIzQzOzI1MDQsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9pc190ZGxzX3NldHVwKHN0cnVjdCBza19idWZmICpza2IpXG4gXHQgICAgICAgc2tiLVx1MDAzZWRhdGFbMTRdID09IFdMQU5fVERMU19TTkFQX1JGVFlQRTtcbiB9XG4gXG4taW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdCAgICBzdHJ1Y3Qgc3RhX2luZm8gKipzdGFfb3V0KVxuJiM0MzsvKlxuJiM0MzsgKiBSZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBmcmFtZSBzaG91bGQgYmUgZHJvcHBlZCwgb3RoZXJ3aXNlXG4mIzQzOyAqIHRoZSAqc3RhX291dCBwb2ludGVyIGlzIGZpbGxlZDpcbiYjNDM7ICogIC0gdmFsaWQgc3RhIHBvaW50ZXI6IGZyYW1lIGdvZXMgdG8gdGhhdCBzdGF0aW9uXG4mIzQzOyAqICAtIE5VTEw6IGZyYW1lIHdpbGwgYmUgdW5pY2FzdCB0byBhIHlldCB1bmtub3duIHN0YXRpb25cbiYjNDM7ICogIC0gRVJSX1BUUigtRU5PRU5UKTogZnJhbWUgd2lsbCBiZSBncm91cCBhZGRyZXNzZWRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3Qgc3RhX2luZm8gKipzdGFfb3V0KVxuIHtcbiBcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuIFxuQEAgLTI1MzEsNiAmIzQzOzI1MzgsMTAgQEAgaW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRicmVhaztcbiAjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbiBcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcbiYjNDM7XHRcdGlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihza2ItXHUwMDNlZGF0YSkpIHtcbiYjNDM7XHRcdFx0KnN0YV9vdXQgPSBFUlJfUFRSKC1FTk9FTlQpO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiBcdFx0LyogZGV0ZXJtaW5lZCBtdWNoIGxhdGVyICovXG4gXHRcdCpzdGFfb3V0ID0gTlVMTDtcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMjU3MywxNyAmIzQzOzI1ODQsMTUgQEAgaW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdCpzdGFfb3V0ID0gc3RhID86IEVSUl9QVFIoLUVOT0VOVCk7XG4mIzQzO1x0KnN0YV9vdXQgPSBzdGE7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHUxNiBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICB1MzIgKmluZm9fZmxhZ3MsXG4tXHRcdFx0XHQgICB1NjQgY29va2llKVxuJiM0MztzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IGNvb2tpZSlcbiB7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuIFx0c3RydWN0IHNrX2J1ZmYgKmFja19za2I7XG4tXHR1MTYgaW5mb19pZCA9IDA7XG4gXG4gXHRpZiAoc2tiLVx1MDAzZXNrKVxuIFx0XHRhY2tfc2tiID0gc2tiX2Nsb25lX3NrKHNrYik7XG5AQCAtMjYwMCw1OCAmIzQzOzI2MDksNDEgQEAgc3RhdGljIHUxNiBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiBcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZsb2NhbC1cdTAwM2VhY2tfc3RhdHVzX2xvY2ssIGZsYWdzKTtcbiBcbiBcdFx0aWYgKGlkIFx1MDAzZT0gMCkge1xuLVx0XHRcdGluZm9faWQgPSBpZDtcbi1cdFx0XHQqaW5mb19mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7XG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlc3RhdHVzX2RhdGEgPSBpZDtcbiYjNDM7XHRcdFx0aW5mby1cdTAwM2VzdGF0dXNfZGF0YV9pZHIgPSAxO1xuJiM0MztcdFx0XHRpbmZvLVx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUztcbiBcdFx0XHRpZiAoY29va2llKVxuIFx0XHRcdFx0SUVFRTgwMjExX1NLQl9DQihhY2tfc2tiKS1cdTAwM2VhY2suY29va2llID0gY29va2llO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGtmcmVlX3NrYihhY2tfc2tiKTtcbiBcdFx0fVxuIFx0fVxuLVxuLVx0cmV0dXJuIGluZm9faWQ7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZW1vdmVfYWNrX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTE2IGluZm9faWQpXG4te1xuLVx0c3RydWN0IHNrX2J1ZmYgKmFja19za2I7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVxuLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bG9jYWwtXHUwMDNlYWNrX3N0YXR1c19sb2NrLCBmbGFncyk7XG4tXHRhY2tfc2tiID0gaWRyX3JlbW92ZShcdTAwMjZsb2NhbC1cdTAwM2VhY2tfc3RhdHVzX2ZyYW1lcywgaW5mb19pZCk7XG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmxvY2FsLVx1MDAzZWFja19zdGF0dXNfbG9jaywgZmxhZ3MpO1xuLVxuLVx0a2ZyZWVfc2tiKGFja19za2IpO1xuIH1cbiBcbiAvKipcbiAgKiBpZWVlODAyMTFfYnVpbGRfaGRyIC0gYnVpbGQgODAyLjExIGhlYWRlciBpbiB0aGUgZ2l2ZW4gZnJhbWVcbiAgKiBAc2RhdGE6IHZpcnR1YWwgaW50ZXJmYWNlIHRvIGJ1aWxkIHRoZSBoZWFkZXIgZm9yXG4gICogQHNrYjogdGhlIHNrYiB0byBidWlsZCB0aGUgaGVhZGVyIGluXG4tICogQGluZm9fZmxhZ3M6IHNrYiBmbGFncyB0byBzZXRcbiAgKiBAc3RhOiB0aGUgc3RhdGlvbiBwb2ludGVyXG4tICogQGN0cmxfZmxhZ3M6IGluZm8gY29udHJvbCBmbGFncyB0byBzZXRcbi0gKiBAY29va2llOiBjb29raWUgcG9pbnRlciB0byBmaWxsIChpZiBub3QgJU5VTEwpXG4gICpcbiAgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBza2Igd2l0aCA4MDIuMyBoZWFkZXIgYW5kIHJlZm9ybWF0cyB0aGUgaGVhZGVyIHRvXG4gICogdGhlIGFwcHJvcHJpYXRlIElFRUUgODAyLjExIGhlYWRlciBiYXNlZCBvbiB3aGljaCBpbnRlcmZhY2UgdGhlIHBhY2tldCBpc1xuICAqIGJlaW5nIHRyYW5zbWl0dGVkIG9uLlxuICAqXG4tICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gYWxzbyB0YWtlcyBjYXJlIG9mIHRoZSBUWCBzdGF0dXMgcmVxdWVzdCBhbmRcbi0gKiBwb3RlbnRpYWwgdW5zaGFyaW5nIG9mIHRoZSBTS0IgLSB0aGlzIG5lZWRzIHRvIGJlIGludGVybGVhdmVkIHdpdGggdGhlXG4tICogaGVhZGVyIGJ1aWxkaW5nLlxuJiM0MzsgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBhbHNvIHRha2VzIGNhcmUgb2YgdGhlIFRYIHN0YXR1cyByZXF1ZXN0LiBUaGUgc2tiXG4mIzQzOyAqIG11c3Qgbm90IGJlIHNoYXJlZCwgYW5kIGl0cyBUWCBpbmZvIG11c3QgYWxyZWFkeSBiZSBpbml0aWFsaXNlZCAtIHRoaXNcbiYjNDM7ICogZnVuY3Rpb24gb25seSBmaWxscyBpbiB3aGF0IGl0IGRldGVybWluZXMgaXRzZWxmLlxuICAqXG4gICogVGhlIGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSByZWFkLXNpZGUgUkNVIGxvY2sgaGVsZFxuICAqXG4gICogUmV0dXJuczogdGhlIChwb3NzaWJseSByZWFsbG9jYXRlZCkgc2tiIG9yIGFuIEVSUl9QVFIoKSBjb2RlXG4gICovXG4gc3RhdGljIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfaGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mb19mbGFncyxcbi1cdFx0XHRcdFx0ICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUzMiBjdHJsX2ZsYWdzLFxuLVx0XHRcdFx0XHQgICB1NjQgY29va2llKVxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuLVx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvO1xuIFx0aW50IGhlYWRfbmVlZDtcbiBcdHUxNiBldGhlcnR5cGUsIGhkcmxlbiwgIG1lc2hoZHJsZW4gPSAwO1xuIFx0X19sZTE2IGZjO1xuQEAgLTI2NjMsMTggJiM0MzsyNjU1LDE4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX2hkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdGJvb2wgd21lX3N0YSA9IGZhbHNlLCBhdXRob3JpemVkID0gZmFsc2U7XG4gXHRib29sIHRkbHNfcGVlcjtcbiBcdGJvb2wgbXVsdGljYXN0O1xuLVx0dTE2IGluZm9faWQgPSAwO1xuIFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZiA9IE5VTEw7XG4gXHRlbnVtIG5sODAyMTFfYmFuZCBiYW5kO1xuIFx0aW50IHJldDtcbi1cdHU4IGxpbmtfaWQgPSB1MzJfZ2V0X2JpdHMoY3RybF9mbGFncywgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xuJiM0MztcdHU4IGxpbmtfaWQgPSB1MzJfZ2V0X2JpdHMoaW5mby1cdTAwM2Vjb250cm9sLmZsYWdzLFxuJiM0MztcdFx0XHRcdCAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xuIFxuIFx0aWYgKElTX0VSUihzdGEpKVxuIFx0XHRzdGEgPSBOVUxMO1xuIFxuICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xuIFx0aWYgKGxvY2FsLVx1MDAzZWZvcmNlX3R4X3N0YXR1cylcbi1cdFx0aW5mb19mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7XG4mIzQzO1x0XHRpbmZvLVx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUztcbiAjZW5kaWZcbiBcbiBcdC8qIGNvbnZlcnQgRXRoZXJuZXQgaGVhZGVyIHRvIHByb3BlciA4MDIuMTEgaGVhZGVyIChiYXNlZCBvblxuQEAgLTI4MTUsNyAmIzQzOzI4MDcsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdC8qIEZvciBpbmplY3RlZCBmcmFtZXMsIGZpbGwgUkEgcmlnaHQgYXdheSBhcyBuZXh0aG9wIGxvb2t1cFxuIFx0XHQgKiB3aWxsIGJlIHNraXBwZWQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoKGN0cmxfZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9DVFJMX1NLSVBfTVBBVEhfTE9PS1VQKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGlmICgoaW5mby1cdTAwM2Vjb250cm9sLmZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBpc196ZXJvX2V0aGVyX2FkZHIoaGRyLmFkZHIxKSlcbiBcdFx0XHRtZW1jcHkoaGRyLmFkZHIxLCBza2ItXHUwMDNlZGF0YSwgRVRIX0FMRU4pO1xuIFx0XHRicmVhaztcbkBAIC0yOTQ0LDIxICYjNDM7MjkzNiw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX2hkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0Z290byBmcmVlO1xuIFx0fVxuIFxuLVx0aWYgKHVubGlrZWx5KCFtdWx0aWNhc3QgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgKHNrX3JlcXVlc3RzX3dpZmlfc3RhdHVzKHNrYi1cdTAwM2VzaykgfHxcbi1cdFx0ICAgICAgY3RybF9mbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTKSkpXG4tXHRcdGluZm9faWQgPSBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLCBcdTAwMjZpbmZvX2ZsYWdzLFxuLVx0XHRcdFx0XHRcdCAgY29va2llKTtcbi1cbi1cdC8qXG4tXHQgKiBJZiB0aGUgc2tiIGlzIHNoYXJlZCB3ZSBuZWVkIHRvIG9idGFpbiBvdXIgb3duIGNvcHkuXG4tXHQgKi9cbi1cdHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKHVubGlrZWx5KCFza2IpKSB7XG4tXHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdGdvdG8gZnJlZTtcbi1cdH1cbi1cbiBcdGhkci5mcmFtZV9jb250cm9sID0gZmM7XG4gXHRoZHIuZHVyYXRpb25faWQgPSAwO1xuIFx0aGRyLnNlcV9jdHJsID0gMDtcbkBAIC0yOTk3LDggJiM0MzsyOTc0LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfaGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRoZWFkX25lZWQgJiM0Mzs9IGxvY2FsLVx1MDAzZXR4X2hlYWRyb29tO1xuIFx0XHRoZWFkX25lZWQgPSBtYXhfdChpbnQsIDAsIGhlYWRfbmVlZCk7XG4gXHRcdGlmIChpZWVlODAyMTFfc2tiX3Jlc2l6ZShzZGF0YSwgc2tiLCBoZWFkX25lZWQsIEVOQ1JZUFRfREFUQSkpIHtcbi1cdFx0XHRpZWVlODAyMTFfZnJlZV90eHNrYihcdTAwMjZsb2NhbC1cdTAwM2Vodywgc2tiKTtcbi1cdFx0XHRza2IgPSBOVUxMO1xuIFx0XHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdFx0Z290byBmcmVlO1xuIFx0XHR9XG5AQCAtMzAyNyw1MCAmIzQzOzMwMDIsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfaGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFxuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcbi1cdGluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4tXHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XG4tXG4tXHRpbmZvLVx1MDAzZWZsYWdzID0gaW5mb19mbGFncztcbi1cdGlmIChpbmZvX2lkKSB7XG4tXHRcdGluZm8tXHUwMDNlc3RhdHVzX2RhdGEgPSBpbmZvX2lkO1xuLVx0XHRpbmZvLVx1MDAzZXN0YXR1c19kYXRhX2lkciA9IDE7XG4tXHR9XG4gXHRpbmZvLVx1MDAzZWJhbmQgPSBiYW5kO1xuIFxuLVx0aWYgKGxpa2VseSghY29va2llKSkge1xuLVx0XHRjdHJsX2ZsYWdzIHw9IHUzMl9lbmNvZGVfYml0cyhsaW5rX2lkLFxuLVx0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4tXHR9IGVsc2Uge1xuLVx0XHR1bnNpZ25lZCBpbnQgcHJlX2NvbmZfbGlua19pZDtcbi1cbi1cdFx0Lypcbi1cdFx0ICogY3RybF9mbGFncyBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgYnlcbi1cdFx0ICogaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydCgpLCBoZXJlXG4tXHRcdCAqIHdlIGp1c3Qgc2FuaXR5IGNoZWNrIHRoYXRcbi1cdFx0ICovXG4tXG4tXHRcdHByZV9jb25mX2xpbmtfaWQgPSB1MzJfZ2V0X2JpdHMoY3RybF9mbGFncyxcbi1cdFx0XHRcdFx0XHRJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4tXG4tXHRcdGlmIChwcmVfY29uZl9saW5rX2lkICE9IGxpbmtfaWQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBsaW5rX2lkICE9IElFRUU4MDIxMV9MSU5LX1VOU1BFQ0lGSUVEKSB7XG4tI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG4tXHRcdFx0bmV0X2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7JXM6IGRyb3BwZWQgZnJhbWUgdG8gJXBNIHdpdGggYmFkIGxpbmsgSUQgcmVxdWVzdCAoJWQgdnMuICVkKVxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0ICAgICBzZGF0YS1cdTAwM2VuYW1lLCBoZHIuYWRkcjEsXG4tXHRcdFx0XHRcdCAgICAgcHJlX2NvbmZfbGlua19pZCwgbGlua19pZCk7XG4tI2VuZGlmXG4tXHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRnb3RvIGZyZWU7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdGluZm8tXHUwMDNlY29udHJvbC5mbGFncyA9IGN0cmxfZmxhZ3M7XG4tXG4mIzQzO1x0aW5mby1cdTAwM2Vjb250cm9sLmZsYWdzID1cbiYjNDM7XHRcdHUzMl9yZXBsYWNlX2JpdHMoaW5mby1cdTAwM2Vjb250cm9sLmZsYWdzLCBsaW5rX2lkLFxuJiM0MztcdFx0XHRcdCBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4gXHRyZXR1cm4gc2tiO1xuICBmcmVlOlxuLVx0aWYgKGluZm9faWQpXG4tXHRcdGllZWU4MDIxMV9yZW1vdmVfYWNrX3NrYihsb2NhbCwgaW5mb19pZCk7XG4tXHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfZnJlZV90eHNrYihcdTAwMjZsb2NhbC1cdTAwM2Vodywgc2tiKTtcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuQEAgLTQzNjgsMTMgJiM0Mzs0MzA3LDE0IEBAIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydCk7XG4gdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgIHUzMiBpbmZvX2ZsYWdzLFxuLVx0XHRcdFx0ICB1MzIgY3RybF9mbGFncyxcbi1cdFx0XHRcdCAgdTY0IGNvb2tpZSlcbiYjNDM7XHRcdFx0XHQgIHUzMiBjdHJsX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvO1xuIFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqbmV4dDtcbiYjNDM7XHRib29sIGdyb3VwX2FkZHJlc3NlZDtcbiBcdGludCBsZW4gPSBza2ItXHUwMDNlbGVuO1xuIFxuIFx0aWYgKHVubGlrZWx5KCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkgfHwgc2tiLVx1MDAzZWxlbiBcdTAwM2MgRVRIX0hMRU4pKSB7XG5AQCAtNDM5NCw2ICYjNDM7NDMzNCw3IEBAIHZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHNkYXRhLCBza2IsIFx1MDAyNnN0YSkpXG4gXHRcdGdvdG8gb3V0X2ZyZWU7XG4gXG4mIzQzO1x0Z3JvdXBfYWRkcmVzc2VkID0gSVNfRVJSKHN0YSk7XG4gXHRpZiAoSVNfRVJSKHN0YSkpXG4gXHRcdHN0YSA9IE5VTEw7XG4gXG5AQCAtNDQyNiw4ICYjNDM7NDM2NywyMiBAQCB2b2lkIF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBzZGF0YS1cdTAwM2Vjb250cm9sX3BvcnRfcHJvdG9jb2wpXG4gXHRcdFx0Y3RybF9mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUDtcbiBcbi1cdFx0c2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBpbmZvX2ZsYWdzLFxuLVx0XHRcdFx0XHQgIHN0YSwgY3RybF9mbGFncywgY29va2llKTtcbiYjNDM7XHRcdHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KCFza2IpKSB7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYl9saXN0KG5leHQpO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuJiM0MztcdFx0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xuJiM0MztcdFx0aW5mby1cdTAwM2VmbGFncyA9IGluZm9fZmxhZ3M7XG4mIzQzO1x0XHRpbmZvLVx1MDAzZWNvbnRyb2wuZmxhZ3MgPSBjdHJsX2ZsYWdzO1xuJiM0MztcbiYjNDM7XHRcdGlmICh1bmxpa2VseSghZ3JvdXBfYWRkcmVzc2VkIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIHNrX3JlcXVlc3RzX3dpZmlfc3RhdHVzKHNrYi1cdTAwM2VzaykpKVxuJiM0MztcdFx0XHRpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRza2IgPSBpZWVlODAyMTFfYnVpbGRfaGRyKHNkYXRhLCBza2IsIHN0YSk7XG4gXHRcdGlmIChJU19FUlIoc2tiKSkge1xuIFx0XHRcdGtmcmVlX3NrYl9saXN0KG5leHQpO1xuIFx0XHRcdGdvdG8gb3V0O1xuQEAgLTQ1NjQsNyAmIzQzOzQ1MTksNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eF9vbmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdHJldHVybjtcbiBcbiBcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKGxpbmtfaWQsIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcbi1cdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQob3V0LCBzZGF0YS1cdTAwM2VkZXYsIDAsIGN0cmxfZmxhZ3MsIDApO1xuJiM0MztcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQob3V0LCBzZGF0YS1cdTAwM2VkZXYsIDAsIGN0cmxfZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTQ1NzksNyAmIzQzOzQ1MzQsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRjdHJsX2ZsYWdzIHw9IHUzMl9lbmNvZGVfYml0cyhfX2ZmcyhsaW5rcyksXG4gXHRcdFx0XHRcdCAgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcbiBcbi1cdFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIHNkYXRhLVx1MDAzZWRldiwgMCwgY3RybF9mbGFncywgMCk7XG4mIzQzO1x0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2RhdGEtXHUwMDNlZGV2LCAwLCBjdHJsX2ZsYWdzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTQ2MjAsOCAmIzQzOzQ1NzUsNyBAQCBuZXRkZXZfdHhfdCBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZWVlODAyMTFfY29udmVydF90b191bmljYXN0KHNrYiwgZGV2LCBcdTAwMjZxdWV1ZSk7XG4gXHRcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZxdWV1ZSkpKVxuIFx0XHRcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIDAsXG4tXHRcdFx0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMsXG4tXHRcdFx0XHRcdFx0ICAgICAwKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpO1xuIFx0fSBlbHNlIGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZzZGF0YS1cdTAwM2V2aWYpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAoKHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgICFpZWVlODAyMTFfaHdfY2hlY2soXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcsIE1MT19NQ0FTVF9NVUxUSV9MSU5LX1RYKSkgfHxcbkBAIC00NjMxLDggJiM0Mzs0NTg1LDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdH0gZWxzZSB7XG4gbm9ybWFsOlxuIFx0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCAwLFxuLVx0XHRcdFx0XHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyxcbi1cdFx0XHRcdFx0ICAgICAwKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDKTtcbiBcdH1cbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG5AQCAtNDczMCw4ICYjNDM7NDY4Myw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV84MDIzX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdGlmICghdGVzdF9iaXQoSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMLCBcdTAwMjZ0aWRfdHgtXHUwMDNlc3RhdGUpKSB7XG4gXHRcdFx0LyogZmFsbCBiYWNrIHRvIG5vbi1vZmZsb2FkIHNsb3cgcGF0aCAqL1xuIFx0XHRcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIDAsXG4tXHRcdFx0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMsXG4tXHRcdFx0XHRcdFx0ICAgICAwKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuQEAgLTQ3NjUsMTIgJiM0Mzs0NzE3LDggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRtZW1jcHkoSUVFRTgwMjExX1NLQl9DQihzZWcpLCBpbmZvLCBzaXplb2YoKmluZm8pKTtcbiBcdH1cbiBcbi1cdGlmICh1bmxpa2VseShza19yZXF1ZXN0c193aWZpX3N0YXR1cyhza2ItXHUwMDNlc2spKSkge1xuLVx0XHRpbmZvLVx1MDAzZXN0YXR1c19kYXRhID0gaWVlZTgwMjExX3N0b3JlX2Fja19za2IobG9jYWwsIHNrYixcbi1cdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZpbmZvLVx1MDAzZWZsYWdzLCAwKTtcbi1cdFx0aWYgKGluZm8tXHUwMDNlc3RhdHVzX2RhdGEpXG4tXHRcdFx0aW5mby1cdTAwM2VzdGF0dXNfZGF0YV9pZHIgPSAxO1xuLVx0fVxuJiM0MztcdGlmICh1bmxpa2VseShza19yZXF1ZXN0c193aWZpX3N0YXR1cyhza2ItXHUwMDNlc2spKSlcbiYjNDM7XHRcdGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKGxvY2FsLCBza2IsIDApO1xuIFxuIFx0ZGV2X3N3X25ldHN0YXRzX3R4X2FkZChkZXYsIHNrYnMsIGxlbik7XG4gXG5AQCAtNDg5OSw2ICYjNDM7NDg0Nyw3IEBAIGllZWU4MDIxMV9idWlsZF9kYXRhX3RlbXBsYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHQubG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbCxcbiBcdFx0LnNkYXRhID0gc2RhdGEsXG4gXHR9O1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbztcbiBcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuQEAgLTQ5MDksOCAmIzQzOzQ4NTgsMTIgQEAgaWVlZTgwMjExX2J1aWxkX2RhdGFfdGVtcGxhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0c2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBpbmZvX2ZsYWdzLCBzdGEsXG4tXHRcdFx0XHQgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQywgMCk7XG4mIzQzO1x0aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcbiYjNDM7XHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XG4mIzQzO1x0aW5mby1cdTAwM2VmbGFncyA9IGluZm9fZmxhZ3M7XG4mIzQzO1x0aW5mby1cdTAwM2Vjb250cm9sLmZsYWdzID0gSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDO1xuJiM0MztcbiYjNDM7XHRza2IgPSBpZWVlODAyMTFfYnVpbGRfaGRyKHNkYXRhLCBza2IsIHN0YSk7XG4gXHRpZiAoSVNfRVJSKHNrYikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTY1MzAsNiAmIzQzOzY0ODMsOCBAQCBpbnQgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvO1xuJiM0MztcdGJvb2wgZ3JvdXBfYWRkcmVzc2VkO1xuIFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0c3RydWN0IGV0aGhkciAqZWhkcjtcbkBAIC02NTU0LDkgJiM0Mzs2NTA5LDYgQEAgaW50IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmICh1bmVuY3J5cHRlZClcbiBcdFx0ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVDtcbiBcbi1cdGlmIChjb29raWUpXG4tXHRcdGN0cmxfZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xuLVxuIFx0ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX05MODAyMTFfRlJBTUVfVFg7XG4gXG4gXHRza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLVx1MDAzZWh3LmV4dHJhX3R4X2hlYWRyb29tICYjNDM7XG5AQCAtNjU3MywxNSAmIzQzOzY1MjUsMTEgQEAgaW50IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBcdC8qIHdlIG1heSBvdmVycmlkZSB0aGUgU0EgZm9yIE1MTyBTVEEgbGF0ZXIgKi9cbiBcdGlmIChsaW5rX2lkIFx1MDAzYyAwKSB7XG4tXHRcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKElFRUU4MDIxMV9MSU5LX1VOU1BFQ0lGSUVELFxuLVx0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4mIzQzO1x0XHRsaW5rX2lkID0gSUVFRTgwMjExX0xJTktfVU5TUEVDSUZJRUQ7XG4gXHRcdG1lbWNweShlaGRyLVx1MDAzZWhfc291cmNlLCBzZGF0YS1cdTAwM2V2aWYuYWRkciwgRVRIX0FMRU4pO1xuIFx0fSBlbHNlIHtcbiBcdFx0c3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqbGlua19jb25mO1xuIFxuLVx0XHRjdHJsX2ZsYWdzIHw9IHUzMl9lbmNvZGVfYml0cyhsaW5rX2lkLFxuLVx0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4tXG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0bGlua19jb25mID0gcmN1X2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZXZpZi5saW5rX2NvbmZbbGlua19pZF0pO1xuIFx0XHRpZiAoIWxpbmtfY29uZikge1xuQEAgLTY2MDAsOSAmIzQzOzY1NDgsNiBAQCBpbnQgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4gXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFxuLVx0aWYgKGxvY2FsLVx1MDAzZWh3LnF1ZXVlcyBcdTAwM2MgSUVFRTgwMjExX05VTV9BQ1MpXG4tXHRcdGdvdG8gc3RhcnRfeG1pdDtcbi1cbiBcdC8qIHVwZGF0ZSBRb1MgaGVhZGVyIHRvIHByaW9yaXRpemUgY29udHJvbCBwb3J0IGZyYW1lcyBpZiBwb3NzaWJsZSxcbiBcdCAqIHByaW9yaXRpemF0aW9uIGFsc28gaGFwcGVucyBmb3IgY29udHJvbCBwb3J0IGZyYW1lcyBzZW5kIG92ZXJcbiBcdCAqIEFGX1BBQ0tFVFxuQEAgLTY2MTUsMjQgJiM0Mzs2NTYwLDQ4IEBAIGludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRpZiAoIUlTX0VSUihzdGEpKSB7XG4tXHRcdHUxNiBxdWV1ZSA9IGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc2RhdGEsIHN0YSwgc2tiKTtcbiYjNDM7XHRncm91cF9hZGRyZXNzZWQgPSBJU19FUlIoc3RhKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHN0YSkpXG4mIzQzO1x0XHRzdGEgPSBOVUxMO1xuIFxuLVx0XHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBxdWV1ZSk7XG4mIzQzO1x0c2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgaWVlZTgwMjExX3NlbGVjdF9xdWV1ZShzZGF0YSwgc3RhLCBza2IpKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogZm9yIE1MTyBTVEEsIHRoZSBTQSBzaG91bGQgYmUgdGhlIEFQIE1MRCBhZGRyZXNzLCBidXRcbi1cdFx0ICogdGhlIGxpbmsgSUQgaGFzIGJlZW4gc2VsZWN0ZWQgYWxyZWFkeVxuLVx0XHQgKi9cbi1cdFx0aWYgKHN0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXN0YS5tbG8pXG4tXHRcdFx0bWVtY3B5KGVoZHItXHUwMDNlaF9zb3VyY2UsIHNkYXRhLVx1MDAzZXZpZi5hZGRyLCBFVEhfQUxFTik7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBmb3IgTUxPIFNUQSwgdGhlIFNBIHNob3VsZCBiZSB0aGUgQVAgTUxEIGFkZHJlc3MsIGJ1dFxuJiM0MztcdCAqIHRoZSBsaW5rIElEIGhhcyBiZWVuIHNlbGVjdGVkIGFscmVhZHlcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3RhIFx1MDAyNlx1MDAyNiBzdGEtXHUwMDNlc3RhLm1sbylcbiYjNDM7XHRcdG1lbWNweShlaGRyLVx1MDAzZWhfc291cmNlLCBzZGF0YS1cdTAwM2V2aWYuYWRkciwgRVRIX0FMRU4pO1xuJiM0MztcbiYjNDM7XHRpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuJiM0MztcdG1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTtcbiYjNDM7XHRpbmZvLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4mIzQzO1x0Y3RybF9mbGFncyB8PSB1MzJfZW5jb2RlX2JpdHMobGlua19pZCwgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xuJiM0MztcdGluZm8tXHUwMDNlY29udHJvbC5mbGFncyA9IGN0cmxfZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGlmICghZ3JvdXBfYWRkcmVzc2VkKVxuJiM0MztcdFx0aWVlZTgwMjExX3N0b3JlX2Fja19za2IobG9jYWwsIHNrYiwgY29va2llKTtcbiYjNDM7XG4mIzQzO1x0c2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBzdGEpO1xuJiM0MztcdGlmIChJU19FUlIoc2tiKSkge1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihza2IpO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4tc3RhcnRfeG1pdDpcbiYjNDM7XHRpZiAobGlua19pZCAhPSB1MzJfZ2V0X2JpdHMoaW5mby1cdTAwM2Vjb250cm9sLmZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSykpIHtcbiYjNDM7XHRcdGllZWU4MDIxMV9mcmVlX3R4c2tiKFx1MDAyNmxvY2FsLVx1MDAzZWh3LCBza2IpO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRldl9zd19uZXRzdGF0c190eF9hZGQoZGV2LCAxLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHRpZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KGxvY2FsLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4tXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2tiLVx1MDAzZWRldiwgZmxhZ3MsIGN0cmxfZmxhZ3MsIGNvb2tpZSk7XG4mIzQzO1x0aWVlZTgwMjExX3htaXQoc2RhdGEsIHN0YSwgc2tiKTtcbiBcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTY2NjAsOCAmIzQzOzY2MjksNyBAQCBpbnQgaWVlZTgwMjExX3Byb2JlX21lc2hfbGluayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFxuIFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIHNrYi1cdTAwM2VkZXYsIDAsXG4tXHRcdFx0XHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX1NLSVBfTVBBVEhfTE9PS1VQLFxuLVx0XHRcdFx0ICAgICAwKTtcbiYjNDM7XHRcdFx0XHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX1NLSVBfTVBBVEhfTE9PS1VQKTtcbiBcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O01BQzgwMjExX01FU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3Byb2JlX21lc2hfbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1hYzgwMjExIHRyYW5zbWlzc2lvbiBsb2dpYywgaW5jbHVkaW5nIFRYIGluZm8gaW5pdGlhbGl6YXRpb24sIGhlYWRlciBidWlsZGluZywgYW5kIGNvbnRyb2wgcG9ydCB0cmFuc21pc3Npb24uIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgdmlydHVhbGl6ZWQgd2lyZWxlc3MgaW50ZXJmYWNlcyAobWFjODAyMTFfaHdzaW0pLiBXZSBzaG91bGQgZm9jdXMgZnV6emluZyBvbiB0aGUgbW9kaWZpZWQgZW50cnkgcG9pbnRzIGxpa2UgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIGFuZCBgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldGAuIGBNQUM4MDIxMV9NRVNIYCBpcyBuZWVkZWQgdG8gcmVhY2ggdGhlIG1vZGlmaWVkIG1lc2gtc3BlY2lmaWMgbG9naWMgaW4gYGllZWU4MDIxMV9sb29rdXBfcmFfc3RhYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVkMTNiZDFhYWMyM2MwNGRjYzI4N2JmMjM2NTA5ZmM2NGU4OGEwMDUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDE5OjAzOjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCA1NzYxZTk2MjE0OTE0Li5mNGFjOTQ1YjU1MDg4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtMjIzMyw4ICYjNDM7MjIzMyw3IEBAIG5ldGRldl90eF90IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIHZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgIHUzMiBpbmZvX2ZsYWdzLAotCQkJCSAgdTMyIGN0cmxfZmxhZ3MsCi0JCQkJICB1NjQgY29va2llKTsKJiM0MzsJCQkJICB1MzIgY3RybF9mbGFncyk7CiBzdHJ1Y3Qgc2tfYnVmZiAqCiBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvX2ZsYWdzKTsKQEAgLTI0NzIsMTEgJiM0MzsyNDcxLDYgQEAgc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yZXF1aXJlX2VuY3J5cHRlZF9hc3NvYyhfX2xlMTYgZmMsCiAJcmV0dXJuIHN0YSAmYW1wOyZhbXA7IHN0YS0mZ3Q7c3RhLmVwcF9wZWVyICZhbXA7JmFtcDsgaWVlZTgwMjExX2lzX2Fzc29jKGZjKTsKIH0KIAotLyogc3RhX291dCBuZWVkcyB0byBiZSBjaGVja2VkIGZvciBFUlJfUFRSKCkgYmVmb3JlIHVzaW5nICovCi1pbnQgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICBzdHJ1Y3Qgc3RhX2luZm8gKipzdGFfb3V0KTsKLQogc3RhdGljIGlubGluZSB2b2lkCiBpZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3RkbHMuYyBiL25ldC9tYWM4MDIxMS90ZGxzLmMKaW5kZXggZGMyZjY2MmZlNGM0Ni4uNGY0Y2FlOWZkMjc0YyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3RkbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvdGRscy5jCkBAIC0xMTIxLDcgJiM0MzsxMTIxLDcgQEAgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCS8qIGRpc2FibGUgYm90dG9tIGhhbHZlcyB3aGVuIGVudGVyaW5nIHRoZSBUeCBwYXRoICovCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCV9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIGZsYWdzLAotCQkJCSAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLCAwKTsKJiM0MzsJCQkJICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpOwogCWxvY2FsX2JoX2VuYWJsZSgpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmMKaW5kZXggM2ExZTJjOWUxNTY1ZS4uOTExYzRiNTcwMGQwOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTI1MDQsOSAmIzQzOzI1MDQsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9pc190ZGxzX3NldHVwKHN0cnVjdCBza19idWZmICpza2IpCiAJICAgICAgIHNrYi0mZ3Q7ZGF0YVsxNF0gPT0gV0xBTl9URExTX1NOQVBfUkZUWVBFOwogfQogCi1pbnQgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICBzdHJ1Y3Qgc3RhX2luZm8gKipzdGFfb3V0KQomIzQzOy8qCiYjNDM7ICogUmV0dXJucyBhbiBlcnJvciBpZiB0aGUgZnJhbWUgc2hvdWxkIGJlIGRyb3BwZWQsIG90aGVyd2lzZQomIzQzOyAqIHRoZSAqc3RhX291dCBwb2ludGVyIGlzIGZpbGxlZDoKJiM0MzsgKiAgLSB2YWxpZCBzdGEgcG9pbnRlcjogZnJhbWUgZ29lcyB0byB0aGF0IHN0YXRpb24KJiM0MzsgKiAgLSBOVUxMOiBmcmFtZSB3aWxsIGJlIHVuaWNhc3QgdG8gYSB5ZXQgdW5rbm93biBzdGF0aW9uCiYjNDM7ICogIC0gRVJSX1BUUigtRU5PRU5UKTogZnJhbWUgd2lsbCBiZSBncm91cCBhZGRyZXNzZWQKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAomIzQzOwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKipzdGFfb3V0KQogewogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCkBAIC0yNTMxLDYgJiM0MzsyNTM4LDEwIEBAIGludCBpZWVlODAyMTFfbG9va3VwX3JhX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKIAljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiYjNDM7CQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoc2tiLSZndDtkYXRhKSkgewomIzQzOwkJCSpzdGFfb3V0ID0gRVJSX1BUUigtRU5PRU5UKTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KIAkJLyogZGV0ZXJtaW5lZCBtdWNoIGxhdGVyICovCiAJCSpzdGFfb3V0ID0gTlVMTDsKIAkJcmV0dXJuIDA7CkBAIC0yNTczLDE3ICYjNDM7MjU4NCwxNSBAQCBpbnQgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCSpzdGFfb3V0ID0gc3RhID86IEVSUl9QVFIoLUVOT0VOVCk7CiYjNDM7CSpzdGFfb3V0ID0gc3RhOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTE2IGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgdTMyICppbmZvX2ZsYWdzLAotCQkJCSAgIHU2NCBjb29raWUpCiYjNDM7c3RhdGljIHZvaWQgaWVlZTgwMjExX3N0b3JlX2Fja19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiYjNDM7CQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgY29va2llKQogewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IHNrX2J1ZmYgKmFja19za2I7Ci0JdTE2IGluZm9faWQgPSAwOwogCiAJaWYgKHNrYi0mZ3Q7c2spCiAJCWFja19za2IgPSBza2JfY2xvbmVfc2soc2tiKTsKQEAgLTI2MDAsNTggJiM0MzsyNjA5LDQxIEBAIHN0YXRpYyB1MTYgaWVlZTgwMjExX3N0b3JlX2Fja19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtsb2NhbC0mZ3Q7YWNrX3N0YXR1c19sb2NrLCBmbGFncyk7CiAKIAkJaWYgKGlkICZndDs9IDApIHsKLQkJCWluZm9faWQgPSBpZDsKLQkJCSppbmZvX2ZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUzsKJiM0MzsJCQlpbmZvLSZndDtzdGF0dXNfZGF0YSA9IGlkOwomIzQzOwkJCWluZm8tJmd0O3N0YXR1c19kYXRhX2lkciA9IDE7CiYjNDM7CQkJaW5mby0mZ3Q7ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTOwogCQkJaWYgKGNvb2tpZSkKIAkJCQlJRUVFODAyMTFfU0tCX0NCKGFja19za2IpLSZndDthY2suY29va2llID0gY29va2llOwogCQl9IGVsc2UgewogCQkJa2ZyZWVfc2tiKGFja19za2IpOwogCQl9CiAJfQotCi0JcmV0dXJuIGluZm9faWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZW1vdmVfYWNrX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTE2IGluZm9faWQpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKmFja19za2I7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bG9jYWwtJmd0O2Fja19zdGF0dXNfbG9jaywgZmxhZ3MpOwotCWFja19za2IgPSBpZHJfcmVtb3ZlKCZhbXA7bG9jYWwtJmd0O2Fja19zdGF0dXNfZnJhbWVzLCBpbmZvX2lkKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bG9jYWwtJmd0O2Fja19zdGF0dXNfbG9jaywgZmxhZ3MpOwotCi0Ja2ZyZWVfc2tiKGFja19za2IpOwogfQogCiAvKioKICAqIGllZWU4MDIxMV9idWlsZF9oZHIgLSBidWlsZCA4MDIuMTEgaGVhZGVyIGluIHRoZSBnaXZlbiBmcmFtZQogICogQHNkYXRhOiB2aXJ0dWFsIGludGVyZmFjZSB0byBidWlsZCB0aGUgaGVhZGVyIGZvcgogICogQHNrYjogdGhlIHNrYiB0byBidWlsZCB0aGUgaGVhZGVyIGluCi0gKiBAaW5mb19mbGFnczogc2tiIGZsYWdzIHRvIHNldAogICogQHN0YTogdGhlIHN0YXRpb24gcG9pbnRlcgotICogQGN0cmxfZmxhZ3M6IGluZm8gY29udHJvbCBmbGFncyB0byBzZXQKLSAqIEBjb29raWU6IGNvb2tpZSBwb2ludGVyIHRvIGZpbGwgKGlmIG5vdCAlTlVMTCkKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBza2Igd2l0aCA4MDIuMyBoZWFkZXIgYW5kIHJlZm9ybWF0cyB0aGUgaGVhZGVyIHRvCiAgKiB0aGUgYXBwcm9wcmlhdGUgSUVFRSA4MDIuMTEgaGVhZGVyIGJhc2VkIG9uIHdoaWNoIGludGVyZmFjZSB0aGUgcGFja2V0IGlzCiAgKiBiZWluZyB0cmFuc21pdHRlZCBvbi4KICAqCi0gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBhbHNvIHRha2VzIGNhcmUgb2YgdGhlIFRYIHN0YXR1cyByZXF1ZXN0IGFuZAotICogcG90ZW50aWFsIHVuc2hhcmluZyBvZiB0aGUgU0tCIC0gdGhpcyBuZWVkcyB0byBiZSBpbnRlcmxlYXZlZCB3aXRoIHRoZQotICogaGVhZGVyIGJ1aWxkaW5nLgomIzQzOyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFsc28gdGFrZXMgY2FyZSBvZiB0aGUgVFggc3RhdHVzIHJlcXVlc3QuIFRoZSBza2IKJiM0MzsgKiBtdXN0IG5vdCBiZSBzaGFyZWQsIGFuZCBpdHMgVFggaW5mbyBtdXN0IGFscmVhZHkgYmUgaW5pdGlhbGlzZWQgLSB0aGlzCiYjNDM7ICogZnVuY3Rpb24gb25seSBmaWxscyBpbiB3aGF0IGl0IGRldGVybWluZXMgaXRzZWxmLgogICoKICAqIFRoZSBmdW5jdGlvbiByZXF1aXJlcyB0aGUgcmVhZC1zaWRlIFJDVSBsb2NrIGhlbGQKICAqCiAgKiBSZXR1cm5zOiB0aGUgKHBvc3NpYmx5IHJlYWxsb2NhdGVkKSBza2Igb3IgYW4gRVJSX1BUUigpIGNvZGUKICAqLwogc3RhdGljIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfaGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mb19mbGFncywKLQkJCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUzMiBjdHJsX2ZsYWdzLAotCQkJCQkgICB1NjQgY29va2llKQomIzQzOwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJCSAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0mZ3Q7bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCWludCBoZWFkX25lZWQ7CiAJdTE2IGV0aGVydHlwZSwgaGRybGVuLCAgbWVzaGhkcmxlbiA9IDA7CiAJX19sZTE2IGZjOwpAQCAtMjY2MywxOCAmIzQzOzI2NTUsMTggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfaGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCWJvb2wgd21lX3N0YSA9IGZhbHNlLCBhdXRob3JpemVkID0gZmFsc2U7CiAJYm9vbCB0ZGxzX3BlZXI7CiAJYm9vbCBtdWx0aWNhc3Q7Ci0JdTE2IGluZm9faWQgPSAwOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjaGFuY3R4X2NvbmYgPSBOVUxMOwogCWVudW0gbmw4MDIxMV9iYW5kIGJhbmQ7CiAJaW50IHJldDsKLQl1OCBsaW5rX2lkID0gdTMyX2dldF9iaXRzKGN0cmxfZmxhZ3MsIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTsKJiM0MzsJdTggbGlua19pZCA9IHUzMl9nZXRfYml0cyhpbmZvLSZndDtjb250cm9sLmZsYWdzLAomIzQzOwkJCQkgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTsKIAogCWlmIChJU19FUlIoc3RhKSkKIAkJc3RhID0gTlVMTDsKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCiAJaWYgKGxvY2FsLSZndDtmb3JjZV90eF9zdGF0dXMpCi0JCWluZm9fZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTOwomIzQzOwkJaW5mby0mZ3Q7ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTOwogI2VuZGlmCiAKIAkvKiBjb252ZXJ0IEV0aGVybmV0IGhlYWRlciB0byBwcm9wZXIgODAyLjExIGhlYWRlciAoYmFzZWQgb24KQEAgLTI4MTUsNyAmIzQzOzI4MDcsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCS8qIEZvciBpbmplY3RlZCBmcmFtZXMsIGZpbGwgUkEgcmlnaHQgYXdheSBhcyBuZXh0aG9wIGxvb2t1cAogCQkgKiB3aWxsIGJlIHNraXBwZWQuCiAJCSAqLwotCQlpZiAoKGN0cmxfZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1RYX0NUUkxfU0tJUF9NUEFUSF9MT09LVVApICZhbXA7JmFtcDsKJiM0MzsJCWlmICgoaW5mby0mZ3Q7Y29udHJvbC5mbGFncyAmYW1wOyBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUCkgJmFtcDsmYW1wOwogCQkgICAgaXNfemVyb19ldGhlcl9hZGRyKGhkci5hZGRyMSkpCiAJCQltZW1jcHkoaGRyLmFkZHIxLCBza2ItJmd0O2RhdGEsIEVUSF9BTEVOKTsKIAkJYnJlYWs7CkBAIC0yOTQ0LDIxICYjNDM7MjkzNiw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX2hkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJZ290byBmcmVlOwogCX0KIAotCWlmICh1bmxpa2VseSghbXVsdGljYXN0ICZhbXA7JmFtcDsKLQkJICAgICAoc2tfcmVxdWVzdHNfd2lmaV9zdGF0dXMoc2tiLSZndDtzaykgfHwKLQkJICAgICAgY3RybF9mbGFncyAmYW1wOyBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVMpKSkKLQkJaW5mb19pZCA9IGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKGxvY2FsLCBza2IsICZhbXA7aW5mb19mbGFncywKLQkJCQkJCSAgY29va2llKTsKLQotCS8qCi0JICogSWYgdGhlIHNrYiBpcyBzaGFyZWQgd2UgbmVlZCB0byBvYnRhaW4gb3VyIG93biBjb3B5LgotCSAqLwotCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOwotCWlmICh1bmxpa2VseSghc2tiKSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWU7Ci0JfQotCiAJaGRyLmZyYW1lX2NvbnRyb2wgPSBmYzsKIAloZHIuZHVyYXRpb25faWQgPSAwOwogCWhkci5zZXFfY3RybCA9IDA7CkBAIC0yOTk3LDggJiM0MzsyOTc0LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfaGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQloZWFkX25lZWQgJiM0Mzs9IGxvY2FsLSZndDt0eF9oZWFkcm9vbTsKIAkJaGVhZF9uZWVkID0gbWF4X3QoaW50LCAwLCBoZWFkX25lZWQpOwogCQlpZiAoaWVlZTgwMjExX3NrYl9yZXNpemUoc2RhdGEsIHNrYiwgaGVhZF9uZWVkLCBFTkNSWVBUX0RBVEEpKSB7Ci0JCQlpZWVlODAyMTFfZnJlZV90eHNrYigmYW1wO2xvY2FsLSZndDtodywgc2tiKTsKLQkJCXNrYiA9IE5VTEw7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBmcmVlOwogCQl9CkBAIC0zMDI3LDUwICYjNDM7MzAwMiwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCi0JaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7Ci0KLQlpbmZvLSZndDtmbGFncyA9IGluZm9fZmxhZ3M7Ci0JaWYgKGluZm9faWQpIHsKLQkJaW5mby0mZ3Q7c3RhdHVzX2RhdGEgPSBpbmZvX2lkOwotCQlpbmZvLSZndDtzdGF0dXNfZGF0YV9pZHIgPSAxOwotCX0KIAlpbmZvLSZndDtiYW5kID0gYmFuZDsKIAotCWlmIChsaWtlbHkoIWNvb2tpZSkpIHsKLQkJY3RybF9mbGFncyB8PSB1MzJfZW5jb2RlX2JpdHMobGlua19pZCwKLQkJCQkJICAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspOwotCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGludCBwcmVfY29uZl9saW5rX2lkOwotCi0JCS8qCi0JCSAqIGN0cmxfZmxhZ3MgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IGJ5Ci0JCSAqIGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoKSwgaGVyZQotCQkgKiB3ZSBqdXN0IHNhbml0eSBjaGVjayB0aGF0Ci0JCSAqLwotCi0JCXByZV9jb25mX2xpbmtfaWQgPSB1MzJfZ2V0X2JpdHMoY3RybF9mbGFncywKLQkJCQkJCUlFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTsKLQotCQlpZiAocHJlX2NvbmZfbGlua19pZCAhPSBsaW5rX2lkICZhbXA7JmFtcDsKLQkJICAgIGxpbmtfaWQgIT0gSUVFRTgwMjExX0xJTktfVU5TUEVDSUZJRUQpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCQkJbmV0X2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDslczogZHJvcHBlZCBmcmFtZSB0byAlcE0gd2l0aCBiYWQgbGluayBJRCByZXF1ZXN0ICglZCB2cy4gJWQpXG4mIzM0OywKLQkJCQkJICAgICBzZGF0YS0mZ3Q7bmFtZSwgaGRyLmFkZHIxLAotCQkJCQkgICAgIHByZV9jb25mX2xpbmtfaWQsIGxpbmtfaWQpOwotI2VuZGlmCi0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBmcmVlOwotCQl9Ci0JfQotCi0JaW5mby0mZ3Q7Y29udHJvbC5mbGFncyA9IGN0cmxfZmxhZ3M7Ci0KJiM0MzsJaW5mby0mZ3Q7Y29udHJvbC5mbGFncyA9CiYjNDM7CQl1MzJfcmVwbGFjZV9iaXRzKGluZm8tJmd0O2NvbnRyb2wuZmxhZ3MsIGxpbmtfaWQsCiYjNDM7CQkJCSBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7CiAJcmV0dXJuIHNrYjsKICBmcmVlOgotCWlmIChpbmZvX2lkKQotCQlpZWVlODAyMTFfcmVtb3ZlX2Fja19za2IobG9jYWwsIGluZm9faWQpOwotCWtmcmVlX3NrYihza2IpOwomIzQzOwlpZWVlODAyMTFfZnJlZV90eHNrYigmYW1wO2xvY2FsLSZndDtodywgc2tiKTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCkBAIC00MzY4LDEzICYjNDM7NDMwNywxNCBAQCBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQpOwogdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgdTMyIGluZm9fZmxhZ3MsCi0JCQkJICB1MzIgY3RybF9mbGFncywKLQkJCQkgIHU2NCBjb29raWUpCiYjNDM7CQkJCSAgdTMyIGN0cmxfZmxhZ3MpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtJmd0O2xvY2FsOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJc3RydWN0IHNrX2J1ZmYgKm5leHQ7CiYjNDM7CWJvb2wgZ3JvdXBfYWRkcmVzc2VkOwogCWludCBsZW4gPSBza2ItJmd0O2xlbjsKIAogCWlmICh1bmxpa2VseSghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpIHx8IHNrYi0mZ3Q7bGVuICZsdDsgRVRIX0hMRU4pKSB7CkBAIC00Mzk0LDYgJiM0Mzs0MzM0LDcgQEAgdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHNkYXRhLCBza2IsICZhbXA7c3RhKSkKIAkJZ290byBvdXRfZnJlZTsKIAomIzQzOwlncm91cF9hZGRyZXNzZWQgPSBJU19FUlIoc3RhKTsKIAlpZiAoSVNfRVJSKHN0YSkpCiAJCXN0YSA9IE5VTEw7CiAKQEAgLTQ0MjYsOCAmIzQzOzQzNjcsMjIgQEAgdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCWlmIChza2ItJmd0O3Byb3RvY29sID09IHNkYXRhLSZndDtjb250cm9sX3BvcnRfcHJvdG9jb2wpCiAJCQljdHJsX2ZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVFJMX1NLSVBfTVBBVEhfTE9PS1VQOwogCi0JCXNrYiA9IGllZWU4MDIxMV9idWlsZF9oZHIoc2RhdGEsIHNrYiwgaW5mb19mbGFncywKLQkJCQkJICBzdGEsIGN0cmxfZmxhZ3MsIGNvb2tpZSk7CiYjNDM7CQlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKJiM0MzsJCWlmICh1bmxpa2VseSghc2tiKSkgewomIzQzOwkJCWtmcmVlX3NrYl9saXN0KG5leHQpOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKJiM0MzsJCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKJiM0MzsJCWluZm8tJmd0O2ZsYWdzID0gaW5mb19mbGFnczsKJiM0MzsJCWluZm8tJmd0O2NvbnRyb2wuZmxhZ3MgPSBjdHJsX2ZsYWdzOwomIzQzOwomIzQzOwkJaWYgKHVubGlrZWx5KCFncm91cF9hZGRyZXNzZWQgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgc2tfcmVxdWVzdHNfd2lmaV9zdGF0dXMoc2tiLSZndDtzaykpKQomIzQzOwkJCWllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKGxvY2FsLCBza2IsIDApOwomIzQzOwomIzQzOwkJc2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBzdGEpOwogCQlpZiAoSVNfRVJSKHNrYikpIHsKIAkJCWtmcmVlX3NrYl9saXN0KG5leHQpOwogCQkJZ290byBvdXQ7CkBAIC00NTY0LDcgJiM0Mzs0NTE5LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX21sb19tdWx0aWNhc3RfdHhfb25lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQlyZXR1cm47CiAKIAljdHJsX2ZsYWdzIHw9IHUzMl9lbmNvZGVfYml0cyhsaW5rX2lkLCBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7Ci0JX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChvdXQsIHNkYXRhLSZndDtkZXYsIDAsIGN0cmxfZmxhZ3MsIDApOwomIzQzOwlfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KG91dCwgc2RhdGEtJmd0O2RldiwgMCwgY3RybF9mbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC00NTc5LDcgJiM0Mzs0NTM0LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX21sb19tdWx0aWNhc3RfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJY3RybF9mbGFncyB8PSB1MzJfZW5jb2RlX2JpdHMoX19mZnMobGlua3MpLAogCQkJCQkgICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7CiAKLQkJX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIHNkYXRhLSZndDtkZXYsIDAsIGN0cmxfZmxhZ3MsIDApOwomIzQzOwkJX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIHNkYXRhLSZndDtkZXYsIDAsIGN0cmxfZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCkBAIC00NjIwLDggJiM0Mzs0NTc1LDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJaWVlZTgwMjExX2NvbnZlcnRfdG9fdW5pY2FzdChza2IsIGRldiwgJmFtcDtxdWV1ZSk7CiAJCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmYW1wO3F1ZXVlKSkpCiAJCQlfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCAwLAotCQkJCQkJICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMsCi0JCQkJCQkgICAgIDApOwomIzQzOwkJCQkJCSAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDKTsKIAl9IGVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKCZhbXA7c2RhdGEtJmd0O3ZpZikgJmFtcDsmYW1wOwogCQkgICAoKHNkYXRhLSZndDt2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCAmYW1wOyZhbXA7CiAJCSAgICAgIWllZWU4MDIxMV9od19jaGVjaygmYW1wO3NkYXRhLSZndDtsb2NhbC0mZ3Q7aHcsIE1MT19NQ0FTVF9NVUxUSV9MSU5LX1RYKSkgfHwKQEAgLTQ2MzEsOCAmIzQzOzQ1ODUsNyBAQCBuZXRkZXZfdHhfdCBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCX0gZWxzZSB7CiBub3JtYWw6CiAJCV9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIDAsCi0JCQkJCSAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLAotCQkJCQkgICAgIDApOwomIzQzOwkJCQkJICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpOwogCX0KIAogCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC00NzMwLDggJiM0Mzs0NjgzLDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJaWYgKCF0ZXN0X2JpdChIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwsICZhbXA7dGlkX3R4LSZndDtzdGF0ZSkpIHsKIAkJCS8qIGZhbGwgYmFjayB0byBub24tb2ZmbG9hZCBzbG93IHBhdGggKi8KIAkJCV9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIDAsCi0JCQkJCQkgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQywKLQkJCQkJCSAgICAgMCk7CiYjNDM7CQkJCQkJICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTQ3NjUsMTIgJiM0Mzs0NzE3LDggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCW1lbWNweShJRUVFODAyMTFfU0tCX0NCKHNlZyksIGluZm8sIHNpemVvZigqaW5mbykpOwogCX0KIAotCWlmICh1bmxpa2VseShza19yZXF1ZXN0c193aWZpX3N0YXR1cyhza2ItJmd0O3NrKSkpIHsKLQkJaW5mby0mZ3Q7c3RhdHVzX2RhdGEgPSBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLAotCQkJCQkJCSAgICAmYW1wO2luZm8tJmd0O2ZsYWdzLCAwKTsKLQkJaWYgKGluZm8tJmd0O3N0YXR1c19kYXRhKQotCQkJaW5mby0mZ3Q7c3RhdHVzX2RhdGFfaWRyID0gMTsKLQl9CiYjNDM7CWlmICh1bmxpa2VseShza19yZXF1ZXN0c193aWZpX3N0YXR1cyhza2ItJmd0O3NrKSkpCiYjNDM7CQlpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLCAwKTsKIAogCWRldl9zd19uZXRzdGF0c190eF9hZGQoZGV2LCBza2JzLCBsZW4pOwogCkBAIC00ODk5LDYgJiM0Mzs0ODQ3LDcgQEAgaWVlZTgwMjExX2J1aWxkX2RhdGFfdGVtcGxhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCS5sb2NhbCA9IHNkYXRhLSZndDtsb2NhbCwKIAkJLnNkYXRhID0gc2RhdGEsCiAJfTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtNDkwOSw4ICYjNDM7NDg1OCwxMiBAQCBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJZ290byBvdXQ7CiAJfQogCi0Jc2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBpbmZvX2ZsYWdzLCBzdGEsCi0JCQkJICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMsIDApOwomIzQzOwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwomIzQzOwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CiYjNDM7CWluZm8tJmd0O2ZsYWdzID0gaW5mb19mbGFnczsKJiM0MzsJaW5mby0mZ3Q7Y29udHJvbC5mbGFncyA9IElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQzsKJiM0MzsKJiM0MzsJc2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBzdGEpOwogCWlmIChJU19FUlIoc2tiKSkKIAkJZ290byBvdXQ7CiAKQEAgLTY1MzAsNiAmIzQzOzY0ODMsOCBAQCBpbnQgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLSZndDtsb2NhbDsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwomIzQzOwlib29sIGdyb3VwX2FkZHJlc3NlZDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBldGhoZHIgKmVoZHI7CkBAIC02NTU0LDkgJiM0Mzs2NTA5LDYgQEAgaW50IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAodW5lbmNyeXB0ZWQpCiAJCWZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7CiAKLQlpZiAoY29va2llKQotCQljdHJsX2ZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUzsKLQogCWZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9OTDgwMjExX0ZSQU1FX1RYOwogCiAJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0mZ3Q7aHcuZXh0cmFfdHhfaGVhZHJvb20gJiM0MzsKQEAgLTY1NzMsMTUgJiM0Mzs2NTI1LDExIEBAIGludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAkvKiB3ZSBtYXkgb3ZlcnJpZGUgdGhlIFNBIGZvciBNTE8gU1RBIGxhdGVyICovCiAJaWYgKGxpbmtfaWQgJmx0OyAwKSB7Ci0JCWN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKElFRUU4MDIxMV9MSU5LX1VOU1BFQ0lGSUVELAotCQkJCQkgICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7CiYjNDM7CQlsaW5rX2lkID0gSUVFRTgwMjExX0xJTktfVU5TUEVDSUZJRUQ7CiAJCW1lbWNweShlaGRyLSZndDtoX3NvdXJjZSwgc2RhdGEtJmd0O3ZpZi5hZGRyLCBFVEhfQUxFTik7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqbGlua19jb25mOwogCi0JCWN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKGxpbmtfaWQsCi0JCQkJCSAgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTsKLQogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWxpbmtfY29uZiA9IHJjdV9kZXJlZmVyZW5jZShzZGF0YS0mZ3Q7dmlmLmxpbmtfY29uZltsaW5rX2lkXSk7CiAJCWlmICghbGlua19jb25mKSB7CkBAIC02NjAwLDkgJiM0Mzs2NTQ4LDYgQEAgaW50IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCi0JaWYgKGxvY2FsLSZndDtody5xdWV1ZXMgJmx0OyBJRUVFODAyMTFfTlVNX0FDUykKLQkJZ290byBzdGFydF94bWl0OwotCiAJLyogdXBkYXRlIFFvUyBoZWFkZXIgdG8gcHJpb3JpdGl6ZSBjb250cm9sIHBvcnQgZnJhbWVzIGlmIHBvc3NpYmxlLAogCSAqIHByaW9yaXRpemF0aW9uIGFsc28gaGFwcGVucyBmb3IgY29udHJvbCBwb3J0IGZyYW1lcyBzZW5kIG92ZXIKIAkgKiBBRl9QQUNLRVQKQEAgLTY2MTUsMjQgJiM0Mzs2NTYwLDQ4IEBAIGludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCXJldHVybiBlcnI7CiAJfQogCi0JaWYgKCFJU19FUlIoc3RhKSkgewotCQl1MTYgcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKHNkYXRhLCBzdGEsIHNrYik7CiYjNDM7CWdyb3VwX2FkZHJlc3NlZCA9IElTX0VSUihzdGEpOwomIzQzOwlpZiAoSVNfRVJSKHN0YSkpCiYjNDM7CQlzdGEgPSBOVUxMOwogCi0JCXNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIHF1ZXVlKTsKJiM0MzsJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgaWVlZTgwMjExX3NlbGVjdF9xdWV1ZShzZGF0YSwgc3RhLCBza2IpKTsKIAotCQkvKgotCQkgKiBmb3IgTUxPIFNUQSwgdGhlIFNBIHNob3VsZCBiZSB0aGUgQVAgTUxEIGFkZHJlc3MsIGJ1dAotCQkgKiB0aGUgbGluayBJRCBoYXMgYmVlbiBzZWxlY3RlZCBhbHJlYWR5Ci0JCSAqLwotCQlpZiAoc3RhICZhbXA7JmFtcDsgc3RhLSZndDtzdGEubWxvKQotCQkJbWVtY3B5KGVoZHItJmd0O2hfc291cmNlLCBzZGF0YS0mZ3Q7dmlmLmFkZHIsIEVUSF9BTEVOKTsKJiM0MzsJLyoKJiM0MzsJICogZm9yIE1MTyBTVEEsIHRoZSBTQSBzaG91bGQgYmUgdGhlIEFQIE1MRCBhZGRyZXNzLCBidXQKJiM0MzsJICogdGhlIGxpbmsgSUQgaGFzIGJlZW4gc2VsZWN0ZWQgYWxyZWFkeQomIzQzOwkgKi8KJiM0MzsJaWYgKHN0YSAmYW1wOyZhbXA7IHN0YS0mZ3Q7c3RhLm1sbykKJiM0MzsJCW1lbWNweShlaGRyLSZndDtoX3NvdXJjZSwgc2RhdGEtJmd0O3ZpZi5hZGRyLCBFVEhfQUxFTik7CiYjNDM7CiYjNDM7CWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiYjNDM7CW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKJiM0MzsJaW5mby0mZ3Q7ZmxhZ3MgPSBmbGFnczsKJiM0MzsJY3RybF9mbGFncyB8PSB1MzJfZW5jb2RlX2JpdHMobGlua19pZCwgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspOwomIzQzOwlpbmZvLSZndDtjb250cm9sLmZsYWdzID0gY3RybF9mbGFnczsKJiM0MzsKJiM0MzsJaWYgKCFncm91cF9hZGRyZXNzZWQpCiYjNDM7CQlpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLCBjb29raWUpOwomIzQzOwomIzQzOwlza2IgPSBpZWVlODAyMTFfYnVpbGRfaGRyKHNkYXRhLCBza2IsIHN0YSk7CiYjNDM7CWlmIChJU19FUlIoc2tiKSkgewomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4gUFRSX0VSUihza2IpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAotc3RhcnRfeG1pdDoKJiM0MzsJaWYgKGxpbmtfaWQgIT0gdTMyX2dldF9iaXRzKGluZm8tJmd0O2NvbnRyb2wuZmxhZ3MsCiYjNDM7CQkJCSAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSykpIHsKJiM0MzsJCWllZWU4MDIxMV9mcmVlX3R4c2tiKCZhbXA7bG9jYWwtJmd0O2h3LCBza2IpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXZfc3dfbmV0c3RhdHNfdHhfYWRkKGRldiwgMSwgc2tiLSZndDtsZW4pOwomIzQzOwlpZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KGxvY2FsLCBza2ItJmd0O2xlbik7CiYjNDM7CiAJbG9jYWxfYmhfZGlzYWJsZSgpOwotCV9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBza2ItJmd0O2RldiwgZmxhZ3MsIGN0cmxfZmxhZ3MsIGNvb2tpZSk7CiYjNDM7CWllZWU4MDIxMV94bWl0KHNkYXRhLCBzdGEsIHNrYik7CiAJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NjYwLDggJiM0Mzs2NjI5LDcgQEAgaW50IGllZWU4MDIxMV9wcm9iZV9tZXNoX2xpbmsoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2tiLSZndDtkZXYsIDAsCi0JCQkJICAgICBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUCwKLQkJCQkgICAgIDApOwomIzQzOwkJCQkgICAgIElFRUU4MDIxMV9UWF9DVFJMX1NLSVBfTVBBVEhfTE9PS1VQKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKIAogCXJldHVybiAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA2MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDcyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBtYWM4MDIxMSBUWCBQYXRoIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGluIGBuZXQvbWFjODAyMTEvYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyB0b3VjaGluZyBzb21lIGZ1bmRhbWVudGFsIFRYIHBhdGggY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgY29tbWl0IGFmZmVjdHMgYSBudW1iZXIgb2Yga2V5IGZ1bmN0aW9uczogYGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCwgYGllZWU4MDIxMV9idWlsZF9oZHJgLCBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGAsIGFuZCBzbyBvbi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBpbnZvbHZlIHJlbW92aW5nIHRoZSBgY29va2llYCBhcmd1bWVudCBmcm9tIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCBhbmQgYWx0ZXJpbmcgdGhlIGNhbGwgdG8gYGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiYCBhbG9uZyB3aXRoIGhvdyBgaW5mb2AgKHRoZSBza2ImIzM5O3MgY29udHJvbCBibG9jaykgZ2V0cyBpbml0aWFsaXplZC4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uIGluIGhvdyBtYWM4MDIxMSBoYW5kbGVzIHRyYW5zbWlzc2lvbnMuIFRoaXMgaGFzIHdpZGUgaW1wbGljYXRpb25zLCBuYXR1cmFsbHksIGJlaW5nIHJpZ2h0IGluIHRoZSBjb3JlIG9mIHRoZSA4MDIuMTEgd2lyZWxlc3Mgc3RhY2suCgpGaXJzdCB0aGluZyBJIHRoaW5rIGlzLCBpcyB0aGlzIGZ1enplci1mcmllbmRseT8gQW5kLCB5ZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBleGlzdGVuY2Ugb2YgYG1hYzgwMjExX2h3c2ltYCwgdGhlIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGRyaXZlciwgaXMgY3J1Y2lhbCBoZXJlLiAgSXQgbWVhbnMgSSBjYW4gdGVzdCB0aGlzIGVhc2lseSBpbiBRRU1VLiBHb29kLgoKSSBzaG91bGQgbGlzdCBhbGwgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucy4gTGV0IG1lIHF1aWNrbHkgbm90ZSB0aG9zZSBkb3duOiBgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGFgLCBgaWVlZTgwMjExX3N0b3JlX2Fja19za2JgLCBgaWVlZTgwMjExX2J1aWxkX2hkcmAsIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCwgYGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4X29uZWAsIGBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eGAsIGBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAsIGBpZWVlODAyMTFfODAyM194bWl0YCwgYGllZWU4MDIxMV9idWlsZF9kYXRhX3RlbXBsYXRlYCwgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgLCBgaWVlZTgwMjExX3Byb2JlX21lc2hfbGlua2AuCgpOb3csIGxldCYjMzk7cyB6b29tIGluIGEgbGl0dGxlLiBCYXNlZCBvbiBhIHF1aWNrIGdsYW5jZSwgSSYjMzk7bGwgcGF5IGNsb3NlciBhdHRlbnRpb24gdG8gYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgLCBgaWVlZTgwMjExX3Byb2JlX21lc2hfbGlua2AsIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCwgYGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCwgYW5kIGBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZWAuIFdhaXQgYSBtaW51dGUsIGBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAgaXMgKnRoZSogaG90LXBhdGggZm9yIG1hYzgwMjExIGludGVyZmFjZXMsIGl0JiMzOTtzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uLCBzbyB0aGlzIGNoYW5nZSB3aWxsIGJlIGNyaXRpY2FsLiBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGAgaXMgYWxzbyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGhhbmRsZXMgODAyLjFYL0VBUE9MIHRyYWZmaWMgYW5kIHJlbGF0ZWQgY29udHJvbCBwb3J0IGZyYW1lcywgd2hpY2ggd2hpbGUgbGVzcyAmIzM0O2hvdCYjMzQ7IHRoYW4gdGhlIGNvcmUgVFggcGF0aCwgaXMgc3RpbGwgdml0YWwuIGBpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rYCBkZWFscyB3aXRoIG1lc2ggbmV0d29ya3MuIGBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZWAgaXMgdXNlZCBmb3IsIG9idmlvdXNseSwgYnVpbGRpbmcgZGF0YSB0ZW1wbGF0ZXMuCgpJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHVzYWdlIG9mIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBhbmQgYGllZWU4MDIxMV9wcm9iZV9tZXNoX2xpbmtgLiBBbHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY2hhbmdlZCBhYm91dCBkYXRhIHRlbXBsYXRlIGJ1aWxkaW5nLiBJIHNob3VsZCBzZWFyY2ggZm9yIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBpbiB0aGUgc291cmNlIGJhc2UgYW5kIHNlZSB3aGVyZSB0aGF0JiMzOTtzIGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9jZmcuYz01OTc2PWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNjA3MC1cdC5zZXRfbXVsdGljYXN0X3RvX3VuaWNhc3QgPSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF90b191bmljYXN0LFxubmV0L21hYzgwMjExL2NmZy5jOjYwNzE6XHQudHhfY29udHJvbF9wb3J0ID0gaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydCxcbm5ldC9tYWM4MDIxMS9jZmcuYy02MDcyLVx0LmdldF90eHFfc3RhdHMgPSBpZWVlODAyMTFfZ2V0X3R4cV9zdGF0cyxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMjQ2PXZvaWQgaWVlZTgwMjExX2NsZWFyX2Zhc3RfeG1pdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjQ3OmludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjQ4LVx0XHRcdCAgICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sXG4tLVxubmV0L21hYzgwMjExL3R4LmM9NjQ0OD12b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTY0NzgtXG5uZXQvbWFjODAyMTEvdHguYzo2NDc5OmludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvbWFjODAyMTEvdHguYy02NDgwLVx0XHRcdCAgICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MjcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENoYW5nZXMgdG8gdGhlIDgwMi4xMSBTdGFjayBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L21hYzgwMjExL3R4LmNgLCBgbmV0L21hYzgwMjExL3RkbHMuY2AsIGFuZCBgbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhgLiBUaGF0JiMzOTtzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgbWFjODAyMTEgY29yZSwgd2hpY2gsIGZvciB0aG9zZSBub3QgZmFtaWxpYXIsIGlzIHRoZSBMaW51eCBrZXJuZWwmIzM5O3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIDgwMi4xMSBzdGFjay4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGZvY3VzZWQgb24gaG93IHRyYW5zbWl0IG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQuCgpTcGVjaWZpY2FsbHksIEkgc2VlIGEgcmVmYWN0b3JpbmcgZWZmb3J0IGdvaW5nIG9uLiBUaGUgc2lnbmF0dXJlIG9mIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCBpcyBiZWluZyBjaGFuZ2VkLCByZW1vdmluZyB0aGUgYGNvb2tpZWAgYXJndW1lbnQuIEFsc28sIGBpZWVlODAyMTFfYnVpbGRfaGRyYCBpcyBiZWluZyByZWZhY3RvcmVkIHRvIHJlbHkgb24gcHJlLXBvcHVsYXRlZCBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGBza2JgIGNvbnRyb2wgYmxvY2ssIHJlbW92aW5nIHRoZSBgaW5mb19mbGFnc2AsIGBjdHJsX2ZsYWdzYCwgYW5kIGBjb29raWVgIGFyZ3VtZW50cy4gSXQgc2VlbXMgbGlrZSBhIGNvbnNvbGlkYXRpb24gb2YgZGF0YSB3aXRoaW4gdGhlIGBza2JgJiMzOTtzIGNvbnRyb2wgYmxvY2ssIGBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYmAgaXMgYWxzbyBiZWluZyB1cGRhdGVkLCBhbmQgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHBvcHVsYXRlIHRoaXMgYGluZm9gIGFuZCBjYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgZGlyZWN0bHkuIFRoaXMgaXMgZ29vZDogcmVtb3ZpbmcgZnVuY3Rpb24gYXJndW1lbnRzIGFuZCBtb3ZpbmcgdGhhdCByZXNwb25zaWJpbGl0eSB0byBvdGhlciB2YXJpYWJsZXMgaW4gdGhlIHN0cnVjdCBoZWxwcyBwcmV2ZW50IGluY29ycmVjdCB1c2FnZSBhbmQgcmVkdWNlcyB0aGUgYW1vdW50IG9mIHN0YXRlIHBhc3NlZCBhcyBhcmd1bWVudHMuCgpXYWl0IGEgc2Vjb25kLi4uICptYWM4MDIxMSo/IFllcywgaXQmIzM5O3MgdGhlIDgwMi4xMSBzdGFjay4gQW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIGBtYWM4MDIxMV9od3NpbWAsIHdoaWNoIGlzIGEgc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUgZHJpdmVyLiBUaGlzIG1lYW5zIHdlIGhhdmUgYSB2aWFibGUgcGF0aCBmb3IgZnV6emluZyEgKipXb3J0aEZ1enppbmc9dHJ1ZSoqIC0gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gYSBrZXkgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjaywgYW5kIHdlIGhhdmUgYSBwYXRoIGZvciBmdXp6aW5nIHRoZSBjb21wb25lbnRzLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGltcG9ydGFudCBzeW1ib2xzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgbW9kaWZpZWQgb3IgaGVhdmlseSBpbnZvbHZlZCBpbiB0aGUgY2hhbmdlczogYF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgLCBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGAsIGBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZWAsIGBpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rYCAodGhvdWdoIHRoYXQgbGFzdCBvbmUgc2VlbXMgbGlrZSBqdXN0IGEgY2FsbCBzaXRlLCBub3QgYSBrZXkgZW50cnkgcG9pbnQpLCBgaWVlZTgwMjExX21sb19tdWx0aWNhc3RfdHhgICh0aG91Z2ggaXQmIzM5O3Mgc3RhdGljKSBhbmQgYGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCAodGhlIG5ldGRldl90eF90KS4KCkEgY2xvc2VyIGxvb2suIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCBpcyAqZXhwb3J0ZWQqLiBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGAgaXMgdXNlZCBpbiBgbWFjODAyMTFfY29uZmlnX29wc2Agd2hpY2ggbWVhbnMgaXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBgY2ZnODAyMTFgLiBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIGlzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZvciBtYWM4MDIxMSBpbnRlcmZhY2VzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdXJmYWNlIHRvIHRhcmdldCwgcGFydGljdWxhcmx5IHdpdGggb3VyIGZ1enppbmcgc2V0dXAuCgpJJiMzOTttIGNoZWNraW5nIGlmIHRoZXNlIGtleSBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYXMgc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGxpbWl0ZWQgdmlzaWJpbGl0eTogYF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIGlzbiYjMzk7dCBzdGF0aWMsIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBpc24mIzM5O3Qgc3RhdGljLCBgaWVlZTgwMjExX2J1aWxkX2RhdGFfdGVtcGxhdGVgIGlzbiYjMzk7dCBzdGF0aWMsIGFuZCBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIGlzIGFsc28gbm90IHN0YXRpYy4gR3JlYXQsIG1lYW5zIHRoZXkgY2FuIGJlIGVhc2lseSBjYWxsZWQuCgpBbHJpZ2h0LCB0aW1lIHRvIGdvIGFuZCBjaGVjayB0aGUgS2NvbmZpZyB0byBzZWUgd2hhdCBtb2R1bGVzIGFuZCBkZXBlbmRlbmNpZXMgd2UgbmVlZCB0byBlbmFibGUgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MTk9aWYgTUFDODAyMTEgIT0gblxubmV0L21hYzgwMjExL0tjb25maWctMjAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMi1cdGJvb2xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ6Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7TWluc3RyZWxcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MzE9Y2hvaWNlXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNDAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0MTpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctNDItXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9NDg9ZW5kY2hvaWNlXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01MS1cdHN0cmluZ1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXCYjMzQ7U29tZSB3aXJlbGVzcyBkcml2ZXJzIHJlcXVpcmUgYSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNTktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MDpjb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxubmV0L21hYzgwMjExL0tjb25maWctNjEtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgbWFjODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTcxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03OC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjc5OmNvbmZpZyBNQUM4MDIxMV9MRURTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIExFRCB0cmlnZ2Vyc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg3LVxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk3OmNvbmZpZyBNQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk4LVx0Ym9vbCBcJiMzNDtUcmFjZSBhbGwgbWFjODAyMTEgZGVidWcgbWVzc2FnZXNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTA6bWVudWNvbmZpZyBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXHRib29sIFwmIzM0O1NlbGVjdCBtYWM4MDIxMSBkZWJ1Z2dpbmcgZmVhdHVyZXNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTUtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTY6Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0RvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzEtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMzI6Y29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMy1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTQyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTQzOmNvbmZpZyBNQUM4MDIxMV9NTE1FX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWFuYWdlZCBNTE1FIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1My1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NDpjb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTUtXHRib29sIFwmIzM0O1ZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjM6Y29uZmlnIE1BQzgwMjExX0hUX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjQtXHRib29sIFwmIzM0O1ZlcmJvc2UgSFQgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTc0LVxubmV0L21hYzgwMjExL0tjb25maWc6MTc1OmNvbmZpZyBNQUM4MDIxMV9PQ0JfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBPQ0IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTg1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTg2OmNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODctXHRib29sIFwmIzM0O1ZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTc6Y29uZmlnIE1BQzgwMjExX1BTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTgtXHRib29sIFwmIzM0O1ZlcmJvc2UgcG93ZXJzYXZlIG1vZGUgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjA4LVxubmV0L21hYzgwMjExL0tjb25maWc6MjA5OmNvbmZpZyBNQUM4MDIxMV9NUExfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBlZXIgbGluayBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjEtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjI6Y29uZmlnIE1BQzgwMjExX01QQVRIX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwYXRoIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNTpjb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1OC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjcxLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4MC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI4MTpjb25maWcgTUFDODAyMTFfVERMU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjgyLVx0Ym9vbCBcJiMzNDtWZXJib3NlIFRETFMgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjkyLVxubmV0L21hYzgwMjExL0tjb25maWc6MjkzOmNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xubmV0L21hYzgwMjExL0tjb25maWctMjk0LVx0Ym9vbCBcJiMzNDtFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDktXHRpbnQgXCYjMzQ7U3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVwmIzM0OyBpZiBNQUM4MDIxMV9ERUJVR19NRU5VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NzcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENoZWNrKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhpcyBmdXp6aW5nIHNldHVwIGlzIGdvaW5nIHRvIHdvcmsgYXMgaW50ZW5kZWQuIE15IGltbWVkaWF0ZSBjb25jZXJucyByZXZvbHZlIGFyb3VuZCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRvIGVuc3VyZSB0aGUgZnV6emluZyBpcyBhY3RpdmUgYW5kIGVmZmVjdGl2ZSwgSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIGBNQUM4MDIxMWAgYW5kIGBNQUM4MDIxMV9IV1NJTWAgYWN0aXZhdGVkLiBCdXQsIGhvbGQgb24uIEkgcmVtZW1iZXIgdGhhdCBgQ0ZHODAyMTFgIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBgTUFDODAyMTFgLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCB0aGF0IGRlcGVuZGVuY3kgaXMgbWV0LiBBbmQgZmluYWxseSwgSSBzaG91bGQgY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTUFDODAyMTFfSFdTSU1gIHRvIGVuc3VyZSBJIGhhdmUgZXZlcnl0aGluZyBpbiBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDODAyMTFfSFdTSU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgZm9yIFZpcnR1YWwgV2lyZWxlc3MgRHJpdmVycyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxLCBhcyB0aGF0JiMzOTtzIG9mdGVuIHRoZSBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmb3IgYSBwYXJ0aWN1bGFyIHN1YnN5c3RlbSBvciBtb2R1bGUuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgY3JpdGljYWwgaW4gZGV0ZXJtaW5pbmcgaG93IHRoZSB2aXJ0dWFsIHdpcmVsZXNzIGRyaXZlcihzKSBhcmUgYnVpbHQsIGVuYWJsZWQsIGFuZCBjb25maWd1cmVkIHdpdGhpbiB0aGUgbGFyZ2VyIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgLSB0aGUgdG9wLWxldmVsIG1lbnUgZW50cmllcywgYW55IGRlcGVuZGVuY2llcyBvciBwcmVyZXF1aXNpdGVzLCBhbmQgdGhlIGRlZmF1bHQgc3RhdGVzIG9mIHJlbGV2YW50IG9wdGlvbnMuIEl0JiMzOTtzIHRpbWUgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBrZXkgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byBlYWNoIG90aGVyLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgaW1wYWN0cyB0aGUgYXZhaWxhYmlsaXR5IG9mIGZlYXR1cmVzIG9yIGRyaXZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Y29uZmlnIE1BQzgwMjExX0hXU0lNXG4gICAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAgNDpcdFx0aGVscFxuICAgNTpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XG4gICA2Olx0XHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxuICAgNzpcdFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxuICAgODpcdFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XG4gICA5Olx0XHQgIHRvIHVzZSB0aGlzIHRvb2wuXG4gIDEwOlx0XG4gIDExOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuICAxMjpcdFx0ICBjYWxsZWQgbWFjODAyMTFfaHdzaW0uICBJZiB1bnN1cmUsIHNheSBOLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBWSVJUX1dJRklcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O1dpZmkgd3JhcHBlciBmb3IgZXRoZXJuZXQgZHJpdmVyc1wmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbm5lY3Rpb25zIHRvIGFwcGVhciBhcyBpZiB0aGV5XG4gIDE5Olx0XHQgIGFyZSB3aWZpIGNvbm5lY3Rpb25zIHRocm91Z2ggYSBzcGVjaWFsIHJ0bmV0bGluayBkZXZpY2UuXG4gIDIwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzM1CgkJCQkJCQlvdXRwdXQ6IDI0MgoJCQkJCQkJdGhvdWdodHM6IDE1MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGb2N1czogbWFjODAyMTEgVFggTG9naWMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IG1lc3Npbmcgd2l0aCBzb21lIGZ1bmRhbWVudGFsIG1hYzgwMjExIHN0dWZmIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBjb3JlIFRYIGxvZ2ljLiBJdCYjMzk7cyB0b3VjaGluZyBgbmV0L21hYzgwMjExL3R4LmNgLCBgbmV0L21hYzgwMjExL3RkbHMuY2AsIGFuZCBhIGhlYWRlciBmaWxlLCBzbyBpdCYjMzk7cyBhIGRlZXAgZGl2ZS4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyB0byB0aGUgc2lnbmF0dXJlcyBvZiBgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAgYW5kIGBpZWVlODAyMTFfbG9va3VwX3JhX3N0YWAsIGFsb25nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBob3cgVFggaW5mbyBpcyBoYW5kbGVkIGluIGBpZWVlODAyMTFfYnVpbGRfaGRyYCBhbmQgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgcGFja2V0IHRyYW5zbWlzc2lvbiwgcXVldWluZywgYW5kIGhlYWRlciBjb25zdHJ1Y3Rpb24uIEdpdmVuIHRoYXQgdGhpcyBpcyBjb3JlIHN0dWZmLCBhbmQgcmVhY2hhYmxlIHRocm91Z2ggYG1hYzgwMjExX2h3c2ltYCAod2hpY2ggaXMgZ3JlYXQgYmVjYXVzZSB0aGF0IG1lYW5zIFFFTVUvc3l6a2FsbGVyIGFyZSB2aWFibGUpLCBpdCYjMzk7cyBzY3JlYW1pbmcgZm9yIHNvbWUgZnV6emluZy4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcuIEFmdGVyIGRpZ2dpbmcgaW50byB0aGUgY29kZSwgSSBjYW4gc2VlIHRoYXQgaXQmIzM5O3MgZm9jdXNpbmcgb246CgoqICAgYGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXRgCiogICBgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGFgICh0aG91Z2ggc3RhdGljLCBzbyB3b3J0aCBjb25zaWRlcmluZyBjb250ZXh0KQoqICAgYGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiYAoqICAgYGllZWU4MDIxMV9idWlsZF9oZHJgCiogICBgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAKKiAgIGBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eF9vbmVgCiogICBgaWVlZTgwMjExX21sb19tdWx0aWNhc3RfdHhgCiogICBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgCiogICBgaWVlZTgwMjExXzgwMjNfeG1pdGAKKiAgIGBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZWAKKiAgIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YAoqICAgYGllZWU4MDIxMV9wcm9iZV9tZXNoX2xpbmtgCgpMZXQmIzM5O3MgcmVmaW5lIHRoZSBsaXN0LiBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIChib3RoIHRoZSBpbnRlcm5hbCBhbmQgZXhwb3J0ZWQgdmVyc2lvbnMpIGxvb2sgbGlrZSBob3QgcGF0aHMg4oCTIHRoZXkmIzM5O3JlIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9ucywgbWFraW5nIHRoZW0gaGlnaC1wcmlvcml0eSBjYW5kaWRhdGVzLiBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGAgaXMgYWxzbyBnb29kLiBJdCYjMzk7cyB1c2VkIGZvciBjb250cm9sIHBvcnQgZnJhbWVzIGxpa2UgRUFQT0wsIHNvIGEgbW9yZSBzcGVjaWZpYyB0YXJnZXQuIEFsc28sIGBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZWAgd2lsbCBiZSB1c2VmdWwgYW5kIGBpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rYCBmb3IgbWVzaCBsaW5rcy4gYGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXRgIGxvb2tzIGdvb2QgdG9vLgoKU2luY2UgSSYjMzk7bGwgYmUgZnV6emluZywgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGVmZm9ydHMgb246CgoqICAgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIChBUEkgZW50cnlwb2ludCkKKiAgIGBpZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0YAoqICAgYGllZWU4MDIxMV9wcm9iZV9tZXNoX2xpbmtgCgpGb3IgdGVzdGluZyB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIG1ha2Ugc3VyZSB0aGF0IEkgZW5hYmxlIGEgZmV3IGNvbmZpZ3VyYXRpb25zOgoKKiAgIGBNQUM4MDIxMWAgKG9idmlvdXNseSkKKiAgIGBNQUM4MDIxMV9IV1NJTWAgKHRvIHVzZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBlc3NlbnRpYWwgZm9yIHByYWN0aWNhbCB0ZXN0aW5nKQoqICAgYE1BQzgwMjExX01FU0hgIChiZWNhdXNlIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgYmxvY2sgcmVsYXRlZCB0byBgQ09ORklHX01BQzgwMjExX01FU0hgIGluIGBpZWVlODAyMTFfbG9va3VwX3JhX3N0YWApLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgc2hha2luZyB1cCBjb3JlIHRyYW5zbWlzc2lvbiBsb2dpYy4gQnkgdGFyZ2V0aW5nIHNwZWNpZmljIGVudHJ5IHBvaW50cyBhbmQgc2V0dGluZyB1cCBhIHByb3BlciBlbnZpcm9ubWVudCAodXNpbmcgSFdTSU0gYW5kIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zKSwgSSB0aGluayB0aGlzIGZ1enppbmcgY2FtcGFpZ24gd2lsbCBoYXZlIGEgaGlnaCBsaWtlbGlob29kIG9mIGZpbmRpbmcgc29tZSBpbnRlcmVzdGluZyBidWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OywKICAgICYjMzQ7TUFDODAyMTFfTUVTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxMV90eF9jb250cm9sX3BvcnQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWFjODAyMTEgdHJhbnNtaXNzaW9uIGxvZ2ljLCBpbmNsdWRpbmcgVFggaW5mbyBpbml0aWFsaXphdGlvbiwgaGVhZGVyIGJ1aWxkaW5nLCBhbmQgY29udHJvbCBwb3J0IHRyYW5zbWlzc2lvbi4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsaXplZCB3aXJlbGVzcyBpbnRlcmZhY2VzIChtYWM4MDIxMV9od3NpbSkuIFdlIHNob3VsZCBmb2N1cyBmdXp6aW5nIG9uIHRoZSBtb2RpZmllZCBlbnRyeSBwb2ludHMgbGlrZSBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGAgYW5kIGBpZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0YC4gYE1BQzgwMjExX01FU0hgIGlzIG5lZWRlZCB0byByZWFjaCB0aGUgbW9kaWZpZWQgbWVzaC1zcGVjaWZpYyBsb2dpYyBpbiBgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGFgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9NRVNIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9wcm9iZV9tZXNoX2xpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtYWM4MDIxMSB0cmFuc21pc3Npb24gbG9naWMsIGluY2x1ZGluZyBUWCBpbmZvIGluaXRpYWxpemF0aW9uLCBoZWFkZXIgYnVpbGRpbmcsIGFuZCBjb250cm9sIHBvcnQgdHJhbnNtaXNzaW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIHZpcnR1YWxpemVkIHdpcmVsZXNzIGludGVyZmFjZXMgKG1hYzgwMjExX2h3c2ltKS4gV2Ugc2hvdWxkIGZvY3VzIGZ1enppbmcgb24gdGhlIG1vZGlmaWVkIGVudHJ5IHBvaW50cyBsaWtlIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBhbmQgYGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXRgLiBgTUFDODAyMTFfTUVTSGAgaXMgbmVlZGVkIHRvIHJlYWNoIHRoZSBtb2RpZmllZCBtZXNoLXNwZWNpZmljIGxvZ2ljIGluIGBpZWVlODAyMTFfbG9va3VwX3JhX3N0YWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTowMzo0Ny42MjU1MDMzMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQ2OTgzNDc5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIixcbiAgICBcIk1BQzgwMjExX01FU0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0XCIsXG4gICAgXCJpZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0XCIsXG4gICAgXCJpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtYWM4MDIxMSB0cmFuc21pc3Npb24gbG9naWMsIGluY2x1ZGluZyBUWCBpbmZvIGluaXRpYWxpemF0aW9uLCBoZWFkZXIgYnVpbGRpbmcsIGFuZCBjb250cm9sIHBvcnQgdHJhbnNtaXNzaW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIHZpcnR1YWxpemVkIHdpcmVsZXNzIGludGVyZmFjZXMgKG1hYzgwMjExX2h3c2ltKS4gV2Ugc2hvdWxkIGZvY3VzIGZ1enppbmcgb24gdGhlIG1vZGlmaWVkIGVudHJ5IHBvaW50cyBsaWtlIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBhbmQgYGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXRgLiBgTUFDODAyMTFfTUVTSGAgaXMgbmVlZGVkIHRvIHJlYWNoIHRoZSBtb2RpZmllZCBtZXNoLXNwZWNpZmljIGxvZ2ljIGluIGBpZWVlODAyMTFfbG9va3VwX3JhX3N0YWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjAzOjQ3LjYyNTUxMDQ0NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4ODg2OTc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVkMTNiZDFhYWMyM2MwNGRjYzI4N2JmMjM2NTA5ZmM2NGU4OGEwMDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAxOTowMzo0NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuaW5kZXggNTc2MWU5NjIxNDkxNC4uZjRhYzk0NWI1NTA4OCAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxcbisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuQEAgLTIyMzMsOCArMjIzMyw3IEBAIG5ldGRldl90eF90IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0ICB1MzIgaW5mb19mbGFncyxcXG4tXFx0XFx0XFx0XFx0ICB1MzIgY3RybF9mbGFncyxcXG4tXFx0XFx0XFx0XFx0ICB1NjQgY29va2llKTtcXG4rXFx0XFx0XFx0XFx0ICB1MzIgY3RybF9mbGFncyk7XFxuIHN0cnVjdCBza19idWZmICpcXG4gaWVlZTgwMjExX2J1aWxkX2RhdGFfdGVtcGxhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvX2ZsYWdzKTtcXG5AQCAtMjQ3MiwxMSArMjQ3MSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfcmVxdWlyZV9lbmNyeXB0ZWRfYXNzb2MoX19sZTE2IGZjLFxcbiBcXHRyZXR1cm4gc3RhIFxcdTAwMjZcXHUwMDI2IHN0YS1cXHUwMDNlc3RhLmVwcF9wZWVyIFxcdTAwMjZcXHUwMDI2IGllZWU4MDIxMV9pc19hc3NvYyhmYyk7XFxuIH1cXG4gXFxuLS8qIHN0YV9vdXQgbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgRVJSX1BUUigpIGJlZm9yZSB1c2luZyAqL1xcbi1pbnQgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IHN0YV9pbmZvICoqc3RhX291dCk7XFxuLVxcbiBzdGF0aWMgaW5saW5lIHZvaWRcXG4gaWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLFxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdGRscy5jIGIvbmV0L21hYzgwMjExL3RkbHMuY1xcbmluZGV4IGRjMmY2NjJmZTRjNDYuLjRmNGNhZTlmZDI3NGMgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL3RkbHMuY1xcbisrKyBiL25ldC9tYWM4MDIxMS90ZGxzLmNcXG5AQCAtMTEyMSw3ICsxMTIxLDcgQEAgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHQvKiBkaXNhYmxlIGJvdHRvbSBoYWx2ZXMgd2hlbiBlbnRlcmluZyB0aGUgVHggcGF0aCAqL1xcbiBcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuIFxcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIGZsYWdzLFxcbi1cXHRcXHRcXHRcXHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQywgMCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDKTtcXG4gXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXFxuaW5kZXggM2ExZTJjOWUxNTY1ZS4uOTExYzRiNTcwMGQwOSAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xcbisrKyBiL25ldC9tYWM4MDIxMS90eC5jXFxuQEAgLTI1MDQsOSArMjUwNCwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX2lzX3RkbHNfc2V0dXAoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0ICAgICAgIHNrYi1cXHUwMDNlZGF0YVsxNF0gPT0gV0xBTl9URExTX1NOQVBfUkZUWVBFO1xcbiB9XFxuIFxcbi1pbnQgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IHN0YV9pbmZvICoqc3RhX291dClcXG4rLypcXG4rICogUmV0dXJucyBhbiBlcnJvciBpZiB0aGUgZnJhbWUgc2hvdWxkIGJlIGRyb3BwZWQsIG90aGVyd2lzZVxcbisgKiB0aGUgKnN0YV9vdXQgcG9pbnRlciBpcyBmaWxsZWQ6XFxuKyAqICAtIHZhbGlkIHN0YSBwb2ludGVyOiBmcmFtZSBnb2VzIHRvIHRoYXQgc3RhdGlvblxcbisgKiAgLSBOVUxMOiBmcmFtZSB3aWxsIGJlIHVuaWNhc3QgdG8gYSB5ZXQgdW5rbm93biBzdGF0aW9uXFxuKyAqICAtIEVSUl9QVFIoLUVOT0VOVCk6IGZyYW1lIHdpbGwgYmUgZ3JvdXAgYWRkcmVzc2VkXFxuKyAqL1xcbitzdGF0aWMgaW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc3RhX2luZm8gKipzdGFfb3V0KVxcbiB7XFxuIFxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xcbiBcXG5AQCAtMjUzMSw2ICsyNTM4LDEwIEBAIGludCBpZWVlODAyMTFfbG9va3VwX3JhX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0YnJlYWs7XFxuICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbiBcXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XFxuK1xcdFxcdGlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihza2ItXFx1MDAzZWRhdGEpKSB7XFxuK1xcdFxcdFxcdCpzdGFfb3V0ID0gRVJSX1BUUigtRU5PRU5UKTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4gXFx0XFx0LyogZGV0ZXJtaW5lZCBtdWNoIGxhdGVyICovXFxuIFxcdFxcdCpzdGFfb3V0ID0gTlVMTDtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTI1NzMsMTcgKzI1ODQsMTUgQEAgaW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0KnN0YV9vdXQgPSBzdGEgPzogRVJSX1BUUigtRU5PRU5UKTtcXG4rXFx0KnN0YV9vdXQgPSBzdGE7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdTE2IGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHQgICB1MzIgKmluZm9fZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdCAgIHU2NCBjb29raWUpXFxuK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IGNvb2tpZSlcXG4ge1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XFxuIFxcdHN0cnVjdCBza19idWZmICphY2tfc2tiO1xcbi1cXHR1MTYgaW5mb19pZCA9IDA7XFxuIFxcbiBcXHRpZiAoc2tiLVxcdTAwM2VzaylcXG4gXFx0XFx0YWNrX3NrYiA9IHNrYl9jbG9uZV9zayhza2IpO1xcbkBAIC0yNjAwLDU4ICsyNjA5LDQxIEBAIHN0YXRpYyB1MTYgaWVlZTgwMjExX3N0b3JlX2Fja19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuIFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmxvY2FsLVxcdTAwM2VhY2tfc3RhdHVzX2xvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdFxcdGlmIChpZCBcXHUwMDNlPSAwKSB7XFxuLVxcdFxcdFxcdGluZm9faWQgPSBpZDtcXG4tXFx0XFx0XFx0KmluZm9fZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2VzdGF0dXNfZGF0YSA9IGlkO1xcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2VzdGF0dXNfZGF0YV9pZHIgPSAxO1xcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7XFxuIFxcdFxcdFxcdGlmIChjb29raWUpXFxuIFxcdFxcdFxcdFxcdElFRUU4MDIxMV9TS0JfQ0IoYWNrX3NrYiktXFx1MDAzZWFjay5jb29raWUgPSBjb29raWU7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGtmcmVlX3NrYihhY2tfc2tiKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcbi1cXHRyZXR1cm4gaW5mb19pZDtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgaWVlZTgwMjExX3JlbW92ZV9hY2tfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1MTYgaW5mb19pZClcXG4te1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqYWNrX3NrYjtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tXFxuLVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWNrX3N0YXR1c19sb2NrLCBmbGFncyk7XFxuLVxcdGFja19za2IgPSBpZHJfcmVtb3ZlKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWNrX3N0YXR1c19mcmFtZXMsIGluZm9faWQpO1xcbi1cXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZsb2NhbC1cXHUwMDNlYWNrX3N0YXR1c19sb2NrLCBmbGFncyk7XFxuLVxcbi1cXHRrZnJlZV9za2IoYWNrX3NrYik7XFxuIH1cXG4gXFxuIC8qKlxcbiAgKiBpZWVlODAyMTFfYnVpbGRfaGRyIC0gYnVpbGQgODAyLjExIGhlYWRlciBpbiB0aGUgZ2l2ZW4gZnJhbWVcXG4gICogQHNkYXRhOiB2aXJ0dWFsIGludGVyZmFjZSB0byBidWlsZCB0aGUgaGVhZGVyIGZvclxcbiAgKiBAc2tiOiB0aGUgc2tiIHRvIGJ1aWxkIHRoZSBoZWFkZXIgaW5cXG4tICogQGluZm9fZmxhZ3M6IHNrYiBmbGFncyB0byBzZXRcXG4gICogQHN0YTogdGhlIHN0YXRpb24gcG9pbnRlclxcbi0gKiBAY3RybF9mbGFnczogaW5mbyBjb250cm9sIGZsYWdzIHRvIHNldFxcbi0gKiBAY29va2llOiBjb29raWUgcG9pbnRlciB0byBmaWxsIChpZiBub3QgJU5VTEwpXFxuICAqXFxuICAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIHNrYiB3aXRoIDgwMi4zIGhlYWRlciBhbmQgcmVmb3JtYXRzIHRoZSBoZWFkZXIgdG9cXG4gICogdGhlIGFwcHJvcHJpYXRlIElFRUUgODAyLjExIGhlYWRlciBiYXNlZCBvbiB3aGljaCBpbnRlcmZhY2UgdGhlIHBhY2tldCBpc1xcbiAgKiBiZWluZyB0cmFuc21pdHRlZCBvbi5cXG4gICpcXG4tICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gYWxzbyB0YWtlcyBjYXJlIG9mIHRoZSBUWCBzdGF0dXMgcmVxdWVzdCBhbmRcXG4tICogcG90ZW50aWFsIHVuc2hhcmluZyBvZiB0aGUgU0tCIC0gdGhpcyBuZWVkcyB0byBiZSBpbnRlcmxlYXZlZCB3aXRoIHRoZVxcbi0gKiBoZWFkZXIgYnVpbGRpbmcuXFxuKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFsc28gdGFrZXMgY2FyZSBvZiB0aGUgVFggc3RhdHVzIHJlcXVlc3QuIFRoZSBza2JcXG4rICogbXVzdCBub3QgYmUgc2hhcmVkLCBhbmQgaXRzIFRYIGluZm8gbXVzdCBhbHJlYWR5IGJlIGluaXRpYWxpc2VkIC0gdGhpc1xcbisgKiBmdW5jdGlvbiBvbmx5IGZpbGxzIGluIHdoYXQgaXQgZGV0ZXJtaW5lcyBpdHNlbGYuXFxuICAqXFxuICAqIFRoZSBmdW5jdGlvbiByZXF1aXJlcyB0aGUgcmVhZC1zaWRlIFJDVSBsb2NrIGhlbGRcXG4gICpcXG4gICogUmV0dXJuczogdGhlIChwb3NzaWJseSByZWFsbG9jYXRlZCkgc2tiIG9yIGFuIEVSUl9QVFIoKSBjb2RlXFxuICAqL1xcbiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvX2ZsYWdzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTMyIGN0cmxfZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHU2NCBjb29raWUpXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbiB7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuLVxcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbztcXG4gXFx0aW50IGhlYWRfbmVlZDtcXG4gXFx0dTE2IGV0aGVydHlwZSwgaGRybGVuLCAgbWVzaGhkcmxlbiA9IDA7XFxuIFxcdF9fbGUxNiBmYztcXG5AQCAtMjY2MywxOCArMjY1NSwxOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdGJvb2wgd21lX3N0YSA9IGZhbHNlLCBhdXRob3JpemVkID0gZmFsc2U7XFxuIFxcdGJvb2wgdGRsc19wZWVyO1xcbiBcXHRib29sIG11bHRpY2FzdDtcXG4tXFx0dTE2IGluZm9faWQgPSAwO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY2hhbmN0eF9jb25mID0gTlVMTDtcXG4gXFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcXG4gXFx0aW50IHJldDtcXG4tXFx0dTggbGlua19pZCA9IHUzMl9nZXRfYml0cyhjdHJsX2ZsYWdzLCBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XFxuK1xcdHU4IGxpbmtfaWQgPSB1MzJfZ2V0X2JpdHMoaW5mby1cXHUwMDNlY29udHJvbC5mbGFncyxcXG4rXFx0XFx0XFx0XFx0ICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XFxuIFxcbiBcXHRpZiAoSVNfRVJSKHN0YSkpXFxuIFxcdFxcdHN0YSA9IE5VTEw7XFxuIFxcbiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG4gXFx0aWYgKGxvY2FsLVxcdTAwM2Vmb3JjZV90eF9zdGF0dXMpXFxuLVxcdFxcdGluZm9fZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xcbitcXHRcXHRpbmZvLVxcdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7XFxuICNlbmRpZlxcbiBcXG4gXFx0LyogY29udmVydCBFdGhlcm5ldCBoZWFkZXIgdG8gcHJvcGVyIDgwMi4xMSBoZWFkZXIgKGJhc2VkIG9uXFxuQEAgLTI4MTUsNyArMjgwNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX2hkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0LyogRm9yIGluamVjdGVkIGZyYW1lcywgZmlsbCBSQSByaWdodCBhd2F5IGFzIG5leHRob3AgbG9va3VwXFxuIFxcdFxcdCAqIHdpbGwgYmUgc2tpcHBlZC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICgoY3RybF9mbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9DVFJMX1NLSVBfTVBBVEhfTE9PS1VQKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRpZiAoKGluZm8tXFx1MDAzZWNvbnRyb2wuZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGlzX3plcm9fZXRoZXJfYWRkcihoZHIuYWRkcjEpKVxcbiBcXHRcXHRcXHRtZW1jcHkoaGRyLmFkZHIxLCBza2ItXFx1MDAzZWRhdGEsIEVUSF9BTEVOKTtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTI5NDQsMjEgKzI5MzYsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdGdvdG8gZnJlZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHVubGlrZWx5KCFtdWx0aWNhc3QgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICAoc2tfcmVxdWVzdHNfd2lmaV9zdGF0dXMoc2tiLVxcdTAwM2VzaykgfHxcXG4tXFx0XFx0ICAgICAgY3RybF9mbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUykpKVxcbi1cXHRcXHRpbmZvX2lkID0gaWVlZTgwMjExX3N0b3JlX2Fja19za2IobG9jYWwsIHNrYiwgXFx1MDAyNmluZm9fZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgY29va2llKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIElmIHRoZSBza2IgaXMgc2hhcmVkIHdlIG5lZWQgdG8gb2J0YWluIG91ciBvd24gY29weS5cXG4tXFx0ICovXFxuLVxcdHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpO1xcbi1cXHRpZiAodW5saWtlbHkoIXNrYikpIHtcXG4tXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBmcmVlO1xcbi1cXHR9XFxuLVxcbiBcXHRoZHIuZnJhbWVfY29udHJvbCA9IGZjO1xcbiBcXHRoZHIuZHVyYXRpb25faWQgPSAwO1xcbiBcXHRoZHIuc2VxX2N0cmwgPSAwO1xcbkBAIC0yOTk3LDggKzI5NzQsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdGhlYWRfbmVlZCArPSBsb2NhbC1cXHUwMDNldHhfaGVhZHJvb207XFxuIFxcdFxcdGhlYWRfbmVlZCA9IG1heF90KGludCwgMCwgaGVhZF9uZWVkKTtcXG4gXFx0XFx0aWYgKGllZWU4MDIxMV9za2JfcmVzaXplKHNkYXRhLCBza2IsIGhlYWRfbmVlZCwgRU5DUllQVF9EQVRBKSkge1xcbi1cXHRcXHRcXHRpZWVlODAyMTFfZnJlZV90eHNrYihcXHUwMDI2bG9jYWwtXFx1MDAzZWh3LCBza2IpO1xcbi1cXHRcXHRcXHRza2IgPSBOVUxMO1xcbiBcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiBcXHRcXHRcXHRnb3RvIGZyZWU7XFxuIFxcdFxcdH1cXG5AQCAtMzAyNyw1MCArMzAwMiwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcbiBcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbiBcXG4tXFx0aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG4tXFx0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xcbi1cXG4tXFx0aW5mby1cXHUwMDNlZmxhZ3MgPSBpbmZvX2ZsYWdzO1xcbi1cXHRpZiAoaW5mb19pZCkge1xcbi1cXHRcXHRpbmZvLVxcdTAwM2VzdGF0dXNfZGF0YSA9IGluZm9faWQ7XFxuLVxcdFxcdGluZm8tXFx1MDAzZXN0YXR1c19kYXRhX2lkciA9IDE7XFxuLVxcdH1cXG4gXFx0aW5mby1cXHUwMDNlYmFuZCA9IGJhbmQ7XFxuIFxcbi1cXHRpZiAobGlrZWx5KCFjb29raWUpKSB7XFxuLVxcdFxcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKGxpbmtfaWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IHByZV9jb25mX2xpbmtfaWQ7XFxuLVxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBjdHJsX2ZsYWdzIGFscmVhZHkgaGF2ZSBiZWVuIHNldCBieVxcbi1cXHRcXHQgKiBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KCksIGhlcmVcXG4tXFx0XFx0ICogd2UganVzdCBzYW5pdHkgY2hlY2sgdGhhdFxcbi1cXHRcXHQgKi9cXG4tXFxuLVxcdFxcdHByZV9jb25mX2xpbmtfaWQgPSB1MzJfZ2V0X2JpdHMoY3RybF9mbGFncyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xcbi1cXG4tXFx0XFx0aWYgKHByZV9jb25mX2xpbmtfaWQgIT0gbGlua19pZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgbGlua19pZCAhPSBJRUVFODAyMTFfTElOS19VTlNQRUNJRklFRCkge1xcbi0jaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUdcXG4tXFx0XFx0XFx0bmV0X2luZm9fcmF0ZWxpbWl0ZWQoXFxcIiVzOiBkcm9wcGVkIGZyYW1lIHRvICVwTSB3aXRoIGJhZCBsaW5rIElEIHJlcXVlc3QgKCVkIHZzLiAlZClcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgc2RhdGEtXFx1MDAzZW5hbWUsIGhkci5hZGRyMSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBwcmVfY29uZl9saW5rX2lkLCBsaW5rX2lkKTtcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdGdvdG8gZnJlZTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHRpbmZvLVxcdTAwM2Vjb250cm9sLmZsYWdzID0gY3RybF9mbGFncztcXG4tXFxuK1xcdGluZm8tXFx1MDAzZWNvbnRyb2wuZmxhZ3MgPVxcbitcXHRcXHR1MzJfcmVwbGFjZV9iaXRzKGluZm8tXFx1MDAzZWNvbnRyb2wuZmxhZ3MsIGxpbmtfaWQsXFxuK1xcdFxcdFxcdFxcdCBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XFxuIFxcdHJldHVybiBza2I7XFxuICBmcmVlOlxcbi1cXHRpZiAoaW5mb19pZClcXG4tXFx0XFx0aWVlZTgwMjExX3JlbW92ZV9hY2tfc2tiKGxvY2FsLCBpbmZvX2lkKTtcXG4tXFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdGllZWU4MDIxMV9mcmVlX3R4c2tiKFxcdTAwMjZsb2NhbC1cXHUwMDNlaHcsIHNrYik7XFxuIFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIH1cXG4gXFxuQEAgLTQzNjgsMTMgKzQzMDcsMTQgQEAgRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KTtcXG4gdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0ICB1MzIgaW5mb19mbGFncyxcXG4tXFx0XFx0XFx0XFx0ICB1MzIgY3RybF9mbGFncyxcXG4tXFx0XFx0XFx0XFx0ICB1NjQgY29va2llKVxcbitcXHRcXHRcXHRcXHQgIHUzMiBjdHJsX2ZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbztcXG4gXFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XFxuIFxcdHN0cnVjdCBza19idWZmICpuZXh0O1xcbitcXHRib29sIGdyb3VwX2FkZHJlc3NlZDtcXG4gXFx0aW50IGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkgfHwgc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBFVEhfSExFTikpIHtcXG5AQCAtNDM5NCw2ICs0MzM0LDcgQEAgdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChpZWVlODAyMTFfbG9va3VwX3JhX3N0YShzZGF0YSwgc2tiLCBcXHUwMDI2c3RhKSlcXG4gXFx0XFx0Z290byBvdXRfZnJlZTtcXG4gXFxuK1xcdGdyb3VwX2FkZHJlc3NlZCA9IElTX0VSUihzdGEpO1xcbiBcXHRpZiAoSVNfRVJSKHN0YSkpXFxuIFxcdFxcdHN0YSA9IE5VTEw7XFxuIFxcbkBAIC00NDI2LDggKzQzNjcsMjIgQEAgdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IHNkYXRhLVxcdTAwM2Vjb250cm9sX3BvcnRfcHJvdG9jb2wpXFxuIFxcdFxcdFxcdGN0cmxfZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUUkxfU0tJUF9NUEFUSF9MT09LVVA7XFxuIFxcbi1cXHRcXHRza2IgPSBpZWVlODAyMTFfYnVpbGRfaGRyKHNkYXRhLCBza2IsIGluZm9fZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdFxcdCAgc3RhLCBjdHJsX2ZsYWdzLCBjb29raWUpO1xcbitcXHRcXHRza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKSB7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYl9saXN0KG5leHQpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG4rXFx0XFx0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xcbitcXHRcXHRpbmZvLVxcdTAwM2VmbGFncyA9IGluZm9fZmxhZ3M7XFxuK1xcdFxcdGluZm8tXFx1MDAzZWNvbnRyb2wuZmxhZ3MgPSBjdHJsX2ZsYWdzO1xcbitcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFncm91cF9hZGRyZXNzZWQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICBza19yZXF1ZXN0c193aWZpX3N0YXR1cyhza2ItXFx1MDAzZXNrKSkpXFxuK1xcdFxcdFxcdGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKGxvY2FsLCBza2IsIDApO1xcbitcXG4rXFx0XFx0c2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBzdGEpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4gXFx0XFx0XFx0a2ZyZWVfc2tiX2xpc3QobmV4dCk7XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbkBAIC00NTY0LDcgKzQ1MTksNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eF9vbmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKGxpbmtfaWQsIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcXG4tXFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChvdXQsIHNkYXRhLVxcdTAwM2VkZXYsIDAsIGN0cmxfZmxhZ3MsIDApO1xcbitcXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KG91dCwgc2RhdGEtXFx1MDAzZWRldiwgMCwgY3RybF9mbGFncyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuQEAgLTQ1NzksNyArNDUzNCw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKF9fZmZzKGxpbmtzKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xcbiBcXG4tXFx0XFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIHNkYXRhLVxcdTAwM2VkZXYsIDAsIGN0cmxfZmxhZ3MsIDApO1xcbitcXHRcXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2RhdGEtXFx1MDAzZWRldiwgMCwgY3RybF9mbGFncyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtNDYyMCw4ICs0NTc1LDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0aWVlZTgwMjExX2NvbnZlcnRfdG9fdW5pY2FzdChza2IsIGRldiwgXFx1MDAyNnF1ZXVlKTtcXG4gXFx0XFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFxcdTAwMjZxdWV1ZSkpKVxcbiBcXHRcXHRcXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCAwLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAwKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpO1xcbiBcXHR9IGVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFxcdTAwMjZzZGF0YS1cXHUwMDNldmlmKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAoKHNkYXRhLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgICFpZWVlODAyMTFfaHdfY2hlY2soXFx1MDAyNnNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcsIE1MT19NQ0FTVF9NVUxUSV9MSU5LX1RYKSkgfHxcXG5AQCAtNDYzMSw4ICs0NTg1LDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0fSBlbHNlIHtcXG4gbm9ybWFsOlxcbiBcXHRcXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCAwLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAwKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbkBAIC00NzMwLDggKzQ2ODMsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfODAyM194bWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRpZiAoIXRlc3RfYml0KEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCwgXFx1MDAyNnRpZF90eC1cXHUwMDNlc3RhdGUpKSB7XFxuIFxcdFxcdFxcdC8qIGZhbGwgYmFjayB0byBub24tb2ZmbG9hZCBzbG93IHBhdGggKi9cXG4gXFx0XFx0XFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIGRldiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgMCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDKTtcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC00NzY1LDEyICs0NzE3LDggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0XFx0bWVtY3B5KElFRUU4MDIxMV9TS0JfQ0Ioc2VnKSwgaW5mbywgc2l6ZW9mKCppbmZvKSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICh1bmxpa2VseShza19yZXF1ZXN0c193aWZpX3N0YXR1cyhza2ItXFx1MDAzZXNrKSkpIHtcXG4tXFx0XFx0aW5mby1cXHUwMDNlc3RhdHVzX2RhdGEgPSBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmluZm8tXFx1MDAzZWZsYWdzLCAwKTtcXG4tXFx0XFx0aWYgKGluZm8tXFx1MDAzZXN0YXR1c19kYXRhKVxcbi1cXHRcXHRcXHRpbmZvLVxcdTAwM2VzdGF0dXNfZGF0YV9pZHIgPSAxO1xcbi1cXHR9XFxuK1xcdGlmICh1bmxpa2VseShza19yZXF1ZXN0c193aWZpX3N0YXR1cyhza2ItXFx1MDAzZXNrKSkpXFxuK1xcdFxcdGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKGxvY2FsLCBza2IsIDApO1xcbiBcXG4gXFx0ZGV2X3N3X25ldHN0YXRzX3R4X2FkZChkZXYsIHNrYnMsIGxlbik7XFxuIFxcbkBAIC00ODk5LDYgKzQ4NDcsNyBAQCBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0LmxvY2FsID0gc2RhdGEtXFx1MDAzZWxvY2FsLFxcbiBcXHRcXHQuc2RhdGEgPSBzZGF0YSxcXG4gXFx0fTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvO1xcbiBcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG5AQCAtNDkwOSw4ICs0ODU4LDEyIEBAIGllZWU4MDIxMV9idWlsZF9kYXRhX3RlbXBsYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0c2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBpbmZvX2ZsYWdzLCBzdGEsXFxuLVxcdFxcdFxcdFxcdCAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLCAwKTtcXG4rXFx0aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG4rXFx0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xcbitcXHRpbmZvLVxcdTAwM2VmbGFncyA9IGluZm9fZmxhZ3M7XFxuK1xcdGluZm8tXFx1MDAzZWNvbnRyb2wuZmxhZ3MgPSBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUM7XFxuK1xcbitcXHRza2IgPSBpZWVlODAyMTFfYnVpbGRfaGRyKHNkYXRhLCBza2IsIHN0YSk7XFxuIFxcdGlmIChJU19FUlIoc2tiKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbkBAIC02NTMwLDYgKzY0ODMsOCBAQCBpbnQgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbztcXG4rXFx0Ym9vbCBncm91cF9hZGRyZXNzZWQ7XFxuIFxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXHRzdHJ1Y3QgZXRoaGRyICplaGRyO1xcbkBAIC02NTU0LDkgKzY1MDksNiBAQCBpbnQgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRpZiAodW5lbmNyeXB0ZWQpXFxuIFxcdFxcdGZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7XFxuIFxcbi1cXHRpZiAoY29va2llKVxcbi1cXHRcXHRjdHJsX2ZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUztcXG4tXFxuIFxcdGZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9OTDgwMjExX0ZSQU1FX1RYO1xcbiBcXG4gXFx0c2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC1cXHUwMDNlaHcuZXh0cmFfdHhfaGVhZHJvb20gK1xcbkBAIC02NTczLDE1ICs2NTI1LDExIEBAIGludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcbiBcXHQvKiB3ZSBtYXkgb3ZlcnJpZGUgdGhlIFNBIGZvciBNTE8gU1RBIGxhdGVyICovXFxuIFxcdGlmIChsaW5rX2lkIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRjdHJsX2ZsYWdzIHw9IHUzMl9lbmNvZGVfYml0cyhJRUVFODAyMTFfTElOS19VTlNQRUNJRklFRCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xcbitcXHRcXHRsaW5rX2lkID0gSUVFRTgwMjExX0xJTktfVU5TUEVDSUZJRUQ7XFxuIFxcdFxcdG1lbWNweShlaGRyLVxcdTAwM2VoX3NvdXJjZSwgc2RhdGEtXFx1MDAzZXZpZi5hZGRyLCBFVEhfQUxFTik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmxpbmtfY29uZjtcXG4gXFxuLVxcdFxcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKGxpbmtfaWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcXG4tXFxuIFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0XFx0bGlua19jb25mID0gcmN1X2RlcmVmZXJlbmNlKHNkYXRhLVxcdTAwM2V2aWYubGlua19jb25mW2xpbmtfaWRdKTtcXG4gXFx0XFx0aWYgKCFsaW5rX2NvbmYpIHtcXG5AQCAtNjYwMCw5ICs2NTQ4LDYgQEAgaW50IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuIFxcbi1cXHRpZiAobG9jYWwtXFx1MDAzZWh3LnF1ZXVlcyBcXHUwMDNjIElFRUU4MDIxMV9OVU1fQUNTKVxcbi1cXHRcXHRnb3RvIHN0YXJ0X3htaXQ7XFxuLVxcbiBcXHQvKiB1cGRhdGUgUW9TIGhlYWRlciB0byBwcmlvcml0aXplIGNvbnRyb2wgcG9ydCBmcmFtZXMgaWYgcG9zc2libGUsXFxuIFxcdCAqIHByaW9yaXRpemF0aW9uIGFsc28gaGFwcGVucyBmb3IgY29udHJvbCBwb3J0IGZyYW1lcyBzZW5kIG92ZXJcXG4gXFx0ICogQUZfUEFDS0VUXFxuQEAgLTY2MTUsMjQgKzY1NjAsNDggQEAgaW50IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFJU19FUlIoc3RhKSkge1xcbi1cXHRcXHR1MTYgcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKHNkYXRhLCBzdGEsIHNrYik7XFxuK1xcdGdyb3VwX2FkZHJlc3NlZCA9IElTX0VSUihzdGEpO1xcbitcXHRpZiAoSVNfRVJSKHN0YSkpXFxuK1xcdFxcdHN0YSA9IE5VTEw7XFxuIFxcbi1cXHRcXHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBxdWV1ZSk7XFxuK1xcdHNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc2RhdGEsIHN0YSwgc2tiKSk7XFxuIFxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBmb3IgTUxPIFNUQSwgdGhlIFNBIHNob3VsZCBiZSB0aGUgQVAgTUxEIGFkZHJlc3MsIGJ1dFxcbi1cXHRcXHQgKiB0aGUgbGluayBJRCBoYXMgYmVlbiBzZWxlY3RlZCBhbHJlYWR5XFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoc3RhIFxcdTAwMjZcXHUwMDI2IHN0YS1cXHUwMDNlc3RhLm1sbylcXG4tXFx0XFx0XFx0bWVtY3B5KGVoZHItXFx1MDAzZWhfc291cmNlLCBzZGF0YS1cXHUwMDNldmlmLmFkZHIsIEVUSF9BTEVOKTtcXG4rXFx0LypcXG4rXFx0ICogZm9yIE1MTyBTVEEsIHRoZSBTQSBzaG91bGQgYmUgdGhlIEFQIE1MRCBhZGRyZXNzLCBidXRcXG4rXFx0ICogdGhlIGxpbmsgSUQgaGFzIGJlZW4gc2VsZWN0ZWQgYWxyZWFkeVxcbitcXHQgKi9cXG4rXFx0aWYgKHN0YSBcXHUwMDI2XFx1MDAyNiBzdGEtXFx1MDAzZXN0YS5tbG8pXFxuK1xcdFxcdG1lbWNweShlaGRyLVxcdTAwM2VoX3NvdXJjZSwgc2RhdGEtXFx1MDAzZXZpZi5hZGRyLCBFVEhfQUxFTik7XFxuK1xcbitcXHRpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xcbitcXHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XFxuK1xcdGluZm8tXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuK1xcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKGxpbmtfaWQsIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcXG4rXFx0aW5mby1cXHUwMDNlY29udHJvbC5mbGFncyA9IGN0cmxfZmxhZ3M7XFxuK1xcbitcXHRpZiAoIWdyb3VwX2FkZHJlc3NlZClcXG4rXFx0XFx0aWVlZTgwMjExX3N0b3JlX2Fja19za2IobG9jYWwsIHNrYiwgY29va2llKTtcXG4rXFxuK1xcdHNrYiA9IGllZWU4MDIxMV9idWlsZF9oZHIoc2RhdGEsIHNrYiwgc3RhKTtcXG4rXFx0aWYgKElTX0VSUihza2IpKSB7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihza2IpO1xcbiBcXHR9XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4tc3RhcnRfeG1pdDpcXG4rXFx0aWYgKGxpbmtfaWQgIT0gdTMyX2dldF9iaXRzKGluZm8tXFx1MDAzZWNvbnRyb2wuZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSykpIHtcXG4rXFx0XFx0aWVlZTgwMjExX2ZyZWVfdHhza2IoXFx1MDAyNmxvY2FsLVxcdTAwM2Vodywgc2tiKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRkZXZfc3dfbmV0c3RhdHNfdHhfYWRkKGRldiwgMSwgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHRpZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KGxvY2FsLCBza2ItXFx1MDAzZWxlbik7XFxuK1xcbiBcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuLVxcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBza2ItXFx1MDAzZWRldiwgZmxhZ3MsIGN0cmxfZmxhZ3MsIGNvb2tpZSk7XFxuK1xcdGllZWU4MDIxMV94bWl0KHNkYXRhLCBzdGEsIHNrYik7XFxuIFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTY2NjAsOCArNjYyOSw3IEBAIGludCBpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcbiBcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuIFxcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBza2ItXFx1MDAzZWRldiwgMCxcXG4tXFx0XFx0XFx0XFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUCxcXG4tXFx0XFx0XFx0XFx0ICAgICAwKTtcXG4rXFx0XFx0XFx0XFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUCk7XFxuIFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjAzOjQ4LjgxNTE0MjA0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg5MjgwMTg3ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiLFxuICAgIFwiTUFDODAyMTFfTUVTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV90eF9jb250cm9sX3BvcnRcIixcbiAgICBcImllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXRcIixcbiAgICBcImllZWU4MDIxMV9wcm9iZV9tZXNoX2xpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1hYzgwMjExIHRyYW5zbWlzc2lvbiBsb2dpYywgaW5jbHVkaW5nIFRYIGluZm8gaW5pdGlhbGl6YXRpb24sIGhlYWRlciBidWlsZGluZywgYW5kIGNvbnRyb2wgcG9ydCB0cmFuc21pc3Npb24uIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB2aWEgdmlydHVhbGl6ZWQgd2lyZWxlc3MgaW50ZXJmYWNlcyAobWFjODAyMTFfaHdzaW0pLiBXZSBzaG91bGQgZm9jdXMgZnV6emluZyBvbiB0aGUgbW9kaWZpZWQgZW50cnkgcG9pbnRzIGxpa2UgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIGFuZCBgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldGAuIGBNQUM4MDIxMV9NRVNIYCBpcyBuZWVkZWQgdG8gcmVhY2ggdGhlIG1vZGlmaWVkIG1lc2gtc3BlY2lmaWMgbG9naWMgaW4gYGllZWU4MDIxMV9sb29rdXBfcmFfc3RhYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWQxM2JkMWFhYzIzYzA0ZGNjMjg3YmYyMzY1MDlmYzY0ZTg4YTAwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTk6MDM6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5pbmRleCA1NzYxZTk2MjE0OTE0Li5mNGFjOTQ1YjU1MDg4IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5AQCAtMjIzMyw4ICsyMjMzLDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyMyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICB1MzIgaW5mb19mbGFncyxcbi1cdFx0XHRcdCAgdTMyIGN0cmxfZmxhZ3MsXG4tXHRcdFx0XHQgIHU2NCBjb29raWUpO1xuK1x0XHRcdFx0ICB1MzIgY3RybF9mbGFncyk7XG4gc3RydWN0IHNrX2J1ZmYgKlxuIGllZWU4MDIxMV9idWlsZF9kYXRhX3RlbXBsYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvX2ZsYWdzKTtcbkBAIC0yNDcyLDExICsyNDcxLDYgQEAgc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yZXF1aXJlX2VuY3J5cHRlZF9hc3NvYyhfX2xlMTYgZmMsXG4gXHRyZXR1cm4gc3RhIFx1MDAyNlx1MDAyNiBzdGEtXHUwMDNlc3RhLmVwcF9wZWVyIFx1MDAyNlx1MDAyNiBpZWVlODAyMTFfaXNfYXNzb2MoZmMpO1xuIH1cbiBcbi0vKiBzdGFfb3V0IG5lZWRzIHRvIGJlIGNoZWNrZWQgZm9yIEVSUl9QVFIoKSBiZWZvcmUgdXNpbmcgKi9cbi1pbnQgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0ICAgIHN0cnVjdCBzdGFfaW5mbyAqKnN0YV9vdXQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgdm9pZFxuIGllZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90ZGxzLmMgYi9uZXQvbWFjODAyMTEvdGRscy5jXG5pbmRleCBkYzJmNjYyZmU0YzQ2Li40ZjRjYWU5ZmQyNzRjIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3RkbHMuY1xuKysrIGIvbmV0L21hYzgwMjExL3RkbHMuY1xuQEAgLTExMjEsNyArMTEyMSw3IEBAIGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdC8qIGRpc2FibGUgYm90dG9tIGhhbHZlcyB3aGVuIGVudGVyaW5nIHRoZSBUeCBwYXRoICovXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCBmbGFncyxcbi1cdFx0XHRcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLCAwKTtcbitcdFx0XHRcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDKTtcbiBcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXG5pbmRleCAzYTFlMmM5ZTE1NjVlLi45MTFjNGI1NzAwZDA5IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3R4LmNcbisrKyBiL25ldC9tYWM4MDIxMS90eC5jXG5AQCAtMjUwNCw5ICsyNTA0LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfaXNfdGRsc19zZXR1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0ICAgICAgIHNrYi1cdTAwM2VkYXRhWzE0XSA9PSBXTEFOX1RETFNfU05BUF9SRlRZUEU7XG4gfVxuIFxuLWludCBpZWVlODAyMTFfbG9va3VwX3JhX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgICAgc3RydWN0IHN0YV9pbmZvICoqc3RhX291dClcbisvKlxuKyAqIFJldHVybnMgYW4gZXJyb3IgaWYgdGhlIGZyYW1lIHNob3VsZCBiZSBkcm9wcGVkLCBvdGhlcndpc2VcbisgKiB0aGUgKnN0YV9vdXQgcG9pbnRlciBpcyBmaWxsZWQ6XG4rICogIC0gdmFsaWQgc3RhIHBvaW50ZXI6IGZyYW1lIGdvZXMgdG8gdGhhdCBzdGF0aW9uXG4rICogIC0gTlVMTDogZnJhbWUgd2lsbCBiZSB1bmljYXN0IHRvIGEgeWV0IHVua25vd24gc3RhdGlvblxuKyAqICAtIEVSUl9QVFIoLUVOT0VOVCk6IGZyYW1lIHdpbGwgYmUgZ3JvdXAgYWRkcmVzc2VkXG4rICovXG4rc3RhdGljIGludCBpZWVlODAyMTFfbG9va3VwX3JhX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbitcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgc3RhX2luZm8gKipzdGFfb3V0KVxuIHtcbiBcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuIFxuQEAgLTI1MzEsNiArMjUzOCwxMCBAQCBpbnQgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdGJyZWFrO1xuICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxuIFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxuK1x0XHRpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoc2tiLVx1MDAzZWRhdGEpKSB7XG4rXHRcdFx0KnN0YV9vdXQgPSBFUlJfUFRSKC1FTk9FTlQpO1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4gXHRcdC8qIGRldGVybWluZWQgbXVjaCBsYXRlciAqL1xuIFx0XHQqc3RhX291dCA9IE5VTEw7XG4gXHRcdHJldHVybiAwO1xuQEAgLTI1NzMsMTcgKzI1ODQsMTUgQEAgaW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdCpzdGFfb3V0ID0gc3RhID86IEVSUl9QVFIoLUVOT0VOVCk7XG4rXHQqc3RhX291dCA9IHN0YTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdTE2IGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgIHUzMiAqaW5mb19mbGFncyxcbi1cdFx0XHRcdCAgIHU2NCBjb29raWUpXG4rc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0b3JlX2Fja19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4rXHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IGNvb2tpZSlcbiB7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqYWNrX3NrYjtcbi1cdHUxNiBpbmZvX2lkID0gMDtcbiBcbiBcdGlmIChza2ItXHUwMDNlc2spXG4gXHRcdGFja19za2IgPSBza2JfY2xvbmVfc2soc2tiKTtcbkBAIC0yNjAwLDU4ICsyNjA5LDQxIEBAIHN0YXRpYyB1MTYgaWVlZTgwMjExX3N0b3JlX2Fja19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bG9jYWwtXHUwMDNlYWNrX3N0YXR1c19sb2NrLCBmbGFncyk7XG4gXG4gXHRcdGlmIChpZCBcdTAwM2U9IDApIHtcbi1cdFx0XHRpbmZvX2lkID0gaWQ7XG4tXHRcdFx0KmluZm9fZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xuK1x0XHRcdGluZm8tXHUwMDNlc3RhdHVzX2RhdGEgPSBpZDtcbitcdFx0XHRpbmZvLVx1MDAzZXN0YXR1c19kYXRhX2lkciA9IDE7XG4rXHRcdFx0aW5mby1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7XG4gXHRcdFx0aWYgKGNvb2tpZSlcbiBcdFx0XHRcdElFRUU4MDIxMV9TS0JfQ0IoYWNrX3NrYiktXHUwMDNlYWNrLmNvb2tpZSA9IGNvb2tpZTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRrZnJlZV9za2IoYWNrX3NrYik7XG4gXHRcdH1cbiBcdH1cbi1cbi1cdHJldHVybiBpbmZvX2lkO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcmVtb3ZlX2Fja19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHUxNiBpbmZvX2lkKVxuLXtcbi1cdHN0cnVjdCBza19idWZmICphY2tfc2tiO1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmxvY2FsLVx1MDAzZWFja19zdGF0dXNfbG9jaywgZmxhZ3MpO1xuLVx0YWNrX3NrYiA9IGlkcl9yZW1vdmUoXHUwMDI2bG9jYWwtXHUwMDNlYWNrX3N0YXR1c19mcmFtZXMsIGluZm9faWQpO1xuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZsb2NhbC1cdTAwM2VhY2tfc3RhdHVzX2xvY2ssIGZsYWdzKTtcbi1cbi1cdGtmcmVlX3NrYihhY2tfc2tiKTtcbiB9XG4gXG4gLyoqXG4gICogaWVlZTgwMjExX2J1aWxkX2hkciAtIGJ1aWxkIDgwMi4xMSBoZWFkZXIgaW4gdGhlIGdpdmVuIGZyYW1lXG4gICogQHNkYXRhOiB2aXJ0dWFsIGludGVyZmFjZSB0byBidWlsZCB0aGUgaGVhZGVyIGZvclxuICAqIEBza2I6IHRoZSBza2IgdG8gYnVpbGQgdGhlIGhlYWRlciBpblxuLSAqIEBpbmZvX2ZsYWdzOiBza2IgZmxhZ3MgdG8gc2V0XG4gICogQHN0YTogdGhlIHN0YXRpb24gcG9pbnRlclxuLSAqIEBjdHJsX2ZsYWdzOiBpbmZvIGNvbnRyb2wgZmxhZ3MgdG8gc2V0XG4tICogQGNvb2tpZTogY29va2llIHBvaW50ZXIgdG8gZmlsbCAoaWYgbm90ICVOVUxMKVxuICAqXG4gICogVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgc2tiIHdpdGggODAyLjMgaGVhZGVyIGFuZCByZWZvcm1hdHMgdGhlIGhlYWRlciB0b1xuICAqIHRoZSBhcHByb3ByaWF0ZSBJRUVFIDgwMi4xMSBoZWFkZXIgYmFzZWQgb24gd2hpY2ggaW50ZXJmYWNlIHRoZSBwYWNrZXQgaXNcbiAgKiBiZWluZyB0cmFuc21pdHRlZCBvbi5cbiAgKlxuLSAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFsc28gdGFrZXMgY2FyZSBvZiB0aGUgVFggc3RhdHVzIHJlcXVlc3QgYW5kXG4tICogcG90ZW50aWFsIHVuc2hhcmluZyBvZiB0aGUgU0tCIC0gdGhpcyBuZWVkcyB0byBiZSBpbnRlcmxlYXZlZCB3aXRoIHRoZVxuLSAqIGhlYWRlciBidWlsZGluZy5cbisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBhbHNvIHRha2VzIGNhcmUgb2YgdGhlIFRYIHN0YXR1cyByZXF1ZXN0LiBUaGUgc2tiXG4rICogbXVzdCBub3QgYmUgc2hhcmVkLCBhbmQgaXRzIFRYIGluZm8gbXVzdCBhbHJlYWR5IGJlIGluaXRpYWxpc2VkIC0gdGhpc1xuKyAqIGZ1bmN0aW9uIG9ubHkgZmlsbHMgaW4gd2hhdCBpdCBkZXRlcm1pbmVzIGl0c2VsZi5cbiAgKlxuICAqIFRoZSBmdW5jdGlvbiByZXF1aXJlcyB0aGUgcmVhZC1zaWRlIFJDVSBsb2NrIGhlbGRcbiAgKlxuICAqIFJldHVybnM6IHRoZSAocG9zc2libHkgcmVhbGxvY2F0ZWQpIHNrYiBvciBhbiBFUlJfUFRSKCkgY29kZVxuICAqL1xuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX2hkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm9fZmxhZ3MsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MzIgY3RybF9mbGFncyxcbi1cdFx0XHRcdFx0ICAgdTY0IGNvb2tpZSlcbitcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0ICAgc3RydWN0IHN0YV9pbmZvICpzdGEpXG4ge1xuK1x0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbi1cdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbztcbiBcdGludCBoZWFkX25lZWQ7XG4gXHR1MTYgZXRoZXJ0eXBlLCBoZHJsZW4sICBtZXNoaGRybGVuID0gMDtcbiBcdF9fbGUxNiBmYztcbkBAIC0yNjYzLDE4ICsyNjU1LDE4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX2hkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdGJvb2wgd21lX3N0YSA9IGZhbHNlLCBhdXRob3JpemVkID0gZmFsc2U7XG4gXHRib29sIHRkbHNfcGVlcjtcbiBcdGJvb2wgbXVsdGljYXN0O1xuLVx0dTE2IGluZm9faWQgPSAwO1xuIFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZiA9IE5VTEw7XG4gXHRlbnVtIG5sODAyMTFfYmFuZCBiYW5kO1xuIFx0aW50IHJldDtcbi1cdHU4IGxpbmtfaWQgPSB1MzJfZ2V0X2JpdHMoY3RybF9mbGFncywgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xuK1x0dTggbGlua19pZCA9IHUzMl9nZXRfYml0cyhpbmZvLVx1MDAzZWNvbnRyb2wuZmxhZ3MsXG4rXHRcdFx0XHQgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcbiBcbiBcdGlmIChJU19FUlIoc3RhKSlcbiBcdFx0c3RhID0gTlVMTDtcbiBcbiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbiBcdGlmIChsb2NhbC1cdTAwM2Vmb3JjZV90eF9zdGF0dXMpXG4tXHRcdGluZm9fZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xuK1x0XHRpbmZvLVx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUztcbiAjZW5kaWZcbiBcbiBcdC8qIGNvbnZlcnQgRXRoZXJuZXQgaGVhZGVyIHRvIHByb3BlciA4MDIuMTEgaGVhZGVyIChiYXNlZCBvblxuQEAgLTI4MTUsNyArMjgwNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX2hkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0LyogRm9yIGluamVjdGVkIGZyYW1lcywgZmlsbCBSQSByaWdodCBhd2F5IGFzIG5leHRob3AgbG9va3VwXG4gXHRcdCAqIHdpbGwgYmUgc2tpcHBlZC5cbiBcdFx0ICovXG4tXHRcdGlmICgoY3RybF9mbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUUkxfU0tJUF9NUEFUSF9MT09LVVApIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoKGluZm8tXHUwMDNlY29udHJvbC5mbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUUkxfU0tJUF9NUEFUSF9MT09LVVApIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgaXNfemVyb19ldGhlcl9hZGRyKGhkci5hZGRyMSkpXG4gXHRcdFx0bWVtY3B5KGhkci5hZGRyMSwgc2tiLVx1MDAzZWRhdGEsIEVUSF9BTEVOKTtcbiBcdFx0YnJlYWs7XG5AQCAtMjk0NCwyMSArMjkzNiw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX2hkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0Z290byBmcmVlO1xuIFx0fVxuIFxuLVx0aWYgKHVubGlrZWx5KCFtdWx0aWNhc3QgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgKHNrX3JlcXVlc3RzX3dpZmlfc3RhdHVzKHNrYi1cdTAwM2VzaykgfHxcbi1cdFx0ICAgICAgY3RybF9mbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTKSkpXG4tXHRcdGluZm9faWQgPSBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLCBcdTAwMjZpbmZvX2ZsYWdzLFxuLVx0XHRcdFx0XHRcdCAgY29va2llKTtcbi1cbi1cdC8qXG4tXHQgKiBJZiB0aGUgc2tiIGlzIHNoYXJlZCB3ZSBuZWVkIHRvIG9idGFpbiBvdXIgb3duIGNvcHkuXG4tXHQgKi9cbi1cdHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKHVubGlrZWx5KCFza2IpKSB7XG4tXHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdGdvdG8gZnJlZTtcbi1cdH1cbi1cbiBcdGhkci5mcmFtZV9jb250cm9sID0gZmM7XG4gXHRoZHIuZHVyYXRpb25faWQgPSAwO1xuIFx0aGRyLnNlcV9jdHJsID0gMDtcbkBAIC0yOTk3LDggKzI5NzQsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdGhlYWRfbmVlZCArPSBsb2NhbC1cdTAwM2V0eF9oZWFkcm9vbTtcbiBcdFx0aGVhZF9uZWVkID0gbWF4X3QoaW50LCAwLCBoZWFkX25lZWQpO1xuIFx0XHRpZiAoaWVlZTgwMjExX3NrYl9yZXNpemUoc2RhdGEsIHNrYiwgaGVhZF9uZWVkLCBFTkNSWVBUX0RBVEEpKSB7XG4tXHRcdFx0aWVlZTgwMjExX2ZyZWVfdHhza2IoXHUwMDI2bG9jYWwtXHUwMDNlaHcsIHNrYik7XG4tXHRcdFx0c2tiID0gTlVMTDtcbiBcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZnJlZTtcbiBcdFx0fVxuQEAgLTMwMjcsNTAgKzMwMDIsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfaGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFxuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcbi1cdGluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4tXHRtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7XG4tXG4tXHRpbmZvLVx1MDAzZWZsYWdzID0gaW5mb19mbGFncztcbi1cdGlmIChpbmZvX2lkKSB7XG4tXHRcdGluZm8tXHUwMDNlc3RhdHVzX2RhdGEgPSBpbmZvX2lkO1xuLVx0XHRpbmZvLVx1MDAzZXN0YXR1c19kYXRhX2lkciA9IDE7XG4tXHR9XG4gXHRpbmZvLVx1MDAzZWJhbmQgPSBiYW5kO1xuIFxuLVx0aWYgKGxpa2VseSghY29va2llKSkge1xuLVx0XHRjdHJsX2ZsYWdzIHw9IHUzMl9lbmNvZGVfYml0cyhsaW5rX2lkLFxuLVx0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4tXHR9IGVsc2Uge1xuLVx0XHR1bnNpZ25lZCBpbnQgcHJlX2NvbmZfbGlua19pZDtcbi1cbi1cdFx0Lypcbi1cdFx0ICogY3RybF9mbGFncyBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgYnlcbi1cdFx0ICogaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydCgpLCBoZXJlXG4tXHRcdCAqIHdlIGp1c3Qgc2FuaXR5IGNoZWNrIHRoYXRcbi1cdFx0ICovXG4tXG4tXHRcdHByZV9jb25mX2xpbmtfaWQgPSB1MzJfZ2V0X2JpdHMoY3RybF9mbGFncyxcbi1cdFx0XHRcdFx0XHRJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4tXG4tXHRcdGlmIChwcmVfY29uZl9saW5rX2lkICE9IGxpbmtfaWQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBsaW5rX2lkICE9IElFRUU4MDIxMV9MSU5LX1VOU1BFQ0lGSUVEKSB7XG4tI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG4tXHRcdFx0bmV0X2luZm9fcmF0ZWxpbWl0ZWQoXCIlczogZHJvcHBlZCBmcmFtZSB0byAlcE0gd2l0aCBiYWQgbGluayBJRCByZXF1ZXN0ICglZCB2cy4gJWQpXFxuXCIsXG4tXHRcdFx0XHRcdCAgICAgc2RhdGEtXHUwMDNlbmFtZSwgaGRyLmFkZHIxLFxuLVx0XHRcdFx0XHQgICAgIHByZV9jb25mX2xpbmtfaWQsIGxpbmtfaWQpO1xuLSNlbmRpZlxuLVx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0Z290byBmcmVlO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHRpbmZvLVx1MDAzZWNvbnRyb2wuZmxhZ3MgPSBjdHJsX2ZsYWdzO1xuLVxuK1x0aW5mby1cdTAwM2Vjb250cm9sLmZsYWdzID1cbitcdFx0dTMyX3JlcGxhY2VfYml0cyhpbmZvLVx1MDAzZWNvbnRyb2wuZmxhZ3MsIGxpbmtfaWQsXG4rXHRcdFx0XHQgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xuIFx0cmV0dXJuIHNrYjtcbiAgZnJlZTpcbi1cdGlmIChpbmZvX2lkKVxuLVx0XHRpZWVlODAyMTFfcmVtb3ZlX2Fja19za2IobG9jYWwsIGluZm9faWQpO1xuLVx0a2ZyZWVfc2tiKHNrYik7XG4rXHRpZWVlODAyMTFfZnJlZV90eHNrYihcdTAwMjZsb2NhbC1cdTAwM2Vodywgc2tiKTtcbiBcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gfVxuIFxuQEAgLTQzNjgsMTMgKzQzMDcsMTQgQEAgRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KTtcbiB2b2lkIF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgdTMyIGluZm9fZmxhZ3MsXG4tXHRcdFx0XHQgIHUzMiBjdHJsX2ZsYWdzLFxuLVx0XHRcdFx0ICB1NjQgY29va2llKVxuK1x0XHRcdFx0ICB1MzIgY3RybF9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuK1x0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvO1xuIFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqbmV4dDtcbitcdGJvb2wgZ3JvdXBfYWRkcmVzc2VkO1xuIFx0aW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXG4gXHRpZiAodW5saWtlbHkoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSB8fCBza2ItXHUwMDNlbGVuIFx1MDAzYyBFVEhfSExFTikpIHtcbkBAIC00Mzk0LDYgKzQzMzQsNyBAQCB2b2lkIF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChpZWVlODAyMTFfbG9va3VwX3JhX3N0YShzZGF0YSwgc2tiLCBcdTAwMjZzdGEpKVxuIFx0XHRnb3RvIG91dF9mcmVlO1xuIFxuK1x0Z3JvdXBfYWRkcmVzc2VkID0gSVNfRVJSKHN0YSk7XG4gXHRpZiAoSVNfRVJSKHN0YSkpXG4gXHRcdHN0YSA9IE5VTEw7XG4gXG5AQCAtNDQyNiw4ICs0MzY3LDIyIEBAIHZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IHNkYXRhLVx1MDAzZWNvbnRyb2xfcG9ydF9wcm90b2NvbClcbiBcdFx0XHRjdHJsX2ZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVFJMX1NLSVBfTVBBVEhfTE9PS1VQO1xuIFxuLVx0XHRza2IgPSBpZWVlODAyMTFfYnVpbGRfaGRyKHNkYXRhLCBza2IsIGluZm9fZmxhZ3MsXG4tXHRcdFx0XHRcdCAgc3RhLCBjdHJsX2ZsYWdzLCBjb29raWUpO1xuK1x0XHRza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTtcbitcdFx0aWYgKHVubGlrZWx5KCFza2IpKSB7XG4rXHRcdFx0a2ZyZWVfc2tiX2xpc3QobmV4dCk7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcbitcdFx0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xuK1x0XHRpbmZvLVx1MDAzZWZsYWdzID0gaW5mb19mbGFncztcbitcdFx0aW5mby1cdTAwM2Vjb250cm9sLmZsYWdzID0gY3RybF9mbGFncztcbitcbitcdFx0aWYgKHVubGlrZWx5KCFncm91cF9hZGRyZXNzZWQgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICBza19yZXF1ZXN0c193aWZpX3N0YXR1cyhza2ItXHUwMDNlc2spKSlcbitcdFx0XHRpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLCAwKTtcbitcbitcdFx0c2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBzdGEpO1xuIFx0XHRpZiAoSVNfRVJSKHNrYikpIHtcbiBcdFx0XHRrZnJlZV9za2JfbGlzdChuZXh0KTtcbiBcdFx0XHRnb3RvIG91dDtcbkBAIC00NTY0LDcgKzQ1MTksNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eF9vbmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdHJldHVybjtcbiBcbiBcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKGxpbmtfaWQsIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcbi1cdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQob3V0LCBzZGF0YS1cdTAwM2VkZXYsIDAsIGN0cmxfZmxhZ3MsIDApO1xuK1x0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChvdXQsIHNkYXRhLVx1MDAzZWRldiwgMCwgY3RybF9mbGFncyk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtNDU3OSw3ICs0NTM0LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX21sb19tdWx0aWNhc3RfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0Y3RybF9mbGFncyB8PSB1MzJfZW5jb2RlX2JpdHMoX19mZnMobGlua3MpLFxuIFx0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4gXG4tXHRcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBzZGF0YS1cdTAwM2VkZXYsIDAsIGN0cmxfZmxhZ3MsIDApO1xuK1x0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2RhdGEtXHUwMDNlZGV2LCAwLCBjdHJsX2ZsYWdzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTQ2MjAsOCArNDU3NSw3IEBAIG5ldGRldl90eF90IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGllZWU4MDIxMV9jb252ZXJ0X3RvX3VuaWNhc3Qoc2tiLCBkZXYsIFx1MDAyNnF1ZXVlKTtcbiBcdFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNnF1ZXVlKSkpXG4gXHRcdFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIGRldiwgMCxcbi1cdFx0XHRcdFx0XHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyxcbi1cdFx0XHRcdFx0XHQgICAgIDApO1xuK1x0XHRcdFx0XHRcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDKTtcbiBcdH0gZWxzZSBpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2c2RhdGEtXHUwMDNldmlmKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgKChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAhaWVlZTgwMjExX2h3X2NoZWNrKFx1MDAyNnNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LCBNTE9fTUNBU1RfTVVMVElfTElOS19UWCkpIHx8XG5AQCAtNDYzMSw4ICs0NTg1LDcgQEAgbmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdH0gZWxzZSB7XG4gbm9ybWFsOlxuIFx0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCAwLFxuLVx0XHRcdFx0XHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyxcbi1cdFx0XHRcdFx0ICAgICAwKTtcbitcdFx0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbkBAIC00NzMwLDggKzQ2ODMsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfODAyM194bWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRpZiAoIXRlc3RfYml0KEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCwgXHUwMDI2dGlkX3R4LVx1MDAzZXN0YXRlKSkge1xuIFx0XHRcdC8qIGZhbGwgYmFjayB0byBub24tb2ZmbG9hZCBzbG93IHBhdGggKi9cbiBcdFx0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCAwLFxuLVx0XHRcdFx0XHRcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLFxuLVx0XHRcdFx0XHRcdCAgICAgMCk7XG4rXHRcdFx0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuQEAgLTQ3NjUsMTIgKzQ3MTcsOCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfODAyM194bWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdG1lbWNweShJRUVFODAyMTFfU0tCX0NCKHNlZyksIGluZm8sIHNpemVvZigqaW5mbykpO1xuIFx0fVxuIFxuLVx0aWYgKHVubGlrZWx5KHNrX3JlcXVlc3RzX3dpZmlfc3RhdHVzKHNrYi1cdTAwM2VzaykpKSB7XG4tXHRcdGluZm8tXHUwMDNlc3RhdHVzX2RhdGEgPSBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLFxuLVx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmluZm8tXHUwMDNlZmxhZ3MsIDApO1xuLVx0XHRpZiAoaW5mby1cdTAwM2VzdGF0dXNfZGF0YSlcbi1cdFx0XHRpbmZvLVx1MDAzZXN0YXR1c19kYXRhX2lkciA9IDE7XG4tXHR9XG4rXHRpZiAodW5saWtlbHkoc2tfcmVxdWVzdHNfd2lmaV9zdGF0dXMoc2tiLVx1MDAzZXNrKSkpXG4rXHRcdGllZWU4MDIxMV9zdG9yZV9hY2tfc2tiKGxvY2FsLCBza2IsIDApO1xuIFxuIFx0ZGV2X3N3X25ldHN0YXRzX3R4X2FkZChkZXYsIHNrYnMsIGxlbik7XG4gXG5AQCAtNDg5OSw2ICs0ODQ3LDcgQEAgaWVlZTgwMjExX2J1aWxkX2RhdGFfdGVtcGxhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdC5sb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsLFxuIFx0XHQuc2RhdGEgPSBzZGF0YSxcbiBcdH07XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87XG4gXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbkBAIC00OTA5LDggKzQ4NTgsMTIgQEAgaWVlZTgwMjExX2J1aWxkX2RhdGFfdGVtcGxhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0c2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBpbmZvX2ZsYWdzLCBzdGEsXG4tXHRcdFx0XHQgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQywgMCk7XG4rXHRpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuK1x0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xuK1x0aW5mby1cdTAwM2VmbGFncyA9IGluZm9fZmxhZ3M7XG4rXHRpbmZvLVx1MDAzZWNvbnRyb2wuZmxhZ3MgPSBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUM7XG4rXG4rXHRza2IgPSBpZWVlODAyMTFfYnVpbGRfaGRyKHNkYXRhLCBza2IsIHN0YSk7XG4gXHRpZiAoSVNfRVJSKHNrYikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTY1MzAsNiArNjQ4Myw4IEBAIGludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbitcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbztcbitcdGJvb2wgZ3JvdXBfYWRkcmVzc2VkO1xuIFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0c3RydWN0IGV0aGhkciAqZWhkcjtcbkBAIC02NTU0LDkgKzY1MDksNiBAQCBpbnQgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKHVuZW5jcnlwdGVkKVxuIFx0XHRmbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUO1xuIFxuLVx0aWYgKGNvb2tpZSlcbi1cdFx0Y3RybF9mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7XG4tXG4gXHRmbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfTkw4MDIxMV9GUkFNRV9UWDtcbiBcbiBcdHNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtXHUwMDNlaHcuZXh0cmFfdHhfaGVhZHJvb20gK1xuQEAgLTY1NzMsMTUgKzY1MjUsMTEgQEAgaW50IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBcdC8qIHdlIG1heSBvdmVycmlkZSB0aGUgU0EgZm9yIE1MTyBTVEEgbGF0ZXIgKi9cbiBcdGlmIChsaW5rX2lkIFx1MDAzYyAwKSB7XG4tXHRcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKElFRUU4MDIxMV9MSU5LX1VOU1BFQ0lGSUVELFxuLVx0XHRcdFx0XHQgICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOSyk7XG4rXHRcdGxpbmtfaWQgPSBJRUVFODAyMTFfTElOS19VTlNQRUNJRklFRDtcbiBcdFx0bWVtY3B5KGVoZHItXHUwMDNlaF9zb3VyY2UsIHNkYXRhLVx1MDAzZXZpZi5hZGRyLCBFVEhfQUxFTik7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpsaW5rX2NvbmY7XG4gXG4tXHRcdGN0cmxfZmxhZ3MgfD0gdTMyX2VuY29kZV9iaXRzKGxpbmtfaWQsXG4tXHRcdFx0XHRcdCAgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LKTtcbi1cbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRsaW5rX2NvbmYgPSByY3VfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNldmlmLmxpbmtfY29uZltsaW5rX2lkXSk7XG4gXHRcdGlmICghbGlua19jb25mKSB7XG5AQCAtNjYwMCw5ICs2NTQ4LDYgQEAgaW50IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcbi1cdGlmIChsb2NhbC1cdTAwM2Vody5xdWV1ZXMgXHUwMDNjIElFRUU4MDIxMV9OVU1fQUNTKVxuLVx0XHRnb3RvIHN0YXJ0X3htaXQ7XG4tXG4gXHQvKiB1cGRhdGUgUW9TIGhlYWRlciB0byBwcmlvcml0aXplIGNvbnRyb2wgcG9ydCBmcmFtZXMgaWYgcG9zc2libGUsXG4gXHQgKiBwcmlvcml0aXphdGlvbiBhbHNvIGhhcHBlbnMgZm9yIGNvbnRyb2wgcG9ydCBmcmFtZXMgc2VuZCBvdmVyXG4gXHQgKiBBRl9QQUNLRVRcbkBAIC02NjE1LDI0ICs2NTYwLDQ4IEBAIGludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRpZiAoIUlTX0VSUihzdGEpKSB7XG4tXHRcdHUxNiBxdWV1ZSA9IGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc2RhdGEsIHN0YSwgc2tiKTtcbitcdGdyb3VwX2FkZHJlc3NlZCA9IElTX0VSUihzdGEpO1xuK1x0aWYgKElTX0VSUihzdGEpKVxuK1x0XHRzdGEgPSBOVUxMO1xuIFxuLVx0XHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBxdWV1ZSk7XG4rXHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKHNkYXRhLCBzdGEsIHNrYikpO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBmb3IgTUxPIFNUQSwgdGhlIFNBIHNob3VsZCBiZSB0aGUgQVAgTUxEIGFkZHJlc3MsIGJ1dFxuLVx0XHQgKiB0aGUgbGluayBJRCBoYXMgYmVlbiBzZWxlY3RlZCBhbHJlYWR5XG4tXHRcdCAqL1xuLVx0XHRpZiAoc3RhIFx1MDAyNlx1MDAyNiBzdGEtXHUwMDNlc3RhLm1sbylcbi1cdFx0XHRtZW1jcHkoZWhkci1cdTAwM2VoX3NvdXJjZSwgc2RhdGEtXHUwMDNldmlmLmFkZHIsIEVUSF9BTEVOKTtcbitcdC8qXG4rXHQgKiBmb3IgTUxPIFNUQSwgdGhlIFNBIHNob3VsZCBiZSB0aGUgQVAgTUxEIGFkZHJlc3MsIGJ1dFxuK1x0ICogdGhlIGxpbmsgSUQgaGFzIGJlZW4gc2VsZWN0ZWQgYWxyZWFkeVxuK1x0ICovXG4rXHRpZiAoc3RhIFx1MDAyNlx1MDAyNiBzdGEtXHUwMDNlc3RhLm1sbylcbitcdFx0bWVtY3B5KGVoZHItXHUwMDNlaF9zb3VyY2UsIHNkYXRhLVx1MDAzZXZpZi5hZGRyLCBFVEhfQUxFTik7XG4rXG4rXHRpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuK1x0bWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpO1xuK1x0aW5mby1cdTAwM2VmbGFncyA9IGZsYWdzO1xuK1x0Y3RybF9mbGFncyB8PSB1MzJfZW5jb2RlX2JpdHMobGlua19pZCwgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xuK1x0aW5mby1cdTAwM2Vjb250cm9sLmZsYWdzID0gY3RybF9mbGFncztcbitcbitcdGlmICghZ3JvdXBfYWRkcmVzc2VkKVxuK1x0XHRpZWVlODAyMTFfc3RvcmVfYWNrX3NrYihsb2NhbCwgc2tiLCBjb29raWUpO1xuK1xuK1x0c2tiID0gaWVlZTgwMjExX2J1aWxkX2hkcihzZGF0YSwgc2tiLCBzdGEpO1xuK1x0aWYgKElTX0VSUihza2IpKSB7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4gUFRSX0VSUihza2IpO1xuIFx0fVxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4tc3RhcnRfeG1pdDpcbitcdGlmIChsaW5rX2lkICE9IHUzMl9nZXRfYml0cyhpbmZvLVx1MDAzZWNvbnRyb2wuZmxhZ3MsXG4rXHRcdFx0XHQgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspKSB7XG4rXHRcdGllZWU4MDIxMV9mcmVlX3R4c2tiKFx1MDAyNmxvY2FsLVx1MDAzZWh3LCBza2IpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRkZXZfc3dfbmV0c3RhdHNfdHhfYWRkKGRldiwgMSwgc2tiLVx1MDAzZWxlbik7XG4rXHRpZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KGxvY2FsLCBza2ItXHUwMDNlbGVuKTtcbitcbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbi1cdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBza2ItXHUwMDNlZGV2LCBmbGFncywgY3RybF9mbGFncywgY29va2llKTtcbitcdGllZWU4MDIxMV94bWl0KHNkYXRhLCBzdGEsIHNrYik7XG4gXHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTY2NjAsOCArNjYyOSw3IEBAIGludCBpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2tiLVx1MDAzZWRldiwgMCxcbi1cdFx0XHRcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfU0tJUF9NUEFUSF9MT09LVVAsXG4tXHRcdFx0XHQgICAgIDApO1xuK1x0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUCk7XG4gXHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcbiBcdHJldHVybiAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6MDM6NDguODE1MTQzNTg3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5MDM5MjYyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgbWFjODAyMTEgVFggUGF0aCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYG5ldC9tYWM4MDIxMS9gLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIHRvdWNoaW5nIHNvbWUgZnVuZGFtZW50YWwgVFggcGF0aCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBjb21taXQgYWZmZWN0cyBhIG51bWJlciBvZiBrZXkgZnVuY3Rpb25zOiBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgLCBgaWVlZTgwMjExX2J1aWxkX2hkcmAsIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCwgYW5kIHNvIG9uLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgcmVtb3ZpbmcgdGhlIGBjb29raWVgIGFyZ3VtZW50IGZyb20gYF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIGFuZCBhbHRlcmluZyB0aGUgY2FsbCB0byBgaWVlZTgwMjExX3N0b3JlX2Fja19za2JgIGFsb25nIHdpdGggaG93IGBpbmZvYCAodGhlIHNrYidzIGNvbnRyb2wgYmxvY2spIGdldHMgaW5pdGlhbGl6ZWQuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uIGluIGhvdyBtYWM4MDIxMSBoYW5kbGVzIHRyYW5zbWlzc2lvbnMuIFRoaXMgaGFzIHdpZGUgaW1wbGljYXRpb25zLCBuYXR1cmFsbHksIGJlaW5nIHJpZ2h0IGluIHRoZSBjb3JlIG9mIHRoZSA4MDIuMTEgd2lyZWxlc3Mgc3RhY2suXG5cbkZpcnN0IHRoaW5nIEkgdGhpbmsgaXMsIGlzIHRoaXMgZnV6emVyLWZyaWVuZGx5PyBBbmQsIHllcywgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgZXhpc3RlbmNlIG9mIGBtYWM4MDIxMV9od3NpbWAsIHRoZSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBkcml2ZXIsIGlzIGNydWNpYWwgaGVyZS4gIEl0IG1lYW5zIEkgY2FuIHRlc3QgdGhpcyBlYXNpbHkgaW4gUUVNVS4gR29vZC5cblxuSSBzaG91bGQgbGlzdCBhbGwgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucy4gTGV0IG1lIHF1aWNrbHkgbm90ZSB0aG9zZSBkb3duOiBgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGFgLCBgaWVlZTgwMjExX3N0b3JlX2Fja19za2JgLCBgaWVlZTgwMjExX2J1aWxkX2hkcmAsIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCwgYGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4X29uZWAsIGBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eGAsIGBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAsIGBpZWVlODAyMTFfODAyM194bWl0YCwgYGllZWU4MDIxMV9idWlsZF9kYXRhX3RlbXBsYXRlYCwgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgLCBgaWVlZTgwMjExX3Byb2JlX21lc2hfbGlua2AuXG5cbk5vdywgbGV0J3Mgem9vbSBpbiBhIGxpdHRsZS4gQmFzZWQgb24gYSBxdWljayBnbGFuY2UsIEknbGwgcGF5IGNsb3NlciBhdHRlbnRpb24gdG8gYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgLCBgaWVlZTgwMjExX3Byb2JlX21lc2hfbGlua2AsIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCwgYGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YCwgYW5kIGBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZWAuIFdhaXQgYSBtaW51dGUsIGBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAgaXMgKnRoZSogaG90LXBhdGggZm9yIG1hYzgwMjExIGludGVyZmFjZXMsIGl0J3MgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZnVuY3Rpb24sIHNvIHRoaXMgY2hhbmdlIHdpbGwgYmUgY3JpdGljYWwuIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBpcyBhbHNvIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgaGFuZGxlcyA4MDIuMVgvRUFQT0wgdHJhZmZpYyBhbmQgcmVsYXRlZCBjb250cm9sIHBvcnQgZnJhbWVzLCB3aGljaCB3aGlsZSBsZXNzIFwiaG90XCIgdGhhbiB0aGUgY29yZSBUWCBwYXRoLCBpcyBzdGlsbCB2aXRhbC4gYGllZWU4MDIxMV9wcm9iZV9tZXNoX2xpbmtgIGRlYWxzIHdpdGggbWVzaCBuZXR3b3Jrcy4gYGllZWU4MDIxMV9idWlsZF9kYXRhX3RlbXBsYXRlYCBpcyB1c2VkIGZvciwgb2J2aW91c2x5LCBidWlsZGluZyBkYXRhIHRlbXBsYXRlcy5cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHVzYWdlIG9mIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBhbmQgYGllZWU4MDIxMV9wcm9iZV9tZXNoX2xpbmtgLiBBbHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY2hhbmdlZCBhYm91dCBkYXRhIHRlbXBsYXRlIGJ1aWxkaW5nLiBJIHNob3VsZCBzZWFyY2ggZm9yIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBpbiB0aGUgc291cmNlIGJhc2UgYW5kIHNlZSB3aGVyZSB0aGF0J3MgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA2MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjA0OjAwLjcxOTA3MTY3MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg2MTM5NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV90eF9jb250cm9sX3BvcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2NmZy5jPTU5NzY9Y29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0ge1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTYwNzAtXFx0LnNldF9tdWx0aWNhc3RfdG9fdW5pY2FzdCA9IGllZWU4MDIxMV9zZXRfbXVsdGljYXN0X3RvX3VuaWNhc3QsXFxubmV0L21hYzgwMjExL2NmZy5jOjYwNzE6XFx0LnR4X2NvbnRyb2xfcG9ydCA9IGllZWU4MDIxMV90eF9jb250cm9sX3BvcnQsXFxubmV0L21hYzgwMjExL2NmZy5jLTYwNzItXFx0LmdldF90eHFfc3RhdHMgPSBpZWVlODAyMTFfZ2V0X3R4cV9zdGF0cyxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTIyNDY9dm9pZCBpZWVlODAyMTFfY2xlYXJfZmFzdF94bWl0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjQ3OmludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjI0OC1cXHRcXHRcXHQgICAgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9NjQ0OD12b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNjQ3OC1cXG5uZXQvbWFjODAyMTEvdHguYzo2NDc5OmludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L21hYzgwMjExL3R4LmMtNjQ4MC1cXHRcXHRcXHQgICAgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTowNDowMi40MDUyMTc5NDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzc3OTQ4OTMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ2hhbmdlcyB0byB0aGUgODAyLjExIFN0YWNrIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9tYWM4MDIxMS90eC5jYCwgYG5ldC9tYWM4MDIxMS90ZGxzLmNgLCBhbmQgYG5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oYC4gVGhhdCdzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgbWFjODAyMTEgY29yZSwgd2hpY2gsIGZvciB0aG9zZSBub3QgZmFtaWxpYXIsIGlzIHRoZSBMaW51eCBrZXJuZWwncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgODAyLjExIHN0YWNrLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgZm9jdXNlZCBvbiBob3cgdHJhbnNtaXQgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZC5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSBhIHJlZmFjdG9yaW5nIGVmZm9ydCBnb2luZyBvbi4gVGhlIHNpZ25hdHVyZSBvZiBgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAgaXMgYmVpbmcgY2hhbmdlZCwgcmVtb3ZpbmcgdGhlIGBjb29raWVgIGFyZ3VtZW50LiBBbHNvLCBgaWVlZTgwMjExX2J1aWxkX2hkcmAgaXMgYmVpbmcgcmVmYWN0b3JlZCB0byByZWx5IG9uIHByZS1wb3B1bGF0ZWQgaW5mb3JtYXRpb24gd2l0aGluIHRoZSBgc2tiYCBjb250cm9sIGJsb2NrLCByZW1vdmluZyB0aGUgYGluZm9fZmxhZ3NgLCBgY3RybF9mbGFnc2AsIGFuZCBgY29va2llYCBhcmd1bWVudHMuIEl0IHNlZW1zIGxpa2UgYSBjb25zb2xpZGF0aW9uIG9mIGRhdGEgd2l0aGluIHRoZSBgc2tiYCdzIGNvbnRyb2wgYmxvY2ssIGBpZWVlODAyMTFfc3RvcmVfYWNrX3NrYmAgaXMgYWxzbyBiZWluZyB1cGRhdGVkLCBhbmQgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHBvcHVsYXRlIHRoaXMgYGluZm9gIGFuZCBjYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgZGlyZWN0bHkuIFRoaXMgaXMgZ29vZDogcmVtb3ZpbmcgZnVuY3Rpb24gYXJndW1lbnRzIGFuZCBtb3ZpbmcgdGhhdCByZXNwb25zaWJpbGl0eSB0byBvdGhlciB2YXJpYWJsZXMgaW4gdGhlIHN0cnVjdCBoZWxwcyBwcmV2ZW50IGluY29ycmVjdCB1c2FnZSBhbmQgcmVkdWNlcyB0aGUgYW1vdW50IG9mIHN0YXRlIHBhc3NlZCBhcyBhcmd1bWVudHMuXG5cbldhaXQgYSBzZWNvbmQuLi4gKm1hYzgwMjExKj8gWWVzLCBpdCdzIHRoZSA4MDIuMTEgc3RhY2suIEFuZCBpdCdzIHJlYWNoYWJsZSB0aHJvdWdoIGBtYWM4MDIxMV9od3NpbWAsIHdoaWNoIGlzIGEgc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUgZHJpdmVyLiBUaGlzIG1lYW5zIHdlIGhhdmUgYSB2aWFibGUgcGF0aCBmb3IgZnV6emluZyEgKipXb3J0aEZ1enppbmc9dHJ1ZSoqIC0gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gYSBrZXkgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjaywgYW5kIHdlIGhhdmUgYSBwYXRoIGZvciBmdXp6aW5nIHRoZSBjb21wb25lbnRzLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBpbXBvcnRhbnQgc3ltYm9scy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgbW9kaWZpZWQgb3IgaGVhdmlseSBpbnZvbHZlZCBpbiB0aGUgY2hhbmdlczogYF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgLCBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGAsIGBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZWAsIGBpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rYCAodGhvdWdoIHRoYXQgbGFzdCBvbmUgc2VlbXMgbGlrZSBqdXN0IGEgY2FsbCBzaXRlLCBub3QgYSBrZXkgZW50cnkgcG9pbnQpLCBgaWVlZTgwMjExX21sb19tdWx0aWNhc3RfdHhgICh0aG91Z2ggaXQncyBzdGF0aWMpIGFuZCBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgICh0aGUgbmV0ZGV2X3R4X3QpLlxuXG5BIGNsb3NlciBsb29rLiBgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAgaXMgKmV4cG9ydGVkKi4gYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIGlzIHVzZWQgaW4gYG1hYzgwMjExX2NvbmZpZ19vcHNgIHdoaWNoIG1lYW5zIGl0J3MgcmVhY2hhYmxlIHZpYSBgY2ZnODAyMTFgLiBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIGlzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZvciBtYWM4MDIxMSBpbnRlcmZhY2VzLiBUaGF0J3MgYSBnb29kIHN1cmZhY2UgdG8gdGFyZ2V0LCBwYXJ0aWN1bGFybHkgd2l0aCBvdXIgZnV6emluZyBzZXR1cC5cblxuSSdtIGNoZWNraW5nIGlmIHRoZXNlIGtleSBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYXMgc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGxpbWl0ZWQgdmlzaWJpbGl0eTogYF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIGlzbid0IHN0YXRpYywgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIGlzbid0IHN0YXRpYywgYGllZWU4MDIxMV9idWlsZF9kYXRhX3RlbXBsYXRlYCBpc24ndCBzdGF0aWMsIGFuZCBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIGlzIGFsc28gbm90IHN0YXRpYy4gR3JlYXQsIG1lYW5zIHRoZXkgY2FuIGJlIGVhc2lseSBjYWxsZWQuXG5cbkFscmlnaHQsIHRpbWUgdG8gZ28gYW5kIGNoZWNrIHRoZSBLY29uZmlnIHRvIHNlZSB3aGF0IG1vZHVsZXMgYW5kIGRlcGVuZGVuY2llcyB3ZSBuZWVkIHRvIGVuYWJsZSBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MjcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6MDQ6MzAuMTg0NzE0MjUzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDM0NzgzNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXFxubmV0L21hYzgwMjExL0tjb25maWctMjItXFx0Ym9vbFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNDAtXFxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cXHRib29sIFxcXCJNaW5zdHJlbFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXFx0c3RyaW5nXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFxcXCJTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MDpjb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgbWFjODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNzgtXFxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctODctXFxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cXHRib29sIFxcXCJFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXFxubmV0L21hYzgwMjExL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiVHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiU2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTY6Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXFxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkRvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzEtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTMzLVxcdGJvb2wgXFxcIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NDpjb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIlZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cXHRib29sIFxcXCJWZXJib3NlIEhUIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCJWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTg2OmNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTg3LVxcdGJvb2wgXFxcIlZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjI6Y29uZmlnIE1BQzgwMjExX01QQVRIX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjIzLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjgyLVxcdGJvb2wgXFxcIlZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXFxubmV0L21hYzgwMjExL0tjb25maWc6MjkzOmNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cXHRib29sIFxcXCJFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cXHRpbnQgXFxcIlN0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcXFwiIGlmIE1BQzgwMjExX0RFQlVHX01FTlVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6MDQ6MzEuODg4MTk4NDU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc4NjQ2MDMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoaXMgZnV6emluZyBzZXR1cCBpcyBnb2luZyB0byB3b3JrIGFzIGludGVuZGVkLiBNeSBpbW1lZGlhdGUgY29uY2VybnMgcmV2b2x2ZSBhcm91bmQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUbyBlbnN1cmUgdGhlIGZ1enppbmcgaXMgYWN0aXZlIGFuZCBlZmZlY3RpdmUsIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgYE1BQzgwMjExYCBhbmQgYE1BQzgwMjExX0hXU0lNYCBhY3RpdmF0ZWQuIEJ1dCwgaG9sZCBvbi4gSSByZW1lbWJlciB0aGF0IGBDRkc4MDIxMWAgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGBNQUM4MDIxMWAuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IHRoYXQgZGVwZW5kZW5jeSBpcyBtZXQuIEFuZCBmaW5hbGx5LCBJIHNob3VsZCBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBNQUM4MDIxMV9IV1NJTWAgdG8gZW5zdXJlIEkgaGF2ZSBldmVyeXRoaW5nIGluIHBsYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk3NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjA0OjM2LjY3NDY2NTcwMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYyNTExMzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMV9IV1NJTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjA0OjM4LjIzNzE4MTA5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODg2MTExOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgVmlydHVhbCBXaXJlbGVzcyBEcml2ZXJzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYCBmaWxlLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEsIGFzIHRoYXQncyBvZnRlbiB0aGUgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZm9yIGEgcGFydGljdWxhciBzdWJzeXN0ZW0gb3IgbW9kdWxlLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIGNyaXRpY2FsIGluIGRldGVybWluaW5nIGhvdyB0aGUgdmlydHVhbCB3aXJlbGVzcyBkcml2ZXIocykgYXJlIGJ1aWx0LCBlbmFibGVkLCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSdtIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgLSB0aGUgdG9wLWxldmVsIG1lbnUgZW50cmllcywgYW55IGRlcGVuZGVuY2llcyBvciBwcmVyZXF1aXNpdGVzLCBhbmQgdGhlIGRlZmF1bHQgc3RhdGVzIG9mIHJlbGV2YW50IG9wdGlvbnMuIEl0J3MgdGltZSB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIGtleSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGltcGFjdHMgdGhlIGF2YWlsYWJpbGl0eSBvZiBmZWF0dXJlcyBvciBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMwNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjA0OjQyLjEyNTc5NTU3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuICAgMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3RcXG4gICA2OlxcdFxcdCAgSUVFRSA4MDIuMTEgbmV0d29ya2luZyBzdGFjayAobWFjODAyMTEpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgbm90XFxuICAgNzpcXHRcXHQgIG5lZWRlZCBmb3Igbm9ybWFsIHdpcmVsZXNzIExBTiB1c2FnZSBhbmQgaXMgb25seSBmb3IgdGVzdGluZy4gU2VlXFxuICAgODpcXHRcXHQgIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9tYWM4MDIxMV9od3NpbSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3dcXG4gICA5OlxcdFxcdCAgdG8gdXNlIHRoaXMgdG9vbC5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcXG4gIDEyOlxcdFxcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFZJUlRfV0lGSVxcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIldpZmkgd3JhcHBlciBmb3IgZXRoZXJuZXQgZHJpdmVyc1xcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxcbiAgMTk6XFx0XFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxcbiAgMjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjA0OjQyLjEyNTk2NDkwNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg5NDY5NTExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBtYWM4MDIxMSBUWCBMb2dpYyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBtZXNzaW5nIHdpdGggc29tZSBmdW5kYW1lbnRhbCBtYWM4MDIxMSBzdHVmZiDigJMgc3BlY2lmaWNhbGx5LCB0aGUgY29yZSBUWCBsb2dpYy4gSXQncyB0b3VjaGluZyBgbmV0L21hYzgwMjExL3R4LmNgLCBgbmV0L21hYzgwMjExL3RkbHMuY2AsIGFuZCBhIGhlYWRlciBmaWxlLCBzbyBpdCdzIGEgZGVlcCBkaXZlLiBJJ20gc2VlaW5nIGNoYW5nZXMgdG8gdGhlIHNpZ25hdHVyZXMgb2YgYF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIGFuZCBgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGFgLCBhbG9uZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gaG93IFRYIGluZm8gaXMgaGFuZGxlZCBpbiBgaWVlZTgwMjExX2J1aWxkX2hkcmAgYW5kIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YC4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIHBhY2tldCB0cmFuc21pc3Npb24sIHF1ZXVpbmcsIGFuZCBoZWFkZXIgY29uc3RydWN0aW9uLiBHaXZlbiB0aGF0IHRoaXMgaXMgY29yZSBzdHVmZiwgYW5kIHJlYWNoYWJsZSB0aHJvdWdoIGBtYWM4MDIxMV9od3NpbWAgKHdoaWNoIGlzIGdyZWF0IGJlY2F1c2UgdGhhdCBtZWFucyBRRU1VL3N5emthbGxlciBhcmUgdmlhYmxlKSwgaXQncyBzY3JlYW1pbmcgZm9yIHNvbWUgZnV6emluZy5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGlzIHRhcmdldGluZy4gQWZ0ZXIgZGlnZ2luZyBpbnRvIHRoZSBjb2RlLCBJIGNhbiBzZWUgdGhhdCBpdCdzIGZvY3VzaW5nIG9uOlxuXG4qICAgYGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXRgXG4qICAgYGllZWU4MDIxMV9sb29rdXBfcmFfc3RhYCAodGhvdWdoIHN0YXRpYywgc28gd29ydGggY29uc2lkZXJpbmcgY29udGV4dClcbiogICBgaWVlZTgwMjExX3N0b3JlX2Fja19za2JgXG4qICAgYGllZWU4MDIxMV9idWlsZF9oZHJgXG4qICAgYF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgXG4qICAgYGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4X29uZWBcbiogICBgaWVlZTgwMjExX21sb19tdWx0aWNhc3RfdHhgXG4qICAgYGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YFxuKiAgIGBpZWVlODAyMTFfODAyM194bWl0YFxuKiAgIGBpZWVlODAyMTFfYnVpbGRfZGF0YV90ZW1wbGF0ZWBcbiogICBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGBcbiogICBgaWVlZTgwMjExX3Byb2JlX21lc2hfbGlua2BcblxuTGV0J3MgcmVmaW5lIHRoZSBsaXN0LiBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgIChib3RoIHRoZSBpbnRlcm5hbCBhbmQgZXhwb3J0ZWQgdmVyc2lvbnMpIGxvb2sgbGlrZSBob3QgcGF0aHMg4oCTIHRoZXkncmUgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZnVuY3Rpb25zLCBtYWtpbmcgdGhlbSBoaWdoLXByaW9yaXR5IGNhbmRpZGF0ZXMuIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBpcyBhbHNvIGdvb2QuIEl0J3MgdXNlZCBmb3IgY29udHJvbCBwb3J0IGZyYW1lcyBsaWtlIEVBUE9MLCBzbyBhIG1vcmUgc3BlY2lmaWMgdGFyZ2V0LiBBbHNvLCBgaWVlZTgwMjExX2J1aWxkX2RhdGFfdGVtcGxhdGVgIHdpbGwgYmUgdXNlZnVsIGFuZCBgaWVlZTgwMjExX3Byb2JlX21lc2hfbGlua2AgZm9yIG1lc2ggbGlua3MuIGBpZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0YCBsb29rcyBnb29kIHRvby5cblxuU2luY2UgSSdsbCBiZSBmdXp6aW5nLCBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBlZmZvcnRzIG9uOlxuXG4qICAgYGllZWU4MDIxMV90eF9jb250cm9sX3BvcnRgIChBUEkgZW50cnlwb2ludClcbiogICBgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldGBcbiogICBgaWVlZTgwMjExX3Byb2JlX21lc2hfbGlua2BcblxuRm9yIHRlc3RpbmcgdGhpcywgSSdtIGdvaW5nIHRvIG1ha2Ugc3VyZSB0aGF0IEkgZW5hYmxlIGEgZmV3IGNvbmZpZ3VyYXRpb25zOlxuXG4qICAgYE1BQzgwMjExYCAob2J2aW91c2x5KVxuKiAgIGBNQUM4MDIxMV9IV1NJTWAgKHRvIHVzZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBlc3NlbnRpYWwgZm9yIHByYWN0aWNhbCB0ZXN0aW5nKVxuKiAgIGBNQUM4MDIxMV9NRVNIYCAoYmVjYXVzZSB0aGVyZSdzIGEgY29uZGl0aW9uYWwgYmxvY2sgcmVsYXRlZCB0byBgQ09ORklHX01BQzgwMjExX01FU0hgIGluIGBpZWVlODAyMTFfbG9va3VwX3JhX3N0YWApLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBzaGFraW5nIHVwIGNvcmUgdHJhbnNtaXNzaW9uIGxvZ2ljLiBCeSB0YXJnZXRpbmcgc3BlY2lmaWMgZW50cnkgcG9pbnRzIGFuZCBzZXR0aW5nIHVwIGEgcHJvcGVyIGVudmlyb25tZW50ICh1c2luZyBIV1NJTSBhbmQgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMpLCBJIHRoaW5rIHRoaXMgZnV6emluZyBjYW1wYWlnbiB3aWxsIGhhdmUgYSBoaWdoIGxpa2VsaWhvb2Qgb2YgZmluZGluZyBzb21lIGludGVyZXN0aW5nIGJ1Z3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzM1LCJPdXRwdXRUb2tlbnMiOjI0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTowNToxOC4wMjA2NjMxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjYzODczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIixcbiAgICBcIk1BQzgwMjExX01FU0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0XCIsXG4gICAgXCJpZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0XCIsXG4gICAgXCJpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtYWM4MDIxMSB0cmFuc21pc3Npb24gbG9naWMsIGluY2x1ZGluZyBUWCBpbmZvIGluaXRpYWxpemF0aW9uLCBoZWFkZXIgYnVpbGRpbmcsIGFuZCBjb250cm9sIHBvcnQgdHJhbnNtaXNzaW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgdmlhIHZpcnR1YWxpemVkIHdpcmVsZXNzIGludGVyZmFjZXMgKG1hYzgwMjExX2h3c2ltKS4gV2Ugc2hvdWxkIGZvY3VzIGZ1enppbmcgb24gdGhlIG1vZGlmaWVkIGVudHJ5IHBvaW50cyBsaWtlIGBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0YCBhbmQgYGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXRgLiBgTUFDODAyMTFfTUVTSGAgaXMgbmVlZGVkIHRvIHJlYWNoIHRoZSBtb2RpZmllZCBtZXNoLXNwZWNpZmljIGxvZ2ljIGluIGBpZWVlODAyMTFfbG9va3VwX3JhX3N0YWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCIsXG4gICAgXCJNQUM4MDIxMV9NRVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydFwiLFxuICAgIFwiaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldFwiLFxuICAgIFwiaWVlZTgwMjExX3Byb2JlX21lc2hfbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWFjODAyMTEgdHJhbnNtaXNzaW9uIGxvZ2ljLCBpbmNsdWRpbmcgVFggaW5mbyBpbml0aWFsaXphdGlvbiwgaGVhZGVyIGJ1aWxkaW5nLCBhbmQgY29udHJvbCBwb3J0IHRyYW5zbWlzc2lvbi4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsaXplZCB3aXJlbGVzcyBpbnRlcmZhY2VzIChtYWM4MDIxMV9od3NpbSkuIFdlIHNob3VsZCBmb2N1cyBmdXp6aW5nIG9uIHRoZSBtb2RpZmllZCBlbnRyeSBwb2ludHMgbGlrZSBgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydGAgYW5kIGBpZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0YC4gYE1BQzgwMjExX01FU0hgIGlzIG5lZWRlZCB0byByZWFjaCB0aGUgbW9kaWZpZWQgbWVzaC1zcGVjaWZpYyBsb2dpYyBpbiBgaWVlZTgwMjExX2xvb2t1cF9yYV9zdGFgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowjpcpb[1] Phase: Succeeded StartedAt: 2026-08-03 19:05:29 +0000 UTC FinishedAt: 2026-08-03 19:05:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 19:05:29 +0000 UTC FinishedAt: 2026-08-03 19:05:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2] Phase: Succeeded StartedAt: 2026-08-03 19:05:29 +0000 UTC FinishedAt: 2026-08-03 22:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-03 19:05:29 +0000 UTC FinishedAt: 2026-08-03 22:50:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 19:05:29 +0000 UTC FinishedAt: 2026-08-03 19:05:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 19:05:29 +0000 UTC FinishedAt: 2026-08-03 19:05:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjpcpb/series-workflowjpcpb-convert-artifact-3840519297/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 19:05:39 +0000 UTC FinishedAt: 2026-08-03 19:25:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 19:05:39 +0000 UTC FinishedAt: 2026-08-03 19:25:49 +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:*d284be1a-6daf-4fa2-93a5-fe9f4bd174e2,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-workflowjpcpb/series-workflowjpcpb-convert-artifact-3840519297/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": "b0517ff8-5116-472d-80f5-6f65a38a1079", "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-workflowjpcpb/series-workflowjpcpb-build-action-1530988975/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 19:05:39 +0000 UTC FinishedAt: 2026-08-03 19:25:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d284be1a-6daf-4fa2-93a5-fe9f4bd174e2,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-workflowjpcpb/series-workflowjpcpb-convert-artifact-3840519297/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": "b0517ff8-5116-472d-80f5-6f65a38a1079", "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-workflowjpcpb/series-workflowjpcpb-build-action-1530988975/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 19:25:49 +0000 UTC FinishedAt: 2026-08-03 19:25:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 19:25:49 +0000 UTC FinishedAt: 2026-08-03 19:25:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 19:25:49 +0000 UTC FinishedAt: 2026-08-03 19:25:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 19:25:49 +0000 UTC FinishedAt: 2026-08-03 19:25:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjpcpb/series-workflowjpcpb-convert-artifact-1336161108/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 19:25:59 +0000 UTC FinishedAt: 2026-08-03 19:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 19:25:59 +0000 UTC FinishedAt: 2026-08-03 19:28:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b0517ff8-5116-472d-80f5-6f65a38a1079,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-workflowjpcpb/series-workflowjpcpb-build-action-1530988975/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-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-03 19:28:14 +0000 UTC FinishedAt: 2026-08-03 19:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-03 19:28:14 +0000 UTC FinishedAt: 2026-08-03 19:28:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-03 19:28:14 +0000 UTC FinishedAt: 2026-08-03 19:44:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-03 19:28:14 +0000 UTC FinishedAt: 2026-08-03 19:44:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d284be1a-6daf-4fa2-93a5-fe9f4bd174e2,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-workflowjpcpb/series-workflowjpcpb-convert-artifact-1336161108/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": "7ee6273c-8af8-4b5d-a4fd-514142fde425", "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-workflowjpcpb/series-workflowjpcpb-build-action-960276256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-03 19:28:14 +0000 UTC FinishedAt: 2026-08-03 19:44:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d284be1a-6daf-4fa2-93a5-fe9f4bd174e2,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-workflowjpcpb/series-workflowjpcpb-convert-artifact-1336161108/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": "7ee6273c-8af8-4b5d-a4fd-514142fde425", "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-workflowjpcpb/series-workflowjpcpb-build-action-960276256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-03 19:44:56 +0000 UTC FinishedAt: 2026-08-03 19:44:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-03 19:44:56 +0000 UTC FinishedAt: 2026-08-03 19:44:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-03 19:44:56 +0000 UTC FinishedAt: 2026-08-03 19:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-03 19:44:56 +0000 UTC FinishedAt: 2026-08-03 19:47:02 +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:*7ee6273c-8af8-4b5d-a4fd-514142fde425,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-workflowjpcpb/series-workflowjpcpb-build-action-960276256/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-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-03 19:47:12 +0000 UTC FinishedAt: 2026-08-03 22:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-03 19:47:12 +0000 UTC FinishedAt: 2026-08-03 22:50:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"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:*b0517ff8-5116-472d-80f5-6f65a38a1079,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7ee6273c-8af8-4b5d-a4fd-514142fde425,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-workflowjpcpb/series-workflowjpcpb-build-action-1530988975/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-workflowjpcpb/series-workflowjpcpb-build-action-960276256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-03 19:47:12 +0000 UTC FinishedAt: 2026-08-03 19:47:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-03 19:47:12 +0000 UTC FinishedAt: 2026-08-03 19:47:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"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-workflowjpcpb/series-workflowjpcpb-convert-artifact-3683959421/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-03 19:47:12 +0000 UTC FinishedAt: 2026-08-03 19:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-03 19:47:12 +0000 UTC FinishedAt: 2026-08-03 19:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-03 19:47:12 +0000 UTC FinishedAt: 2026-08-03 19:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-03 19:47:22 +0000 UTC FinishedAt: 2026-08-03 22:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpcpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_control_port","ieee80211_tdls_prep_mgmt_packet","ieee80211_probe_mesh_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","MAC80211_MESH"],"series_id":"cd0db072-d6ba-4d56-b46b-07c23b3548a5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-03 19:47:22 +0000 UTC FinishedAt: 2026-08-03 22:50:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b0517ff8-5116-472d-80f5-6f65a38a1079,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7ee6273c-8af8-4b5d-a4fd-514142fde425,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-workflowjpcpb/series-workflowjpcpb-build-action-1530988975/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-workflowjpcpb/series-workflowjpcpb-build-action-960276256/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-workflowjpcpb/series-workflowjpcpb-convert-artifact-3683959421/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,}