Name: series-workflowts57f Phase: Succeeded StartedAt: 2026-06-23 08:59:33 +0000 UTC FinishedAt: 2026-06-23 14:02:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[0] Phase: Succeeded StartedAt: 2026-06-23 08:59:34 +0000 UTC FinishedAt: 2026-06-23 09:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 08:59:34 +0000 UTC FinishedAt: 2026-06-23 09:37:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "c143957520c6c9b5cd72e0de8b52b814f0c576fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "c143957520c6c9b5cd72e0de8b52b814f0c576fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "a2eb2d55-631d-42ed-a8e1-33a4951186d5" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_fc_range_add", "__track_range", "ext4_fc_snapshot_lblk_range", "ext4_fc_snapshot_inode_data" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2ZjX3JhbmdlX2FkZCYjMzQ7LAogICAgJiMzNDtfX3RyYWNrX3JhbmdlJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZSYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZXh0NCBmYXN0IGNvbW1pdHMgdHJhY2sgbW9kaWZpZWQgbG9naWNhbCBibG9jayByYW5nZXMsIG1vdmluZyBmcm9tIGEgc2luZ2xlIGNvYWxlc2NlZCByYW5nZSB0byB0cmFja2luZyBtdWx0aXBsZSBkaXNqb2ludCByYW5nZXMuIFRoaXMgaW52b2x2ZXMgbmV3IGFycmF5IG1hbmlwdWxhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBleHRlbnQgdHJhY2tpbmcgbG9naWMgaW4gdGhlIGZhc3QgY29tbWl0IHBhdGgsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmYjlhNGVhZDlmZjA3YmRkN2EwOTY5ZDJhZGY1NWRmY2FlZmZhMWQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDk6MzY6MzAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggZGRjOTAzNzM4YzZiMzMuLmQ5M2NjNTJjZDAxZWQwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMTA0Miw2ICYjNDM7MTA0MiwyMCBAQCBlbnVtIGV4dDRfZmNfc25hcF9lcnIge1xuIFx0RVhUNF9GQ19TTkFQX0VSUl9JTk9ERV9MT0MsXG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogTWF4aW11bSBudW1iZXIgb2YgZGlzam9pbnQgbG9naWNhbC1ibG9jayByYW5nZXMgdHJhY2tlZCBwZXIgaW5vZGUgZm9yIGFcbiYjNDM7ICogc2luZ2xlIGZhc3QgY29tbWl0LiAgU2NhdHRlcmVkIGFsbG9jYXRpb25zIHRoYXQgZXhjZWVkIHRoaXMgZ2V0IHRoZWlyIHR3b1xuJiM0MzsgKiBjbG9zZXN0IHJhbmdlcyBtZXJnZWQgKHNlZSBleHQ0X2ZjX3JhbmdlX2FkZCgpKSwgZGVncmFkaW5nIGdyYWNlZnVsbHkgdG9cbiYjNDM7ICogdGhlIG9sZCBzaW5nbGUgY29hbGVzY2VkLXJhbmdlIGJlaGF2aW91ci5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgRVhUNF9GQ19NQVhfUkFOR0VTIDE2XG4mIzQzO1xuJiM0MzsvKiBJbi1tZW1vcnkgcmVjb3JkIG9mIGFuIGxibGsgcmFuZ2UgbW9kaWZpZWQgaW4gdGhlIGN1cnJlbnQgZmFzdCBjb21taXQuICovXG4mIzQzO3N0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2Uge1xuJiM0MztcdGV4dDRfbGJsa190IHN0YXJ0O1xuJiM0MztcdGV4dDRfbGJsa190IGxlbjtcbiYjNDM7fTtcbiYjNDM7XG4gLypcbiAgKiBmb3VydGggZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gaW5vZGUgZGF0YSBpbiBtZW1vcnlcbiAgKi9cbkBAIC0xMDkxLDExICYjNDM7MTEwNSwyNSBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcbiBcdFx0XHRcdFx0ICogcHJvdGVjdGVkIGJ5IHNiaS1cdTAwM2VzX2ZjX2xvY2suXG4gXHRcdFx0XHRcdCAqL1xuIFxuLVx0LyogU3RhcnQgb2YgbGJsayByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGNvbW1pdHRlZCBpbiB0aGlzIGZhc3QgY29tbWl0ICovXG4tXHRleHQ0X2xibGtfdCBpX2ZjX2xibGtfc3RhcnQ7XG4tXG4tXHQvKiBFbmQgb2YgbGJsayByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGNvbW1pdHRlZCBpbiB0aGlzIGZhc3QgY29tbWl0ICovXG4tXHRleHQ0X2xibGtfdCBpX2ZjX2xibGtfbGVuO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTG9naWNhbCBibG9jayByYW5nZXMgbW9kaWZpZWQgaW4gdGhpcyBmYXN0IGNvbW1pdC4gIFRyYWNraW5nIHRoZVxuJiM0MztcdCAqIGFjdHVhbCBtb2RpZmllZCByYW5nZXMgKGluc3RlYWQgb2Ygb25lIGNvYWxlc2NlZCBbbWluLG1heF0pIGF2b2lkc1xuJiM0MztcdCAqIHNuYXBzaG90dGluZyB0aGUgd2hvbGUgc3Bhbm5lZCBleHRlbnQgbWFwIGZvciBzY2F0dGVyZWQgYWxsb2NhdGlvbnMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgZmlyc3QgcmFuZ2UgaXMga2VwdCBpbmxpbmUgaW4gaV9mY19yYW5nZSwgc28gdGhlIGNvbW1vbiBjYXNlIG9mIGFcbiYjNDM7XHQgKiBzaW5nbGUgY29udGlndW91cyBkaXJ0eSByZWdpb24gbmVlZHMgbm8gYWxsb2NhdGlvbi4gIFdoZW4gYSBzZWNvbmRcbiYjNDM7XHQgKiBkaXNqb2ludCByYW5nZSBhcHBlYXJzIHRoZSBpbm9kZSBpcyB1cGdyYWRlZCB0byB0aGUgaV9mY19yYW5nZXMgYXJyYXlcbiYjNDM7XHQgKiAoRVhUNF9GQ19NQVhfUkFOR0VTICYjNDM7IDEgZW50cmllcywgc29ydGVkIGFuZCBtdXR1YWxseSBkaXNqb2ludDsgdGhlXG4mIzQzO1x0ICogZXh0cmEgc2xvdCBpcyB0cmFuc2llbnQgcm9vbSB1c2VkIHdoaWxlIGluc2VydGluZyBiZWZvcmUgYW4gb3ZlcmZsb3dcbiYjNDM7XHQgKiBtZXJnZSksIGFsbG9jYXRlZCB0aGVuIGFuZCBmcmVlZCB3aGVuIHRoZSBpbm9kZSBpcyBldmljdGVkLiAgSWYgdGhhdFxuJiM0MztcdCAqIGFsbG9jYXRpb24gZmFpbHMgd2UgZmFsbCBiYWNrIHRvIGNvYWxlc2NpbmcgaW50byBpX2ZjX3JhbmdlLCBpLmUuIHRoZVxuJiM0MztcdCAqIG9yaWdpbmFsIHNpbmdsZSBjb2FsZXNjZWQtcmFuZ2UgYmVoYXZpb3VyLiAgaV9mY19ucl9yYW5nZXMgY291bnRzIHRoZVxuJiM0MztcdCAqIHZhbGlkIHJhbmdlczsgd2hpbGUgaV9mY19yYW5nZXMgaXMgTlVMTCBpdCBpcyAwIG9yIDEuICBQcm90ZWN0ZWQgYnlcbiYjNDM7XHQgKiBpX2ZjX2xvY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSBpX2ZjX3JhbmdlO1xuJiM0MztcdHN0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2UgKmlfZmNfcmFuZ2VzO1xuJiM0MztcdHVuc2lnbmVkIGludCBpX2ZjX25yX3JhbmdlcztcbiBcbiBcdC8qXG4gXHQgKiBDb21taXQtdGltZSBmYXN0IGNvbW1pdCBzbmFwc2hvdHMuXG5AQCAtMTExNiw4ICYjNDM7MTE0NCw4IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuIFx0c3BpbmxvY2tfdCBpX3Jhd19sb2NrO1x0LyogcHJvdGVjdHMgdXBkYXRlcyB0byB0aGUgcmF3IGlub2RlICovXG4gXG4gXHQvKlxuLVx0ICogUHJvdGVjdCBjb25jdXJyZW50IGFjY2Vzc2VzIG9uIGlfZmNfbGJsa19zdGFydCwgaV9mY19sYmxrX2xlblxuLVx0ICogYW5kIGlub2RlJiMzOTtzIEVYVDRfRkNfU1RBVEVfQ09NTUlUVElORyBzdGF0ZSBiaXQuXG4mIzQzO1x0ICogUHJvdGVjdCBjb25jdXJyZW50IGFjY2Vzc2VzIG9uIGlfZmNfcmFuZ2UsIGlfZmNfcmFuZ2VzLFxuJiM0MztcdCAqIGlfZmNfbnJfcmFuZ2VzIGFuZCBpbm9kZSYjMzk7cyBFWFQ0X0ZDX1NUQVRFX0NPTU1JVFRJTkcgc3RhdGUgYml0LlxuIFx0ICovXG4gXHRzcGlubG9ja190IGlfZmNfbG9jaztcbiBcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmMgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbmluZGV4IDRlZjc5NmI5YjZjYjVmLi45ZDM2MzY1ZWFlMDJiYSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jXG5AQCAtMjIyLDggJiM0MzsyMjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9mY19yZXNldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiBcbi1cdGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydCA9IDA7XG4tXHRlaS1cdTAwM2VpX2ZjX2xibGtfbGVuID0gMDtcbiYjNDM7XHRlaS1cdTAwM2VpX2ZjX25yX3JhbmdlcyA9IDA7XG4gfVxuIFxuIHZvaWQgZXh0NF9mY19pbml0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5AQCAtMjMxLDYgJiM0MzsyMzAsNyBAQCB2b2lkIGV4dDRfZmNfaW5pdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xuIFxuIFx0ZXh0NF9mY19yZXNldF9pbm9kZShpbm9kZSk7XG4mIzQzO1x0ZWktXHUwMDNlaV9mY19yYW5nZXMgPSBOVUxMO1xuIFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9GQ19DT01NSVRUSU5HKTtcbiBcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfRkNfUkVRVUVVRSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX2ZjX2xpc3QpO1xuQEAgLTU4Miw3ICYjNDM7NTgyLDcgQEAgc3RhdGljIGludCBfX3RyYWNrX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmFyZyxcbiBcdGlmICh1cGRhdGUpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuLVx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZjX2xibGtfbGVuID0gMDtcbiYjNDM7XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmNfbnJfcmFuZ2VzID0gMDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC02MjIsMzIgJiM0Mzs2MjIsMTQ0IEBAIHN0cnVjdCBfX3RyYWNrX3JhbmdlX2FyZ3Mge1xuIFx0ZXh0NF9sYmxrX3Qgc3RhcnQsIGVuZDtcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBSZWNvcmQgdGhhdCBsb2dpY2FsIGJsb2NrIHJhbmdlIFtzdGFydCwgZW5kXSB3YXMgbW9kaWZpZWQgaW4gdGhlIGN1cnJlbnRcbiYjNDM7ICogZmFzdCBjb21taXQuICBNYWludGFpbnMgYSBzbWFsbCwgYm91bmRlZCBzZXQgb2Ygc29ydGVkLCBtdXR1YWxseSBkaXNqb2ludFxuJiM0MzsgKiByYW5nZXMsIG1lcmdpbmcgdGhlIG5ldyByYW5nZSB3aXRoIGFueSBpdCBvdmVybGFwcyBvciBpcyBhZGphY2VudCB0by4gIFdoZW5cbiYjNDM7ICogdGhlIHNldCB3b3VsZCBleGNlZWQgRVhUNF9GQ19NQVhfUkFOR0VTLCB0aGUgY29uc2VjdXRpdmUgcGFpciBzZXBhcmF0ZWQgYnlcbiYjNDM7ICogdGhlIHNtYWxsZXN0IGdhcCBpcyBtZXJnZWQgKGFic29yYmluZyB0aGF0IGdhcCksIHNvIHRoZSB3b3JzdCBjYXNlIGRlZ3JhZGVzXG4mIzQzOyAqIGdyYWNlZnVsbHkgdG8gdGhlIG9sZCBzaW5nbGUgY29hbGVzY2VkLXJhbmdlIGJlaGF2aW91ci4gIFRyYWNraW5nIHRoZSBhY3R1YWxcbiYjNDM7ICogbW9kaWZpZWQgcmFuZ2VzIChyYXRoZXIgdGhhbiBvbmUgW21pbixtYXhdIHNwYW4pIGtlZXBzXG4mIzQzOyAqIGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YSgpIGZyb20gc25hcHNob3R0aW5nIHRoZSB3aG9sZSBzcGFubmVkIGV4dGVudCBtYXBcbiYjNDM7ICogb24gc2NhdHRlcmVkIGFsbG9jYXRpb25zLiAgQ2FsbGVyIGhvbGRzIGVpLVx1MDAzZWlfZmNfbG9jazsgZWktXHUwMDNlaV9mY19yYW5nZXMgaXNcbiYjNDM7ICogbm9uLU5VTEwgd2l0aCByb29tIGZvciBFWFQ0X0ZDX01BWF9SQU5HRVMgJiM0MzsgMSBlbnRyaWVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZXh0NF9mY19yYW5nZV9hZGQoc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWksXG4mIzQzO1x0XHRcdCAgICAgIGV4dDRfbGJsa190IHN0YXJ0LCBleHQ0X2xibGtfdCBlbmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZXh0NF9mY19sYmxrX3JhbmdlICpyID0gZWktXHUwMDNlaV9mY19yYW5nZXM7XG4mIzQzO1x0dW5zaWduZWQgaW50IG4gPSBlaS1cdTAwM2VpX2ZjX25yX3JhbmdlcztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaSwgajtcbiYjNDM7XG4mIzQzO1x0LyogU2tpcCByYW5nZXMgbHlpbmcgZW50aXJlbHkgYmVmb3JlIFtzdGFydCAtIDFdIChubyBvdmVybGFwL2FkamFjZW5jeSkuICovXG4mIzQzO1x0aSA9IDA7XG4mIzQzO1x0d2hpbGUgKGkgXHUwMDNjIG4gXHUwMDI2XHUwMDI2IHJbaV0uc3RhcnQgJiM0MzsgcltpXS5sZW4gXHUwMDNjIHN0YXJ0KVxuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdC8qIEFic29yYiBldmVyeSByYW5nZSBvdmVybGFwcGluZyBvciBhZGphY2VudCB0byB0aGUgZ3Jvd2luZyBbc3RhcnQsZW5kXS4gKi9cbiYjNDM7XHRqID0gaTtcbiYjNDM7XHR3aGlsZSAoaiBcdTAwM2MgbiBcdTAwMjZcdTAwMjYgcltqXS5zdGFydCBcdTAwM2M9IGVuZCAmIzQzOyAxKSB7XG4mIzQzO1x0XHRpZiAocltqXS5zdGFydCBcdTAwM2Mgc3RhcnQpXG4mIzQzO1x0XHRcdHN0YXJ0ID0gcltqXS5zdGFydDtcbiYjNDM7XHRcdGlmIChyW2pdLnN0YXJ0ICYjNDM7IHJbal0ubGVuIC0gMSBcdTAwM2UgZW5kKVxuJiM0MztcdFx0XHRlbmQgPSByW2pdLnN0YXJ0ICYjNDM7IHJbal0ubGVuIC0gMTtcbiYjNDM7XHRcdGomIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUmVwbGFjZSByW2kuLmotMV0gd2l0aCB0aGUgbWVyZ2VkIHJhbmdlIChqID09IGkgaXMgYSBwbGFpbiBpbnNlcnQpLiAqL1xuJiM0MztcdGlmIChqICE9IGkgJiM0MzsgMSlcbiYjNDM7XHRcdG1lbW1vdmUoXHUwMDI2cltpICYjNDM7IDFdLCBcdTAwMjZyW2pdLCAobiAtIGopICogc2l6ZW9mKCpyKSk7XG4mIzQzO1x0cltpXS5zdGFydCA9IHN0YXJ0O1xuJiM0MztcdHJbaV0ubGVuID0gZW5kIC0gc3RhcnQgJiM0MzsgMTtcbiYjNDM7XHRlaS1cdTAwM2VpX2ZjX25yX3JhbmdlcyA9IG4gLSAoaiAtIGkpICYjNDM7IDE7XG4mIzQzO1xuJiM0MztcdC8qIE92ZXJmbG93OiBtZXJnZSB0aGUgY29uc2VjdXRpdmUgcGFpciBzZXBhcmF0ZWQgYnkgdGhlIHNtYWxsZXN0IGdhcC4gKi9cbiYjNDM7XHR3aGlsZSAoZWktXHUwMDNlaV9mY19ucl9yYW5nZXMgXHUwMDNlIEVYVDRfRkNfTUFYX1JBTkdFUykge1xuJiM0MztcdFx0ZXh0NF9sYmxrX3QgYmVzdF9nYXAgPSB+MFU7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgYmVzdCA9IDA7XG4mIzQzO1xuJiM0MztcdFx0biA9IGVpLVx1MDAzZWlfZmNfbnJfcmFuZ2VzO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSAmIzQzOyAxIFx1MDAzYyBuOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRleHQ0X2xibGtfdCBnYXAgPSByW2kgJiM0MzsgMV0uc3RhcnQgLVxuJiM0MztcdFx0XHRcdFx0ICAocltpXS5zdGFydCAmIzQzOyByW2ldLmxlbik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoZ2FwIFx1MDAzYyBiZXN0X2dhcCkge1xuJiM0MztcdFx0XHRcdGJlc3RfZ2FwID0gZ2FwO1xuJiM0MztcdFx0XHRcdGJlc3QgPSBpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyW2Jlc3RdLmxlbiA9IHJbYmVzdCAmIzQzOyAxXS5zdGFydCAmIzQzOyByW2Jlc3QgJiM0MzsgMV0ubGVuIC0gcltiZXN0XS5zdGFydDtcbiYjNDM7XHRcdG1lbW1vdmUoXHUwMDI2cltiZXN0ICYjNDM7IDFdLCBcdTAwMjZyW2Jlc3QgJiM0MzsgMl0sXG4mIzQzO1x0XHRcdChuIC0gYmVzdCAtIDIpICogc2l6ZW9mKCpyKSk7XG4mIzQzO1x0XHRlaS1cdTAwM2VpX2ZjX25yX3JhbmdlcyA9IG4gLSAxO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKiBfX3RyYWNrX2ZuIGZvciB0cmFja2luZyBkYXRhIHVwZGF0ZXMgKi9cbiBzdGF0aWMgaW50IF9fdHJhY2tfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYXJnLFxuIFx0XHRcdCBib29sIHVwZGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4tXHRleHQ0X2xibGtfdCBvbGRzdGFydDtcbiBcdHN0cnVjdCBfX3RyYWNrX3JhbmdlX2FyZ3MgKl9fYXJnID1cbiBcdFx0KHN0cnVjdCBfX3RyYWNrX3JhbmdlX2FyZ3MgKilhcmc7XG4mIzQzO1x0ZXh0NF9sYmxrX3Qgc3RhcnQgPSBfX2FyZy1cdTAwM2VzdGFydCwgZW5kID0gX19hcmctXHUwMDNlZW5kO1xuJiM0MztcdGV4dDRfbGJsa190IHMwLCBlMDtcbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX2lubyBcdTAwM2MgRVhUNF9GSVJTVF9JTk8oaW5vZGUtXHUwMDNlaV9zYikpIHtcbiBcdFx0ZXh0NF9kZWJ1ZyhcJiMzNDtTcGVjaWFsIGlub2RlICVsbHUgYmVpbmcgbW9kaWZpZWRcXG5cJiMzNDssIGlub2RlLVx1MDAzZWlfaW5vKTtcbiBcdFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XG4gXHR9XG4gXG4tXHRvbGRzdGFydCA9IGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgc3ViLWJsb2NrIHB1bmNoIGhvbGUgcm91bmRzIHVwIHRoZSBzdGFydCBhbmQgZG93biB0aGUgZW5kLCBwYXNzaW5nXG4mIzQzO1x0ICogZW5kID09IHN0YXJ0IC0gMTogbm8gd2hvbGUgYmxvY2sgY2hhbmdlZCwgc28gdGhlcmUgaXMgbm90aGluZyB0b1xuJiM0MztcdCAqIHRyYWNrLiAgKGV4dDRfZmNfdHJhY2tfdGVtcGxhdGUgaGFzIGFscmVhZHkgcmVzZXQgdGhlIHJhbmdlIHNldCBmb3IgYVxuJiM0MztcdCAqIG5ldyB0cmFuc2FjdGlvbiwgc28gd2UgbmVlZCBub3QgZG8gaXQgaGVyZS4pXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGVuZCBcdTAwM2Mgc3RhcnQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICh1cGRhdGUgXHUwMDI2XHUwMDI2IGVpLVx1MDAzZWlfZmNfbGJsa19sZW4gXHUwMDNlIDApIHtcbi1cdFx0ZWktXHUwMDNlaV9mY19sYmxrX3N0YXJ0ID0gbWluKGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydCwgX19hcmctXHUwMDNlc3RhcnQpO1xuLVx0XHRlaS1cdTAwM2VpX2ZjX2xibGtfbGVuID1cbi1cdFx0XHRtYXgob2xkc3RhcnQgJiM0MzsgZWktXHUwMDNlaV9mY19sYmxrX2xlbiAtIDEsIF9fYXJnLVx1MDAzZWVuZCkgLVxuLVx0XHRcdFx0ZWktXHUwMDNlaV9mY19sYmxrX3N0YXJ0ICYjNDM7IDE7XG4tXHR9IGVsc2Uge1xuLVx0XHRlaS1cdTAwM2VpX2ZjX2xibGtfc3RhcnQgPSBfX2FyZy1cdTAwM2VzdGFydDtcbi1cdFx0ZWktXHUwMDNlaV9mY19sYmxrX2xlbiA9IF9fYXJnLVx1MDAzZWVuZCAtIF9fYXJnLVx1MDAzZXN0YXJ0ICYjNDM7IDE7XG4mIzQzO1x0LyogQWxyZWFkeSB1cGdyYWRlZCB0byB0aGUgaGVhcCBhcnJheTogZnVsbCBtdWx0aS1pbnRlcnZhbCB0cmFja2luZy4gKi9cbiYjNDM7XHRpZiAoZWktXHUwMDNlaV9mY19yYW5nZXMpIHtcbiYjNDM7XHRcdGV4dDRfZmNfcmFuZ2VfYWRkKGVpLCBzdGFydCwgZW5kKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRmlyc3QgcmFuZ2Ugb2YgdGhpcyBjb21taXQgc3RheXMgaW5saW5lLCBubyBhbGxvY2F0aW9uIG5lZWRlZC4gKi9cbiYjNDM7XHRpZiAoZWktXHUwMDNlaV9mY19ucl9yYW5nZXMgPT0gMCkge1xuJiM0MztcdFx0ZWktXHUwMDNlaV9mY19yYW5nZS5zdGFydCA9IHN0YXJ0O1xuJiM0MztcdFx0ZWktXHUwMDNlaV9mY19yYW5nZS5sZW4gPSBlbmQgLSBzdGFydCAmIzQzOyAxO1xuJiM0MztcdFx0ZWktXHUwMDNlaV9mY19ucl9yYW5nZXMgPSAxO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBPbmUgaW5saW5lIHJhbmdlIHNvIGZhci4gKi9cbiYjNDM7XHRzMCA9IGVpLVx1MDAzZWlfZmNfcmFuZ2Uuc3RhcnQ7XG4mIzQzO1x0ZTAgPSBzMCAmIzQzOyBlaS1cdTAwM2VpX2ZjX3JhbmdlLmxlbiAtIDE7XG4mIzQzO1xuJiM0MztcdC8qIERpc2pvaW50IGZyb20gaXQ6IHRyeSB0byB1cGdyYWRlIHRvIHRoZSBhcnJheSBmb3IgZXhhY3QgdHJhY2tpbmcuICovXG4mIzQzO1x0aWYgKHN0YXJ0IFx1MDAzZSBlMCAmIzQzOyAxIHx8IGVuZCAmIzQzOyAxIFx1MDAzYyBzMCkge1xuJiM0MztcdFx0c3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSAqaGVhcDtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogR0ZQX0FUT01JQzogd2UgaG9sZCBpX2ZjX2xvY2suICBfX0dGUF9OT1dBUk46IGZhaWx1cmUgaXMgbm90XG4mIzQzO1x0XHQgKiBmYXRhbCAtLSB3ZSBmYWxsIGJhY2sgdG8gdGhlIHNpbmdsZSBjb2FsZXNjZWQgcmFuZ2UgYmVsb3cgLS1cbiYjNDM7XHRcdCAqIHNvIGl0IG11c3Qgbm90IHNwbGF0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aGVhcCA9IGttYWxsb2NfYXJyYXkoRVhUNF9GQ19NQVhfUkFOR0VTICYjNDM7IDEsIHNpemVvZigqaGVhcCksXG4mIzQzO1x0XHRcdFx0ICAgICBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcbiYjNDM7XHRcdGlmIChoZWFwKSB7XG4mIzQzO1x0XHRcdGhlYXBbMF0gPSBlaS1cdTAwM2VpX2ZjX3JhbmdlO1xuJiM0MztcdFx0XHRlaS1cdTAwM2VpX2ZjX3JhbmdlcyA9IGhlYXA7XG4mIzQzO1x0XHRcdGV4dDRfZmNfcmFuZ2VfYWRkKGVpLCBzdGFydCwgZW5kKTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogT3V0IG9mIG1lbW9yeTogZmFsbCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzaW5nbGUgY29hbGVzY2VkXG4mIzQzO1x0XHQgKiByYW5nZSBieSBhYnNvcmJpbmcgdGhlIGdhcCBiZWxvdy4gIFRoaXMgb3Zlci1sb2dzIHRoZSBzcGFubmVkXG4mIzQzO1x0XHQgKiBleHRlbnRzIGJ1dCBzdGF5cyBhIHZhbGlkIGZhc3QgY29tbWl0IChubyBmdWxsLWNvbW1pdFxuJiM0MztcdFx0ICogZmFsbGJhY2spLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIG1hcmsgaW5lbGlnaWJsZS5cbiYjNDM7XHRcdCAqL1xuIFx0fVxuIFxuJiM0MztcdC8qIE92ZXJsYXBwaW5nL2FkamFjZW50LCBvciBhcnJheSBhbGxvY2F0aW9uIGZhaWxlZDogY29hbGVzY2UgaW5saW5lLiAqL1xuJiM0MztcdGlmIChzdGFydCBcdTAwM2MgczApXG4mIzQzO1x0XHRzMCA9IHN0YXJ0O1xuJiM0MztcdGlmIChlbmQgXHUwMDNlIGUwKVxuJiM0MztcdFx0ZTAgPSBlbmQ7XG4mIzQzO1x0ZWktXHUwMDNlaV9mY19yYW5nZS5zdGFydCA9IHMwO1xuJiM0MztcdGVpLVx1MDAzZWlfZmNfcmFuZ2UubGVuID0gZTAgLSBzMCAmIzQzOyAxO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC05OTQsMzEgJiM0MzsxMTA2LDI2IEBAIHN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZV9pbm9kZV9zbmFwKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRlaS1cdTAwM2VpX2ZjX3NuYXAgPSBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MzsvKlxuJiM0MzsgKiBTbmFwc2hvdCBvbmUgbW9kaWZpZWQgbGJsayByYW5nZSBbc3RhcnRfbGJsaywgZW5kX2xibGtdIGludG8gQHJhbmdlcyBieVxuJiM0MzsgKiB3YWxraW5nIHRoZSBleHRlbnQgc3RhdHVzIHRyZWUsIGVtaXR0aW5nIGFuIEFERF9SQU5HRSBwZXIgbWFwcGVkIHNlZ21lbnQgYW5kXG4mIzQzOyAqIGEgREVMX1JBTkdFIHBlciBob2xlLiAgKm5yX3JhbmdlcyBhY2N1bXVsYXRlcyB0aGUgbnVtYmVyIG9mIHJhbmdlcyBwcm9kdWNlZFxuJiM0MzsgKiBmb3IgdGhpcyBpbm9kZSBhY3Jvc3MgY2FsbHM7IHRvZ2V0aGVyIHdpdGggbnJfcmFuZ2VzX3RvdGFsIChyYW5nZXMgYWxyZWFkeVxuJiM0MzsgKiBwcm9kdWNlZCBieSBlYXJsaWVyIGlub2RlcyBpbiB0aGlzIGNvbW1pdCkgaXQgaXMgYm91bmRlZCBhZ2FpbnN0XG4mIzQzOyAqIEVYVDRfRkNfU05BUFNIT1RfTUFYX1JBTkdFUy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZXh0NF9mY19zbmFwc2hvdF9sYmxrX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGV4dDRfbGJsa190IHN0YXJ0X2xibGssXG4mIzQzO1x0XHRcdFx0ICAgICAgIGV4dDRfbGJsa190IGVuZF9sYmxrLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJhbmdlcyxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzX3RvdGFsLFxuLVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCAqbnJfcmFuZ2VzcCxcbiYjNDM7XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50ICpucl9yYW5nZXMsXG4gXHRcdFx0XHQgICAgICAgaW50ICpzbmFwX2VycilcbiB7XG4tXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4gXHRzdHJ1Y3QgZXh0NF9mY19zbmFwX3N0YXRzICpzdGF0cyA9XG4gXHRcdFx1MDAyNkVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19mY19zbmFwX3N0YXRzO1xuLVx0ZXh0NF9sYmxrX3Qgc3RhcnRfbGJsaywgZW5kX2xibGssIGN1cl9sYmxrO1xuLVx0dW5zaWduZWQgaW50IG5yX3JhbmdlcyA9IDA7XG4tXG4tXHRzcGluX2xvY2soXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbi1cdGlmIChlaS1cdTAwM2VpX2ZjX2xibGtfbGVuID09IDApIHtcbi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbi1cdFx0aWYgKG5yX3Jhbmdlc3ApXG4tXHRcdFx0Km5yX3Jhbmdlc3AgPSAwO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cdHN0YXJ0X2xibGsgPSBlaS1cdTAwM2VpX2ZjX2xibGtfc3RhcnQ7XG4tXHRlbmRfbGJsayA9IGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydCAmIzQzOyBlaS1cdTAwM2VpX2ZjX2xibGtfbGVuIC0gMTtcbi1cdGVpLVx1MDAzZWlfZmNfbGJsa19sZW4gPSAwO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbiYjNDM7XHRleHQ0X2xibGtfdCBjdXJfbGJsayA9IHN0YXJ0X2xibGs7XG4gXG4tXHRjdXJfbGJsayA9IHN0YXJ0X2xibGs7XG4gXHRleHQ0X2RlYnVnKFwmIzM0O3NuYXBzaG90IGRhdGEgcmFuZ2VzICV1LSV1IGZvciBpbm9kZSAlbGx1XFxuXCYjMzQ7LFxuIFx0XHQgICBzdGFydF9sYmxrLCBlbmRfbGJsayxcbiBcdFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbm9kZS1cdTAwM2VpX2lubyk7XG5AQCAtMTA1MCw3ICYjNDM7MTE1Nyw3IEBAIHN0YXRpYyBpbnQgZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKG5yX3Jhbmdlc190b3RhbCAmIzQzOyBucl9yYW5nZXMgXHUwMDNlPSBFWFQ0X0ZDX1NOQVBTSE9UX01BWF9SQU5HRVMpIHtcbiYjNDM7XHRcdGlmIChucl9yYW5nZXNfdG90YWwgJiM0MzsgKm5yX3JhbmdlcyBcdTAwM2U9IEVYVDRfRkNfU05BUFNIT1RfTUFYX1JBTkdFUykge1xuIFx0XHRcdGF0b21pYzY0X2luYyhcdTAwMjZzdGF0cy1cdTAwM2VzbmFwX2ZhaWxfcmFuZ2VzX2NhcCk7XG4gXHRcdFx0ZXh0NF9mY19zZXRfc25hcF9lcnIoc25hcF9lcnIsXG4gXHRcdFx0XHRcdCAgICAgRVhUNF9GQ19TTkFQX0VSUl9SQU5HRVNfQ0FQKTtcbkBAIC0xMDYzLDcgJiM0MzsxMTcwLDcgQEAgc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X2ZjX3NldF9zbmFwX2VycihzbmFwX2VyciwgRVhUNF9GQ19TTkFQX0VSUl9OT01FTSk7XG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdH1cbi1cdFx0bnJfcmFuZ2VzJiM0MzsmIzQzOztcbiYjNDM7XHRcdCgqbnJfcmFuZ2VzKSYjNDM7JiM0Mzs7XG4gXG4gXHRcdHJhbmdlLVx1MDAzZWxibGsgPSBjdXJfbGJsaztcbiBcdFx0cmFuZ2UtXHUwMDNlbGVuID0gbGVuO1xuQEAgLTExMDEsNiAmIzQzOzEyMDgsNTIgQEAgc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0Y3VyX2xibGsgJiM0Mzs9IHJhbmdlLVx1MDAzZWxlbjtcbiBcdH1cbiBcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqcmFuZ2VzLFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzX3RvdGFsLFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgKm5yX3Jhbmdlc3AsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGludCAqc25hcF9lcnIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4mIzQzO1x0c3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSB0cmFja2VkW0VYVDRfRkNfTUFYX1JBTkdFUyAmIzQzOyAxXTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzID0gMCwgbnJfdHJhY2tlZCwgdDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbiYjNDM7XHRucl90cmFja2VkID0gZWktXHUwMDNlaV9mY19ucl9yYW5nZXM7XG4mIzQzO1x0aWYgKG5yX3RyYWNrZWQgPT0gMCkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbiYjNDM7XHRcdGlmIChucl9yYW5nZXNwKVxuJiM0MztcdFx0XHQqbnJfcmFuZ2VzcCA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGVpLVx1MDAzZWlfZmNfcmFuZ2VzKVxuJiM0MztcdFx0bWVtY3B5KHRyYWNrZWQsIGVpLVx1MDAzZWlfZmNfcmFuZ2VzLFxuJiM0MztcdFx0ICAgICAgIG5yX3RyYWNrZWQgKiBzaXplb2YodHJhY2tlZFswXSkpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHRyYWNrZWRbMF0gPSBlaS1cdTAwM2VpX2ZjX3JhbmdlO1x0LyogaW5saW5lIHNpbmdsZS1yYW5nZSBtb2RlICovXG4mIzQzO1x0ZWktXHUwMDNlaV9mY19ucl9yYW5nZXMgPSAwO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmVpLVx1MDAzZWlfZmNfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU25hcHNob3Qgb25seSB0aGUgYWN0dWFsbHktbW9kaWZpZWQgcmFuZ2VzLCBub3QgdGhlIHdob2xlIFttaW4sbWF4XVxuJiM0MztcdCAqIHNwYW46IHRoaXMgaXMgd2hhdCBrZWVwcyBzY2F0dGVyZWQgYWxsb2NhdGlvbnMgZnJvbSBibG93aW5nIHBhc3RcbiYjNDM7XHQgKiBFWFQ0X0ZDX1NOQVBTSE9UX01BWF9SQU5HRVMgYW5kIGZhbGxpbmcgYmFjayB0byBhIGZ1bGwgY29tbWl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAodCA9IDA7IHQgXHUwMDNjIG5yX3RyYWNrZWQ7IHQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRleHQ0X2xibGtfdCBzID0gdHJhY2tlZFt0XS5zdGFydDtcbiYjNDM7XHRcdGV4dDRfbGJsa190IGUgPSBzICYjNDM7IHRyYWNrZWRbdF0ubGVuIC0gMTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2UoaW5vZGUsIHMsIGUsIHJhbmdlcyxcbiYjNDM7XHRcdFx0XHRcdFx0ICBucl9yYW5nZXNfdG90YWwsIFx1MDAyNm5yX3JhbmdlcyxcbiYjNDM7XHRcdFx0XHRcdFx0ICBzbmFwX2Vycik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAobnJfcmFuZ2VzcClcbiBcdFx0Km5yX3Jhbmdlc3AgPSBucl9yYW5nZXM7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IGYyYzUyY2M3NDY3NjU1Li5jZmE3ZTZiZWMzODVlNiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtMTQ1NSw2ICYjNDM7MTQ1NSw3IEBAIHN0YXRpYyB2b2lkIGV4dDRfZnJlZV9pbl9jb3JlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdHByX3dhcm4oXCYjMzQ7JXM6IGlub2RlICVsbHUgc3RpbGwgaW4gZmMgbGlzdFwmIzM0OyxcbiBcdFx0XHRfX2Z1bmNfXywgaW5vZGUtXHUwMDNlaV9pbm8pO1xuIFx0fVxuJiM0MztcdGtmcmVlKEVYVDRfSShpbm9kZSktXHUwMDNlaV9mY19yYW5nZXMpO1xuIFx0a21lbV9jYWNoZV9mcmVlKGV4dDRfaW5vZGVfY2FjaGVwLCBFWFQ0X0koaW5vZGUpKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZmNfcmFuZ2VfYWRkJiMzNDssCiAgICAmIzM0O19fdHJhY2tfcmFuZ2UmIzM0OywKICAgICYjMzQ7ZXh0NF9mY19zbmFwc2hvdF9sYmxrX3JhbmdlJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGhvdyBleHQ0IGZhc3QgY29tbWl0cyB0cmFjayBtb2RpZmllZCBsb2dpY2FsIGJsb2NrIHJhbmdlcywgbW92aW5nIGZyb20gYSBzaW5nbGUgY29hbGVzY2VkIHJhbmdlIHRvIHRyYWNraW5nIG11bHRpcGxlIGRpc2pvaW50IHJhbmdlcy4gVGhpcyBpbnZvbHZlcyBuZXcgYXJyYXkgbWFuaXB1bGF0aW9uLCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIGV4dGVudCB0cmFja2luZyBsb2dpYyBpbiB0aGUgZmFzdCBjb21taXQgcGF0aCwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBwcmV2ZW50IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmI5YTRlYWQ5ZmYwN2JkZDdhMDk2OWQyYWRmNTVkZmNhZWZmYTFkMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDIzIDA5OjM2OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaAppbmRleCBkZGM5MDM3MzhjNmIzMy4uZDkzY2M1MmNkMDFlZDAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC0xMDQyLDYgJiM0MzsxMDQyLDIwIEBAIGVudW0gZXh0NF9mY19zbmFwX2VyciB7CiAJRVhUNF9GQ19TTkFQX0VSUl9JTk9ERV9MT0MsCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBNYXhpbXVtIG51bWJlciBvZiBkaXNqb2ludCBsb2dpY2FsLWJsb2NrIHJhbmdlcyB0cmFja2VkIHBlciBpbm9kZSBmb3IgYQomIzQzOyAqIHNpbmdsZSBmYXN0IGNvbW1pdC4gIFNjYXR0ZXJlZCBhbGxvY2F0aW9ucyB0aGF0IGV4Y2VlZCB0aGlzIGdldCB0aGVpciB0d28KJiM0MzsgKiBjbG9zZXN0IHJhbmdlcyBtZXJnZWQgKHNlZSBleHQ0X2ZjX3JhbmdlX2FkZCgpKSwgZGVncmFkaW5nIGdyYWNlZnVsbHkgdG8KJiM0MzsgKiB0aGUgb2xkIHNpbmdsZSBjb2FsZXNjZWQtcmFuZ2UgYmVoYXZpb3VyLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgRVhUNF9GQ19NQVhfUkFOR0VTIDE2CiYjNDM7CiYjNDM7LyogSW4tbWVtb3J5IHJlY29yZCBvZiBhbiBsYmxrIHJhbmdlIG1vZGlmaWVkIGluIHRoZSBjdXJyZW50IGZhc3QgY29tbWl0LiAqLwomIzQzO3N0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2UgewomIzQzOwlleHQ0X2xibGtfdCBzdGFydDsKJiM0MzsJZXh0NF9sYmxrX3QgbGVuOwomIzQzO307CiYjNDM7CiAvKgogICogZm91cnRoIGV4dGVuZGVkIGZpbGUgc3lzdGVtIGlub2RlIGRhdGEgaW4gbWVtb3J5CiAgKi8KQEAgLTEwOTEsMTEgJiM0MzsxMTA1LDI1IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8gewogCQkJCQkgKiBwcm90ZWN0ZWQgYnkgc2JpLSZndDtzX2ZjX2xvY2suCiAJCQkJCSAqLwogCi0JLyogU3RhcnQgb2YgbGJsayByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGNvbW1pdHRlZCBpbiB0aGlzIGZhc3QgY29tbWl0ICovCi0JZXh0NF9sYmxrX3QgaV9mY19sYmxrX3N0YXJ0OwotCi0JLyogRW5kIG9mIGxibGsgcmFuZ2UgdGhhdCBuZWVkcyB0byBiZSBjb21taXR0ZWQgaW4gdGhpcyBmYXN0IGNvbW1pdCAqLwotCWV4dDRfbGJsa190IGlfZmNfbGJsa19sZW47CiYjNDM7CS8qCiYjNDM7CSAqIExvZ2ljYWwgYmxvY2sgcmFuZ2VzIG1vZGlmaWVkIGluIHRoaXMgZmFzdCBjb21taXQuICBUcmFja2luZyB0aGUKJiM0MzsJICogYWN0dWFsIG1vZGlmaWVkIHJhbmdlcyAoaW5zdGVhZCBvZiBvbmUgY29hbGVzY2VkIFttaW4sbWF4XSkgYXZvaWRzCiYjNDM7CSAqIHNuYXBzaG90dGluZyB0aGUgd2hvbGUgc3Bhbm5lZCBleHRlbnQgbWFwIGZvciBzY2F0dGVyZWQgYWxsb2NhdGlvbnMuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBmaXJzdCByYW5nZSBpcyBrZXB0IGlubGluZSBpbiBpX2ZjX3JhbmdlLCBzbyB0aGUgY29tbW9uIGNhc2Ugb2YgYQomIzQzOwkgKiBzaW5nbGUgY29udGlndW91cyBkaXJ0eSByZWdpb24gbmVlZHMgbm8gYWxsb2NhdGlvbi4gIFdoZW4gYSBzZWNvbmQKJiM0MzsJICogZGlzam9pbnQgcmFuZ2UgYXBwZWFycyB0aGUgaW5vZGUgaXMgdXBncmFkZWQgdG8gdGhlIGlfZmNfcmFuZ2VzIGFycmF5CiYjNDM7CSAqIChFWFQ0X0ZDX01BWF9SQU5HRVMgJiM0MzsgMSBlbnRyaWVzLCBzb3J0ZWQgYW5kIG11dHVhbGx5IGRpc2pvaW50OyB0aGUKJiM0MzsJICogZXh0cmEgc2xvdCBpcyB0cmFuc2llbnQgcm9vbSB1c2VkIHdoaWxlIGluc2VydGluZyBiZWZvcmUgYW4gb3ZlcmZsb3cKJiM0MzsJICogbWVyZ2UpLCBhbGxvY2F0ZWQgdGhlbiBhbmQgZnJlZWQgd2hlbiB0aGUgaW5vZGUgaXMgZXZpY3RlZC4gIElmIHRoYXQKJiM0MzsJICogYWxsb2NhdGlvbiBmYWlscyB3ZSBmYWxsIGJhY2sgdG8gY29hbGVzY2luZyBpbnRvIGlfZmNfcmFuZ2UsIGkuZS4gdGhlCiYjNDM7CSAqIG9yaWdpbmFsIHNpbmdsZSBjb2FsZXNjZWQtcmFuZ2UgYmVoYXZpb3VyLiAgaV9mY19ucl9yYW5nZXMgY291bnRzIHRoZQomIzQzOwkgKiB2YWxpZCByYW5nZXM7IHdoaWxlIGlfZmNfcmFuZ2VzIGlzIE5VTEwgaXQgaXMgMCBvciAxLiAgUHJvdGVjdGVkIGJ5CiYjNDM7CSAqIGlfZmNfbG9jay4KJiM0MzsJICovCiYjNDM7CXN0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2UgaV9mY19yYW5nZTsKJiM0MzsJc3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSAqaV9mY19yYW5nZXM7CiYjNDM7CXVuc2lnbmVkIGludCBpX2ZjX25yX3JhbmdlczsKIAogCS8qCiAJICogQ29tbWl0LXRpbWUgZmFzdCBjb21taXQgc25hcHNob3RzLgpAQCAtMTExNiw4ICYjNDM7MTE0NCw4IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8gewogCXNwaW5sb2NrX3QgaV9yYXdfbG9jazsJLyogcHJvdGVjdHMgdXBkYXRlcyB0byB0aGUgcmF3IGlub2RlICovCiAKIAkvKgotCSAqIFByb3RlY3QgY29uY3VycmVudCBhY2Nlc3NlcyBvbiBpX2ZjX2xibGtfc3RhcnQsIGlfZmNfbGJsa19sZW4KLQkgKiBhbmQgaW5vZGUmIzM5O3MgRVhUNF9GQ19TVEFURV9DT01NSVRUSU5HIHN0YXRlIGJpdC4KJiM0MzsJICogUHJvdGVjdCBjb25jdXJyZW50IGFjY2Vzc2VzIG9uIGlfZmNfcmFuZ2UsIGlfZmNfcmFuZ2VzLAomIzQzOwkgKiBpX2ZjX25yX3JhbmdlcyBhbmQgaW5vZGUmIzM5O3MgRVhUNF9GQ19TVEFURV9DT01NSVRUSU5HIHN0YXRlIGJpdC4KIAkgKi8KIAlzcGlubG9ja190IGlfZmNfbG9jazsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jCmluZGV4IDRlZjc5NmI5YjZjYjVmLi45ZDM2MzY1ZWFlMDJiYSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZmFzdF9jb21taXQuYwpAQCAtMjIyLDggJiM0MzsyMjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9mY19yZXNldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTsKIAotCWVpLSZndDtpX2ZjX2xibGtfc3RhcnQgPSAwOwotCWVpLSZndDtpX2ZjX2xibGtfbGVuID0gMDsKJiM0MzsJZWktJmd0O2lfZmNfbnJfcmFuZ2VzID0gMDsKIH0KIAogdm9pZCBleHQ0X2ZjX2luaXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTIzMSw2ICYjNDM7MjMwLDcgQEAgdm9pZCBleHQ0X2ZjX2luaXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CiAKIAlleHQ0X2ZjX3Jlc2V0X2lub2RlKGlub2RlKTsKJiM0MzsJZWktJmd0O2lfZmNfcmFuZ2VzID0gTlVMTDsKIAlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX0ZDX0NPTU1JVFRJTkcpOwogCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfRkNfUkVRVUVVRSk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtlaS0mZ3Q7aV9mY19saXN0KTsKQEAgLTU4Miw3ICYjNDM7NTgyLDcgQEAgc3RhdGljIGludCBfX3RyYWNrX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmFyZywKIAlpZiAodXBkYXRlKQogCQlyZXR1cm4gLUVFWElTVDsKIAotCUVYVDRfSShpbm9kZSktJmd0O2lfZmNfbGJsa19sZW4gPSAwOwomIzQzOwlFWFQ0X0koaW5vZGUpLSZndDtpX2ZjX25yX3JhbmdlcyA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYyMiwzMiAmIzQzOzYyMiwxNDQgQEAgc3RydWN0IF9fdHJhY2tfcmFuZ2VfYXJncyB7CiAJZXh0NF9sYmxrX3Qgc3RhcnQsIGVuZDsKIH07CiAKJiM0MzsvKgomIzQzOyAqIFJlY29yZCB0aGF0IGxvZ2ljYWwgYmxvY2sgcmFuZ2UgW3N0YXJ0LCBlbmRdIHdhcyBtb2RpZmllZCBpbiB0aGUgY3VycmVudAomIzQzOyAqIGZhc3QgY29tbWl0LiAgTWFpbnRhaW5zIGEgc21hbGwsIGJvdW5kZWQgc2V0IG9mIHNvcnRlZCwgbXV0dWFsbHkgZGlzam9pbnQKJiM0MzsgKiByYW5nZXMsIG1lcmdpbmcgdGhlIG5ldyByYW5nZSB3aXRoIGFueSBpdCBvdmVybGFwcyBvciBpcyBhZGphY2VudCB0by4gIFdoZW4KJiM0MzsgKiB0aGUgc2V0IHdvdWxkIGV4Y2VlZCBFWFQ0X0ZDX01BWF9SQU5HRVMsIHRoZSBjb25zZWN1dGl2ZSBwYWlyIHNlcGFyYXRlZCBieQomIzQzOyAqIHRoZSBzbWFsbGVzdCBnYXAgaXMgbWVyZ2VkIChhYnNvcmJpbmcgdGhhdCBnYXApLCBzbyB0aGUgd29yc3QgY2FzZSBkZWdyYWRlcwomIzQzOyAqIGdyYWNlZnVsbHkgdG8gdGhlIG9sZCBzaW5nbGUgY29hbGVzY2VkLXJhbmdlIGJlaGF2aW91ci4gIFRyYWNraW5nIHRoZSBhY3R1YWwKJiM0MzsgKiBtb2RpZmllZCByYW5nZXMgKHJhdGhlciB0aGFuIG9uZSBbbWluLG1heF0gc3Bhbikga2VlcHMKJiM0MzsgKiBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoKSBmcm9tIHNuYXBzaG90dGluZyB0aGUgd2hvbGUgc3Bhbm5lZCBleHRlbnQgbWFwCiYjNDM7ICogb24gc2NhdHRlcmVkIGFsbG9jYXRpb25zLiAgQ2FsbGVyIGhvbGRzIGVpLSZndDtpX2ZjX2xvY2s7IGVpLSZndDtpX2ZjX3JhbmdlcyBpcwomIzQzOyAqIG5vbi1OVUxMIHdpdGggcm9vbSBmb3IgRVhUNF9GQ19NQVhfUkFOR0VTICYjNDM7IDEgZW50cmllcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBleHQ0X2ZjX3JhbmdlX2FkZChzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSwKJiM0MzsJCQkgICAgICBleHQ0X2xibGtfdCBzdGFydCwgZXh0NF9sYmxrX3QgZW5kKQomIzQzO3sKJiM0MzsJc3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSAqciA9IGVpLSZndDtpX2ZjX3JhbmdlczsKJiM0MzsJdW5zaWduZWQgaW50IG4gPSBlaS0mZ3Q7aV9mY19ucl9yYW5nZXM7CiYjNDM7CXVuc2lnbmVkIGludCBpLCBqOwomIzQzOwomIzQzOwkvKiBTa2lwIHJhbmdlcyBseWluZyBlbnRpcmVseSBiZWZvcmUgW3N0YXJ0IC0gMV0gKG5vIG92ZXJsYXAvYWRqYWNlbmN5KS4gKi8KJiM0MzsJaSA9IDA7CiYjNDM7CXdoaWxlIChpICZsdDsgbiAmYW1wOyZhbXA7IHJbaV0uc3RhcnQgJiM0MzsgcltpXS5sZW4gJmx0OyBzdGFydCkKJiM0MzsJCWkmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkvKiBBYnNvcmIgZXZlcnkgcmFuZ2Ugb3ZlcmxhcHBpbmcgb3IgYWRqYWNlbnQgdG8gdGhlIGdyb3dpbmcgW3N0YXJ0LGVuZF0uICovCiYjNDM7CWogPSBpOwomIzQzOwl3aGlsZSAoaiAmbHQ7IG4gJmFtcDsmYW1wOyByW2pdLnN0YXJ0ICZsdDs9IGVuZCAmIzQzOyAxKSB7CiYjNDM7CQlpZiAocltqXS5zdGFydCAmbHQ7IHN0YXJ0KQomIzQzOwkJCXN0YXJ0ID0gcltqXS5zdGFydDsKJiM0MzsJCWlmIChyW2pdLnN0YXJ0ICYjNDM7IHJbal0ubGVuIC0gMSAmZ3Q7IGVuZCkKJiM0MzsJCQllbmQgPSByW2pdLnN0YXJ0ICYjNDM7IHJbal0ubGVuIC0gMTsKJiM0MzsJCWomIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFJlcGxhY2UgcltpLi5qLTFdIHdpdGggdGhlIG1lcmdlZCByYW5nZSAoaiA9PSBpIGlzIGEgcGxhaW4gaW5zZXJ0KS4gKi8KJiM0MzsJaWYgKGogIT0gaSAmIzQzOyAxKQomIzQzOwkJbWVtbW92ZSgmYW1wO3JbaSAmIzQzOyAxXSwgJmFtcDtyW2pdLCAobiAtIGopICogc2l6ZW9mKCpyKSk7CiYjNDM7CXJbaV0uc3RhcnQgPSBzdGFydDsKJiM0MzsJcltpXS5sZW4gPSBlbmQgLSBzdGFydCAmIzQzOyAxOwomIzQzOwllaS0mZ3Q7aV9mY19ucl9yYW5nZXMgPSBuIC0gKGogLSBpKSAmIzQzOyAxOwomIzQzOwomIzQzOwkvKiBPdmVyZmxvdzogbWVyZ2UgdGhlIGNvbnNlY3V0aXZlIHBhaXIgc2VwYXJhdGVkIGJ5IHRoZSBzbWFsbGVzdCBnYXAuICovCiYjNDM7CXdoaWxlIChlaS0mZ3Q7aV9mY19ucl9yYW5nZXMgJmd0OyBFWFQ0X0ZDX01BWF9SQU5HRVMpIHsKJiM0MzsJCWV4dDRfbGJsa190IGJlc3RfZ2FwID0gfjBVOwomIzQzOwkJdW5zaWduZWQgaW50IGJlc3QgPSAwOwomIzQzOwomIzQzOwkJbiA9IGVpLSZndDtpX2ZjX25yX3JhbmdlczsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJiM0MzsgMSAmbHQ7IG47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJZXh0NF9sYmxrX3QgZ2FwID0gcltpICYjNDM7IDFdLnN0YXJ0IC0KJiM0MzsJCQkJCSAgKHJbaV0uc3RhcnQgJiM0MzsgcltpXS5sZW4pOwomIzQzOwomIzQzOwkJCWlmIChnYXAgJmx0OyBiZXN0X2dhcCkgewomIzQzOwkJCQliZXN0X2dhcCA9IGdhcDsKJiM0MzsJCQkJYmVzdCA9IGk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwkJcltiZXN0XS5sZW4gPSByW2Jlc3QgJiM0MzsgMV0uc3RhcnQgJiM0MzsgcltiZXN0ICYjNDM7IDFdLmxlbiAtIHJbYmVzdF0uc3RhcnQ7CiYjNDM7CQltZW1tb3ZlKCZhbXA7cltiZXN0ICYjNDM7IDFdLCAmYW1wO3JbYmVzdCAmIzQzOyAyXSwKJiM0MzsJCQkobiAtIGJlc3QgLSAyKSAqIHNpemVvZigqcikpOwomIzQzOwkJZWktJmd0O2lfZmNfbnJfcmFuZ2VzID0gbiAtIDE7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKiBfX3RyYWNrX2ZuIGZvciB0cmFja2luZyBkYXRhIHVwZGF0ZXMgKi8KIHN0YXRpYyBpbnQgX190cmFja19yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICphcmcsCiAJCQkgYm9vbCB1cGRhdGUpCiB7CiAJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwotCWV4dDRfbGJsa190IG9sZHN0YXJ0OwogCXN0cnVjdCBfX3RyYWNrX3JhbmdlX2FyZ3MgKl9fYXJnID0KIAkJKHN0cnVjdCBfX3RyYWNrX3JhbmdlX2FyZ3MgKilhcmc7CiYjNDM7CWV4dDRfbGJsa190IHN0YXJ0ID0gX19hcmctJmd0O3N0YXJ0LCBlbmQgPSBfX2FyZy0mZ3Q7ZW5kOwomIzQzOwlleHQ0X2xibGtfdCBzMCwgZTA7CiAKIAlpZiAoaW5vZGUtJmd0O2lfaW5vICZsdDsgRVhUNF9GSVJTVF9JTk8oaW5vZGUtJmd0O2lfc2IpKSB7CiAJCWV4dDRfZGVidWcoJiMzNDtTcGVjaWFsIGlub2RlICVsbHUgYmVpbmcgbW9kaWZpZWRcbiYjMzQ7LCBpbm9kZS0mZ3Q7aV9pbm8pOwogCQlyZXR1cm4gLUVDQU5DRUxFRDsKIAl9CiAKLQlvbGRzdGFydCA9IGVpLSZndDtpX2ZjX2xibGtfc3RhcnQ7CiYjNDM7CS8qCiYjNDM7CSAqIEEgc3ViLWJsb2NrIHB1bmNoIGhvbGUgcm91bmRzIHVwIHRoZSBzdGFydCBhbmQgZG93biB0aGUgZW5kLCBwYXNzaW5nCiYjNDM7CSAqIGVuZCA9PSBzdGFydCAtIDE6IG5vIHdob2xlIGJsb2NrIGNoYW5nZWQsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8KJiM0MzsJICogdHJhY2suICAoZXh0NF9mY190cmFja190ZW1wbGF0ZSBoYXMgYWxyZWFkeSByZXNldCB0aGUgcmFuZ2Ugc2V0IGZvciBhCiYjNDM7CSAqIG5ldyB0cmFuc2FjdGlvbiwgc28gd2UgbmVlZCBub3QgZG8gaXQgaGVyZS4pCiYjNDM7CSAqLwomIzQzOwlpZiAoZW5kICZsdDsgc3RhcnQpCiYjNDM7CQlyZXR1cm4gMDsKIAotCWlmICh1cGRhdGUgJmFtcDsmYW1wOyBlaS0mZ3Q7aV9mY19sYmxrX2xlbiAmZ3Q7IDApIHsKLQkJZWktJmd0O2lfZmNfbGJsa19zdGFydCA9IG1pbihlaS0mZ3Q7aV9mY19sYmxrX3N0YXJ0LCBfX2FyZy0mZ3Q7c3RhcnQpOwotCQllaS0mZ3Q7aV9mY19sYmxrX2xlbiA9Ci0JCQltYXgob2xkc3RhcnQgJiM0MzsgZWktJmd0O2lfZmNfbGJsa19sZW4gLSAxLCBfX2FyZy0mZ3Q7ZW5kKSAtCi0JCQkJZWktJmd0O2lfZmNfbGJsa19zdGFydCAmIzQzOyAxOwotCX0gZWxzZSB7Ci0JCWVpLSZndDtpX2ZjX2xibGtfc3RhcnQgPSBfX2FyZy0mZ3Q7c3RhcnQ7Ci0JCWVpLSZndDtpX2ZjX2xibGtfbGVuID0gX19hcmctJmd0O2VuZCAtIF9fYXJnLSZndDtzdGFydCAmIzQzOyAxOwomIzQzOwkvKiBBbHJlYWR5IHVwZ3JhZGVkIHRvIHRoZSBoZWFwIGFycmF5OiBmdWxsIG11bHRpLWludGVydmFsIHRyYWNraW5nLiAqLwomIzQzOwlpZiAoZWktJmd0O2lfZmNfcmFuZ2VzKSB7CiYjNDM7CQlleHQ0X2ZjX3JhbmdlX2FkZChlaSwgc3RhcnQsIGVuZCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBGaXJzdCByYW5nZSBvZiB0aGlzIGNvbW1pdCBzdGF5cyBpbmxpbmUsIG5vIGFsbG9jYXRpb24gbmVlZGVkLiAqLwomIzQzOwlpZiAoZWktJmd0O2lfZmNfbnJfcmFuZ2VzID09IDApIHsKJiM0MzsJCWVpLSZndDtpX2ZjX3JhbmdlLnN0YXJ0ID0gc3RhcnQ7CiYjNDM7CQllaS0mZ3Q7aV9mY19yYW5nZS5sZW4gPSBlbmQgLSBzdGFydCAmIzQzOyAxOwomIzQzOwkJZWktJmd0O2lfZmNfbnJfcmFuZ2VzID0gMTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIE9uZSBpbmxpbmUgcmFuZ2Ugc28gZmFyLiAqLwomIzQzOwlzMCA9IGVpLSZndDtpX2ZjX3JhbmdlLnN0YXJ0OwomIzQzOwllMCA9IHMwICYjNDM7IGVpLSZndDtpX2ZjX3JhbmdlLmxlbiAtIDE7CiYjNDM7CiYjNDM7CS8qIERpc2pvaW50IGZyb20gaXQ6IHRyeSB0byB1cGdyYWRlIHRvIHRoZSBhcnJheSBmb3IgZXhhY3QgdHJhY2tpbmcuICovCiYjNDM7CWlmIChzdGFydCAmZ3Q7IGUwICYjNDM7IDEgfHwgZW5kICYjNDM7IDEgJmx0OyBzMCkgewomIzQzOwkJc3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSAqaGVhcDsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBHRlBfQVRPTUlDOiB3ZSBob2xkIGlfZmNfbG9jay4gIF9fR0ZQX05PV0FSTjogZmFpbHVyZSBpcyBub3QKJiM0MzsJCSAqIGZhdGFsIC0tIHdlIGZhbGwgYmFjayB0byB0aGUgc2luZ2xlIGNvYWxlc2NlZCByYW5nZSBiZWxvdyAtLQomIzQzOwkJICogc28gaXQgbXVzdCBub3Qgc3BsYXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgomIzQzOwkJICovCiYjNDM7CQloZWFwID0ga21hbGxvY19hcnJheShFWFQ0X0ZDX01BWF9SQU5HRVMgJiM0MzsgMSwgc2l6ZW9mKCpoZWFwKSwKJiM0MzsJCQkJICAgICBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTsKJiM0MzsJCWlmIChoZWFwKSB7CiYjNDM7CQkJaGVhcFswXSA9IGVpLSZndDtpX2ZjX3JhbmdlOwomIzQzOwkJCWVpLSZndDtpX2ZjX3JhbmdlcyA9IGhlYXA7CiYjNDM7CQkJZXh0NF9mY19yYW5nZV9hZGQoZWksIHN0YXJ0LCBlbmQpOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQomIzQzOwkJLyoKJiM0MzsJCSAqIE91dCBvZiBtZW1vcnk6IGZhbGwgYmFjayB0byB0aGUgb3JpZ2luYWwgc2luZ2xlIGNvYWxlc2NlZAomIzQzOwkJICogcmFuZ2UgYnkgYWJzb3JiaW5nIHRoZSBnYXAgYmVsb3cuICBUaGlzIG92ZXItbG9ncyB0aGUgc3Bhbm5lZAomIzQzOwkJICogZXh0ZW50cyBidXQgc3RheXMgYSB2YWxpZCBmYXN0IGNvbW1pdCAobm8gZnVsbC1jb21taXQKJiM0MzsJCSAqIGZhbGxiYWNrKSwgc28gdGhlcmUgaXMgbm90aGluZyB0byBtYXJrIGluZWxpZ2libGUuCiYjNDM7CQkgKi8KIAl9CiAKJiM0MzsJLyogT3ZlcmxhcHBpbmcvYWRqYWNlbnQsIG9yIGFycmF5IGFsbG9jYXRpb24gZmFpbGVkOiBjb2FsZXNjZSBpbmxpbmUuICovCiYjNDM7CWlmIChzdGFydCAmbHQ7IHMwKQomIzQzOwkJczAgPSBzdGFydDsKJiM0MzsJaWYgKGVuZCAmZ3Q7IGUwKQomIzQzOwkJZTAgPSBlbmQ7CiYjNDM7CWVpLSZndDtpX2ZjX3JhbmdlLnN0YXJ0ID0gczA7CiYjNDM7CWVpLSZndDtpX2ZjX3JhbmdlLmxlbiA9IGUwIC0gczAgJiM0MzsgMTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTk0LDMxICYjNDM7MTEwNiwyNiBAQCBzdGF0aWMgdm9pZCBleHQ0X2ZjX2ZyZWVfaW5vZGVfc25hcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCWVpLSZndDtpX2ZjX3NuYXAgPSBOVUxMOwogfQogCi1zdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOy8qCiYjNDM7ICogU25hcHNob3Qgb25lIG1vZGlmaWVkIGxibGsgcmFuZ2UgW3N0YXJ0X2xibGssIGVuZF9sYmxrXSBpbnRvIEByYW5nZXMgYnkKJiM0MzsgKiB3YWxraW5nIHRoZSBleHRlbnQgc3RhdHVzIHRyZWUsIGVtaXR0aW5nIGFuIEFERF9SQU5HRSBwZXIgbWFwcGVkIHNlZ21lbnQgYW5kCiYjNDM7ICogYSBERUxfUkFOR0UgcGVyIGhvbGUuICAqbnJfcmFuZ2VzIGFjY3VtdWxhdGVzIHRoZSBudW1iZXIgb2YgcmFuZ2VzIHByb2R1Y2VkCiYjNDM7ICogZm9yIHRoaXMgaW5vZGUgYWNyb3NzIGNhbGxzOyB0b2dldGhlciB3aXRoIG5yX3Jhbmdlc190b3RhbCAocmFuZ2VzIGFscmVhZHkKJiM0MzsgKiBwcm9kdWNlZCBieSBlYXJsaWVyIGlub2RlcyBpbiB0aGlzIGNvbW1pdCkgaXQgaXMgYm91bmRlZCBhZ2FpbnN0CiYjNDM7ICogRVhUNF9GQ19TTkFQU0hPVF9NQVhfUkFOR0VTLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZXh0NF9mY19zbmFwc2hvdF9sYmxrX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgICAgICBleHQ0X2xibGtfdCBzdGFydF9sYmxrLAomIzQzOwkJCQkgICAgICAgZXh0NF9sYmxrX3QgZW5kX2xibGssCiAJCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJhbmdlcywKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IG5yX3Jhbmdlc190b3RhbCwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50ICpucl9yYW5nZXNwLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgaW50ICpucl9yYW5nZXMsCiAJCQkJICAgICAgIGludCAqc25hcF9lcnIpCiB7Ci0Jc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwogCXN0cnVjdCBleHQ0X2ZjX3NuYXBfc3RhdHMgKnN0YXRzID0KIAkJJmFtcDtFWFQ0X1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c19mY19zbmFwX3N0YXRzOwotCWV4dDRfbGJsa190IHN0YXJ0X2xibGssIGVuZF9sYmxrLCBjdXJfbGJsazsKLQl1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzID0gMDsKLQotCXNwaW5fbG9jaygmYW1wO2VpLSZndDtpX2ZjX2xvY2spOwotCWlmIChlaS0mZ3Q7aV9mY19sYmxrX2xlbiA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrKCZhbXA7ZWktJmd0O2lfZmNfbG9jayk7Ci0JCWlmIChucl9yYW5nZXNwKQotCQkJKm5yX3Jhbmdlc3AgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0Jc3RhcnRfbGJsayA9IGVpLSZndDtpX2ZjX2xibGtfc3RhcnQ7Ci0JZW5kX2xibGsgPSBlaS0mZ3Q7aV9mY19sYmxrX3N0YXJ0ICYjNDM7IGVpLSZndDtpX2ZjX2xibGtfbGVuIC0gMTsKLQllaS0mZ3Q7aV9mY19sYmxrX2xlbiA9IDA7Ci0Jc3Bpbl91bmxvY2soJmFtcDtlaS0mZ3Q7aV9mY19sb2NrKTsKJiM0MzsJZXh0NF9sYmxrX3QgY3VyX2xibGsgPSBzdGFydF9sYmxrOwogCi0JY3VyX2xibGsgPSBzdGFydF9sYmxrOwogCWV4dDRfZGVidWcoJiMzNDtzbmFwc2hvdCBkYXRhIHJhbmdlcyAldS0ldSBmb3IgaW5vZGUgJWxsdVxuJiMzNDssCiAJCSAgIHN0YXJ0X2xibGssIGVuZF9sYmxrLAogCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWlub2RlLSZndDtpX2lubyk7CkBAIC0xMDUwLDcgJiM0MzsxMTU3LDcgQEAgc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKG5yX3Jhbmdlc190b3RhbCAmIzQzOyBucl9yYW5nZXMgJmd0Oz0gRVhUNF9GQ19TTkFQU0hPVF9NQVhfUkFOR0VTKSB7CiYjNDM7CQlpZiAobnJfcmFuZ2VzX3RvdGFsICYjNDM7ICpucl9yYW5nZXMgJmd0Oz0gRVhUNF9GQ19TTkFQU0hPVF9NQVhfUkFOR0VTKSB7CiAJCQlhdG9taWM2NF9pbmMoJmFtcDtzdGF0cy0mZ3Q7c25hcF9mYWlsX3Jhbmdlc19jYXApOwogCQkJZXh0NF9mY19zZXRfc25hcF9lcnIoc25hcF9lcnIsCiAJCQkJCSAgICAgRVhUNF9GQ19TTkFQX0VSUl9SQU5HRVNfQ0FQKTsKQEAgLTEwNjMsNyAmIzQzOzExNzAsNyBAQCBzdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJZXh0NF9mY19zZXRfc25hcF9lcnIoc25hcF9lcnIsIEVYVDRfRkNfU05BUF9FUlJfTk9NRU0pOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJbnJfcmFuZ2VzJiM0MzsmIzQzOzsKJiM0MzsJCSgqbnJfcmFuZ2VzKSYjNDM7JiM0Mzs7CiAKIAkJcmFuZ2UtJmd0O2xibGsgPSBjdXJfbGJsazsKIAkJcmFuZ2UtJmd0O2xlbiA9IGxlbjsKQEAgLTExMDEsNiAmIzQzOzEyMDgsNTIgQEAgc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwKIAkJY3VyX2xibGsgJiM0Mzs9IHJhbmdlLSZndDtsZW47CiAJfQogCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqcmFuZ2VzLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgaW50IG5yX3Jhbmdlc190b3RhbCwKJiM0MzsJCQkJICAgICAgIHVuc2lnbmVkIGludCAqbnJfcmFuZ2VzcCwKJiM0MzsJCQkJICAgICAgIGludCAqc25hcF9lcnIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CiYjNDM7CXN0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2UgdHJhY2tlZFtFWFQ0X0ZDX01BWF9SQU5HRVMgJiM0MzsgMV07CiYjNDM7CXVuc2lnbmVkIGludCBucl9yYW5nZXMgPSAwLCBucl90cmFja2VkLCB0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtlaS0mZ3Q7aV9mY19sb2NrKTsKJiM0MzsJbnJfdHJhY2tlZCA9IGVpLSZndDtpX2ZjX25yX3JhbmdlczsKJiM0MzsJaWYgKG5yX3RyYWNrZWQgPT0gMCkgewomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtlaS0mZ3Q7aV9mY19sb2NrKTsKJiM0MzsJCWlmIChucl9yYW5nZXNwKQomIzQzOwkJCSpucl9yYW5nZXNwID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWlmIChlaS0mZ3Q7aV9mY19yYW5nZXMpCiYjNDM7CQltZW1jcHkodHJhY2tlZCwgZWktJmd0O2lfZmNfcmFuZ2VzLAomIzQzOwkJICAgICAgIG5yX3RyYWNrZWQgKiBzaXplb2YodHJhY2tlZFswXSkpOwomIzQzOwllbHNlCiYjNDM7CQl0cmFja2VkWzBdID0gZWktJmd0O2lfZmNfcmFuZ2U7CS8qIGlubGluZSBzaW5nbGUtcmFuZ2UgbW9kZSAqLwomIzQzOwllaS0mZ3Q7aV9mY19ucl9yYW5nZXMgPSAwOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2VpLSZndDtpX2ZjX2xvY2spOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTbmFwc2hvdCBvbmx5IHRoZSBhY3R1YWxseS1tb2RpZmllZCByYW5nZXMsIG5vdCB0aGUgd2hvbGUgW21pbixtYXhdCiYjNDM7CSAqIHNwYW46IHRoaXMgaXMgd2hhdCBrZWVwcyBzY2F0dGVyZWQgYWxsb2NhdGlvbnMgZnJvbSBibG93aW5nIHBhc3QKJiM0MzsJICogRVhUNF9GQ19TTkFQU0hPVF9NQVhfUkFOR0VTIGFuZCBmYWxsaW5nIGJhY2sgdG8gYSBmdWxsIGNvbW1pdC4KJiM0MzsJICovCiYjNDM7CWZvciAodCA9IDA7IHQgJmx0OyBucl90cmFja2VkOyB0JiM0MzsmIzQzOykgewomIzQzOwkJZXh0NF9sYmxrX3QgcyA9IHRyYWNrZWRbdF0uc3RhcnQ7CiYjNDM7CQlleHQ0X2xibGtfdCBlID0gcyAmIzQzOyB0cmFja2VkW3RdLmxlbiAtIDE7CiYjNDM7CiYjNDM7CQlyZXQgPSBleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2UoaW5vZGUsIHMsIGUsIHJhbmdlcywKJiM0MzsJCQkJCQkgIG5yX3Jhbmdlc190b3RhbCwgJmFtcDtucl9yYW5nZXMsCiYjNDM7CQkJCQkJICBzbmFwX2Vycik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKIAlpZiAobnJfcmFuZ2VzcCkKIAkJKm5yX3Jhbmdlc3AgPSBucl9yYW5nZXM7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggZjJjNTJjYzc0Njc2NTUuLmNmYTdlNmJlYzM4NWU2IDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jCkBAIC0xNDU1LDYgJiM0MzsxNDU1LDcgQEAgc3RhdGljIHZvaWQgZXh0NF9mcmVlX2luX2NvcmVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAkJcHJfd2FybigmIzM0OyVzOiBpbm9kZSAlbGx1IHN0aWxsIGluIGZjIGxpc3QmIzM0OywKIAkJCV9fZnVuY19fLCBpbm9kZS0mZ3Q7aV9pbm8pOwogCX0KJiM0MzsJa2ZyZWUoRVhUNF9JKGlub2RlKS0mZ3Q7aV9mY19yYW5nZXMpOwogCWttZW1fY2FjaGVfZnJlZShleHQ0X2lub2RlX2NhY2hlcCwgRVhUNF9JKGlub2RlKSk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgzNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgZXh0NCBGYXN0IENvbW1pdCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdGlua2VyaW5nIHdpdGggdGhlIGZhc3QgY29tbWl0IGZlYXR1cmUgaW4gZXh0NC4gSXQgc291bmRzIGxpa2UgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBpbiBob3cgdGhleSYjMzk7cmUgbWFuYWdpbmcgbG9naWNhbCBibG9jayByYW5nZXMgZm9yIGZhc3QgY29tbWl0cy4gSW5zdGVhZCBvZiB0aGUgb2xkLCBzaW5nbGUsIGNvYWxlc2NlZCByYW5nZSBhcHByb2FjaCDigJMgYGlfZmNfbGJsa19zdGFydGAsIGBpX2ZjX2xibGtfbGVuYCDigJMgdGhleSYjMzk7cmUgbW92aW5nIHRvIGEgbXVsdGlwbGUgZGlzam9pbnQgcmFuZ2UgdHJhY2tpbmcgc3lzdGVtLCB1c2luZyBlaXRoZXIgaW5saW5lIGBpX2ZjX3JhbmdlYCBzdHJ1Y3R1cmVzIG9yIGEgaGVhcC1hbGxvY2F0ZWQgYXJyYXkgb2YgYHN0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2VgIGNhbGxlZCBgaV9mY19yYW5nZXNgLiBUaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIG1vZGlmaWNhdGlvbiB0byB0aGUgZXh0NCBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBwb2ludHMgbm93IGFyZSB0aGUgY3JpdGljYWwgc3ltYm9scyB0aGF0IGhhdmUgbGlrZWx5IGNoYW5nZWQ6IGBleHQ0X2ZjX3JhbmdlX2FkZGAsIGBfX3RyYWNrX3JhbmdlYCwgYGV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZWAsIGFuZCBgZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgaW1wYWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIHBhdGNoIHJlcXVpcmVzIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZhc3QgY29tbWl0IGlzIGFuIGV4dDQgZmVhdHVyZSwgdXN1YWxseSBlbmFibGVkIHZpYSB0aGUgbW91bnQgb3B0aW9ucyBsaWtlIGBmYXN0X2NvbW1pdGAgb3IganVzdCBgZmNgLiBIb3dldmVyLCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGlzIGEgcGFydGljdWxhciBLY29uZmlnIG9wdGlvbiBpbnZvbHZlZC4gSSYjMzk7bGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3Iga2V5d29yZHMgcmVsYXRlZCB0byBgQ09ORklHX0VYVDRgIG9yIGBGQVNUX0NPTU1JVGAgdG8gZmlndXJlIHRoYXQgb3V0LiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGljaCBjb25maWd1cmF0aW9uIGZsYWdzIHdlcmUgbW9kaWZpZWQgaW4gdGhlIGNvbW1pdCwgb3Igd2VyZSBhZGRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGQVNUX0NPTU1JVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTEwNjI9c3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMTMzNi1cbmZzL2V4dDQvZXh0NC5oOjEzMzc6I2RlZmluZSBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlUXHQweDAwMDAwMDEwIC8qIEpvdXJuYWwgZmFzdCBjb21taXQgKi9cbmZzL2V4dDQvZXh0NC5oLTEzMzgtI2RlZmluZSBFWFQ0X01PVU5UMl9EQVhfTkVWRVJcdFx0MHgwMDAwMDAyMCAvKiBEbyBub3QgYWxsb3cgRGlyZWN0IEFjY2VzcyAqL1xuLS1cbmZzL2V4dDQvZXh0NC5oPTIxNTE9c3RhdGljIGlubGluZSBib29sIGV4dDRfaW5vZGVfb3JwaGFuX3RyYWNrZWQoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2V4dDQuaC0yMTkxLS8qXG5mcy9leHQ0L2V4dDQuaDoyMTkyOiAqIFRoZSByZWFzb24gd2h5IFwmIzM0O0ZBU1RfQ09NTUlUXCYjMzQ7IGlzIGEgY29tcGF0IGZlYXR1cmUgaXMgdGhhdCwgRlMgYmVjb21lc1xuZnMvZXh0NC9leHQ0LmgtMjE5My0gKiBpbmNvbXBhdGlibGUgb25seSBpZiBmYXN0IGNvbW1pdCBibG9ja3MgYXJlIHByZXNlbnQgaW4gdGhlIEZTLiBTaW5jZSB3ZVxuLS1cbmZzL2V4dDQvZXh0NC5oLTIxOTctICovXG5mcy9leHQ0L2V4dDQuaDoyMTk4OiNkZWZpbmUgRVhUNF9GRUFUVVJFX0NPTVBBVF9GQVNUX0NPTU1JVFx0XHQweDA0MDBcbmZzL2V4dDQvZXh0NC5oLTIxOTktI2RlZmluZSBFWFQ0X0ZFQVRVUkVfQ09NUEFUX1NUQUJMRV9JTk9ERVNcdDB4MDgwMFxuLS1cbmZzL2V4dDQvZXh0NC5oPTIzMDM9RVhUNF9GRUFUVVJFX0NPTVBBVF9GVU5DUyhzcGFyc2Vfc3VwZXIyLFx0U1BBUlNFX1NVUEVSMilcbmZzL2V4dDQvZXh0NC5oOjIzMDQ6RVhUNF9GRUFUVVJFX0NPTVBBVF9GVU5DUyhmYXN0X2NvbW1pdCxcdFx0RkFTVF9DT01NSVQpXG5mcy9leHQ0L2V4dDQuaC0yMzA1LUVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1Moc3RhYmxlX2lub2RlcyxcdFNUQUJMRV9JTk9ERVMpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI0MT1zdGF0aWMgYm9vbCBleHQ0X2ZjX2Rpc2FibGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQyLXtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDM6XHRyZXR1cm4gKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIHx8XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ0LVx0XHQoRVhUNF9TQihzYiktXHUwMDNlc19tb3VudF9zdGF0ZSBcdTAwMjYgRVhUNF9GQ19SRVBMQVkpKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NDA2PXN0YXRpYyBpbnQgZXh0NF9mY190cmFja190ZW1wbGF0ZShcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDM2LVx0XHRcdFx0KHNiaS1cdTAwM2VzX2pvdXJuYWwtXHUwMDNlal9mbGFncyBcdTAwMjYgSkJEMl9GVUxMX0NPTU1JVF9PTkdPSU5HIHx8XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDM3Olx0XHRcdFx0IHNiaS1cdTAwM2VzX2pvdXJuYWwtXHUwMDNlal9mbGFncyBcdTAwMjYgSkJEMl9GQVNUX0NPTU1JVF9PTkdPSU5HKSA/XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDM4LVx0XHRcdFx0XHUwMDI2c2JpLVx1MDAzZXNfZmNfcVtGQ19RX1NUQUdJTkddIDpcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NDUxPXN0YXRpYyBpbnQgX190cmFja19kZW50cnlfdXBkYXRlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQ4Ny1cdGlmIChzYmktXHUwMDNlc19qb3VybmFsLVx1MDAzZWpfZmxhZ3MgXHUwMDI2IEpCRDJfRlVMTF9DT01NSVRfT05HT0lORyB8fFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjQ4ODpcdFx0c2JpLVx1MDAzZXNfam91cm5hbC1cdTAwM2VqX2ZsYWdzIFx1MDAyNiBKQkQyX0ZBU1RfQ09NTUlUX09OR09JTkcpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDg5LVx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNm5vZGUtXHUwMDNlZmNkX2xpc3QsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE3Mzc9aW50IGV4dDRfZmNfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgY29tbWl0X3RpZClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTc0Ni1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxNzQ3Olx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE3NDgtXHRcdHJldHVybiBqYmQyX2NvbXBsZXRlX3RyYW5zYWN0aW9uKGpvdXJuYWwsIGNvbW1pdF90aWQpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yODI0PXZvaWQgZXh0NF9mY19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGpvdXJuYWxfdCAqam91cm5hbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjgzMS1cdGpvdXJuYWwtXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyODMyOlx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI4MzMtXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMi1cbmZzL2V4dDQvZmFzdF9jb21taXQuaDozOiNpZm5kZWYgX19GQVNUX0NPTU1JVF9IX19cbmZzL2V4dDQvZmFzdF9jb21taXQuaDo0OiNkZWZpbmUgX19GQVNUX0NPTU1JVF9IX19cbmZzL2V4dDQvZmFzdF9jb21taXQuaC01LVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuaD0xNjM9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp0YWcyc3RyKF9fdTE2IHRhZylcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTg4LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjE4OTojZW5kaWYgLyogX19GQVNUX0NPTU1JVF9IX18gKi9cbi0tXG5mcy9leHQ0L2lub2RlLmM9MzQ1Mj1zdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTM0NTktXHRcdFx0cmV0dXJuIGZhbHNlO1xuZnMvZXh0NC9pbm9kZS5jOjM0NjA6XHRcdGlmICh0ZXN0X29wdDIoaW5vZGUtXHUwMDNlaV9zYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXG5mcy9leHQ0L2lub2RlLmMtMzQ2MS1cdFx0XHRyZXR1cm4gIWxpc3RfZW1wdHkoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZjX2xpc3QpO1xuLS1cbmZzL2V4dDQvbmFtZWkuYz0zNzk3PXN0YXRpYyBpbnQgZXh0NF9yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpcixcbi0tXG5mcy9leHQ0L25hbWVpLmMtNDAwNy1cdFx0XHRleHQ0X2ZjX3RyYWNrX3VubGluayhoYW5kbGUsIG5ldy5kZW50cnkpO1xuZnMvZXh0NC9uYW1laS5jOjQwMDg6XHRcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9uYW1laS5jLTQwMDktXHRcdCAgICAhKEVYVDRfU0Ioc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSBcdTAwMjZcdTAwMjZcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTg4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG1vdW50X29wdHMge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xOTQ3LSNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zdXBlci5jOjE5NDg6XHR7T3B0X2ZjX2RlYnVnX2ZvcmNlLCBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlULFxuZnMvZXh0NC9zdXBlci5jLTE5NDktXHQgTU9QVF9TRVQgfCBNT1BUXzIgfCBNT1BUX0VYVDRfT05MWX0sXG4tLVxuZnMvZXh0NC9zdXBlci5jPTQzODk9c3RhdGljIHZvaWQgZXh0NF9zZXRfZGVmX29wdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDQwOC1cdGlmIChleHQ0X2hhc19mZWF0dXJlX2Zhc3RfY29tbWl0KHNiKSlcbmZzL2V4dDQvc3VwZXIuYzo0NDA5Olx0XHRzZXRfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XG5mcy9leHQ0L3N1cGVyLmMtNDQxMC1cdC8qIGRvbiYjMzk7dCBmb3JnZXQgdG8gZW5hYmxlIGpvdXJuYWxfY3N1bSB3aGVuIG1ldGFkYXRhX2NzdW0gaXMgZW5hYmxlZC4gKi9cbi0tXG5mcy9leHQ0L3N1cGVyLmM9NDk1Nz1zdGF0aWMgaW50IGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ5ODAtXG5mcy9leHQ0L3N1cGVyLmM6NDk4MTpcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9zdXBlci5jLTQ5ODItXHRcdCFqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKEVYVDRfU0Ioc2IpLVx1MDAzZXNfam91cm5hbCwgMCwgMCxcbmZzL2V4dDQvc3VwZXIuYzo0OTgzOlx0XHRcdFx0XHQgIEpCRDJfRkVBVFVSRV9JTkNPTVBBVF9GQVNUX0NPTU1JVCkpIHtcbmZzL2V4dDQvc3VwZXIuYy00OTg0LVx0XHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTUwNDE9c3RhdGljIGludCBleHQ0X2NoZWNrX2pvdXJuYWxfZGF0YV9tb2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTUwNDgtXHRcdGNsZWFyX29wdChzYiwgRElPUkVBRF9OT0xPQ0spO1xuZnMvZXh0NC9zdXBlci5jOjUwNDk6XHRcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xuZnMvZXh0NC9zdXBlci5jLTUwNTAtXHRcdGlmICh0ZXN0X29wdDIoc2IsIEVYUExJQ0lUX0RFTEFMTE9DKSkge1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01MzM5PXN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01NTM3LVx0XHRjbGVhcl9vcHQoc2IsIERBVEFfRkxBR1MpO1xuZnMvZXh0NC9zdXBlci5jOjU1Mzg6XHRcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xuZnMvZXh0NC9zdXBlci5jLTU1MzktXHRcdHNiaS1cdTAwM2VzX2pvdXJuYWwgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXh0NCBhbmQgRmFzdCBDb21taXQ6IEEgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCB0aGlzIHNvcnRlZC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyBvZmY7IGBGQVNUX0NPTU1JVGAgaXNuJiMzOTt0IGEgdG9wLWxldmVsIEtjb25maWcgb3B0aW9uIGl0c2VsZiwgYnV0IHJhdGhlciBhbiBleHQ0ICpmZWF0dXJlKi4gVGhlIHJlbGV2YW50IEtjb25maWcgY29udHJvbGxpbmcgZXh0NCYjMzk7cyBjb3JlIGZ1bmN0aW9uYWxpdHkgaXMgZGVmaW5pdGVseSBgRVhUNF9GU2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHN5c3RlbSByZWNvZ25pemVzIHRoZSBleHQ0IG1vZHVsZS4KCk5vdywgSSYjMzk7bSByZXZpZXdpbmcgdGhlIHBhdGNoLCBhbmQgaXQgdG91Y2hlcyBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYCBhbmQgYGZzL2V4dDQvZXh0NC5oYC4gQ29uc2lkZXJpbmcgdGhpcywgYW5kIHNpbmNlIGBGQVNUX0NPTU1JVGAgaXMgcGFydCBvZiBleHQ0LCBzcGVjaWZ5aW5nIG9ubHkgYEVYVDRfRlNgIHNob3VsZCBiZSBzdWZmaWNpZW50LCBidXQgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYWNjdXJhdGUuCgpIb2xkIG9uLCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gTGV0JiMzOTtzIGRlbHZlIGludG8gYGZzL2V4dDQvS2NvbmZpZ2AgZGlyZWN0bHkuIEl0JiMzOTtzIHRpbWUgdG8gY29uZmlybSBpZiB0aGVyZSYjMzk7cyBhIG1vcmUgc3BlY2lmaWMsIGZpbmVyLWdyYWluZWQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGZhc3QgY29tbWl0IHdpdGhpbiBleHQ0IGl0c2VsZi4gSSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgdGhpcy4gQSB0aG9yb3VnaCBleGFtaW5hdGlvbiBvZiB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgY2xhcmlmeSBpZiB0aGVyZSYjMzk7cyBhbnkgaGlkZGVuIG51YW5jZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RkFTVF9DT01NSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTYwCgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDcxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBFWFQ0IEZhc3QgQ29tbWl0IFBhdGNoKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIG5vIGRlZGljYXRlZCBLY29uZmlnIHNwZWNpZmljYWxseSBmb3IgJiMzNDtmYXN0IGNvbW1pdCwmIzM0OyBpdCYjMzk7cyBhbGwgYmFrZWQgaW50byBgRVhUNF9GU2AuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBMZXQmIzM5O3Mgc2VlLi4uIHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiB0aGUgZmFzdCBjb21taXQgZmVhdHVyZSB3aXRoaW4gRVhUNC4gVGhlIGtleSBmdW5jdGlvbnMgdG8gd2F0Y2ggYXJlOiBgZXh0NF9mY19yYW5nZV9hZGRgLCBgX190cmFja19yYW5nZWAsIGBleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2VgLCBhbmQgYGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YWAuCgpSaWdodCwgbGV0IG1lIHZlcmlmeSB0aG9zZS4uLiBgZXh0NF9mY19yYW5nZV9hZGRgIGFuZCBgZXh0NF9mY19zbmFwc2hvdF9sYmxrX3JhbmdlYCBhcmUgbmV3IHN0YXRpYyBmdW5jdGlvbnMsIHdoaWxlIGBfX3RyYWNrX3JhbmdlYCBhbmQgYGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YWAgYXJlIGV4aXN0aW5nIHN0YXRpYyBmdW5jdGlvbnMuIEhtbSwgYXJlIHRoZXNlIGFjdHVhbGx5IHJlYWNoYWJsZT8gWWVzLCB0aGV5JiMzOTtyZSBwYXJ0IG9mIHRoZSBmYXN0IGNvbW1pdCBsb2dpYywgdHJpZ2dlcmVkIGR1cmluZyBgZnN5bmNgIGFuZCByZWxhdGVkIHN5bmMgb3BlcmF0aW9ucyB3aGVuIGZhc3QgY29tbWl0IGlzIGVuYWJsZWQuCgpJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zLiBBaCwgSSBzZWU6IGBleHQ0X2ZjX3Jlc2V0X2lub2RlYCwgYGV4dDRfZmNfaW5pdF9pbm9kZWAsIGBfX3RyYWNrX2lub2RlYCwgYW5kIGBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZWAuCgpCdXQgdGhlICptb3N0KiBjcml0aWNhbCBmdW5jdGlvbnMsIHRoZSBvbmVzIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBjb3JlIGNoYW5nZXMsIGFyZSBzdGlsbCB0aGUgb3JpZ2luYWwgZm91cjogYGV4dDRfZmNfcmFuZ2VfYWRkYCwgYF9fdHJhY2tfcmFuZ2VgLCBgZXh0NF9mY19zbmFwc2hvdF9sYmxrX3JhbmdlYCwgYW5kIGBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGFgLiBPa2F5LCB0aGVzZSBhcmUgZGVmaW5pdGVseSBnb2luZyBpbnRvIG15IEZvY3VzU3ltYm9scy4KClNvLCBJIHRoaW5rIGp1c3QgZW5hYmxpbmcgYEVYVDRfRlNgIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKVGhlIHBhdGNoJiMzOTtzIGxvZ2ljIGlzIHByZXR0eSBpbnRlcmVzdGluZy4gSXQmIzM5O3MgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBob3cgZXh0NCBmYXN0IGNvbW1pdHMgdHJhY2sgbW9kaWZpZWQgbG9naWNhbCBibG9jayByYW5nZXMuIFByZXZpb3VzbHksIGl0IHdhcyBhIHNpbmdsZSBjb2FsZXNjZWQgcmFuZ2UuIE5vdywgaXQmIzM5O3MgaGFuZGxpbmcgbXVsdGlwbGUgZGlzam9pbnQgcmFuZ2VzLCB1c2luZyBhbiBpbmxpbmUgc3RydWN0IG9yIGEgaGVhcC1hbGxvY2F0ZWQgYXJyYXkuIFRoYXQgaW1wbGllcyBuZXcgbWVtb3J5IGFsbG9jYXRpb24sIGFycmF5IG1hbmlwdWxhdGlvbiwgYW5kIGV4dGVudCB0cmFja2luZyBsb2dpYyB3aXRoaW4gdGhlIGZhc3QgY29tbWl0IHBhdGguCgpMZXQgbWUgZG91YmxlLWNoZWNrIHRob3NlIEZvY3VzU3ltYm9scy4uLiBZZXMsIGV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIHN0YXRpYywgc3l6a2FsbGVyICpjYW4qIHN0aWxsIHRhcmdldCB0aGVtIGlmIHRoZXkgZW5kIHVwIGluIHRoZSBjb3ZlcmFnZS4gVGhlIGdvYWwgaXMgdG8gcHJpb3JpdGl6ZSBpbnB1dHMgdGhhdCBoaXQgdGhlc2UgZnVuY3Rpb25zLCBldmVuIGlmIHN5c2NhbGxzIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludC4gQW5kIHllcywgc3RhdGljIGZ1bmN0aW9ucyAqYXJlKiB2YWxpZCBpbiBGb2N1c1N5bWJvbHMuCgpPa2F5LCBpcyB0aGVyZSBhbm90aGVyIGNvbmZpZz8gTm8sIGBDT05GSUdfRVhUNF9GU2Agb3IgYEVYVDRfRlNgIGlzIHRoZSBtYWluIG9uZS4KClRoZXJlZm9yZToKV29ydGhGdXp6aW5nOiBUcnVlCkVuYWJsZUNvbmZpZ3M6IFsmIzM0O0VYVDRfRlMmIzM0O10KRm9jdXNTeW1ib2xzOiBbJiMzNDtleHQ0X2ZjX3JhbmdlX2FkZCYjMzQ7LCAmIzM0O19fdHJhY2tfcmFuZ2UmIzM0OywgJiMzNDtleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2UmIzM0OywgJiMzNDtleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEmIzM0O10KUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0IGZhc3QgY29tbWl0cyYjMzk7IHJhbmdlIHRyYWNraW5nIGxvZ2ljLCB0cmFuc2l0aW9uaW5nIHRvIGRpc2pvaW50IHJhbmdlcyBhbmQgbmVjZXNzaXRhdGluZyBuZXcgYXJyYXkgbWFuaXB1bGF0aW9uLCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIGV4dGVudCB0cmFja2luZy4gVGhpcyBmYXN0IGNvbW1pdCBwYXRoIHdhcnJhbnRzIGZ1enppbmcgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbiBhbmQgbG9naWMgZXJyb3JzLiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2ZjX3JhbmdlX2FkZCYjMzQ7LAogICAgJiMzNDtfX3RyYWNrX3JhbmdlJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZSYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZXh0NCBmYXN0IGNvbW1pdHMgdHJhY2sgbW9kaWZpZWQgbG9naWNhbCBibG9jayByYW5nZXMsIG1vdmluZyBmcm9tIGEgc2luZ2xlIGNvYWxlc2NlZCByYW5nZSB0byB0cmFja2luZyBtdWx0aXBsZSBkaXNqb2ludCByYW5nZXMuIFRoaXMgaW52b2x2ZXMgbmV3IGFycmF5IG1hbmlwdWxhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBleHRlbnQgdHJhY2tpbmcgbG9naWMgaW4gdGhlIGZhc3QgY29tbWl0IHBhdGgsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2ZjX3JhbmdlX2FkZCYjMzQ7LAogICAgJiMzNDtfX3RyYWNrX3JhbmdlJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZSYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZXh0NCBmYXN0IGNvbW1pdHMgdHJhY2sgbW9kaWZpZWQgbG9naWNhbCBibG9jayByYW5nZXMsIG1vdmluZyBmcm9tIGEgc2luZ2xlIGNvYWxlc2NlZCByYW5nZSB0byB0cmFja2luZyBtdWx0aXBsZSBkaXNqb2ludCByYW5nZXMuIFRoaXMgaW52b2x2ZXMgbmV3IGFycmF5IG1hbmlwdWxhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBleHRlbnQgdHJhY2tpbmcgbG9naWMgaW4gdGhlIGZhc3QgY29tbWl0IHBhdGgsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTozNjozMi4wODkzMzM4MzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQyNDg4MTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9mY19yYW5nZV9hZGRcIixcbiAgICBcIl9fdHJhY2tfcmFuZ2VcIixcbiAgICBcImV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZVwiLFxuICAgIFwiZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZXh0NCBmYXN0IGNvbW1pdHMgdHJhY2sgbW9kaWZpZWQgbG9naWNhbCBibG9jayByYW5nZXMsIG1vdmluZyBmcm9tIGEgc2luZ2xlIGNvYWxlc2NlZCByYW5nZSB0byB0cmFja2luZyBtdWx0aXBsZSBkaXNqb2ludCByYW5nZXMuIFRoaXMgaW52b2x2ZXMgbmV3IGFycmF5IG1hbmlwdWxhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBleHRlbnQgdHJhY2tpbmcgbG9naWMgaW4gdGhlIGZhc3QgY29tbWl0IHBhdGgsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjM2OjMyLjA4OTMzOTE3OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2Nzk0MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmI5YTRlYWQ5ZmYwN2JkZDdhMDk2OWQyYWRmNTVkZmNhZWZmYTFkMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAyMyAwOTozNjozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggZGRjOTAzNzM4YzZiMzMuLmQ5M2NjNTJjZDAxZWQwIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcXG5AQCAtMTA0Miw2ICsxMDQyLDIwIEBAIGVudW0gZXh0NF9mY19zbmFwX2VyciB7XFxuIFxcdEVYVDRfRkNfU05BUF9FUlJfSU5PREVfTE9DLFxcbiB9O1xcbiBcXG4rLypcXG4rICogTWF4aW11bSBudW1iZXIgb2YgZGlzam9pbnQgbG9naWNhbC1ibG9jayByYW5nZXMgdHJhY2tlZCBwZXIgaW5vZGUgZm9yIGFcXG4rICogc2luZ2xlIGZhc3QgY29tbWl0LiAgU2NhdHRlcmVkIGFsbG9jYXRpb25zIHRoYXQgZXhjZWVkIHRoaXMgZ2V0IHRoZWlyIHR3b1xcbisgKiBjbG9zZXN0IHJhbmdlcyBtZXJnZWQgKHNlZSBleHQ0X2ZjX3JhbmdlX2FkZCgpKSwgZGVncmFkaW5nIGdyYWNlZnVsbHkgdG9cXG4rICogdGhlIG9sZCBzaW5nbGUgY29hbGVzY2VkLXJhbmdlIGJlaGF2aW91ci5cXG4rICovXFxuKyNkZWZpbmUgRVhUNF9GQ19NQVhfUkFOR0VTIDE2XFxuK1xcbisvKiBJbi1tZW1vcnkgcmVjb3JkIG9mIGFuIGxibGsgcmFuZ2UgbW9kaWZpZWQgaW4gdGhlIGN1cnJlbnQgZmFzdCBjb21taXQuICovXFxuK3N0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2Uge1xcbitcXHRleHQ0X2xibGtfdCBzdGFydDtcXG4rXFx0ZXh0NF9sYmxrX3QgbGVuO1xcbit9O1xcbitcXG4gLypcXG4gICogZm91cnRoIGV4dGVuZGVkIGZpbGUgc3lzdGVtIGlub2RlIGRhdGEgaW4gbWVtb3J5XFxuICAqL1xcbkBAIC0xMDkxLDExICsxMTA1LDI1IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xcbiBcXHRcXHRcXHRcXHRcXHQgKiBwcm90ZWN0ZWQgYnkgc2JpLVxcdTAwM2VzX2ZjX2xvY2suXFxuIFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXG4tXFx0LyogU3RhcnQgb2YgbGJsayByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGNvbW1pdHRlZCBpbiB0aGlzIGZhc3QgY29tbWl0ICovXFxuLVxcdGV4dDRfbGJsa190IGlfZmNfbGJsa19zdGFydDtcXG4tXFxuLVxcdC8qIEVuZCBvZiBsYmxrIHJhbmdlIHRoYXQgbmVlZHMgdG8gYmUgY29tbWl0dGVkIGluIHRoaXMgZmFzdCBjb21taXQgKi9cXG4tXFx0ZXh0NF9sYmxrX3QgaV9mY19sYmxrX2xlbjtcXG4rXFx0LypcXG4rXFx0ICogTG9naWNhbCBibG9jayByYW5nZXMgbW9kaWZpZWQgaW4gdGhpcyBmYXN0IGNvbW1pdC4gIFRyYWNraW5nIHRoZVxcbitcXHQgKiBhY3R1YWwgbW9kaWZpZWQgcmFuZ2VzIChpbnN0ZWFkIG9mIG9uZSBjb2FsZXNjZWQgW21pbixtYXhdKSBhdm9pZHNcXG4rXFx0ICogc25hcHNob3R0aW5nIHRoZSB3aG9sZSBzcGFubmVkIGV4dGVudCBtYXAgZm9yIHNjYXR0ZXJlZCBhbGxvY2F0aW9ucy5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGZpcnN0IHJhbmdlIGlzIGtlcHQgaW5saW5lIGluIGlfZmNfcmFuZ2UsIHNvIHRoZSBjb21tb24gY2FzZSBvZiBhXFxuK1xcdCAqIHNpbmdsZSBjb250aWd1b3VzIGRpcnR5IHJlZ2lvbiBuZWVkcyBubyBhbGxvY2F0aW9uLiAgV2hlbiBhIHNlY29uZFxcbitcXHQgKiBkaXNqb2ludCByYW5nZSBhcHBlYXJzIHRoZSBpbm9kZSBpcyB1cGdyYWRlZCB0byB0aGUgaV9mY19yYW5nZXMgYXJyYXlcXG4rXFx0ICogKEVYVDRfRkNfTUFYX1JBTkdFUyArIDEgZW50cmllcywgc29ydGVkIGFuZCBtdXR1YWxseSBkaXNqb2ludDsgdGhlXFxuK1xcdCAqIGV4dHJhIHNsb3QgaXMgdHJhbnNpZW50IHJvb20gdXNlZCB3aGlsZSBpbnNlcnRpbmcgYmVmb3JlIGFuIG92ZXJmbG93XFxuK1xcdCAqIG1lcmdlKSwgYWxsb2NhdGVkIHRoZW4gYW5kIGZyZWVkIHdoZW4gdGhlIGlub2RlIGlzIGV2aWN0ZWQuICBJZiB0aGF0XFxuK1xcdCAqIGFsbG9jYXRpb24gZmFpbHMgd2UgZmFsbCBiYWNrIHRvIGNvYWxlc2NpbmcgaW50byBpX2ZjX3JhbmdlLCBpLmUuIHRoZVxcbitcXHQgKiBvcmlnaW5hbCBzaW5nbGUgY29hbGVzY2VkLXJhbmdlIGJlaGF2aW91ci4gIGlfZmNfbnJfcmFuZ2VzIGNvdW50cyB0aGVcXG4rXFx0ICogdmFsaWQgcmFuZ2VzOyB3aGlsZSBpX2ZjX3JhbmdlcyBpcyBOVUxMIGl0IGlzIDAgb3IgMS4gIFByb3RlY3RlZCBieVxcbitcXHQgKiBpX2ZjX2xvY2suXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3QgZXh0NF9mY19sYmxrX3JhbmdlIGlfZmNfcmFuZ2U7XFxuK1xcdHN0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2UgKmlfZmNfcmFuZ2VzO1xcbitcXHR1bnNpZ25lZCBpbnQgaV9mY19ucl9yYW5nZXM7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBDb21taXQtdGltZSBmYXN0IGNvbW1pdCBzbmFwc2hvdHMuXFxuQEAgLTExMTYsOCArMTE0NCw4IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xcbiBcXHRzcGlubG9ja190IGlfcmF3X2xvY2s7XFx0LyogcHJvdGVjdHMgdXBkYXRlcyB0byB0aGUgcmF3IGlub2RlICovXFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBQcm90ZWN0IGNvbmN1cnJlbnQgYWNjZXNzZXMgb24gaV9mY19sYmxrX3N0YXJ0LCBpX2ZjX2xibGtfbGVuXFxuLVxcdCAqIGFuZCBpbm9kZSdzIEVYVDRfRkNfU1RBVEVfQ09NTUlUVElORyBzdGF0ZSBiaXQuXFxuK1xcdCAqIFByb3RlY3QgY29uY3VycmVudCBhY2Nlc3NlcyBvbiBpX2ZjX3JhbmdlLCBpX2ZjX3JhbmdlcyxcXG4rXFx0ICogaV9mY19ucl9yYW5nZXMgYW5kIGlub2RlJ3MgRVhUNF9GQ19TVEFURV9DT01NSVRUSU5HIHN0YXRlIGJpdC5cXG4gXFx0ICovXFxuIFxcdHNwaW5sb2NrX3QgaV9mY19sb2NrO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jXFxuaW5kZXggNGVmNzk2YjliNmNiNWYuLjlkMzYzNjVlYWUwMmJhIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xcbisrKyBiL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xcbkBAIC0yMjIsOCArMjIyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfZmNfcmVzZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XFxuIFxcbi1cXHRlaS1cXHUwMDNlaV9mY19sYmxrX3N0YXJ0ID0gMDtcXG4tXFx0ZWktXFx1MDAzZWlfZmNfbGJsa19sZW4gPSAwO1xcbitcXHRlaS1cXHUwMDNlaV9mY19ucl9yYW5nZXMgPSAwO1xcbiB9XFxuIFxcbiB2b2lkIGV4dDRfZmNfaW5pdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbkBAIC0yMzEsNiArMjMwLDcgQEAgdm9pZCBleHQ0X2ZjX2luaXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xcbiBcXG4gXFx0ZXh0NF9mY19yZXNldF9pbm9kZShpbm9kZSk7XFxuK1xcdGVpLVxcdTAwM2VpX2ZjX3JhbmdlcyA9IE5VTEw7XFxuIFxcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfRkNfQ09NTUlUVElORyk7XFxuIFxcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfRkNfUkVRVUVVRSk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlaS1cXHUwMDNlaV9mY19saXN0KTtcXG5AQCAtNTgyLDcgKzU4Miw3IEBAIHN0YXRpYyBpbnQgX190cmFja19pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICphcmcsXFxuIFxcdGlmICh1cGRhdGUpXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXG4tXFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9mY19sYmxrX2xlbiA9IDA7XFxuK1xcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmNfbnJfcmFuZ2VzID0gMDtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTYyMiwzMiArNjIyLDE0NCBAQCBzdHJ1Y3QgX190cmFja19yYW5nZV9hcmdzIHtcXG4gXFx0ZXh0NF9sYmxrX3Qgc3RhcnQsIGVuZDtcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIFJlY29yZCB0aGF0IGxvZ2ljYWwgYmxvY2sgcmFuZ2UgW3N0YXJ0LCBlbmRdIHdhcyBtb2RpZmllZCBpbiB0aGUgY3VycmVudFxcbisgKiBmYXN0IGNvbW1pdC4gIE1haW50YWlucyBhIHNtYWxsLCBib3VuZGVkIHNldCBvZiBzb3J0ZWQsIG11dHVhbGx5IGRpc2pvaW50XFxuKyAqIHJhbmdlcywgbWVyZ2luZyB0aGUgbmV3IHJhbmdlIHdpdGggYW55IGl0IG92ZXJsYXBzIG9yIGlzIGFkamFjZW50IHRvLiAgV2hlblxcbisgKiB0aGUgc2V0IHdvdWxkIGV4Y2VlZCBFWFQ0X0ZDX01BWF9SQU5HRVMsIHRoZSBjb25zZWN1dGl2ZSBwYWlyIHNlcGFyYXRlZCBieVxcbisgKiB0aGUgc21hbGxlc3QgZ2FwIGlzIG1lcmdlZCAoYWJzb3JiaW5nIHRoYXQgZ2FwKSwgc28gdGhlIHdvcnN0IGNhc2UgZGVncmFkZXNcXG4rICogZ3JhY2VmdWxseSB0byB0aGUgb2xkIHNpbmdsZSBjb2FsZXNjZWQtcmFuZ2UgYmVoYXZpb3VyLiAgVHJhY2tpbmcgdGhlIGFjdHVhbFxcbisgKiBtb2RpZmllZCByYW5nZXMgKHJhdGhlciB0aGFuIG9uZSBbbWluLG1heF0gc3Bhbikga2VlcHNcXG4rICogZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhKCkgZnJvbSBzbmFwc2hvdHRpbmcgdGhlIHdob2xlIHNwYW5uZWQgZXh0ZW50IG1hcFxcbisgKiBvbiBzY2F0dGVyZWQgYWxsb2NhdGlvbnMuICBDYWxsZXIgaG9sZHMgZWktXFx1MDAzZWlfZmNfbG9jazsgZWktXFx1MDAzZWlfZmNfcmFuZ2VzIGlzXFxuKyAqIG5vbi1OVUxMIHdpdGggcm9vbSBmb3IgRVhUNF9GQ19NQVhfUkFOR0VTICsgMSBlbnRyaWVzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZXh0NF9mY19yYW5nZV9hZGQoc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWksXFxuK1xcdFxcdFxcdCAgICAgIGV4dDRfbGJsa190IHN0YXJ0LCBleHQ0X2xibGtfdCBlbmQpXFxuK3tcXG4rXFx0c3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSAqciA9IGVpLVxcdTAwM2VpX2ZjX3JhbmdlcztcXG4rXFx0dW5zaWduZWQgaW50IG4gPSBlaS1cXHUwMDNlaV9mY19ucl9yYW5nZXM7XFxuK1xcdHVuc2lnbmVkIGludCBpLCBqO1xcbitcXG4rXFx0LyogU2tpcCByYW5nZXMgbHlpbmcgZW50aXJlbHkgYmVmb3JlIFtzdGFydCAtIDFdIChubyBvdmVybGFwL2FkamFjZW5jeSkuICovXFxuK1xcdGkgPSAwO1xcbitcXHR3aGlsZSAoaSBcXHUwMDNjIG4gXFx1MDAyNlxcdTAwMjYgcltpXS5zdGFydCArIHJbaV0ubGVuIFxcdTAwM2Mgc3RhcnQpXFxuK1xcdFxcdGkrKztcXG4rXFxuK1xcdC8qIEFic29yYiBldmVyeSByYW5nZSBvdmVybGFwcGluZyBvciBhZGphY2VudCB0byB0aGUgZ3Jvd2luZyBbc3RhcnQsZW5kXS4gKi9cXG4rXFx0aiA9IGk7XFxuK1xcdHdoaWxlIChqIFxcdTAwM2MgbiBcXHUwMDI2XFx1MDAyNiByW2pdLnN0YXJ0IFxcdTAwM2M9IGVuZCArIDEpIHtcXG4rXFx0XFx0aWYgKHJbal0uc3RhcnQgXFx1MDAzYyBzdGFydClcXG4rXFx0XFx0XFx0c3RhcnQgPSByW2pdLnN0YXJ0O1xcbitcXHRcXHRpZiAocltqXS5zdGFydCArIHJbal0ubGVuIC0gMSBcXHUwMDNlIGVuZClcXG4rXFx0XFx0XFx0ZW5kID0gcltqXS5zdGFydCArIHJbal0ubGVuIC0gMTtcXG4rXFx0XFx0aisrO1xcbitcXHR9XFxuK1xcbitcXHQvKiBSZXBsYWNlIHJbaS4uai0xXSB3aXRoIHRoZSBtZXJnZWQgcmFuZ2UgKGogPT0gaSBpcyBhIHBsYWluIGluc2VydCkuICovXFxuK1xcdGlmIChqICE9IGkgKyAxKVxcbitcXHRcXHRtZW1tb3ZlKFxcdTAwMjZyW2kgKyAxXSwgXFx1MDAyNnJbal0sIChuIC0gaikgKiBzaXplb2YoKnIpKTtcXG4rXFx0cltpXS5zdGFydCA9IHN0YXJ0O1xcbitcXHRyW2ldLmxlbiA9IGVuZCAtIHN0YXJ0ICsgMTtcXG4rXFx0ZWktXFx1MDAzZWlfZmNfbnJfcmFuZ2VzID0gbiAtIChqIC0gaSkgKyAxO1xcbitcXG4rXFx0LyogT3ZlcmZsb3c6IG1lcmdlIHRoZSBjb25zZWN1dGl2ZSBwYWlyIHNlcGFyYXRlZCBieSB0aGUgc21hbGxlc3QgZ2FwLiAqL1xcbitcXHR3aGlsZSAoZWktXFx1MDAzZWlfZmNfbnJfcmFuZ2VzIFxcdTAwM2UgRVhUNF9GQ19NQVhfUkFOR0VTKSB7XFxuK1xcdFxcdGV4dDRfbGJsa190IGJlc3RfZ2FwID0gfjBVO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgYmVzdCA9IDA7XFxuK1xcbitcXHRcXHRuID0gZWktXFx1MDAzZWlfZmNfbnJfcmFuZ2VzO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpICsgMSBcXHUwMDNjIG47IGkrKykge1xcbitcXHRcXHRcXHRleHQ0X2xibGtfdCBnYXAgPSByW2kgKyAxXS5zdGFydCAtXFxuK1xcdFxcdFxcdFxcdFxcdCAgKHJbaV0uc3RhcnQgKyByW2ldLmxlbik7XFxuK1xcbitcXHRcXHRcXHRpZiAoZ2FwIFxcdTAwM2MgYmVzdF9nYXApIHtcXG4rXFx0XFx0XFx0XFx0YmVzdF9nYXAgPSBnYXA7XFxuK1xcdFxcdFxcdFxcdGJlc3QgPSBpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0XFx0cltiZXN0XS5sZW4gPSByW2Jlc3QgKyAxXS5zdGFydCArIHJbYmVzdCArIDFdLmxlbiAtIHJbYmVzdF0uc3RhcnQ7XFxuK1xcdFxcdG1lbW1vdmUoXFx1MDAyNnJbYmVzdCArIDFdLCBcXHUwMDI2cltiZXN0ICsgMl0sXFxuK1xcdFxcdFxcdChuIC0gYmVzdCAtIDIpICogc2l6ZW9mKCpyKSk7XFxuK1xcdFxcdGVpLVxcdTAwM2VpX2ZjX25yX3JhbmdlcyA9IG4gLSAxO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qIF9fdHJhY2tfZm4gZm9yIHRyYWNraW5nIGRhdGEgdXBkYXRlcyAqL1xcbiBzdGF0aWMgaW50IF9fdHJhY2tfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYXJnLFxcbiBcXHRcXHRcXHQgYm9vbCB1cGRhdGUpXFxuIHtcXG4gXFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xcbi1cXHRleHQ0X2xibGtfdCBvbGRzdGFydDtcXG4gXFx0c3RydWN0IF9fdHJhY2tfcmFuZ2VfYXJncyAqX19hcmcgPVxcbiBcXHRcXHQoc3RydWN0IF9fdHJhY2tfcmFuZ2VfYXJncyAqKWFyZztcXG4rXFx0ZXh0NF9sYmxrX3Qgc3RhcnQgPSBfX2FyZy1cXHUwMDNlc3RhcnQsIGVuZCA9IF9fYXJnLVxcdTAwM2VlbmQ7XFxuK1xcdGV4dDRfbGJsa190IHMwLCBlMDtcXG4gXFxuIFxcdGlmIChpbm9kZS1cXHUwMDNlaV9pbm8gXFx1MDAzYyBFWFQ0X0ZJUlNUX0lOTyhpbm9kZS1cXHUwMDNlaV9zYikpIHtcXG4gXFx0XFx0ZXh0NF9kZWJ1ZyhcXFwiU3BlY2lhbCBpbm9kZSAlbGx1IGJlaW5nIG1vZGlmaWVkXFxcXG5cXFwiLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbiBcXHRcXHRyZXR1cm4gLUVDQU5DRUxFRDtcXG4gXFx0fVxcbiBcXG4tXFx0b2xkc3RhcnQgPSBlaS1cXHUwMDNlaV9mY19sYmxrX3N0YXJ0O1xcbitcXHQvKlxcbitcXHQgKiBBIHN1Yi1ibG9jayBwdW5jaCBob2xlIHJvdW5kcyB1cCB0aGUgc3RhcnQgYW5kIGRvd24gdGhlIGVuZCwgcGFzc2luZ1xcbitcXHQgKiBlbmQgPT0gc3RhcnQgLSAxOiBubyB3aG9sZSBibG9jayBjaGFuZ2VkLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvXFxuK1xcdCAqIHRyYWNrLiAgKGV4dDRfZmNfdHJhY2tfdGVtcGxhdGUgaGFzIGFscmVhZHkgcmVzZXQgdGhlIHJhbmdlIHNldCBmb3IgYVxcbitcXHQgKiBuZXcgdHJhbnNhY3Rpb24sIHNvIHdlIG5lZWQgbm90IGRvIGl0IGhlcmUuKVxcbitcXHQgKi9cXG4rXFx0aWYgKGVuZCBcXHUwMDNjIHN0YXJ0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmICh1cGRhdGUgXFx1MDAyNlxcdTAwMjYgZWktXFx1MDAzZWlfZmNfbGJsa19sZW4gXFx1MDAzZSAwKSB7XFxuLVxcdFxcdGVpLVxcdTAwM2VpX2ZjX2xibGtfc3RhcnQgPSBtaW4oZWktXFx1MDAzZWlfZmNfbGJsa19zdGFydCwgX19hcmctXFx1MDAzZXN0YXJ0KTtcXG4tXFx0XFx0ZWktXFx1MDAzZWlfZmNfbGJsa19sZW4gPVxcbi1cXHRcXHRcXHRtYXgob2xkc3RhcnQgKyBlaS1cXHUwMDNlaV9mY19sYmxrX2xlbiAtIDEsIF9fYXJnLVxcdTAwM2VlbmQpIC1cXG4tXFx0XFx0XFx0XFx0ZWktXFx1MDAzZWlfZmNfbGJsa19zdGFydCArIDE7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGVpLVxcdTAwM2VpX2ZjX2xibGtfc3RhcnQgPSBfX2FyZy1cXHUwMDNlc3RhcnQ7XFxuLVxcdFxcdGVpLVxcdTAwM2VpX2ZjX2xibGtfbGVuID0gX19hcmctXFx1MDAzZWVuZCAtIF9fYXJnLVxcdTAwM2VzdGFydCArIDE7XFxuK1xcdC8qIEFscmVhZHkgdXBncmFkZWQgdG8gdGhlIGhlYXAgYXJyYXk6IGZ1bGwgbXVsdGktaW50ZXJ2YWwgdHJhY2tpbmcuICovXFxuK1xcdGlmIChlaS1cXHUwMDNlaV9mY19yYW5nZXMpIHtcXG4rXFx0XFx0ZXh0NF9mY19yYW5nZV9hZGQoZWksIHN0YXJ0LCBlbmQpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0LyogRmlyc3QgcmFuZ2Ugb2YgdGhpcyBjb21taXQgc3RheXMgaW5saW5lLCBubyBhbGxvY2F0aW9uIG5lZWRlZC4gKi9cXG4rXFx0aWYgKGVpLVxcdTAwM2VpX2ZjX25yX3JhbmdlcyA9PSAwKSB7XFxuK1xcdFxcdGVpLVxcdTAwM2VpX2ZjX3JhbmdlLnN0YXJ0ID0gc3RhcnQ7XFxuK1xcdFxcdGVpLVxcdTAwM2VpX2ZjX3JhbmdlLmxlbiA9IGVuZCAtIHN0YXJ0ICsgMTtcXG4rXFx0XFx0ZWktXFx1MDAzZWlfZmNfbnJfcmFuZ2VzID0gMTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIE9uZSBpbmxpbmUgcmFuZ2Ugc28gZmFyLiAqL1xcbitcXHRzMCA9IGVpLVxcdTAwM2VpX2ZjX3JhbmdlLnN0YXJ0O1xcbitcXHRlMCA9IHMwICsgZWktXFx1MDAzZWlfZmNfcmFuZ2UubGVuIC0gMTtcXG4rXFxuK1xcdC8qIERpc2pvaW50IGZyb20gaXQ6IHRyeSB0byB1cGdyYWRlIHRvIHRoZSBhcnJheSBmb3IgZXhhY3QgdHJhY2tpbmcuICovXFxuK1xcdGlmIChzdGFydCBcXHUwMDNlIGUwICsgMSB8fCBlbmQgKyAxIFxcdTAwM2MgczApIHtcXG4rXFx0XFx0c3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSAqaGVhcDtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEdGUF9BVE9NSUM6IHdlIGhvbGQgaV9mY19sb2NrLiAgX19HRlBfTk9XQVJOOiBmYWlsdXJlIGlzIG5vdFxcbitcXHRcXHQgKiBmYXRhbCAtLSB3ZSBmYWxsIGJhY2sgdG8gdGhlIHNpbmdsZSBjb2FsZXNjZWQgcmFuZ2UgYmVsb3cgLS1cXG4rXFx0XFx0ICogc28gaXQgbXVzdCBub3Qgc3BsYXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aGVhcCA9IGttYWxsb2NfYXJyYXkoRVhUNF9GQ19NQVhfUkFOR0VTICsgMSwgc2l6ZW9mKCpoZWFwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcXG4rXFx0XFx0aWYgKGhlYXApIHtcXG4rXFx0XFx0XFx0aGVhcFswXSA9IGVpLVxcdTAwM2VpX2ZjX3JhbmdlO1xcbitcXHRcXHRcXHRlaS1cXHUwMDNlaV9mY19yYW5nZXMgPSBoZWFwO1xcbitcXHRcXHRcXHRleHQ0X2ZjX3JhbmdlX2FkZChlaSwgc3RhcnQsIGVuZCk7XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE91dCBvZiBtZW1vcnk6IGZhbGwgYmFjayB0byB0aGUgb3JpZ2luYWwgc2luZ2xlIGNvYWxlc2NlZFxcbitcXHRcXHQgKiByYW5nZSBieSBhYnNvcmJpbmcgdGhlIGdhcCBiZWxvdy4gIFRoaXMgb3Zlci1sb2dzIHRoZSBzcGFubmVkXFxuK1xcdFxcdCAqIGV4dGVudHMgYnV0IHN0YXlzIGEgdmFsaWQgZmFzdCBjb21taXQgKG5vIGZ1bGwtY29tbWl0XFxuK1xcdFxcdCAqIGZhbGxiYWNrKSwgc28gdGhlcmUgaXMgbm90aGluZyB0byBtYXJrIGluZWxpZ2libGUuXFxuK1xcdFxcdCAqL1xcbiBcXHR9XFxuIFxcbitcXHQvKiBPdmVybGFwcGluZy9hZGphY2VudCwgb3IgYXJyYXkgYWxsb2NhdGlvbiBmYWlsZWQ6IGNvYWxlc2NlIGlubGluZS4gKi9cXG4rXFx0aWYgKHN0YXJ0IFxcdTAwM2MgczApXFxuK1xcdFxcdHMwID0gc3RhcnQ7XFxuK1xcdGlmIChlbmQgXFx1MDAzZSBlMClcXG4rXFx0XFx0ZTAgPSBlbmQ7XFxuK1xcdGVpLVxcdTAwM2VpX2ZjX3JhbmdlLnN0YXJ0ID0gczA7XFxuK1xcdGVpLVxcdTAwM2VpX2ZjX3JhbmdlLmxlbiA9IGUwIC0gczAgKyAxO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTk5NCwzMSArMTEwNiwyNiBAQCBzdGF0aWMgdm9pZCBleHQ0X2ZjX2ZyZWVfaW5vZGVfc25hcChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRlaS1cXHUwMDNlaV9mY19zbmFwID0gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSxcXG4rLypcXG4rICogU25hcHNob3Qgb25lIG1vZGlmaWVkIGxibGsgcmFuZ2UgW3N0YXJ0X2xibGssIGVuZF9sYmxrXSBpbnRvIEByYW5nZXMgYnlcXG4rICogd2Fsa2luZyB0aGUgZXh0ZW50IHN0YXR1cyB0cmVlLCBlbWl0dGluZyBhbiBBRERfUkFOR0UgcGVyIG1hcHBlZCBzZWdtZW50IGFuZFxcbisgKiBhIERFTF9SQU5HRSBwZXIgaG9sZS4gICpucl9yYW5nZXMgYWNjdW11bGF0ZXMgdGhlIG51bWJlciBvZiByYW5nZXMgcHJvZHVjZWRcXG4rICogZm9yIHRoaXMgaW5vZGUgYWNyb3NzIGNhbGxzOyB0b2dldGhlciB3aXRoIG5yX3Jhbmdlc190b3RhbCAocmFuZ2VzIGFscmVhZHlcXG4rICogcHJvZHVjZWQgYnkgZWFybGllciBpbm9kZXMgaW4gdGhpcyBjb21taXQpIGl0IGlzIGJvdW5kZWQgYWdhaW5zdFxcbisgKiBFWFQ0X0ZDX1NOQVBTSE9UX01BWF9SQU5HRVMuXFxuKyAqL1xcbitzdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZXh0NF9sYmxrX3Qgc3RhcnRfbGJsayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGV4dDRfbGJsa190IGVuZF9sYmxrLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqcmFuZ2VzLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG5yX3Jhbmdlc190b3RhbCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCAqbnJfcmFuZ2VzcCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCAqbnJfcmFuZ2VzLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgaW50ICpzbmFwX2VycilcXG4ge1xcbi1cXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XFxuIFxcdHN0cnVjdCBleHQ0X2ZjX3NuYXBfc3RhdHMgKnN0YXRzID1cXG4gXFx0XFx0XFx1MDAyNkVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX2ZjX3NuYXBfc3RhdHM7XFxuLVxcdGV4dDRfbGJsa190IHN0YXJ0X2xibGssIGVuZF9sYmxrLCBjdXJfbGJsaztcXG4tXFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcyA9IDA7XFxuLVxcbi1cXHRzcGluX2xvY2soXFx1MDAyNmVpLVxcdTAwM2VpX2ZjX2xvY2spO1xcbi1cXHRpZiAoZWktXFx1MDAzZWlfZmNfbGJsa19sZW4gPT0gMCkge1xcbi1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZWktXFx1MDAzZWlfZmNfbG9jayk7XFxuLVxcdFxcdGlmIChucl9yYW5nZXNwKVxcbi1cXHRcXHRcXHQqbnJfcmFuZ2VzcCA9IDA7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuLVxcdHN0YXJ0X2xibGsgPSBlaS1cXHUwMDNlaV9mY19sYmxrX3N0YXJ0O1xcbi1cXHRlbmRfbGJsayA9IGVpLVxcdTAwM2VpX2ZjX2xibGtfc3RhcnQgKyBlaS1cXHUwMDNlaV9mY19sYmxrX2xlbiAtIDE7XFxuLVxcdGVpLVxcdTAwM2VpX2ZjX2xibGtfbGVuID0gMDtcXG4tXFx0c3Bpbl91bmxvY2soXFx1MDAyNmVpLVxcdTAwM2VpX2ZjX2xvY2spO1xcbitcXHRleHQ0X2xibGtfdCBjdXJfbGJsayA9IHN0YXJ0X2xibGs7XFxuIFxcbi1cXHRjdXJfbGJsayA9IHN0YXJ0X2xibGs7XFxuIFxcdGV4dDRfZGVidWcoXFxcInNuYXBzaG90IGRhdGEgcmFuZ2VzICV1LSV1IGZvciBpbm9kZSAlbGx1XFxcXG5cXFwiLFxcbiBcXHRcXHQgICBzdGFydF9sYmxrLCBlbmRfbGJsayxcXG4gXFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbkBAIC0xMDUwLDcgKzExNTcsNyBAQCBzdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKG5yX3Jhbmdlc190b3RhbCArIG5yX3JhbmdlcyBcXHUwMDNlPSBFWFQ0X0ZDX1NOQVBTSE9UX01BWF9SQU5HRVMpIHtcXG4rXFx0XFx0aWYgKG5yX3Jhbmdlc190b3RhbCArICpucl9yYW5nZXMgXFx1MDAzZT0gRVhUNF9GQ19TTkFQU0hPVF9NQVhfUkFOR0VTKSB7XFxuIFxcdFxcdFxcdGF0b21pYzY0X2luYyhcXHUwMDI2c3RhdHMtXFx1MDAzZXNuYXBfZmFpbF9yYW5nZXNfY2FwKTtcXG4gXFx0XFx0XFx0ZXh0NF9mY19zZXRfc25hcF9lcnIoc25hcF9lcnIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgRVhUNF9GQ19TTkFQX0VSUl9SQU5HRVNfQ0FQKTtcXG5AQCAtMTA2Myw3ICsxMTcwLDcgQEAgc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0ZXh0NF9mY19zZXRfc25hcF9lcnIoc25hcF9lcnIsIEVYVDRfRkNfU05BUF9FUlJfTk9NRU0pO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRucl9yYW5nZXMrKztcXG4rXFx0XFx0KCpucl9yYW5nZXMpKys7XFxuIFxcbiBcXHRcXHRyYW5nZS1cXHUwMDNlbGJsayA9IGN1cl9sYmxrO1xcbiBcXHRcXHRyYW5nZS1cXHUwMDNlbGVuID0gbGVuO1xcbkBAIC0xMTAxLDYgKzEyMDgsNTIgQEAgc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0Y3VyX2xibGsgKz0gcmFuZ2UtXFx1MDAzZWxlbjtcXG4gXFx0fVxcbiBcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyYW5nZXMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzX3RvdGFsLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50ICpucl9yYW5nZXNwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgaW50ICpzbmFwX2VycilcXG4re1xcbitcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XFxuK1xcdHN0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2UgdHJhY2tlZFtFWFQ0X0ZDX01BWF9SQU5HRVMgKyAxXTtcXG4rXFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcyA9IDAsIG5yX3RyYWNrZWQsIHQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmVpLVxcdTAwM2VpX2ZjX2xvY2spO1xcbitcXHRucl90cmFja2VkID0gZWktXFx1MDAzZWlfZmNfbnJfcmFuZ2VzO1xcbitcXHRpZiAobnJfdHJhY2tlZCA9PSAwKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZlaS1cXHUwMDNlaV9mY19sb2NrKTtcXG4rXFx0XFx0aWYgKG5yX3Jhbmdlc3ApXFxuK1xcdFxcdFxcdCpucl9yYW5nZXNwID0gMDtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0aWYgKGVpLVxcdTAwM2VpX2ZjX3JhbmdlcylcXG4rXFx0XFx0bWVtY3B5KHRyYWNrZWQsIGVpLVxcdTAwM2VpX2ZjX3JhbmdlcyxcXG4rXFx0XFx0ICAgICAgIG5yX3RyYWNrZWQgKiBzaXplb2YodHJhY2tlZFswXSkpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHRyYWNrZWRbMF0gPSBlaS1cXHUwMDNlaV9mY19yYW5nZTtcXHQvKiBpbmxpbmUgc2luZ2xlLXJhbmdlIG1vZGUgKi9cXG4rXFx0ZWktXFx1MDAzZWlfZmNfbnJfcmFuZ2VzID0gMDtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmVpLVxcdTAwM2VpX2ZjX2xvY2spO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU25hcHNob3Qgb25seSB0aGUgYWN0dWFsbHktbW9kaWZpZWQgcmFuZ2VzLCBub3QgdGhlIHdob2xlIFttaW4sbWF4XVxcbitcXHQgKiBzcGFuOiB0aGlzIGlzIHdoYXQga2VlcHMgc2NhdHRlcmVkIGFsbG9jYXRpb25zIGZyb20gYmxvd2luZyBwYXN0XFxuK1xcdCAqIEVYVDRfRkNfU05BUFNIT1RfTUFYX1JBTkdFUyBhbmQgZmFsbGluZyBiYWNrIHRvIGEgZnVsbCBjb21taXQuXFxuK1xcdCAqL1xcbitcXHRmb3IgKHQgPSAwOyB0IFxcdTAwM2MgbnJfdHJhY2tlZDsgdCsrKSB7XFxuK1xcdFxcdGV4dDRfbGJsa190IHMgPSB0cmFja2VkW3RdLnN0YXJ0O1xcbitcXHRcXHRleHQ0X2xibGtfdCBlID0gcyArIHRyYWNrZWRbdF0ubGVuIC0gMTtcXG4rXFxuK1xcdFxcdHJldCA9IGV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZShpbm9kZSwgcywgZSwgcmFuZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIG5yX3Jhbmdlc190b3RhbCwgXFx1MDAyNm5yX3JhbmdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBzbmFwX2Vycik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChucl9yYW5nZXNwKVxcbiBcXHRcXHQqbnJfcmFuZ2VzcCA9IG5yX3JhbmdlcztcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xcbmluZGV4IGYyYzUyY2M3NDY3NjU1Li5jZmE3ZTZiZWMzODVlNiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcXG5AQCAtMTQ1NSw2ICsxNDU1LDcgQEAgc3RhdGljIHZvaWQgZXh0NF9mcmVlX2luX2NvcmVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0XFx0cHJfd2FybihcXFwiJXM6IGlub2RlICVsbHUgc3RpbGwgaW4gZmMgbGlzdFxcXCIsXFxuIFxcdFxcdFxcdF9fZnVuY19fLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbiBcXHR9XFxuK1xcdGtmcmVlKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmNfcmFuZ2VzKTtcXG4gXFx0a21lbV9jYWNoZV9mcmVlKGV4dDRfaW5vZGVfY2FjaGVwLCBFWFQ0X0koaW5vZGUpKTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MzY6MzIuNzA3NDAxMjg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjgwNjc5OTM5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9mY19yYW5nZV9hZGRcIixcbiAgICBcIl9fdHJhY2tfcmFuZ2VcIixcbiAgICBcImV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZVwiLFxuICAgIFwiZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZXh0NCBmYXN0IGNvbW1pdHMgdHJhY2sgbW9kaWZpZWQgbG9naWNhbCBibG9jayByYW5nZXMsIG1vdmluZyBmcm9tIGEgc2luZ2xlIGNvYWxlc2NlZCByYW5nZSB0byB0cmFja2luZyBtdWx0aXBsZSBkaXNqb2ludCByYW5nZXMuIFRoaXMgaW52b2x2ZXMgbmV3IGFycmF5IG1hbmlwdWxhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBleHRlbnQgdHJhY2tpbmcgbG9naWMgaW4gdGhlIGZhc3QgY29tbWl0IHBhdGgsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmI5YTRlYWQ5ZmYwN2JkZDdhMDk2OWQyYWRmNTVkZmNhZWZmYTFkMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDA5OjM2OjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggZGRjOTAzNzM4YzZiMzMuLmQ5M2NjNTJjZDAxZWQwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbisrKyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMTA0Miw2ICsxMDQyLDIwIEBAIGVudW0gZXh0NF9mY19zbmFwX2VyciB7XG4gXHRFWFQ0X0ZDX1NOQVBfRVJSX0lOT0RFX0xPQyxcbiB9O1xuIFxuKy8qXG4rICogTWF4aW11bSBudW1iZXIgb2YgZGlzam9pbnQgbG9naWNhbC1ibG9jayByYW5nZXMgdHJhY2tlZCBwZXIgaW5vZGUgZm9yIGFcbisgKiBzaW5nbGUgZmFzdCBjb21taXQuICBTY2F0dGVyZWQgYWxsb2NhdGlvbnMgdGhhdCBleGNlZWQgdGhpcyBnZXQgdGhlaXIgdHdvXG4rICogY2xvc2VzdCByYW5nZXMgbWVyZ2VkIChzZWUgZXh0NF9mY19yYW5nZV9hZGQoKSksIGRlZ3JhZGluZyBncmFjZWZ1bGx5IHRvXG4rICogdGhlIG9sZCBzaW5nbGUgY29hbGVzY2VkLXJhbmdlIGJlaGF2aW91ci5cbisgKi9cbisjZGVmaW5lIEVYVDRfRkNfTUFYX1JBTkdFUyAxNlxuK1xuKy8qIEluLW1lbW9yeSByZWNvcmQgb2YgYW4gbGJsayByYW5nZSBtb2RpZmllZCBpbiB0aGUgY3VycmVudCBmYXN0IGNvbW1pdC4gKi9cbitzdHJ1Y3QgZXh0NF9mY19sYmxrX3JhbmdlIHtcbitcdGV4dDRfbGJsa190IHN0YXJ0O1xuK1x0ZXh0NF9sYmxrX3QgbGVuO1xuK307XG4rXG4gLypcbiAgKiBmb3VydGggZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gaW5vZGUgZGF0YSBpbiBtZW1vcnlcbiAgKi9cbkBAIC0xMDkxLDExICsxMTA1LDI1IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuIFx0XHRcdFx0XHQgKiBwcm90ZWN0ZWQgYnkgc2JpLVx1MDAzZXNfZmNfbG9jay5cbiBcdFx0XHRcdFx0ICovXG4gXG4tXHQvKiBTdGFydCBvZiBsYmxrIHJhbmdlIHRoYXQgbmVlZHMgdG8gYmUgY29tbWl0dGVkIGluIHRoaXMgZmFzdCBjb21taXQgKi9cbi1cdGV4dDRfbGJsa190IGlfZmNfbGJsa19zdGFydDtcbi1cbi1cdC8qIEVuZCBvZiBsYmxrIHJhbmdlIHRoYXQgbmVlZHMgdG8gYmUgY29tbWl0dGVkIGluIHRoaXMgZmFzdCBjb21taXQgKi9cbi1cdGV4dDRfbGJsa190IGlfZmNfbGJsa19sZW47XG4rXHQvKlxuK1x0ICogTG9naWNhbCBibG9jayByYW5nZXMgbW9kaWZpZWQgaW4gdGhpcyBmYXN0IGNvbW1pdC4gIFRyYWNraW5nIHRoZVxuK1x0ICogYWN0dWFsIG1vZGlmaWVkIHJhbmdlcyAoaW5zdGVhZCBvZiBvbmUgY29hbGVzY2VkIFttaW4sbWF4XSkgYXZvaWRzXG4rXHQgKiBzbmFwc2hvdHRpbmcgdGhlIHdob2xlIHNwYW5uZWQgZXh0ZW50IG1hcCBmb3Igc2NhdHRlcmVkIGFsbG9jYXRpb25zLlxuK1x0ICpcbitcdCAqIFRoZSBmaXJzdCByYW5nZSBpcyBrZXB0IGlubGluZSBpbiBpX2ZjX3JhbmdlLCBzbyB0aGUgY29tbW9uIGNhc2Ugb2YgYVxuK1x0ICogc2luZ2xlIGNvbnRpZ3VvdXMgZGlydHkgcmVnaW9uIG5lZWRzIG5vIGFsbG9jYXRpb24uICBXaGVuIGEgc2Vjb25kXG4rXHQgKiBkaXNqb2ludCByYW5nZSBhcHBlYXJzIHRoZSBpbm9kZSBpcyB1cGdyYWRlZCB0byB0aGUgaV9mY19yYW5nZXMgYXJyYXlcbitcdCAqIChFWFQ0X0ZDX01BWF9SQU5HRVMgKyAxIGVudHJpZXMsIHNvcnRlZCBhbmQgbXV0dWFsbHkgZGlzam9pbnQ7IHRoZVxuK1x0ICogZXh0cmEgc2xvdCBpcyB0cmFuc2llbnQgcm9vbSB1c2VkIHdoaWxlIGluc2VydGluZyBiZWZvcmUgYW4gb3ZlcmZsb3dcbitcdCAqIG1lcmdlKSwgYWxsb2NhdGVkIHRoZW4gYW5kIGZyZWVkIHdoZW4gdGhlIGlub2RlIGlzIGV2aWN0ZWQuICBJZiB0aGF0XG4rXHQgKiBhbGxvY2F0aW9uIGZhaWxzIHdlIGZhbGwgYmFjayB0byBjb2FsZXNjaW5nIGludG8gaV9mY19yYW5nZSwgaS5lLiB0aGVcbitcdCAqIG9yaWdpbmFsIHNpbmdsZSBjb2FsZXNjZWQtcmFuZ2UgYmVoYXZpb3VyLiAgaV9mY19ucl9yYW5nZXMgY291bnRzIHRoZVxuK1x0ICogdmFsaWQgcmFuZ2VzOyB3aGlsZSBpX2ZjX3JhbmdlcyBpcyBOVUxMIGl0IGlzIDAgb3IgMS4gIFByb3RlY3RlZCBieVxuK1x0ICogaV9mY19sb2NrLlxuK1x0ICovXG4rXHRzdHJ1Y3QgZXh0NF9mY19sYmxrX3JhbmdlIGlfZmNfcmFuZ2U7XG4rXHRzdHJ1Y3QgZXh0NF9mY19sYmxrX3JhbmdlICppX2ZjX3JhbmdlcztcbitcdHVuc2lnbmVkIGludCBpX2ZjX25yX3JhbmdlcztcbiBcbiBcdC8qXG4gXHQgKiBDb21taXQtdGltZSBmYXN0IGNvbW1pdCBzbmFwc2hvdHMuXG5AQCAtMTExNiw4ICsxMTQ0LDggQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XG4gXHRzcGlubG9ja190IGlfcmF3X2xvY2s7XHQvKiBwcm90ZWN0cyB1cGRhdGVzIHRvIHRoZSByYXcgaW5vZGUgKi9cbiBcbiBcdC8qXG4tXHQgKiBQcm90ZWN0IGNvbmN1cnJlbnQgYWNjZXNzZXMgb24gaV9mY19sYmxrX3N0YXJ0LCBpX2ZjX2xibGtfbGVuXG4tXHQgKiBhbmQgaW5vZGUncyBFWFQ0X0ZDX1NUQVRFX0NPTU1JVFRJTkcgc3RhdGUgYml0LlxuK1x0ICogUHJvdGVjdCBjb25jdXJyZW50IGFjY2Vzc2VzIG9uIGlfZmNfcmFuZ2UsIGlfZmNfcmFuZ2VzLFxuK1x0ICogaV9mY19ucl9yYW5nZXMgYW5kIGlub2RlJ3MgRVhUNF9GQ19TVEFURV9DT01NSVRUSU5HIHN0YXRlIGJpdC5cbiBcdCAqL1xuIFx0c3BpbmxvY2tfdCBpX2ZjX2xvY2s7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jXG5pbmRleCA0ZWY3OTZiOWI2Y2I1Zi4uOWQzNjM2NWVhZTAyYmEgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbisrKyBiL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xuQEAgLTIyMiw4ICsyMjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9mY19yZXNldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiBcbi1cdGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydCA9IDA7XG4tXHRlaS1cdTAwM2VpX2ZjX2xibGtfbGVuID0gMDtcbitcdGVpLVx1MDAzZWlfZmNfbnJfcmFuZ2VzID0gMDtcbiB9XG4gXG4gdm9pZCBleHQ0X2ZjX2luaXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbkBAIC0yMzEsNiArMjMwLDcgQEAgdm9pZCBleHQ0X2ZjX2luaXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiBcbiBcdGV4dDRfZmNfcmVzZXRfaW5vZGUoaW5vZGUpO1xuK1x0ZWktXHUwMDNlaV9mY19yYW5nZXMgPSBOVUxMO1xuIFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9GQ19DT01NSVRUSU5HKTtcbiBcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfRkNfUkVRVUVVRSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX2ZjX2xpc3QpO1xuQEAgLTU4Miw3ICs1ODIsNyBAQCBzdGF0aWMgaW50IF9fdHJhY2tfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYXJnLFxuIFx0aWYgKHVwZGF0ZSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXG4tXHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmNfbGJsa19sZW4gPSAwO1xuK1x0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZjX25yX3JhbmdlcyA9IDA7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNjIyLDMyICs2MjIsMTQ0IEBAIHN0cnVjdCBfX3RyYWNrX3JhbmdlX2FyZ3Mge1xuIFx0ZXh0NF9sYmxrX3Qgc3RhcnQsIGVuZDtcbiB9O1xuIFxuKy8qXG4rICogUmVjb3JkIHRoYXQgbG9naWNhbCBibG9jayByYW5nZSBbc3RhcnQsIGVuZF0gd2FzIG1vZGlmaWVkIGluIHRoZSBjdXJyZW50XG4rICogZmFzdCBjb21taXQuICBNYWludGFpbnMgYSBzbWFsbCwgYm91bmRlZCBzZXQgb2Ygc29ydGVkLCBtdXR1YWxseSBkaXNqb2ludFxuKyAqIHJhbmdlcywgbWVyZ2luZyB0aGUgbmV3IHJhbmdlIHdpdGggYW55IGl0IG92ZXJsYXBzIG9yIGlzIGFkamFjZW50IHRvLiAgV2hlblxuKyAqIHRoZSBzZXQgd291bGQgZXhjZWVkIEVYVDRfRkNfTUFYX1JBTkdFUywgdGhlIGNvbnNlY3V0aXZlIHBhaXIgc2VwYXJhdGVkIGJ5XG4rICogdGhlIHNtYWxsZXN0IGdhcCBpcyBtZXJnZWQgKGFic29yYmluZyB0aGF0IGdhcCksIHNvIHRoZSB3b3JzdCBjYXNlIGRlZ3JhZGVzXG4rICogZ3JhY2VmdWxseSB0byB0aGUgb2xkIHNpbmdsZSBjb2FsZXNjZWQtcmFuZ2UgYmVoYXZpb3VyLiAgVHJhY2tpbmcgdGhlIGFjdHVhbFxuKyAqIG1vZGlmaWVkIHJhbmdlcyAocmF0aGVyIHRoYW4gb25lIFttaW4sbWF4XSBzcGFuKSBrZWVwc1xuKyAqIGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YSgpIGZyb20gc25hcHNob3R0aW5nIHRoZSB3aG9sZSBzcGFubmVkIGV4dGVudCBtYXBcbisgKiBvbiBzY2F0dGVyZWQgYWxsb2NhdGlvbnMuICBDYWxsZXIgaG9sZHMgZWktXHUwMDNlaV9mY19sb2NrOyBlaS1cdTAwM2VpX2ZjX3JhbmdlcyBpc1xuKyAqIG5vbi1OVUxMIHdpdGggcm9vbSBmb3IgRVhUNF9GQ19NQVhfUkFOR0VTICsgMSBlbnRyaWVzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGV4dDRfZmNfcmFuZ2VfYWRkKHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpLFxuK1x0XHRcdCAgICAgIGV4dDRfbGJsa190IHN0YXJ0LCBleHQ0X2xibGtfdCBlbmQpXG4re1xuK1x0c3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSAqciA9IGVpLVx1MDAzZWlfZmNfcmFuZ2VzO1xuK1x0dW5zaWduZWQgaW50IG4gPSBlaS1cdTAwM2VpX2ZjX25yX3JhbmdlcztcbitcdHVuc2lnbmVkIGludCBpLCBqO1xuK1xuK1x0LyogU2tpcCByYW5nZXMgbHlpbmcgZW50aXJlbHkgYmVmb3JlIFtzdGFydCAtIDFdIChubyBvdmVybGFwL2FkamFjZW5jeSkuICovXG4rXHRpID0gMDtcbitcdHdoaWxlIChpIFx1MDAzYyBuIFx1MDAyNlx1MDAyNiByW2ldLnN0YXJ0ICsgcltpXS5sZW4gXHUwMDNjIHN0YXJ0KVxuK1x0XHRpKys7XG4rXG4rXHQvKiBBYnNvcmIgZXZlcnkgcmFuZ2Ugb3ZlcmxhcHBpbmcgb3IgYWRqYWNlbnQgdG8gdGhlIGdyb3dpbmcgW3N0YXJ0LGVuZF0uICovXG4rXHRqID0gaTtcbitcdHdoaWxlIChqIFx1MDAzYyBuIFx1MDAyNlx1MDAyNiByW2pdLnN0YXJ0IFx1MDAzYz0gZW5kICsgMSkge1xuK1x0XHRpZiAocltqXS5zdGFydCBcdTAwM2Mgc3RhcnQpXG4rXHRcdFx0c3RhcnQgPSByW2pdLnN0YXJ0O1xuK1x0XHRpZiAocltqXS5zdGFydCArIHJbal0ubGVuIC0gMSBcdTAwM2UgZW5kKVxuK1x0XHRcdGVuZCA9IHJbal0uc3RhcnQgKyByW2pdLmxlbiAtIDE7XG4rXHRcdGorKztcbitcdH1cbitcbitcdC8qIFJlcGxhY2UgcltpLi5qLTFdIHdpdGggdGhlIG1lcmdlZCByYW5nZSAoaiA9PSBpIGlzIGEgcGxhaW4gaW5zZXJ0KS4gKi9cbitcdGlmIChqICE9IGkgKyAxKVxuK1x0XHRtZW1tb3ZlKFx1MDAyNnJbaSArIDFdLCBcdTAwMjZyW2pdLCAobiAtIGopICogc2l6ZW9mKCpyKSk7XG4rXHRyW2ldLnN0YXJ0ID0gc3RhcnQ7XG4rXHRyW2ldLmxlbiA9IGVuZCAtIHN0YXJ0ICsgMTtcbitcdGVpLVx1MDAzZWlfZmNfbnJfcmFuZ2VzID0gbiAtIChqIC0gaSkgKyAxO1xuK1xuK1x0LyogT3ZlcmZsb3c6IG1lcmdlIHRoZSBjb25zZWN1dGl2ZSBwYWlyIHNlcGFyYXRlZCBieSB0aGUgc21hbGxlc3QgZ2FwLiAqL1xuK1x0d2hpbGUgKGVpLVx1MDAzZWlfZmNfbnJfcmFuZ2VzIFx1MDAzZSBFWFQ0X0ZDX01BWF9SQU5HRVMpIHtcbitcdFx0ZXh0NF9sYmxrX3QgYmVzdF9nYXAgPSB+MFU7XG4rXHRcdHVuc2lnbmVkIGludCBiZXN0ID0gMDtcbitcbitcdFx0biA9IGVpLVx1MDAzZWlfZmNfbnJfcmFuZ2VzO1xuK1x0XHRmb3IgKGkgPSAwOyBpICsgMSBcdTAwM2MgbjsgaSsrKSB7XG4rXHRcdFx0ZXh0NF9sYmxrX3QgZ2FwID0gcltpICsgMV0uc3RhcnQgLVxuK1x0XHRcdFx0XHQgIChyW2ldLnN0YXJ0ICsgcltpXS5sZW4pO1xuK1xuK1x0XHRcdGlmIChnYXAgXHUwMDNjIGJlc3RfZ2FwKSB7XG4rXHRcdFx0XHRiZXN0X2dhcCA9IGdhcDtcbitcdFx0XHRcdGJlc3QgPSBpO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0XHRyW2Jlc3RdLmxlbiA9IHJbYmVzdCArIDFdLnN0YXJ0ICsgcltiZXN0ICsgMV0ubGVuIC0gcltiZXN0XS5zdGFydDtcbitcdFx0bWVtbW92ZShcdTAwMjZyW2Jlc3QgKyAxXSwgXHUwMDI2cltiZXN0ICsgMl0sXG4rXHRcdFx0KG4gLSBiZXN0IC0gMikgKiBzaXplb2YoKnIpKTtcbitcdFx0ZWktXHUwMDNlaV9mY19ucl9yYW5nZXMgPSBuIC0gMTtcbitcdH1cbit9XG4rXG4gLyogX190cmFja19mbiBmb3IgdHJhY2tpbmcgZGF0YSB1cGRhdGVzICovXG4gc3RhdGljIGludCBfX3RyYWNrX3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmFyZyxcbiBcdFx0XHQgYm9vbCB1cGRhdGUpXG4ge1xuIFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xuLVx0ZXh0NF9sYmxrX3Qgb2xkc3RhcnQ7XG4gXHRzdHJ1Y3QgX190cmFja19yYW5nZV9hcmdzICpfX2FyZyA9XG4gXHRcdChzdHJ1Y3QgX190cmFja19yYW5nZV9hcmdzICopYXJnO1xuK1x0ZXh0NF9sYmxrX3Qgc3RhcnQgPSBfX2FyZy1cdTAwM2VzdGFydCwgZW5kID0gX19hcmctXHUwMDNlZW5kO1xuK1x0ZXh0NF9sYmxrX3QgczAsIGUwO1xuIFxuIFx0aWYgKGlub2RlLVx1MDAzZWlfaW5vIFx1MDAzYyBFWFQ0X0ZJUlNUX0lOTyhpbm9kZS1cdTAwM2VpX3NiKSkge1xuIFx0XHRleHQ0X2RlYnVnKFwiU3BlY2lhbCBpbm9kZSAlbGx1IGJlaW5nIG1vZGlmaWVkXFxuXCIsIGlub2RlLVx1MDAzZWlfaW5vKTtcbiBcdFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XG4gXHR9XG4gXG4tXHRvbGRzdGFydCA9IGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydDtcbitcdC8qXG4rXHQgKiBBIHN1Yi1ibG9jayBwdW5jaCBob2xlIHJvdW5kcyB1cCB0aGUgc3RhcnQgYW5kIGRvd24gdGhlIGVuZCwgcGFzc2luZ1xuK1x0ICogZW5kID09IHN0YXJ0IC0gMTogbm8gd2hvbGUgYmxvY2sgY2hhbmdlZCwgc28gdGhlcmUgaXMgbm90aGluZyB0b1xuK1x0ICogdHJhY2suICAoZXh0NF9mY190cmFja190ZW1wbGF0ZSBoYXMgYWxyZWFkeSByZXNldCB0aGUgcmFuZ2Ugc2V0IGZvciBhXG4rXHQgKiBuZXcgdHJhbnNhY3Rpb24sIHNvIHdlIG5lZWQgbm90IGRvIGl0IGhlcmUuKVxuK1x0ICovXG4rXHRpZiAoZW5kIFx1MDAzYyBzdGFydClcbitcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAodXBkYXRlIFx1MDAyNlx1MDAyNiBlaS1cdTAwM2VpX2ZjX2xibGtfbGVuIFx1MDAzZSAwKSB7XG4tXHRcdGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydCA9IG1pbihlaS1cdTAwM2VpX2ZjX2xibGtfc3RhcnQsIF9fYXJnLVx1MDAzZXN0YXJ0KTtcbi1cdFx0ZWktXHUwMDNlaV9mY19sYmxrX2xlbiA9XG4tXHRcdFx0bWF4KG9sZHN0YXJ0ICsgZWktXHUwMDNlaV9mY19sYmxrX2xlbiAtIDEsIF9fYXJnLVx1MDAzZWVuZCkgLVxuLVx0XHRcdFx0ZWktXHUwMDNlaV9mY19sYmxrX3N0YXJ0ICsgMTtcbi1cdH0gZWxzZSB7XG4tXHRcdGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydCA9IF9fYXJnLVx1MDAzZXN0YXJ0O1xuLVx0XHRlaS1cdTAwM2VpX2ZjX2xibGtfbGVuID0gX19hcmctXHUwMDNlZW5kIC0gX19hcmctXHUwMDNlc3RhcnQgKyAxO1xuK1x0LyogQWxyZWFkeSB1cGdyYWRlZCB0byB0aGUgaGVhcCBhcnJheTogZnVsbCBtdWx0aS1pbnRlcnZhbCB0cmFja2luZy4gKi9cbitcdGlmIChlaS1cdTAwM2VpX2ZjX3Jhbmdlcykge1xuK1x0XHRleHQ0X2ZjX3JhbmdlX2FkZChlaSwgc3RhcnQsIGVuZCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0LyogRmlyc3QgcmFuZ2Ugb2YgdGhpcyBjb21taXQgc3RheXMgaW5saW5lLCBubyBhbGxvY2F0aW9uIG5lZWRlZC4gKi9cbitcdGlmIChlaS1cdTAwM2VpX2ZjX25yX3JhbmdlcyA9PSAwKSB7XG4rXHRcdGVpLVx1MDAzZWlfZmNfcmFuZ2Uuc3RhcnQgPSBzdGFydDtcbitcdFx0ZWktXHUwMDNlaV9mY19yYW5nZS5sZW4gPSBlbmQgLSBzdGFydCArIDE7XG4rXHRcdGVpLVx1MDAzZWlfZmNfbnJfcmFuZ2VzID0gMTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBPbmUgaW5saW5lIHJhbmdlIHNvIGZhci4gKi9cbitcdHMwID0gZWktXHUwMDNlaV9mY19yYW5nZS5zdGFydDtcbitcdGUwID0gczAgKyBlaS1cdTAwM2VpX2ZjX3JhbmdlLmxlbiAtIDE7XG4rXG4rXHQvKiBEaXNqb2ludCBmcm9tIGl0OiB0cnkgdG8gdXBncmFkZSB0byB0aGUgYXJyYXkgZm9yIGV4YWN0IHRyYWNraW5nLiAqL1xuK1x0aWYgKHN0YXJ0IFx1MDAzZSBlMCArIDEgfHwgZW5kICsgMSBcdTAwM2MgczApIHtcbitcdFx0c3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSAqaGVhcDtcbitcbitcdFx0LypcbitcdFx0ICogR0ZQX0FUT01JQzogd2UgaG9sZCBpX2ZjX2xvY2suICBfX0dGUF9OT1dBUk46IGZhaWx1cmUgaXMgbm90XG4rXHRcdCAqIGZhdGFsIC0tIHdlIGZhbGwgYmFjayB0byB0aGUgc2luZ2xlIGNvYWxlc2NlZCByYW5nZSBiZWxvdyAtLVxuK1x0XHQgKiBzbyBpdCBtdXN0IG5vdCBzcGxhdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXG4rXHRcdCAqL1xuK1x0XHRoZWFwID0ga21hbGxvY19hcnJheShFWFQ0X0ZDX01BWF9SQU5HRVMgKyAxLCBzaXplb2YoKmhlYXApLFxuK1x0XHRcdFx0ICAgICBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcbitcdFx0aWYgKGhlYXApIHtcbitcdFx0XHRoZWFwWzBdID0gZWktXHUwMDNlaV9mY19yYW5nZTtcbitcdFx0XHRlaS1cdTAwM2VpX2ZjX3JhbmdlcyA9IGhlYXA7XG4rXHRcdFx0ZXh0NF9mY19yYW5nZV9hZGQoZWksIHN0YXJ0LCBlbmQpO1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4rXHRcdC8qXG4rXHRcdCAqIE91dCBvZiBtZW1vcnk6IGZhbGwgYmFjayB0byB0aGUgb3JpZ2luYWwgc2luZ2xlIGNvYWxlc2NlZFxuK1x0XHQgKiByYW5nZSBieSBhYnNvcmJpbmcgdGhlIGdhcCBiZWxvdy4gIFRoaXMgb3Zlci1sb2dzIHRoZSBzcGFubmVkXG4rXHRcdCAqIGV4dGVudHMgYnV0IHN0YXlzIGEgdmFsaWQgZmFzdCBjb21taXQgKG5vIGZ1bGwtY29tbWl0XG4rXHRcdCAqIGZhbGxiYWNrKSwgc28gdGhlcmUgaXMgbm90aGluZyB0byBtYXJrIGluZWxpZ2libGUuXG4rXHRcdCAqL1xuIFx0fVxuIFxuK1x0LyogT3ZlcmxhcHBpbmcvYWRqYWNlbnQsIG9yIGFycmF5IGFsbG9jYXRpb24gZmFpbGVkOiBjb2FsZXNjZSBpbmxpbmUuICovXG4rXHRpZiAoc3RhcnQgXHUwMDNjIHMwKVxuK1x0XHRzMCA9IHN0YXJ0O1xuK1x0aWYgKGVuZCBcdTAwM2UgZTApXG4rXHRcdGUwID0gZW5kO1xuK1x0ZWktXHUwMDNlaV9mY19yYW5nZS5zdGFydCA9IHMwO1xuK1x0ZWktXHUwMDNlaV9mY19yYW5nZS5sZW4gPSBlMCAtIHMwICsgMTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC05OTQsMzEgKzExMDYsMjYgQEAgc3RhdGljIHZvaWQgZXh0NF9mY19mcmVlX2lub2RlX3NuYXAoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGVpLVx1MDAzZWlfZmNfc25hcCA9IE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rLypcbisgKiBTbmFwc2hvdCBvbmUgbW9kaWZpZWQgbGJsayByYW5nZSBbc3RhcnRfbGJsaywgZW5kX2xibGtdIGludG8gQHJhbmdlcyBieVxuKyAqIHdhbGtpbmcgdGhlIGV4dGVudCBzdGF0dXMgdHJlZSwgZW1pdHRpbmcgYW4gQUREX1JBTkdFIHBlciBtYXBwZWQgc2VnbWVudCBhbmRcbisgKiBhIERFTF9SQU5HRSBwZXIgaG9sZS4gICpucl9yYW5nZXMgYWNjdW11bGF0ZXMgdGhlIG51bWJlciBvZiByYW5nZXMgcHJvZHVjZWRcbisgKiBmb3IgdGhpcyBpbm9kZSBhY3Jvc3MgY2FsbHM7IHRvZ2V0aGVyIHdpdGggbnJfcmFuZ2VzX3RvdGFsIChyYW5nZXMgYWxyZWFkeVxuKyAqIHByb2R1Y2VkIGJ5IGVhcmxpZXIgaW5vZGVzIGluIHRoaXMgY29tbWl0KSBpdCBpcyBib3VuZGVkIGFnYWluc3RcbisgKiBFWFQ0X0ZDX1NOQVBTSE9UX01BWF9SQU5HRVMuXG4rICovXG4rc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgICAgICBleHQ0X2xibGtfdCBzdGFydF9sYmxrLFxuK1x0XHRcdFx0ICAgICAgIGV4dDRfbGJsa190IGVuZF9sYmxrLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJhbmdlcyxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzX3RvdGFsLFxuLVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCAqbnJfcmFuZ2VzcCxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgKm5yX3JhbmdlcyxcbiBcdFx0XHRcdCAgICAgICBpbnQgKnNuYXBfZXJyKVxuIHtcbi1cdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiBcdHN0cnVjdCBleHQ0X2ZjX3NuYXBfc3RhdHMgKnN0YXRzID1cbiBcdFx0XHUwMDI2RVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2ZjX3NuYXBfc3RhdHM7XG4tXHRleHQ0X2xibGtfdCBzdGFydF9sYmxrLCBlbmRfbGJsaywgY3VyX2xibGs7XG4tXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzID0gMDtcbi1cbi1cdHNwaW5fbG9jayhcdTAwMjZlaS1cdTAwM2VpX2ZjX2xvY2spO1xuLVx0aWYgKGVpLVx1MDAzZWlfZmNfbGJsa19sZW4gPT0gMCkge1xuLVx0XHRzcGluX3VubG9jayhcdTAwMjZlaS1cdTAwM2VpX2ZjX2xvY2spO1xuLVx0XHRpZiAobnJfcmFuZ2VzcClcbi1cdFx0XHQqbnJfcmFuZ2VzcCA9IDA7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVx0c3RhcnRfbGJsayA9IGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydDtcbi1cdGVuZF9sYmxrID0gZWktXHUwMDNlaV9mY19sYmxrX3N0YXJ0ICsgZWktXHUwMDNlaV9mY19sYmxrX2xlbiAtIDE7XG4tXHRlaS1cdTAwM2VpX2ZjX2xibGtfbGVuID0gMDtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNmVpLVx1MDAzZWlfZmNfbG9jayk7XG4rXHRleHQ0X2xibGtfdCBjdXJfbGJsayA9IHN0YXJ0X2xibGs7XG4gXG4tXHRjdXJfbGJsayA9IHN0YXJ0X2xibGs7XG4gXHRleHQ0X2RlYnVnKFwic25hcHNob3QgZGF0YSByYW5nZXMgJXUtJXUgZm9yIGlub2RlICVsbHVcXG5cIixcbiBcdFx0ICAgc3RhcnRfbGJsaywgZW5kX2xibGssXG4gXHRcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5vZGUtXHUwMDNlaV9pbm8pO1xuQEAgLTEwNTAsNyArMTE1Nyw3IEBAIHN0YXRpYyBpbnQgZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKG5yX3Jhbmdlc190b3RhbCArIG5yX3JhbmdlcyBcdTAwM2U9IEVYVDRfRkNfU05BUFNIT1RfTUFYX1JBTkdFUykge1xuK1x0XHRpZiAobnJfcmFuZ2VzX3RvdGFsICsgKm5yX3JhbmdlcyBcdTAwM2U9IEVYVDRfRkNfU05BUFNIT1RfTUFYX1JBTkdFUykge1xuIFx0XHRcdGF0b21pYzY0X2luYyhcdTAwMjZzdGF0cy1cdTAwM2VzbmFwX2ZhaWxfcmFuZ2VzX2NhcCk7XG4gXHRcdFx0ZXh0NF9mY19zZXRfc25hcF9lcnIoc25hcF9lcnIsXG4gXHRcdFx0XHRcdCAgICAgRVhUNF9GQ19TTkFQX0VSUl9SQU5HRVNfQ0FQKTtcbkBAIC0xMDYzLDcgKzExNzAsNyBAQCBzdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfZmNfc2V0X3NuYXBfZXJyKHNuYXBfZXJyLCBFWFQ0X0ZDX1NOQVBfRVJSX05PTUVNKTtcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0fVxuLVx0XHRucl9yYW5nZXMrKztcbitcdFx0KCpucl9yYW5nZXMpKys7XG4gXG4gXHRcdHJhbmdlLVx1MDAzZWxibGsgPSBjdXJfbGJsaztcbiBcdFx0cmFuZ2UtXHUwMDNlbGVuID0gbGVuO1xuQEAgLTExMDEsNiArMTIwOCw1MiBAQCBzdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRjdXJfbGJsayArPSByYW5nZS1cdTAwM2VsZW47XG4gXHR9XG4gXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyYW5nZXMsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG5yX3Jhbmdlc190b3RhbCxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgKm5yX3Jhbmdlc3AsXG4rXHRcdFx0XHQgICAgICAgaW50ICpzbmFwX2Vycilcbit7XG4rXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4rXHRzdHJ1Y3QgZXh0NF9mY19sYmxrX3JhbmdlIHRyYWNrZWRbRVhUNF9GQ19NQVhfUkFOR0VTICsgMV07XG4rXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzID0gMCwgbnJfdHJhY2tlZCwgdDtcbitcdGludCByZXQ7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbitcdG5yX3RyYWNrZWQgPSBlaS1cdTAwM2VpX2ZjX25yX3JhbmdlcztcbitcdGlmIChucl90cmFja2VkID09IDApIHtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbitcdFx0aWYgKG5yX3Jhbmdlc3ApXG4rXHRcdFx0Km5yX3Jhbmdlc3AgPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdGlmIChlaS1cdTAwM2VpX2ZjX3JhbmdlcylcbitcdFx0bWVtY3B5KHRyYWNrZWQsIGVpLVx1MDAzZWlfZmNfcmFuZ2VzLFxuK1x0XHQgICAgICAgbnJfdHJhY2tlZCAqIHNpemVvZih0cmFja2VkWzBdKSk7XG4rXHRlbHNlXG4rXHRcdHRyYWNrZWRbMF0gPSBlaS1cdTAwM2VpX2ZjX3JhbmdlO1x0LyogaW5saW5lIHNpbmdsZS1yYW5nZSBtb2RlICovXG4rXHRlaS1cdTAwM2VpX2ZjX25yX3JhbmdlcyA9IDA7XG4rXHRzcGluX3VubG9jayhcdTAwMjZlaS1cdTAwM2VpX2ZjX2xvY2spO1xuK1xuK1x0LypcbitcdCAqIFNuYXBzaG90IG9ubHkgdGhlIGFjdHVhbGx5LW1vZGlmaWVkIHJhbmdlcywgbm90IHRoZSB3aG9sZSBbbWluLG1heF1cbitcdCAqIHNwYW46IHRoaXMgaXMgd2hhdCBrZWVwcyBzY2F0dGVyZWQgYWxsb2NhdGlvbnMgZnJvbSBibG93aW5nIHBhc3RcbitcdCAqIEVYVDRfRkNfU05BUFNIT1RfTUFYX1JBTkdFUyBhbmQgZmFsbGluZyBiYWNrIHRvIGEgZnVsbCBjb21taXQuXG4rXHQgKi9cbitcdGZvciAodCA9IDA7IHQgXHUwMDNjIG5yX3RyYWNrZWQ7IHQrKykge1xuK1x0XHRleHQ0X2xibGtfdCBzID0gdHJhY2tlZFt0XS5zdGFydDtcbitcdFx0ZXh0NF9sYmxrX3QgZSA9IHMgKyB0cmFja2VkW3RdLmxlbiAtIDE7XG4rXG4rXHRcdHJldCA9IGV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZShpbm9kZSwgcywgZSwgcmFuZ2VzLFxuK1x0XHRcdFx0XHRcdCAgbnJfcmFuZ2VzX3RvdGFsLCBcdTAwMjZucl9yYW5nZXMsXG4rXHRcdFx0XHRcdFx0ICBzbmFwX2Vycik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbiBcdGlmIChucl9yYW5nZXNwKVxuIFx0XHQqbnJfcmFuZ2VzcCA9IG5yX3JhbmdlcztcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggZjJjNTJjYzc0Njc2NTUuLmNmYTdlNmJlYzM4NWU2IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC0xNDU1LDYgKzE0NTUsNyBAQCBzdGF0aWMgdm9pZCBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRwcl93YXJuKFwiJXM6IGlub2RlICVsbHUgc3RpbGwgaW4gZmMgbGlzdFwiLFxuIFx0XHRcdF9fZnVuY19fLCBpbm9kZS1cdTAwM2VpX2lubyk7XG4gXHR9XG4rXHRrZnJlZShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmNfcmFuZ2VzKTtcbiBcdGttZW1fY2FjaGVfZnJlZShleHQ0X2lub2RlX2NhY2hlcCwgRVhUNF9JKGlub2RlKSk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MzY6MzIuNzA3NDA5MDA1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAxNTU4NzM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgZXh0NCBGYXN0IENvbW1pdCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdGlua2VyaW5nIHdpdGggdGhlIGZhc3QgY29tbWl0IGZlYXR1cmUgaW4gZXh0NC4gSXQgc291bmRzIGxpa2UgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBpbiBob3cgdGhleSdyZSBtYW5hZ2luZyBsb2dpY2FsIGJsb2NrIHJhbmdlcyBmb3IgZmFzdCBjb21taXRzLiBJbnN0ZWFkIG9mIHRoZSBvbGQsIHNpbmdsZSwgY29hbGVzY2VkIHJhbmdlIGFwcHJvYWNoIOKAkyBgaV9mY19sYmxrX3N0YXJ0YCwgYGlfZmNfbGJsa19sZW5gIOKAkyB0aGV5J3JlIG1vdmluZyB0byBhIG11bHRpcGxlIGRpc2pvaW50IHJhbmdlIHRyYWNraW5nIHN5c3RlbSwgdXNpbmcgZWl0aGVyIGlubGluZSBgaV9mY19yYW5nZWAgc3RydWN0dXJlcyBvciBhIGhlYXAtYWxsb2NhdGVkIGFycmF5IG9mIGBzdHJ1Y3QgZXh0NF9mY19sYmxrX3JhbmdlYCBjYWxsZWQgYGlfZmNfcmFuZ2VzYC4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBtb2RpZmljYXRpb24gdG8gdGhlIGV4dDQgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgbmVlZHMgdGhvcm91Z2ggZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBwb2ludHMgbm93IGFyZSB0aGUgY3JpdGljYWwgc3ltYm9scyB0aGF0IGhhdmUgbGlrZWx5IGNoYW5nZWQ6IGBleHQ0X2ZjX3JhbmdlX2FkZGAsIGBfX3RyYWNrX3JhbmdlYCwgYGV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZWAsIGFuZCBgZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgaW1wYWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhpcyBwYXRjaCByZXF1aXJlcyBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGYXN0IGNvbW1pdCBpcyBhbiBleHQ0IGZlYXR1cmUsIHVzdWFsbHkgZW5hYmxlZCB2aWEgdGhlIG1vdW50IG9wdGlvbnMgbGlrZSBgZmFzdF9jb21taXRgIG9yIGp1c3QgYGZjYC4gSG93ZXZlciwgSSBzaG91bGQgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBpcyBhIHBhcnRpY3VsYXIgS2NvbmZpZyBvcHRpb24gaW52b2x2ZWQuIEknbGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3Iga2V5d29yZHMgcmVsYXRlZCB0byBgQ09ORklHX0VYVDRgIG9yIGBGQVNUX0NPTU1JVGAgdG8gZmlndXJlIHRoYXQgb3V0LiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGljaCBjb25maWd1cmF0aW9uIGZsYWdzIHdlcmUgbW9kaWZpZWQgaW4gdGhlIGNvbW1pdCwgb3Igd2VyZSBhZGRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgzNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjM2OjM4LjcyMzAwMDc5OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA4MzMxNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRkFTVF9DT01NSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MTA2Mj1zdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTEzMzYtXFxuZnMvZXh0NC9leHQ0Lmg6MTMzNzojZGVmaW5lIEVYVDRfTU9VTlQyX0pPVVJOQUxfRkFTVF9DT01NSVRcXHQweDAwMDAwMDEwIC8qIEpvdXJuYWwgZmFzdCBjb21taXQgKi9cXG5mcy9leHQ0L2V4dDQuaC0xMzM4LSNkZWZpbmUgRVhUNF9NT1VOVDJfREFYX05FVkVSXFx0XFx0MHgwMDAwMDAyMCAvKiBEbyBub3QgYWxsb3cgRGlyZWN0IEFjY2VzcyAqL1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjE1MT1zdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pbm9kZV9vcnBoYW5fdHJhY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMjE5MS0vKlxcbmZzL2V4dDQvZXh0NC5oOjIxOTI6ICogVGhlIHJlYXNvbiB3aHkgXFxcIkZBU1RfQ09NTUlUXFxcIiBpcyBhIGNvbXBhdCBmZWF0dXJlIGlzIHRoYXQsIEZTIGJlY29tZXNcXG5mcy9leHQ0L2V4dDQuaC0yMTkzLSAqIGluY29tcGF0aWJsZSBvbmx5IGlmIGZhc3QgY29tbWl0IGJsb2NrcyBhcmUgcHJlc2VudCBpbiB0aGUgRlMuIFNpbmNlIHdlXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0yMTk3LSAqL1xcbmZzL2V4dDQvZXh0NC5oOjIxOTg6I2RlZmluZSBFWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZBU1RfQ09NTUlUXFx0XFx0MHgwNDAwXFxuZnMvZXh0NC9leHQ0LmgtMjE5OS0jZGVmaW5lIEVYVDRfRkVBVFVSRV9DT01QQVRfU1RBQkxFX0lOT0RFU1xcdDB4MDgwMFxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjMwMz1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHNwYXJzZV9zdXBlcjIsXFx0U1BBUlNFX1NVUEVSMilcXG5mcy9leHQ0L2V4dDQuaDoyMzA0OkVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1MoZmFzdF9jb21taXQsXFx0XFx0RkFTVF9DT01NSVQpXFxuZnMvZXh0NC9leHQ0LmgtMjMwNS1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHN0YWJsZV9pbm9kZXMsXFx0U1RBQkxFX0lOT0RFUylcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNDE9c3RhdGljIGJvb2wgZXh0NF9mY19kaXNhYmxlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDIte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDM6XFx0cmV0dXJuICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSB8fFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDQtXFx0XFx0KEVYVDRfU0Ioc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz00MDY9c3RhdGljIGludCBleHQ0X2ZjX3RyYWNrX3RlbXBsYXRlKFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQzNi1cXHRcXHRcXHRcXHQoc2JpLVxcdTAwM2VzX2pvdXJuYWwtXFx1MDAzZWpfZmxhZ3MgXFx1MDAyNiBKQkQyX0ZVTExfQ09NTUlUX09OR09JTkcgfHxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDM3OlxcdFxcdFxcdFxcdCBzYmktXFx1MDAzZXNfam91cm5hbC1cXHUwMDNlal9mbGFncyBcXHUwMDI2IEpCRDJfRkFTVF9DT01NSVRfT05HT0lORykgP1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00MzgtXFx0XFx0XFx0XFx0XFx1MDAyNnNiaS1cXHUwMDNlc19mY19xW0ZDX1FfU1RBR0lOR10gOlxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTQ1MT1zdGF0aWMgaW50IF9fdHJhY2tfZGVudHJ5X3VwZGF0ZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQ4Ny1cXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWwtXFx1MDAzZWpfZmxhZ3MgXFx1MDAyNiBKQkQyX0ZVTExfQ09NTUlUX09OR09JTkcgfHxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDg4OlxcdFxcdHNiaS1cXHUwMDNlc19qb3VybmFsLVxcdTAwM2VqX2ZsYWdzIFxcdTAwMjYgSkJEMl9GQVNUX0NPTU1JVF9PTkdPSU5HKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00ODktXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bm9kZS1cXHUwMDNlZmNkX2xpc3QsXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTczNz1pbnQgZXh0NF9mY19jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCBjb21taXRfdGlkKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE3NDYtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE3NDc6XFx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNzQ4LVxcdFxcdHJldHVybiBqYmQyX2NvbXBsZXRlX3RyYW5zYWN0aW9uKGpvdXJuYWwsIGNvbW1pdF90aWQpO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI4MjQ9dm9pZCBleHQ0X2ZjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI4MzEtXFx0am91cm5hbC1cXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjgzMjpcXHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI4MzMtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTItXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjM6I2lmbmRlZiBfX0ZBU1RfQ09NTUlUX0hfX1xcbmZzL2V4dDQvZmFzdF9jb21taXQuaDo0OiNkZWZpbmUgX19GQVNUX0NPTU1JVF9IX19cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtNS1cXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaD0xNjM9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp0YWcyc3RyKF9fdTE2IHRhZylcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xODgtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjE4OTojZW5kaWYgLyogX19GQVNUX0NPTU1JVF9IX18gKi9cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0zNDUyPXN0YXRpYyBib29sIGV4dDRfaW5vZGVfZGF0YXN5bmNfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0zNDU5LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5mcy9leHQ0L2lub2RlLmM6MzQ2MDpcXHRcXHRpZiAodGVzdF9vcHQyKGlub2RlLVxcdTAwM2VpX3NiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcXG5mcy9leHQ0L2lub2RlLmMtMzQ2MS1cXHRcXHRcXHRyZXR1cm4gIWxpc3RfZW1wdHkoXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmNfbGlzdCk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9Mzc5Nz1zdGF0aWMgaW50IGV4dDRfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtNDAwNy1cXHRcXHRcXHRleHQ0X2ZjX3RyYWNrX3VubGluayhoYW5kbGUsIG5ldy5kZW50cnkpO1xcbmZzL2V4dDQvbmFtZWkuYzo0MDA4OlxcdFxcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9uYW1laS5jLTQwMDktXFx0XFx0ICAgICEoRVhUNF9TQihzYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xODgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW91bnRfb3B0cyB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTk0Ny0jaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L3N1cGVyLmM6MTk0ODpcXHR7T3B0X2ZjX2RlYnVnX2ZvcmNlLCBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlULFxcbmZzL2V4dDQvc3VwZXIuYy0xOTQ5LVxcdCBNT1BUX1NFVCB8IE1PUFRfMiB8IE1PUFRfRVhUNF9PTkxZfSxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00Mzg5PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDQwOC1cXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9mYXN0X2NvbW1pdChzYikpXFxuZnMvZXh0NC9zdXBlci5jOjQ0MDk6XFx0XFx0c2V0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xcbmZzL2V4dDQvc3VwZXIuYy00NDEwLVxcdC8qIGRvbid0IGZvcmdldCB0byBlbmFibGUgam91cm5hbF9jc3VtIHdoZW4gbWV0YWRhdGFfY3N1bSBpcyBlbmFibGVkLiAqL1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTQ5NTc9c3RhdGljIGludCBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ5ODAtXFxuZnMvZXh0NC9zdXBlci5jOjQ5ODE6XFx0aWYgKHRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L3N1cGVyLmMtNDk4Mi1cXHRcXHQhamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhFWFQ0X1NCKHNiKS1cXHUwMDNlc19qb3VybmFsLCAwLCAwLFxcbmZzL2V4dDQvc3VwZXIuYzo0OTgzOlxcdFxcdFxcdFxcdFxcdCAgSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0ZBU1RfQ09NTUlUKSkge1xcbmZzL2V4dDQvc3VwZXIuYy00OTg0LVxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01MDQxPXN0YXRpYyBpbnQgZXh0NF9jaGVja19qb3VybmFsX2RhdGFfbW9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUwNDgtXFx0XFx0Y2xlYXJfb3B0KHNiLCBESU9SRUFEX05PTE9DSyk7XFxuZnMvZXh0NC9zdXBlci5jOjUwNDk6XFx0XFx0Y2xlYXJfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XFxuZnMvZXh0NC9zdXBlci5jLTUwNTAtXFx0XFx0aWYgKHRlc3Rfb3B0MihzYiwgRVhQTElDSVRfREVMQUxMT0MpKSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTMzOT1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NTM3LVxcdFxcdGNsZWFyX29wdChzYiwgREFUQV9GTEFHUyk7XFxuZnMvZXh0NC9zdXBlci5jOjU1Mzg6XFx0XFx0Y2xlYXJfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XFxuZnMvZXh0NC9zdXBlci5jLTU1MzktXFx0XFx0c2JpLVxcdTAwM2VzX2pvdXJuYWwgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTozNjozOC44NjM4NDk2NDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQyNzI0Mzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4dDQgYW5kIEZhc3QgQ29tbWl0OiBBIENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IHRoaXMgc29ydGVkLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIG9mZjsgYEZBU1RfQ09NTUlUYCBpc24ndCBhIHRvcC1sZXZlbCBLY29uZmlnIG9wdGlvbiBpdHNlbGYsIGJ1dCByYXRoZXIgYW4gZXh0NCAqZmVhdHVyZSouIFRoZSByZWxldmFudCBLY29uZmlnIGNvbnRyb2xsaW5nIGV4dDQncyBjb3JlIGZ1bmN0aW9uYWxpdHkgaXMgZGVmaW5pdGVseSBgRVhUNF9GU2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHN5c3RlbSByZWNvZ25pemVzIHRoZSBleHQ0IG1vZHVsZS5cblxuTm93LCBJJ20gcmV2aWV3aW5nIHRoZSBwYXRjaCwgYW5kIGl0IHRvdWNoZXMgYGZzL2V4dDQvZmFzdF9jb21taXQuY2AgYW5kIGBmcy9leHQ0L2V4dDQuaGAuIENvbnNpZGVyaW5nIHRoaXMsIGFuZCBzaW5jZSBgRkFTVF9DT01NSVRgIGlzIHBhcnQgb2YgZXh0NCwgc3BlY2lmeWluZyBvbmx5IGBFWFQ0X0ZTYCBzaG91bGQgYmUgc3VmZmljaWVudCwgYnV0IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGFjY3VyYXRlLlxuXG5Ib2xkIG9uLCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gTGV0J3MgZGVsdmUgaW50byBgZnMvZXh0NC9LY29uZmlnYCBkaXJlY3RseS4gSXQncyB0aW1lIHRvIGNvbmZpcm0gaWYgdGhlcmUncyBhIG1vcmUgc3BlY2lmaWMsIGZpbmVyLWdyYWluZWQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGZhc3QgY29tbWl0IHdpdGhpbiBleHQ0IGl0c2VsZi4gSSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgdGhpcy4gQSB0aG9yb3VnaCBleGFtaW5hdGlvbiBvZiB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgY2xhcmlmeSBpZiB0aGVyZSdzIGFueSBoaWRkZW4gbnVhbmNlIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3NTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MzY6NDMuNDA2NTc2MjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MTQxOTM3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGQVNUX0NPTU1JVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjM2OjQzLjU4MzcyNDYyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzI5NTE3MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEVYVDQgRmFzdCBDb21taXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIG5vIGRlZGljYXRlZCBLY29uZmlnIHNwZWNpZmljYWxseSBmb3IgXCJmYXN0IGNvbW1pdCxcIiBpdCdzIGFsbCBiYWtlZCBpbnRvIGBFWFQ0X0ZTYC4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTGV0J3Mgc2VlLi4uIHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiB0aGUgZmFzdCBjb21taXQgZmVhdHVyZSB3aXRoaW4gRVhUNC4gVGhlIGtleSBmdW5jdGlvbnMgdG8gd2F0Y2ggYXJlOiBgZXh0NF9mY19yYW5nZV9hZGRgLCBgX190cmFja19yYW5nZWAsIGBleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2VgLCBhbmQgYGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YWAuXG5cblJpZ2h0LCBsZXQgbWUgdmVyaWZ5IHRob3NlLi4uIGBleHQ0X2ZjX3JhbmdlX2FkZGAgYW5kIGBleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2VgIGFyZSBuZXcgc3RhdGljIGZ1bmN0aW9ucywgd2hpbGUgYF9fdHJhY2tfcmFuZ2VgIGFuZCBgZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhYCBhcmUgZXhpc3Rpbmcgc3RhdGljIGZ1bmN0aW9ucy4gSG1tLCBhcmUgdGhlc2UgYWN0dWFsbHkgcmVhY2hhYmxlPyBZZXMsIHRoZXkncmUgcGFydCBvZiB0aGUgZmFzdCBjb21taXQgbG9naWMsIHRyaWdnZXJlZCBkdXJpbmcgYGZzeW5jYCBhbmQgcmVsYXRlZCBzeW5jIG9wZXJhdGlvbnMgd2hlbiBmYXN0IGNvbW1pdCBpcyBlbmFibGVkLlxuXG5JIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zLiBBaCwgSSBzZWU6IGBleHQ0X2ZjX3Jlc2V0X2lub2RlYCwgYGV4dDRfZmNfaW5pdF9pbm9kZWAsIGBfX3RyYWNrX2lub2RlYCwgYW5kIGBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZWAuXG5cbkJ1dCB0aGUgKm1vc3QqIGNyaXRpY2FsIGZ1bmN0aW9ucywgdGhlIG9uZXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGNvcmUgY2hhbmdlcywgYXJlIHN0aWxsIHRoZSBvcmlnaW5hbCBmb3VyOiBgZXh0NF9mY19yYW5nZV9hZGRgLCBgX190cmFja19yYW5nZWAsIGBleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2VgLCBhbmQgYGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YWAuIE9rYXksIHRoZXNlIGFyZSBkZWZpbml0ZWx5IGdvaW5nIGludG8gbXkgRm9jdXNTeW1ib2xzLlxuXG5TbywgSSB0aGluayBqdXN0IGVuYWJsaW5nIGBFWFQ0X0ZTYCBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuVGhlIHBhdGNoJ3MgbG9naWMgaXMgcHJldHR5IGludGVyZXN0aW5nLiBJdCdzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IGV4dDQgZmFzdCBjb21taXRzIHRyYWNrIG1vZGlmaWVkIGxvZ2ljYWwgYmxvY2sgcmFuZ2VzLiBQcmV2aW91c2x5LCBpdCB3YXMgYSBzaW5nbGUgY29hbGVzY2VkIHJhbmdlLiBOb3csIGl0J3MgaGFuZGxpbmcgbXVsdGlwbGUgZGlzam9pbnQgcmFuZ2VzLCB1c2luZyBhbiBpbmxpbmUgc3RydWN0IG9yIGEgaGVhcC1hbGxvY2F0ZWQgYXJyYXkuIFRoYXQgaW1wbGllcyBuZXcgbWVtb3J5IGFsbG9jYXRpb24sIGFycmF5IG1hbmlwdWxhdGlvbiwgYW5kIGV4dGVudCB0cmFja2luZyBsb2dpYyB3aXRoaW4gdGhlIGZhc3QgY29tbWl0IHBhdGguXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhvc2UgRm9jdXNTeW1ib2xzLi4uIFllcywgZXZlbiB0aG91Z2ggdGhleSdyZSBzdGF0aWMsIHN5emthbGxlciAqY2FuKiBzdGlsbCB0YXJnZXQgdGhlbSBpZiB0aGV5IGVuZCB1cCBpbiB0aGUgY292ZXJhZ2UuIFRoZSBnb2FsIGlzIHRvIHByaW9yaXRpemUgaW5wdXRzIHRoYXQgaGl0IHRoZXNlIGZ1bmN0aW9ucywgZXZlbiBpZiBzeXNjYWxscyBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnQuIEFuZCB5ZXMsIHN0YXRpYyBmdW5jdGlvbnMgKmFyZSogdmFsaWQgaW4gRm9jdXNTeW1ib2xzLlxuXG5Pa2F5LCBpcyB0aGVyZSBhbm90aGVyIGNvbmZpZz8gTm8sIGBDT05GSUdfRVhUNF9GU2Agb3IgYEVYVDRfRlNgIGlzIHRoZSBtYWluIG9uZS5cblxuVGhlcmVmb3JlOlxuV29ydGhGdXp6aW5nOiBUcnVlXG5FbmFibGVDb25maWdzOiBbXCJFWFQ0X0ZTXCJdXG5Gb2N1c1N5bWJvbHM6IFtcImV4dDRfZmNfcmFuZ2VfYWRkXCIsIFwiX190cmFja19yYW5nZVwiLCBcImV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZVwiLCBcImV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YVwiXVxuUmVhc29uaW5nOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleHQ0IGZhc3QgY29tbWl0cycgcmFuZ2UgdHJhY2tpbmcgbG9naWMsIHRyYW5zaXRpb25pbmcgdG8gZGlzam9pbnQgcmFuZ2VzIGFuZCBuZWNlc3NpdGF0aW5nIG5ldyBhcnJheSBtYW5pcHVsYXRpb24sIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgZXh0ZW50IHRyYWNraW5nLiBUaGlzIGZhc3QgY29tbWl0IHBhdGggd2FycmFudHMgZnV6emluZyB0byBwcmV2ZW50IG1lbW9yeSBjb3JydXB0aW9uIGFuZCBsb2dpYyBlcnJvcnMuXCJcblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjAsIk91dHB1dFRva2VucyI6MTQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjM2OjU1LjMxMzI0NDExMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwOTUxNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9mY19yYW5nZV9hZGRcIixcbiAgICBcIl9fdHJhY2tfcmFuZ2VcIixcbiAgICBcImV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZVwiLFxuICAgIFwiZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZXh0NCBmYXN0IGNvbW1pdHMgdHJhY2sgbW9kaWZpZWQgbG9naWNhbCBibG9jayByYW5nZXMsIG1vdmluZyBmcm9tIGEgc2luZ2xlIGNvYWxlc2NlZCByYW5nZSB0byB0cmFja2luZyBtdWx0aXBsZSBkaXNqb2ludCByYW5nZXMuIFRoaXMgaW52b2x2ZXMgbmV3IGFycmF5IG1hbmlwdWxhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBleHRlbnQgdHJhY2tpbmcgbG9naWMgaW4gdGhlIGZhc3QgY29tbWl0IHBhdGgsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZmNfcmFuZ2VfYWRkXCIsXG4gICAgXCJfX3RyYWNrX3JhbmdlXCIsXG4gICAgXCJleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2VcIixcbiAgICBcImV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IGV4dDQgZmFzdCBjb21taXRzIHRyYWNrIG1vZGlmaWVkIGxvZ2ljYWwgYmxvY2sgcmFuZ2VzLCBtb3ZpbmcgZnJvbSBhIHNpbmdsZSBjb2FsZXNjZWQgcmFuZ2UgdG8gdHJhY2tpbmcgbXVsdGlwbGUgZGlzam9pbnQgcmFuZ2VzLiBUaGlzIGludm9sdmVzIG5ldyBhcnJheSBtYW5pcHVsYXRpb24sIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgZXh0ZW50IHRyYWNraW5nIGxvZ2ljIGluIHRoZSBmYXN0IGNvbW1pdCBwYXRoLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIHByZXZlbnQgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowts57f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 08:59:34 +0000 UTC FinishedAt: 2026-06-23 09:36:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "c143957520c6c9b5cd72e0de8b52b814f0c576fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "c143957520c6c9b5cd72e0de8b52b814f0c576fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "a2eb2d55-631d-42ed-a8e1-33a4951186d5" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_fc_range_add", "__track_range", "ext4_fc_snapshot_lblk_range", "ext4_fc_snapshot_inode_data" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2ZjX3JhbmdlX2FkZCYjMzQ7LAogICAgJiMzNDtfX3RyYWNrX3JhbmdlJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZSYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZXh0NCBmYXN0IGNvbW1pdHMgdHJhY2sgbW9kaWZpZWQgbG9naWNhbCBibG9jayByYW5nZXMsIG1vdmluZyBmcm9tIGEgc2luZ2xlIGNvYWxlc2NlZCByYW5nZSB0byB0cmFja2luZyBtdWx0aXBsZSBkaXNqb2ludCByYW5nZXMuIFRoaXMgaW52b2x2ZXMgbmV3IGFycmF5IG1hbmlwdWxhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBleHRlbnQgdHJhY2tpbmcgbG9naWMgaW4gdGhlIGZhc3QgY29tbWl0IHBhdGgsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmYjlhNGVhZDlmZjA3YmRkN2EwOTY5ZDJhZGY1NWRmY2FlZmZhMWQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDk6MzY6MzAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggZGRjOTAzNzM4YzZiMzMuLmQ5M2NjNTJjZDAxZWQwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMTA0Miw2ICYjNDM7MTA0MiwyMCBAQCBlbnVtIGV4dDRfZmNfc25hcF9lcnIge1xuIFx0RVhUNF9GQ19TTkFQX0VSUl9JTk9ERV9MT0MsXG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogTWF4aW11bSBudW1iZXIgb2YgZGlzam9pbnQgbG9naWNhbC1ibG9jayByYW5nZXMgdHJhY2tlZCBwZXIgaW5vZGUgZm9yIGFcbiYjNDM7ICogc2luZ2xlIGZhc3QgY29tbWl0LiAgU2NhdHRlcmVkIGFsbG9jYXRpb25zIHRoYXQgZXhjZWVkIHRoaXMgZ2V0IHRoZWlyIHR3b1xuJiM0MzsgKiBjbG9zZXN0IHJhbmdlcyBtZXJnZWQgKHNlZSBleHQ0X2ZjX3JhbmdlX2FkZCgpKSwgZGVncmFkaW5nIGdyYWNlZnVsbHkgdG9cbiYjNDM7ICogdGhlIG9sZCBzaW5nbGUgY29hbGVzY2VkLXJhbmdlIGJlaGF2aW91ci5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgRVhUNF9GQ19NQVhfUkFOR0VTIDE2XG4mIzQzO1xuJiM0MzsvKiBJbi1tZW1vcnkgcmVjb3JkIG9mIGFuIGxibGsgcmFuZ2UgbW9kaWZpZWQgaW4gdGhlIGN1cnJlbnQgZmFzdCBjb21taXQuICovXG4mIzQzO3N0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2Uge1xuJiM0MztcdGV4dDRfbGJsa190IHN0YXJ0O1xuJiM0MztcdGV4dDRfbGJsa190IGxlbjtcbiYjNDM7fTtcbiYjNDM7XG4gLypcbiAgKiBmb3VydGggZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gaW5vZGUgZGF0YSBpbiBtZW1vcnlcbiAgKi9cbkBAIC0xMDkxLDExICYjNDM7MTEwNSwyNSBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcbiBcdFx0XHRcdFx0ICogcHJvdGVjdGVkIGJ5IHNiaS1cdTAwM2VzX2ZjX2xvY2suXG4gXHRcdFx0XHRcdCAqL1xuIFxuLVx0LyogU3RhcnQgb2YgbGJsayByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGNvbW1pdHRlZCBpbiB0aGlzIGZhc3QgY29tbWl0ICovXG4tXHRleHQ0X2xibGtfdCBpX2ZjX2xibGtfc3RhcnQ7XG4tXG4tXHQvKiBFbmQgb2YgbGJsayByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGNvbW1pdHRlZCBpbiB0aGlzIGZhc3QgY29tbWl0ICovXG4tXHRleHQ0X2xibGtfdCBpX2ZjX2xibGtfbGVuO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTG9naWNhbCBibG9jayByYW5nZXMgbW9kaWZpZWQgaW4gdGhpcyBmYXN0IGNvbW1pdC4gIFRyYWNraW5nIHRoZVxuJiM0MztcdCAqIGFjdHVhbCBtb2RpZmllZCByYW5nZXMgKGluc3RlYWQgb2Ygb25lIGNvYWxlc2NlZCBbbWluLG1heF0pIGF2b2lkc1xuJiM0MztcdCAqIHNuYXBzaG90dGluZyB0aGUgd2hvbGUgc3Bhbm5lZCBleHRlbnQgbWFwIGZvciBzY2F0dGVyZWQgYWxsb2NhdGlvbnMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgZmlyc3QgcmFuZ2UgaXMga2VwdCBpbmxpbmUgaW4gaV9mY19yYW5nZSwgc28gdGhlIGNvbW1vbiBjYXNlIG9mIGFcbiYjNDM7XHQgKiBzaW5nbGUgY29udGlndW91cyBkaXJ0eSByZWdpb24gbmVlZHMgbm8gYWxsb2NhdGlvbi4gIFdoZW4gYSBzZWNvbmRcbiYjNDM7XHQgKiBkaXNqb2ludCByYW5nZSBhcHBlYXJzIHRoZSBpbm9kZSBpcyB1cGdyYWRlZCB0byB0aGUgaV9mY19yYW5nZXMgYXJyYXlcbiYjNDM7XHQgKiAoRVhUNF9GQ19NQVhfUkFOR0VTICYjNDM7IDEgZW50cmllcywgc29ydGVkIGFuZCBtdXR1YWxseSBkaXNqb2ludDsgdGhlXG4mIzQzO1x0ICogZXh0cmEgc2xvdCBpcyB0cmFuc2llbnQgcm9vbSB1c2VkIHdoaWxlIGluc2VydGluZyBiZWZvcmUgYW4gb3ZlcmZsb3dcbiYjNDM7XHQgKiBtZXJnZSksIGFsbG9jYXRlZCB0aGVuIGFuZCBmcmVlZCB3aGVuIHRoZSBpbm9kZSBpcyBldmljdGVkLiAgSWYgdGhhdFxuJiM0MztcdCAqIGFsbG9jYXRpb24gZmFpbHMgd2UgZmFsbCBiYWNrIHRvIGNvYWxlc2NpbmcgaW50byBpX2ZjX3JhbmdlLCBpLmUuIHRoZVxuJiM0MztcdCAqIG9yaWdpbmFsIHNpbmdsZSBjb2FsZXNjZWQtcmFuZ2UgYmVoYXZpb3VyLiAgaV9mY19ucl9yYW5nZXMgY291bnRzIHRoZVxuJiM0MztcdCAqIHZhbGlkIHJhbmdlczsgd2hpbGUgaV9mY19yYW5nZXMgaXMgTlVMTCBpdCBpcyAwIG9yIDEuICBQcm90ZWN0ZWQgYnlcbiYjNDM7XHQgKiBpX2ZjX2xvY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSBpX2ZjX3JhbmdlO1xuJiM0MztcdHN0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2UgKmlfZmNfcmFuZ2VzO1xuJiM0MztcdHVuc2lnbmVkIGludCBpX2ZjX25yX3JhbmdlcztcbiBcbiBcdC8qXG4gXHQgKiBDb21taXQtdGltZSBmYXN0IGNvbW1pdCBzbmFwc2hvdHMuXG5AQCAtMTExNiw4ICYjNDM7MTE0NCw4IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuIFx0c3BpbmxvY2tfdCBpX3Jhd19sb2NrO1x0LyogcHJvdGVjdHMgdXBkYXRlcyB0byB0aGUgcmF3IGlub2RlICovXG4gXG4gXHQvKlxuLVx0ICogUHJvdGVjdCBjb25jdXJyZW50IGFjY2Vzc2VzIG9uIGlfZmNfbGJsa19zdGFydCwgaV9mY19sYmxrX2xlblxuLVx0ICogYW5kIGlub2RlJiMzOTtzIEVYVDRfRkNfU1RBVEVfQ09NTUlUVElORyBzdGF0ZSBiaXQuXG4mIzQzO1x0ICogUHJvdGVjdCBjb25jdXJyZW50IGFjY2Vzc2VzIG9uIGlfZmNfcmFuZ2UsIGlfZmNfcmFuZ2VzLFxuJiM0MztcdCAqIGlfZmNfbnJfcmFuZ2VzIGFuZCBpbm9kZSYjMzk7cyBFWFQ0X0ZDX1NUQVRFX0NPTU1JVFRJTkcgc3RhdGUgYml0LlxuIFx0ICovXG4gXHRzcGlubG9ja190IGlfZmNfbG9jaztcbiBcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmMgYi9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbmluZGV4IDRlZjc5NmI5YjZjYjVmLi45ZDM2MzY1ZWFlMDJiYSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jXG5AQCAtMjIyLDggJiM0MzsyMjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9mY19yZXNldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiBcbi1cdGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydCA9IDA7XG4tXHRlaS1cdTAwM2VpX2ZjX2xibGtfbGVuID0gMDtcbiYjNDM7XHRlaS1cdTAwM2VpX2ZjX25yX3JhbmdlcyA9IDA7XG4gfVxuIFxuIHZvaWQgZXh0NF9mY19pbml0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5AQCAtMjMxLDYgJiM0MzsyMzAsNyBAQCB2b2lkIGV4dDRfZmNfaW5pdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xuIFxuIFx0ZXh0NF9mY19yZXNldF9pbm9kZShpbm9kZSk7XG4mIzQzO1x0ZWktXHUwMDNlaV9mY19yYW5nZXMgPSBOVUxMO1xuIFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9GQ19DT01NSVRUSU5HKTtcbiBcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfRkNfUkVRVUVVRSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX2ZjX2xpc3QpO1xuQEAgLTU4Miw3ICYjNDM7NTgyLDcgQEAgc3RhdGljIGludCBfX3RyYWNrX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmFyZyxcbiBcdGlmICh1cGRhdGUpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuLVx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZjX2xibGtfbGVuID0gMDtcbiYjNDM7XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmNfbnJfcmFuZ2VzID0gMDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC02MjIsMzIgJiM0Mzs2MjIsMTQ0IEBAIHN0cnVjdCBfX3RyYWNrX3JhbmdlX2FyZ3Mge1xuIFx0ZXh0NF9sYmxrX3Qgc3RhcnQsIGVuZDtcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBSZWNvcmQgdGhhdCBsb2dpY2FsIGJsb2NrIHJhbmdlIFtzdGFydCwgZW5kXSB3YXMgbW9kaWZpZWQgaW4gdGhlIGN1cnJlbnRcbiYjNDM7ICogZmFzdCBjb21taXQuICBNYWludGFpbnMgYSBzbWFsbCwgYm91bmRlZCBzZXQgb2Ygc29ydGVkLCBtdXR1YWxseSBkaXNqb2ludFxuJiM0MzsgKiByYW5nZXMsIG1lcmdpbmcgdGhlIG5ldyByYW5nZSB3aXRoIGFueSBpdCBvdmVybGFwcyBvciBpcyBhZGphY2VudCB0by4gIFdoZW5cbiYjNDM7ICogdGhlIHNldCB3b3VsZCBleGNlZWQgRVhUNF9GQ19NQVhfUkFOR0VTLCB0aGUgY29uc2VjdXRpdmUgcGFpciBzZXBhcmF0ZWQgYnlcbiYjNDM7ICogdGhlIHNtYWxsZXN0IGdhcCBpcyBtZXJnZWQgKGFic29yYmluZyB0aGF0IGdhcCksIHNvIHRoZSB3b3JzdCBjYXNlIGRlZ3JhZGVzXG4mIzQzOyAqIGdyYWNlZnVsbHkgdG8gdGhlIG9sZCBzaW5nbGUgY29hbGVzY2VkLXJhbmdlIGJlaGF2aW91ci4gIFRyYWNraW5nIHRoZSBhY3R1YWxcbiYjNDM7ICogbW9kaWZpZWQgcmFuZ2VzIChyYXRoZXIgdGhhbiBvbmUgW21pbixtYXhdIHNwYW4pIGtlZXBzXG4mIzQzOyAqIGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YSgpIGZyb20gc25hcHNob3R0aW5nIHRoZSB3aG9sZSBzcGFubmVkIGV4dGVudCBtYXBcbiYjNDM7ICogb24gc2NhdHRlcmVkIGFsbG9jYXRpb25zLiAgQ2FsbGVyIGhvbGRzIGVpLVx1MDAzZWlfZmNfbG9jazsgZWktXHUwMDNlaV9mY19yYW5nZXMgaXNcbiYjNDM7ICogbm9uLU5VTEwgd2l0aCByb29tIGZvciBFWFQ0X0ZDX01BWF9SQU5HRVMgJiM0MzsgMSBlbnRyaWVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZXh0NF9mY19yYW5nZV9hZGQoc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWksXG4mIzQzO1x0XHRcdCAgICAgIGV4dDRfbGJsa190IHN0YXJ0LCBleHQ0X2xibGtfdCBlbmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZXh0NF9mY19sYmxrX3JhbmdlICpyID0gZWktXHUwMDNlaV9mY19yYW5nZXM7XG4mIzQzO1x0dW5zaWduZWQgaW50IG4gPSBlaS1cdTAwM2VpX2ZjX25yX3JhbmdlcztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaSwgajtcbiYjNDM7XG4mIzQzO1x0LyogU2tpcCByYW5nZXMgbHlpbmcgZW50aXJlbHkgYmVmb3JlIFtzdGFydCAtIDFdIChubyBvdmVybGFwL2FkamFjZW5jeSkuICovXG4mIzQzO1x0aSA9IDA7XG4mIzQzO1x0d2hpbGUgKGkgXHUwMDNjIG4gXHUwMDI2XHUwMDI2IHJbaV0uc3RhcnQgJiM0MzsgcltpXS5sZW4gXHUwMDNjIHN0YXJ0KVxuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdC8qIEFic29yYiBldmVyeSByYW5nZSBvdmVybGFwcGluZyBvciBhZGphY2VudCB0byB0aGUgZ3Jvd2luZyBbc3RhcnQsZW5kXS4gKi9cbiYjNDM7XHRqID0gaTtcbiYjNDM7XHR3aGlsZSAoaiBcdTAwM2MgbiBcdTAwMjZcdTAwMjYgcltqXS5zdGFydCBcdTAwM2M9IGVuZCAmIzQzOyAxKSB7XG4mIzQzO1x0XHRpZiAocltqXS5zdGFydCBcdTAwM2Mgc3RhcnQpXG4mIzQzO1x0XHRcdHN0YXJ0ID0gcltqXS5zdGFydDtcbiYjNDM7XHRcdGlmIChyW2pdLnN0YXJ0ICYjNDM7IHJbal0ubGVuIC0gMSBcdTAwM2UgZW5kKVxuJiM0MztcdFx0XHRlbmQgPSByW2pdLnN0YXJ0ICYjNDM7IHJbal0ubGVuIC0gMTtcbiYjNDM7XHRcdGomIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUmVwbGFjZSByW2kuLmotMV0gd2l0aCB0aGUgbWVyZ2VkIHJhbmdlIChqID09IGkgaXMgYSBwbGFpbiBpbnNlcnQpLiAqL1xuJiM0MztcdGlmIChqICE9IGkgJiM0MzsgMSlcbiYjNDM7XHRcdG1lbW1vdmUoXHUwMDI2cltpICYjNDM7IDFdLCBcdTAwMjZyW2pdLCAobiAtIGopICogc2l6ZW9mKCpyKSk7XG4mIzQzO1x0cltpXS5zdGFydCA9IHN0YXJ0O1xuJiM0MztcdHJbaV0ubGVuID0gZW5kIC0gc3RhcnQgJiM0MzsgMTtcbiYjNDM7XHRlaS1cdTAwM2VpX2ZjX25yX3JhbmdlcyA9IG4gLSAoaiAtIGkpICYjNDM7IDE7XG4mIzQzO1xuJiM0MztcdC8qIE92ZXJmbG93OiBtZXJnZSB0aGUgY29uc2VjdXRpdmUgcGFpciBzZXBhcmF0ZWQgYnkgdGhlIHNtYWxsZXN0IGdhcC4gKi9cbiYjNDM7XHR3aGlsZSAoZWktXHUwMDNlaV9mY19ucl9yYW5nZXMgXHUwMDNlIEVYVDRfRkNfTUFYX1JBTkdFUykge1xuJiM0MztcdFx0ZXh0NF9sYmxrX3QgYmVzdF9nYXAgPSB+MFU7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgYmVzdCA9IDA7XG4mIzQzO1xuJiM0MztcdFx0biA9IGVpLVx1MDAzZWlfZmNfbnJfcmFuZ2VzO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSAmIzQzOyAxIFx1MDAzYyBuOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRleHQ0X2xibGtfdCBnYXAgPSByW2kgJiM0MzsgMV0uc3RhcnQgLVxuJiM0MztcdFx0XHRcdFx0ICAocltpXS5zdGFydCAmIzQzOyByW2ldLmxlbik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoZ2FwIFx1MDAzYyBiZXN0X2dhcCkge1xuJiM0MztcdFx0XHRcdGJlc3RfZ2FwID0gZ2FwO1xuJiM0MztcdFx0XHRcdGJlc3QgPSBpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyW2Jlc3RdLmxlbiA9IHJbYmVzdCAmIzQzOyAxXS5zdGFydCAmIzQzOyByW2Jlc3QgJiM0MzsgMV0ubGVuIC0gcltiZXN0XS5zdGFydDtcbiYjNDM7XHRcdG1lbW1vdmUoXHUwMDI2cltiZXN0ICYjNDM7IDFdLCBcdTAwMjZyW2Jlc3QgJiM0MzsgMl0sXG4mIzQzO1x0XHRcdChuIC0gYmVzdCAtIDIpICogc2l6ZW9mKCpyKSk7XG4mIzQzO1x0XHRlaS1cdTAwM2VpX2ZjX25yX3JhbmdlcyA9IG4gLSAxO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKiBfX3RyYWNrX2ZuIGZvciB0cmFja2luZyBkYXRhIHVwZGF0ZXMgKi9cbiBzdGF0aWMgaW50IF9fdHJhY2tfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYXJnLFxuIFx0XHRcdCBib29sIHVwZGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4tXHRleHQ0X2xibGtfdCBvbGRzdGFydDtcbiBcdHN0cnVjdCBfX3RyYWNrX3JhbmdlX2FyZ3MgKl9fYXJnID1cbiBcdFx0KHN0cnVjdCBfX3RyYWNrX3JhbmdlX2FyZ3MgKilhcmc7XG4mIzQzO1x0ZXh0NF9sYmxrX3Qgc3RhcnQgPSBfX2FyZy1cdTAwM2VzdGFydCwgZW5kID0gX19hcmctXHUwMDNlZW5kO1xuJiM0MztcdGV4dDRfbGJsa190IHMwLCBlMDtcbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX2lubyBcdTAwM2MgRVhUNF9GSVJTVF9JTk8oaW5vZGUtXHUwMDNlaV9zYikpIHtcbiBcdFx0ZXh0NF9kZWJ1ZyhcJiMzNDtTcGVjaWFsIGlub2RlICVsbHUgYmVpbmcgbW9kaWZpZWRcXG5cJiMzNDssIGlub2RlLVx1MDAzZWlfaW5vKTtcbiBcdFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XG4gXHR9XG4gXG4tXHRvbGRzdGFydCA9IGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgc3ViLWJsb2NrIHB1bmNoIGhvbGUgcm91bmRzIHVwIHRoZSBzdGFydCBhbmQgZG93biB0aGUgZW5kLCBwYXNzaW5nXG4mIzQzO1x0ICogZW5kID09IHN0YXJ0IC0gMTogbm8gd2hvbGUgYmxvY2sgY2hhbmdlZCwgc28gdGhlcmUgaXMgbm90aGluZyB0b1xuJiM0MztcdCAqIHRyYWNrLiAgKGV4dDRfZmNfdHJhY2tfdGVtcGxhdGUgaGFzIGFscmVhZHkgcmVzZXQgdGhlIHJhbmdlIHNldCBmb3IgYVxuJiM0MztcdCAqIG5ldyB0cmFuc2FjdGlvbiwgc28gd2UgbmVlZCBub3QgZG8gaXQgaGVyZS4pXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGVuZCBcdTAwM2Mgc3RhcnQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICh1cGRhdGUgXHUwMDI2XHUwMDI2IGVpLVx1MDAzZWlfZmNfbGJsa19sZW4gXHUwMDNlIDApIHtcbi1cdFx0ZWktXHUwMDNlaV9mY19sYmxrX3N0YXJ0ID0gbWluKGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydCwgX19hcmctXHUwMDNlc3RhcnQpO1xuLVx0XHRlaS1cdTAwM2VpX2ZjX2xibGtfbGVuID1cbi1cdFx0XHRtYXgob2xkc3RhcnQgJiM0MzsgZWktXHUwMDNlaV9mY19sYmxrX2xlbiAtIDEsIF9fYXJnLVx1MDAzZWVuZCkgLVxuLVx0XHRcdFx0ZWktXHUwMDNlaV9mY19sYmxrX3N0YXJ0ICYjNDM7IDE7XG4tXHR9IGVsc2Uge1xuLVx0XHRlaS1cdTAwM2VpX2ZjX2xibGtfc3RhcnQgPSBfX2FyZy1cdTAwM2VzdGFydDtcbi1cdFx0ZWktXHUwMDNlaV9mY19sYmxrX2xlbiA9IF9fYXJnLVx1MDAzZWVuZCAtIF9fYXJnLVx1MDAzZXN0YXJ0ICYjNDM7IDE7XG4mIzQzO1x0LyogQWxyZWFkeSB1cGdyYWRlZCB0byB0aGUgaGVhcCBhcnJheTogZnVsbCBtdWx0aS1pbnRlcnZhbCB0cmFja2luZy4gKi9cbiYjNDM7XHRpZiAoZWktXHUwMDNlaV9mY19yYW5nZXMpIHtcbiYjNDM7XHRcdGV4dDRfZmNfcmFuZ2VfYWRkKGVpLCBzdGFydCwgZW5kKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRmlyc3QgcmFuZ2Ugb2YgdGhpcyBjb21taXQgc3RheXMgaW5saW5lLCBubyBhbGxvY2F0aW9uIG5lZWRlZC4gKi9cbiYjNDM7XHRpZiAoZWktXHUwMDNlaV9mY19ucl9yYW5nZXMgPT0gMCkge1xuJiM0MztcdFx0ZWktXHUwMDNlaV9mY19yYW5nZS5zdGFydCA9IHN0YXJ0O1xuJiM0MztcdFx0ZWktXHUwMDNlaV9mY19yYW5nZS5sZW4gPSBlbmQgLSBzdGFydCAmIzQzOyAxO1xuJiM0MztcdFx0ZWktXHUwMDNlaV9mY19ucl9yYW5nZXMgPSAxO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBPbmUgaW5saW5lIHJhbmdlIHNvIGZhci4gKi9cbiYjNDM7XHRzMCA9IGVpLVx1MDAzZWlfZmNfcmFuZ2Uuc3RhcnQ7XG4mIzQzO1x0ZTAgPSBzMCAmIzQzOyBlaS1cdTAwM2VpX2ZjX3JhbmdlLmxlbiAtIDE7XG4mIzQzO1xuJiM0MztcdC8qIERpc2pvaW50IGZyb20gaXQ6IHRyeSB0byB1cGdyYWRlIHRvIHRoZSBhcnJheSBmb3IgZXhhY3QgdHJhY2tpbmcuICovXG4mIzQzO1x0aWYgKHN0YXJ0IFx1MDAzZSBlMCAmIzQzOyAxIHx8IGVuZCAmIzQzOyAxIFx1MDAzYyBzMCkge1xuJiM0MztcdFx0c3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSAqaGVhcDtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogR0ZQX0FUT01JQzogd2UgaG9sZCBpX2ZjX2xvY2suICBfX0dGUF9OT1dBUk46IGZhaWx1cmUgaXMgbm90XG4mIzQzO1x0XHQgKiBmYXRhbCAtLSB3ZSBmYWxsIGJhY2sgdG8gdGhlIHNpbmdsZSBjb2FsZXNjZWQgcmFuZ2UgYmVsb3cgLS1cbiYjNDM7XHRcdCAqIHNvIGl0IG11c3Qgbm90IHNwbGF0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aGVhcCA9IGttYWxsb2NfYXJyYXkoRVhUNF9GQ19NQVhfUkFOR0VTICYjNDM7IDEsIHNpemVvZigqaGVhcCksXG4mIzQzO1x0XHRcdFx0ICAgICBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcbiYjNDM7XHRcdGlmIChoZWFwKSB7XG4mIzQzO1x0XHRcdGhlYXBbMF0gPSBlaS1cdTAwM2VpX2ZjX3JhbmdlO1xuJiM0MztcdFx0XHRlaS1cdTAwM2VpX2ZjX3JhbmdlcyA9IGhlYXA7XG4mIzQzO1x0XHRcdGV4dDRfZmNfcmFuZ2VfYWRkKGVpLCBzdGFydCwgZW5kKTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogT3V0IG9mIG1lbW9yeTogZmFsbCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzaW5nbGUgY29hbGVzY2VkXG4mIzQzO1x0XHQgKiByYW5nZSBieSBhYnNvcmJpbmcgdGhlIGdhcCBiZWxvdy4gIFRoaXMgb3Zlci1sb2dzIHRoZSBzcGFubmVkXG4mIzQzO1x0XHQgKiBleHRlbnRzIGJ1dCBzdGF5cyBhIHZhbGlkIGZhc3QgY29tbWl0IChubyBmdWxsLWNvbW1pdFxuJiM0MztcdFx0ICogZmFsbGJhY2spLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIG1hcmsgaW5lbGlnaWJsZS5cbiYjNDM7XHRcdCAqL1xuIFx0fVxuIFxuJiM0MztcdC8qIE92ZXJsYXBwaW5nL2FkamFjZW50LCBvciBhcnJheSBhbGxvY2F0aW9uIGZhaWxlZDogY29hbGVzY2UgaW5saW5lLiAqL1xuJiM0MztcdGlmIChzdGFydCBcdTAwM2MgczApXG4mIzQzO1x0XHRzMCA9IHN0YXJ0O1xuJiM0MztcdGlmIChlbmQgXHUwMDNlIGUwKVxuJiM0MztcdFx0ZTAgPSBlbmQ7XG4mIzQzO1x0ZWktXHUwMDNlaV9mY19yYW5nZS5zdGFydCA9IHMwO1xuJiM0MztcdGVpLVx1MDAzZWlfZmNfcmFuZ2UubGVuID0gZTAgLSBzMCAmIzQzOyAxO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC05OTQsMzEgJiM0MzsxMTA2LDI2IEBAIHN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZV9pbm9kZV9zbmFwKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRlaS1cdTAwM2VpX2ZjX3NuYXAgPSBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MzsvKlxuJiM0MzsgKiBTbmFwc2hvdCBvbmUgbW9kaWZpZWQgbGJsayByYW5nZSBbc3RhcnRfbGJsaywgZW5kX2xibGtdIGludG8gQHJhbmdlcyBieVxuJiM0MzsgKiB3YWxraW5nIHRoZSBleHRlbnQgc3RhdHVzIHRyZWUsIGVtaXR0aW5nIGFuIEFERF9SQU5HRSBwZXIgbWFwcGVkIHNlZ21lbnQgYW5kXG4mIzQzOyAqIGEgREVMX1JBTkdFIHBlciBob2xlLiAgKm5yX3JhbmdlcyBhY2N1bXVsYXRlcyB0aGUgbnVtYmVyIG9mIHJhbmdlcyBwcm9kdWNlZFxuJiM0MzsgKiBmb3IgdGhpcyBpbm9kZSBhY3Jvc3MgY2FsbHM7IHRvZ2V0aGVyIHdpdGggbnJfcmFuZ2VzX3RvdGFsIChyYW5nZXMgYWxyZWFkeVxuJiM0MzsgKiBwcm9kdWNlZCBieSBlYXJsaWVyIGlub2RlcyBpbiB0aGlzIGNvbW1pdCkgaXQgaXMgYm91bmRlZCBhZ2FpbnN0XG4mIzQzOyAqIEVYVDRfRkNfU05BUFNIT1RfTUFYX1JBTkdFUy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZXh0NF9mY19zbmFwc2hvdF9sYmxrX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGV4dDRfbGJsa190IHN0YXJ0X2xibGssXG4mIzQzO1x0XHRcdFx0ICAgICAgIGV4dDRfbGJsa190IGVuZF9sYmxrLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJhbmdlcyxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzX3RvdGFsLFxuLVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCAqbnJfcmFuZ2VzcCxcbiYjNDM7XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50ICpucl9yYW5nZXMsXG4gXHRcdFx0XHQgICAgICAgaW50ICpzbmFwX2VycilcbiB7XG4tXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4gXHRzdHJ1Y3QgZXh0NF9mY19zbmFwX3N0YXRzICpzdGF0cyA9XG4gXHRcdFx1MDAyNkVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19mY19zbmFwX3N0YXRzO1xuLVx0ZXh0NF9sYmxrX3Qgc3RhcnRfbGJsaywgZW5kX2xibGssIGN1cl9sYmxrO1xuLVx0dW5zaWduZWQgaW50IG5yX3JhbmdlcyA9IDA7XG4tXG4tXHRzcGluX2xvY2soXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbi1cdGlmIChlaS1cdTAwM2VpX2ZjX2xibGtfbGVuID09IDApIHtcbi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbi1cdFx0aWYgKG5yX3Jhbmdlc3ApXG4tXHRcdFx0Km5yX3Jhbmdlc3AgPSAwO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cdHN0YXJ0X2xibGsgPSBlaS1cdTAwM2VpX2ZjX2xibGtfc3RhcnQ7XG4tXHRlbmRfbGJsayA9IGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydCAmIzQzOyBlaS1cdTAwM2VpX2ZjX2xibGtfbGVuIC0gMTtcbi1cdGVpLVx1MDAzZWlfZmNfbGJsa19sZW4gPSAwO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbiYjNDM7XHRleHQ0X2xibGtfdCBjdXJfbGJsayA9IHN0YXJ0X2xibGs7XG4gXG4tXHRjdXJfbGJsayA9IHN0YXJ0X2xibGs7XG4gXHRleHQ0X2RlYnVnKFwmIzM0O3NuYXBzaG90IGRhdGEgcmFuZ2VzICV1LSV1IGZvciBpbm9kZSAlbGx1XFxuXCYjMzQ7LFxuIFx0XHQgICBzdGFydF9sYmxrLCBlbmRfbGJsayxcbiBcdFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbm9kZS1cdTAwM2VpX2lubyk7XG5AQCAtMTA1MCw3ICYjNDM7MTE1Nyw3IEBAIHN0YXRpYyBpbnQgZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKG5yX3Jhbmdlc190b3RhbCAmIzQzOyBucl9yYW5nZXMgXHUwMDNlPSBFWFQ0X0ZDX1NOQVBTSE9UX01BWF9SQU5HRVMpIHtcbiYjNDM7XHRcdGlmIChucl9yYW5nZXNfdG90YWwgJiM0MzsgKm5yX3JhbmdlcyBcdTAwM2U9IEVYVDRfRkNfU05BUFNIT1RfTUFYX1JBTkdFUykge1xuIFx0XHRcdGF0b21pYzY0X2luYyhcdTAwMjZzdGF0cy1cdTAwM2VzbmFwX2ZhaWxfcmFuZ2VzX2NhcCk7XG4gXHRcdFx0ZXh0NF9mY19zZXRfc25hcF9lcnIoc25hcF9lcnIsXG4gXHRcdFx0XHRcdCAgICAgRVhUNF9GQ19TTkFQX0VSUl9SQU5HRVNfQ0FQKTtcbkBAIC0xMDYzLDcgJiM0MzsxMTcwLDcgQEAgc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X2ZjX3NldF9zbmFwX2VycihzbmFwX2VyciwgRVhUNF9GQ19TTkFQX0VSUl9OT01FTSk7XG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdH1cbi1cdFx0bnJfcmFuZ2VzJiM0MzsmIzQzOztcbiYjNDM7XHRcdCgqbnJfcmFuZ2VzKSYjNDM7JiM0Mzs7XG4gXG4gXHRcdHJhbmdlLVx1MDAzZWxibGsgPSBjdXJfbGJsaztcbiBcdFx0cmFuZ2UtXHUwMDNlbGVuID0gbGVuO1xuQEAgLTExMDEsNiAmIzQzOzEyMDgsNTIgQEAgc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0Y3VyX2xibGsgJiM0Mzs9IHJhbmdlLVx1MDAzZWxlbjtcbiBcdH1cbiBcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqcmFuZ2VzLFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzX3RvdGFsLFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgKm5yX3Jhbmdlc3AsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGludCAqc25hcF9lcnIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4mIzQzO1x0c3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSB0cmFja2VkW0VYVDRfRkNfTUFYX1JBTkdFUyAmIzQzOyAxXTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzID0gMCwgbnJfdHJhY2tlZCwgdDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbiYjNDM7XHRucl90cmFja2VkID0gZWktXHUwMDNlaV9mY19ucl9yYW5nZXM7XG4mIzQzO1x0aWYgKG5yX3RyYWNrZWQgPT0gMCkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbiYjNDM7XHRcdGlmIChucl9yYW5nZXNwKVxuJiM0MztcdFx0XHQqbnJfcmFuZ2VzcCA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGVpLVx1MDAzZWlfZmNfcmFuZ2VzKVxuJiM0MztcdFx0bWVtY3B5KHRyYWNrZWQsIGVpLVx1MDAzZWlfZmNfcmFuZ2VzLFxuJiM0MztcdFx0ICAgICAgIG5yX3RyYWNrZWQgKiBzaXplb2YodHJhY2tlZFswXSkpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHRyYWNrZWRbMF0gPSBlaS1cdTAwM2VpX2ZjX3JhbmdlO1x0LyogaW5saW5lIHNpbmdsZS1yYW5nZSBtb2RlICovXG4mIzQzO1x0ZWktXHUwMDNlaV9mY19ucl9yYW5nZXMgPSAwO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmVpLVx1MDAzZWlfZmNfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU25hcHNob3Qgb25seSB0aGUgYWN0dWFsbHktbW9kaWZpZWQgcmFuZ2VzLCBub3QgdGhlIHdob2xlIFttaW4sbWF4XVxuJiM0MztcdCAqIHNwYW46IHRoaXMgaXMgd2hhdCBrZWVwcyBzY2F0dGVyZWQgYWxsb2NhdGlvbnMgZnJvbSBibG93aW5nIHBhc3RcbiYjNDM7XHQgKiBFWFQ0X0ZDX1NOQVBTSE9UX01BWF9SQU5HRVMgYW5kIGZhbGxpbmcgYmFjayB0byBhIGZ1bGwgY29tbWl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAodCA9IDA7IHQgXHUwMDNjIG5yX3RyYWNrZWQ7IHQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRleHQ0X2xibGtfdCBzID0gdHJhY2tlZFt0XS5zdGFydDtcbiYjNDM7XHRcdGV4dDRfbGJsa190IGUgPSBzICYjNDM7IHRyYWNrZWRbdF0ubGVuIC0gMTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2UoaW5vZGUsIHMsIGUsIHJhbmdlcyxcbiYjNDM7XHRcdFx0XHRcdFx0ICBucl9yYW5nZXNfdG90YWwsIFx1MDAyNm5yX3JhbmdlcyxcbiYjNDM7XHRcdFx0XHRcdFx0ICBzbmFwX2Vycik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAobnJfcmFuZ2VzcClcbiBcdFx0Km5yX3Jhbmdlc3AgPSBucl9yYW5nZXM7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IGYyYzUyY2M3NDY3NjU1Li5jZmE3ZTZiZWMzODVlNiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtMTQ1NSw2ICYjNDM7MTQ1NSw3IEBAIHN0YXRpYyB2b2lkIGV4dDRfZnJlZV9pbl9jb3JlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdHByX3dhcm4oXCYjMzQ7JXM6IGlub2RlICVsbHUgc3RpbGwgaW4gZmMgbGlzdFwmIzM0OyxcbiBcdFx0XHRfX2Z1bmNfXywgaW5vZGUtXHUwMDNlaV9pbm8pO1xuIFx0fVxuJiM0MztcdGtmcmVlKEVYVDRfSShpbm9kZSktXHUwMDNlaV9mY19yYW5nZXMpO1xuIFx0a21lbV9jYWNoZV9mcmVlKGV4dDRfaW5vZGVfY2FjaGVwLCBFWFQ0X0koaW5vZGUpKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZmNfcmFuZ2VfYWRkJiMzNDssCiAgICAmIzM0O19fdHJhY2tfcmFuZ2UmIzM0OywKICAgICYjMzQ7ZXh0NF9mY19zbmFwc2hvdF9sYmxrX3JhbmdlJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGhvdyBleHQ0IGZhc3QgY29tbWl0cyB0cmFjayBtb2RpZmllZCBsb2dpY2FsIGJsb2NrIHJhbmdlcywgbW92aW5nIGZyb20gYSBzaW5nbGUgY29hbGVzY2VkIHJhbmdlIHRvIHRyYWNraW5nIG11bHRpcGxlIGRpc2pvaW50IHJhbmdlcy4gVGhpcyBpbnZvbHZlcyBuZXcgYXJyYXkgbWFuaXB1bGF0aW9uLCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIGV4dGVudCB0cmFja2luZyBsb2dpYyBpbiB0aGUgZmFzdCBjb21taXQgcGF0aCwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBwcmV2ZW50IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmI5YTRlYWQ5ZmYwN2JkZDdhMDk2OWQyYWRmNTVkZmNhZWZmYTFkMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDIzIDA5OjM2OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaAppbmRleCBkZGM5MDM3MzhjNmIzMy4uZDkzY2M1MmNkMDFlZDAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC0xMDQyLDYgJiM0MzsxMDQyLDIwIEBAIGVudW0gZXh0NF9mY19zbmFwX2VyciB7CiAJRVhUNF9GQ19TTkFQX0VSUl9JTk9ERV9MT0MsCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBNYXhpbXVtIG51bWJlciBvZiBkaXNqb2ludCBsb2dpY2FsLWJsb2NrIHJhbmdlcyB0cmFja2VkIHBlciBpbm9kZSBmb3IgYQomIzQzOyAqIHNpbmdsZSBmYXN0IGNvbW1pdC4gIFNjYXR0ZXJlZCBhbGxvY2F0aW9ucyB0aGF0IGV4Y2VlZCB0aGlzIGdldCB0aGVpciB0d28KJiM0MzsgKiBjbG9zZXN0IHJhbmdlcyBtZXJnZWQgKHNlZSBleHQ0X2ZjX3JhbmdlX2FkZCgpKSwgZGVncmFkaW5nIGdyYWNlZnVsbHkgdG8KJiM0MzsgKiB0aGUgb2xkIHNpbmdsZSBjb2FsZXNjZWQtcmFuZ2UgYmVoYXZpb3VyLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgRVhUNF9GQ19NQVhfUkFOR0VTIDE2CiYjNDM7CiYjNDM7LyogSW4tbWVtb3J5IHJlY29yZCBvZiBhbiBsYmxrIHJhbmdlIG1vZGlmaWVkIGluIHRoZSBjdXJyZW50IGZhc3QgY29tbWl0LiAqLwomIzQzO3N0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2UgewomIzQzOwlleHQ0X2xibGtfdCBzdGFydDsKJiM0MzsJZXh0NF9sYmxrX3QgbGVuOwomIzQzO307CiYjNDM7CiAvKgogICogZm91cnRoIGV4dGVuZGVkIGZpbGUgc3lzdGVtIGlub2RlIGRhdGEgaW4gbWVtb3J5CiAgKi8KQEAgLTEwOTEsMTEgJiM0MzsxMTA1LDI1IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8gewogCQkJCQkgKiBwcm90ZWN0ZWQgYnkgc2JpLSZndDtzX2ZjX2xvY2suCiAJCQkJCSAqLwogCi0JLyogU3RhcnQgb2YgbGJsayByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGNvbW1pdHRlZCBpbiB0aGlzIGZhc3QgY29tbWl0ICovCi0JZXh0NF9sYmxrX3QgaV9mY19sYmxrX3N0YXJ0OwotCi0JLyogRW5kIG9mIGxibGsgcmFuZ2UgdGhhdCBuZWVkcyB0byBiZSBjb21taXR0ZWQgaW4gdGhpcyBmYXN0IGNvbW1pdCAqLwotCWV4dDRfbGJsa190IGlfZmNfbGJsa19sZW47CiYjNDM7CS8qCiYjNDM7CSAqIExvZ2ljYWwgYmxvY2sgcmFuZ2VzIG1vZGlmaWVkIGluIHRoaXMgZmFzdCBjb21taXQuICBUcmFja2luZyB0aGUKJiM0MzsJICogYWN0dWFsIG1vZGlmaWVkIHJhbmdlcyAoaW5zdGVhZCBvZiBvbmUgY29hbGVzY2VkIFttaW4sbWF4XSkgYXZvaWRzCiYjNDM7CSAqIHNuYXBzaG90dGluZyB0aGUgd2hvbGUgc3Bhbm5lZCBleHRlbnQgbWFwIGZvciBzY2F0dGVyZWQgYWxsb2NhdGlvbnMuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBmaXJzdCByYW5nZSBpcyBrZXB0IGlubGluZSBpbiBpX2ZjX3JhbmdlLCBzbyB0aGUgY29tbW9uIGNhc2Ugb2YgYQomIzQzOwkgKiBzaW5nbGUgY29udGlndW91cyBkaXJ0eSByZWdpb24gbmVlZHMgbm8gYWxsb2NhdGlvbi4gIFdoZW4gYSBzZWNvbmQKJiM0MzsJICogZGlzam9pbnQgcmFuZ2UgYXBwZWFycyB0aGUgaW5vZGUgaXMgdXBncmFkZWQgdG8gdGhlIGlfZmNfcmFuZ2VzIGFycmF5CiYjNDM7CSAqIChFWFQ0X0ZDX01BWF9SQU5HRVMgJiM0MzsgMSBlbnRyaWVzLCBzb3J0ZWQgYW5kIG11dHVhbGx5IGRpc2pvaW50OyB0aGUKJiM0MzsJICogZXh0cmEgc2xvdCBpcyB0cmFuc2llbnQgcm9vbSB1c2VkIHdoaWxlIGluc2VydGluZyBiZWZvcmUgYW4gb3ZlcmZsb3cKJiM0MzsJICogbWVyZ2UpLCBhbGxvY2F0ZWQgdGhlbiBhbmQgZnJlZWQgd2hlbiB0aGUgaW5vZGUgaXMgZXZpY3RlZC4gIElmIHRoYXQKJiM0MzsJICogYWxsb2NhdGlvbiBmYWlscyB3ZSBmYWxsIGJhY2sgdG8gY29hbGVzY2luZyBpbnRvIGlfZmNfcmFuZ2UsIGkuZS4gdGhlCiYjNDM7CSAqIG9yaWdpbmFsIHNpbmdsZSBjb2FsZXNjZWQtcmFuZ2UgYmVoYXZpb3VyLiAgaV9mY19ucl9yYW5nZXMgY291bnRzIHRoZQomIzQzOwkgKiB2YWxpZCByYW5nZXM7IHdoaWxlIGlfZmNfcmFuZ2VzIGlzIE5VTEwgaXQgaXMgMCBvciAxLiAgUHJvdGVjdGVkIGJ5CiYjNDM7CSAqIGlfZmNfbG9jay4KJiM0MzsJICovCiYjNDM7CXN0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2UgaV9mY19yYW5nZTsKJiM0MzsJc3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSAqaV9mY19yYW5nZXM7CiYjNDM7CXVuc2lnbmVkIGludCBpX2ZjX25yX3JhbmdlczsKIAogCS8qCiAJICogQ29tbWl0LXRpbWUgZmFzdCBjb21taXQgc25hcHNob3RzLgpAQCAtMTExNiw4ICYjNDM7MTE0NCw4IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8gewogCXNwaW5sb2NrX3QgaV9yYXdfbG9jazsJLyogcHJvdGVjdHMgdXBkYXRlcyB0byB0aGUgcmF3IGlub2RlICovCiAKIAkvKgotCSAqIFByb3RlY3QgY29uY3VycmVudCBhY2Nlc3NlcyBvbiBpX2ZjX2xibGtfc3RhcnQsIGlfZmNfbGJsa19sZW4KLQkgKiBhbmQgaW5vZGUmIzM5O3MgRVhUNF9GQ19TVEFURV9DT01NSVRUSU5HIHN0YXRlIGJpdC4KJiM0MzsJICogUHJvdGVjdCBjb25jdXJyZW50IGFjY2Vzc2VzIG9uIGlfZmNfcmFuZ2UsIGlfZmNfcmFuZ2VzLAomIzQzOwkgKiBpX2ZjX25yX3JhbmdlcyBhbmQgaW5vZGUmIzM5O3MgRVhUNF9GQ19TVEFURV9DT01NSVRUSU5HIHN0YXRlIGJpdC4KIAkgKi8KIAlzcGlubG9ja190IGlfZmNfbG9jazsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jCmluZGV4IDRlZjc5NmI5YjZjYjVmLi45ZDM2MzY1ZWFlMDJiYSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZmFzdF9jb21taXQuYwpAQCAtMjIyLDggJiM0MzsyMjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9mY19yZXNldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTsKIAotCWVpLSZndDtpX2ZjX2xibGtfc3RhcnQgPSAwOwotCWVpLSZndDtpX2ZjX2xibGtfbGVuID0gMDsKJiM0MzsJZWktJmd0O2lfZmNfbnJfcmFuZ2VzID0gMDsKIH0KIAogdm9pZCBleHQ0X2ZjX2luaXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTIzMSw2ICYjNDM7MjMwLDcgQEAgdm9pZCBleHQ0X2ZjX2luaXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CiAKIAlleHQ0X2ZjX3Jlc2V0X2lub2RlKGlub2RlKTsKJiM0MzsJZWktJmd0O2lfZmNfcmFuZ2VzID0gTlVMTDsKIAlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX0ZDX0NPTU1JVFRJTkcpOwogCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfRkNfUkVRVUVVRSk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtlaS0mZ3Q7aV9mY19saXN0KTsKQEAgLTU4Miw3ICYjNDM7NTgyLDcgQEAgc3RhdGljIGludCBfX3RyYWNrX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmFyZywKIAlpZiAodXBkYXRlKQogCQlyZXR1cm4gLUVFWElTVDsKIAotCUVYVDRfSShpbm9kZSktJmd0O2lfZmNfbGJsa19sZW4gPSAwOwomIzQzOwlFWFQ0X0koaW5vZGUpLSZndDtpX2ZjX25yX3JhbmdlcyA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYyMiwzMiAmIzQzOzYyMiwxNDQgQEAgc3RydWN0IF9fdHJhY2tfcmFuZ2VfYXJncyB7CiAJZXh0NF9sYmxrX3Qgc3RhcnQsIGVuZDsKIH07CiAKJiM0MzsvKgomIzQzOyAqIFJlY29yZCB0aGF0IGxvZ2ljYWwgYmxvY2sgcmFuZ2UgW3N0YXJ0LCBlbmRdIHdhcyBtb2RpZmllZCBpbiB0aGUgY3VycmVudAomIzQzOyAqIGZhc3QgY29tbWl0LiAgTWFpbnRhaW5zIGEgc21hbGwsIGJvdW5kZWQgc2V0IG9mIHNvcnRlZCwgbXV0dWFsbHkgZGlzam9pbnQKJiM0MzsgKiByYW5nZXMsIG1lcmdpbmcgdGhlIG5ldyByYW5nZSB3aXRoIGFueSBpdCBvdmVybGFwcyBvciBpcyBhZGphY2VudCB0by4gIFdoZW4KJiM0MzsgKiB0aGUgc2V0IHdvdWxkIGV4Y2VlZCBFWFQ0X0ZDX01BWF9SQU5HRVMsIHRoZSBjb25zZWN1dGl2ZSBwYWlyIHNlcGFyYXRlZCBieQomIzQzOyAqIHRoZSBzbWFsbGVzdCBnYXAgaXMgbWVyZ2VkIChhYnNvcmJpbmcgdGhhdCBnYXApLCBzbyB0aGUgd29yc3QgY2FzZSBkZWdyYWRlcwomIzQzOyAqIGdyYWNlZnVsbHkgdG8gdGhlIG9sZCBzaW5nbGUgY29hbGVzY2VkLXJhbmdlIGJlaGF2aW91ci4gIFRyYWNraW5nIHRoZSBhY3R1YWwKJiM0MzsgKiBtb2RpZmllZCByYW5nZXMgKHJhdGhlciB0aGFuIG9uZSBbbWluLG1heF0gc3Bhbikga2VlcHMKJiM0MzsgKiBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoKSBmcm9tIHNuYXBzaG90dGluZyB0aGUgd2hvbGUgc3Bhbm5lZCBleHRlbnQgbWFwCiYjNDM7ICogb24gc2NhdHRlcmVkIGFsbG9jYXRpb25zLiAgQ2FsbGVyIGhvbGRzIGVpLSZndDtpX2ZjX2xvY2s7IGVpLSZndDtpX2ZjX3JhbmdlcyBpcwomIzQzOyAqIG5vbi1OVUxMIHdpdGggcm9vbSBmb3IgRVhUNF9GQ19NQVhfUkFOR0VTICYjNDM7IDEgZW50cmllcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBleHQ0X2ZjX3JhbmdlX2FkZChzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSwKJiM0MzsJCQkgICAgICBleHQ0X2xibGtfdCBzdGFydCwgZXh0NF9sYmxrX3QgZW5kKQomIzQzO3sKJiM0MzsJc3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSAqciA9IGVpLSZndDtpX2ZjX3JhbmdlczsKJiM0MzsJdW5zaWduZWQgaW50IG4gPSBlaS0mZ3Q7aV9mY19ucl9yYW5nZXM7CiYjNDM7CXVuc2lnbmVkIGludCBpLCBqOwomIzQzOwomIzQzOwkvKiBTa2lwIHJhbmdlcyBseWluZyBlbnRpcmVseSBiZWZvcmUgW3N0YXJ0IC0gMV0gKG5vIG92ZXJsYXAvYWRqYWNlbmN5KS4gKi8KJiM0MzsJaSA9IDA7CiYjNDM7CXdoaWxlIChpICZsdDsgbiAmYW1wOyZhbXA7IHJbaV0uc3RhcnQgJiM0MzsgcltpXS5sZW4gJmx0OyBzdGFydCkKJiM0MzsJCWkmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkvKiBBYnNvcmIgZXZlcnkgcmFuZ2Ugb3ZlcmxhcHBpbmcgb3IgYWRqYWNlbnQgdG8gdGhlIGdyb3dpbmcgW3N0YXJ0LGVuZF0uICovCiYjNDM7CWogPSBpOwomIzQzOwl3aGlsZSAoaiAmbHQ7IG4gJmFtcDsmYW1wOyByW2pdLnN0YXJ0ICZsdDs9IGVuZCAmIzQzOyAxKSB7CiYjNDM7CQlpZiAocltqXS5zdGFydCAmbHQ7IHN0YXJ0KQomIzQzOwkJCXN0YXJ0ID0gcltqXS5zdGFydDsKJiM0MzsJCWlmIChyW2pdLnN0YXJ0ICYjNDM7IHJbal0ubGVuIC0gMSAmZ3Q7IGVuZCkKJiM0MzsJCQllbmQgPSByW2pdLnN0YXJ0ICYjNDM7IHJbal0ubGVuIC0gMTsKJiM0MzsJCWomIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFJlcGxhY2UgcltpLi5qLTFdIHdpdGggdGhlIG1lcmdlZCByYW5nZSAoaiA9PSBpIGlzIGEgcGxhaW4gaW5zZXJ0KS4gKi8KJiM0MzsJaWYgKGogIT0gaSAmIzQzOyAxKQomIzQzOwkJbWVtbW92ZSgmYW1wO3JbaSAmIzQzOyAxXSwgJmFtcDtyW2pdLCAobiAtIGopICogc2l6ZW9mKCpyKSk7CiYjNDM7CXJbaV0uc3RhcnQgPSBzdGFydDsKJiM0MzsJcltpXS5sZW4gPSBlbmQgLSBzdGFydCAmIzQzOyAxOwomIzQzOwllaS0mZ3Q7aV9mY19ucl9yYW5nZXMgPSBuIC0gKGogLSBpKSAmIzQzOyAxOwomIzQzOwomIzQzOwkvKiBPdmVyZmxvdzogbWVyZ2UgdGhlIGNvbnNlY3V0aXZlIHBhaXIgc2VwYXJhdGVkIGJ5IHRoZSBzbWFsbGVzdCBnYXAuICovCiYjNDM7CXdoaWxlIChlaS0mZ3Q7aV9mY19ucl9yYW5nZXMgJmd0OyBFWFQ0X0ZDX01BWF9SQU5HRVMpIHsKJiM0MzsJCWV4dDRfbGJsa190IGJlc3RfZ2FwID0gfjBVOwomIzQzOwkJdW5zaWduZWQgaW50IGJlc3QgPSAwOwomIzQzOwomIzQzOwkJbiA9IGVpLSZndDtpX2ZjX25yX3JhbmdlczsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJiM0MzsgMSAmbHQ7IG47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJZXh0NF9sYmxrX3QgZ2FwID0gcltpICYjNDM7IDFdLnN0YXJ0IC0KJiM0MzsJCQkJCSAgKHJbaV0uc3RhcnQgJiM0MzsgcltpXS5sZW4pOwomIzQzOwomIzQzOwkJCWlmIChnYXAgJmx0OyBiZXN0X2dhcCkgewomIzQzOwkJCQliZXN0X2dhcCA9IGdhcDsKJiM0MzsJCQkJYmVzdCA9IGk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwkJcltiZXN0XS5sZW4gPSByW2Jlc3QgJiM0MzsgMV0uc3RhcnQgJiM0MzsgcltiZXN0ICYjNDM7IDFdLmxlbiAtIHJbYmVzdF0uc3RhcnQ7CiYjNDM7CQltZW1tb3ZlKCZhbXA7cltiZXN0ICYjNDM7IDFdLCAmYW1wO3JbYmVzdCAmIzQzOyAyXSwKJiM0MzsJCQkobiAtIGJlc3QgLSAyKSAqIHNpemVvZigqcikpOwomIzQzOwkJZWktJmd0O2lfZmNfbnJfcmFuZ2VzID0gbiAtIDE7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKiBfX3RyYWNrX2ZuIGZvciB0cmFja2luZyBkYXRhIHVwZGF0ZXMgKi8KIHN0YXRpYyBpbnQgX190cmFja19yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICphcmcsCiAJCQkgYm9vbCB1cGRhdGUpCiB7CiAJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwotCWV4dDRfbGJsa190IG9sZHN0YXJ0OwogCXN0cnVjdCBfX3RyYWNrX3JhbmdlX2FyZ3MgKl9fYXJnID0KIAkJKHN0cnVjdCBfX3RyYWNrX3JhbmdlX2FyZ3MgKilhcmc7CiYjNDM7CWV4dDRfbGJsa190IHN0YXJ0ID0gX19hcmctJmd0O3N0YXJ0LCBlbmQgPSBfX2FyZy0mZ3Q7ZW5kOwomIzQzOwlleHQ0X2xibGtfdCBzMCwgZTA7CiAKIAlpZiAoaW5vZGUtJmd0O2lfaW5vICZsdDsgRVhUNF9GSVJTVF9JTk8oaW5vZGUtJmd0O2lfc2IpKSB7CiAJCWV4dDRfZGVidWcoJiMzNDtTcGVjaWFsIGlub2RlICVsbHUgYmVpbmcgbW9kaWZpZWRcbiYjMzQ7LCBpbm9kZS0mZ3Q7aV9pbm8pOwogCQlyZXR1cm4gLUVDQU5DRUxFRDsKIAl9CiAKLQlvbGRzdGFydCA9IGVpLSZndDtpX2ZjX2xibGtfc3RhcnQ7CiYjNDM7CS8qCiYjNDM7CSAqIEEgc3ViLWJsb2NrIHB1bmNoIGhvbGUgcm91bmRzIHVwIHRoZSBzdGFydCBhbmQgZG93biB0aGUgZW5kLCBwYXNzaW5nCiYjNDM7CSAqIGVuZCA9PSBzdGFydCAtIDE6IG5vIHdob2xlIGJsb2NrIGNoYW5nZWQsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8KJiM0MzsJICogdHJhY2suICAoZXh0NF9mY190cmFja190ZW1wbGF0ZSBoYXMgYWxyZWFkeSByZXNldCB0aGUgcmFuZ2Ugc2V0IGZvciBhCiYjNDM7CSAqIG5ldyB0cmFuc2FjdGlvbiwgc28gd2UgbmVlZCBub3QgZG8gaXQgaGVyZS4pCiYjNDM7CSAqLwomIzQzOwlpZiAoZW5kICZsdDsgc3RhcnQpCiYjNDM7CQlyZXR1cm4gMDsKIAotCWlmICh1cGRhdGUgJmFtcDsmYW1wOyBlaS0mZ3Q7aV9mY19sYmxrX2xlbiAmZ3Q7IDApIHsKLQkJZWktJmd0O2lfZmNfbGJsa19zdGFydCA9IG1pbihlaS0mZ3Q7aV9mY19sYmxrX3N0YXJ0LCBfX2FyZy0mZ3Q7c3RhcnQpOwotCQllaS0mZ3Q7aV9mY19sYmxrX2xlbiA9Ci0JCQltYXgob2xkc3RhcnQgJiM0MzsgZWktJmd0O2lfZmNfbGJsa19sZW4gLSAxLCBfX2FyZy0mZ3Q7ZW5kKSAtCi0JCQkJZWktJmd0O2lfZmNfbGJsa19zdGFydCAmIzQzOyAxOwotCX0gZWxzZSB7Ci0JCWVpLSZndDtpX2ZjX2xibGtfc3RhcnQgPSBfX2FyZy0mZ3Q7c3RhcnQ7Ci0JCWVpLSZndDtpX2ZjX2xibGtfbGVuID0gX19hcmctJmd0O2VuZCAtIF9fYXJnLSZndDtzdGFydCAmIzQzOyAxOwomIzQzOwkvKiBBbHJlYWR5IHVwZ3JhZGVkIHRvIHRoZSBoZWFwIGFycmF5OiBmdWxsIG11bHRpLWludGVydmFsIHRyYWNraW5nLiAqLwomIzQzOwlpZiAoZWktJmd0O2lfZmNfcmFuZ2VzKSB7CiYjNDM7CQlleHQ0X2ZjX3JhbmdlX2FkZChlaSwgc3RhcnQsIGVuZCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBGaXJzdCByYW5nZSBvZiB0aGlzIGNvbW1pdCBzdGF5cyBpbmxpbmUsIG5vIGFsbG9jYXRpb24gbmVlZGVkLiAqLwomIzQzOwlpZiAoZWktJmd0O2lfZmNfbnJfcmFuZ2VzID09IDApIHsKJiM0MzsJCWVpLSZndDtpX2ZjX3JhbmdlLnN0YXJ0ID0gc3RhcnQ7CiYjNDM7CQllaS0mZ3Q7aV9mY19yYW5nZS5sZW4gPSBlbmQgLSBzdGFydCAmIzQzOyAxOwomIzQzOwkJZWktJmd0O2lfZmNfbnJfcmFuZ2VzID0gMTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIE9uZSBpbmxpbmUgcmFuZ2Ugc28gZmFyLiAqLwomIzQzOwlzMCA9IGVpLSZndDtpX2ZjX3JhbmdlLnN0YXJ0OwomIzQzOwllMCA9IHMwICYjNDM7IGVpLSZndDtpX2ZjX3JhbmdlLmxlbiAtIDE7CiYjNDM7CiYjNDM7CS8qIERpc2pvaW50IGZyb20gaXQ6IHRyeSB0byB1cGdyYWRlIHRvIHRoZSBhcnJheSBmb3IgZXhhY3QgdHJhY2tpbmcuICovCiYjNDM7CWlmIChzdGFydCAmZ3Q7IGUwICYjNDM7IDEgfHwgZW5kICYjNDM7IDEgJmx0OyBzMCkgewomIzQzOwkJc3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSAqaGVhcDsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBHRlBfQVRPTUlDOiB3ZSBob2xkIGlfZmNfbG9jay4gIF9fR0ZQX05PV0FSTjogZmFpbHVyZSBpcyBub3QKJiM0MzsJCSAqIGZhdGFsIC0tIHdlIGZhbGwgYmFjayB0byB0aGUgc2luZ2xlIGNvYWxlc2NlZCByYW5nZSBiZWxvdyAtLQomIzQzOwkJICogc28gaXQgbXVzdCBub3Qgc3BsYXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgomIzQzOwkJICovCiYjNDM7CQloZWFwID0ga21hbGxvY19hcnJheShFWFQ0X0ZDX01BWF9SQU5HRVMgJiM0MzsgMSwgc2l6ZW9mKCpoZWFwKSwKJiM0MzsJCQkJICAgICBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTsKJiM0MzsJCWlmIChoZWFwKSB7CiYjNDM7CQkJaGVhcFswXSA9IGVpLSZndDtpX2ZjX3JhbmdlOwomIzQzOwkJCWVpLSZndDtpX2ZjX3JhbmdlcyA9IGhlYXA7CiYjNDM7CQkJZXh0NF9mY19yYW5nZV9hZGQoZWksIHN0YXJ0LCBlbmQpOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQomIzQzOwkJLyoKJiM0MzsJCSAqIE91dCBvZiBtZW1vcnk6IGZhbGwgYmFjayB0byB0aGUgb3JpZ2luYWwgc2luZ2xlIGNvYWxlc2NlZAomIzQzOwkJICogcmFuZ2UgYnkgYWJzb3JiaW5nIHRoZSBnYXAgYmVsb3cuICBUaGlzIG92ZXItbG9ncyB0aGUgc3Bhbm5lZAomIzQzOwkJICogZXh0ZW50cyBidXQgc3RheXMgYSB2YWxpZCBmYXN0IGNvbW1pdCAobm8gZnVsbC1jb21taXQKJiM0MzsJCSAqIGZhbGxiYWNrKSwgc28gdGhlcmUgaXMgbm90aGluZyB0byBtYXJrIGluZWxpZ2libGUuCiYjNDM7CQkgKi8KIAl9CiAKJiM0MzsJLyogT3ZlcmxhcHBpbmcvYWRqYWNlbnQsIG9yIGFycmF5IGFsbG9jYXRpb24gZmFpbGVkOiBjb2FsZXNjZSBpbmxpbmUuICovCiYjNDM7CWlmIChzdGFydCAmbHQ7IHMwKQomIzQzOwkJczAgPSBzdGFydDsKJiM0MzsJaWYgKGVuZCAmZ3Q7IGUwKQomIzQzOwkJZTAgPSBlbmQ7CiYjNDM7CWVpLSZndDtpX2ZjX3JhbmdlLnN0YXJ0ID0gczA7CiYjNDM7CWVpLSZndDtpX2ZjX3JhbmdlLmxlbiA9IGUwIC0gczAgJiM0MzsgMTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTk0LDMxICYjNDM7MTEwNiwyNiBAQCBzdGF0aWMgdm9pZCBleHQ0X2ZjX2ZyZWVfaW5vZGVfc25hcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCWVpLSZndDtpX2ZjX3NuYXAgPSBOVUxMOwogfQogCi1zdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOy8qCiYjNDM7ICogU25hcHNob3Qgb25lIG1vZGlmaWVkIGxibGsgcmFuZ2UgW3N0YXJ0X2xibGssIGVuZF9sYmxrXSBpbnRvIEByYW5nZXMgYnkKJiM0MzsgKiB3YWxraW5nIHRoZSBleHRlbnQgc3RhdHVzIHRyZWUsIGVtaXR0aW5nIGFuIEFERF9SQU5HRSBwZXIgbWFwcGVkIHNlZ21lbnQgYW5kCiYjNDM7ICogYSBERUxfUkFOR0UgcGVyIGhvbGUuICAqbnJfcmFuZ2VzIGFjY3VtdWxhdGVzIHRoZSBudW1iZXIgb2YgcmFuZ2VzIHByb2R1Y2VkCiYjNDM7ICogZm9yIHRoaXMgaW5vZGUgYWNyb3NzIGNhbGxzOyB0b2dldGhlciB3aXRoIG5yX3Jhbmdlc190b3RhbCAocmFuZ2VzIGFscmVhZHkKJiM0MzsgKiBwcm9kdWNlZCBieSBlYXJsaWVyIGlub2RlcyBpbiB0aGlzIGNvbW1pdCkgaXQgaXMgYm91bmRlZCBhZ2FpbnN0CiYjNDM7ICogRVhUNF9GQ19TTkFQU0hPVF9NQVhfUkFOR0VTLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZXh0NF9mY19zbmFwc2hvdF9sYmxrX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgICAgICBleHQ0X2xibGtfdCBzdGFydF9sYmxrLAomIzQzOwkJCQkgICAgICAgZXh0NF9sYmxrX3QgZW5kX2xibGssCiAJCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJhbmdlcywKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IG5yX3Jhbmdlc190b3RhbCwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50ICpucl9yYW5nZXNwLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgaW50ICpucl9yYW5nZXMsCiAJCQkJICAgICAgIGludCAqc25hcF9lcnIpCiB7Ci0Jc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwogCXN0cnVjdCBleHQ0X2ZjX3NuYXBfc3RhdHMgKnN0YXRzID0KIAkJJmFtcDtFWFQ0X1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c19mY19zbmFwX3N0YXRzOwotCWV4dDRfbGJsa190IHN0YXJ0X2xibGssIGVuZF9sYmxrLCBjdXJfbGJsazsKLQl1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzID0gMDsKLQotCXNwaW5fbG9jaygmYW1wO2VpLSZndDtpX2ZjX2xvY2spOwotCWlmIChlaS0mZ3Q7aV9mY19sYmxrX2xlbiA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrKCZhbXA7ZWktJmd0O2lfZmNfbG9jayk7Ci0JCWlmIChucl9yYW5nZXNwKQotCQkJKm5yX3Jhbmdlc3AgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0Jc3RhcnRfbGJsayA9IGVpLSZndDtpX2ZjX2xibGtfc3RhcnQ7Ci0JZW5kX2xibGsgPSBlaS0mZ3Q7aV9mY19sYmxrX3N0YXJ0ICYjNDM7IGVpLSZndDtpX2ZjX2xibGtfbGVuIC0gMTsKLQllaS0mZ3Q7aV9mY19sYmxrX2xlbiA9IDA7Ci0Jc3Bpbl91bmxvY2soJmFtcDtlaS0mZ3Q7aV9mY19sb2NrKTsKJiM0MzsJZXh0NF9sYmxrX3QgY3VyX2xibGsgPSBzdGFydF9sYmxrOwogCi0JY3VyX2xibGsgPSBzdGFydF9sYmxrOwogCWV4dDRfZGVidWcoJiMzNDtzbmFwc2hvdCBkYXRhIHJhbmdlcyAldS0ldSBmb3IgaW5vZGUgJWxsdVxuJiMzNDssCiAJCSAgIHN0YXJ0X2xibGssIGVuZF9sYmxrLAogCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWlub2RlLSZndDtpX2lubyk7CkBAIC0xMDUwLDcgJiM0MzsxMTU3LDcgQEAgc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKG5yX3Jhbmdlc190b3RhbCAmIzQzOyBucl9yYW5nZXMgJmd0Oz0gRVhUNF9GQ19TTkFQU0hPVF9NQVhfUkFOR0VTKSB7CiYjNDM7CQlpZiAobnJfcmFuZ2VzX3RvdGFsICYjNDM7ICpucl9yYW5nZXMgJmd0Oz0gRVhUNF9GQ19TTkFQU0hPVF9NQVhfUkFOR0VTKSB7CiAJCQlhdG9taWM2NF9pbmMoJmFtcDtzdGF0cy0mZ3Q7c25hcF9mYWlsX3Jhbmdlc19jYXApOwogCQkJZXh0NF9mY19zZXRfc25hcF9lcnIoc25hcF9lcnIsCiAJCQkJCSAgICAgRVhUNF9GQ19TTkFQX0VSUl9SQU5HRVNfQ0FQKTsKQEAgLTEwNjMsNyAmIzQzOzExNzAsNyBAQCBzdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJZXh0NF9mY19zZXRfc25hcF9lcnIoc25hcF9lcnIsIEVYVDRfRkNfU05BUF9FUlJfTk9NRU0pOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJbnJfcmFuZ2VzJiM0MzsmIzQzOzsKJiM0MzsJCSgqbnJfcmFuZ2VzKSYjNDM7JiM0Mzs7CiAKIAkJcmFuZ2UtJmd0O2xibGsgPSBjdXJfbGJsazsKIAkJcmFuZ2UtJmd0O2xlbiA9IGxlbjsKQEAgLTExMDEsNiAmIzQzOzEyMDgsNTIgQEAgc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwKIAkJY3VyX2xibGsgJiM0Mzs9IHJhbmdlLSZndDtsZW47CiAJfQogCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqcmFuZ2VzLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgaW50IG5yX3Jhbmdlc190b3RhbCwKJiM0MzsJCQkJICAgICAgIHVuc2lnbmVkIGludCAqbnJfcmFuZ2VzcCwKJiM0MzsJCQkJICAgICAgIGludCAqc25hcF9lcnIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CiYjNDM7CXN0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2UgdHJhY2tlZFtFWFQ0X0ZDX01BWF9SQU5HRVMgJiM0MzsgMV07CiYjNDM7CXVuc2lnbmVkIGludCBucl9yYW5nZXMgPSAwLCBucl90cmFja2VkLCB0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtlaS0mZ3Q7aV9mY19sb2NrKTsKJiM0MzsJbnJfdHJhY2tlZCA9IGVpLSZndDtpX2ZjX25yX3JhbmdlczsKJiM0MzsJaWYgKG5yX3RyYWNrZWQgPT0gMCkgewomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtlaS0mZ3Q7aV9mY19sb2NrKTsKJiM0MzsJCWlmIChucl9yYW5nZXNwKQomIzQzOwkJCSpucl9yYW5nZXNwID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWlmIChlaS0mZ3Q7aV9mY19yYW5nZXMpCiYjNDM7CQltZW1jcHkodHJhY2tlZCwgZWktJmd0O2lfZmNfcmFuZ2VzLAomIzQzOwkJICAgICAgIG5yX3RyYWNrZWQgKiBzaXplb2YodHJhY2tlZFswXSkpOwomIzQzOwllbHNlCiYjNDM7CQl0cmFja2VkWzBdID0gZWktJmd0O2lfZmNfcmFuZ2U7CS8qIGlubGluZSBzaW5nbGUtcmFuZ2UgbW9kZSAqLwomIzQzOwllaS0mZ3Q7aV9mY19ucl9yYW5nZXMgPSAwOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2VpLSZndDtpX2ZjX2xvY2spOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTbmFwc2hvdCBvbmx5IHRoZSBhY3R1YWxseS1tb2RpZmllZCByYW5nZXMsIG5vdCB0aGUgd2hvbGUgW21pbixtYXhdCiYjNDM7CSAqIHNwYW46IHRoaXMgaXMgd2hhdCBrZWVwcyBzY2F0dGVyZWQgYWxsb2NhdGlvbnMgZnJvbSBibG93aW5nIHBhc3QKJiM0MzsJICogRVhUNF9GQ19TTkFQU0hPVF9NQVhfUkFOR0VTIGFuZCBmYWxsaW5nIGJhY2sgdG8gYSBmdWxsIGNvbW1pdC4KJiM0MzsJICovCiYjNDM7CWZvciAodCA9IDA7IHQgJmx0OyBucl90cmFja2VkOyB0JiM0MzsmIzQzOykgewomIzQzOwkJZXh0NF9sYmxrX3QgcyA9IHRyYWNrZWRbdF0uc3RhcnQ7CiYjNDM7CQlleHQ0X2xibGtfdCBlID0gcyAmIzQzOyB0cmFja2VkW3RdLmxlbiAtIDE7CiYjNDM7CiYjNDM7CQlyZXQgPSBleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2UoaW5vZGUsIHMsIGUsIHJhbmdlcywKJiM0MzsJCQkJCQkgIG5yX3Jhbmdlc190b3RhbCwgJmFtcDtucl9yYW5nZXMsCiYjNDM7CQkJCQkJICBzbmFwX2Vycik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKIAlpZiAobnJfcmFuZ2VzcCkKIAkJKm5yX3Jhbmdlc3AgPSBucl9yYW5nZXM7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggZjJjNTJjYzc0Njc2NTUuLmNmYTdlNmJlYzM4NWU2IDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jCkBAIC0xNDU1LDYgJiM0MzsxNDU1LDcgQEAgc3RhdGljIHZvaWQgZXh0NF9mcmVlX2luX2NvcmVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAkJcHJfd2FybigmIzM0OyVzOiBpbm9kZSAlbGx1IHN0aWxsIGluIGZjIGxpc3QmIzM0OywKIAkJCV9fZnVuY19fLCBpbm9kZS0mZ3Q7aV9pbm8pOwogCX0KJiM0MzsJa2ZyZWUoRVhUNF9JKGlub2RlKS0mZ3Q7aV9mY19yYW5nZXMpOwogCWttZW1fY2FjaGVfZnJlZShleHQ0X2lub2RlX2NhY2hlcCwgRVhUNF9JKGlub2RlKSk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgzNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgZXh0NCBGYXN0IENvbW1pdCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdGlua2VyaW5nIHdpdGggdGhlIGZhc3QgY29tbWl0IGZlYXR1cmUgaW4gZXh0NC4gSXQgc291bmRzIGxpa2UgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBpbiBob3cgdGhleSYjMzk7cmUgbWFuYWdpbmcgbG9naWNhbCBibG9jayByYW5nZXMgZm9yIGZhc3QgY29tbWl0cy4gSW5zdGVhZCBvZiB0aGUgb2xkLCBzaW5nbGUsIGNvYWxlc2NlZCByYW5nZSBhcHByb2FjaCDigJMgYGlfZmNfbGJsa19zdGFydGAsIGBpX2ZjX2xibGtfbGVuYCDigJMgdGhleSYjMzk7cmUgbW92aW5nIHRvIGEgbXVsdGlwbGUgZGlzam9pbnQgcmFuZ2UgdHJhY2tpbmcgc3lzdGVtLCB1c2luZyBlaXRoZXIgaW5saW5lIGBpX2ZjX3JhbmdlYCBzdHJ1Y3R1cmVzIG9yIGEgaGVhcC1hbGxvY2F0ZWQgYXJyYXkgb2YgYHN0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2VgIGNhbGxlZCBgaV9mY19yYW5nZXNgLiBUaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIG1vZGlmaWNhdGlvbiB0byB0aGUgZXh0NCBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBwb2ludHMgbm93IGFyZSB0aGUgY3JpdGljYWwgc3ltYm9scyB0aGF0IGhhdmUgbGlrZWx5IGNoYW5nZWQ6IGBleHQ0X2ZjX3JhbmdlX2FkZGAsIGBfX3RyYWNrX3JhbmdlYCwgYGV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZWAsIGFuZCBgZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgaW1wYWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIHBhdGNoIHJlcXVpcmVzIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZhc3QgY29tbWl0IGlzIGFuIGV4dDQgZmVhdHVyZSwgdXN1YWxseSBlbmFibGVkIHZpYSB0aGUgbW91bnQgb3B0aW9ucyBsaWtlIGBmYXN0X2NvbW1pdGAgb3IganVzdCBgZmNgLiBIb3dldmVyLCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGlzIGEgcGFydGljdWxhciBLY29uZmlnIG9wdGlvbiBpbnZvbHZlZC4gSSYjMzk7bGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3Iga2V5d29yZHMgcmVsYXRlZCB0byBgQ09ORklHX0VYVDRgIG9yIGBGQVNUX0NPTU1JVGAgdG8gZmlndXJlIHRoYXQgb3V0LiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGljaCBjb25maWd1cmF0aW9uIGZsYWdzIHdlcmUgbW9kaWZpZWQgaW4gdGhlIGNvbW1pdCwgb3Igd2VyZSBhZGRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGQVNUX0NPTU1JVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTEwNjI9c3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMTMzNi1cbmZzL2V4dDQvZXh0NC5oOjEzMzc6I2RlZmluZSBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlUXHQweDAwMDAwMDEwIC8qIEpvdXJuYWwgZmFzdCBjb21taXQgKi9cbmZzL2V4dDQvZXh0NC5oLTEzMzgtI2RlZmluZSBFWFQ0X01PVU5UMl9EQVhfTkVWRVJcdFx0MHgwMDAwMDAyMCAvKiBEbyBub3QgYWxsb3cgRGlyZWN0IEFjY2VzcyAqL1xuLS1cbmZzL2V4dDQvZXh0NC5oPTIxNTE9c3RhdGljIGlubGluZSBib29sIGV4dDRfaW5vZGVfb3JwaGFuX3RyYWNrZWQoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2V4dDQuaC0yMTkxLS8qXG5mcy9leHQ0L2V4dDQuaDoyMTkyOiAqIFRoZSByZWFzb24gd2h5IFwmIzM0O0ZBU1RfQ09NTUlUXCYjMzQ7IGlzIGEgY29tcGF0IGZlYXR1cmUgaXMgdGhhdCwgRlMgYmVjb21lc1xuZnMvZXh0NC9leHQ0LmgtMjE5My0gKiBpbmNvbXBhdGlibGUgb25seSBpZiBmYXN0IGNvbW1pdCBibG9ja3MgYXJlIHByZXNlbnQgaW4gdGhlIEZTLiBTaW5jZSB3ZVxuLS1cbmZzL2V4dDQvZXh0NC5oLTIxOTctICovXG5mcy9leHQ0L2V4dDQuaDoyMTk4OiNkZWZpbmUgRVhUNF9GRUFUVVJFX0NPTVBBVF9GQVNUX0NPTU1JVFx0XHQweDA0MDBcbmZzL2V4dDQvZXh0NC5oLTIxOTktI2RlZmluZSBFWFQ0X0ZFQVRVUkVfQ09NUEFUX1NUQUJMRV9JTk9ERVNcdDB4MDgwMFxuLS1cbmZzL2V4dDQvZXh0NC5oPTIzMDM9RVhUNF9GRUFUVVJFX0NPTVBBVF9GVU5DUyhzcGFyc2Vfc3VwZXIyLFx0U1BBUlNFX1NVUEVSMilcbmZzL2V4dDQvZXh0NC5oOjIzMDQ6RVhUNF9GRUFUVVJFX0NPTVBBVF9GVU5DUyhmYXN0X2NvbW1pdCxcdFx0RkFTVF9DT01NSVQpXG5mcy9leHQ0L2V4dDQuaC0yMzA1LUVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1Moc3RhYmxlX2lub2RlcyxcdFNUQUJMRV9JTk9ERVMpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI0MT1zdGF0aWMgYm9vbCBleHQ0X2ZjX2Rpc2FibGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQyLXtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDM6XHRyZXR1cm4gKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIHx8XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ0LVx0XHQoRVhUNF9TQihzYiktXHUwMDNlc19tb3VudF9zdGF0ZSBcdTAwMjYgRVhUNF9GQ19SRVBMQVkpKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NDA2PXN0YXRpYyBpbnQgZXh0NF9mY190cmFja190ZW1wbGF0ZShcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDM2LVx0XHRcdFx0KHNiaS1cdTAwM2VzX2pvdXJuYWwtXHUwMDNlal9mbGFncyBcdTAwMjYgSkJEMl9GVUxMX0NPTU1JVF9PTkdPSU5HIHx8XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDM3Olx0XHRcdFx0IHNiaS1cdTAwM2VzX2pvdXJuYWwtXHUwMDNlal9mbGFncyBcdTAwMjYgSkJEMl9GQVNUX0NPTU1JVF9PTkdPSU5HKSA/XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDM4LVx0XHRcdFx0XHUwMDI2c2JpLVx1MDAzZXNfZmNfcVtGQ19RX1NUQUdJTkddIDpcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NDUxPXN0YXRpYyBpbnQgX190cmFja19kZW50cnlfdXBkYXRlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQ4Ny1cdGlmIChzYmktXHUwMDNlc19qb3VybmFsLVx1MDAzZWpfZmxhZ3MgXHUwMDI2IEpCRDJfRlVMTF9DT01NSVRfT05HT0lORyB8fFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjQ4ODpcdFx0c2JpLVx1MDAzZXNfam91cm5hbC1cdTAwM2VqX2ZsYWdzIFx1MDAyNiBKQkQyX0ZBU1RfQ09NTUlUX09OR09JTkcpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDg5LVx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNm5vZGUtXHUwMDNlZmNkX2xpc3QsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE3Mzc9aW50IGV4dDRfZmNfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgY29tbWl0X3RpZClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTc0Ni1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxNzQ3Olx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE3NDgtXHRcdHJldHVybiBqYmQyX2NvbXBsZXRlX3RyYW5zYWN0aW9uKGpvdXJuYWwsIGNvbW1pdF90aWQpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yODI0PXZvaWQgZXh0NF9mY19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGpvdXJuYWxfdCAqam91cm5hbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjgzMS1cdGpvdXJuYWwtXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyODMyOlx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI4MzMtXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMi1cbmZzL2V4dDQvZmFzdF9jb21taXQuaDozOiNpZm5kZWYgX19GQVNUX0NPTU1JVF9IX19cbmZzL2V4dDQvZmFzdF9jb21taXQuaDo0OiNkZWZpbmUgX19GQVNUX0NPTU1JVF9IX19cbmZzL2V4dDQvZmFzdF9jb21taXQuaC01LVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuaD0xNjM9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp0YWcyc3RyKF9fdTE2IHRhZylcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTg4LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjE4OTojZW5kaWYgLyogX19GQVNUX0NPTU1JVF9IX18gKi9cbi0tXG5mcy9leHQ0L2lub2RlLmM9MzQ1Mj1zdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTM0NTktXHRcdFx0cmV0dXJuIGZhbHNlO1xuZnMvZXh0NC9pbm9kZS5jOjM0NjA6XHRcdGlmICh0ZXN0X29wdDIoaW5vZGUtXHUwMDNlaV9zYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXG5mcy9leHQ0L2lub2RlLmMtMzQ2MS1cdFx0XHRyZXR1cm4gIWxpc3RfZW1wdHkoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZjX2xpc3QpO1xuLS1cbmZzL2V4dDQvbmFtZWkuYz0zNzk3PXN0YXRpYyBpbnQgZXh0NF9yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpcixcbi0tXG5mcy9leHQ0L25hbWVpLmMtNDAwNy1cdFx0XHRleHQ0X2ZjX3RyYWNrX3VubGluayhoYW5kbGUsIG5ldy5kZW50cnkpO1xuZnMvZXh0NC9uYW1laS5jOjQwMDg6XHRcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9uYW1laS5jLTQwMDktXHRcdCAgICAhKEVYVDRfU0Ioc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSBcdTAwMjZcdTAwMjZcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTg4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG1vdW50X29wdHMge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xOTQ3LSNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zdXBlci5jOjE5NDg6XHR7T3B0X2ZjX2RlYnVnX2ZvcmNlLCBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlULFxuZnMvZXh0NC9zdXBlci5jLTE5NDktXHQgTU9QVF9TRVQgfCBNT1BUXzIgfCBNT1BUX0VYVDRfT05MWX0sXG4tLVxuZnMvZXh0NC9zdXBlci5jPTQzODk9c3RhdGljIHZvaWQgZXh0NF9zZXRfZGVmX29wdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNDQwOC1cdGlmIChleHQ0X2hhc19mZWF0dXJlX2Zhc3RfY29tbWl0KHNiKSlcbmZzL2V4dDQvc3VwZXIuYzo0NDA5Olx0XHRzZXRfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XG5mcy9leHQ0L3N1cGVyLmMtNDQxMC1cdC8qIGRvbiYjMzk7dCBmb3JnZXQgdG8gZW5hYmxlIGpvdXJuYWxfY3N1bSB3aGVuIG1ldGFkYXRhX2NzdW0gaXMgZW5hYmxlZC4gKi9cbi0tXG5mcy9leHQ0L3N1cGVyLmM9NDk1Nz1zdGF0aWMgaW50IGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ5ODAtXG5mcy9leHQ0L3N1cGVyLmM6NDk4MTpcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9zdXBlci5jLTQ5ODItXHRcdCFqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKEVYVDRfU0Ioc2IpLVx1MDAzZXNfam91cm5hbCwgMCwgMCxcbmZzL2V4dDQvc3VwZXIuYzo0OTgzOlx0XHRcdFx0XHQgIEpCRDJfRkVBVFVSRV9JTkNPTVBBVF9GQVNUX0NPTU1JVCkpIHtcbmZzL2V4dDQvc3VwZXIuYy00OTg0LVx0XHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTUwNDE9c3RhdGljIGludCBleHQ0X2NoZWNrX2pvdXJuYWxfZGF0YV9tb2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTUwNDgtXHRcdGNsZWFyX29wdChzYiwgRElPUkVBRF9OT0xPQ0spO1xuZnMvZXh0NC9zdXBlci5jOjUwNDk6XHRcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xuZnMvZXh0NC9zdXBlci5jLTUwNTAtXHRcdGlmICh0ZXN0X29wdDIoc2IsIEVYUExJQ0lUX0RFTEFMTE9DKSkge1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01MzM5PXN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01NTM3LVx0XHRjbGVhcl9vcHQoc2IsIERBVEFfRkxBR1MpO1xuZnMvZXh0NC9zdXBlci5jOjU1Mzg6XHRcdGNsZWFyX29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xuZnMvZXh0NC9zdXBlci5jLTU1MzktXHRcdHNiaS1cdTAwM2VzX2pvdXJuYWwgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXh0NCBhbmQgRmFzdCBDb21taXQ6IEEgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCB0aGlzIHNvcnRlZC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyBvZmY7IGBGQVNUX0NPTU1JVGAgaXNuJiMzOTt0IGEgdG9wLWxldmVsIEtjb25maWcgb3B0aW9uIGl0c2VsZiwgYnV0IHJhdGhlciBhbiBleHQ0ICpmZWF0dXJlKi4gVGhlIHJlbGV2YW50IEtjb25maWcgY29udHJvbGxpbmcgZXh0NCYjMzk7cyBjb3JlIGZ1bmN0aW9uYWxpdHkgaXMgZGVmaW5pdGVseSBgRVhUNF9GU2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHN5c3RlbSByZWNvZ25pemVzIHRoZSBleHQ0IG1vZHVsZS4KCk5vdywgSSYjMzk7bSByZXZpZXdpbmcgdGhlIHBhdGNoLCBhbmQgaXQgdG91Y2hlcyBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYCBhbmQgYGZzL2V4dDQvZXh0NC5oYC4gQ29uc2lkZXJpbmcgdGhpcywgYW5kIHNpbmNlIGBGQVNUX0NPTU1JVGAgaXMgcGFydCBvZiBleHQ0LCBzcGVjaWZ5aW5nIG9ubHkgYEVYVDRfRlNgIHNob3VsZCBiZSBzdWZmaWNpZW50LCBidXQgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYWNjdXJhdGUuCgpIb2xkIG9uLCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gTGV0JiMzOTtzIGRlbHZlIGludG8gYGZzL2V4dDQvS2NvbmZpZ2AgZGlyZWN0bHkuIEl0JiMzOTtzIHRpbWUgdG8gY29uZmlybSBpZiB0aGVyZSYjMzk7cyBhIG1vcmUgc3BlY2lmaWMsIGZpbmVyLWdyYWluZWQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGZhc3QgY29tbWl0IHdpdGhpbiBleHQ0IGl0c2VsZi4gSSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgdGhpcy4gQSB0aG9yb3VnaCBleGFtaW5hdGlvbiBvZiB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgY2xhcmlmeSBpZiB0aGVyZSYjMzk7cyBhbnkgaGlkZGVuIG51YW5jZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RkFTVF9DT01NSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTYwCgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDcxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBFWFQ0IEZhc3QgQ29tbWl0IFBhdGNoKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIG5vIGRlZGljYXRlZCBLY29uZmlnIHNwZWNpZmljYWxseSBmb3IgJiMzNDtmYXN0IGNvbW1pdCwmIzM0OyBpdCYjMzk7cyBhbGwgYmFrZWQgaW50byBgRVhUNF9GU2AuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBMZXQmIzM5O3Mgc2VlLi4uIHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiB0aGUgZmFzdCBjb21taXQgZmVhdHVyZSB3aXRoaW4gRVhUNC4gVGhlIGtleSBmdW5jdGlvbnMgdG8gd2F0Y2ggYXJlOiBgZXh0NF9mY19yYW5nZV9hZGRgLCBgX190cmFja19yYW5nZWAsIGBleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2VgLCBhbmQgYGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YWAuCgpSaWdodCwgbGV0IG1lIHZlcmlmeSB0aG9zZS4uLiBgZXh0NF9mY19yYW5nZV9hZGRgIGFuZCBgZXh0NF9mY19zbmFwc2hvdF9sYmxrX3JhbmdlYCBhcmUgbmV3IHN0YXRpYyBmdW5jdGlvbnMsIHdoaWxlIGBfX3RyYWNrX3JhbmdlYCBhbmQgYGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YWAgYXJlIGV4aXN0aW5nIHN0YXRpYyBmdW5jdGlvbnMuIEhtbSwgYXJlIHRoZXNlIGFjdHVhbGx5IHJlYWNoYWJsZT8gWWVzLCB0aGV5JiMzOTtyZSBwYXJ0IG9mIHRoZSBmYXN0IGNvbW1pdCBsb2dpYywgdHJpZ2dlcmVkIGR1cmluZyBgZnN5bmNgIGFuZCByZWxhdGVkIHN5bmMgb3BlcmF0aW9ucyB3aGVuIGZhc3QgY29tbWl0IGlzIGVuYWJsZWQuCgpJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zLiBBaCwgSSBzZWU6IGBleHQ0X2ZjX3Jlc2V0X2lub2RlYCwgYGV4dDRfZmNfaW5pdF9pbm9kZWAsIGBfX3RyYWNrX2lub2RlYCwgYW5kIGBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZWAuCgpCdXQgdGhlICptb3N0KiBjcml0aWNhbCBmdW5jdGlvbnMsIHRoZSBvbmVzIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBjb3JlIGNoYW5nZXMsIGFyZSBzdGlsbCB0aGUgb3JpZ2luYWwgZm91cjogYGV4dDRfZmNfcmFuZ2VfYWRkYCwgYF9fdHJhY2tfcmFuZ2VgLCBgZXh0NF9mY19zbmFwc2hvdF9sYmxrX3JhbmdlYCwgYW5kIGBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGFgLiBPa2F5LCB0aGVzZSBhcmUgZGVmaW5pdGVseSBnb2luZyBpbnRvIG15IEZvY3VzU3ltYm9scy4KClNvLCBJIHRoaW5rIGp1c3QgZW5hYmxpbmcgYEVYVDRfRlNgIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKVGhlIHBhdGNoJiMzOTtzIGxvZ2ljIGlzIHByZXR0eSBpbnRlcmVzdGluZy4gSXQmIzM5O3MgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBob3cgZXh0NCBmYXN0IGNvbW1pdHMgdHJhY2sgbW9kaWZpZWQgbG9naWNhbCBibG9jayByYW5nZXMuIFByZXZpb3VzbHksIGl0IHdhcyBhIHNpbmdsZSBjb2FsZXNjZWQgcmFuZ2UuIE5vdywgaXQmIzM5O3MgaGFuZGxpbmcgbXVsdGlwbGUgZGlzam9pbnQgcmFuZ2VzLCB1c2luZyBhbiBpbmxpbmUgc3RydWN0IG9yIGEgaGVhcC1hbGxvY2F0ZWQgYXJyYXkuIFRoYXQgaW1wbGllcyBuZXcgbWVtb3J5IGFsbG9jYXRpb24sIGFycmF5IG1hbmlwdWxhdGlvbiwgYW5kIGV4dGVudCB0cmFja2luZyBsb2dpYyB3aXRoaW4gdGhlIGZhc3QgY29tbWl0IHBhdGguCgpMZXQgbWUgZG91YmxlLWNoZWNrIHRob3NlIEZvY3VzU3ltYm9scy4uLiBZZXMsIGV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIHN0YXRpYywgc3l6a2FsbGVyICpjYW4qIHN0aWxsIHRhcmdldCB0aGVtIGlmIHRoZXkgZW5kIHVwIGluIHRoZSBjb3ZlcmFnZS4gVGhlIGdvYWwgaXMgdG8gcHJpb3JpdGl6ZSBpbnB1dHMgdGhhdCBoaXQgdGhlc2UgZnVuY3Rpb25zLCBldmVuIGlmIHN5c2NhbGxzIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludC4gQW5kIHllcywgc3RhdGljIGZ1bmN0aW9ucyAqYXJlKiB2YWxpZCBpbiBGb2N1c1N5bWJvbHMuCgpPa2F5LCBpcyB0aGVyZSBhbm90aGVyIGNvbmZpZz8gTm8sIGBDT05GSUdfRVhUNF9GU2Agb3IgYEVYVDRfRlNgIGlzIHRoZSBtYWluIG9uZS4KClRoZXJlZm9yZToKV29ydGhGdXp6aW5nOiBUcnVlCkVuYWJsZUNvbmZpZ3M6IFsmIzM0O0VYVDRfRlMmIzM0O10KRm9jdXNTeW1ib2xzOiBbJiMzNDtleHQ0X2ZjX3JhbmdlX2FkZCYjMzQ7LCAmIzM0O19fdHJhY2tfcmFuZ2UmIzM0OywgJiMzNDtleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2UmIzM0OywgJiMzNDtleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEmIzM0O10KUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0IGZhc3QgY29tbWl0cyYjMzk7IHJhbmdlIHRyYWNraW5nIGxvZ2ljLCB0cmFuc2l0aW9uaW5nIHRvIGRpc2pvaW50IHJhbmdlcyBhbmQgbmVjZXNzaXRhdGluZyBuZXcgYXJyYXkgbWFuaXB1bGF0aW9uLCBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIGV4dGVudCB0cmFja2luZy4gVGhpcyBmYXN0IGNvbW1pdCBwYXRoIHdhcnJhbnRzIGZ1enppbmcgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbiBhbmQgbG9naWMgZXJyb3JzLiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2ZjX3JhbmdlX2FkZCYjMzQ7LAogICAgJiMzNDtfX3RyYWNrX3JhbmdlJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZSYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZXh0NCBmYXN0IGNvbW1pdHMgdHJhY2sgbW9kaWZpZWQgbG9naWNhbCBibG9jayByYW5nZXMsIG1vdmluZyBmcm9tIGEgc2luZ2xlIGNvYWxlc2NlZCByYW5nZSB0byB0cmFja2luZyBtdWx0aXBsZSBkaXNqb2ludCByYW5nZXMuIFRoaXMgaW52b2x2ZXMgbmV3IGFycmF5IG1hbmlwdWxhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBleHRlbnQgdHJhY2tpbmcgbG9naWMgaW4gdGhlIGZhc3QgY29tbWl0IHBhdGgsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2ZjX3JhbmdlX2FkZCYjMzQ7LAogICAgJiMzNDtfX3RyYWNrX3JhbmdlJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZSYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZXh0NCBmYXN0IGNvbW1pdHMgdHJhY2sgbW9kaWZpZWQgbG9naWNhbCBibG9jayByYW5nZXMsIG1vdmluZyBmcm9tIGEgc2luZ2xlIGNvYWxlc2NlZCByYW5nZSB0byB0cmFja2luZyBtdWx0aXBsZSBkaXNqb2ludCByYW5nZXMuIFRoaXMgaW52b2x2ZXMgbmV3IGFycmF5IG1hbmlwdWxhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBleHRlbnQgdHJhY2tpbmcgbG9naWMgaW4gdGhlIGZhc3QgY29tbWl0IHBhdGgsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTozNjozMi4wODkzMzM4MzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQyNDg4MTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9mY19yYW5nZV9hZGRcIixcbiAgICBcIl9fdHJhY2tfcmFuZ2VcIixcbiAgICBcImV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZVwiLFxuICAgIFwiZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZXh0NCBmYXN0IGNvbW1pdHMgdHJhY2sgbW9kaWZpZWQgbG9naWNhbCBibG9jayByYW5nZXMsIG1vdmluZyBmcm9tIGEgc2luZ2xlIGNvYWxlc2NlZCByYW5nZSB0byB0cmFja2luZyBtdWx0aXBsZSBkaXNqb2ludCByYW5nZXMuIFRoaXMgaW52b2x2ZXMgbmV3IGFycmF5IG1hbmlwdWxhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBleHRlbnQgdHJhY2tpbmcgbG9naWMgaW4gdGhlIGZhc3QgY29tbWl0IHBhdGgsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjM2OjMyLjA4OTMzOTE3OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2Nzk0MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmI5YTRlYWQ5ZmYwN2JkZDdhMDk2OWQyYWRmNTVkZmNhZWZmYTFkMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAyMyAwOTozNjozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggZGRjOTAzNzM4YzZiMzMuLmQ5M2NjNTJjZDAxZWQwIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcXG5AQCAtMTA0Miw2ICsxMDQyLDIwIEBAIGVudW0gZXh0NF9mY19zbmFwX2VyciB7XFxuIFxcdEVYVDRfRkNfU05BUF9FUlJfSU5PREVfTE9DLFxcbiB9O1xcbiBcXG4rLypcXG4rICogTWF4aW11bSBudW1iZXIgb2YgZGlzam9pbnQgbG9naWNhbC1ibG9jayByYW5nZXMgdHJhY2tlZCBwZXIgaW5vZGUgZm9yIGFcXG4rICogc2luZ2xlIGZhc3QgY29tbWl0LiAgU2NhdHRlcmVkIGFsbG9jYXRpb25zIHRoYXQgZXhjZWVkIHRoaXMgZ2V0IHRoZWlyIHR3b1xcbisgKiBjbG9zZXN0IHJhbmdlcyBtZXJnZWQgKHNlZSBleHQ0X2ZjX3JhbmdlX2FkZCgpKSwgZGVncmFkaW5nIGdyYWNlZnVsbHkgdG9cXG4rICogdGhlIG9sZCBzaW5nbGUgY29hbGVzY2VkLXJhbmdlIGJlaGF2aW91ci5cXG4rICovXFxuKyNkZWZpbmUgRVhUNF9GQ19NQVhfUkFOR0VTIDE2XFxuK1xcbisvKiBJbi1tZW1vcnkgcmVjb3JkIG9mIGFuIGxibGsgcmFuZ2UgbW9kaWZpZWQgaW4gdGhlIGN1cnJlbnQgZmFzdCBjb21taXQuICovXFxuK3N0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2Uge1xcbitcXHRleHQ0X2xibGtfdCBzdGFydDtcXG4rXFx0ZXh0NF9sYmxrX3QgbGVuO1xcbit9O1xcbitcXG4gLypcXG4gICogZm91cnRoIGV4dGVuZGVkIGZpbGUgc3lzdGVtIGlub2RlIGRhdGEgaW4gbWVtb3J5XFxuICAqL1xcbkBAIC0xMDkxLDExICsxMTA1LDI1IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xcbiBcXHRcXHRcXHRcXHRcXHQgKiBwcm90ZWN0ZWQgYnkgc2JpLVxcdTAwM2VzX2ZjX2xvY2suXFxuIFxcdFxcdFxcdFxcdFxcdCAqL1xcbiBcXG4tXFx0LyogU3RhcnQgb2YgbGJsayByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGNvbW1pdHRlZCBpbiB0aGlzIGZhc3QgY29tbWl0ICovXFxuLVxcdGV4dDRfbGJsa190IGlfZmNfbGJsa19zdGFydDtcXG4tXFxuLVxcdC8qIEVuZCBvZiBsYmxrIHJhbmdlIHRoYXQgbmVlZHMgdG8gYmUgY29tbWl0dGVkIGluIHRoaXMgZmFzdCBjb21taXQgKi9cXG4tXFx0ZXh0NF9sYmxrX3QgaV9mY19sYmxrX2xlbjtcXG4rXFx0LypcXG4rXFx0ICogTG9naWNhbCBibG9jayByYW5nZXMgbW9kaWZpZWQgaW4gdGhpcyBmYXN0IGNvbW1pdC4gIFRyYWNraW5nIHRoZVxcbitcXHQgKiBhY3R1YWwgbW9kaWZpZWQgcmFuZ2VzIChpbnN0ZWFkIG9mIG9uZSBjb2FsZXNjZWQgW21pbixtYXhdKSBhdm9pZHNcXG4rXFx0ICogc25hcHNob3R0aW5nIHRoZSB3aG9sZSBzcGFubmVkIGV4dGVudCBtYXAgZm9yIHNjYXR0ZXJlZCBhbGxvY2F0aW9ucy5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGZpcnN0IHJhbmdlIGlzIGtlcHQgaW5saW5lIGluIGlfZmNfcmFuZ2UsIHNvIHRoZSBjb21tb24gY2FzZSBvZiBhXFxuK1xcdCAqIHNpbmdsZSBjb250aWd1b3VzIGRpcnR5IHJlZ2lvbiBuZWVkcyBubyBhbGxvY2F0aW9uLiAgV2hlbiBhIHNlY29uZFxcbitcXHQgKiBkaXNqb2ludCByYW5nZSBhcHBlYXJzIHRoZSBpbm9kZSBpcyB1cGdyYWRlZCB0byB0aGUgaV9mY19yYW5nZXMgYXJyYXlcXG4rXFx0ICogKEVYVDRfRkNfTUFYX1JBTkdFUyArIDEgZW50cmllcywgc29ydGVkIGFuZCBtdXR1YWxseSBkaXNqb2ludDsgdGhlXFxuK1xcdCAqIGV4dHJhIHNsb3QgaXMgdHJhbnNpZW50IHJvb20gdXNlZCB3aGlsZSBpbnNlcnRpbmcgYmVmb3JlIGFuIG92ZXJmbG93XFxuK1xcdCAqIG1lcmdlKSwgYWxsb2NhdGVkIHRoZW4gYW5kIGZyZWVkIHdoZW4gdGhlIGlub2RlIGlzIGV2aWN0ZWQuICBJZiB0aGF0XFxuK1xcdCAqIGFsbG9jYXRpb24gZmFpbHMgd2UgZmFsbCBiYWNrIHRvIGNvYWxlc2NpbmcgaW50byBpX2ZjX3JhbmdlLCBpLmUuIHRoZVxcbitcXHQgKiBvcmlnaW5hbCBzaW5nbGUgY29hbGVzY2VkLXJhbmdlIGJlaGF2aW91ci4gIGlfZmNfbnJfcmFuZ2VzIGNvdW50cyB0aGVcXG4rXFx0ICogdmFsaWQgcmFuZ2VzOyB3aGlsZSBpX2ZjX3JhbmdlcyBpcyBOVUxMIGl0IGlzIDAgb3IgMS4gIFByb3RlY3RlZCBieVxcbitcXHQgKiBpX2ZjX2xvY2suXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3QgZXh0NF9mY19sYmxrX3JhbmdlIGlfZmNfcmFuZ2U7XFxuK1xcdHN0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2UgKmlfZmNfcmFuZ2VzO1xcbitcXHR1bnNpZ25lZCBpbnQgaV9mY19ucl9yYW5nZXM7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBDb21taXQtdGltZSBmYXN0IGNvbW1pdCBzbmFwc2hvdHMuXFxuQEAgLTExMTYsOCArMTE0NCw4IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xcbiBcXHRzcGlubG9ja190IGlfcmF3X2xvY2s7XFx0LyogcHJvdGVjdHMgdXBkYXRlcyB0byB0aGUgcmF3IGlub2RlICovXFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBQcm90ZWN0IGNvbmN1cnJlbnQgYWNjZXNzZXMgb24gaV9mY19sYmxrX3N0YXJ0LCBpX2ZjX2xibGtfbGVuXFxuLVxcdCAqIGFuZCBpbm9kZSdzIEVYVDRfRkNfU1RBVEVfQ09NTUlUVElORyBzdGF0ZSBiaXQuXFxuK1xcdCAqIFByb3RlY3QgY29uY3VycmVudCBhY2Nlc3NlcyBvbiBpX2ZjX3JhbmdlLCBpX2ZjX3JhbmdlcyxcXG4rXFx0ICogaV9mY19ucl9yYW5nZXMgYW5kIGlub2RlJ3MgRVhUNF9GQ19TVEFURV9DT01NSVRUSU5HIHN0YXRlIGJpdC5cXG4gXFx0ICovXFxuIFxcdHNwaW5sb2NrX3QgaV9mY19sb2NrO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jXFxuaW5kZXggNGVmNzk2YjliNmNiNWYuLjlkMzYzNjVlYWUwMmJhIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xcbisrKyBiL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xcbkBAIC0yMjIsOCArMjIyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGV4dDRfZmNfcmVzZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XFxuIFxcbi1cXHRlaS1cXHUwMDNlaV9mY19sYmxrX3N0YXJ0ID0gMDtcXG4tXFx0ZWktXFx1MDAzZWlfZmNfbGJsa19sZW4gPSAwO1xcbitcXHRlaS1cXHUwMDNlaV9mY19ucl9yYW5nZXMgPSAwO1xcbiB9XFxuIFxcbiB2b2lkIGV4dDRfZmNfaW5pdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbkBAIC0yMzEsNiArMjMwLDcgQEAgdm9pZCBleHQ0X2ZjX2luaXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xcbiBcXG4gXFx0ZXh0NF9mY19yZXNldF9pbm9kZShpbm9kZSk7XFxuK1xcdGVpLVxcdTAwM2VpX2ZjX3JhbmdlcyA9IE5VTEw7XFxuIFxcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfRkNfQ09NTUlUVElORyk7XFxuIFxcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfRkNfUkVRVUVVRSk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlaS1cXHUwMDNlaV9mY19saXN0KTtcXG5AQCAtNTgyLDcgKzU4Miw3IEBAIHN0YXRpYyBpbnQgX190cmFja19pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICphcmcsXFxuIFxcdGlmICh1cGRhdGUpXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXG4tXFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9mY19sYmxrX2xlbiA9IDA7XFxuK1xcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmNfbnJfcmFuZ2VzID0gMDtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTYyMiwzMiArNjIyLDE0NCBAQCBzdHJ1Y3QgX190cmFja19yYW5nZV9hcmdzIHtcXG4gXFx0ZXh0NF9sYmxrX3Qgc3RhcnQsIGVuZDtcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIFJlY29yZCB0aGF0IGxvZ2ljYWwgYmxvY2sgcmFuZ2UgW3N0YXJ0LCBlbmRdIHdhcyBtb2RpZmllZCBpbiB0aGUgY3VycmVudFxcbisgKiBmYXN0IGNvbW1pdC4gIE1haW50YWlucyBhIHNtYWxsLCBib3VuZGVkIHNldCBvZiBzb3J0ZWQsIG11dHVhbGx5IGRpc2pvaW50XFxuKyAqIHJhbmdlcywgbWVyZ2luZyB0aGUgbmV3IHJhbmdlIHdpdGggYW55IGl0IG92ZXJsYXBzIG9yIGlzIGFkamFjZW50IHRvLiAgV2hlblxcbisgKiB0aGUgc2V0IHdvdWxkIGV4Y2VlZCBFWFQ0X0ZDX01BWF9SQU5HRVMsIHRoZSBjb25zZWN1dGl2ZSBwYWlyIHNlcGFyYXRlZCBieVxcbisgKiB0aGUgc21hbGxlc3QgZ2FwIGlzIG1lcmdlZCAoYWJzb3JiaW5nIHRoYXQgZ2FwKSwgc28gdGhlIHdvcnN0IGNhc2UgZGVncmFkZXNcXG4rICogZ3JhY2VmdWxseSB0byB0aGUgb2xkIHNpbmdsZSBjb2FsZXNjZWQtcmFuZ2UgYmVoYXZpb3VyLiAgVHJhY2tpbmcgdGhlIGFjdHVhbFxcbisgKiBtb2RpZmllZCByYW5nZXMgKHJhdGhlciB0aGFuIG9uZSBbbWluLG1heF0gc3Bhbikga2VlcHNcXG4rICogZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhKCkgZnJvbSBzbmFwc2hvdHRpbmcgdGhlIHdob2xlIHNwYW5uZWQgZXh0ZW50IG1hcFxcbisgKiBvbiBzY2F0dGVyZWQgYWxsb2NhdGlvbnMuICBDYWxsZXIgaG9sZHMgZWktXFx1MDAzZWlfZmNfbG9jazsgZWktXFx1MDAzZWlfZmNfcmFuZ2VzIGlzXFxuKyAqIG5vbi1OVUxMIHdpdGggcm9vbSBmb3IgRVhUNF9GQ19NQVhfUkFOR0VTICsgMSBlbnRyaWVzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZXh0NF9mY19yYW5nZV9hZGQoc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWksXFxuK1xcdFxcdFxcdCAgICAgIGV4dDRfbGJsa190IHN0YXJ0LCBleHQ0X2xibGtfdCBlbmQpXFxuK3tcXG4rXFx0c3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSAqciA9IGVpLVxcdTAwM2VpX2ZjX3JhbmdlcztcXG4rXFx0dW5zaWduZWQgaW50IG4gPSBlaS1cXHUwMDNlaV9mY19ucl9yYW5nZXM7XFxuK1xcdHVuc2lnbmVkIGludCBpLCBqO1xcbitcXG4rXFx0LyogU2tpcCByYW5nZXMgbHlpbmcgZW50aXJlbHkgYmVmb3JlIFtzdGFydCAtIDFdIChubyBvdmVybGFwL2FkamFjZW5jeSkuICovXFxuK1xcdGkgPSAwO1xcbitcXHR3aGlsZSAoaSBcXHUwMDNjIG4gXFx1MDAyNlxcdTAwMjYgcltpXS5zdGFydCArIHJbaV0ubGVuIFxcdTAwM2Mgc3RhcnQpXFxuK1xcdFxcdGkrKztcXG4rXFxuK1xcdC8qIEFic29yYiBldmVyeSByYW5nZSBvdmVybGFwcGluZyBvciBhZGphY2VudCB0byB0aGUgZ3Jvd2luZyBbc3RhcnQsZW5kXS4gKi9cXG4rXFx0aiA9IGk7XFxuK1xcdHdoaWxlIChqIFxcdTAwM2MgbiBcXHUwMDI2XFx1MDAyNiByW2pdLnN0YXJ0IFxcdTAwM2M9IGVuZCArIDEpIHtcXG4rXFx0XFx0aWYgKHJbal0uc3RhcnQgXFx1MDAzYyBzdGFydClcXG4rXFx0XFx0XFx0c3RhcnQgPSByW2pdLnN0YXJ0O1xcbitcXHRcXHRpZiAocltqXS5zdGFydCArIHJbal0ubGVuIC0gMSBcXHUwMDNlIGVuZClcXG4rXFx0XFx0XFx0ZW5kID0gcltqXS5zdGFydCArIHJbal0ubGVuIC0gMTtcXG4rXFx0XFx0aisrO1xcbitcXHR9XFxuK1xcbitcXHQvKiBSZXBsYWNlIHJbaS4uai0xXSB3aXRoIHRoZSBtZXJnZWQgcmFuZ2UgKGogPT0gaSBpcyBhIHBsYWluIGluc2VydCkuICovXFxuK1xcdGlmIChqICE9IGkgKyAxKVxcbitcXHRcXHRtZW1tb3ZlKFxcdTAwMjZyW2kgKyAxXSwgXFx1MDAyNnJbal0sIChuIC0gaikgKiBzaXplb2YoKnIpKTtcXG4rXFx0cltpXS5zdGFydCA9IHN0YXJ0O1xcbitcXHRyW2ldLmxlbiA9IGVuZCAtIHN0YXJ0ICsgMTtcXG4rXFx0ZWktXFx1MDAzZWlfZmNfbnJfcmFuZ2VzID0gbiAtIChqIC0gaSkgKyAxO1xcbitcXG4rXFx0LyogT3ZlcmZsb3c6IG1lcmdlIHRoZSBjb25zZWN1dGl2ZSBwYWlyIHNlcGFyYXRlZCBieSB0aGUgc21hbGxlc3QgZ2FwLiAqL1xcbitcXHR3aGlsZSAoZWktXFx1MDAzZWlfZmNfbnJfcmFuZ2VzIFxcdTAwM2UgRVhUNF9GQ19NQVhfUkFOR0VTKSB7XFxuK1xcdFxcdGV4dDRfbGJsa190IGJlc3RfZ2FwID0gfjBVO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgYmVzdCA9IDA7XFxuK1xcbitcXHRcXHRuID0gZWktXFx1MDAzZWlfZmNfbnJfcmFuZ2VzO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpICsgMSBcXHUwMDNjIG47IGkrKykge1xcbitcXHRcXHRcXHRleHQ0X2xibGtfdCBnYXAgPSByW2kgKyAxXS5zdGFydCAtXFxuK1xcdFxcdFxcdFxcdFxcdCAgKHJbaV0uc3RhcnQgKyByW2ldLmxlbik7XFxuK1xcbitcXHRcXHRcXHRpZiAoZ2FwIFxcdTAwM2MgYmVzdF9nYXApIHtcXG4rXFx0XFx0XFx0XFx0YmVzdF9nYXAgPSBnYXA7XFxuK1xcdFxcdFxcdFxcdGJlc3QgPSBpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0XFx0cltiZXN0XS5sZW4gPSByW2Jlc3QgKyAxXS5zdGFydCArIHJbYmVzdCArIDFdLmxlbiAtIHJbYmVzdF0uc3RhcnQ7XFxuK1xcdFxcdG1lbW1vdmUoXFx1MDAyNnJbYmVzdCArIDFdLCBcXHUwMDI2cltiZXN0ICsgMl0sXFxuK1xcdFxcdFxcdChuIC0gYmVzdCAtIDIpICogc2l6ZW9mKCpyKSk7XFxuK1xcdFxcdGVpLVxcdTAwM2VpX2ZjX25yX3JhbmdlcyA9IG4gLSAxO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qIF9fdHJhY2tfZm4gZm9yIHRyYWNraW5nIGRhdGEgdXBkYXRlcyAqL1xcbiBzdGF0aWMgaW50IF9fdHJhY2tfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYXJnLFxcbiBcXHRcXHRcXHQgYm9vbCB1cGRhdGUpXFxuIHtcXG4gXFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xcbi1cXHRleHQ0X2xibGtfdCBvbGRzdGFydDtcXG4gXFx0c3RydWN0IF9fdHJhY2tfcmFuZ2VfYXJncyAqX19hcmcgPVxcbiBcXHRcXHQoc3RydWN0IF9fdHJhY2tfcmFuZ2VfYXJncyAqKWFyZztcXG4rXFx0ZXh0NF9sYmxrX3Qgc3RhcnQgPSBfX2FyZy1cXHUwMDNlc3RhcnQsIGVuZCA9IF9fYXJnLVxcdTAwM2VlbmQ7XFxuK1xcdGV4dDRfbGJsa190IHMwLCBlMDtcXG4gXFxuIFxcdGlmIChpbm9kZS1cXHUwMDNlaV9pbm8gXFx1MDAzYyBFWFQ0X0ZJUlNUX0lOTyhpbm9kZS1cXHUwMDNlaV9zYikpIHtcXG4gXFx0XFx0ZXh0NF9kZWJ1ZyhcXFwiU3BlY2lhbCBpbm9kZSAlbGx1IGJlaW5nIG1vZGlmaWVkXFxcXG5cXFwiLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbiBcXHRcXHRyZXR1cm4gLUVDQU5DRUxFRDtcXG4gXFx0fVxcbiBcXG4tXFx0b2xkc3RhcnQgPSBlaS1cXHUwMDNlaV9mY19sYmxrX3N0YXJ0O1xcbitcXHQvKlxcbitcXHQgKiBBIHN1Yi1ibG9jayBwdW5jaCBob2xlIHJvdW5kcyB1cCB0aGUgc3RhcnQgYW5kIGRvd24gdGhlIGVuZCwgcGFzc2luZ1xcbitcXHQgKiBlbmQgPT0gc3RhcnQgLSAxOiBubyB3aG9sZSBibG9jayBjaGFuZ2VkLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvXFxuK1xcdCAqIHRyYWNrLiAgKGV4dDRfZmNfdHJhY2tfdGVtcGxhdGUgaGFzIGFscmVhZHkgcmVzZXQgdGhlIHJhbmdlIHNldCBmb3IgYVxcbitcXHQgKiBuZXcgdHJhbnNhY3Rpb24sIHNvIHdlIG5lZWQgbm90IGRvIGl0IGhlcmUuKVxcbitcXHQgKi9cXG4rXFx0aWYgKGVuZCBcXHUwMDNjIHN0YXJ0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmICh1cGRhdGUgXFx1MDAyNlxcdTAwMjYgZWktXFx1MDAzZWlfZmNfbGJsa19sZW4gXFx1MDAzZSAwKSB7XFxuLVxcdFxcdGVpLVxcdTAwM2VpX2ZjX2xibGtfc3RhcnQgPSBtaW4oZWktXFx1MDAzZWlfZmNfbGJsa19zdGFydCwgX19hcmctXFx1MDAzZXN0YXJ0KTtcXG4tXFx0XFx0ZWktXFx1MDAzZWlfZmNfbGJsa19sZW4gPVxcbi1cXHRcXHRcXHRtYXgob2xkc3RhcnQgKyBlaS1cXHUwMDNlaV9mY19sYmxrX2xlbiAtIDEsIF9fYXJnLVxcdTAwM2VlbmQpIC1cXG4tXFx0XFx0XFx0XFx0ZWktXFx1MDAzZWlfZmNfbGJsa19zdGFydCArIDE7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGVpLVxcdTAwM2VpX2ZjX2xibGtfc3RhcnQgPSBfX2FyZy1cXHUwMDNlc3RhcnQ7XFxuLVxcdFxcdGVpLVxcdTAwM2VpX2ZjX2xibGtfbGVuID0gX19hcmctXFx1MDAzZWVuZCAtIF9fYXJnLVxcdTAwM2VzdGFydCArIDE7XFxuK1xcdC8qIEFscmVhZHkgdXBncmFkZWQgdG8gdGhlIGhlYXAgYXJyYXk6IGZ1bGwgbXVsdGktaW50ZXJ2YWwgdHJhY2tpbmcuICovXFxuK1xcdGlmIChlaS1cXHUwMDNlaV9mY19yYW5nZXMpIHtcXG4rXFx0XFx0ZXh0NF9mY19yYW5nZV9hZGQoZWksIHN0YXJ0LCBlbmQpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0LyogRmlyc3QgcmFuZ2Ugb2YgdGhpcyBjb21taXQgc3RheXMgaW5saW5lLCBubyBhbGxvY2F0aW9uIG5lZWRlZC4gKi9cXG4rXFx0aWYgKGVpLVxcdTAwM2VpX2ZjX25yX3JhbmdlcyA9PSAwKSB7XFxuK1xcdFxcdGVpLVxcdTAwM2VpX2ZjX3JhbmdlLnN0YXJ0ID0gc3RhcnQ7XFxuK1xcdFxcdGVpLVxcdTAwM2VpX2ZjX3JhbmdlLmxlbiA9IGVuZCAtIHN0YXJ0ICsgMTtcXG4rXFx0XFx0ZWktXFx1MDAzZWlfZmNfbnJfcmFuZ2VzID0gMTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIE9uZSBpbmxpbmUgcmFuZ2Ugc28gZmFyLiAqL1xcbitcXHRzMCA9IGVpLVxcdTAwM2VpX2ZjX3JhbmdlLnN0YXJ0O1xcbitcXHRlMCA9IHMwICsgZWktXFx1MDAzZWlfZmNfcmFuZ2UubGVuIC0gMTtcXG4rXFxuK1xcdC8qIERpc2pvaW50IGZyb20gaXQ6IHRyeSB0byB1cGdyYWRlIHRvIHRoZSBhcnJheSBmb3IgZXhhY3QgdHJhY2tpbmcuICovXFxuK1xcdGlmIChzdGFydCBcXHUwMDNlIGUwICsgMSB8fCBlbmQgKyAxIFxcdTAwM2MgczApIHtcXG4rXFx0XFx0c3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSAqaGVhcDtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEdGUF9BVE9NSUM6IHdlIGhvbGQgaV9mY19sb2NrLiAgX19HRlBfTk9XQVJOOiBmYWlsdXJlIGlzIG5vdFxcbitcXHRcXHQgKiBmYXRhbCAtLSB3ZSBmYWxsIGJhY2sgdG8gdGhlIHNpbmdsZSBjb2FsZXNjZWQgcmFuZ2UgYmVsb3cgLS1cXG4rXFx0XFx0ICogc28gaXQgbXVzdCBub3Qgc3BsYXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aGVhcCA9IGttYWxsb2NfYXJyYXkoRVhUNF9GQ19NQVhfUkFOR0VTICsgMSwgc2l6ZW9mKCpoZWFwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcXG4rXFx0XFx0aWYgKGhlYXApIHtcXG4rXFx0XFx0XFx0aGVhcFswXSA9IGVpLVxcdTAwM2VpX2ZjX3JhbmdlO1xcbitcXHRcXHRcXHRlaS1cXHUwMDNlaV9mY19yYW5nZXMgPSBoZWFwO1xcbitcXHRcXHRcXHRleHQ0X2ZjX3JhbmdlX2FkZChlaSwgc3RhcnQsIGVuZCk7XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE91dCBvZiBtZW1vcnk6IGZhbGwgYmFjayB0byB0aGUgb3JpZ2luYWwgc2luZ2xlIGNvYWxlc2NlZFxcbitcXHRcXHQgKiByYW5nZSBieSBhYnNvcmJpbmcgdGhlIGdhcCBiZWxvdy4gIFRoaXMgb3Zlci1sb2dzIHRoZSBzcGFubmVkXFxuK1xcdFxcdCAqIGV4dGVudHMgYnV0IHN0YXlzIGEgdmFsaWQgZmFzdCBjb21taXQgKG5vIGZ1bGwtY29tbWl0XFxuK1xcdFxcdCAqIGZhbGxiYWNrKSwgc28gdGhlcmUgaXMgbm90aGluZyB0byBtYXJrIGluZWxpZ2libGUuXFxuK1xcdFxcdCAqL1xcbiBcXHR9XFxuIFxcbitcXHQvKiBPdmVybGFwcGluZy9hZGphY2VudCwgb3IgYXJyYXkgYWxsb2NhdGlvbiBmYWlsZWQ6IGNvYWxlc2NlIGlubGluZS4gKi9cXG4rXFx0aWYgKHN0YXJ0IFxcdTAwM2MgczApXFxuK1xcdFxcdHMwID0gc3RhcnQ7XFxuK1xcdGlmIChlbmQgXFx1MDAzZSBlMClcXG4rXFx0XFx0ZTAgPSBlbmQ7XFxuK1xcdGVpLVxcdTAwM2VpX2ZjX3JhbmdlLnN0YXJ0ID0gczA7XFxuK1xcdGVpLVxcdTAwM2VpX2ZjX3JhbmdlLmxlbiA9IGUwIC0gczAgKyAxO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTk5NCwzMSArMTEwNiwyNiBAQCBzdGF0aWMgdm9pZCBleHQ0X2ZjX2ZyZWVfaW5vZGVfc25hcChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRlaS1cXHUwMDNlaV9mY19zbmFwID0gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSxcXG4rLypcXG4rICogU25hcHNob3Qgb25lIG1vZGlmaWVkIGxibGsgcmFuZ2UgW3N0YXJ0X2xibGssIGVuZF9sYmxrXSBpbnRvIEByYW5nZXMgYnlcXG4rICogd2Fsa2luZyB0aGUgZXh0ZW50IHN0YXR1cyB0cmVlLCBlbWl0dGluZyBhbiBBRERfUkFOR0UgcGVyIG1hcHBlZCBzZWdtZW50IGFuZFxcbisgKiBhIERFTF9SQU5HRSBwZXIgaG9sZS4gICpucl9yYW5nZXMgYWNjdW11bGF0ZXMgdGhlIG51bWJlciBvZiByYW5nZXMgcHJvZHVjZWRcXG4rICogZm9yIHRoaXMgaW5vZGUgYWNyb3NzIGNhbGxzOyB0b2dldGhlciB3aXRoIG5yX3Jhbmdlc190b3RhbCAocmFuZ2VzIGFscmVhZHlcXG4rICogcHJvZHVjZWQgYnkgZWFybGllciBpbm9kZXMgaW4gdGhpcyBjb21taXQpIGl0IGlzIGJvdW5kZWQgYWdhaW5zdFxcbisgKiBFWFQ0X0ZDX1NOQVBTSE9UX01BWF9SQU5HRVMuXFxuKyAqL1xcbitzdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZXh0NF9sYmxrX3Qgc3RhcnRfbGJsayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGV4dDRfbGJsa190IGVuZF9sYmxrLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqcmFuZ2VzLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG5yX3Jhbmdlc190b3RhbCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCAqbnJfcmFuZ2VzcCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCAqbnJfcmFuZ2VzLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgaW50ICpzbmFwX2VycilcXG4ge1xcbi1cXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XFxuIFxcdHN0cnVjdCBleHQ0X2ZjX3NuYXBfc3RhdHMgKnN0YXRzID1cXG4gXFx0XFx0XFx1MDAyNkVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX2ZjX3NuYXBfc3RhdHM7XFxuLVxcdGV4dDRfbGJsa190IHN0YXJ0X2xibGssIGVuZF9sYmxrLCBjdXJfbGJsaztcXG4tXFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcyA9IDA7XFxuLVxcbi1cXHRzcGluX2xvY2soXFx1MDAyNmVpLVxcdTAwM2VpX2ZjX2xvY2spO1xcbi1cXHRpZiAoZWktXFx1MDAzZWlfZmNfbGJsa19sZW4gPT0gMCkge1xcbi1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZWktXFx1MDAzZWlfZmNfbG9jayk7XFxuLVxcdFxcdGlmIChucl9yYW5nZXNwKVxcbi1cXHRcXHRcXHQqbnJfcmFuZ2VzcCA9IDA7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuLVxcdHN0YXJ0X2xibGsgPSBlaS1cXHUwMDNlaV9mY19sYmxrX3N0YXJ0O1xcbi1cXHRlbmRfbGJsayA9IGVpLVxcdTAwM2VpX2ZjX2xibGtfc3RhcnQgKyBlaS1cXHUwMDNlaV9mY19sYmxrX2xlbiAtIDE7XFxuLVxcdGVpLVxcdTAwM2VpX2ZjX2xibGtfbGVuID0gMDtcXG4tXFx0c3Bpbl91bmxvY2soXFx1MDAyNmVpLVxcdTAwM2VpX2ZjX2xvY2spO1xcbitcXHRleHQ0X2xibGtfdCBjdXJfbGJsayA9IHN0YXJ0X2xibGs7XFxuIFxcbi1cXHRjdXJfbGJsayA9IHN0YXJ0X2xibGs7XFxuIFxcdGV4dDRfZGVidWcoXFxcInNuYXBzaG90IGRhdGEgcmFuZ2VzICV1LSV1IGZvciBpbm9kZSAlbGx1XFxcXG5cXFwiLFxcbiBcXHRcXHQgICBzdGFydF9sYmxrLCBlbmRfbGJsayxcXG4gXFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbkBAIC0xMDUwLDcgKzExNTcsNyBAQCBzdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKG5yX3Jhbmdlc190b3RhbCArIG5yX3JhbmdlcyBcXHUwMDNlPSBFWFQ0X0ZDX1NOQVBTSE9UX01BWF9SQU5HRVMpIHtcXG4rXFx0XFx0aWYgKG5yX3Jhbmdlc190b3RhbCArICpucl9yYW5nZXMgXFx1MDAzZT0gRVhUNF9GQ19TTkFQU0hPVF9NQVhfUkFOR0VTKSB7XFxuIFxcdFxcdFxcdGF0b21pYzY0X2luYyhcXHUwMDI2c3RhdHMtXFx1MDAzZXNuYXBfZmFpbF9yYW5nZXNfY2FwKTtcXG4gXFx0XFx0XFx0ZXh0NF9mY19zZXRfc25hcF9lcnIoc25hcF9lcnIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgRVhUNF9GQ19TTkFQX0VSUl9SQU5HRVNfQ0FQKTtcXG5AQCAtMTA2Myw3ICsxMTcwLDcgQEAgc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0ZXh0NF9mY19zZXRfc25hcF9lcnIoc25hcF9lcnIsIEVYVDRfRkNfU05BUF9FUlJfTk9NRU0pO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRucl9yYW5nZXMrKztcXG4rXFx0XFx0KCpucl9yYW5nZXMpKys7XFxuIFxcbiBcXHRcXHRyYW5nZS1cXHUwMDNlbGJsayA9IGN1cl9sYmxrO1xcbiBcXHRcXHRyYW5nZS1cXHUwMDNlbGVuID0gbGVuO1xcbkBAIC0xMTAxLDYgKzEyMDgsNTIgQEAgc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0Y3VyX2xibGsgKz0gcmFuZ2UtXFx1MDAzZWxlbjtcXG4gXFx0fVxcbiBcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyYW5nZXMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzX3RvdGFsLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50ICpucl9yYW5nZXNwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgaW50ICpzbmFwX2VycilcXG4re1xcbitcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XFxuK1xcdHN0cnVjdCBleHQ0X2ZjX2xibGtfcmFuZ2UgdHJhY2tlZFtFWFQ0X0ZDX01BWF9SQU5HRVMgKyAxXTtcXG4rXFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcyA9IDAsIG5yX3RyYWNrZWQsIHQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmVpLVxcdTAwM2VpX2ZjX2xvY2spO1xcbitcXHRucl90cmFja2VkID0gZWktXFx1MDAzZWlfZmNfbnJfcmFuZ2VzO1xcbitcXHRpZiAobnJfdHJhY2tlZCA9PSAwKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZlaS1cXHUwMDNlaV9mY19sb2NrKTtcXG4rXFx0XFx0aWYgKG5yX3Jhbmdlc3ApXFxuK1xcdFxcdFxcdCpucl9yYW5nZXNwID0gMDtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0aWYgKGVpLVxcdTAwM2VpX2ZjX3JhbmdlcylcXG4rXFx0XFx0bWVtY3B5KHRyYWNrZWQsIGVpLVxcdTAwM2VpX2ZjX3JhbmdlcyxcXG4rXFx0XFx0ICAgICAgIG5yX3RyYWNrZWQgKiBzaXplb2YodHJhY2tlZFswXSkpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHRyYWNrZWRbMF0gPSBlaS1cXHUwMDNlaV9mY19yYW5nZTtcXHQvKiBpbmxpbmUgc2luZ2xlLXJhbmdlIG1vZGUgKi9cXG4rXFx0ZWktXFx1MDAzZWlfZmNfbnJfcmFuZ2VzID0gMDtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmVpLVxcdTAwM2VpX2ZjX2xvY2spO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU25hcHNob3Qgb25seSB0aGUgYWN0dWFsbHktbW9kaWZpZWQgcmFuZ2VzLCBub3QgdGhlIHdob2xlIFttaW4sbWF4XVxcbitcXHQgKiBzcGFuOiB0aGlzIGlzIHdoYXQga2VlcHMgc2NhdHRlcmVkIGFsbG9jYXRpb25zIGZyb20gYmxvd2luZyBwYXN0XFxuK1xcdCAqIEVYVDRfRkNfU05BUFNIT1RfTUFYX1JBTkdFUyBhbmQgZmFsbGluZyBiYWNrIHRvIGEgZnVsbCBjb21taXQuXFxuK1xcdCAqL1xcbitcXHRmb3IgKHQgPSAwOyB0IFxcdTAwM2MgbnJfdHJhY2tlZDsgdCsrKSB7XFxuK1xcdFxcdGV4dDRfbGJsa190IHMgPSB0cmFja2VkW3RdLnN0YXJ0O1xcbitcXHRcXHRleHQ0X2xibGtfdCBlID0gcyArIHRyYWNrZWRbdF0ubGVuIC0gMTtcXG4rXFxuK1xcdFxcdHJldCA9IGV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZShpbm9kZSwgcywgZSwgcmFuZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIG5yX3Jhbmdlc190b3RhbCwgXFx1MDAyNm5yX3JhbmdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBzbmFwX2Vycik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChucl9yYW5nZXNwKVxcbiBcXHRcXHQqbnJfcmFuZ2VzcCA9IG5yX3JhbmdlcztcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xcbmluZGV4IGYyYzUyY2M3NDY3NjU1Li5jZmE3ZTZiZWMzODVlNiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcXG5AQCAtMTQ1NSw2ICsxNDU1LDcgQEAgc3RhdGljIHZvaWQgZXh0NF9mcmVlX2luX2NvcmVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0XFx0cHJfd2FybihcXFwiJXM6IGlub2RlICVsbHUgc3RpbGwgaW4gZmMgbGlzdFxcXCIsXFxuIFxcdFxcdFxcdF9fZnVuY19fLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbiBcXHR9XFxuK1xcdGtmcmVlKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmNfcmFuZ2VzKTtcXG4gXFx0a21lbV9jYWNoZV9mcmVlKGV4dDRfaW5vZGVfY2FjaGVwLCBFWFQ0X0koaW5vZGUpKTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MzY6MzIuNzA3NDAxMjg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjgwNjc5OTM5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9mY19yYW5nZV9hZGRcIixcbiAgICBcIl9fdHJhY2tfcmFuZ2VcIixcbiAgICBcImV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZVwiLFxuICAgIFwiZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZXh0NCBmYXN0IGNvbW1pdHMgdHJhY2sgbW9kaWZpZWQgbG9naWNhbCBibG9jayByYW5nZXMsIG1vdmluZyBmcm9tIGEgc2luZ2xlIGNvYWxlc2NlZCByYW5nZSB0byB0cmFja2luZyBtdWx0aXBsZSBkaXNqb2ludCByYW5nZXMuIFRoaXMgaW52b2x2ZXMgbmV3IGFycmF5IG1hbmlwdWxhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBleHRlbnQgdHJhY2tpbmcgbG9naWMgaW4gdGhlIGZhc3QgY29tbWl0IHBhdGgsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmI5YTRlYWQ5ZmYwN2JkZDdhMDk2OWQyYWRmNTVkZmNhZWZmYTFkMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDA5OjM2OjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggZGRjOTAzNzM4YzZiMzMuLmQ5M2NjNTJjZDAxZWQwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbisrKyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMTA0Miw2ICsxMDQyLDIwIEBAIGVudW0gZXh0NF9mY19zbmFwX2VyciB7XG4gXHRFWFQ0X0ZDX1NOQVBfRVJSX0lOT0RFX0xPQyxcbiB9O1xuIFxuKy8qXG4rICogTWF4aW11bSBudW1iZXIgb2YgZGlzam9pbnQgbG9naWNhbC1ibG9jayByYW5nZXMgdHJhY2tlZCBwZXIgaW5vZGUgZm9yIGFcbisgKiBzaW5nbGUgZmFzdCBjb21taXQuICBTY2F0dGVyZWQgYWxsb2NhdGlvbnMgdGhhdCBleGNlZWQgdGhpcyBnZXQgdGhlaXIgdHdvXG4rICogY2xvc2VzdCByYW5nZXMgbWVyZ2VkIChzZWUgZXh0NF9mY19yYW5nZV9hZGQoKSksIGRlZ3JhZGluZyBncmFjZWZ1bGx5IHRvXG4rICogdGhlIG9sZCBzaW5nbGUgY29hbGVzY2VkLXJhbmdlIGJlaGF2aW91ci5cbisgKi9cbisjZGVmaW5lIEVYVDRfRkNfTUFYX1JBTkdFUyAxNlxuK1xuKy8qIEluLW1lbW9yeSByZWNvcmQgb2YgYW4gbGJsayByYW5nZSBtb2RpZmllZCBpbiB0aGUgY3VycmVudCBmYXN0IGNvbW1pdC4gKi9cbitzdHJ1Y3QgZXh0NF9mY19sYmxrX3JhbmdlIHtcbitcdGV4dDRfbGJsa190IHN0YXJ0O1xuK1x0ZXh0NF9sYmxrX3QgbGVuO1xuK307XG4rXG4gLypcbiAgKiBmb3VydGggZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gaW5vZGUgZGF0YSBpbiBtZW1vcnlcbiAgKi9cbkBAIC0xMDkxLDExICsxMTA1LDI1IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuIFx0XHRcdFx0XHQgKiBwcm90ZWN0ZWQgYnkgc2JpLVx1MDAzZXNfZmNfbG9jay5cbiBcdFx0XHRcdFx0ICovXG4gXG4tXHQvKiBTdGFydCBvZiBsYmxrIHJhbmdlIHRoYXQgbmVlZHMgdG8gYmUgY29tbWl0dGVkIGluIHRoaXMgZmFzdCBjb21taXQgKi9cbi1cdGV4dDRfbGJsa190IGlfZmNfbGJsa19zdGFydDtcbi1cbi1cdC8qIEVuZCBvZiBsYmxrIHJhbmdlIHRoYXQgbmVlZHMgdG8gYmUgY29tbWl0dGVkIGluIHRoaXMgZmFzdCBjb21taXQgKi9cbi1cdGV4dDRfbGJsa190IGlfZmNfbGJsa19sZW47XG4rXHQvKlxuK1x0ICogTG9naWNhbCBibG9jayByYW5nZXMgbW9kaWZpZWQgaW4gdGhpcyBmYXN0IGNvbW1pdC4gIFRyYWNraW5nIHRoZVxuK1x0ICogYWN0dWFsIG1vZGlmaWVkIHJhbmdlcyAoaW5zdGVhZCBvZiBvbmUgY29hbGVzY2VkIFttaW4sbWF4XSkgYXZvaWRzXG4rXHQgKiBzbmFwc2hvdHRpbmcgdGhlIHdob2xlIHNwYW5uZWQgZXh0ZW50IG1hcCBmb3Igc2NhdHRlcmVkIGFsbG9jYXRpb25zLlxuK1x0ICpcbitcdCAqIFRoZSBmaXJzdCByYW5nZSBpcyBrZXB0IGlubGluZSBpbiBpX2ZjX3JhbmdlLCBzbyB0aGUgY29tbW9uIGNhc2Ugb2YgYVxuK1x0ICogc2luZ2xlIGNvbnRpZ3VvdXMgZGlydHkgcmVnaW9uIG5lZWRzIG5vIGFsbG9jYXRpb24uICBXaGVuIGEgc2Vjb25kXG4rXHQgKiBkaXNqb2ludCByYW5nZSBhcHBlYXJzIHRoZSBpbm9kZSBpcyB1cGdyYWRlZCB0byB0aGUgaV9mY19yYW5nZXMgYXJyYXlcbitcdCAqIChFWFQ0X0ZDX01BWF9SQU5HRVMgKyAxIGVudHJpZXMsIHNvcnRlZCBhbmQgbXV0dWFsbHkgZGlzam9pbnQ7IHRoZVxuK1x0ICogZXh0cmEgc2xvdCBpcyB0cmFuc2llbnQgcm9vbSB1c2VkIHdoaWxlIGluc2VydGluZyBiZWZvcmUgYW4gb3ZlcmZsb3dcbitcdCAqIG1lcmdlKSwgYWxsb2NhdGVkIHRoZW4gYW5kIGZyZWVkIHdoZW4gdGhlIGlub2RlIGlzIGV2aWN0ZWQuICBJZiB0aGF0XG4rXHQgKiBhbGxvY2F0aW9uIGZhaWxzIHdlIGZhbGwgYmFjayB0byBjb2FsZXNjaW5nIGludG8gaV9mY19yYW5nZSwgaS5lLiB0aGVcbitcdCAqIG9yaWdpbmFsIHNpbmdsZSBjb2FsZXNjZWQtcmFuZ2UgYmVoYXZpb3VyLiAgaV9mY19ucl9yYW5nZXMgY291bnRzIHRoZVxuK1x0ICogdmFsaWQgcmFuZ2VzOyB3aGlsZSBpX2ZjX3JhbmdlcyBpcyBOVUxMIGl0IGlzIDAgb3IgMS4gIFByb3RlY3RlZCBieVxuK1x0ICogaV9mY19sb2NrLlxuK1x0ICovXG4rXHRzdHJ1Y3QgZXh0NF9mY19sYmxrX3JhbmdlIGlfZmNfcmFuZ2U7XG4rXHRzdHJ1Y3QgZXh0NF9mY19sYmxrX3JhbmdlICppX2ZjX3JhbmdlcztcbitcdHVuc2lnbmVkIGludCBpX2ZjX25yX3JhbmdlcztcbiBcbiBcdC8qXG4gXHQgKiBDb21taXQtdGltZSBmYXN0IGNvbW1pdCBzbmFwc2hvdHMuXG5AQCAtMTExNiw4ICsxMTQ0LDggQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XG4gXHRzcGlubG9ja190IGlfcmF3X2xvY2s7XHQvKiBwcm90ZWN0cyB1cGRhdGVzIHRvIHRoZSByYXcgaW5vZGUgKi9cbiBcbiBcdC8qXG4tXHQgKiBQcm90ZWN0IGNvbmN1cnJlbnQgYWNjZXNzZXMgb24gaV9mY19sYmxrX3N0YXJ0LCBpX2ZjX2xibGtfbGVuXG4tXHQgKiBhbmQgaW5vZGUncyBFWFQ0X0ZDX1NUQVRFX0NPTU1JVFRJTkcgc3RhdGUgYml0LlxuK1x0ICogUHJvdGVjdCBjb25jdXJyZW50IGFjY2Vzc2VzIG9uIGlfZmNfcmFuZ2UsIGlfZmNfcmFuZ2VzLFxuK1x0ICogaV9mY19ucl9yYW5nZXMgYW5kIGlub2RlJ3MgRVhUNF9GQ19TVEFURV9DT01NSVRUSU5HIHN0YXRlIGJpdC5cbiBcdCAqL1xuIFx0c3BpbmxvY2tfdCBpX2ZjX2xvY2s7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9mYXN0X2NvbW1pdC5jIGIvZnMvZXh0NC9mYXN0X2NvbW1pdC5jXG5pbmRleCA0ZWY3OTZiOWI2Y2I1Zi4uOWQzNjM2NWVhZTAyYmEgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2Zhc3RfY29tbWl0LmNcbisrKyBiL2ZzL2V4dDQvZmFzdF9jb21taXQuY1xuQEAgLTIyMiw4ICsyMjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9mY19yZXNldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiBcbi1cdGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydCA9IDA7XG4tXHRlaS1cdTAwM2VpX2ZjX2xibGtfbGVuID0gMDtcbitcdGVpLVx1MDAzZWlfZmNfbnJfcmFuZ2VzID0gMDtcbiB9XG4gXG4gdm9pZCBleHQ0X2ZjX2luaXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbkBAIC0yMzEsNiArMjMwLDcgQEAgdm9pZCBleHQ0X2ZjX2luaXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiBcbiBcdGV4dDRfZmNfcmVzZXRfaW5vZGUoaW5vZGUpO1xuK1x0ZWktXHUwMDNlaV9mY19yYW5nZXMgPSBOVUxMO1xuIFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9GQ19DT01NSVRUSU5HKTtcbiBcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfRkNfUkVRVUVVRSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX2ZjX2xpc3QpO1xuQEAgLTU4Miw3ICs1ODIsNyBAQCBzdGF0aWMgaW50IF9fdHJhY2tfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYXJnLFxuIFx0aWYgKHVwZGF0ZSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXG4tXHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmNfbGJsa19sZW4gPSAwO1xuK1x0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZjX25yX3JhbmdlcyA9IDA7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNjIyLDMyICs2MjIsMTQ0IEBAIHN0cnVjdCBfX3RyYWNrX3JhbmdlX2FyZ3Mge1xuIFx0ZXh0NF9sYmxrX3Qgc3RhcnQsIGVuZDtcbiB9O1xuIFxuKy8qXG4rICogUmVjb3JkIHRoYXQgbG9naWNhbCBibG9jayByYW5nZSBbc3RhcnQsIGVuZF0gd2FzIG1vZGlmaWVkIGluIHRoZSBjdXJyZW50XG4rICogZmFzdCBjb21taXQuICBNYWludGFpbnMgYSBzbWFsbCwgYm91bmRlZCBzZXQgb2Ygc29ydGVkLCBtdXR1YWxseSBkaXNqb2ludFxuKyAqIHJhbmdlcywgbWVyZ2luZyB0aGUgbmV3IHJhbmdlIHdpdGggYW55IGl0IG92ZXJsYXBzIG9yIGlzIGFkamFjZW50IHRvLiAgV2hlblxuKyAqIHRoZSBzZXQgd291bGQgZXhjZWVkIEVYVDRfRkNfTUFYX1JBTkdFUywgdGhlIGNvbnNlY3V0aXZlIHBhaXIgc2VwYXJhdGVkIGJ5XG4rICogdGhlIHNtYWxsZXN0IGdhcCBpcyBtZXJnZWQgKGFic29yYmluZyB0aGF0IGdhcCksIHNvIHRoZSB3b3JzdCBjYXNlIGRlZ3JhZGVzXG4rICogZ3JhY2VmdWxseSB0byB0aGUgb2xkIHNpbmdsZSBjb2FsZXNjZWQtcmFuZ2UgYmVoYXZpb3VyLiAgVHJhY2tpbmcgdGhlIGFjdHVhbFxuKyAqIG1vZGlmaWVkIHJhbmdlcyAocmF0aGVyIHRoYW4gb25lIFttaW4sbWF4XSBzcGFuKSBrZWVwc1xuKyAqIGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YSgpIGZyb20gc25hcHNob3R0aW5nIHRoZSB3aG9sZSBzcGFubmVkIGV4dGVudCBtYXBcbisgKiBvbiBzY2F0dGVyZWQgYWxsb2NhdGlvbnMuICBDYWxsZXIgaG9sZHMgZWktXHUwMDNlaV9mY19sb2NrOyBlaS1cdTAwM2VpX2ZjX3JhbmdlcyBpc1xuKyAqIG5vbi1OVUxMIHdpdGggcm9vbSBmb3IgRVhUNF9GQ19NQVhfUkFOR0VTICsgMSBlbnRyaWVzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGV4dDRfZmNfcmFuZ2VfYWRkKHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpLFxuK1x0XHRcdCAgICAgIGV4dDRfbGJsa190IHN0YXJ0LCBleHQ0X2xibGtfdCBlbmQpXG4re1xuK1x0c3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSAqciA9IGVpLVx1MDAzZWlfZmNfcmFuZ2VzO1xuK1x0dW5zaWduZWQgaW50IG4gPSBlaS1cdTAwM2VpX2ZjX25yX3JhbmdlcztcbitcdHVuc2lnbmVkIGludCBpLCBqO1xuK1xuK1x0LyogU2tpcCByYW5nZXMgbHlpbmcgZW50aXJlbHkgYmVmb3JlIFtzdGFydCAtIDFdIChubyBvdmVybGFwL2FkamFjZW5jeSkuICovXG4rXHRpID0gMDtcbitcdHdoaWxlIChpIFx1MDAzYyBuIFx1MDAyNlx1MDAyNiByW2ldLnN0YXJ0ICsgcltpXS5sZW4gXHUwMDNjIHN0YXJ0KVxuK1x0XHRpKys7XG4rXG4rXHQvKiBBYnNvcmIgZXZlcnkgcmFuZ2Ugb3ZlcmxhcHBpbmcgb3IgYWRqYWNlbnQgdG8gdGhlIGdyb3dpbmcgW3N0YXJ0LGVuZF0uICovXG4rXHRqID0gaTtcbitcdHdoaWxlIChqIFx1MDAzYyBuIFx1MDAyNlx1MDAyNiByW2pdLnN0YXJ0IFx1MDAzYz0gZW5kICsgMSkge1xuK1x0XHRpZiAocltqXS5zdGFydCBcdTAwM2Mgc3RhcnQpXG4rXHRcdFx0c3RhcnQgPSByW2pdLnN0YXJ0O1xuK1x0XHRpZiAocltqXS5zdGFydCArIHJbal0ubGVuIC0gMSBcdTAwM2UgZW5kKVxuK1x0XHRcdGVuZCA9IHJbal0uc3RhcnQgKyByW2pdLmxlbiAtIDE7XG4rXHRcdGorKztcbitcdH1cbitcbitcdC8qIFJlcGxhY2UgcltpLi5qLTFdIHdpdGggdGhlIG1lcmdlZCByYW5nZSAoaiA9PSBpIGlzIGEgcGxhaW4gaW5zZXJ0KS4gKi9cbitcdGlmIChqICE9IGkgKyAxKVxuK1x0XHRtZW1tb3ZlKFx1MDAyNnJbaSArIDFdLCBcdTAwMjZyW2pdLCAobiAtIGopICogc2l6ZW9mKCpyKSk7XG4rXHRyW2ldLnN0YXJ0ID0gc3RhcnQ7XG4rXHRyW2ldLmxlbiA9IGVuZCAtIHN0YXJ0ICsgMTtcbitcdGVpLVx1MDAzZWlfZmNfbnJfcmFuZ2VzID0gbiAtIChqIC0gaSkgKyAxO1xuK1xuK1x0LyogT3ZlcmZsb3c6IG1lcmdlIHRoZSBjb25zZWN1dGl2ZSBwYWlyIHNlcGFyYXRlZCBieSB0aGUgc21hbGxlc3QgZ2FwLiAqL1xuK1x0d2hpbGUgKGVpLVx1MDAzZWlfZmNfbnJfcmFuZ2VzIFx1MDAzZSBFWFQ0X0ZDX01BWF9SQU5HRVMpIHtcbitcdFx0ZXh0NF9sYmxrX3QgYmVzdF9nYXAgPSB+MFU7XG4rXHRcdHVuc2lnbmVkIGludCBiZXN0ID0gMDtcbitcbitcdFx0biA9IGVpLVx1MDAzZWlfZmNfbnJfcmFuZ2VzO1xuK1x0XHRmb3IgKGkgPSAwOyBpICsgMSBcdTAwM2MgbjsgaSsrKSB7XG4rXHRcdFx0ZXh0NF9sYmxrX3QgZ2FwID0gcltpICsgMV0uc3RhcnQgLVxuK1x0XHRcdFx0XHQgIChyW2ldLnN0YXJ0ICsgcltpXS5sZW4pO1xuK1xuK1x0XHRcdGlmIChnYXAgXHUwMDNjIGJlc3RfZ2FwKSB7XG4rXHRcdFx0XHRiZXN0X2dhcCA9IGdhcDtcbitcdFx0XHRcdGJlc3QgPSBpO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0XHRyW2Jlc3RdLmxlbiA9IHJbYmVzdCArIDFdLnN0YXJ0ICsgcltiZXN0ICsgMV0ubGVuIC0gcltiZXN0XS5zdGFydDtcbitcdFx0bWVtbW92ZShcdTAwMjZyW2Jlc3QgKyAxXSwgXHUwMDI2cltiZXN0ICsgMl0sXG4rXHRcdFx0KG4gLSBiZXN0IC0gMikgKiBzaXplb2YoKnIpKTtcbitcdFx0ZWktXHUwMDNlaV9mY19ucl9yYW5nZXMgPSBuIC0gMTtcbitcdH1cbit9XG4rXG4gLyogX190cmFja19mbiBmb3IgdHJhY2tpbmcgZGF0YSB1cGRhdGVzICovXG4gc3RhdGljIGludCBfX3RyYWNrX3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmFyZyxcbiBcdFx0XHQgYm9vbCB1cGRhdGUpXG4ge1xuIFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xuLVx0ZXh0NF9sYmxrX3Qgb2xkc3RhcnQ7XG4gXHRzdHJ1Y3QgX190cmFja19yYW5nZV9hcmdzICpfX2FyZyA9XG4gXHRcdChzdHJ1Y3QgX190cmFja19yYW5nZV9hcmdzICopYXJnO1xuK1x0ZXh0NF9sYmxrX3Qgc3RhcnQgPSBfX2FyZy1cdTAwM2VzdGFydCwgZW5kID0gX19hcmctXHUwMDNlZW5kO1xuK1x0ZXh0NF9sYmxrX3QgczAsIGUwO1xuIFxuIFx0aWYgKGlub2RlLVx1MDAzZWlfaW5vIFx1MDAzYyBFWFQ0X0ZJUlNUX0lOTyhpbm9kZS1cdTAwM2VpX3NiKSkge1xuIFx0XHRleHQ0X2RlYnVnKFwiU3BlY2lhbCBpbm9kZSAlbGx1IGJlaW5nIG1vZGlmaWVkXFxuXCIsIGlub2RlLVx1MDAzZWlfaW5vKTtcbiBcdFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XG4gXHR9XG4gXG4tXHRvbGRzdGFydCA9IGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydDtcbitcdC8qXG4rXHQgKiBBIHN1Yi1ibG9jayBwdW5jaCBob2xlIHJvdW5kcyB1cCB0aGUgc3RhcnQgYW5kIGRvd24gdGhlIGVuZCwgcGFzc2luZ1xuK1x0ICogZW5kID09IHN0YXJ0IC0gMTogbm8gd2hvbGUgYmxvY2sgY2hhbmdlZCwgc28gdGhlcmUgaXMgbm90aGluZyB0b1xuK1x0ICogdHJhY2suICAoZXh0NF9mY190cmFja190ZW1wbGF0ZSBoYXMgYWxyZWFkeSByZXNldCB0aGUgcmFuZ2Ugc2V0IGZvciBhXG4rXHQgKiBuZXcgdHJhbnNhY3Rpb24sIHNvIHdlIG5lZWQgbm90IGRvIGl0IGhlcmUuKVxuK1x0ICovXG4rXHRpZiAoZW5kIFx1MDAzYyBzdGFydClcbitcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAodXBkYXRlIFx1MDAyNlx1MDAyNiBlaS1cdTAwM2VpX2ZjX2xibGtfbGVuIFx1MDAzZSAwKSB7XG4tXHRcdGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydCA9IG1pbihlaS1cdTAwM2VpX2ZjX2xibGtfc3RhcnQsIF9fYXJnLVx1MDAzZXN0YXJ0KTtcbi1cdFx0ZWktXHUwMDNlaV9mY19sYmxrX2xlbiA9XG4tXHRcdFx0bWF4KG9sZHN0YXJ0ICsgZWktXHUwMDNlaV9mY19sYmxrX2xlbiAtIDEsIF9fYXJnLVx1MDAzZWVuZCkgLVxuLVx0XHRcdFx0ZWktXHUwMDNlaV9mY19sYmxrX3N0YXJ0ICsgMTtcbi1cdH0gZWxzZSB7XG4tXHRcdGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydCA9IF9fYXJnLVx1MDAzZXN0YXJ0O1xuLVx0XHRlaS1cdTAwM2VpX2ZjX2xibGtfbGVuID0gX19hcmctXHUwMDNlZW5kIC0gX19hcmctXHUwMDNlc3RhcnQgKyAxO1xuK1x0LyogQWxyZWFkeSB1cGdyYWRlZCB0byB0aGUgaGVhcCBhcnJheTogZnVsbCBtdWx0aS1pbnRlcnZhbCB0cmFja2luZy4gKi9cbitcdGlmIChlaS1cdTAwM2VpX2ZjX3Jhbmdlcykge1xuK1x0XHRleHQ0X2ZjX3JhbmdlX2FkZChlaSwgc3RhcnQsIGVuZCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0LyogRmlyc3QgcmFuZ2Ugb2YgdGhpcyBjb21taXQgc3RheXMgaW5saW5lLCBubyBhbGxvY2F0aW9uIG5lZWRlZC4gKi9cbitcdGlmIChlaS1cdTAwM2VpX2ZjX25yX3JhbmdlcyA9PSAwKSB7XG4rXHRcdGVpLVx1MDAzZWlfZmNfcmFuZ2Uuc3RhcnQgPSBzdGFydDtcbitcdFx0ZWktXHUwMDNlaV9mY19yYW5nZS5sZW4gPSBlbmQgLSBzdGFydCArIDE7XG4rXHRcdGVpLVx1MDAzZWlfZmNfbnJfcmFuZ2VzID0gMTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBPbmUgaW5saW5lIHJhbmdlIHNvIGZhci4gKi9cbitcdHMwID0gZWktXHUwMDNlaV9mY19yYW5nZS5zdGFydDtcbitcdGUwID0gczAgKyBlaS1cdTAwM2VpX2ZjX3JhbmdlLmxlbiAtIDE7XG4rXG4rXHQvKiBEaXNqb2ludCBmcm9tIGl0OiB0cnkgdG8gdXBncmFkZSB0byB0aGUgYXJyYXkgZm9yIGV4YWN0IHRyYWNraW5nLiAqL1xuK1x0aWYgKHN0YXJ0IFx1MDAzZSBlMCArIDEgfHwgZW5kICsgMSBcdTAwM2MgczApIHtcbitcdFx0c3RydWN0IGV4dDRfZmNfbGJsa19yYW5nZSAqaGVhcDtcbitcbitcdFx0LypcbitcdFx0ICogR0ZQX0FUT01JQzogd2UgaG9sZCBpX2ZjX2xvY2suICBfX0dGUF9OT1dBUk46IGZhaWx1cmUgaXMgbm90XG4rXHRcdCAqIGZhdGFsIC0tIHdlIGZhbGwgYmFjayB0byB0aGUgc2luZ2xlIGNvYWxlc2NlZCByYW5nZSBiZWxvdyAtLVxuK1x0XHQgKiBzbyBpdCBtdXN0IG5vdCBzcGxhdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXG4rXHRcdCAqL1xuK1x0XHRoZWFwID0ga21hbGxvY19hcnJheShFWFQ0X0ZDX01BWF9SQU5HRVMgKyAxLCBzaXplb2YoKmhlYXApLFxuK1x0XHRcdFx0ICAgICBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcbitcdFx0aWYgKGhlYXApIHtcbitcdFx0XHRoZWFwWzBdID0gZWktXHUwMDNlaV9mY19yYW5nZTtcbitcdFx0XHRlaS1cdTAwM2VpX2ZjX3JhbmdlcyA9IGhlYXA7XG4rXHRcdFx0ZXh0NF9mY19yYW5nZV9hZGQoZWksIHN0YXJ0LCBlbmQpO1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4rXHRcdC8qXG4rXHRcdCAqIE91dCBvZiBtZW1vcnk6IGZhbGwgYmFjayB0byB0aGUgb3JpZ2luYWwgc2luZ2xlIGNvYWxlc2NlZFxuK1x0XHQgKiByYW5nZSBieSBhYnNvcmJpbmcgdGhlIGdhcCBiZWxvdy4gIFRoaXMgb3Zlci1sb2dzIHRoZSBzcGFubmVkXG4rXHRcdCAqIGV4dGVudHMgYnV0IHN0YXlzIGEgdmFsaWQgZmFzdCBjb21taXQgKG5vIGZ1bGwtY29tbWl0XG4rXHRcdCAqIGZhbGxiYWNrKSwgc28gdGhlcmUgaXMgbm90aGluZyB0byBtYXJrIGluZWxpZ2libGUuXG4rXHRcdCAqL1xuIFx0fVxuIFxuK1x0LyogT3ZlcmxhcHBpbmcvYWRqYWNlbnQsIG9yIGFycmF5IGFsbG9jYXRpb24gZmFpbGVkOiBjb2FsZXNjZSBpbmxpbmUuICovXG4rXHRpZiAoc3RhcnQgXHUwMDNjIHMwKVxuK1x0XHRzMCA9IHN0YXJ0O1xuK1x0aWYgKGVuZCBcdTAwM2UgZTApXG4rXHRcdGUwID0gZW5kO1xuK1x0ZWktXHUwMDNlaV9mY19yYW5nZS5zdGFydCA9IHMwO1xuK1x0ZWktXHUwMDNlaV9mY19yYW5nZS5sZW4gPSBlMCAtIHMwICsgMTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC05OTQsMzEgKzExMDYsMjYgQEAgc3RhdGljIHZvaWQgZXh0NF9mY19mcmVlX2lub2RlX3NuYXAoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGVpLVx1MDAzZWlfZmNfc25hcCA9IE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rLypcbisgKiBTbmFwc2hvdCBvbmUgbW9kaWZpZWQgbGJsayByYW5nZSBbc3RhcnRfbGJsaywgZW5kX2xibGtdIGludG8gQHJhbmdlcyBieVxuKyAqIHdhbGtpbmcgdGhlIGV4dGVudCBzdGF0dXMgdHJlZSwgZW1pdHRpbmcgYW4gQUREX1JBTkdFIHBlciBtYXBwZWQgc2VnbWVudCBhbmRcbisgKiBhIERFTF9SQU5HRSBwZXIgaG9sZS4gICpucl9yYW5nZXMgYWNjdW11bGF0ZXMgdGhlIG51bWJlciBvZiByYW5nZXMgcHJvZHVjZWRcbisgKiBmb3IgdGhpcyBpbm9kZSBhY3Jvc3MgY2FsbHM7IHRvZ2V0aGVyIHdpdGggbnJfcmFuZ2VzX3RvdGFsIChyYW5nZXMgYWxyZWFkeVxuKyAqIHByb2R1Y2VkIGJ5IGVhcmxpZXIgaW5vZGVzIGluIHRoaXMgY29tbWl0KSBpdCBpcyBib3VuZGVkIGFnYWluc3RcbisgKiBFWFQ0X0ZDX1NOQVBTSE9UX01BWF9SQU5HRVMuXG4rICovXG4rc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgICAgICBleHQ0X2xibGtfdCBzdGFydF9sYmxrLFxuK1x0XHRcdFx0ICAgICAgIGV4dDRfbGJsa190IGVuZF9sYmxrLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJhbmdlcyxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzX3RvdGFsLFxuLVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCAqbnJfcmFuZ2VzcCxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgKm5yX3JhbmdlcyxcbiBcdFx0XHRcdCAgICAgICBpbnQgKnNuYXBfZXJyKVxuIHtcbi1cdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiBcdHN0cnVjdCBleHQ0X2ZjX3NuYXBfc3RhdHMgKnN0YXRzID1cbiBcdFx0XHUwMDI2RVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2ZjX3NuYXBfc3RhdHM7XG4tXHRleHQ0X2xibGtfdCBzdGFydF9sYmxrLCBlbmRfbGJsaywgY3VyX2xibGs7XG4tXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzID0gMDtcbi1cbi1cdHNwaW5fbG9jayhcdTAwMjZlaS1cdTAwM2VpX2ZjX2xvY2spO1xuLVx0aWYgKGVpLVx1MDAzZWlfZmNfbGJsa19sZW4gPT0gMCkge1xuLVx0XHRzcGluX3VubG9jayhcdTAwMjZlaS1cdTAwM2VpX2ZjX2xvY2spO1xuLVx0XHRpZiAobnJfcmFuZ2VzcClcbi1cdFx0XHQqbnJfcmFuZ2VzcCA9IDA7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVx0c3RhcnRfbGJsayA9IGVpLVx1MDAzZWlfZmNfbGJsa19zdGFydDtcbi1cdGVuZF9sYmxrID0gZWktXHUwMDNlaV9mY19sYmxrX3N0YXJ0ICsgZWktXHUwMDNlaV9mY19sYmxrX2xlbiAtIDE7XG4tXHRlaS1cdTAwM2VpX2ZjX2xibGtfbGVuID0gMDtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNmVpLVx1MDAzZWlfZmNfbG9jayk7XG4rXHRleHQ0X2xibGtfdCBjdXJfbGJsayA9IHN0YXJ0X2xibGs7XG4gXG4tXHRjdXJfbGJsayA9IHN0YXJ0X2xibGs7XG4gXHRleHQ0X2RlYnVnKFwic25hcHNob3QgZGF0YSByYW5nZXMgJXUtJXUgZm9yIGlub2RlICVsbHVcXG5cIixcbiBcdFx0ICAgc3RhcnRfbGJsaywgZW5kX2xibGssXG4gXHRcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5vZGUtXHUwMDNlaV9pbm8pO1xuQEAgLTEwNTAsNyArMTE1Nyw3IEBAIHN0YXRpYyBpbnQgZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKG5yX3Jhbmdlc190b3RhbCArIG5yX3JhbmdlcyBcdTAwM2U9IEVYVDRfRkNfU05BUFNIT1RfTUFYX1JBTkdFUykge1xuK1x0XHRpZiAobnJfcmFuZ2VzX3RvdGFsICsgKm5yX3JhbmdlcyBcdTAwM2U9IEVYVDRfRkNfU05BUFNIT1RfTUFYX1JBTkdFUykge1xuIFx0XHRcdGF0b21pYzY0X2luYyhcdTAwMjZzdGF0cy1cdTAwM2VzbmFwX2ZhaWxfcmFuZ2VzX2NhcCk7XG4gXHRcdFx0ZXh0NF9mY19zZXRfc25hcF9lcnIoc25hcF9lcnIsXG4gXHRcdFx0XHRcdCAgICAgRVhUNF9GQ19TTkFQX0VSUl9SQU5HRVNfQ0FQKTtcbkBAIC0xMDYzLDcgKzExNzAsNyBAQCBzdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfZmNfc2V0X3NuYXBfZXJyKHNuYXBfZXJyLCBFWFQ0X0ZDX1NOQVBfRVJSX05PTUVNKTtcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0fVxuLVx0XHRucl9yYW5nZXMrKztcbitcdFx0KCpucl9yYW5nZXMpKys7XG4gXG4gXHRcdHJhbmdlLVx1MDAzZWxibGsgPSBjdXJfbGJsaztcbiBcdFx0cmFuZ2UtXHUwMDNlbGVuID0gbGVuO1xuQEAgLTExMDEsNiArMTIwOCw1MiBAQCBzdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRjdXJfbGJsayArPSByYW5nZS1cdTAwM2VsZW47XG4gXHR9XG4gXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBleHQ0X2ZjX3NuYXBzaG90X2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyYW5nZXMsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG5yX3Jhbmdlc190b3RhbCxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgKm5yX3Jhbmdlc3AsXG4rXHRcdFx0XHQgICAgICAgaW50ICpzbmFwX2Vycilcbit7XG4rXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4rXHRzdHJ1Y3QgZXh0NF9mY19sYmxrX3JhbmdlIHRyYWNrZWRbRVhUNF9GQ19NQVhfUkFOR0VTICsgMV07XG4rXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzID0gMCwgbnJfdHJhY2tlZCwgdDtcbitcdGludCByZXQ7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbitcdG5yX3RyYWNrZWQgPSBlaS1cdTAwM2VpX2ZjX25yX3JhbmdlcztcbitcdGlmIChucl90cmFja2VkID09IDApIHtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZWktXHUwMDNlaV9mY19sb2NrKTtcbitcdFx0aWYgKG5yX3Jhbmdlc3ApXG4rXHRcdFx0Km5yX3Jhbmdlc3AgPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdGlmIChlaS1cdTAwM2VpX2ZjX3JhbmdlcylcbitcdFx0bWVtY3B5KHRyYWNrZWQsIGVpLVx1MDAzZWlfZmNfcmFuZ2VzLFxuK1x0XHQgICAgICAgbnJfdHJhY2tlZCAqIHNpemVvZih0cmFja2VkWzBdKSk7XG4rXHRlbHNlXG4rXHRcdHRyYWNrZWRbMF0gPSBlaS1cdTAwM2VpX2ZjX3JhbmdlO1x0LyogaW5saW5lIHNpbmdsZS1yYW5nZSBtb2RlICovXG4rXHRlaS1cdTAwM2VpX2ZjX25yX3JhbmdlcyA9IDA7XG4rXHRzcGluX3VubG9jayhcdTAwMjZlaS1cdTAwM2VpX2ZjX2xvY2spO1xuK1xuK1x0LypcbitcdCAqIFNuYXBzaG90IG9ubHkgdGhlIGFjdHVhbGx5LW1vZGlmaWVkIHJhbmdlcywgbm90IHRoZSB3aG9sZSBbbWluLG1heF1cbitcdCAqIHNwYW46IHRoaXMgaXMgd2hhdCBrZWVwcyBzY2F0dGVyZWQgYWxsb2NhdGlvbnMgZnJvbSBibG93aW5nIHBhc3RcbitcdCAqIEVYVDRfRkNfU05BUFNIT1RfTUFYX1JBTkdFUyBhbmQgZmFsbGluZyBiYWNrIHRvIGEgZnVsbCBjb21taXQuXG4rXHQgKi9cbitcdGZvciAodCA9IDA7IHQgXHUwMDNjIG5yX3RyYWNrZWQ7IHQrKykge1xuK1x0XHRleHQ0X2xibGtfdCBzID0gdHJhY2tlZFt0XS5zdGFydDtcbitcdFx0ZXh0NF9sYmxrX3QgZSA9IHMgKyB0cmFja2VkW3RdLmxlbiAtIDE7XG4rXG4rXHRcdHJldCA9IGV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZShpbm9kZSwgcywgZSwgcmFuZ2VzLFxuK1x0XHRcdFx0XHRcdCAgbnJfcmFuZ2VzX3RvdGFsLCBcdTAwMjZucl9yYW5nZXMsXG4rXHRcdFx0XHRcdFx0ICBzbmFwX2Vycik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbiBcdGlmIChucl9yYW5nZXNwKVxuIFx0XHQqbnJfcmFuZ2VzcCA9IG5yX3JhbmdlcztcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggZjJjNTJjYzc0Njc2NTUuLmNmYTdlNmJlYzM4NWU2IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC0xNDU1LDYgKzE0NTUsNyBAQCBzdGF0aWMgdm9pZCBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRwcl93YXJuKFwiJXM6IGlub2RlICVsbHUgc3RpbGwgaW4gZmMgbGlzdFwiLFxuIFx0XHRcdF9fZnVuY19fLCBpbm9kZS1cdTAwM2VpX2lubyk7XG4gXHR9XG4rXHRrZnJlZShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmNfcmFuZ2VzKTtcbiBcdGttZW1fY2FjaGVfZnJlZShleHQ0X2lub2RlX2NhY2hlcCwgRVhUNF9JKGlub2RlKSk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MzY6MzIuNzA3NDA5MDA1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAxNTU4NzM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgZXh0NCBGYXN0IENvbW1pdCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdGlua2VyaW5nIHdpdGggdGhlIGZhc3QgY29tbWl0IGZlYXR1cmUgaW4gZXh0NC4gSXQgc291bmRzIGxpa2UgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBpbiBob3cgdGhleSdyZSBtYW5hZ2luZyBsb2dpY2FsIGJsb2NrIHJhbmdlcyBmb3IgZmFzdCBjb21taXRzLiBJbnN0ZWFkIG9mIHRoZSBvbGQsIHNpbmdsZSwgY29hbGVzY2VkIHJhbmdlIGFwcHJvYWNoIOKAkyBgaV9mY19sYmxrX3N0YXJ0YCwgYGlfZmNfbGJsa19sZW5gIOKAkyB0aGV5J3JlIG1vdmluZyB0byBhIG11bHRpcGxlIGRpc2pvaW50IHJhbmdlIHRyYWNraW5nIHN5c3RlbSwgdXNpbmcgZWl0aGVyIGlubGluZSBgaV9mY19yYW5nZWAgc3RydWN0dXJlcyBvciBhIGhlYXAtYWxsb2NhdGVkIGFycmF5IG9mIGBzdHJ1Y3QgZXh0NF9mY19sYmxrX3JhbmdlYCBjYWxsZWQgYGlfZmNfcmFuZ2VzYC4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBtb2RpZmljYXRpb24gdG8gdGhlIGV4dDQgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZnMvZXh0NC9mYXN0X2NvbW1pdC5jYC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgbmVlZHMgdGhvcm91Z2ggZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBwb2ludHMgbm93IGFyZSB0aGUgY3JpdGljYWwgc3ltYm9scyB0aGF0IGhhdmUgbGlrZWx5IGNoYW5nZWQ6IGBleHQ0X2ZjX3JhbmdlX2FkZGAsIGBfX3RyYWNrX3JhbmdlYCwgYGV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZWAsIGFuZCBgZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgaW1wYWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhpcyBwYXRjaCByZXF1aXJlcyBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGYXN0IGNvbW1pdCBpcyBhbiBleHQ0IGZlYXR1cmUsIHVzdWFsbHkgZW5hYmxlZCB2aWEgdGhlIG1vdW50IG9wdGlvbnMgbGlrZSBgZmFzdF9jb21taXRgIG9yIGp1c3QgYGZjYC4gSG93ZXZlciwgSSBzaG91bGQgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBpcyBhIHBhcnRpY3VsYXIgS2NvbmZpZyBvcHRpb24gaW52b2x2ZWQuIEknbGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3Iga2V5d29yZHMgcmVsYXRlZCB0byBgQ09ORklHX0VYVDRgIG9yIGBGQVNUX0NPTU1JVGAgdG8gZmlndXJlIHRoYXQgb3V0LiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGljaCBjb25maWd1cmF0aW9uIGZsYWdzIHdlcmUgbW9kaWZpZWQgaW4gdGhlIGNvbW1pdCwgb3Igd2VyZSBhZGRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgzNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjM2OjM4LjcyMzAwMDc5OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA4MzMxNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRkFTVF9DT01NSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MTA2Mj1zdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTEzMzYtXFxuZnMvZXh0NC9leHQ0Lmg6MTMzNzojZGVmaW5lIEVYVDRfTU9VTlQyX0pPVVJOQUxfRkFTVF9DT01NSVRcXHQweDAwMDAwMDEwIC8qIEpvdXJuYWwgZmFzdCBjb21taXQgKi9cXG5mcy9leHQ0L2V4dDQuaC0xMzM4LSNkZWZpbmUgRVhUNF9NT1VOVDJfREFYX05FVkVSXFx0XFx0MHgwMDAwMDAyMCAvKiBEbyBub3QgYWxsb3cgRGlyZWN0IEFjY2VzcyAqL1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjE1MT1zdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pbm9kZV9vcnBoYW5fdHJhY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMjE5MS0vKlxcbmZzL2V4dDQvZXh0NC5oOjIxOTI6ICogVGhlIHJlYXNvbiB3aHkgXFxcIkZBU1RfQ09NTUlUXFxcIiBpcyBhIGNvbXBhdCBmZWF0dXJlIGlzIHRoYXQsIEZTIGJlY29tZXNcXG5mcy9leHQ0L2V4dDQuaC0yMTkzLSAqIGluY29tcGF0aWJsZSBvbmx5IGlmIGZhc3QgY29tbWl0IGJsb2NrcyBhcmUgcHJlc2VudCBpbiB0aGUgRlMuIFNpbmNlIHdlXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0yMTk3LSAqL1xcbmZzL2V4dDQvZXh0NC5oOjIxOTg6I2RlZmluZSBFWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZBU1RfQ09NTUlUXFx0XFx0MHgwNDAwXFxuZnMvZXh0NC9leHQ0LmgtMjE5OS0jZGVmaW5lIEVYVDRfRkVBVFVSRV9DT01QQVRfU1RBQkxFX0lOT0RFU1xcdDB4MDgwMFxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjMwMz1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHNwYXJzZV9zdXBlcjIsXFx0U1BBUlNFX1NVUEVSMilcXG5mcy9leHQ0L2V4dDQuaDoyMzA0OkVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1MoZmFzdF9jb21taXQsXFx0XFx0RkFTVF9DT01NSVQpXFxuZnMvZXh0NC9leHQ0LmgtMjMwNS1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHN0YWJsZV9pbm9kZXMsXFx0U1RBQkxFX0lOT0RFUylcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNDE9c3RhdGljIGJvb2wgZXh0NF9mY19kaXNhYmxlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDIte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDM6XFx0cmV0dXJuICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSB8fFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDQtXFx0XFx0KEVYVDRfU0Ioc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz00MDY9c3RhdGljIGludCBleHQ0X2ZjX3RyYWNrX3RlbXBsYXRlKFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQzNi1cXHRcXHRcXHRcXHQoc2JpLVxcdTAwM2VzX2pvdXJuYWwtXFx1MDAzZWpfZmxhZ3MgXFx1MDAyNiBKQkQyX0ZVTExfQ09NTUlUX09OR09JTkcgfHxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDM3OlxcdFxcdFxcdFxcdCBzYmktXFx1MDAzZXNfam91cm5hbC1cXHUwMDNlal9mbGFncyBcXHUwMDI2IEpCRDJfRkFTVF9DT01NSVRfT05HT0lORykgP1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00MzgtXFx0XFx0XFx0XFx0XFx1MDAyNnNiaS1cXHUwMDNlc19mY19xW0ZDX1FfU1RBR0lOR10gOlxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTQ1MT1zdGF0aWMgaW50IF9fdHJhY2tfZGVudHJ5X3VwZGF0ZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQ4Ny1cXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWwtXFx1MDAzZWpfZmxhZ3MgXFx1MDAyNiBKQkQyX0ZVTExfQ09NTUlUX09OR09JTkcgfHxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDg4OlxcdFxcdHNiaS1cXHUwMDNlc19qb3VybmFsLVxcdTAwM2VqX2ZsYWdzIFxcdTAwMjYgSkJEMl9GQVNUX0NPTU1JVF9PTkdPSU5HKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00ODktXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bm9kZS1cXHUwMDNlZmNkX2xpc3QsXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTczNz1pbnQgZXh0NF9mY19jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCBjb21taXRfdGlkKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE3NDYtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE3NDc6XFx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNzQ4LVxcdFxcdHJldHVybiBqYmQyX2NvbXBsZXRlX3RyYW5zYWN0aW9uKGpvdXJuYWwsIGNvbW1pdF90aWQpO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI4MjQ9dm9pZCBleHQ0X2ZjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI4MzEtXFx0am91cm5hbC1cXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjgzMjpcXHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI4MzMtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTItXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjM6I2lmbmRlZiBfX0ZBU1RfQ09NTUlUX0hfX1xcbmZzL2V4dDQvZmFzdF9jb21taXQuaDo0OiNkZWZpbmUgX19GQVNUX0NPTU1JVF9IX19cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtNS1cXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaD0xNjM9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp0YWcyc3RyKF9fdTE2IHRhZylcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xODgtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjE4OTojZW5kaWYgLyogX19GQVNUX0NPTU1JVF9IX18gKi9cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0zNDUyPXN0YXRpYyBib29sIGV4dDRfaW5vZGVfZGF0YXN5bmNfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0zNDU5LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5mcy9leHQ0L2lub2RlLmM6MzQ2MDpcXHRcXHRpZiAodGVzdF9vcHQyKGlub2RlLVxcdTAwM2VpX3NiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcXG5mcy9leHQ0L2lub2RlLmMtMzQ2MS1cXHRcXHRcXHRyZXR1cm4gIWxpc3RfZW1wdHkoXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmNfbGlzdCk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9Mzc5Nz1zdGF0aWMgaW50IGV4dDRfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtNDAwNy1cXHRcXHRcXHRleHQ0X2ZjX3RyYWNrX3VubGluayhoYW5kbGUsIG5ldy5kZW50cnkpO1xcbmZzL2V4dDQvbmFtZWkuYzo0MDA4OlxcdFxcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9uYW1laS5jLTQwMDktXFx0XFx0ICAgICEoRVhUNF9TQihzYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xODgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW91bnRfb3B0cyB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTk0Ny0jaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L3N1cGVyLmM6MTk0ODpcXHR7T3B0X2ZjX2RlYnVnX2ZvcmNlLCBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlULFxcbmZzL2V4dDQvc3VwZXIuYy0xOTQ5LVxcdCBNT1BUX1NFVCB8IE1PUFRfMiB8IE1PUFRfRVhUNF9PTkxZfSxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00Mzg5PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDQwOC1cXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9mYXN0X2NvbW1pdChzYikpXFxuZnMvZXh0NC9zdXBlci5jOjQ0MDk6XFx0XFx0c2V0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xcbmZzL2V4dDQvc3VwZXIuYy00NDEwLVxcdC8qIGRvbid0IGZvcmdldCB0byBlbmFibGUgam91cm5hbF9jc3VtIHdoZW4gbWV0YWRhdGFfY3N1bSBpcyBlbmFibGVkLiAqL1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTQ5NTc9c3RhdGljIGludCBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ5ODAtXFxuZnMvZXh0NC9zdXBlci5jOjQ5ODE6XFx0aWYgKHRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L3N1cGVyLmMtNDk4Mi1cXHRcXHQhamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhFWFQ0X1NCKHNiKS1cXHUwMDNlc19qb3VybmFsLCAwLCAwLFxcbmZzL2V4dDQvc3VwZXIuYzo0OTgzOlxcdFxcdFxcdFxcdFxcdCAgSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0ZBU1RfQ09NTUlUKSkge1xcbmZzL2V4dDQvc3VwZXIuYy00OTg0LVxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01MDQxPXN0YXRpYyBpbnQgZXh0NF9jaGVja19qb3VybmFsX2RhdGFfbW9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUwNDgtXFx0XFx0Y2xlYXJfb3B0KHNiLCBESU9SRUFEX05PTE9DSyk7XFxuZnMvZXh0NC9zdXBlci5jOjUwNDk6XFx0XFx0Y2xlYXJfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XFxuZnMvZXh0NC9zdXBlci5jLTUwNTAtXFx0XFx0aWYgKHRlc3Rfb3B0MihzYiwgRVhQTElDSVRfREVMQUxMT0MpKSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTMzOT1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NTM3LVxcdFxcdGNsZWFyX29wdChzYiwgREFUQV9GTEFHUyk7XFxuZnMvZXh0NC9zdXBlci5jOjU1Mzg6XFx0XFx0Y2xlYXJfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XFxuZnMvZXh0NC9zdXBlci5jLTU1MzktXFx0XFx0c2JpLVxcdTAwM2VzX2pvdXJuYWwgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOTozNjozOC44NjM4NDk2NDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQyNzI0Mzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4dDQgYW5kIEZhc3QgQ29tbWl0OiBBIENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IHRoaXMgc29ydGVkLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIG9mZjsgYEZBU1RfQ09NTUlUYCBpc24ndCBhIHRvcC1sZXZlbCBLY29uZmlnIG9wdGlvbiBpdHNlbGYsIGJ1dCByYXRoZXIgYW4gZXh0NCAqZmVhdHVyZSouIFRoZSByZWxldmFudCBLY29uZmlnIGNvbnRyb2xsaW5nIGV4dDQncyBjb3JlIGZ1bmN0aW9uYWxpdHkgaXMgZGVmaW5pdGVseSBgRVhUNF9GU2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHN5c3RlbSByZWNvZ25pemVzIHRoZSBleHQ0IG1vZHVsZS5cblxuTm93LCBJJ20gcmV2aWV3aW5nIHRoZSBwYXRjaCwgYW5kIGl0IHRvdWNoZXMgYGZzL2V4dDQvZmFzdF9jb21taXQuY2AgYW5kIGBmcy9leHQ0L2V4dDQuaGAuIENvbnNpZGVyaW5nIHRoaXMsIGFuZCBzaW5jZSBgRkFTVF9DT01NSVRgIGlzIHBhcnQgb2YgZXh0NCwgc3BlY2lmeWluZyBvbmx5IGBFWFQ0X0ZTYCBzaG91bGQgYmUgc3VmZmljaWVudCwgYnV0IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGFjY3VyYXRlLlxuXG5Ib2xkIG9uLCBiZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gTGV0J3MgZGVsdmUgaW50byBgZnMvZXh0NC9LY29uZmlnYCBkaXJlY3RseS4gSXQncyB0aW1lIHRvIGNvbmZpcm0gaWYgdGhlcmUncyBhIG1vcmUgc3BlY2lmaWMsIGZpbmVyLWdyYWluZWQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGZhc3QgY29tbWl0IHdpdGhpbiBleHQ0IGl0c2VsZi4gSSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgdGhpcy4gQSB0aG9yb3VnaCBleGFtaW5hdGlvbiBvZiB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgY2xhcmlmeSBpZiB0aGVyZSdzIGFueSBoaWRkZW4gbnVhbmNlIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3NTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MzY6NDMuNDA2NTc2MjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MTQxOTM3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGQVNUX0NPTU1JVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjM2OjQzLjU4MzcyNDYyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzI5NTE3MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEVYVDQgRmFzdCBDb21taXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIG5vIGRlZGljYXRlZCBLY29uZmlnIHNwZWNpZmljYWxseSBmb3IgXCJmYXN0IGNvbW1pdCxcIiBpdCdzIGFsbCBiYWtlZCBpbnRvIGBFWFQ0X0ZTYC4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTGV0J3Mgc2VlLi4uIHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiB0aGUgZmFzdCBjb21taXQgZmVhdHVyZSB3aXRoaW4gRVhUNC4gVGhlIGtleSBmdW5jdGlvbnMgdG8gd2F0Y2ggYXJlOiBgZXh0NF9mY19yYW5nZV9hZGRgLCBgX190cmFja19yYW5nZWAsIGBleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2VgLCBhbmQgYGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YWAuXG5cblJpZ2h0LCBsZXQgbWUgdmVyaWZ5IHRob3NlLi4uIGBleHQ0X2ZjX3JhbmdlX2FkZGAgYW5kIGBleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2VgIGFyZSBuZXcgc3RhdGljIGZ1bmN0aW9ucywgd2hpbGUgYF9fdHJhY2tfcmFuZ2VgIGFuZCBgZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhYCBhcmUgZXhpc3Rpbmcgc3RhdGljIGZ1bmN0aW9ucy4gSG1tLCBhcmUgdGhlc2UgYWN0dWFsbHkgcmVhY2hhYmxlPyBZZXMsIHRoZXkncmUgcGFydCBvZiB0aGUgZmFzdCBjb21taXQgbG9naWMsIHRyaWdnZXJlZCBkdXJpbmcgYGZzeW5jYCBhbmQgcmVsYXRlZCBzeW5jIG9wZXJhdGlvbnMgd2hlbiBmYXN0IGNvbW1pdCBpcyBlbmFibGVkLlxuXG5JIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zLiBBaCwgSSBzZWU6IGBleHQ0X2ZjX3Jlc2V0X2lub2RlYCwgYGV4dDRfZmNfaW5pdF9pbm9kZWAsIGBfX3RyYWNrX2lub2RlYCwgYW5kIGBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZWAuXG5cbkJ1dCB0aGUgKm1vc3QqIGNyaXRpY2FsIGZ1bmN0aW9ucywgdGhlIG9uZXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGNvcmUgY2hhbmdlcywgYXJlIHN0aWxsIHRoZSBvcmlnaW5hbCBmb3VyOiBgZXh0NF9mY19yYW5nZV9hZGRgLCBgX190cmFja19yYW5nZWAsIGBleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2VgLCBhbmQgYGV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YWAuIE9rYXksIHRoZXNlIGFyZSBkZWZpbml0ZWx5IGdvaW5nIGludG8gbXkgRm9jdXNTeW1ib2xzLlxuXG5TbywgSSB0aGluayBqdXN0IGVuYWJsaW5nIGBFWFQ0X0ZTYCBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuVGhlIHBhdGNoJ3MgbG9naWMgaXMgcHJldHR5IGludGVyZXN0aW5nLiBJdCdzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IGV4dDQgZmFzdCBjb21taXRzIHRyYWNrIG1vZGlmaWVkIGxvZ2ljYWwgYmxvY2sgcmFuZ2VzLiBQcmV2aW91c2x5LCBpdCB3YXMgYSBzaW5nbGUgY29hbGVzY2VkIHJhbmdlLiBOb3csIGl0J3MgaGFuZGxpbmcgbXVsdGlwbGUgZGlzam9pbnQgcmFuZ2VzLCB1c2luZyBhbiBpbmxpbmUgc3RydWN0IG9yIGEgaGVhcC1hbGxvY2F0ZWQgYXJyYXkuIFRoYXQgaW1wbGllcyBuZXcgbWVtb3J5IGFsbG9jYXRpb24sIGFycmF5IG1hbmlwdWxhdGlvbiwgYW5kIGV4dGVudCB0cmFja2luZyBsb2dpYyB3aXRoaW4gdGhlIGZhc3QgY29tbWl0IHBhdGguXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhvc2UgRm9jdXNTeW1ib2xzLi4uIFllcywgZXZlbiB0aG91Z2ggdGhleSdyZSBzdGF0aWMsIHN5emthbGxlciAqY2FuKiBzdGlsbCB0YXJnZXQgdGhlbSBpZiB0aGV5IGVuZCB1cCBpbiB0aGUgY292ZXJhZ2UuIFRoZSBnb2FsIGlzIHRvIHByaW9yaXRpemUgaW5wdXRzIHRoYXQgaGl0IHRoZXNlIGZ1bmN0aW9ucywgZXZlbiBpZiBzeXNjYWxscyBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnQuIEFuZCB5ZXMsIHN0YXRpYyBmdW5jdGlvbnMgKmFyZSogdmFsaWQgaW4gRm9jdXNTeW1ib2xzLlxuXG5Pa2F5LCBpcyB0aGVyZSBhbm90aGVyIGNvbmZpZz8gTm8sIGBDT05GSUdfRVhUNF9GU2Agb3IgYEVYVDRfRlNgIGlzIHRoZSBtYWluIG9uZS5cblxuVGhlcmVmb3JlOlxuV29ydGhGdXp6aW5nOiBUcnVlXG5FbmFibGVDb25maWdzOiBbXCJFWFQ0X0ZTXCJdXG5Gb2N1c1N5bWJvbHM6IFtcImV4dDRfZmNfcmFuZ2VfYWRkXCIsIFwiX190cmFja19yYW5nZVwiLCBcImV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZVwiLCBcImV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YVwiXVxuUmVhc29uaW5nOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleHQ0IGZhc3QgY29tbWl0cycgcmFuZ2UgdHJhY2tpbmcgbG9naWMsIHRyYW5zaXRpb25pbmcgdG8gZGlzam9pbnQgcmFuZ2VzIGFuZCBuZWNlc3NpdGF0aW5nIG5ldyBhcnJheSBtYW5pcHVsYXRpb24sIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgZXh0ZW50IHRyYWNraW5nLiBUaGlzIGZhc3QgY29tbWl0IHBhdGggd2FycmFudHMgZnV6emluZyB0byBwcmV2ZW50IG1lbW9yeSBjb3JydXB0aW9uIGFuZCBsb2dpYyBlcnJvcnMuXCJcblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjAsIk91dHB1dFRva2VucyI6MTQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjM2OjU1LjMxMzI0NDExMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwOTUxNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9mY19yYW5nZV9hZGRcIixcbiAgICBcIl9fdHJhY2tfcmFuZ2VcIixcbiAgICBcImV4dDRfZmNfc25hcHNob3RfbGJsa19yYW5nZVwiLFxuICAgIFwiZXh0NF9mY19zbmFwc2hvdF9pbm9kZV9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBob3cgZXh0NCBmYXN0IGNvbW1pdHMgdHJhY2sgbW9kaWZpZWQgbG9naWNhbCBibG9jayByYW5nZXMsIG1vdmluZyBmcm9tIGEgc2luZ2xlIGNvYWxlc2NlZCByYW5nZSB0byB0cmFja2luZyBtdWx0aXBsZSBkaXNqb2ludCByYW5nZXMuIFRoaXMgaW52b2x2ZXMgbmV3IGFycmF5IG1hbmlwdWxhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBleHRlbnQgdHJhY2tpbmcgbG9naWMgaW4gdGhlIGZhc3QgY29tbWl0IHBhdGgsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZmNfcmFuZ2VfYWRkXCIsXG4gICAgXCJfX3RyYWNrX3JhbmdlXCIsXG4gICAgXCJleHQ0X2ZjX3NuYXBzaG90X2xibGtfcmFuZ2VcIixcbiAgICBcImV4dDRfZmNfc25hcHNob3RfaW5vZGVfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IGV4dDQgZmFzdCBjb21taXRzIHRyYWNrIG1vZGlmaWVkIGxvZ2ljYWwgYmxvY2sgcmFuZ2VzLCBtb3ZpbmcgZnJvbSBhIHNpbmdsZSBjb2FsZXNjZWQgcmFuZ2UgdG8gdHJhY2tpbmcgbXVsdGlwbGUgZGlzam9pbnQgcmFuZ2VzLiBUaGlzIGludm9sdmVzIG5ldyBhcnJheSBtYW5pcHVsYXRpb24sIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgZXh0ZW50IHRyYWNraW5nIGxvZ2ljIGluIHRoZSBmYXN0IGNvbW1pdCBwYXRoLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIHByZXZlbnQgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowts57f[1] Phase: Succeeded StartedAt: 2026-06-23 09:37:18 +0000 UTC FinishedAt: 2026-06-23 09:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-23 09:37:18 +0000 UTC FinishedAt: 2026-06-23 09:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2] Phase: Succeeded StartedAt: 2026-06-23 09:37:18 +0000 UTC FinishedAt: 2026-06-23 14:02:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-23 09:37:18 +0000 UTC FinishedAt: 2026-06-23 14:02:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-23 09:37:18 +0000 UTC FinishedAt: 2026-06-23 09:37:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-23 09:37:18 +0000 UTC FinishedAt: 2026-06-23 09:37:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowts57f/series-workflowts57f-convert-artifact-1548538226/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-23 09:37:38 +0000 UTC FinishedAt: 2026-06-23 10:11:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-23 09:37:38 +0000 UTC FinishedAt: 2026-06-23 10:11:43 +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:*a944431e-3d3e-44b1-8ab4-4ea2c254a971,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-workflowts57f/series-workflowts57f-convert-artifact-1548538226/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": "a86d09bf-002e-4872-b3aa-12a2e56b7840", "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-workflowts57f/series-workflowts57f-build-action-3946731760/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-23 09:37:38 +0000 UTC FinishedAt: 2026-06-23 10:10:11 +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:*a944431e-3d3e-44b1-8ab4-4ea2c254a971,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-workflowts57f/series-workflowts57f-convert-artifact-1548538226/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": "a86d09bf-002e-4872-b3aa-12a2e56b7840", "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-workflowts57f/series-workflowts57f-build-action-3946731760/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-23 10:11:43 +0000 UTC FinishedAt: 2026-06-23 10:11:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-23 10:11:43 +0000 UTC FinishedAt: 2026-06-23 10:11:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-23 10:11:43 +0000 UTC FinishedAt: 2026-06-23 10:12:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-23 10:11:43 +0000 UTC FinishedAt: 2026-06-23 10:12:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowts57f/series-workflowts57f-convert-artifact-307355277/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-23 10:12:07 +0000 UTC FinishedAt: 2026-06-23 10:14:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-23 10:12:07 +0000 UTC FinishedAt: 2026-06-23 10:14:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a86d09bf-002e-4872-b3aa-12a2e56b7840,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-workflowts57f/series-workflowts57f-build-action-3946731760/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-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-23 10:14:10 +0000 UTC FinishedAt: 2026-06-23 10:14:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-23 10:14:10 +0000 UTC FinishedAt: 2026-06-23 10:14:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-23 10:14:10 +0000 UTC FinishedAt: 2026-06-23 10:54:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-23 10:14:10 +0000 UTC FinishedAt: 2026-06-23 10:54:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a944431e-3d3e-44b1-8ab4-4ea2c254a971,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-workflowts57f/series-workflowts57f-convert-artifact-307355277/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": "42a6f0ab-04d9-46f1-9242-5505c4541292", "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-workflowts57f/series-workflowts57f-build-action-2760010857/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-23 10:14:10 +0000 UTC FinishedAt: 2026-06-23 10:54:32 +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:*a944431e-3d3e-44b1-8ab4-4ea2c254a971,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-workflowts57f/series-workflowts57f-convert-artifact-307355277/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": "42a6f0ab-04d9-46f1-9242-5505c4541292", "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-workflowts57f/series-workflowts57f-build-action-2760010857/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-23 10:54:54 +0000 UTC FinishedAt: 2026-06-23 10:54:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-23 10:54:54 +0000 UTC FinishedAt: 2026-06-23 10:54:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-23 10:54:54 +0000 UTC FinishedAt: 2026-06-23 10:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-23 10:54:54 +0000 UTC FinishedAt: 2026-06-23 10:56:50 +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:*42a6f0ab-04d9-46f1-9242-5505c4541292,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-workflowts57f/series-workflowts57f-build-action-2760010857/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-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-23 10:57:00 +0000 UTC FinishedAt: 2026-06-23 14:02:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-23 10:57:00 +0000 UTC FinishedAt: 2026-06-23 14:02:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*a86d09bf-002e-4872-b3aa-12a2e56b7840,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42a6f0ab-04d9-46f1-9242-5505c4541292,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-workflowts57f/series-workflowts57f-build-action-3946731760/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-workflowts57f/series-workflowts57f-build-action-2760010857/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-23 10:57:00 +0000 UTC FinishedAt: 2026-06-23 10:59:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-23 10:57:00 +0000 UTC FinishedAt: 2026-06-23 10:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-23 10:57:00 +0000 UTC FinishedAt: 2026-06-23 10:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-23 10:57:01 +0000 UTC FinishedAt: 2026-06-23 10:59:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowts57f/series-workflowts57f-convert-artifact-1004950386/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-23 10:57:01 +0000 UTC FinishedAt: 2026-06-23 10:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-23 10:59:06 +0000 UTC FinishedAt: 2026-06-23 14:02:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts57f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fc_range_add","__track_range","ext4_fc_snapshot_lblk_range","ext4_fc_snapshot_inode_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c143957520c6c9b5cd72e0de8b52b814f0c576fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"a2eb2d55-631d-42ed-a8e1-33a4951186d5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-23 10:59:06 +0000 UTC FinishedAt: 2026-06-23 14:02:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a86d09bf-002e-4872-b3aa-12a2e56b7840,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42a6f0ab-04d9-46f1-9242-5505c4541292,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-workflowts57f/series-workflowts57f-build-action-3946731760/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-workflowts57f/series-workflowts57f-build-action-2760010857/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-workflowts57f/series-workflowts57f-convert-artifact-1004950386/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,}