Name: series-workflowdtn97 Phase: Succeeded StartedAt: 2026-07-14 23:12:53 +0000 UTC FinishedAt: 2026-07-15 04:27:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[0] Phase: Succeeded StartedAt: 2026-07-14 23:12:53 +0000 UTC FinishedAt: 2026-07-14 23:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[0].run-triage Phase: Succeeded StartedAt: 2026-07-14 23:12:53 +0000 UTC FinishedAt: 2026-07-14 23:57:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS" ], "series_id": "6c4ca4c4-a0b3-475c-b34e-9d649039aaac" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xsk_tx_commit_batch", "__xsk_tx_peek_release_desc_batch", "xsk_tx_peek_release_shared_desc_batch", "xsk_cq_submit_addr_single_locked", "xsk_build_skb", "xsk_build_skb_zerocopy", "__xsk_generic_xmit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDIzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX3R4X2NvbW1pdF9iYXRjaCYjMzQ7LAogICAgJiMzNDtfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCYjMzQ7LAogICAgJiMzNDt4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoJiMzNDssCiAgICAmIzM0O3hza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkJiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2ImIzM0OywKICAgICYjMzQ7eHNrX2J1aWxkX3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDtfX3hza19nZW5lcmljX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCB0cmFuc21pc3Npb24gbG9naWMgdG8gY29ycmVjdGx5IGhhbmRsZSBtdWx0aS1idWZmZXIgcGFja2V0cyB3aXRoIGludmFsaWQgZGVzY3JpcHRvcnMgb3IgZXhjZWVkaW5nIHRoZSBtYXhpbXVtIGFsbG93ZWQgZnJhZ21lbnRzLiBJdCBpbnRyb2R1Y2VzIG5ldyBiYXRjaGluZyBhbmQgcmVjbGFpbWluZyBsb2dpYyBmb3IgZGVzY3JpcHRvcnMsIGFuZCB1cGRhdGVzIHRoZSBnZW5lcmljIFhEUCB0cmFuc21pdCBwYXRoIHRvIGRyYWluIGludmFsaWQgcGFja2V0cy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfWERQIHNvY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMjM6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwOWRiM2U0MDgwMDIxY2E0OGRlNTZiMTdkMzEwZDcyMjMwM2FjYzhjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMjM6NTY6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGRwX3NvY2suaCBiL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcbmluZGV4IGViYWM2MGEzZDhhMTdiLi44YjUxODc2ZWZiZWQxYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcbkBAIC04MCw2ICYjNDM7ODAsNyBAQCBzdHJ1Y3QgeGRwX3NvY2sge1xuIFx0ICogY2FsbCBvZiBfX3hza19nZW5lcmljX3htaXQoKS5cbiBcdCAqL1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHRib29sIGRyYWluX2NvbnQ7XG4gXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG1hcF9saXN0O1xuIFx0LyogUHJvdGVjdHMgbWFwX2xpc3QgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmggYi9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcbmluZGV4IGNjYjNiMzUwMDAxZjI0Li4yYmIxZDEyMmIxYmM2YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXG5AQCAtNzgsNiAmIzQzOzc4LDkgQEAgc3RydWN0IHhza19idWZmX3Bvb2wge1xuIFx0dTMyIGNodW5rX3NpemU7XG4gXHR1MzIgY2h1bmtfc2hpZnQ7XG4gXHR1MzIgZnJhbWVfbGVuO1xuJiM0MztcdHUzMiB0eF9kZXNjc19uZW50cmllcztcbiYjNDM7XHR1MzIgcmVjbGFpbV9kZXNjcztcbiYjNDM7XHR1MzIgdHhfemNfcGVuZGluZ19kZXNjcztcbiBcdHUzMiB4ZHBfemNfbWF4X3NlZ3M7XG4gXHR1OCB0eF9tZXRhZGF0YV9sZW47IC8qIGluaGVyaXRlZCBmcm9tIHVtZW0gKi9cbiBcdHU4IGNhY2hlZF9uZWVkX3dha2V1cDtcbkBAIC0xMDIsMTIgJiM0MzsxMDUsMTQgQEAgc3RydWN0IHhza19idWZmX3Bvb2wge1xuIFxuIC8qIEFGX1hEUCBjb3JlLiAqL1xuIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tXHRcdFx0XHRcdFx0c3RydWN0IHhkcF91bWVtICp1bWVtKTtcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IHhkcF91bWVtICp1bWVtLFxuJiM0MztcdFx0XHRcdFx0XHR1MzIgbWF4X3NlZ3MpO1xuIGludCB4cF9hc3NpZ25fZGV2KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgIHUxNiBxdWV1ZV9pZCwgdTE2IGZsYWdzKTtcbiBpbnQgeHBfYXNzaWduX2Rldl9zaGFyZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqdW1lbV94cyxcbiBcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHF1ZXVlX2lkKTtcbi1pbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMpO1xuJiM0MztpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4mIzQzO1x0XHQgICAgICB1MzIgbWF4X3NlZ3MpO1xuIHZvaWQgeHBfZGVzdHJveShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XG4gdm9pZCB4cF9nZXRfcG9vbChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XG4gYm9vbCB4cF9wdXRfcG9vbChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2suYyBiL25ldC94ZHAveHNrLmNcbmluZGV4IGI5NzBmMzBlYTliOWQ4Li4yOTA5YTBlYzY4MzczMSAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrLmNcbkBAIC00OTksNiAmIzQzOzQ5OSwyMyBAQCB2b2lkIF9feHNrX21hcF9mbHVzaChzdHJ1Y3QgbGlzdF9oZWFkICpmbHVzaF9saXN0KVxuIFxuIHZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXG4ge1xuJiM0MztcdHUzMiByZWNsYWltX2Rlc2NzID0gUkVBRF9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcyk7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShyZWNsYWltX2Rlc2NzKSkge1xuJiM0MztcdFx0dTMyIHBlbmRpbmdfZGVzY3MgPSBSRUFEX09OQ0UocG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobmJfZW50cmllcyBcdTAwM2MgcGVuZGluZ19kZXNjcykge1xuJiM0MztcdFx0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyxcbiYjNDM7XHRcdFx0XHQgICBwZW5kaW5nX2Rlc2NzIC0gbmJfZW50cmllcyk7XG4mIzQzO1x0XHRcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVx1MDAzZWNxLCBuYl9lbnRyaWVzKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLCAwKTtcbiYjNDM7XHRcdG5iX2VudHJpZXMgJiM0Mzs9IHJlY2xhaW1fZGVzY3M7XG4mIzQzO1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcywgMCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVx1MDAzZWNxLCBuYl9lbnRyaWVzKTtcbiB9XG4gRVhQT1JUX1NZTUJPTCh4c2tfdHhfY29tcGxldGVkKTtcbkBAIC01NzQsMjQgJiM0Mzs1OTEsMTYyIEBAIHN0YXRpYyB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9lbnRyXG4gXHRyZXR1cm4gbmJfcGt0cztcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHhza190eF9jb21taXRfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbmJfZGVzY3MgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoYmF0Y2gpO1xuJiM0MztcdHUzMiBjcV9jYWNoZWRfcHJvZDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuYl9kZXNjcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Y3FfY2FjaGVkX3Byb2QgPSBwb29sLVx1MDAzZWNxLVx1MDAzZWNhY2hlZF9wcm9kO1xuJiM0MztcdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXHUwMDNlY3EsIHBvb2wtXHUwMDNldHhfZGVzY3MsIG5iX2Rlc2NzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGJhdGNoLVx1MDAzZXJlY2xhaW1fZGVzY3MpKSB7XG4mIzQzO1x0XHR1MzIgY3FfcGVuZGluZ19kZXNjcztcbiYjNDM7XG4mIzQzO1x0XHQvKiBDUSBpcyBwb3NpdGlvbmFsLiBEZXNjcmlwdG9ycyBhbHJlYWR5IHdyaXR0ZW4gYnV0IG5vdFxuJiM0MztcdFx0ICogc3VibWl0dGVkIG11c3QgY29tcGxldGUgYmVmb3JlIGFueSByZWNsYWltLW9ubHkgZGVzY3JpcHRvcnNcbiYjNDM7XHRcdCAqIGFwcGVuZGVkIGJlbG93LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjcV9wZW5kaW5nX2Rlc2NzID0gY3FfY2FjaGVkX3Byb2QgLSB4c2txX2dldF9wcm9kKHBvb2wtXHUwMDNlY3EpO1xuJiM0MztcbiYjNDM7XHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLFxuJiM0MztcdFx0XHQgICBiYXRjaC1cdTAwM2V0eF9kZXNjcyAmIzQzOyBjcV9wZW5kaW5nX2Rlc2NzKTtcbiYjNDM7XHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2VyZWNsYWltX2Rlc2NzLCBiYXRjaC1cdTAwM2VyZWNsYWltX2Rlc2NzKTtcbiYjNDM7XHRcdGlmICh1bmxpa2VseSghcG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzKSlcbiYjNDM7XHRcdFx0eHNrX3R4X2NvbXBsZXRlZChwb29sLCAwKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoXG4mIzQzO19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4X2Rlc2NzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xuJiM0MztcdHUzMiBlbnRyaWVzO1xuJiM0MztcbiYjNDM7XHRlbnRyaWVzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIG1heF9kZXNjcyk7XG4mIzQzO1x0aWYgKCFlbnRyaWVzKVxuJiM0MztcdFx0cmV0dXJuIGJhdGNoO1xuJiM0MztcbiYjNDM7XHRiYXRjaCA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMsIHBvb2wsIGRlc2NzLCBtYXhfZGVzY3MpO1xuJiM0MztcdGlmICgheHNrX3R4X2JhdGNoX2NxX2Rlc2NzKFx1MDAyNmJhdGNoKSkge1xuJiM0MztcdFx0eHMtXHUwMDNldHgtXHUwMDNlcXVldWVfZW1wdHlfZGVzY3MmIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKGJhdGNoLmNvbnN1bWVkX2Rlc2NzKSB7XG4mIzQzO1x0XHRcdF9feHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuJiM0MztcdFx0XHR4cy1cdTAwM2Vzay5za193cml0ZV9zcGFjZShcdTAwMjZ4cy1cdTAwM2Vzayk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gYmF0Y2g7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbiYjNDM7XHR4cy1cdTAwM2Vzay5za193cml0ZV9zcGFjZShcdTAwMjZ4cy1cdTAwM2Vzayk7XG4mIzQzO1x0cmV0dXJuIGJhdGNoO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxuJiM0Mzt4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2Rlc2NzKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGNxX2Rlc2NzX2JlZm9yZSwgY3FfZGVzY3NfYWZ0ZXI7XG4mIzQzO1x0c3RydWN0IHhza190eF9iYXRjaCBzdW1fYmF0Y2ggPSB7fTtcbiYjNDM7XHRib29sIGJ1ZGdldF9leGhhdXN0ZWQ7XG4mIzQzO1x0dTMyIHBlcl9zb2NrZXRfYnVkZ2V0O1xuJiM0MztcdHN0cnVjdCB4ZHBfc29jayAqeHM7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBmYWlybmVzcyBxdW90YSBtdXN0IGFsbG93IG9uZSBtYXhpbXVtLXNpemVkIHZhbGlkIHBhY2tldC4gKi9cbiYjNDM7XHRwZXJfc29ja2V0X2J1ZGdldCA9IG1heF90KHUzMiwgTUFYX1BFUl9TT0NLRVRfQlVER0VULFxuJiM0MztcdFx0XHRcdCAgcG9vbC1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xuJiM0MztcbiYjNDM7YWdhaW46XG4mIzQzO1x0YnVkZ2V0X2V4aGF1c3RlZCA9IGZhbHNlO1xuJiM0MztcdGNxX2Rlc2NzX2JlZm9yZSA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCBcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0LCB0eF9saXN0KSB7XG4mIzQzO1x0XHR1MzIgYnVkZ2V0LCBidWRnZXRfbGVmdCwgb2Zmc2V0LCByZW1haW5pbmc7XG4mIzQzO1x0XHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGN1cnJfYmF0Y2g7XG4mIzQzO1xuJiM0MztcdFx0LyogT25jZSByZWNsYWltLW9ubHkgZGVzY3JpcHRvcnMgaGF2ZSBiZWVuIGFwcGVuZGVkIHRvIHRoZSBDUVxuJiM0MztcdFx0ICogYWRkcmVzcyBhcmVhLCBkbyBub3QgYXBwZW5kIGRyaXZlci12aXNpYmxlIFR4IGRlc2NyaXB0b3JzXG4mIzQzO1x0XHQgKiBmcm9tIGFub3RoZXIgc29ja2V0IGFmdGVyIHRoZW0uIHhza190eF9jb21wbGV0ZWQoKSByZWxpZXMgb25cbiYjNDM7XHRcdCAqIGFsbCBkcml2ZXItdmlzaWJsZSBkZXNjcmlwdG9ycyBwcmVjZWRpbmcgYWxsIHJlY2xhaW0tb25seVxuJiM0MztcdFx0ICogZGVzY3JpcHRvcnMgaW4gQ1Egb3JkZXIuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChzdW1fYmF0Y2gucmVjbGFpbV9kZXNjcylcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0LyogYmUgZ2VudGxlIHdoZW4gcGxheWluZyB3aXRoIHBvb2wtXHUwMDNldHhfZGVzY3MgKi9cbiYjNDM7XHRcdG9mZnNldCA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuJiM0MztcdFx0aWYgKG9mZnNldCBcdTAwM2U9IG1heF9kZXNjcylcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudCBcdTAwM2U9IHBlcl9zb2NrZXRfYnVkZ2V0KSB7XG4mIzQzO1x0XHRcdGlmICh4c2txX2NvbnNfbmJfZW50cmllcyh4cy1cdTAwM2V0eCwgMSkpXG4mIzQzO1x0XHRcdFx0YnVkZ2V0X2V4aGF1c3RlZCA9IHRydWU7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGJ1ZGdldF9sZWZ0ID0gcGVyX3NvY2tldF9idWRnZXQgLSB4cy1cdTAwM2V0eF9idWRnZXRfc3BlbnQ7XG4mIzQzO1x0XHRyZW1haW5pbmcgPSBtYXhfZGVzY3MgLSBvZmZzZXQ7XG4mIzQzO1x0XHRidWRnZXQgPSBtaW4ocmVtYWluaW5nLCBidWRnZXRfbGVmdCk7XG4mIzQzO1xuJiM0MztcdFx0Y3Vycl9iYXRjaCA9IF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHBvb2wsIHhzLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIHBvb2wtXHUwMDNldHhfZGVzY3MgJiM0Mzsgb2Zmc2V0LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIGJ1ZGdldCk7XG4mIzQzO1x0XHRpZiAoIXhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZjdXJyX2JhdGNoKSkge1xuJiM0MztcdFx0XHRpZiAoY3Vycl9iYXRjaC5idWRnZXRfbGltaXRlZCBcdTAwMjZcdTAwMjYgYnVkZ2V0X2xlZnQgXHUwMDNjIHJlbWFpbmluZylcbiYjNDM7XHRcdFx0XHRidWRnZXRfZXhoYXVzdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdFx0eHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50ICYjNDM7PSBjdXJyX2JhdGNoLmNvbnN1bWVkX2Rlc2NzO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR4cy1cdTAwM2V0eF9idWRnZXRfc3BlbnQgJiM0Mzs9IGN1cnJfYmF0Y2guY29uc3VtZWRfZGVzY3M7XG4mIzQzO1x0XHRzdW1fYmF0Y2gudHhfZGVzY3MgJiM0Mzs9IGN1cnJfYmF0Y2gudHhfZGVzY3M7XG4mIzQzO1x0XHRzdW1fYmF0Y2gucmVjbGFpbV9kZXNjcyAmIzQzOz0gY3Vycl9iYXRjaC5yZWNsYWltX2Rlc2NzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3FfZGVzY3NfYWZ0ZXIgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2c3VtX2JhdGNoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzIHx8IGNxX2Rlc2NzX2FmdGVyIFx1MDAzZT0gbWF4X2Rlc2NzKVxuJiM0MztcdFx0cmV0dXJuIHN1bV9iYXRjaDtcbiYjNDM7XG4mIzQzO1x0LyogQ29udGludWUgZmlsbGluZyB0aGUgYmF0Y2ggd2hpbGUgdGhpcyBwYXNzIG1hZGUgcHJvZ3Jlc3MgKi9cbiYjNDM7XHRpZiAoY3FfZGVzY3NfYmVmb3JlICE9IGNxX2Rlc2NzX2FmdGVyKVxuJiM0MztcdFx0Z290byBhZ2FpbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFidWRnZXRfZXhoYXVzdGVkKVxuJiM0MztcdFx0cmV0dXJuIHN1bV9iYXRjaDtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsIFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpXG4mIzQzO1x0XHR4cy1cdTAwM2V0eF9idWRnZXRfc3BlbnQgPSAwO1xuJiM0MztcdGdvdG8gYWdhaW47XG4mIzQzO31cbiYjNDM7XG4gdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX3BrdHMpXG4ge1xuJiM0MztcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcbiBcdHN0cnVjdCB4ZHBfc29jayAqeHM7XG4mIzQzO1x0Ym9vbCB1bWVtX3NoYXJlZDtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGlmICghbGlzdF9pc19zaW5ndWxhcihcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0KSkge1xuLVx0XHQvKiBGYWxsYmFjayB0byB0aGUgbm9uLWJhdGNoZWQgdmVyc2lvbiAqL1xuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0cmV0dXJuIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2socG9vbCwgbmJfcGt0cyk7XG4tXHR9XG4mIzQzO1x0aWYgKHVubGlrZWx5KFJFQURfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MpKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFxuLVx0eHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jaywgdHhfbGlzdCk7XG4tXHRpZiAoIXhzKSB7XG4tXHRcdG5iX3BrdHMgPSAwO1xuJiM0MztcdHhzID0gbGlzdF9maXJzdF9vcl9udWxsX3JjdShcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0LCBzdHJ1Y3QgeGRwX3NvY2ssXG4mIzQzO1x0XHRcdFx0ICAgIHR4X2xpc3QpO1xuJiM0MztcdGlmICgheHMpXG4gXHRcdGdvdG8gb3V0O1xuLVx0fVxuIFxuLVx0bmJfcGt0cyA9IHhza3FfY29uc19uYl9lbnRyaWVzKHhzLVx1MDAzZXR4LCBuYl9wa3RzKTtcbiYjNDM7XHRuYl9wa3RzID0gbWluKG5iX3BrdHMsIHBvb2wtXHUwMDNldHhfZGVzY3NfbmVudHJpZXMpO1xuJiM0MztcdGlmICghbmJfcGt0cylcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHR1bWVtX3NoYXJlZCA9ICFsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QpO1xuJiM0MztcbiYjNDM7XHRpZiAodW1lbV9zaGFyZWQgXHUwMDI2XHUwMDI2ICEocG9vbC1cdTAwM2V1bWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBYRFBfVU1FTV9TR19GTEFHKSkge1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBUaGlzIGlzIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtIGZvciB0aGUgVHggcGF0aC4gVHJ5IHRvXG4gXHQgKiByZXNlcnZlIHNwYWNlIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlIGZvciBhbGwgcGFja2V0cywgYnV0XG5AQCAtNjAzLDE5ICYjNDM7NzU4LDE2IEBAIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxuIFx0aWYgKCFuYl9wa3RzKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdG5iX3BrdHMgPSB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHhzLVx1MDAzZXR4LCBwb29sLCBuYl9wa3RzKTtcbi1cdGlmICghbmJfcGt0cykge1xuLVx0XHR4cy1cdTAwM2V0eC1cdTAwM2VxdWV1ZV9lbXB0eV9kZXNjcyYjNDM7JiM0Mzs7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0X194c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4tXHR4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLVx1MDAzZWNxLCBwb29sLVx1MDAzZXR4X2Rlc2NzLCBuYl9wa3RzKTtcbi1cdHhzLVx1MDAzZXNrLnNrX3dyaXRlX3NwYWNlKFx1MDAyNnhzLVx1MDAzZXNrKTtcbiYjNDM7XHRiYXRjaCA9IHVtZW1fc2hhcmVkID9cbiYjNDM7XHRcdHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gocG9vbCwgbmJfcGt0cykgOlxuJiM0MztcdFx0X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gocG9vbCwgeHMsXG4mIzQzO1x0XHRcdFx0XHRcdCBwb29sLVx1MDAzZXR4X2Rlc2NzLFxuJiM0MztcdFx0XHRcdFx0XHQgbmJfcGt0cyk7XG4mIzQzO1x0eHNrX3R4X2NvbW1pdF9iYXRjaChwb29sLCBcdTAwMjZiYXRjaCk7XG4gXG4gb3V0OlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRyZXR1cm4gbmJfcGt0cztcbiYjNDM7XHRyZXR1cm4gYmF0Y2gudHhfZGVzY3M7XG4gfVxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKTtcbiBcbkBAIC03MzcsNiAmIzQzOzg4OSwxOSBAQCBzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0dTMyIGlkeDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cG9vbC1cdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZHggPSB4c2txX2dldF9wcm9kKHBvb2wtXHUwMDNlY3EpO1xuJiM0MztcdHhza3FfcHJvZF93cml0ZV9hZGRyKHBvb2wtXHUwMDNlY3EsIGlkeCwgZGVzYy1cdTAwM2VhZGRyKTtcbiYjNDM7XHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgMSk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHhza19jcV9jYW5jZWxfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbilcbiB7XG4gXHRzcGluX2xvY2soXHUwMDI2cG9vbC1cdTAwM2VjcS1cdTAwM2VjcV9jYWNoZWRfcHJvZF9sb2NrKTtcbkBAIC03OTQsOCAmIzQzOzk1OSwxMSBAQCBzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBzdGF0aWMgdm9pZCB4c2tfZHJvcF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHR4ZHBfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzICYjNDM7PSB4c2tfZ2V0X251bV9kZXNjKHNrYik7XG4tXHR4c2tfY29uc3VtZV9za2Ioc2tiKTtcbiYjNDM7XHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi1cdTAwM2Vzayk7XG4mIzQzO1xuJiM0MztcdHhzLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MgJiM0Mzs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcbiYjNDM7XHRjb25zdW1lX3NrYihza2IpO1xuJiM0MztcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXG5AQCAtODc3LDcgJiM0MzsxMDQ1LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG4gXHRcdC8qIGluIGNhc2Ugb2YgLUVPVkVSRkxPVyB0aGF0IGNvdWxkIGhhcHBlbiBiZWxvdyxcbi1cdFx0ICogeHNrX2NvbnN1bWVfc2tiKCkgd2lsbCByZWxlYXNlIHRoaXMgbm9kZSBhcyB3aG9sZSBza2JcbiYjNDM7XHRcdCAqIHhza19kcm9wX3NrYigpIHdpbGwgcmVsZWFzZSB0aGlzIG5vZGUgYXMgd2hvbGUgc2tiXG4gXHRcdCAqIHdvdWxkIGJlIGRyb3BwZWQsIHdoaWNoIGltcGxpZXMgZnJlZWluZyBhbGwgbGlzdCBlbGVtZW50c1xuIFx0XHQgKi9cbiBcdFx0eHNrX2FkZHItXHUwMDNlYWRkcnNbeHNrX2FkZHItXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXHUwMDNlYWRkcjtcbkBAIC05NjksNiAmIzQzOzExMzcsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4gXHRcdFx0fVxuIFxuJiM0MztcdFx0XHR4c2tfYWRkci1cdTAwM2VhZGRyc1t4c2tfYWRkci1cdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cdTAwM2VhZGRyO1xuJiM0MztcbiBcdFx0XHRpZiAodW5saWtlbHkobnJfZnJhZ3MgPT0gKE1BWF9TS0JfRlJBR1MgLSAxKSBcdTAwMjZcdTAwMjYgeHBfbWJfZGVzYyhkZXNjKSkpIHtcbiBcdFx0XHRcdGVyciA9IC1FT1ZFUkZMT1c7XG4gXHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuQEAgLTk4Niw4ICYjNDM7MTE1Niw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuIFxuIFx0XHRcdHNrYl9hZGRfcnhfZnJhZyhza2IsIG5yX2ZyYWdzLCBwYWdlLCAwLCBsZW4sIFBBR0VfU0laRSk7XG4gXHRcdFx0cmVmY291bnRfYWRkKFBBR0VfU0laRSwgXHUwMDI2eHMtXHUwMDNlc2suc2tfd21lbV9hbGxvYyk7XG4tXG4tXHRcdFx0eHNrX2FkZHItXHUwMDNlYWRkcnNbeHNrX2FkZHItXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXHUwMDNlYWRkcjtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTEwNjAsMTEgJiM0MzsxMjI4LDIyIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuJiM0MztcdFx0aWYgKHVubGlrZWx5KHhzLVx1MDAzZWRyYWluX2NvbnQpKSB7XG4mIzQzO1x0XHRcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIFx1MDAyNmRlc2MpO1xuJiM0MztcbiYjNDM7XHRcdFx0eHMtXHUwMDNldHgtXHUwMDNlaW52YWxpZF9kZXNjcyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdHhza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbiYjNDM7XHRcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXHUwMDI2ZGVzYyk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXHUwMDI2ZGVzYyk7XG4gXHRcdGlmIChJU19FUlIoc2tiKSkge1xuIFx0XHRcdGVyciA9IFBUUl9FUlIoc2tiKTtcbiBcdFx0XHRpZiAoZXJyICE9IC1FT1ZFUkZMT1cpXG4gXHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0aWYgKHhwX21iX2Rlc2MoXHUwMDI2ZGVzYykpXG4mIzQzO1x0XHRcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHRydWU7XG4gXHRcdFx0ZXJyID0gMDtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuQEAgLTEwOTgsOSAmIzQzOzEyNzcsMjQgQEAgc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuIFx0fVxuIFxuIFx0aWYgKHhza3FfaGFzX2Rlc2NzKHhzLVx1MDAzZXR4KSkge1xuJiM0MztcdFx0Ym9vbCByZWNsYWltX2Rlc2MgPSB4cy1cdTAwM2Vza2IgfHwgeHMtXHUwMDNlZHJhaW5fY29udDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmVjbGFpbV9kZXNjKSB7XG4mIzQzO1x0XHRcdGVyciA9IHhza19jcV9yZXNlcnZlX2xvY2tlZCh4cy1cdTAwM2Vwb29sKTtcbiYjNDM7XHRcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRcdGVyciA9IC1FQUdBSU47XG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGlmICh4cy1cdTAwM2Vza2IpXG4gXHRcdFx0eHNrX2Ryb3Bfc2tiKHhzLVx1MDAzZXNrYik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJlY2xhaW1fZGVzYylcbiYjNDM7XHRcdFx0eHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoeHMtXHUwMDNlcG9vbCwgXHUwMDI2ZGVzYyk7XG4mIzQzO1xuIFx0XHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4mIzQzO1x0XHR4cy1cdTAwM2VkcmFpbl9jb250ID0geHBfbWJfZGVzYyhcdTAwMjZkZXNjKTtcbiBcdH1cbiBcbiBvdXQ6XG5AQCAtMTQ4Myw3ICYjNDM7MTY3Nyw4IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXG4gXHRcdFx0ICogYW5kL29yIGRldmljZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHR4cy1cdTAwM2Vwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cyxcbi1cdFx0XHRcdFx0XHRcdCAgICAgdW1lbV94cy1cdTAwM2V1bWVtKTtcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgIHVtZW1feHMtXHUwMDNldW1lbSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgIGRldi1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xuIFx0XHRcdGlmICgheHMtXHUwMDNlcG9vbCkge1xuIFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG5AQCAtMTUxNSw3ICYjNDM7MTcxMCw4IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXG4gXHRcdFx0ICogdXRpbGl6ZXNcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoeHMtXHUwMDNldHggXHUwMDI2XHUwMDI2ICF4cy1cdTAwM2Vwb29sLVx1MDAzZXR4X2Rlc2NzKSB7XG4tXHRcdFx0XHRlcnIgPSB4cF9hbGxvY190eF9kZXNjcyh4cy1cdTAwM2Vwb29sLCB4cyk7XG4mIzQzO1x0XHRcdFx0ZXJyID0geHBfYWxsb2NfdHhfZGVzY3MoeHMtXHUwMDNlcG9vbCwgeHMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ZGV2LVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRcdHhwX3B1dF9wb29sKHhzLVx1MDAzZXBvb2wpO1xuIFx0XHRcdFx0XHR4cy1cdTAwM2Vwb29sID0gTlVMTDtcbkBAIC0xNTMzLDcgJiM0MzsxNzI5LDkgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogVGhpcyB4c2sgaGFzIGl0cyBvd24gdW1lbS4gKi9cbi1cdFx0eHMtXHUwMDNlcG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsIHhzLVx1MDAzZXVtZW0pO1xuJiM0MztcdFx0eHMtXHUwMDNlcG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsIHhzLVx1MDAzZXVtZW0sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgZGV2LVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4mIzQzO1xuIFx0XHRpZiAoIXhzLVx1MDAzZXBvb2wpIHtcbiBcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19idWZmX3Bvb2wuYyBiL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXG5pbmRleCAxZjI4YTk2NDE1NzFlNC4uYTQwODk0ODBiMjJiMjUgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcbkBAIC00MiwxNyAmIzQzOzQyLDIyIEBAIHZvaWQgeHBfZGVzdHJveShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbiBcdGt2ZnJlZShwb29sKTtcbiB9XG4gXG4taW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuJiM0MztpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4mIzQzO1x0XHQgICAgICB1MzIgbWF4X3NlZ3MpXG4ge1xuLVx0cG9vbC1cdTAwM2V0eF9kZXNjcyA9IGt2emFsbG9jX29ianMoKnBvb2wtXHUwMDNldHhfZGVzY3MsIHhzLVx1MDAzZXR4LVx1MDAzZW5lbnRyaWVzKTtcbiYjNDM7XHR1MzIgbmVudHJpZXMgPSBtYXgoeHMtXHUwMDNldHgtXHUwMDNlbmVudHJpZXMsIG1heF9zZWdzKTtcbiYjNDM7XG4mIzQzO1x0cG9vbC1cdTAwM2V0eF9kZXNjcyA9IGt2emFsbG9jX29ianMoKnBvb2wtXHUwMDNldHhfZGVzY3MsIG5lbnRyaWVzKTtcbiBcdGlmICghcG9vbC1cdTAwM2V0eF9kZXNjcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4mIzQzO1x0cG9vbC1cdTAwM2V0eF9kZXNjc19uZW50cmllcyA9IG5lbnRyaWVzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tXHRcdFx0XHRcdFx0c3RydWN0IHhkcF91bWVtICp1bWVtKVxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgeGRwX3VtZW0gKnVtZW0sXG4mIzQzO1x0XHRcdFx0XHRcdHUzMiBtYXhfc2VncylcbiB7XG4gXHRib29sIHVuYWxpZ25lZCA9IHVtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9VTUVNX1VOQUxJR05FRF9DSFVOS19GTEFHO1xuIFx0c3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2w7XG5AQCAtNjksNyAmIzQzOzc0LDcgQEAgc3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRpZiAoeHMtXHUwMDNldHgpXG4tXHRcdGlmICh4cF9hbGxvY190eF9kZXNjcyhwb29sLCB4cykpXG4mIzQzO1x0XHRpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMsIG1heF9zZWdzKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbiBcdHBvb2wtXHUwMDNlY2h1bmtfbWFzayA9IH4oKHU2NCl1bWVtLVx1MDAzZWNodW5rX3NpemUgLSAxKTtcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19xdWV1ZS5oIGIvbmV0L3hkcC94c2tfcXVldWUuaFxuaW5kZXggM2UzZmJiNzNkMjNlMmYuLmExNWZmMTkyOWRiNjIzIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2tfcXVldWUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2tfcXVldWUuaFxuQEAgLTU4LDYgJiM0Mzs1OCwxOCBAQCBzdHJ1Y3QgcGFyc2VkX2Rlc2Mge1xuIFx0dTMyIHZhbGlkO1xuIH07XG4gXG4mIzQzO3N0cnVjdCB4c2tfdHhfYmF0Y2gge1xuJiM0MztcdHUzMiB0eF9kZXNjcztcbiYjNDM7XHR1MzIgcmVjbGFpbV9kZXNjcztcbiYjNDM7XHR1MzIgY29uc3VtZWRfZGVzY3M7XG4mIzQzO1x0Ym9vbCBidWRnZXRfbGltaXRlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIHhza190eF9iYXRjaF9jcV9kZXNjcyhjb25zdCBzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBiYXRjaC1cdTAwM2V0eF9kZXNjcyAmIzQzOyBiYXRjaC1cdTAwM2VyZWNsYWltX2Rlc2NzO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHNoYXJlZCBzdGF0ZSBvZiB0aGUgcmluZ3MgYXJlIGEgc2ltcGxlXG4gICogY2lyY3VsYXIgYnVmZmVyLCBhcyBvdXRsaW5lZCBpblxuICAqIERvY3VtZW50YXRpb24vY29yZS1hcGkvY2lyY3VsYXItYnVmZmVycy5yc3QuIEZvciB0aGUgUnggYW5kXG5AQCAtMjYzLDE3ICYjNDM7Mjc1LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZV9kZXNjKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIFx0cGFyc2VkLVx1MDAzZW1iID0geHBfbWJfZGVzYyhkZXNjKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZVxuLXUzMiB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLVx0XHRcdCAgICAgIHUzMiBtYXgpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHhza190eF9iYXRjaFxuJiM0Mzt4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuJiM0MztcdFx0XHQgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXgpXG4ge1xuLVx0dTMyIGNhY2hlZF9jb25zID0gcS1cdTAwM2VjYWNoZWRfY29ucywgbmJfZW50cmllcyA9IDA7XG4tXHRzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzID0gcG9vbC1cdTAwM2V0eF9kZXNjcztcbi1cdHUzMiB0b3RhbF9kZXNjcyA9IDAsIG5yX2ZyYWdzID0gMDtcbiYjNDM7XHRib29sIGRyYWluID0gUkVBRF9PTkNFKHhzLVx1MDAzZWRyYWluX2NvbnQpO1xuJiM0MztcdHUzMiBjYWNoZWRfY29ucywgbmJfZW50cmllcyA9IDAsIHJlbGVhc2VkO1xuJiM0MztcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3F1ZXVlICpxID0geHMtXHUwMDNldHg7XG4mIzQzO1x0dTMyIG5yX2ZyYWdzID0gMDtcbiYjNDM7XG4mIzQzO1x0Y2FjaGVkX2NvbnMgPSBxLVx1MDAzZWNhY2hlZF9jb25zO1xuIFxuLVx0LyogdHJhY2sgZmlyc3QgZW50cnksIGlmIHN0dW1ibGUgdXBvbiAqYW55KiBpbnZhbGlkIGRlc2NyaXB0b3IsIHJld2luZFxuLVx0ICogY3VycmVudCBwYWNrZXQgdGhhdCBjb25zaXN0cyBvZiBmcmFncyBhbmQgc3RvcCB0aGUgcHJvY2Vzc2luZ1xuLVx0ICovXG4gXHR3aGlsZSAoY2FjaGVkX2NvbnMgIT0gcS1cdTAwM2VjYWNoZWRfcHJvZCBcdTAwMjZcdTAwMjYgbmJfZW50cmllcyBcdTAwM2MgbWF4KSB7XG4gXHRcdHN0cnVjdCB4ZHBfcnh0eF9yaW5nICpyaW5nID0gKHN0cnVjdCB4ZHBfcnh0eF9yaW5nICopcS1cdTAwM2VyaW5nO1xuIFx0XHR1MzIgaWR4ID0gY2FjaGVkX2NvbnMgXHUwMDI2IHEtXHUwMDNlcmluZ19tYXNrO1xuQEAgLTI4MiwyNiAmIzQzOzI5NSw0OSBAQCB1MzIgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbiBcdFx0ZGVzY3NbbmJfZW50cmllc10gPSByaW5nLVx1MDAzZWRlc2NbaWR4XTtcbiBcdFx0Y2FjaGVkX2NvbnMmIzQzOyYjNDM7O1xuIFx0XHRwYXJzZV9kZXNjKHEsIHBvb2wsIFx1MDAyNmRlc2NzW25iX2VudHJpZXNdLCBcdTAwMjZwYXJzZWQpO1xuLVx0XHRpZiAodW5saWtlbHkoIXBhcnNlZC52YWxpZCkpXG4tXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIXBhcnNlZC52YWxpZCkpIHtcbiYjNDM7XHRcdFx0aWYgKCFkcmFpbiBcdTAwMjZcdTAwMjYgIW5yX2ZyYWdzIFx1MDAyNlx1MDAyNiAhcGFyc2VkLm1iKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdFx0ZHJhaW4gPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG5yX2ZyYWdzJiM0MzsmIzQzOztcbiYjNDM7XHRcdG5iX2VudHJpZXMmIzQzOyYjNDM7O1xuIFxuIFx0XHRpZiAobGlrZWx5KCFwYXJzZWQubWIpKSB7XG4tXHRcdFx0dG90YWxfZGVzY3MgJiM0Mzs9IChucl9mcmFncyAmIzQzOyAxKTtcbi1cdFx0XHRucl9mcmFncyA9IDA7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0bnJfZnJhZ3MmIzQzOyYjNDM7O1xuLVx0XHRcdGlmIChucl9mcmFncyA9PSBwb29sLVx1MDAzZXhkcF96Y19tYXhfc2Vncykge1xuJiM0MztcdFx0XHRpZiAodW5saWtlbHkoZHJhaW4pKSB7XG4mIzQzO1x0XHRcdFx0YmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzO1xuJiM0MztcdFx0XHRcdFdSSVRFX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCwgZmFsc2UpO1xuIFx0XHRcdFx0bnJfZnJhZ3MgPSAwO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0YmF0Y2gudHhfZGVzY3MgJiM0Mzs9IG5yX2ZyYWdzO1xuJiM0MztcdFx0XHRucl9mcmFncyA9IDA7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChucl9mcmFncyA9PSBwb29sLVx1MDAzZXhkcF96Y19tYXhfc2VncylcbiYjNDM7XHRcdFx0ZHJhaW4gPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG5yX2ZyYWdzKSB7XG4mIzQzO1x0XHRpZiAoZHJhaW4pIHtcbiYjNDM7XHRcdFx0YmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzO1xuJiM0MztcdFx0XHRXUklURV9PTkNFKHhzLVx1MDAzZWRyYWluX2NvbnQsIHRydWUpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0aWYgKG5iX2VudHJpZXMgPT0gbWF4KVxuJiM0MztcdFx0XHRcdGJhdGNoLmJ1ZGdldF9saW1pdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdFx0Y2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7XG4gXHRcdH1cbi1cdFx0bmJfZW50cmllcyYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4tXHRjYWNoZWRfY29ucyAtPSBucl9mcmFncztcbiYjNDM7XHRyZWxlYXNlZCA9IGNhY2hlZF9jb25zIC0gcS1cdTAwM2VjYWNoZWRfY29ucztcbiBcdC8qIFJlbGVhc2UgdmFsaWQgcGx1cyBhbnkgaW52YWxpZCBlbnRyaWVzICovXG4tXHR4c2txX2NvbnNfcmVsZWFzZV9uKHEsIGNhY2hlZF9jb25zIC0gcS1cdTAwM2VjYWNoZWRfY29ucyk7XG4tXHRyZXR1cm4gdG90YWxfZGVzY3M7XG4mIzQzO1x0eHNrcV9jb25zX3JlbGVhc2VfbihxLCByZWxlYXNlZCk7XG4mIzQzO1x0YmF0Y2guY29uc3VtZWRfZGVzY3MgPSByZWxlYXNlZDtcbiYjNDM7XHRyZXR1cm4gYmF0Y2g7XG4gfVxuIFxuIC8qIEZ1bmN0aW9ucyBmb3IgY29uc3VtZXJzICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbmluZGV4IDZlYjkwOTZkMDg0YzAxLi43YWJiNDkzNWVkZjlhZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbkBAIC00MjcsMTQgJiM0Mzs0MjcsMTQgQEAgc3RhdGljIHUzMiBwa3RfbmJfZnJhZ3ModTMyIGZyYW1lX3NpemUsIHN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtLCBzdHJ1Y3QgcGtcbiBcdH1cbiBcbiBcdC8qIFNlYXJjaCBmb3IgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGluIHZlcmJhdGltIG1vZGUgKi9cbi1cdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXHUwMDNlb3B0aW9ucykgfHwgIXBrdC1cdTAwM2V2YWxpZClcbiYjNDM7XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpKVxuIFx0XHRyZXR1cm4gbmJfZnJhZ3M7XG4gXG4gXHRuZXh0X2ZyYWcgPSBwa3Rfc3RyZWFtLVx1MDAzZWN1cnJlbnRfcGt0X25iO1xuIFx0cGt0JiM0MzsmIzQzOztcbiBcdHdoaWxlIChuZXh0X2ZyYWcmIzQzOyYjNDM7IFx1MDAzYyBwa3Rfc3RyZWFtLVx1MDAzZW5iX3BrdHMpIHtcbiBcdFx0bmJfZnJhZ3MmIzQzOyYjNDM7O1xuLVx0XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRwa3QmIzQzOyYjNDM7O1xuIFx0fVxuQEAgLTY2NSwxMSAmIzQzOzY2NSwxMSBAQCBzdGF0aWMgc3RydWN0IHBrdF9zdHJlYW0gKl9fcGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgc1xuIFx0XHRcdGlmICghZnJhbWUtXHUwMDNldmFsaWQgfHwgIXBrdF9jb250aW51ZXMoZnJhbWUtXHUwMDNlb3B0aW9ucykpXG4gXHRcdFx0XHRwYXlsb2FkJiM0MzsmIzQzOztcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAoZnJhbWUtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRcdGlmIChmcmFtZS1cdTAwM2V2YWxpZCkge1xuIFx0XHRcdFx0bGVuICYjNDM7PSBmcmFtZS1cdTAwM2VsZW47XG4tXHRcdFx0aWYgKGZyYW1lLVx1MDAzZXZhbGlkIFx1MDAyNlx1MDAyNiBwa3RfY29udGludWVzKGZyYW1lLVx1MDAzZW9wdGlvbnMpKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXG4mIzQzO1x0XHRcdFx0aWYgKHBrdF9jb250aW51ZXMoZnJhbWUtXHUwMDNlb3B0aW9ucykpXG4mIzQzO1x0XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdHBrdC1cdTAwM2Vwa3RfbmIgPSBwa3RfbmI7XG4gXHRcdFx0cGt0LVx1MDAzZWxlbiA9IGxlbjtcbiBcdFx0XHRwa3QtXHUwMDNldmFsaWQgPSBmcmFtZS1cdTAwM2V2YWxpZDtcbkBAIC0xMjA5LDYgJiM0MzsxMjA5LDcgQEAgc3RhdGljIGludCBfX3NlbmRfcGt0cyhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB4c2stXHUwMDNlYmF0Y2hfc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IHBrdCAqcGt0ID0gcGt0X3N0cmVhbV9nZXRfbmV4dF90eF9wa3QocGt0X3N0cmVhbSk7XG4gXHRcdHUzMiBuYl9mcmFnc19sZWZ0LCBuYl9mcmFncywgYnl0ZXNfd3JpdHRlbiA9IDA7XG4mIzQzO1x0XHRzdHJ1Y3QgcGt0ICpmaXJzdF9wa3QgPSBwa3Q7XG4gXG4gXHRcdGlmICghcGt0KVxuIFx0XHRcdGJyZWFrO1xuQEAgLTEyNTMsNiAmIzQzOzEyNTQsOCBAQCBzdGF0aWMgaW50IF9fc2VuZF9wa3RzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayxcbiBcdFx0aWYgKHBrdCBcdTAwMjZcdTAwMjYgcGt0LVx1MDAzZXZhbGlkKSB7XG4gXHRcdFx0dmFsaWRfcGt0cyYjNDM7JiM0Mzs7XG4gXHRcdFx0dmFsaWRfZnJhZ3MgJiM0Mzs9IG5iX2ZyYWdzO1xuJiM0MztcdFx0fSBlbHNlIGlmIChwa3Rfc3RyZWFtLVx1MDAzZXZlcmJhdGltIFx1MDAyNlx1MDAyNiBwa3RfY29udGludWVzKGZpcnN0X3BrdC1cdTAwM2VvcHRpb25zKSkge1xuJiM0MztcdFx0XHR2YWxpZF9mcmFncyAmIzQzOz0gbmJfZnJhZ3M7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0yMDk5LDEzICYjNDM7MjEwMiwxNiBAQCBpbnQgdGVzdGFwcF9pbnZhbGlkX2Rlc2NfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdFx0ezAsIDAsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogSW52YWxpZCBhZGRyZXNzIGluIHRoZSBzZWNvbmQgZnJhbWUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4tXHRcdHt1bWVtX3N6LCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuJiM0MztcdFx0e3VtZW1fc3ogKiAyLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuJiM0MztcdFx0ezAsIE1JTl9QS1RfU0laRSwgMCwgZmFsc2UsIDB9LFxuIFx0XHQvKiBJbnZhbGlkIGxlbiBpbiB0aGUgbWlkZGxlICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuIFx0XHR7MCwgWFNLX1VNRU1fX0lOVkFMSURfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuJiM0MztcdFx0ezAsIE1JTl9QS1RfU0laRSwgMCwgZmFsc2UsIDB9LFxuIFx0XHQvKiBJbnZhbGlkIG9wdGlvbnMgaW4gdGhlIG1pZGRsZSAqL1xuIFx0XHR7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWFNLX0RFU0NfX0lOVkFMSURfT1BUSU9OfSxcbiYjNDM7XHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogVHJhbnNtaXQgMiBmcmFncywgcmVjZWl2ZSAzICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIFhEUF9QS1RfQ09OVER9LFxuIFx0XHR7MCwgWFNLX1VNRU1fX01BWF9GUkFNRV9TSVpFLCAwLCB0cnVlLCAwfSxcbkBAIC0yMTE3LDggJiM0MzsyMTIzLDggQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXG4gXHRpZiAodW1lbS1cdTAwM2V1bmFsaWduZWRfbW9kZSkge1xuIFx0XHQvKiBDcm9zc2luZyBhIGNodW5rIGJvdW5kYXJ5IGFsbG93ZWQgKi9cbi1cdFx0cGt0c1sxMl0udmFsaWQgPSB0cnVlO1xuLVx0XHRwa3RzWzEzXS52YWxpZCA9IHRydWU7XG4mIzQzO1x0XHRwa3RzWzE1XS52YWxpZCA9IHRydWU7XG4mIzQzO1x0XHRwa3RzWzE2XS52YWxpZCA9IHRydWU7XG4gXHR9XG4gXG4gXHR0ZXN0LVx1MDAzZW10dSA9IE1BWF9FVEhfSlVNQk9fU0laRTtcbkBAIC0yMjcwLDcgJiM0MzsyMjc2LDcgQEAgaW50IHRlc3RhcHBfdG9vX21hbnlfZnJhZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdFx0bWF4X2ZyYWdzICYjNDM7PSAxO1xuIFx0fVxuIFxuLVx0cGt0cyA9IGNhbGxvYygyICogbWF4X2ZyYWdzICYjNDM7IDIsIHNpemVvZihzdHJ1Y3QgcGt0KSk7XG4mIzQzO1x0cGt0cyA9IGNhbGxvYygyICogbWF4X2ZyYWdzICYjNDM7IDMsIHNpemVvZihzdHJ1Y3QgcGt0KSk7XG4gXHRpZiAoIXBrdHMpXG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXG5AQCAtMjI4OCwyNCAmIzQzOzIyOTQsMzAgQEAgaW50IHRlc3RhcHBfdG9vX21hbnlfZnJhZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdH1cbiBcdHBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDtcbiBcbi1cdC8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0XG4tXHQgKiBjb250aW51ZXMgb24gdGhlIGxhc3QgZnJhZ1xuLVx0ICovXG4tXHRmb3IgKGkgPSBtYXhfZnJhZ3MgJiM0MzsgMTsgaSBcdTAwM2MgMiAqIG1heF9mcmFncyAmIzQzOyAxOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdC8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCAmIzQzOyAxIGFtb3VudCBvZiBmcmFncyAqL1xuJiM0MztcdGZvciAoaSA9IG1heF9mcmFncyAmIzQzOyAxOyBpIFx1MDAzYyAyICogbWF4X2ZyYWdzICYjNDM7IDI7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHBrdHNbaV0ubGVuID0gTUlOX1BLVF9TSVpFO1xuIFx0XHRwa3RzW2ldLm9wdGlvbnMgPSBYRFBfUEtUX0NPTlREO1xuLVx0XHRwa3RzW2ldLnZhbGlkID0gZmFsc2U7XG4mIzQzO1x0XHRwa3RzW2ldLnZhbGlkID0gdHJ1ZTtcbiBcdH1cbiYjNDM7XHRwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0ub3B0aW9ucyA9IDA7XG4gXG4gXHQvKiBWYWxpZCBwYWNrZXQgZm9yIHN5bmNoICovXG4tXHRwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0ubGVuID0gTUlOX1BLVF9TSVpFO1xuLVx0cGt0c1syICogbWF4X2ZyYWdzICYjNDM7IDFdLnZhbGlkID0gdHJ1ZTtcbiYjNDM7XHRwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMl0ubGVuID0gTUlOX1BLVF9TSVpFO1xuJiM0MztcdHBrdHNbMiAqIG1heF9mcmFncyAmIzQzOyAyXS52YWxpZCA9IHRydWU7XG4gXG4tXHRpZiAocGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20odGVzdCwgcGt0cywgMiAqIG1heF9mcmFncyAmIzQzOyAyKSkge1xuJiM0MztcdGlmIChwa3Rfc3RyZWFtX2dlbmVyYXRlX2N1c3RvbSh0ZXN0LCBwa3RzLCAyICogbWF4X2ZyYWdzICYjNDM7IDMpKSB7XG4gXHRcdGZyZWUocGt0cyk7XG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHR9XG4gXG4mIzQzO1x0LyogVGhlIGdlbmVyYXRlZCBUeCBzdHJlYW0gbXVzdCBrZWVwIHRoZSB0b28tYmlnIHBhY2tldCB2YWxpZCBzbyB0aGF0XG4mIzQzO1x0ICogX19zZW5kX3BrdHMoKSBhY2NvdW50cyBpdHMgZGVzY3JpcHRvcnMgaW4gb3V0c3RhbmRpbmdfdHguIFRoZSBSeFxuJiM0MztcdCAqIHN0cmVhbSwgaG93ZXZlciwgbXVzdCBub3QgZXhwZWN0IHRoaXMgcGFja2V0IG9uIHRoZSB3aXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrLVx1MDAzZXBrdF9zdHJlYW0tXHUwMDNlcGt0c1syXS52YWxpZCA9IGZhbHNlO1xuJiM0MztcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrLVx1MDAzZXBrdF9zdHJlYW0tXHUwMDNlbmJfdmFsaWRfZW50cmllcy0tO1xuJiM0MztcbiBcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcbiBcdGZyZWUocGt0cyk7XG4gXHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDIzOjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX3R4X2NvbW1pdF9iYXRjaCYjMzQ7LAogICAgJiMzNDtfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCYjMzQ7LAogICAgJiMzNDt4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoJiMzNDssCiAgICAmIzM0O3hza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkJiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2ImIzM0OywKICAgICYjMzQ7eHNrX2J1aWxkX3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDtfX3hza19nZW5lcmljX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCB0cmFuc21pc3Npb24gbG9naWMgdG8gY29ycmVjdGx5IGhhbmRsZSBtdWx0aS1idWZmZXIgcGFja2V0cyB3aXRoIGludmFsaWQgZGVzY3JpcHRvcnMgb3IgZXhjZWVkaW5nIHRoZSBtYXhpbXVtIGFsbG93ZWQgZnJhZ21lbnRzLiBJdCBpbnRyb2R1Y2VzIG5ldyBiYXRjaGluZyBhbmQgcmVjbGFpbWluZyBsb2dpYyBmb3IgZGVzY3JpcHRvcnMsIGFuZCB1cGRhdGVzIHRoZSBnZW5lcmljIFhEUCB0cmFuc21pdCBwYXRoIHRvIGRyYWluIGludmFsaWQgcGFja2V0cy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfWERQIHNvY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA5ZGIzZTQwODAwMjFjYTQ4ZGU1NmIxN2QzMTBkNzIyMzAzYWNjOGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAxNCAyMzo1NjoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmggYi9pbmNsdWRlL25ldC94ZHBfc29jay5oCmluZGV4IGViYWM2MGEzZDhhMTdiLi44YjUxODc2ZWZiZWQxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGRwX3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC94ZHBfc29jay5oCkBAIC04MCw2ICYjNDM7ODAsNyBAQCBzdHJ1Y3QgeGRwX3NvY2sgewogCSAqIGNhbGwgb2YgX194c2tfZ2VuZXJpY194bWl0KCkuCiAJICovCiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJYm9vbCBkcmFpbl9jb250OwogCiAJc3RydWN0IGxpc3RfaGVhZCBtYXBfbGlzdDsKIAkvKiBQcm90ZWN0cyBtYXBfbGlzdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oIGIvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oCmluZGV4IGNjYjNiMzUwMDAxZjI0Li4yYmIxZDEyMmIxYmM2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaApAQCAtNzgsNiAmIzQzOzc4LDkgQEAgc3RydWN0IHhza19idWZmX3Bvb2wgewogCXUzMiBjaHVua19zaXplOwogCXUzMiBjaHVua19zaGlmdDsKIAl1MzIgZnJhbWVfbGVuOwomIzQzOwl1MzIgdHhfZGVzY3NfbmVudHJpZXM7CiYjNDM7CXUzMiByZWNsYWltX2Rlc2NzOwomIzQzOwl1MzIgdHhfemNfcGVuZGluZ19kZXNjczsKIAl1MzIgeGRwX3pjX21heF9zZWdzOwogCXU4IHR4X21ldGFkYXRhX2xlbjsgLyogaW5oZXJpdGVkIGZyb20gdW1lbSAqLwogCXU4IGNhY2hlZF9uZWVkX3dha2V1cDsKQEAgLTEwMiwxMiAmIzQzOzEwNSwxNCBAQCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCB7CiAKIC8qIEFGX1hEUCBjb3JlLiAqLwogc3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cywKLQkJCQkJCXN0cnVjdCB4ZHBfdW1lbSAqdW1lbSk7CiYjNDM7CQkJCQkJc3RydWN0IHhkcF91bWVtICp1bWVtLAomIzQzOwkJCQkJCXUzMiBtYXhfc2Vncyk7CiBpbnQgeHBfYXNzaWduX2RldihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICB1MTYgcXVldWVfaWQsIHUxNiBmbGFncyk7CiBpbnQgeHBfYXNzaWduX2Rldl9zaGFyZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqdW1lbV94cywKIAkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcXVldWVfaWQpOwotaW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKTsKJiM0MztpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsCiYjNDM7CQkgICAgICB1MzIgbWF4X3NlZ3MpOwogdm9pZCB4cF9kZXN0cm95KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTsKIHZvaWQgeHBfZ2V0X3Bvb2woc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpOwogYm9vbCB4cF9wdXRfcG9vbChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7CmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suYwppbmRleCBiOTcwZjMwZWE5YjlkOC4uMjkwOWEwZWM2ODM3MzEgMTAwNjQ0Ci0tLSBhL25ldC94ZHAveHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2suYwpAQCAtNDk5LDYgJiM0Mzs0OTksMjMgQEAgdm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdCkKIAogdm9pZCB4c2tfdHhfY29tcGxldGVkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfZW50cmllcykKIHsKJiM0MzsJdTMyIHJlY2xhaW1fZGVzY3MgPSBSRUFEX09OQ0UocG9vbC0mZ3Q7cmVjbGFpbV9kZXNjcyk7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShyZWNsYWltX2Rlc2NzKSkgewomIzQzOwkJdTMyIHBlbmRpbmdfZGVzY3MgPSBSRUFEX09OQ0UocG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcyk7CiYjNDM7CiYjNDM7CQlpZiAobmJfZW50cmllcyAmbHQ7IHBlbmRpbmdfZGVzY3MpIHsKJiM0MzsJCQlXUklURV9PTkNFKHBvb2wtJmd0O3R4X3pjX3BlbmRpbmdfZGVzY3MsCiYjNDM7CQkJCSAgIHBlbmRpbmdfZGVzY3MgLSBuYl9lbnRyaWVzKTsKJiM0MzsJCQl4c2txX3Byb2Rfc3VibWl0X24ocG9vbC0mZ3Q7Y3EsIG5iX2VudHJpZXMpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCVdSSVRFX09OQ0UocG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcywgMCk7CiYjNDM7CQluYl9lbnRyaWVzICYjNDM7PSByZWNsYWltX2Rlc2NzOwomIzQzOwkJV1JJVEVfT05DRShwb29sLSZndDtyZWNsYWltX2Rlc2NzLCAwKTsKJiM0MzsJfQomIzQzOwogCXhza3FfcHJvZF9zdWJtaXRfbihwb29sLSZndDtjcSwgbmJfZW50cmllcyk7CiB9CiBFWFBPUlRfU1lNQk9MKHhza190eF9jb21wbGV0ZWQpOwpAQCAtNTc0LDI0ICYjNDM7NTkxLDE2MiBAQCBzdGF0aWMgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2soc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZW50cgogCXJldHVybiBuYl9wa3RzOwogfQogCiYjNDM7c3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwKJiM0MzsJCQkJc3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpCiYjNDM7ewomIzQzOwl1MzIgbmJfZGVzY3MgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoYmF0Y2gpOwomIzQzOwl1MzIgY3FfY2FjaGVkX3Byb2Q7CiYjNDM7CiYjNDM7CWlmICghbmJfZGVzY3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWNxX2NhY2hlZF9wcm9kID0gcG9vbC0mZ3Q7Y3EtJmd0O2NhY2hlZF9wcm9kOwomIzQzOwl4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLSZndDtjcSwgcG9vbC0mZ3Q7dHhfZGVzY3MsIG5iX2Rlc2NzKTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGJhdGNoLSZndDtyZWNsYWltX2Rlc2NzKSkgewomIzQzOwkJdTMyIGNxX3BlbmRpbmdfZGVzY3M7CiYjNDM7CiYjNDM7CQkvKiBDUSBpcyBwb3NpdGlvbmFsLiBEZXNjcmlwdG9ycyBhbHJlYWR5IHdyaXR0ZW4gYnV0IG5vdAomIzQzOwkJICogc3VibWl0dGVkIG11c3QgY29tcGxldGUgYmVmb3JlIGFueSByZWNsYWltLW9ubHkgZGVzY3JpcHRvcnMKJiM0MzsJCSAqIGFwcGVuZGVkIGJlbG93LgomIzQzOwkJICovCiYjNDM7CQljcV9wZW5kaW5nX2Rlc2NzID0gY3FfY2FjaGVkX3Byb2QgLSB4c2txX2dldF9wcm9kKHBvb2wtJmd0O2NxKTsKJiM0MzsKJiM0MzsJCVdSSVRFX09OQ0UocG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcywKJiM0MzsJCQkgICBiYXRjaC0mZ3Q7dHhfZGVzY3MgJiM0MzsgY3FfcGVuZGluZ19kZXNjcyk7CiYjNDM7CQlXUklURV9PTkNFKHBvb2wtJmd0O3JlY2xhaW1fZGVzY3MsIGJhdGNoLSZndDtyZWNsYWltX2Rlc2NzKTsKJiM0MzsJCWlmICh1bmxpa2VseSghcG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcykpCiYjNDM7CQkJeHNrX3R4X2NvbXBsZXRlZChwb29sLCAwKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaAomIzQzO19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLAomIzQzOwkJCQkgc3RydWN0IHhkcF9kZXNjICpkZXNjcywgdTMyIG1heF9kZXNjcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTsKJiM0MzsJdTMyIGVudHJpZXM7CiYjNDM7CiYjNDM7CWVudHJpZXMgPSB4c2txX2NvbnNfbmJfZW50cmllcyh4cy0mZ3Q7dHgsIG1heF9kZXNjcyk7CiYjNDM7CWlmICghZW50cmllcykKJiM0MzsJCXJldHVybiBiYXRjaDsKJiM0MzsKJiM0MzsJYmF0Y2ggPSB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHhzLCBwb29sLCBkZXNjcywgbWF4X2Rlc2NzKTsKJiM0MzsJaWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoJmFtcDtiYXRjaCkpIHsKJiM0MzsJCXhzLSZndDt0eC0mZ3Q7cXVldWVfZW1wdHlfZGVzY3MmIzQzOyYjNDM7OwomIzQzOwkJaWYgKGJhdGNoLmNvbnN1bWVkX2Rlc2NzKSB7CiYjNDM7CQkJX194c2txX2NvbnNfcmVsZWFzZSh4cy0mZ3Q7dHgpOwomIzQzOwkJCXhzLSZndDtzay5za193cml0ZV9zcGFjZSgmYW1wO3hzLSZndDtzayk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gYmF0Y2g7CiYjNDM7CX0KJiM0MzsKJiM0MzsJX194c2txX2NvbnNfcmVsZWFzZSh4cy0mZ3Q7dHgpOwomIzQzOwl4cy0mZ3Q7c2suc2tfd3JpdGVfc3BhY2UoJmFtcDt4cy0mZ3Q7c2spOwomIzQzOwlyZXR1cm4gYmF0Y2g7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoCiYjNDM7eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9kZXNjcykKJiM0Mzt7CiYjNDM7CXUzMiBjcV9kZXNjc19iZWZvcmUsIGNxX2Rlc2NzX2FmdGVyOwomIzQzOwlzdHJ1Y3QgeHNrX3R4X2JhdGNoIHN1bV9iYXRjaCA9IHt9OwomIzQzOwlib29sIGJ1ZGdldF9leGhhdXN0ZWQ7CiYjNDM7CXUzMiBwZXJfc29ja2V0X2J1ZGdldDsKJiM0MzsJc3RydWN0IHhkcF9zb2NrICp4czsKJiM0MzsKJiM0MzsJLyogVGhlIGZhaXJuZXNzIHF1b3RhIG11c3QgYWxsb3cgb25lIG1heGltdW0tc2l6ZWQgdmFsaWQgcGFja2V0LiAqLwomIzQzOwlwZXJfc29ja2V0X2J1ZGdldCA9IG1heF90KHUzMiwgTUFYX1BFUl9TT0NLRVRfQlVER0VULAomIzQzOwkJCQkgIHBvb2wtJmd0O3hkcF96Y19tYXhfc2Vncyk7CiYjNDM7CiYjNDM7YWdhaW46CiYjNDM7CWJ1ZGdldF9leGhhdXN0ZWQgPSBmYWxzZTsKJiM0MzsJY3FfZGVzY3NfYmVmb3JlID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKCZhbXA7c3VtX2JhdGNoKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsICZhbXA7cG9vbC0mZ3Q7eHNrX3R4X2xpc3QsIHR4X2xpc3QpIHsKJiM0MzsJCXUzMiBidWRnZXQsIGJ1ZGdldF9sZWZ0LCBvZmZzZXQsIHJlbWFpbmluZzsKJiM0MzsJCXN0cnVjdCB4c2tfdHhfYmF0Y2ggY3Vycl9iYXRjaDsKJiM0MzsKJiM0MzsJCS8qIE9uY2UgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBhcHBlbmRlZCB0byB0aGUgQ1EKJiM0MzsJCSAqIGFkZHJlc3MgYXJlYSwgZG8gbm90IGFwcGVuZCBkcml2ZXItdmlzaWJsZSBUeCBkZXNjcmlwdG9ycwomIzQzOwkJICogZnJvbSBhbm90aGVyIHNvY2tldCBhZnRlciB0aGVtLiB4c2tfdHhfY29tcGxldGVkKCkgcmVsaWVzIG9uCiYjNDM7CQkgKiBhbGwgZHJpdmVyLXZpc2libGUgZGVzY3JpcHRvcnMgcHJlY2VkaW5nIGFsbCByZWNsYWltLW9ubHkKJiM0MzsJCSAqIGRlc2NyaXB0b3JzIGluIENRIG9yZGVyLgomIzQzOwkJICovCiYjNDM7CQlpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBiZSBnZW50bGUgd2hlbiBwbGF5aW5nIHdpdGggcG9vbC0mZ3Q7dHhfZGVzY3MgKi8KJiM0MzsJCW9mZnNldCA9IHhza190eF9iYXRjaF9jcV9kZXNjcygmYW1wO3N1bV9iYXRjaCk7CiYjNDM7CQlpZiAob2Zmc2V0ICZndDs9IG1heF9kZXNjcykKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmICh4cy0mZ3Q7dHhfYnVkZ2V0X3NwZW50ICZndDs9IHBlcl9zb2NrZXRfYnVkZ2V0KSB7CiYjNDM7CQkJaWYgKHhza3FfY29uc19uYl9lbnRyaWVzKHhzLSZndDt0eCwgMSkpCiYjNDM7CQkJCWJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYnVkZ2V0X2xlZnQgPSBwZXJfc29ja2V0X2J1ZGdldCAtIHhzLSZndDt0eF9idWRnZXRfc3BlbnQ7CiYjNDM7CQlyZW1haW5pbmcgPSBtYXhfZGVzY3MgLSBvZmZzZXQ7CiYjNDM7CQlidWRnZXQgPSBtaW4ocmVtYWluaW5nLCBidWRnZXRfbGVmdCk7CiYjNDM7CiYjNDM7CQljdXJyX2JhdGNoID0gX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gocG9vbCwgeHMsCiYjNDM7CQkJCQkJCSAgICAgIHBvb2wtJmd0O3R4X2Rlc2NzICYjNDM7IG9mZnNldCwKJiM0MzsJCQkJCQkJICAgICAgYnVkZ2V0KTsKJiM0MzsJCWlmICgheHNrX3R4X2JhdGNoX2NxX2Rlc2NzKCZhbXA7Y3Vycl9iYXRjaCkpIHsKJiM0MzsJCQlpZiAoY3Vycl9iYXRjaC5idWRnZXRfbGltaXRlZCAmYW1wOyZhbXA7IGJ1ZGdldF9sZWZ0ICZsdDsgcmVtYWluaW5nKQomIzQzOwkJCQlidWRnZXRfZXhoYXVzdGVkID0gdHJ1ZTsKJiM0MzsJCQl4cy0mZ3Q7dHhfYnVkZ2V0X3NwZW50ICYjNDM7PSBjdXJyX2JhdGNoLmNvbnN1bWVkX2Rlc2NzOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJeHMtJmd0O3R4X2J1ZGdldF9zcGVudCAmIzQzOz0gY3Vycl9iYXRjaC5jb25zdW1lZF9kZXNjczsKJiM0MzsJCXN1bV9iYXRjaC50eF9kZXNjcyAmIzQzOz0gY3Vycl9iYXRjaC50eF9kZXNjczsKJiM0MzsJCXN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzICYjNDM7PSBjdXJyX2JhdGNoLnJlY2xhaW1fZGVzY3M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY3FfZGVzY3NfYWZ0ZXIgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoJmFtcDtzdW1fYmF0Y2gpOwomIzQzOwomIzQzOwlpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgfHwgY3FfZGVzY3NfYWZ0ZXIgJmd0Oz0gbWF4X2Rlc2NzKQomIzQzOwkJcmV0dXJuIHN1bV9iYXRjaDsKJiM0MzsKJiM0MzsJLyogQ29udGludWUgZmlsbGluZyB0aGUgYmF0Y2ggd2hpbGUgdGhpcyBwYXNzIG1hZGUgcHJvZ3Jlc3MgKi8KJiM0MzsJaWYgKGNxX2Rlc2NzX2JlZm9yZSAhPSBjcV9kZXNjc19hZnRlcikKJiM0MzsJCWdvdG8gYWdhaW47CiYjNDM7CiYjNDM7CWlmICghYnVkZ2V0X2V4aGF1c3RlZCkKJiM0MzsJCXJldHVybiBzdW1fYmF0Y2g7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCAmYW1wO3Bvb2wtJmd0O3hza190eF9saXN0LCB0eF9saXN0KQomIzQzOwkJeHMtJmd0O3R4X2J1ZGdldF9zcGVudCA9IDA7CiYjNDM7CWdvdG8gYWdhaW47CiYjNDM7fQomIzQzOwogdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX3BrdHMpCiB7CiYjNDM7CXN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTsKIAlzdHJ1Y3QgeGRwX3NvY2sgKnhzOwomIzQzOwlib29sIHVtZW1fc2hhcmVkOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWlmICghbGlzdF9pc19zaW5ndWxhcigmYW1wO3Bvb2wtJmd0O3hza190eF9saXN0KSkgewotCQkvKiBGYWxsYmFjayB0byB0aGUgbm9uLWJhdGNoZWQgdmVyc2lvbiAqLwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2socG9vbCwgbmJfcGt0cyk7Ci0JfQomIzQzOwlpZiAodW5saWtlbHkoUkVBRF9PTkNFKHBvb2wtJmd0O3JlY2xhaW1fZGVzY3MpKSkKJiM0MzsJCWdvdG8gb3V0OwogCi0JeHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KCZhbXA7cG9vbC0mZ3Q7eHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jaywgdHhfbGlzdCk7Ci0JaWYgKCF4cykgewotCQluYl9wa3RzID0gMDsKJiM0MzsJeHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KCZhbXA7cG9vbC0mZ3Q7eHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jaywKJiM0MzsJCQkJICAgIHR4X2xpc3QpOwomIzQzOwlpZiAoIXhzKQogCQlnb3RvIG91dDsKLQl9CiAKLQluYl9wa3RzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtJmd0O3R4LCBuYl9wa3RzKTsKJiM0MzsJbmJfcGt0cyA9IG1pbihuYl9wa3RzLCBwb29sLSZndDt0eF9kZXNjc19uZW50cmllcyk7CiYjNDM7CWlmICghbmJfcGt0cykKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl1bWVtX3NoYXJlZCA9ICFsaXN0X2lzX3Npbmd1bGFyKCZhbXA7cG9vbC0mZ3Q7eHNrX3R4X2xpc3QpOwomIzQzOwomIzQzOwlpZiAodW1lbV9zaGFyZWQgJmFtcDsmYW1wOyAhKHBvb2wtJmd0O3VtZW0tJmd0O2ZsYWdzICZhbXA7IFhEUF9VTUVNX1NHX0ZMQUcpKSB7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHBvb2wsIG5iX3BrdHMpOwomIzQzOwl9CiAKIAkvKiBUaGlzIGlzIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtIGZvciB0aGUgVHggcGF0aC4gVHJ5IHRvCiAJICogcmVzZXJ2ZSBzcGFjZSBpbiB0aGUgY29tcGxldGlvbiBxdWV1ZSBmb3IgYWxsIHBhY2tldHMsIGJ1dApAQCAtNjAzLDE5ICYjNDM7NzU4LDE2IEBAIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKQogCWlmICghbmJfcGt0cykKIAkJZ290byBvdXQ7CiAKLQluYl9wa3RzID0geHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaCh4cy0mZ3Q7dHgsIHBvb2wsIG5iX3BrdHMpOwotCWlmICghbmJfcGt0cykgewotCQl4cy0mZ3Q7dHgtJmd0O3F1ZXVlX2VtcHR5X2Rlc2NzJiM0MzsmIzQzOzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JX194c2txX2NvbnNfcmVsZWFzZSh4cy0mZ3Q7dHgpOwotCXhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtJmd0O2NxLCBwb29sLSZndDt0eF9kZXNjcywgbmJfcGt0cyk7Ci0JeHMtJmd0O3NrLnNrX3dyaXRlX3NwYWNlKCZhbXA7eHMtJmd0O3NrKTsKJiM0MzsJYmF0Y2ggPSB1bWVtX3NoYXJlZCA/CiYjNDM7CQl4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoKHBvb2wsIG5iX3BrdHMpIDoKJiM0MzsJCV9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHBvb2wsIHhzLAomIzQzOwkJCQkJCSBwb29sLSZndDt0eF9kZXNjcywKJiM0MzsJCQkJCQkgbmJfcGt0cyk7CiYjNDM7CXhza190eF9jb21taXRfYmF0Y2gocG9vbCwgJmFtcDtiYXRjaCk7CiAKIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gbmJfcGt0czsKJiM0MzsJcmV0dXJuIGJhdGNoLnR4X2Rlc2NzOwogfQogRVhQT1JUX1NZTUJPTCh4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gpOwogCkBAIC03MzcsNiAmIzQzOzg4OSwxOSBAQCBzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwb29sLSZndDtjcV9wcm9kX2xvY2ssIGZsYWdzKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwl1MzIgaWR4OwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3Bvb2wtJmd0O2NxX3Byb2RfbG9jaywgZmxhZ3MpOwomIzQzOwlpZHggPSB4c2txX2dldF9wcm9kKHBvb2wtJmd0O2NxKTsKJiM0MzsJeHNrcV9wcm9kX3dyaXRlX2FkZHIocG9vbC0mZ3Q7Y3EsIGlkeCwgZGVzYy0mZ3Q7YWRkcik7CiYjNDM7CXhza3FfcHJvZF9zdWJtaXRfbihwb29sLSZndDtjcSwgMSk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwb29sLSZndDtjcV9wcm9kX2xvY2ssIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB4c2tfY3FfY2FuY2VsX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG4pCiB7CiAJc3Bpbl9sb2NrKCZhbXA7cG9vbC0mZ3Q7Y3EtJmd0O2NxX2NhY2hlZF9wcm9kX2xvY2spOwpAQCAtNzk0LDggJiM0Mzs5NTksMTEgQEAgc3RhdGljIHZvaWQgeHNrX2NvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiAKIHN0YXRpYyB2b2lkIHhza19kcm9wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXhkcF9zayhza2ItJmd0O3NrKS0mZ3Q7dHgtJmd0O2ludmFsaWRfZGVzY3MgJiM0Mzs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTsKLQl4c2tfY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJc3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhza2ItJmd0O3NrKTsKJiM0MzsKJiM0MzsJeHMtJmd0O3R4LSZndDtpbnZhbGlkX2Rlc2NzICYjNDM7PSB4c2tfZ2V0X251bV9kZXNjKHNrYik7CiYjNDM7CWNvbnN1bWVfc2tiKHNrYik7CiYjNDM7CXhzLSZndDtza2IgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLApAQCAtODc3LDcgJiM0MzsxMDQ1LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsCiAJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCQkvKiBpbiBjYXNlIG9mIC1FT1ZFUkZMT1cgdGhhdCBjb3VsZCBoYXBwZW4gYmVsb3csCi0JCSAqIHhza19jb25zdW1lX3NrYigpIHdpbGwgcmVsZWFzZSB0aGlzIG5vZGUgYXMgd2hvbGUgc2tiCiYjNDM7CQkgKiB4c2tfZHJvcF9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYgogCQkgKiB3b3VsZCBiZSBkcm9wcGVkLCB3aGljaCBpbXBsaWVzIGZyZWVpbmcgYWxsIGxpc3QgZWxlbWVudHMKIAkJICovCiAJCXhza19hZGRyLSZndDthZGRyc1t4c2tfYWRkci0mZ3Q7bnVtX2Rlc2NzXSA9IGRlc2MtJmd0O2FkZHI7CkBAIC05NjksNiAmIzQzOzExMzcsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cywKIAkJCQlnb3RvIGZyZWVfZXJyOwogCQkJfQogCiYjNDM7CQkJeHNrX2FkZHItJmd0O2FkZHJzW3hza19hZGRyLSZndDtudW1fZGVzY3NdID0gZGVzYy0mZ3Q7YWRkcjsKJiM0MzsKIAkJCWlmICh1bmxpa2VseShucl9mcmFncyA9PSAoTUFYX1NLQl9GUkFHUyAtIDEpICZhbXA7JmFtcDsgeHBfbWJfZGVzYyhkZXNjKSkpIHsKIAkJCQllcnIgPSAtRU9WRVJGTE9XOwogCQkJCWdvdG8gZnJlZV9lcnI7CkBAIC05ODYsOCAmIzQzOzExNTYsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cywKIAogCQkJc2tiX2FkZF9yeF9mcmFnKHNrYiwgbnJfZnJhZ3MsIHBhZ2UsIDAsIGxlbiwgUEFHRV9TSVpFKTsKIAkJCXJlZmNvdW50X2FkZChQQUdFX1NJWkUsICZhbXA7eHMtJmd0O3NrLnNrX3dtZW1fYWxsb2MpOwotCi0JCQl4c2tfYWRkci0mZ3Q7YWRkcnNbeHNrX2FkZHItJmd0O251bV9kZXNjc10gPSBkZXNjLSZndDthZGRyOwogCQl9CiAJfQogCkBAIC0xMDYwLDExICYjNDM7MTIyOCwyMiBAQCBzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spCiAJCQlnb3RvIG91dDsKIAkJfQogCiYjNDM7CQlpZiAodW5saWtlbHkoeHMtJmd0O2RyYWluX2NvbnQpKSB7CiYjNDM7CQkJeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoeHMtJmd0O3Bvb2wsICZhbXA7ZGVzYyk7CiYjNDM7CiYjNDM7CQkJeHMtJmd0O3R4LSZndDtpbnZhbGlkX2Rlc2NzJiM0MzsmIzQzOzsKJiM0MzsJCQl4c2txX2NvbnNfcmVsZWFzZSh4cy0mZ3Q7dHgpOwomIzQzOwkJCXhzLSZndDtkcmFpbl9jb250ID0geHBfbWJfZGVzYygmYW1wO2Rlc2MpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwogCQlza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCAmYW1wO2Rlc2MpOwogCQlpZiAoSVNfRVJSKHNrYikpIHsKIAkJCWVyciA9IFBUUl9FUlIoc2tiKTsKIAkJCWlmIChlcnIgIT0gLUVPVkVSRkxPVykKIAkJCQlnb3RvIG91dDsKJiM0MzsJCQlpZiAoeHBfbWJfZGVzYygmYW1wO2Rlc2MpKQomIzQzOwkJCQl4cy0mZ3Q7ZHJhaW5fY29udCA9IHRydWU7CiAJCQllcnIgPSAwOwogCQkJY29udGludWU7CiAJCX0KQEAgLTEwOTgsOSAmIzQzOzEyNzcsMjQgQEAgc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKQogCX0KIAogCWlmICh4c2txX2hhc19kZXNjcyh4cy0mZ3Q7dHgpKSB7CiYjNDM7CQlib29sIHJlY2xhaW1fZGVzYyA9IHhzLSZndDtza2IgfHwgeHMtJmd0O2RyYWluX2NvbnQ7CiYjNDM7CiYjNDM7CQlpZiAocmVjbGFpbV9kZXNjKSB7CiYjNDM7CQkJZXJyID0geHNrX2NxX3Jlc2VydmVfbG9ja2VkKHhzLSZndDtwb29sKTsKJiM0MzsJCQlpZiAoZXJyKSB7CiYjNDM7CQkJCWVyciA9IC1FQUdBSU47CiYjNDM7CQkJCWdvdG8gb3V0OwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKIAkJaWYgKHhzLSZndDtza2IpCiAJCQl4c2tfZHJvcF9za2IoeHMtJmd0O3NrYik7CiYjNDM7CiYjNDM7CQlpZiAocmVjbGFpbV9kZXNjKQomIzQzOwkJCXhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLSZndDtwb29sLCAmYW1wO2Rlc2MpOwomIzQzOwogCQl4c2txX2NvbnNfcmVsZWFzZSh4cy0mZ3Q7dHgpOwomIzQzOwkJeHMtJmd0O2RyYWluX2NvbnQgPSB4cF9tYl9kZXNjKCZhbXA7ZGVzYyk7CiAJfQogCiBvdXQ6CkBAIC0xNDgzLDcgJiM0MzsxNjc3LDggQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHIKIAkJCSAqIGFuZC9vciBkZXZpY2UuCiAJCQkgKi8KIAkJCXhzLSZndDtwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cywKLQkJCQkJCQkgICAgIHVtZW1feHMtJmd0O3VtZW0pOwomIzQzOwkJCQkJCQkgICAgIHVtZW1feHMtJmd0O3VtZW0sCiYjNDM7CQkJCQkJCSAgICAgZGV2LSZndDt4ZHBfemNfbWF4X3NlZ3MpOwogCQkJaWYgKCF4cy0mZ3Q7cG9vbCkgewogCQkJCWVyciA9IC1FTk9NRU07CiAJCQkJc29ja2ZkX3B1dChzb2NrKTsKQEAgLTE1MTUsNyAmIzQzOzE3MTAsOCBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcgogCQkJICogdXRpbGl6ZXMKIAkJCSAqLwogCQkJaWYgKHhzLSZndDt0eCAmYW1wOyZhbXA7ICF4cy0mZ3Q7cG9vbC0mZ3Q7dHhfZGVzY3MpIHsKLQkJCQllcnIgPSB4cF9hbGxvY190eF9kZXNjcyh4cy0mZ3Q7cG9vbCwgeHMpOwomIzQzOwkJCQllcnIgPSB4cF9hbGxvY190eF9kZXNjcyh4cy0mZ3Q7cG9vbCwgeHMsCiYjNDM7CQkJCQkJCWRldi0mZ3Q7eGRwX3pjX21heF9zZWdzKTsKIAkJCQlpZiAoZXJyKSB7CiAJCQkJCXhwX3B1dF9wb29sKHhzLSZndDtwb29sKTsKIAkJCQkJeHMtJmd0O3Bvb2wgPSBOVUxMOwpAQCAtMTUzMyw3ICYjNDM7MTcyOSw5IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9IGVsc2UgewogCQkvKiBUaGlzIHhzayBoYXMgaXRzIG93biB1bWVtLiAqLwotCQl4cy0mZ3Q7cG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsIHhzLSZndDt1bWVtKTsKJiM0MzsJCXhzLSZndDtwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cywgeHMtJmd0O3VtZW0sCiYjNDM7CQkJCQkJICAgICBkZXYtJmd0O3hkcF96Y19tYXhfc2Vncyk7CiYjNDM7CiAJCWlmICgheHMtJmd0O3Bvb2wpIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIG91dF91bmxvY2s7CmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19idWZmX3Bvb2wuYyBiL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jCmluZGV4IDFmMjhhOTY0MTU3MWU0Li5hNDA4OTQ4MGIyMmIyNSAxMDA2NDQKLS0tIGEvbmV0L3hkcC94c2tfYnVmZl9wb29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmMKQEAgLTQyLDE3ICYjNDM7NDIsMjIgQEAgdm9pZCB4cF9kZXN0cm95KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKQogCWt2ZnJlZShwb29sKTsKIH0KIAotaW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKQomIzQzO2ludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cywKJiM0MzsJCSAgICAgIHUzMiBtYXhfc2VncykKIHsKLQlwb29sLSZndDt0eF9kZXNjcyA9IGt2emFsbG9jX29ianMoKnBvb2wtJmd0O3R4X2Rlc2NzLCB4cy0mZ3Q7dHgtJmd0O25lbnRyaWVzKTsKJiM0MzsJdTMyIG5lbnRyaWVzID0gbWF4KHhzLSZndDt0eC0mZ3Q7bmVudHJpZXMsIG1heF9zZWdzKTsKJiM0MzsKJiM0MzsJcG9vbC0mZ3Q7dHhfZGVzY3MgPSBrdnphbGxvY19vYmpzKCpwb29sLSZndDt0eF9kZXNjcywgbmVudHJpZXMpOwogCWlmICghcG9vbC0mZ3Q7dHhfZGVzY3MpCiAJCXJldHVybiAtRU5PTUVNOwogCiYjNDM7CXBvb2wtJmd0O3R4X2Rlc2NzX25lbnRyaWVzID0gbmVudHJpZXM7CiAJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsCi0JCQkJCQlzdHJ1Y3QgeGRwX3VtZW0gKnVtZW0pCiYjNDM7CQkJCQkJc3RydWN0IHhkcF91bWVtICp1bWVtLAomIzQzOwkJCQkJCXUzMiBtYXhfc2VncykKIHsKIAlib29sIHVuYWxpZ25lZCA9IHVtZW0tJmd0O2ZsYWdzICZhbXA7IFhEUF9VTUVNX1VOQUxJR05FRF9DSFVOS19GTEFHOwogCXN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sOwpAQCAtNjksNyAmIzQzOzc0LDcgQEAgc3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cywKIAkJZ290byBvdXQ7CiAKIAlpZiAoeHMtJmd0O3R4KQotCQlpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMpKQomIzQzOwkJaWYgKHhwX2FsbG9jX3R4X2Rlc2NzKHBvb2wsIHhzLCBtYXhfc2VncykpCiAJCQlnb3RvIG91dDsKIAogCXBvb2wtJmd0O2NodW5rX21hc2sgPSB+KCh1NjQpdW1lbS0mZ3Q7Y2h1bmtfc2l6ZSAtIDEpOwpkaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2tfcXVldWUuaCBiL25ldC94ZHAveHNrX3F1ZXVlLmgKaW5kZXggM2UzZmJiNzNkMjNlMmYuLmExNWZmMTkyOWRiNjIzIDEwMDY0NAotLS0gYS9uZXQveGRwL3hza19xdWV1ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrX3F1ZXVlLmgKQEAgLTU4LDYgJiM0Mzs1OCwxOCBAQCBzdHJ1Y3QgcGFyc2VkX2Rlc2MgewogCXUzMiB2YWxpZDsKIH07CiAKJiM0MztzdHJ1Y3QgeHNrX3R4X2JhdGNoIHsKJiM0MzsJdTMyIHR4X2Rlc2NzOwomIzQzOwl1MzIgcmVjbGFpbV9kZXNjczsKJiM0MzsJdTMyIGNvbnN1bWVkX2Rlc2NzOwomIzQzOwlib29sIGJ1ZGdldF9saW1pdGVkOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1MzIgeHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGNvbnN0IHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJhdGNoLSZndDt0eF9kZXNjcyAmIzQzOyBiYXRjaC0mZ3Q7cmVjbGFpbV9kZXNjczsKJiM0Mzt9CiYjNDM7CiAvKiBUaGUgc3RydWN0dXJlIG9mIHRoZSBzaGFyZWQgc3RhdGUgb2YgdGhlIHJpbmdzIGFyZSBhIHNpbXBsZQogICogY2lyY3VsYXIgYnVmZmVyLCBhcyBvdXRsaW5lZCBpbgogICogRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9jaXJjdWxhci1idWZmZXJzLnJzdC4gRm9yIHRoZSBSeCBhbmQKQEAgLTI2MywxNyAmIzQzOzI3NSwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFyc2VfZGVzYyhzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwKIAlwYXJzZWQtJmd0O21iID0geHBfbWJfZGVzYyhkZXNjKTsKIH0KIAotc3RhdGljIGlubGluZQotdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsCi0JCQkgICAgICB1MzIgbWF4KQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHhza190eF9iYXRjaAomIzQzO3hza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsCiYjNDM7CQkJICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4KQogewotCXUzMiBjYWNoZWRfY29ucyA9IHEtJmd0O2NhY2hlZF9jb25zLCBuYl9lbnRyaWVzID0gMDsKLQlzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzID0gcG9vbC0mZ3Q7dHhfZGVzY3M7Ci0JdTMyIHRvdGFsX2Rlc2NzID0gMCwgbnJfZnJhZ3MgPSAwOwomIzQzOwlib29sIGRyYWluID0gUkVBRF9PTkNFKHhzLSZndDtkcmFpbl9jb250KTsKJiM0MzsJdTMyIGNhY2hlZF9jb25zLCBuYl9lbnRyaWVzID0gMCwgcmVsZWFzZWQ7CiYjNDM7CXN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTsKJiM0MzsJc3RydWN0IHhza19xdWV1ZSAqcSA9IHhzLSZndDt0eDsKJiM0MzsJdTMyIG5yX2ZyYWdzID0gMDsKJiM0MzsKJiM0MzsJY2FjaGVkX2NvbnMgPSBxLSZndDtjYWNoZWRfY29uczsKIAotCS8qIHRyYWNrIGZpcnN0IGVudHJ5LCBpZiBzdHVtYmxlIHVwb24gKmFueSogaW52YWxpZCBkZXNjcmlwdG9yLCByZXdpbmQKLQkgKiBjdXJyZW50IHBhY2tldCB0aGF0IGNvbnNpc3RzIG9mIGZyYWdzIGFuZCBzdG9wIHRoZSBwcm9jZXNzaW5nCi0JICovCiAJd2hpbGUgKGNhY2hlZF9jb25zICE9IHEtJmd0O2NhY2hlZF9wcm9kICZhbXA7JmFtcDsgbmJfZW50cmllcyAmbHQ7IG1heCkgewogCQlzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqcmluZyA9IChzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqKXEtJmd0O3Jpbmc7CiAJCXUzMiBpZHggPSBjYWNoZWRfY29ucyAmYW1wOyBxLSZndDtyaW5nX21hc2s7CkBAIC0yODIsMjYgJiM0MzsyOTUsNDkgQEAgdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsCiAJCWRlc2NzW25iX2VudHJpZXNdID0gcmluZy0mZ3Q7ZGVzY1tpZHhdOwogCQljYWNoZWRfY29ucyYjNDM7JiM0Mzs7CiAJCXBhcnNlX2Rlc2MocSwgcG9vbCwgJmFtcDtkZXNjc1tuYl9lbnRyaWVzXSwgJmFtcDtwYXJzZWQpOwotCQlpZiAodW5saWtlbHkoIXBhcnNlZC52YWxpZCkpCi0JCQlicmVhazsKJiM0MzsJCWlmICh1bmxpa2VseSghcGFyc2VkLnZhbGlkKSkgewomIzQzOwkJCWlmICghZHJhaW4gJmFtcDsmYW1wOyAhbnJfZnJhZ3MgJmFtcDsmYW1wOyAhcGFyc2VkLm1iKQomIzQzOwkJCQlicmVhazsKJiM0MzsKJiM0MzsJCQlkcmFpbiA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlucl9mcmFncyYjNDM7JiM0Mzs7CiYjNDM7CQluYl9lbnRyaWVzJiM0MzsmIzQzOzsKIAogCQlpZiAobGlrZWx5KCFwYXJzZWQubWIpKSB7Ci0JCQl0b3RhbF9kZXNjcyAmIzQzOz0gKG5yX2ZyYWdzICYjNDM7IDEpOwotCQkJbnJfZnJhZ3MgPSAwOwotCQl9IGVsc2UgewotCQkJbnJfZnJhZ3MmIzQzOyYjNDM7OwotCQkJaWYgKG5yX2ZyYWdzID09IHBvb2wtJmd0O3hkcF96Y19tYXhfc2VncykgewomIzQzOwkJCWlmICh1bmxpa2VseShkcmFpbikpIHsKJiM0MzsJCQkJYmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzOwomIzQzOwkJCQlXUklURV9PTkNFKHhzLSZndDtkcmFpbl9jb250LCBmYWxzZSk7CiAJCQkJbnJfZnJhZ3MgPSAwOwogCQkJCWJyZWFrOwogCQkJfQomIzQzOwomIzQzOwkJCWJhdGNoLnR4X2Rlc2NzICYjNDM7PSBucl9mcmFnczsKJiM0MzsJCQlucl9mcmFncyA9IDA7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobnJfZnJhZ3MgPT0gcG9vbC0mZ3Q7eGRwX3pjX21heF9zZWdzKQomIzQzOwkJCWRyYWluID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnJfZnJhZ3MpIHsKJiM0MzsJCWlmIChkcmFpbikgewomIzQzOwkJCWJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFnczsKJiM0MzsJCQlXUklURV9PTkNFKHhzLSZndDtkcmFpbl9jb250LCB0cnVlKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaWYgKG5iX2VudHJpZXMgPT0gbWF4KQomIzQzOwkJCQliYXRjaC5idWRnZXRfbGltaXRlZCA9IHRydWU7CiYjNDM7CQkJY2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7CiAJCX0KLQkJbmJfZW50cmllcyYjNDM7JiM0Mzs7CiAJfQogCi0JY2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7CiYjNDM7CXJlbGVhc2VkID0gY2FjaGVkX2NvbnMgLSBxLSZndDtjYWNoZWRfY29uczsKIAkvKiBSZWxlYXNlIHZhbGlkIHBsdXMgYW55IGludmFsaWQgZW50cmllcyAqLwotCXhza3FfY29uc19yZWxlYXNlX24ocSwgY2FjaGVkX2NvbnMgLSBxLSZndDtjYWNoZWRfY29ucyk7Ci0JcmV0dXJuIHRvdGFsX2Rlc2NzOwomIzQzOwl4c2txX2NvbnNfcmVsZWFzZV9uKHEsIHJlbGVhc2VkKTsKJiM0MzsJYmF0Y2guY29uc3VtZWRfZGVzY3MgPSByZWxlYXNlZDsKJiM0MzsJcmV0dXJuIGJhdGNoOwogfQogCiAvKiBGdW5jdGlvbnMgZm9yIGNvbnN1bWVycyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKaW5kZXggNmViOTA5NmQwODRjMDEuLjdhYmI0OTM1ZWRmOWFkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKQEAgLTQyNywxNCAmIzQzOzQyNywxNCBAQCBzdGF0aWMgdTMyIHBrdF9uYl9mcmFncyh1MzIgZnJhbWVfc2l6ZSwgc3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW0sIHN0cnVjdCBwawogCX0KIAogCS8qIFNlYXJjaCBmb3IgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGluIHZlcmJhdGltIG1vZGUgKi8KLQlpZiAoIXBrdF9jb250aW51ZXMocGt0LSZndDtvcHRpb25zKSB8fCAhcGt0LSZndDt2YWxpZCkKJiM0MzsJaWYgKCFwa3RfY29udGludWVzKHBrdC0mZ3Q7b3B0aW9ucykpCiAJCXJldHVybiBuYl9mcmFnczsKIAogCW5leHRfZnJhZyA9IHBrdF9zdHJlYW0tJmd0O2N1cnJlbnRfcGt0X25iOwogCXBrdCYjNDM7JiM0Mzs7CiAJd2hpbGUgKG5leHRfZnJhZyYjNDM7JiM0MzsgJmx0OyBwa3Rfc3RyZWFtLSZndDtuYl9wa3RzKSB7CiAJCW5iX2ZyYWdzJiM0MzsmIzQzOzsKLQkJaWYgKCFwa3RfY29udGludWVzKHBrdC0mZ3Q7b3B0aW9ucykgfHwgIXBrdC0mZ3Q7dmFsaWQpCiYjNDM7CQlpZiAoIXBrdF9jb250aW51ZXMocGt0LSZndDtvcHRpb25zKSkKIAkJCWJyZWFrOwogCQlwa3QmIzQzOyYjNDM7OwogCX0KQEAgLTY2NSwxMSAmIzQzOzY2NSwxMSBAQCBzdGF0aWMgc3RydWN0IHBrdF9zdHJlYW0gKl9fcGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgcwogCQkJaWYgKCFmcmFtZS0mZ3Q7dmFsaWQgfHwgIXBrdF9jb250aW51ZXMoZnJhbWUtJmd0O29wdGlvbnMpKQogCQkJCXBheWxvYWQmIzQzOyYjNDM7OwogCQl9IGVsc2UgewotCQkJaWYgKGZyYW1lLSZndDt2YWxpZCkKJiM0MzsJCQlpZiAoZnJhbWUtJmd0O3ZhbGlkKSB7CiAJCQkJbGVuICYjNDM7PSBmcmFtZS0mZ3Q7bGVuOwotCQkJaWYgKGZyYW1lLSZndDt2YWxpZCAmYW1wOyZhbXA7IHBrdF9jb250aW51ZXMoZnJhbWUtJmd0O29wdGlvbnMpKQotCQkJCWNvbnRpbnVlOwotCiYjNDM7CQkJCWlmIChwa3RfY29udGludWVzKGZyYW1lLSZndDtvcHRpb25zKSkKJiM0MzsJCQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJCXBrdC0mZ3Q7cGt0X25iID0gcGt0X25iOwogCQkJcGt0LSZndDtsZW4gPSBsZW47CiAJCQlwa3QtJmd0O3ZhbGlkID0gZnJhbWUtJmd0O3ZhbGlkOwpAQCAtMTIwOSw2ICYjNDM7MTIwOSw3IEBAIHN0YXRpYyBpbnQgX19zZW5kX3BrdHMoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLAogCWZvciAoaSA9IDA7IGkgJmx0OyB4c2stJmd0O2JhdGNoX3NpemU7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBwa3QgKnBrdCA9IHBrdF9zdHJlYW1fZ2V0X25leHRfdHhfcGt0KHBrdF9zdHJlYW0pOwogCQl1MzIgbmJfZnJhZ3NfbGVmdCwgbmJfZnJhZ3MsIGJ5dGVzX3dyaXR0ZW4gPSAwOwomIzQzOwkJc3RydWN0IHBrdCAqZmlyc3RfcGt0ID0gcGt0OwogCiAJCWlmICghcGt0KQogCQkJYnJlYWs7CkBAIC0xMjUzLDYgJiM0MzsxMjU0LDggQEAgc3RhdGljIGludCBfX3NlbmRfcGt0cyhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssCiAJCWlmIChwa3QgJmFtcDsmYW1wOyBwa3QtJmd0O3ZhbGlkKSB7CiAJCQl2YWxpZF9wa3RzJiM0MzsmIzQzOzsKIAkJCXZhbGlkX2ZyYWdzICYjNDM7PSBuYl9mcmFnczsKJiM0MzsJCX0gZWxzZSBpZiAocGt0X3N0cmVhbS0mZ3Q7dmVyYmF0aW0gJmFtcDsmYW1wOyBwa3RfY29udGludWVzKGZpcnN0X3BrdC0mZ3Q7b3B0aW9ucykpIHsKJiM0MzsJCQl2YWxpZF9mcmFncyAmIzQzOz0gbmJfZnJhZ3M7CiAJCX0KIAl9CiAKQEAgLTIwOTksMTMgJiM0MzsyMTAyLDE2IEBAIGludCB0ZXN0YXBwX2ludmFsaWRfZGVzY19tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogCQl7MCwgMCwgMCwgZmFsc2UsIDB9LAogCQkvKiBJbnZhbGlkIGFkZHJlc3MgaW4gdGhlIHNlY29uZCBmcmFtZSAqLwogCQl7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSwKLQkJe3VtZW1fc3osIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7dW1lbV9zeiAqIDIsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sCiAJCS8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi8KIAkJezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiAJCXswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sCiAJCS8qIEludmFsaWQgb3B0aW9ucyBpbiB0aGUgbWlkZGxlICovCiAJCXswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LAogCQl7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYU0tfREVTQ19fSU5WQUxJRF9PUFRJT059LAomIzQzOwkJezAsIE1JTl9QS1RfU0laRSwgMCwgZmFsc2UsIDB9LAogCQkvKiBUcmFuc21pdCAyIGZyYWdzLCByZWNlaXZlIDMgKi8KIAkJezAsIFhTS19VTUVNX19NQVhfRlJBTUVfU0laRSwgMCwgdHJ1ZSwgWERQX1BLVF9DT05URH0sCiAJCXswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIDB9LApAQCAtMjExNyw4ICYjNDM7MjEyMyw4IEBAIGludCB0ZXN0YXBwX2ludmFsaWRfZGVzY19tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogCiAJaWYgKHVtZW0tJmd0O3VuYWxpZ25lZF9tb2RlKSB7CiAJCS8qIENyb3NzaW5nIGEgY2h1bmsgYm91bmRhcnkgYWxsb3dlZCAqLwotCQlwa3RzWzEyXS52YWxpZCA9IHRydWU7Ci0JCXBrdHNbMTNdLnZhbGlkID0gdHJ1ZTsKJiM0MzsJCXBrdHNbMTVdLnZhbGlkID0gdHJ1ZTsKJiM0MzsJCXBrdHNbMTZdLnZhbGlkID0gdHJ1ZTsKIAl9CiAKIAl0ZXN0LSZndDttdHUgPSBNQVhfRVRIX0pVTUJPX1NJWkU7CkBAIC0yMjcwLDcgJiM0MzsyMjc2LDcgQEAgaW50IHRlc3RhcHBfdG9vX21hbnlfZnJhZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKIAkJbWF4X2ZyYWdzICYjNDM7PSAxOwogCX0KIAotCXBrdHMgPSBjYWxsb2MoMiAqIG1heF9mcmFncyAmIzQzOyAyLCBzaXplb2Yoc3RydWN0IHBrdCkpOwomIzQzOwlwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgJiM0MzsgMywgc2l6ZW9mKHN0cnVjdCBwa3QpKTsKIAlpZiAoIXBrdHMpCiAJCXJldHVybiBURVNUX0ZBSUxVUkU7CiAKQEAgLTIyODgsMjQgJiM0MzsyMjk0LDMwIEBAIGludCB0ZXN0YXBwX3Rvb19tYW55X2ZyYWdzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJfQogCXBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDsKIAotCS8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0Ci0JICogY29udGludWVzIG9uIHRoZSBsYXN0IGZyYWcKLQkgKi8KLQlmb3IgKGkgPSBtYXhfZnJhZ3MgJiM0MzsgMTsgaSAmbHQ7IDIgKiBtYXhfZnJhZ3MgJiM0MzsgMTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJLyogQW4gaW52YWxpZCBwYWNrZXQgd2l0aCB0aGUgbWF4ICYjNDM7IDEgYW1vdW50IG9mIGZyYWdzICovCiYjNDM7CWZvciAoaSA9IG1heF9mcmFncyAmIzQzOyAxOyBpICZsdDsgMiAqIG1heF9mcmFncyAmIzQzOyAyOyBpJiM0MzsmIzQzOykgewogCQlwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTsKIAkJcGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDsKLQkJcGt0c1tpXS52YWxpZCA9IGZhbHNlOwomIzQzOwkJcGt0c1tpXS52YWxpZCA9IHRydWU7CiAJfQomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0ub3B0aW9ucyA9IDA7CiAKIAkvKiBWYWxpZCBwYWNrZXQgZm9yIHN5bmNoICovCi0JcGt0c1syICogbWF4X2ZyYWdzICYjNDM7IDFdLmxlbiA9IE1JTl9QS1RfU0laRTsKLQlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0udmFsaWQgPSB0cnVlOwomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMl0ubGVuID0gTUlOX1BLVF9TSVpFOwomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMl0udmFsaWQgPSB0cnVlOwogCi0JaWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMikpIHsKJiM0MzsJaWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMykpIHsKIAkJZnJlZShwa3RzKTsKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAl9CiAKJiM0MzsJLyogVGhlIGdlbmVyYXRlZCBUeCBzdHJlYW0gbXVzdCBrZWVwIHRoZSB0b28tYmlnIHBhY2tldCB2YWxpZCBzbyB0aGF0CiYjNDM7CSAqIF9fc2VuZF9wa3RzKCkgYWNjb3VudHMgaXRzIGRlc2NyaXB0b3JzIGluIG91dHN0YW5kaW5nX3R4LiBUaGUgUngKJiM0MzsJICogc3RyZWFtLCBob3dldmVyLCBtdXN0IG5vdCBleHBlY3QgdGhpcyBwYWNrZXQgb24gdGhlIHdpcmUuCiYjNDM7CSAqLwomIzQzOwl0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrLSZndDtwa3Rfc3RyZWFtLSZndDtwa3RzWzJdLnZhbGlkID0gZmFsc2U7CiYjNDM7CXRlc3QtJmd0O2lmb2JqX3J4LSZndDt4c2stJmd0O3BrdF9zdHJlYW0tJmd0O25iX3ZhbGlkX2VudHJpZXMtLTsKJiM0MzsKIAlyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7CiAJZnJlZShwa3RzKTsKIAlyZXR1cm4gcmV0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAyMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA0MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFGX1hEUCBNdWx0aS1CdWZmZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBBRl9YRFAsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBtdWx0aS1idWZmZXIgcGFja2V0cy4gSXQmIzM5O3MgdG91Y2hpbmcgYSBsb3Qgb2Yga2V5IGFyZWFzOiBgeGRwX3NvY2suaGAsIGB4c2tfYnVmZl9wb29sLmhgLCBhbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZmlsZXMgbGlrZSBgeHNrLmNgLCBgeHNrX2J1ZmZfcG9vbC5jYCwgYW5kIGB4c2tfcXVldWUuaGAsIGFsb25nIHdpdGggaXRzIHNlbGZ0ZXN0cy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWJvdXQgaW1wcm92aW5nIGhvdyB3ZSBkZWFsIHdpdGggaW52YWxpZCBkZXNjcmlwdG9ycyBvciBzaXR1YXRpb25zIHdoZXJlIHdlIGhhdmUgdG9vIG1hbnkgcGFja2V0IGZyYWdtZW50cy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGVyZm9ybWFuY2UgYW5kIGVycm9yIGhhbmRsaW5nIGltcHJvdmVtZW50LiBUaGV54oCZdmUgaW50cm9kdWNlZCBhIGBkcmFpbl9jb250YCBmaWVsZCBpbiBgeGRwX3NvY2tgIGFuZCBhIGB4c2tfdHhfYmF0Y2hgIHN0cnVjdHVyZSB0byBoYW5kbGUgZGVzY3JpcHRvciBiYXRjaGluZyBhbmQgcmVjbGFtYXRpb24sIHdoaWNoIEkgdGhpbmsgaXMgYSBzbWFydCBtb3ZlLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IEFGX1hEUCBpcywgaW4gZmFjdCwgYW4gYWN0aXZlLCBjb3JlIHBpZWNlIG9mIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eS4gWWVwLCB0aGF0JiMzOTtzIGNvcnJlY3QuIEdvb2QsIHdlIGNhbiBmb2N1cyBvdXIgZWZmb3J0cyBoZXJlLiBBbmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcywgZnV6emluZyB0aGlzIHBhdGNoIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIHRvIGVuc3VyZSBpdHMgcm9idXN0bmVzcy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEl0JiMzOTtzIG9idmlvdXNseSBkZXBlbmRlbnQgb24gYENPTkZJR19YRFBfU09DS0VUUz15YCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTD15YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIAoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggaXMgY2xlYXJseSB6ZXJvaW5nIGluIG9uIGEgbnVtYmVyIG9mIGtleSBmdW5jdGlvbnM6IGB4c2tfdHhfY29tcGxldGVkYCwgYHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2tgLCBhIG5ldyBiYXRjaGluZyBmdW5jdGlvbjogYHhza190eF9jb21taXRfYmF0Y2hgLCBzZXZlcmFsIG5ldyBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCB2YXJpYW50cywgdGhlIGB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZGAgYW5kIHNvbWUgY29yZSBoYW5kbGluZyBmdW5jdGlvbnMgZm9yIGRyb3AsIGJ1aWxkaW5nIGFuZCB0cmFuc21pc3Npb24gdmlhIGB4c2tfZHJvcF9za2JgLCBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAsIGB4c2tfYnVpbGRfc2tiYCwgYW5kIGBfX3hza19nZW5lcmljX3htaXRgLCBwbHVzIHNvbWUgc2V0dXAgZnVuY3Rpb25zIGxpa2UgYHhza19iaW5kYCwgYHhwX2FsbG9jX3R4X2Rlc2NzYCwgYHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW1gLCBhbmQgYHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2hgLiBUaGF0JiMzOTtzIHF1aXRlIGEgd2lkZSBpbXBhY3QsIHNvIEkmIzM5O2xsIHdhbnQgdG8gZm9jdXMgc3BlY2lmaWNhbGx5IG9uIHRob3NlIGZ1bmN0aW9ucy4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXBzIHdpbGwgYmUgdG8gZ3JlcCBmb3IgYHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAgYW5kIGBfX3hza19nZW5lcmljX3htaXRgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGJlaW5nIHVzZWQgaW4gdGhlIGNvZGUgYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBwcmltYXJ5IHNjb3BlIG9mIHRoZSBjaGFuZ2VzIGFuZCBndWlkZSBteSBkZWVwIGRpdmUgaW50byB0aGUgcGF0Y2gmIzM5O3MgaW1wbGVtZW50YXRpb24gYW5kIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMjM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYz03OTE9c3RhdGljIHZvaWQgdHNuZXBfeGRwX3htaXRfemMoc3RydWN0IHRzbmVwX3R4ICp0eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtODA0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjgwNTpcdGJhdGNoID0geHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHR4LVx1MDAzZXhza19wb29sLCBkZXNjX2F2YWlsYWJsZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtODA2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYmF0Y2g7IGkmIzQzOyYjNDM7KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi14c2suYz0zOTA9Ym9vbCBkcGFhMl94c2tfdHgoc3RydWN0IGRwYWEyX2V0aF9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi14c2suYy00MDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmM6NDEwOlx0YmF0Y2ggPSB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goY2gtXHUwMDNleHNrX3Bvb2wsIGJ1ZGdldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmMtNDExLVx0aWYgKCFiYXRjaClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz0xNDgyPXN0YXRpYyBib29sIGZlY19lbmV0X3hza194bWl0KHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMTUwNS1cdGJ1ZGdldCA9IG1pbihmcmVlX2JkcywgRkVDX1hTS19UWF9CVURHRVRfTUFYKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjE1MDY6XHRiYXRjaCA9IHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCBidWRnZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMTUwNy1cdGlmICghYmF0Y2gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jPTU3OT1zdGF0aWMgYm9vbCBpNDBlX3htaXRfemMoc3RydWN0IGk0MGVfcmluZyAqeGRwX3JpbmcsIHVuc2lnbmVkIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jLTU4NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYzo1ODU6XHRuYl9wa3RzID0geHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHhkcF9yaW5nLVx1MDAzZXhza19wb29sLCBidWRnZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jLTU4Ni1cdGlmICghbmJfcGt0cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5jPTc5MT1ib29sIGljZV94bWl0X3pjKHN0cnVjdCBpY2VfdHhfcmluZyAqeGRwX3JpbmcsIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4c2tfcG9vbClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5jLTgwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmM6ODA3Olx0bmJfcGt0cyA9IHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCh4c2tfcG9vbCwgYnVkZ2V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmMtODA4LVx0aWYgKCFuYl9wa3RzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfeHNrLmM9NDY1PWJvb2wgaWdiX3htaXRfemMoc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHNrX3Bvb2wpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl94c2suYy00ODAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3hzay5jOjQ4MTpcdG5iX3BrdHMgPSB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goeHNrX3Bvb2wsIGJ1ZGdldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3hzay5jLTQ4Mi1cdGlmICghbmJfcGt0cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suYz0yMjg9dm9pZCBvdHgyX3pjX25hcGlfaGFuZGxlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3hzay5jLTIzNC1cdGJ1ZGdldCA9IG1pbihidWRnZXQsIG90eDJfcmVhZF9mcmVlX3NxZShwZnZmLCBxdWV1ZSkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmM6MjM1Olx0YmF0Y2ggPSB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gocG9vbCwgYnVkZ2V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3hzay5jLTIzNi1cdGlmICghYmF0Y2gpXG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTE0MDU9c3RhdGljIGludCB2aXJ0bmV0X3hza194bWl0X2JhdGNoKHN0cnVjdCBzZW5kX3F1ZXVlICpzcSxcbi0tXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtMTQxNi1cbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYzoxNDE3Olx0bmJfcGt0cyA9IHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCBidWRnZXQpO1xuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTE0MTgtXHRpZiAoIW5iX3BrdHMpXG4tLVxuaW5jbHVkZS9uZXQvbGliZXRoL3hzay5oPTI4NT1saWJldGhfeHNrX3htaXRfZG9fYnVsayhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdm9pZCAqeGRwc3EsIHUzMiBidWRnZXQsXG4tLVxuaW5jbHVkZS9uZXQvbGliZXRoL3hzay5oLTI5OS1cbmluY2x1ZGUvbmV0L2xpYmV0aC94c2suaDozMDA6XHRuID0geHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHBvb2wsIGJ1ZGdldCk7XG5pbmNsdWRlL25ldC9saWJldGgveHNrLmgtMzAxLVx0YnVsayA9IGNvbnRhaW5lcl9vZihcdTAwMjZwb29sLVx1MDAzZXR4X2Rlc2NzWzBdLCB0eXBlb2YoKmJ1bGspLCBkZXNjKTtcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaD0yOD1ib29sIHhza190eF9wZWVrX2Rlc2Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYyk7XG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDoyOTp1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4KTtcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTMwLXZvaWQgeHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuLS1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oPTMwOT1zdGF0aWMgaW5saW5lIGJvb2wgeHNrX3R4X3BlZWtfZGVzYyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC0zMTQtXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDozMTU6c3RhdGljIGlubGluZSB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4KVxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtMzE2LXtcbi0tXG5uZXQveGRwL3hzay5jPTYyMz1zdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxubmV0L3hkcC94c2suYzo2MjQ6X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTYyNS1cdFx0XHRcdCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4X2Rlc2NzKVxuLS1cbm5ldC94ZHAveHNrLmM9NjUwPXhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXG4tLVxubmV0L3hkcC94c2suYy02OTItXG5uZXQveGRwL3hzay5jOjY5MzpcdFx0Y3Vycl9iYXRjaCA9IF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHBvb2wsIHhzLFxubmV0L3hkcC94c2suYy02OTQtXHRcdFx0XHRcdFx0XHQgICAgICBwb29sLVx1MDAzZXR4X2Rlc2NzICYjNDM7IG9mZnNldCxcbi0tXG5uZXQveGRwL3hzay5jLTcyNC1cbm5ldC94ZHAveHNrLmM6NzI1OnUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxubmV0L3hkcC94c2suYy03MjYte1xuLS1cbm5ldC94ZHAveHNrLmMtNzYyLVx0XHR4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoKHBvb2wsIG5iX3BrdHMpIDpcbm5ldC94ZHAveHNrLmM6NzYzOlx0XHRfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcbm5ldC94ZHAveHNrLmMtNzY0LVx0XHRcdFx0XHRcdCBwb29sLVx1MDAzZXR4X2Rlc2NzLFxuLS1cbm5ldC94ZHAveHNrLmMtNzcxLX1cbm5ldC94ZHAveHNrLmM6NzcyOkVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKTtcbm5ldC94ZHAveHNrLmMtNzczLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDIzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzU5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUZfWERQIFRYIFBhdGggTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBBRl9YRFAgdHJhbnNtaXNzaW9uIHBhdGgsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBtdWx0aS1idWZmZXIgcGFja2V0cyBhbmQgaW52YWxpZCBkZXNjcmlwdG9ycy4gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUga2V5IGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGlzIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCB3aGljaCBpcyBwcmV0dHkgZnVuZGFtZW50YWwgc2luY2UgdmFyaW91cyBkcml2ZXJzIOKAkyB0c25lcCwgZHBhYTIsIGZlYywgaTQwZSwgaWNlLCBpZ2IsIG9jdGVvbnR4MiwgdmlydGlvX25ldCwgbGliZXRoLCBhbmQgdGhlIGdlbmVyaWMgWERQIHRyYW5zbWlzc2lvbiB2aWEgYF9feHNrX2dlbmVyaWNfeG1pdGAg4oCTIGFsbCByZWx5IG9uIGl0LgoKRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWdzIGFyZSBlbmFibGVkOiBgWERQX1NPQ0tFVFNgIGFuZCBgQlBGX1NZU0NBTExgIGFyZSB0aGUga2V5IG9uZXMsIHdpdGggYENPTkZJR19YRFBfU09DS0VUU2AgYmVpbmcgdGhlIHByaW1hcnkgZW5hYmxlci4KCk5vdywgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGNvcmUgY2hhbmdlcy4gVGhlIGluaXRpYWwgbGlzdCBpbmNsdWRlZCBhIGJyb2FkZXIgc2V0IG9mIHN5bWJvbHMuIFNpbmNlIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgICppcyogdGhlIG1haW4gVFggZnVuY3Rpb24gZm9yIEFGX1hEUCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBkaWZmZXJlbnQgaW4gdGhlICptb2RpZmllZCogbG9naWMuIFRoZSBuZXcgZnVuY3Rpb25zLCBsaWtlIGB4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoYCBhbmQgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCBhcmUgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIGB4c2tfdHhfY29tbWl0X2JhdGNoYCwgYW5kIGB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZGAgYXJlIGNvbXBsZXRlbHkgbmV3IGVudHJpZXMgaW4gdGhlIGZsb3cuIFRoZSBgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaGAgZnVuY3Rpb24gaXMgYmVpbmcgYWx0ZXJlZC4KClRoZXJlZm9yZSwgbXkgZm9jdXMgc2hvdWxkIGJlIG9uOgoKKiAgIGB4c2tfdHhfY29tbWl0X2JhdGNoYAoqICAgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYAoqICAgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgCiogICBgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRgCiogICBgeHNrX2J1aWxkX3NrYmAKKiAgIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YAoqICAgYF9feHNrX2dlbmVyaWNfeG1pdGAKCkdvb2QsIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgIGlzIGV4cG9ydGVkIGFzIGBFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaClgLCBzbyBpdCBpcyBwdWJsaWNseSBhdmFpbGFibGUuIEkgd2lsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIGRyaXZlcnMgdGhhdCBhcmUgcmVseWluZyBvbiB0aGlzIGNyaXRpY2FsIGZ1bmN0aW9uLCBwYXJ0aWN1bGFybHkgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZXNlIG5ldyBmdW5jdGlvbnMgaW4gdGhlIGRhdGEgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAyMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3hza19nZW5lcmljX3htaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQveGRwX3NvY2suaD00OD1zdHJ1Y3QgeGRwX3NvY2sge1xuLS1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmgtNzctXG5pbmNsdWRlL25ldC94ZHBfc29jay5oOjc4Olx0LyogV2hlbiBfX3hza19nZW5lcmljX3htaXQoKSBtdXN0IHJldHVybiBiZWZvcmUgaXQgc2VlcyB0aGUgRU9QIGRlc2NyaXB0b3IgZm9yIHRoZSBjdXJyZW50XG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTc5LVx0ICogcGFja2V0LCB0aGUgcGFydGlhbGx5IGJ1aWx0IHNrYiBpcyBzYXZlZCBoZXJlIHNvIHRoYXQgcGFja2V0IGJ1aWxkaW5nIGNhbiByZXN1bWUgaW4gbmV4dFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaDo4MDpcdCAqIGNhbGwgb2YgX194c2tfZ2VuZXJpY194bWl0KCkuXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTgxLVx0ICovXG4tLVxubmV0L3hkcC94c2suYz0xMDg3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTE5Mi1cbm5ldC94ZHAveHNrLmM6MTE5MzpzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTExOTQte1xuLS1cbm5ldC94ZHAveHNrLmM9MTMwOD1zdGF0aWMgaW50IHhza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZHAveHNrLmMtMTMxMy1cdHJjdV9yZWFkX3VubG9jaygpO1xubmV0L3hkcC94c2suYzoxMzE0Olx0cmV0ID0gX194c2tfZ2VuZXJpY194bWl0KHNrKTtcbm5ldC94ZHAveHNrLmMtMTMxNS1cdC8qIFJlYXF1aXJlIFJDVSBsb2NrIGJlZm9yZSBnb2luZyBpbnRvIGNvbW1vbiBjb2RlLiAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmM9ODk4PXN0YXRpYyBib29sIGtpY2tfdHhfd2l0aF9jaGVjayhzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIGludCAqcmV0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMtOTEwLVx0ICogc2VuZCBpbiB0aGlzIGNhc2Ugd2hlcmUgaGl0dGluZyB0aGUgbWF4IGJ1ZGdldCBsaW1pdCBpbiB3aGlsZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYzo5MTE6XHQgKiBsb29wIGlzIHRyaWdnZXJlZCBpbiBfX3hza19nZW5lcmljX3htaXQoKS4gUGxlYXNlIG1ha2Ugc3VyZSB0aGF0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jLTkxMi1cdCAqIHRoZSBudW1iZXIgb2YgZGVzY3MgdG8gYmUgc2VudCBpcyBsYXJnZXIgdGhhbiBAbWF4X2J1ZGdldCwgb3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAyMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA4MQoJCQkJCQkJb3V0cHV0OiAyMDYKCQkJCQkJCXRob3VnaHRzOiA0NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQUZfWERQIE11bHRpLUJ1ZmZlciBCdWcgRml4IEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgYnVnIGluIEFGX1hEUCYjMzk7cyBtdWx0aS1idWZmZXIgaGFuZGxpbmcuIE15IGZpcnN0IHRob3VnaHQgaXMsIHRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBlc3BlY2lhbGx5IHdpdGggdGhlIHJpc2Ugb2YgWERQIGFuZCBBRl9YRFAuIFRoaXMgZml4IGludHJvZHVjZXMgYGRyYWluX2NvbnRgLCB3aGljaCBpcyB1c2VkIHRvIHRyYWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgcGFja2V0IGlzIGJlaW5nIGRyYWluZWQgYmVjYXVzZSBvZiBlaXRoZXIgaW52YWxpZCBkZXNjcmlwdG9ycyBvciBleGNlZWRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYWdtZW50cy4gVGhhdCBtYWtlcyBzZW5zZSwgd2UgbmVlZCByb2J1c3QgZXJyb3IgaGFuZGxpbmcgaW4gdGhpcyBzZWN0aW9uLgoKVGhlIGBYRFBfU09DS0VUU2AgY29uZmlnIGlzIHdoYXQgd2UmIzM5O3JlIHRhcmdldGluZyBoZXJlLCB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgZHJpdmluZyB0aGlzIEFGX1hEUCBiZWhhdmlvci4gTGV0IG1lIHNlZS4uLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb246IGB4c2tfdHhfY29tbWl0X2JhdGNoYCwgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCwgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgLCBgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRgLCBgeHNrX2J1aWxkX3NrYmAsIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YCwgYF9feHNrX2dlbmVyaWNfeG1pdGAsIGFuZCBgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaGAuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBgQ09ORklHX1hEUF9TT0NLRVRTYCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWcgZm9yIEFGX1hEUCBpbiB0aGlzIGNvbnRleHQuIFllcCwgdGhhdCYjMzk7cyB0aGUgb25lLiBOb3csIGxldCYjMzk7cyBjaGVjayB0aGUgdmlzaWJpbGl0eSBvZiB0aG9zZSBzeW1ib2xzLiBMb29rcyBsaWtlIGB4c2tfdHhfY29tbWl0X2JhdGNoYCwgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCwgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgLCBgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRgLCBgeHNrX2J1aWxkX3NrYmAsIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YCwgYW5kIGBfX3hza19nZW5lcmljX3htaXRgIGFyZSBhbGwgc3RhdGljLCBhbmQgYHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2hgIGlzIHN0YXRpYyBpbmxpbmUuCgpTbywgd2UgY2FuIG1ha2UgYSBjbGVhbiBsaXN0IG9mIHRoZSBub24taW5saW5lIG9uZXMuCgpPa2F5LCBteSByZWFzb25pbmcgaGVyZSBpczogdGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyB3ZSBoYW5kbGUgbXVsdGktYnVmZmVyIHBhY2tldHMuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhYm91dCBoYW5kbGluZyBwYWNrZXRzIHdpdGggYmFkIGRlc2NyaXB0b3JzIG9yIHRvbyBtYW55IGZyYWdtZW50cy4gVGhpcyBhZmZlY3RzIHRoZSB0cmFuc21pc3Npb24gbG9naWMgb2YgQUZfWERQIGFuZCBpbnRyb2R1Y2VzIG5ldyBkZXNjcmlwdG9yIGJhdGNoaW5nIGFuZCByZWNsYWltaW5nLCB3aGljaCBhbHNvIHRvdWNoZXMgdGhlIGdlbmVyaWMgWERQIHRyYW5zbWl0IHBhdGggZm9yIGRyYWluaW5nIGJhZCBwYWNrZXRzLiBUaGlzIGlzICpjb3JlKiBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHksIGFuZCB0aGlzIGlzIHJlYWNoYWJsZSB2aWEgQUZfWERQIHNvY2tldHMgZnJvbSB1c2Vyc3BhY2UuIFdoaWNoIG1lYW5zLi4uIGZ1enppbmchIExldCYjMzk7cyBnZXQgdGhlIHJlc3VsdHMgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDIzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza190eF9jb21taXRfYmF0Y2gmIzM0OywKICAgICYjMzQ7X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaCYjMzQ7LAogICAgJiMzNDt4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCYjMzQ7LAogICAgJiMzNDt4c2tfYnVpbGRfc2tiJiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2JfemVyb2NvcHkmIzM0OywKICAgICYjMzQ7X194c2tfZ2VuZXJpY194bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgdHJhbnNtaXNzaW9uIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgbXVsdGktYnVmZmVyIHBhY2tldHMgd2l0aCBpbnZhbGlkIGRlc2NyaXB0b3JzIG9yIGV4Y2VlZGluZyB0aGUgbWF4aW11bSBhbGxvd2VkIGZyYWdtZW50cy4gSXQgaW50cm9kdWNlcyBuZXcgYmF0Y2hpbmcgYW5kIHJlY2xhaW1pbmcgbG9naWMgZm9yIGRlc2NyaXB0b3JzLCBhbmQgdXBkYXRlcyB0aGUgZ2VuZXJpYyBYRFAgdHJhbnNtaXQgcGF0aCB0byBkcmFpbiBpbnZhbGlkIHBhY2tldHMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1hEUCBzb2NrZXRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza190eF9jb21taXRfYmF0Y2gmIzM0OywKICAgICYjMzQ7X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaCYjMzQ7LAogICAgJiMzNDt4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCYjMzQ7LAogICAgJiMzNDt4c2tfYnVpbGRfc2tiJiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2JfemVyb2NvcHkmIzM0OywKICAgICYjMzQ7X194c2tfZ2VuZXJpY194bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgdHJhbnNtaXNzaW9uIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgbXVsdGktYnVmZmVyIHBhY2tldHMgd2l0aCBpbnZhbGlkIGRlc2NyaXB0b3JzIG9yIGV4Y2VlZGluZyB0aGUgbWF4aW11bSBhbGxvd2VkIGZyYWdtZW50cy4gSXQgaW50cm9kdWNlcyBuZXcgYmF0Y2hpbmcgYW5kIHJlY2xhaW1pbmcgbG9naWMgZm9yIGRlc2NyaXB0b3JzLCBhbmQgdXBkYXRlcyB0aGUgZ2VuZXJpYyBYRFAgdHJhbnNtaXQgcGF0aCB0byBkcmFpbiBpbnZhbGlkIHBhY2tldHMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1hEUCBzb2NrZXRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTRUMjM6NTY6MjYuNTk5NTQzMzUyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0NjkxMjE0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfdHhfY29tbWl0X2JhdGNoXCIsXG4gICAgXCJfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRcIixcbiAgICBcInhza19idWlsZF9za2JcIixcbiAgICBcInhza19idWlsZF9za2JfemVyb2NvcHlcIixcbiAgICBcIl9feHNrX2dlbmVyaWNfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgdHJhbnNtaXNzaW9uIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgbXVsdGktYnVmZmVyIHBhY2tldHMgd2l0aCBpbnZhbGlkIGRlc2NyaXB0b3JzIG9yIGV4Y2VlZGluZyB0aGUgbWF4aW11bSBhbGxvd2VkIGZyYWdtZW50cy4gSXQgaW50cm9kdWNlcyBuZXcgYmF0Y2hpbmcgYW5kIHJlY2xhaW1pbmcgbG9naWMgZm9yIGRlc2NyaXB0b3JzLCBhbmQgdXBkYXRlcyB0aGUgZ2VuZXJpYyBYRFAgdHJhbnNtaXQgcGF0aCB0byBkcmFpbiBpbnZhbGlkIHBhY2tldHMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1hEUCBzb2NrZXRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQyMzo1NjoyNi41OTk1NDkwNTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTkzOTgxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwOWRiM2U0MDgwMDIxY2E0OGRlNTZiMTdkMzEwZDcyMjMwM2FjYzhjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDE0IDIzOjU2OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmggYi9pbmNsdWRlL25ldC94ZHBfc29jay5oXFxuaW5kZXggZWJhYzYwYTNkOGExN2IuLjhiNTE4NzZlZmJlZDFhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcXG4rKysgYi9pbmNsdWRlL25ldC94ZHBfc29jay5oXFxuQEAgLTgwLDYgKzgwLDcgQEAgc3RydWN0IHhkcF9zb2NrIHtcXG4gXFx0ICogY2FsbCBvZiBfX3hza19nZW5lcmljX3htaXQoKS5cXG4gXFx0ICovXFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdGJvb2wgZHJhaW5fY29udDtcXG4gXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbWFwX2xpc3Q7XFxuIFxcdC8qIFByb3RlY3RzIG1hcF9saXN0ICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaCBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxcbmluZGV4IGNjYjNiMzUwMDAxZjI0Li4yYmIxZDEyMmIxYmM2YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcXG4rKysgYi9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcXG5AQCAtNzgsNiArNzgsOSBAQCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCB7XFxuIFxcdHUzMiBjaHVua19zaXplO1xcbiBcXHR1MzIgY2h1bmtfc2hpZnQ7XFxuIFxcdHUzMiBmcmFtZV9sZW47XFxuK1xcdHUzMiB0eF9kZXNjc19uZW50cmllcztcXG4rXFx0dTMyIHJlY2xhaW1fZGVzY3M7XFxuK1xcdHUzMiB0eF96Y19wZW5kaW5nX2Rlc2NzO1xcbiBcXHR1MzIgeGRwX3pjX21heF9zZWdzO1xcbiBcXHR1OCB0eF9tZXRhZGF0YV9sZW47IC8qIGluaGVyaXRlZCBmcm9tIHVtZW0gKi9cXG4gXFx0dTggY2FjaGVkX25lZWRfd2FrZXVwO1xcbkBAIC0xMDIsMTIgKzEwNSwxNCBAQCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCB7XFxuIFxcbiAvKiBBRl9YRFAgY29yZS4gKi9cXG4gc3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHhkcF91bWVtICp1bWVtKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHhkcF91bWVtICp1bWVtLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR1MzIgbWF4X3NlZ3MpO1xcbiBpbnQgeHBfYXNzaWduX2RldihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0ICB1MTYgcXVldWVfaWQsIHUxNiBmbGFncyk7XFxuIGludCB4cF9hc3NpZ25fZGV2X3NoYXJlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp1bWVtX3hzLFxcbiBcXHRcXHRcXHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHF1ZXVlX2lkKTtcXG4taW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKTtcXG4raW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbitcXHRcXHQgICAgICB1MzIgbWF4X3NlZ3MpO1xcbiB2b2lkIHhwX2Rlc3Ryb3koc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xcbiB2b2lkIHhwX2dldF9wb29sKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcXG4gYm9vbCB4cF9wdXRfcG9vbChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XFxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXFxuaW5kZXggYjk3MGYzMGVhOWI5ZDguLjI5MDlhMGVjNjgzNzMxIDEwMDY0NFxcbi0tLSBhL25ldC94ZHAveHNrLmNcXG4rKysgYi9uZXQveGRwL3hzay5jXFxuQEAgLTQ5OSw2ICs0OTksMjMgQEAgdm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdClcXG4gXFxuIHZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXFxuIHtcXG4rXFx0dTMyIHJlY2xhaW1fZGVzY3MgPSBSRUFEX09OQ0UocG9vbC1cXHUwMDNlcmVjbGFpbV9kZXNjcyk7XFxuK1xcbitcXHRpZiAodW5saWtlbHkocmVjbGFpbV9kZXNjcykpIHtcXG4rXFx0XFx0dTMyIHBlbmRpbmdfZGVzY3MgPSBSRUFEX09OQ0UocG9vbC1cXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyk7XFxuK1xcbitcXHRcXHRpZiAobmJfZW50cmllcyBcXHUwMDNjIHBlbmRpbmdfZGVzY3MpIHtcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShwb29sLVxcdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLFxcbitcXHRcXHRcXHRcXHQgICBwZW5kaW5nX2Rlc2NzIC0gbmJfZW50cmllcyk7XFxuK1xcdFxcdFxcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVxcdTAwM2VjcSwgbmJfZW50cmllcyk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0V1JJVEVfT05DRShwb29sLVxcdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLCAwKTtcXG4rXFx0XFx0bmJfZW50cmllcyArPSByZWNsYWltX2Rlc2NzO1xcbitcXHRcXHRXUklURV9PTkNFKHBvb2wtXFx1MDAzZXJlY2xhaW1fZGVzY3MsIDApO1xcbitcXHR9XFxuK1xcbiBcXHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cXHUwMDNlY3EsIG5iX2VudHJpZXMpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XFxuQEAgLTU3NCwyNCArNTkxLDE2MiBAQCBzdGF0aWMgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2soc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZW50clxcbiBcXHRyZXR1cm4gbmJfcGt0cztcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpXFxuK3tcXG4rXFx0dTMyIG5iX2Rlc2NzID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGJhdGNoKTtcXG4rXFx0dTMyIGNxX2NhY2hlZF9wcm9kO1xcbitcXG4rXFx0aWYgKCFuYl9kZXNjcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y3FfY2FjaGVkX3Byb2QgPSBwb29sLVxcdTAwM2VjcS1cXHUwMDNlY2FjaGVkX3Byb2Q7XFxuK1xcdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXFx1MDAzZWNxLCBwb29sLVxcdTAwM2V0eF9kZXNjcywgbmJfZGVzY3MpO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGJhdGNoLVxcdTAwM2VyZWNsYWltX2Rlc2NzKSkge1xcbitcXHRcXHR1MzIgY3FfcGVuZGluZ19kZXNjcztcXG4rXFxuK1xcdFxcdC8qIENRIGlzIHBvc2l0aW9uYWwuIERlc2NyaXB0b3JzIGFscmVhZHkgd3JpdHRlbiBidXQgbm90XFxuK1xcdFxcdCAqIHN1Ym1pdHRlZCBtdXN0IGNvbXBsZXRlIGJlZm9yZSBhbnkgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzXFxuK1xcdFxcdCAqIGFwcGVuZGVkIGJlbG93LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Y3FfcGVuZGluZ19kZXNjcyA9IGNxX2NhY2hlZF9wcm9kIC0geHNrcV9nZXRfcHJvZChwb29sLVxcdTAwM2VjcSk7XFxuK1xcbitcXHRcXHRXUklURV9PTkNFKHBvb2wtXFx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MsXFxuK1xcdFxcdFxcdCAgIGJhdGNoLVxcdTAwM2V0eF9kZXNjcyArIGNxX3BlbmRpbmdfZGVzY3MpO1xcbitcXHRcXHRXUklURV9PTkNFKHBvb2wtXFx1MDAzZXJlY2xhaW1fZGVzY3MsIGJhdGNoLVxcdTAwM2VyZWNsYWltX2Rlc2NzKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFwb29sLVxcdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzKSlcXG4rXFx0XFx0XFx0eHNrX3R4X2NvbXBsZXRlZChwb29sLCAwKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxcbitfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXhfZGVzY3MpXFxuK3tcXG4rXFx0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xcbitcXHR1MzIgZW50cmllcztcXG4rXFxuK1xcdGVudHJpZXMgPSB4c2txX2NvbnNfbmJfZW50cmllcyh4cy1cXHUwMDNldHgsIG1heF9kZXNjcyk7XFxuK1xcdGlmICghZW50cmllcylcXG4rXFx0XFx0cmV0dXJuIGJhdGNoO1xcbitcXG4rXFx0YmF0Y2ggPSB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHhzLCBwb29sLCBkZXNjcywgbWF4X2Rlc2NzKTtcXG4rXFx0aWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNmJhdGNoKSkge1xcbitcXHRcXHR4cy1cXHUwMDNldHgtXFx1MDAzZXF1ZXVlX2VtcHR5X2Rlc2NzKys7XFxuK1xcdFxcdGlmIChiYXRjaC5jb25zdW1lZF9kZXNjcykge1xcbitcXHRcXHRcXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVxcdTAwM2V0eCk7XFxuK1xcdFxcdFxcdHhzLVxcdTAwM2Vzay5za193cml0ZV9zcGFjZShcXHUwMDI2eHMtXFx1MDAzZXNrKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gYmF0Y2g7XFxuK1xcdH1cXG4rXFxuK1xcdF9feHNrcV9jb25zX3JlbGVhc2UoeHMtXFx1MDAzZXR4KTtcXG4rXFx0eHMtXFx1MDAzZXNrLnNrX3dyaXRlX3NwYWNlKFxcdTAwMjZ4cy1cXHUwMDNlc2spO1xcbitcXHRyZXR1cm4gYmF0Y2g7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoXFxuK3hza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXFxuK3tcXG4rXFx0dTMyIGNxX2Rlc2NzX2JlZm9yZSwgY3FfZGVzY3NfYWZ0ZXI7XFxuK1xcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggc3VtX2JhdGNoID0ge307XFxuK1xcdGJvb2wgYnVkZ2V0X2V4aGF1c3RlZDtcXG4rXFx0dTMyIHBlcl9zb2NrZXRfYnVkZ2V0O1xcbitcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xcbitcXG4rXFx0LyogVGhlIGZhaXJuZXNzIHF1b3RhIG11c3QgYWxsb3cgb25lIG1heGltdW0tc2l6ZWQgdmFsaWQgcGFja2V0LiAqL1xcbitcXHRwZXJfc29ja2V0X2J1ZGdldCA9IG1heF90KHUzMiwgTUFYX1BFUl9TT0NLRVRfQlVER0VULFxcbitcXHRcXHRcXHRcXHQgIHBvb2wtXFx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XFxuK1xcbithZ2FpbjpcXG4rXFx0YnVkZ2V0X2V4aGF1c3RlZCA9IGZhbHNlO1xcbitcXHRjcV9kZXNjc19iZWZvcmUgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNnN1bV9iYXRjaCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCBcXHUwMDI2cG9vbC1cXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpIHtcXG4rXFx0XFx0dTMyIGJ1ZGdldCwgYnVkZ2V0X2xlZnQsIG9mZnNldCwgcmVtYWluaW5nO1xcbitcXHRcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGN1cnJfYmF0Y2g7XFxuK1xcbitcXHRcXHQvKiBPbmNlIHJlY2xhaW0tb25seSBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gYXBwZW5kZWQgdG8gdGhlIENRXFxuK1xcdFxcdCAqIGFkZHJlc3MgYXJlYSwgZG8gbm90IGFwcGVuZCBkcml2ZXItdmlzaWJsZSBUeCBkZXNjcmlwdG9yc1xcbitcXHRcXHQgKiBmcm9tIGFub3RoZXIgc29ja2V0IGFmdGVyIHRoZW0uIHhza190eF9jb21wbGV0ZWQoKSByZWxpZXMgb25cXG4rXFx0XFx0ICogYWxsIGRyaXZlci12aXNpYmxlIGRlc2NyaXB0b3JzIHByZWNlZGluZyBhbGwgcmVjbGFpbS1vbmx5XFxuK1xcdFxcdCAqIGRlc2NyaXB0b3JzIGluIENRIG9yZGVyLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIGJlIGdlbnRsZSB3aGVuIHBsYXlpbmcgd2l0aCBwb29sLVxcdTAwM2V0eF9kZXNjcyAqL1xcbitcXHRcXHRvZmZzZXQgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNnN1bV9iYXRjaCk7XFxuK1xcdFxcdGlmIChvZmZzZXQgXFx1MDAzZT0gbWF4X2Rlc2NzKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGlmICh4cy1cXHUwMDNldHhfYnVkZ2V0X3NwZW50IFxcdTAwM2U9IHBlcl9zb2NrZXRfYnVkZ2V0KSB7XFxuK1xcdFxcdFxcdGlmICh4c2txX2NvbnNfbmJfZW50cmllcyh4cy1cXHUwMDNldHgsIDEpKVxcbitcXHRcXHRcXHRcXHRidWRnZXRfZXhoYXVzdGVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGJ1ZGdldF9sZWZ0ID0gcGVyX3NvY2tldF9idWRnZXQgLSB4cy1cXHUwMDNldHhfYnVkZ2V0X3NwZW50O1xcbitcXHRcXHRyZW1haW5pbmcgPSBtYXhfZGVzY3MgLSBvZmZzZXQ7XFxuK1xcdFxcdGJ1ZGdldCA9IG1pbihyZW1haW5pbmcsIGJ1ZGdldF9sZWZ0KTtcXG4rXFxuK1xcdFxcdGN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcG9vbC1cXHUwMDNldHhfZGVzY3MgKyBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGJ1ZGdldCk7XFxuK1xcdFxcdGlmICgheHNrX3R4X2JhdGNoX2NxX2Rlc2NzKFxcdTAwMjZjdXJyX2JhdGNoKSkge1xcbitcXHRcXHRcXHRpZiAoY3Vycl9iYXRjaC5idWRnZXRfbGltaXRlZCBcXHUwMDI2XFx1MDAyNiBidWRnZXRfbGVmdCBcXHUwMDNjIHJlbWFpbmluZylcXG4rXFx0XFx0XFx0XFx0YnVkZ2V0X2V4aGF1c3RlZCA9IHRydWU7XFxuK1xcdFxcdFxcdHhzLVxcdTAwM2V0eF9idWRnZXRfc3BlbnQgKz0gY3Vycl9iYXRjaC5jb25zdW1lZF9kZXNjcztcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHhzLVxcdTAwM2V0eF9idWRnZXRfc3BlbnQgKz0gY3Vycl9iYXRjaC5jb25zdW1lZF9kZXNjcztcXG4rXFx0XFx0c3VtX2JhdGNoLnR4X2Rlc2NzICs9IGN1cnJfYmF0Y2gudHhfZGVzY3M7XFxuK1xcdFxcdHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzICs9IGN1cnJfYmF0Y2gucmVjbGFpbV9kZXNjcztcXG4rXFx0fVxcbitcXG4rXFx0Y3FfZGVzY3NfYWZ0ZXIgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNnN1bV9iYXRjaCk7XFxuK1xcbitcXHRpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgfHwgY3FfZGVzY3NfYWZ0ZXIgXFx1MDAzZT0gbWF4X2Rlc2NzKVxcbitcXHRcXHRyZXR1cm4gc3VtX2JhdGNoO1xcbitcXG4rXFx0LyogQ29udGludWUgZmlsbGluZyB0aGUgYmF0Y2ggd2hpbGUgdGhpcyBwYXNzIG1hZGUgcHJvZ3Jlc3MgKi9cXG4rXFx0aWYgKGNxX2Rlc2NzX2JlZm9yZSAhPSBjcV9kZXNjc19hZnRlcilcXG4rXFx0XFx0Z290byBhZ2FpbjtcXG4rXFxuK1xcdGlmICghYnVkZ2V0X2V4aGF1c3RlZClcXG4rXFx0XFx0cmV0dXJuIHN1bV9iYXRjaDtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCBcXHUwMDI2cG9vbC1cXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpXFxuK1xcdFxcdHhzLVxcdTAwM2V0eF9idWRnZXRfc3BlbnQgPSAwO1xcbitcXHRnb3RvIGFnYWluO1xcbit9XFxuK1xcbiB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcXG4ge1xcbitcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307XFxuIFxcdHN0cnVjdCB4ZHBfc29jayAqeHM7XFxuK1xcdGJvb2wgdW1lbV9zaGFyZWQ7XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdGlmICghbGlzdF9pc19zaW5ndWxhcihcXHUwMDI2cG9vbC1cXHUwMDNleHNrX3R4X2xpc3QpKSB7XFxuLVxcdFxcdC8qIEZhbGxiYWNrIHRvIHRoZSBub24tYmF0Y2hlZCB2ZXJzaW9uICovXFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRcXHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcXG4tXFx0fVxcbitcXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHBvb2wtXFx1MDAzZXJlY2xhaW1fZGVzY3MpKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHR4cyA9IGxpc3RfZmlyc3Rfb3JfbnVsbF9yY3UoXFx1MDAyNnBvb2wtXFx1MDAzZXhza190eF9saXN0LCBzdHJ1Y3QgeGRwX3NvY2ssIHR4X2xpc3QpO1xcbi1cXHRpZiAoIXhzKSB7XFxuLVxcdFxcdG5iX3BrdHMgPSAwO1xcbitcXHR4cyA9IGxpc3RfZmlyc3Rfb3JfbnVsbF9yY3UoXFx1MDAyNnBvb2wtXFx1MDAzZXhza190eF9saXN0LCBzdHJ1Y3QgeGRwX3NvY2ssXFxuK1xcdFxcdFxcdFxcdCAgICB0eF9saXN0KTtcXG4rXFx0aWYgKCF4cylcXG4gXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4gXFxuLVxcdG5iX3BrdHMgPSB4c2txX2NvbnNfbmJfZW50cmllcyh4cy1cXHUwMDNldHgsIG5iX3BrdHMpO1xcbitcXHRuYl9wa3RzID0gbWluKG5iX3BrdHMsIHBvb2wtXFx1MDAzZXR4X2Rlc2NzX25lbnRyaWVzKTtcXG4rXFx0aWYgKCFuYl9wa3RzKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHVtZW1fc2hhcmVkID0gIWxpc3RfaXNfc2luZ3VsYXIoXFx1MDAyNnBvb2wtXFx1MDAzZXhza190eF9saXN0KTtcXG4rXFxuK1xcdGlmICh1bWVtX3NoYXJlZCBcXHUwMDI2XFx1MDAyNiAhKHBvb2wtXFx1MDAzZXVtZW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWERQX1VNRU1fU0dfRkxBRykpIHtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHBvb2wsIG5iX3BrdHMpO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBUaGlzIGlzIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtIGZvciB0aGUgVHggcGF0aC4gVHJ5IHRvXFxuIFxcdCAqIHJlc2VydmUgc3BhY2UgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgZm9yIGFsbCBwYWNrZXRzLCBidXRcXG5AQCAtNjAzLDE5ICs3NTgsMTYgQEAgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX3BrdHMpXFxuIFxcdGlmICghbmJfcGt0cylcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRuYl9wa3RzID0geHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaCh4cy1cXHUwMDNldHgsIHBvb2wsIG5iX3BrdHMpO1xcbi1cXHRpZiAoIW5iX3BrdHMpIHtcXG4tXFx0XFx0eHMtXFx1MDAzZXR4LVxcdTAwM2VxdWV1ZV9lbXB0eV9kZXNjcysrO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0fVxcbi1cXG4tXFx0X194c2txX2NvbnNfcmVsZWFzZSh4cy1cXHUwMDNldHgpO1xcbi1cXHR4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLVxcdTAwM2VjcSwgcG9vbC1cXHUwMDNldHhfZGVzY3MsIG5iX3BrdHMpO1xcbi1cXHR4cy1cXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXFx1MDAyNnhzLVxcdTAwM2Vzayk7XFxuK1xcdGJhdGNoID0gdW1lbV9zaGFyZWQgP1xcbitcXHRcXHR4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoKHBvb2wsIG5iX3BrdHMpIDpcXG4rXFx0XFx0X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gocG9vbCwgeHMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBwb29sLVxcdTAwM2V0eF9kZXNjcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IG5iX3BrdHMpO1xcbitcXHR4c2tfdHhfY29tbWl0X2JhdGNoKHBvb2wsIFxcdTAwMjZiYXRjaCk7XFxuIFxcbiBvdXQ6XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRyZXR1cm4gbmJfcGt0cztcXG4rXFx0cmV0dXJuIGJhdGNoLnR4X2Rlc2NzO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKTtcXG4gXFxuQEAgLTczNyw2ICs4ODksMTkgQEAgc3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cG9vbC1cXHUwMDNlY3FfcHJvZF9sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHR1MzIgaWR4O1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnBvb2wtXFx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xcbitcXHRpZHggPSB4c2txX2dldF9wcm9kKHBvb2wtXFx1MDAzZWNxKTtcXG4rXFx0eHNrcV9wcm9kX3dyaXRlX2FkZHIocG9vbC1cXHUwMDNlY3EsIGlkeCwgZGVzYy1cXHUwMDNlYWRkcik7XFxuK1xcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVxcdTAwM2VjcSwgMSk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBvb2wtXFx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB4c2tfY3FfY2FuY2VsX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG4pXFxuIHtcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZwb29sLVxcdTAwM2VjcS1cXHUwMDNlY3FfY2FjaGVkX3Byb2RfbG9jayk7XFxuQEAgLTc5NCw4ICs5NTksMTEgQEAgc3RhdGljIHZvaWQgeHNrX2NvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBzdGF0aWMgdm9pZCB4c2tfZHJvcF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHR4ZHBfc2soc2tiLVxcdTAwM2VzayktXFx1MDAzZXR4LVxcdTAwM2VpbnZhbGlkX2Rlc2NzICs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcXG4tXFx0eHNrX2NvbnN1bWVfc2tiKHNrYik7XFxuK1xcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2tiLVxcdTAwM2Vzayk7XFxuK1xcbitcXHR4cy1cXHUwMDNldHgtXFx1MDAzZWludmFsaWRfZGVzY3MgKz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xcbitcXHRjb25zdW1lX3NrYihza2IpO1xcbitcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcXG5AQCAtODc3LDcgKzEwNDUsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbiBcXHRcXHQvKiBpbiBjYXNlIG9mIC1FT1ZFUkZMT1cgdGhhdCBjb3VsZCBoYXBwZW4gYmVsb3csXFxuLVxcdFxcdCAqIHhza19jb25zdW1lX3NrYigpIHdpbGwgcmVsZWFzZSB0aGlzIG5vZGUgYXMgd2hvbGUgc2tiXFxuK1xcdFxcdCAqIHhza19kcm9wX3NrYigpIHdpbGwgcmVsZWFzZSB0aGlzIG5vZGUgYXMgd2hvbGUgc2tiXFxuIFxcdFxcdCAqIHdvdWxkIGJlIGRyb3BwZWQsIHdoaWNoIGltcGxpZXMgZnJlZWluZyBhbGwgbGlzdCBlbGVtZW50c1xcbiBcXHRcXHQgKi9cXG4gXFx0XFx0eHNrX2FkZHItXFx1MDAzZWFkZHJzW3hza19hZGRyLVxcdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cXHUwMDNlYWRkcjtcXG5AQCAtOTY5LDYgKzExMzcsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gXFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0eHNrX2FkZHItXFx1MDAzZWFkZHJzW3hza19hZGRyLVxcdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cXHUwMDNlYWRkcjtcXG4rXFxuIFxcdFxcdFxcdGlmICh1bmxpa2VseShucl9mcmFncyA9PSAoTUFYX1NLQl9GUkFHUyAtIDEpIFxcdTAwMjZcXHUwMDI2IHhwX21iX2Rlc2MoZGVzYykpKSB7XFxuIFxcdFxcdFxcdFxcdGVyciA9IC1FT1ZFUkZMT1c7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuQEAgLTk4Niw4ICsxMTU2LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuIFxcbiBcXHRcXHRcXHRza2JfYWRkX3J4X2ZyYWcoc2tiLCBucl9mcmFncywgcGFnZSwgMCwgbGVuLCBQQUdFX1NJWkUpO1xcbiBcXHRcXHRcXHRyZWZjb3VudF9hZGQoUEFHRV9TSVpFLCBcXHUwMDI2eHMtXFx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xcbi1cXG4tXFx0XFx0XFx0eHNrX2FkZHItXFx1MDAzZWFkZHJzW3hza19hZGRyLVxcdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cXHUwMDNlYWRkcjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC0xMDYwLDExICsxMjI4LDIyIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmICh1bmxpa2VseSh4cy1cXHUwMDNlZHJhaW5fY29udCkpIHtcXG4rXFx0XFx0XFx0eHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoeHMtXFx1MDAzZXBvb2wsIFxcdTAwMjZkZXNjKTtcXG4rXFxuK1xcdFxcdFxcdHhzLVxcdTAwM2V0eC1cXHUwMDNlaW52YWxpZF9kZXNjcysrO1xcbitcXHRcXHRcXHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cXHUwMDNldHgpO1xcbitcXHRcXHRcXHR4cy1cXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXFx1MDAyNmRlc2MpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXFx1MDAyNmRlc2MpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4gXFx0XFx0XFx0ZXJyID0gUFRSX0VSUihza2IpO1xcbiBcXHRcXHRcXHRpZiAoZXJyICE9IC1FT1ZFUkZMT1cpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRpZiAoeHBfbWJfZGVzYyhcXHUwMDI2ZGVzYykpXFxuK1xcdFxcdFxcdFxcdHhzLVxcdTAwM2VkcmFpbl9jb250ID0gdHJ1ZTtcXG4gXFx0XFx0XFx0ZXJyID0gMDtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG5AQCAtMTA5OCw5ICsxMjc3LDI0IEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHhza3FfaGFzX2Rlc2NzKHhzLVxcdTAwM2V0eCkpIHtcXG4rXFx0XFx0Ym9vbCByZWNsYWltX2Rlc2MgPSB4cy1cXHUwMDNlc2tiIHx8IHhzLVxcdTAwM2VkcmFpbl9jb250O1xcbitcXG4rXFx0XFx0aWYgKHJlY2xhaW1fZGVzYykge1xcbitcXHRcXHRcXHRlcnIgPSB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoeHMtXFx1MDAzZXBvb2wpO1xcbitcXHRcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdFxcdGVyciA9IC1FQUdBSU47XFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGlmICh4cy1cXHUwMDNlc2tiKVxcbiBcXHRcXHRcXHR4c2tfZHJvcF9za2IoeHMtXFx1MDAzZXNrYik7XFxuK1xcbitcXHRcXHRpZiAocmVjbGFpbV9kZXNjKVxcbitcXHRcXHRcXHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cXHUwMDNlcG9vbCwgXFx1MDAyNmRlc2MpO1xcbitcXG4gXFx0XFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXFx1MDAzZXR4KTtcXG4rXFx0XFx0eHMtXFx1MDAzZWRyYWluX2NvbnQgPSB4cF9tYl9kZXNjKFxcdTAwMjZkZXNjKTtcXG4gXFx0fVxcbiBcXG4gb3V0OlxcbkBAIC0xNDgzLDcgKzE2NzcsOCBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkclxcbiBcXHRcXHRcXHQgKiBhbmQvb3IgZGV2aWNlLlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0eHMtXFx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHVtZW1feHMtXFx1MDAzZXVtZW0pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHVtZW1feHMtXFx1MDAzZXVtZW0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZGV2LVxcdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xcbiBcXHRcXHRcXHRpZiAoIXhzLVxcdTAwM2Vwb29sKSB7XFxuIFxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdFxcdFxcdHNvY2tmZF9wdXQoc29jayk7XFxuQEAgLTE1MTUsNyArMTcxMCw4IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXFxuIFxcdFxcdFxcdCAqIHV0aWxpemVzXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRpZiAoeHMtXFx1MDAzZXR4IFxcdTAwMjZcXHUwMDI2ICF4cy1cXHUwMDNlcG9vbC1cXHUwMDNldHhfZGVzY3MpIHtcXG4tXFx0XFx0XFx0XFx0ZXJyID0geHBfYWxsb2NfdHhfZGVzY3MoeHMtXFx1MDAzZXBvb2wsIHhzKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0geHBfYWxsb2NfdHhfZGVzY3MoeHMtXFx1MDAzZXBvb2wsIHhzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XFxuIFxcdFxcdFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0XFx0XFx0eHBfcHV0X3Bvb2woeHMtXFx1MDAzZXBvb2wpO1xcbiBcXHRcXHRcXHRcXHRcXHR4cy1cXHUwMDNlcG9vbCA9IE5VTEw7XFxuQEAgLTE1MzMsNyArMTcyOSw5IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LyogVGhpcyB4c2sgaGFzIGl0cyBvd24gdW1lbS4gKi9cXG4tXFx0XFx0eHMtXFx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLCB4cy1cXHUwMDNldW1lbSk7XFxuK1xcdFxcdHhzLVxcdTAwM2Vwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cywgeHMtXFx1MDAzZXVtZW0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgZGV2LVxcdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xcbitcXG4gXFx0XFx0aWYgKCF4cy1cXHUwMDNlcG9vbCkge1xcbiBcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jIGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcXG5pbmRleCAxZjI4YTk2NDE1NzFlNC4uYTQwODk0ODBiMjJiMjUgMTAwNjQ0XFxuLS0tIGEvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcXG4rKysgYi9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xcbkBAIC00MiwxNyArNDIsMjIgQEAgdm9pZCB4cF9kZXN0cm95KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxcbiBcXHRrdmZyZWUocG9vbCk7XFxuIH1cXG4gXFxuLWludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cylcXG4raW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbitcXHRcXHQgICAgICB1MzIgbWF4X3NlZ3MpXFxuIHtcXG4tXFx0cG9vbC1cXHUwMDNldHhfZGVzY3MgPSBrdnphbGxvY19vYmpzKCpwb29sLVxcdTAwM2V0eF9kZXNjcywgeHMtXFx1MDAzZXR4LVxcdTAwM2VuZW50cmllcyk7XFxuK1xcdHUzMiBuZW50cmllcyA9IG1heCh4cy1cXHUwMDNldHgtXFx1MDAzZW5lbnRyaWVzLCBtYXhfc2Vncyk7XFxuK1xcbitcXHRwb29sLVxcdTAwM2V0eF9kZXNjcyA9IGt2emFsbG9jX29ianMoKnBvb2wtXFx1MDAzZXR4X2Rlc2NzLCBuZW50cmllcyk7XFxuIFxcdGlmICghcG9vbC1cXHUwMDNldHhfZGVzY3MpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0cG9vbC1cXHUwMDNldHhfZGVzY3NfbmVudHJpZXMgPSBuZW50cmllcztcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB4ZHBfdW1lbSAqdW1lbSlcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHhkcF91bWVtICp1bWVtLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR1MzIgbWF4X3NlZ3MpXFxuIHtcXG4gXFx0Ym9vbCB1bmFsaWduZWQgPSB1bWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhEUF9VTUVNX1VOQUxJR05FRF9DSFVOS19GTEFHO1xcbiBcXHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbDtcXG5AQCAtNjksNyArNzQsNyBAQCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdGlmICh4cy1cXHUwMDNldHgpXFxuLVxcdFxcdGlmICh4cF9hbGxvY190eF9kZXNjcyhwb29sLCB4cykpXFxuK1xcdFxcdGlmICh4cF9hbGxvY190eF9kZXNjcyhwb29sLCB4cywgbWF4X3NlZ3MpKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdHBvb2wtXFx1MDAzZWNodW5rX21hc2sgPSB+KCh1NjQpdW1lbS1cXHUwMDNlY2h1bmtfc2l6ZSAtIDEpO1xcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19xdWV1ZS5oIGIvbmV0L3hkcC94c2tfcXVldWUuaFxcbmluZGV4IDNlM2ZiYjczZDIzZTJmLi5hMTVmZjE5MjlkYjYyMyAxMDA2NDRcXG4tLS0gYS9uZXQveGRwL3hza19xdWV1ZS5oXFxuKysrIGIvbmV0L3hkcC94c2tfcXVldWUuaFxcbkBAIC01OCw2ICs1OCwxOCBAQCBzdHJ1Y3QgcGFyc2VkX2Rlc2Mge1xcbiBcXHR1MzIgdmFsaWQ7XFxuIH07XFxuIFxcbitzdHJ1Y3QgeHNrX3R4X2JhdGNoIHtcXG4rXFx0dTMyIHR4X2Rlc2NzO1xcbitcXHR1MzIgcmVjbGFpbV9kZXNjcztcXG4rXFx0dTMyIGNvbnN1bWVkX2Rlc2NzO1xcbitcXHRib29sIGJ1ZGdldF9saW1pdGVkO1xcbit9O1xcbitcXG4rc3RhdGljIGlubGluZSB1MzIgeHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGNvbnN0IHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoKVxcbit7XFxuK1xcdHJldHVybiBiYXRjaC1cXHUwMDNldHhfZGVzY3MgKyBiYXRjaC1cXHUwMDNlcmVjbGFpbV9kZXNjcztcXG4rfVxcbitcXG4gLyogVGhlIHN0cnVjdHVyZSBvZiB0aGUgc2hhcmVkIHN0YXRlIG9mIHRoZSByaW5ncyBhcmUgYSBzaW1wbGVcXG4gICogY2lyY3VsYXIgYnVmZmVyLCBhcyBvdXRsaW5lZCBpblxcbiAgKiBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL2NpcmN1bGFyLWJ1ZmZlcnMucnN0LiBGb3IgdGhlIFJ4IGFuZFxcbkBAIC0yNjMsMTcgKzI3NSwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFyc2VfZGVzYyhzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4gXFx0cGFyc2VkLVxcdTAwM2VtYiA9IHhwX21iX2Rlc2MoZGVzYyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmVcXG4tdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuLVxcdFxcdFxcdCAgICAgIHUzMiBtYXgpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhza190eF9iYXRjaFxcbit4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbitcXHRcXHRcXHQgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXgpXFxuIHtcXG4tXFx0dTMyIGNhY2hlZF9jb25zID0gcS1cXHUwMDNlY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwO1xcbi1cXHRzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzID0gcG9vbC1cXHUwMDNldHhfZGVzY3M7XFxuLVxcdHUzMiB0b3RhbF9kZXNjcyA9IDAsIG5yX2ZyYWdzID0gMDtcXG4rXFx0Ym9vbCBkcmFpbiA9IFJFQURfT05DRSh4cy1cXHUwMDNlZHJhaW5fY29udCk7XFxuK1xcdHUzMiBjYWNoZWRfY29ucywgbmJfZW50cmllcyA9IDAsIHJlbGVhc2VkO1xcbitcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307XFxuK1xcdHN0cnVjdCB4c2tfcXVldWUgKnEgPSB4cy1cXHUwMDNldHg7XFxuK1xcdHUzMiBucl9mcmFncyA9IDA7XFxuK1xcbitcXHRjYWNoZWRfY29ucyA9IHEtXFx1MDAzZWNhY2hlZF9jb25zO1xcbiBcXG4tXFx0LyogdHJhY2sgZmlyc3QgZW50cnksIGlmIHN0dW1ibGUgdXBvbiAqYW55KiBpbnZhbGlkIGRlc2NyaXB0b3IsIHJld2luZFxcbi1cXHQgKiBjdXJyZW50IHBhY2tldCB0aGF0IGNvbnNpc3RzIG9mIGZyYWdzIGFuZCBzdG9wIHRoZSBwcm9jZXNzaW5nXFxuLVxcdCAqL1xcbiBcXHR3aGlsZSAoY2FjaGVkX2NvbnMgIT0gcS1cXHUwMDNlY2FjaGVkX3Byb2QgXFx1MDAyNlxcdTAwMjYgbmJfZW50cmllcyBcXHUwMDNjIG1heCkge1xcbiBcXHRcXHRzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqcmluZyA9IChzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqKXEtXFx1MDAzZXJpbmc7XFxuIFxcdFxcdHUzMiBpZHggPSBjYWNoZWRfY29ucyBcXHUwMDI2IHEtXFx1MDAzZXJpbmdfbWFzaztcXG5AQCAtMjgyLDI2ICsyOTUsNDkgQEAgdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuIFxcdFxcdGRlc2NzW25iX2VudHJpZXNdID0gcmluZy1cXHUwMDNlZGVzY1tpZHhdO1xcbiBcXHRcXHRjYWNoZWRfY29ucysrO1xcbiBcXHRcXHRwYXJzZV9kZXNjKHEsIHBvb2wsIFxcdTAwMjZkZXNjc1tuYl9lbnRyaWVzXSwgXFx1MDAyNnBhcnNlZCk7XFxuLVxcdFxcdGlmICh1bmxpa2VseSghcGFyc2VkLnZhbGlkKSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmICh1bmxpa2VseSghcGFyc2VkLnZhbGlkKSkge1xcbitcXHRcXHRcXHRpZiAoIWRyYWluIFxcdTAwMjZcXHUwMDI2ICFucl9mcmFncyBcXHUwMDI2XFx1MDAyNiAhcGFyc2VkLm1iKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdFxcdGRyYWluID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bnJfZnJhZ3MrKztcXG4rXFx0XFx0bmJfZW50cmllcysrO1xcbiBcXG4gXFx0XFx0aWYgKGxpa2VseSghcGFyc2VkLm1iKSkge1xcbi1cXHRcXHRcXHR0b3RhbF9kZXNjcyArPSAobnJfZnJhZ3MgKyAxKTtcXG4tXFx0XFx0XFx0bnJfZnJhZ3MgPSAwO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRucl9mcmFncysrO1xcbi1cXHRcXHRcXHRpZiAobnJfZnJhZ3MgPT0gcG9vbC1cXHUwMDNleGRwX3pjX21heF9zZWdzKSB7XFxuK1xcdFxcdFxcdGlmICh1bmxpa2VseShkcmFpbikpIHtcXG4rXFx0XFx0XFx0XFx0YmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzO1xcbitcXHRcXHRcXHRcXHRXUklURV9PTkNFKHhzLVxcdTAwM2VkcmFpbl9jb250LCBmYWxzZSk7XFxuIFxcdFxcdFxcdFxcdG5yX2ZyYWdzID0gMDtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdGJhdGNoLnR4X2Rlc2NzICs9IG5yX2ZyYWdzO1xcbitcXHRcXHRcXHRucl9mcmFncyA9IDA7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobnJfZnJhZ3MgPT0gcG9vbC1cXHUwMDNleGRwX3pjX21heF9zZWdzKVxcbitcXHRcXHRcXHRkcmFpbiA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChucl9mcmFncykge1xcbitcXHRcXHRpZiAoZHJhaW4pIHtcXG4rXFx0XFx0XFx0YmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzO1xcbitcXHRcXHRcXHRXUklURV9PTkNFKHhzLVxcdTAwM2VkcmFpbl9jb250LCB0cnVlKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0aWYgKG5iX2VudHJpZXMgPT0gbWF4KVxcbitcXHRcXHRcXHRcXHRiYXRjaC5idWRnZXRfbGltaXRlZCA9IHRydWU7XFxuK1xcdFxcdFxcdGNhY2hlZF9jb25zIC09IG5yX2ZyYWdzO1xcbiBcXHRcXHR9XFxuLVxcdFxcdG5iX2VudHJpZXMrKztcXG4gXFx0fVxcbiBcXG4tXFx0Y2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7XFxuK1xcdHJlbGVhc2VkID0gY2FjaGVkX2NvbnMgLSBxLVxcdTAwM2VjYWNoZWRfY29ucztcXG4gXFx0LyogUmVsZWFzZSB2YWxpZCBwbHVzIGFueSBpbnZhbGlkIGVudHJpZXMgKi9cXG4tXFx0eHNrcV9jb25zX3JlbGVhc2VfbihxLCBjYWNoZWRfY29ucyAtIHEtXFx1MDAzZWNhY2hlZF9jb25zKTtcXG4tXFx0cmV0dXJuIHRvdGFsX2Rlc2NzO1xcbitcXHR4c2txX2NvbnNfcmVsZWFzZV9uKHEsIHJlbGVhc2VkKTtcXG4rXFx0YmF0Y2guY29uc3VtZWRfZGVzY3MgPSByZWxlYXNlZDtcXG4rXFx0cmV0dXJuIGJhdGNoO1xcbiB9XFxuIFxcbiAvKiBGdW5jdGlvbnMgZm9yIGNvbnN1bWVycyAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xcbmluZGV4IDZlYjkwOTZkMDg0YzAxLi43YWJiNDkzNWVkZjlhZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xcbkBAIC00MjcsMTQgKzQyNywxNCBAQCBzdGF0aWMgdTMyIHBrdF9uYl9mcmFncyh1MzIgZnJhbWVfc2l6ZSwgc3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW0sIHN0cnVjdCBwa1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBTZWFyY2ggZm9yIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBpbiB2ZXJiYXRpbSBtb2RlICovXFxuLVxcdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXFx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXFx1MDAzZXZhbGlkKVxcbitcXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVxcdTAwM2VvcHRpb25zKSlcXG4gXFx0XFx0cmV0dXJuIG5iX2ZyYWdzO1xcbiBcXG4gXFx0bmV4dF9mcmFnID0gcGt0X3N0cmVhbS1cXHUwMDNlY3VycmVudF9wa3RfbmI7XFxuIFxcdHBrdCsrO1xcbiBcXHR3aGlsZSAobmV4dF9mcmFnKysgXFx1MDAzYyBwa3Rfc3RyZWFtLVxcdTAwM2VuYl9wa3RzKSB7XFxuIFxcdFxcdG5iX2ZyYWdzKys7XFxuLVxcdFxcdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXFx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVxcdTAwM2VvcHRpb25zKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdHBrdCsrO1xcbiBcXHR9XFxuQEAgLTY2NSwxMSArNjY1LDExIEBAIHN0YXRpYyBzdHJ1Y3QgcGt0X3N0cmVhbSAqX19wa3Rfc3RyZWFtX2dlbmVyYXRlX2N1c3RvbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzXFxuIFxcdFxcdFxcdGlmICghZnJhbWUtXFx1MDAzZXZhbGlkIHx8ICFwa3RfY29udGludWVzKGZyYW1lLVxcdTAwM2VvcHRpb25zKSlcXG4gXFx0XFx0XFx0XFx0cGF5bG9hZCsrO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRpZiAoZnJhbWUtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRcXHRpZiAoZnJhbWUtXFx1MDAzZXZhbGlkKSB7XFxuIFxcdFxcdFxcdFxcdGxlbiArPSBmcmFtZS1cXHUwMDNlbGVuO1xcbi1cXHRcXHRcXHRpZiAoZnJhbWUtXFx1MDAzZXZhbGlkIFxcdTAwMjZcXHUwMDI2IHBrdF9jb250aW51ZXMoZnJhbWUtXFx1MDAzZW9wdGlvbnMpKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuK1xcdFxcdFxcdFxcdGlmIChwa3RfY29udGludWVzKGZyYW1lLVxcdTAwM2VvcHRpb25zKSlcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0cGt0LVxcdTAwM2Vwa3RfbmIgPSBwa3RfbmI7XFxuIFxcdFxcdFxcdHBrdC1cXHUwMDNlbGVuID0gbGVuO1xcbiBcXHRcXHRcXHRwa3QtXFx1MDAzZXZhbGlkID0gZnJhbWUtXFx1MDAzZXZhbGlkO1xcbkBAIC0xMjA5LDYgKzEyMDksNyBAQCBzdGF0aWMgaW50IF9fc2VuZF9wa3RzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayxcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHhzay1cXHUwMDNlYmF0Y2hfc2l6ZTsgaSsrKSB7XFxuIFxcdFxcdHN0cnVjdCBwa3QgKnBrdCA9IHBrdF9zdHJlYW1fZ2V0X25leHRfdHhfcGt0KHBrdF9zdHJlYW0pO1xcbiBcXHRcXHR1MzIgbmJfZnJhZ3NfbGVmdCwgbmJfZnJhZ3MsIGJ5dGVzX3dyaXR0ZW4gPSAwO1xcbitcXHRcXHRzdHJ1Y3QgcGt0ICpmaXJzdF9wa3QgPSBwa3Q7XFxuIFxcbiBcXHRcXHRpZiAoIXBrdClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTEyNTMsNiArMTI1NCw4IEBAIHN0YXRpYyBpbnQgX19zZW5kX3BrdHMoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLFxcbiBcXHRcXHRpZiAocGt0IFxcdTAwMjZcXHUwMDI2IHBrdC1cXHUwMDNldmFsaWQpIHtcXG4gXFx0XFx0XFx0dmFsaWRfcGt0cysrO1xcbiBcXHRcXHRcXHR2YWxpZF9mcmFncyArPSBuYl9mcmFncztcXG4rXFx0XFx0fSBlbHNlIGlmIChwa3Rfc3RyZWFtLVxcdTAwM2V2ZXJiYXRpbSBcXHUwMDI2XFx1MDAyNiBwa3RfY29udGludWVzKGZpcnN0X3BrdC1cXHUwMDNlb3B0aW9ucykpIHtcXG4rXFx0XFx0XFx0dmFsaWRfZnJhZ3MgKz0gbmJfZnJhZ3M7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtMjA5OSwxMyArMjEwMiwxNiBAQCBpbnQgdGVzdGFwcF9pbnZhbGlkX2Rlc2NfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4gXFx0XFx0ezAsIDAsIDAsIGZhbHNlLCAwfSxcXG4gXFx0XFx0LyogSW52YWxpZCBhZGRyZXNzIGluIHRoZSBzZWNvbmQgZnJhbWUgKi9cXG4gXFx0XFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXFxuLVxcdFxcdHt1bWVtX3N6LCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxcbitcXHRcXHR7dW1lbV9zeiAqIDIsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXFxuK1xcdFxcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcXG4gXFx0XFx0LyogSW52YWxpZCBsZW4gaW4gdGhlIG1pZGRsZSAqL1xcbiBcXHRcXHR7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcXG4gXFx0XFx0ezAsIFhTS19VTUVNX19JTlZBTElEX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcXG4rXFx0XFx0ezAsIE1JTl9QS1RfU0laRSwgMCwgZmFsc2UsIDB9LFxcbiBcXHRcXHQvKiBJbnZhbGlkIG9wdGlvbnMgaW4gdGhlIG1pZGRsZSAqL1xcbiBcXHRcXHR7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcXG4gXFx0XFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWFNLX0RFU0NfX0lOVkFMSURfT1BUSU9OfSxcXG4rXFx0XFx0ezAsIE1JTl9QS1RfU0laRSwgMCwgZmFsc2UsIDB9LFxcbiBcXHRcXHQvKiBUcmFuc21pdCAyIGZyYWdzLCByZWNlaXZlIDMgKi9cXG4gXFx0XFx0ezAsIFhTS19VTUVNX19NQVhfRlJBTUVfU0laRSwgMCwgdHJ1ZSwgWERQX1BLVF9DT05URH0sXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIDB9LFxcbkBAIC0yMTE3LDggKzIxMjMsOCBAQCBpbnQgdGVzdGFwcF9pbnZhbGlkX2Rlc2NfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4gXFxuIFxcdGlmICh1bWVtLVxcdTAwM2V1bmFsaWduZWRfbW9kZSkge1xcbiBcXHRcXHQvKiBDcm9zc2luZyBhIGNodW5rIGJvdW5kYXJ5IGFsbG93ZWQgKi9cXG4tXFx0XFx0cGt0c1sxMl0udmFsaWQgPSB0cnVlO1xcbi1cXHRcXHRwa3RzWzEzXS52YWxpZCA9IHRydWU7XFxuK1xcdFxcdHBrdHNbMTVdLnZhbGlkID0gdHJ1ZTtcXG4rXFx0XFx0cGt0c1sxNl0udmFsaWQgPSB0cnVlO1xcbiBcXHR9XFxuIFxcbiBcXHR0ZXN0LVxcdTAwM2VtdHUgPSBNQVhfRVRIX0pVTUJPX1NJWkU7XFxuQEAgLTIyNzAsNyArMjI3Niw3IEBAIGludCB0ZXN0YXBwX3Rvb19tYW55X2ZyYWdzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcdFxcdG1heF9mcmFncyArPSAxO1xcbiBcXHR9XFxuIFxcbi1cXHRwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgKyAyLCBzaXplb2Yoc3RydWN0IHBrdCkpO1xcbitcXHRwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgKyAzLCBzaXplb2Yoc3RydWN0IHBrdCkpO1xcbiBcXHRpZiAoIXBrdHMpXFxuIFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuIFxcbkBAIC0yMjg4LDI0ICsyMjk0LDMwIEBAIGludCB0ZXN0YXBwX3Rvb19tYW55X2ZyYWdzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcdH1cXG4gXFx0cGt0c1ttYXhfZnJhZ3NdLm9wdGlvbnMgPSAwO1xcbiBcXG4tXFx0LyogQW4gaW52YWxpZCBwYWNrZXQgd2l0aCB0aGUgbWF4IGFtb3VudCBvZiBmcmFncyBidXQgc2lnbmFscyBwYWNrZXRcXG4tXFx0ICogY29udGludWVzIG9uIHRoZSBsYXN0IGZyYWdcXG4tXFx0ICovXFxuLVxcdGZvciAoaSA9IG1heF9mcmFncyArIDE7IGkgXFx1MDAzYyAyICogbWF4X2ZyYWdzICsgMTsgaSsrKSB7XFxuK1xcdC8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCArIDEgYW1vdW50IG9mIGZyYWdzICovXFxuK1xcdGZvciAoaSA9IG1heF9mcmFncyArIDE7IGkgXFx1MDAzYyAyICogbWF4X2ZyYWdzICsgMjsgaSsrKSB7XFxuIFxcdFxcdHBrdHNbaV0ubGVuID0gTUlOX1BLVF9TSVpFO1xcbiBcXHRcXHRwa3RzW2ldLm9wdGlvbnMgPSBYRFBfUEtUX0NPTlREO1xcbi1cXHRcXHRwa3RzW2ldLnZhbGlkID0gZmFsc2U7XFxuK1xcdFxcdHBrdHNbaV0udmFsaWQgPSB0cnVlO1xcbiBcXHR9XFxuK1xcdHBrdHNbMiAqIG1heF9mcmFncyArIDFdLm9wdGlvbnMgPSAwO1xcbiBcXG4gXFx0LyogVmFsaWQgcGFja2V0IGZvciBzeW5jaCAqL1xcbi1cXHRwa3RzWzIgKiBtYXhfZnJhZ3MgKyAxXS5sZW4gPSBNSU5fUEtUX1NJWkU7XFxuLVxcdHBrdHNbMiAqIG1heF9mcmFncyArIDFdLnZhbGlkID0gdHJ1ZTtcXG4rXFx0cGt0c1syICogbWF4X2ZyYWdzICsgMl0ubGVuID0gTUlOX1BLVF9TSVpFO1xcbitcXHRwa3RzWzIgKiBtYXhfZnJhZ3MgKyAyXS52YWxpZCA9IHRydWU7XFxuIFxcbi1cXHRpZiAocGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20odGVzdCwgcGt0cywgMiAqIG1heF9mcmFncyArIDIpKSB7XFxuK1xcdGlmIChwa3Rfc3RyZWFtX2dlbmVyYXRlX2N1c3RvbSh0ZXN0LCBwa3RzLCAyICogbWF4X2ZyYWdzICsgMykpIHtcXG4gXFx0XFx0ZnJlZShwa3RzKTtcXG4gXFx0XFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcXG4gXFx0fVxcbiBcXG4rXFx0LyogVGhlIGdlbmVyYXRlZCBUeCBzdHJlYW0gbXVzdCBrZWVwIHRoZSB0b28tYmlnIHBhY2tldCB2YWxpZCBzbyB0aGF0XFxuK1xcdCAqIF9fc2VuZF9wa3RzKCkgYWNjb3VudHMgaXRzIGRlc2NyaXB0b3JzIGluIG91dHN0YW5kaW5nX3R4LiBUaGUgUnhcXG4rXFx0ICogc3RyZWFtLCBob3dldmVyLCBtdXN0IG5vdCBleHBlY3QgdGhpcyBwYWNrZXQgb24gdGhlIHdpcmUuXFxuK1xcdCAqL1xcbitcXHR0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrLVxcdTAwM2Vwa3Rfc3RyZWFtLVxcdTAwM2Vwa3RzWzJdLnZhbGlkID0gZmFsc2U7XFxuK1xcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2stXFx1MDAzZXBrdF9zdHJlYW0tXFx1MDAzZW5iX3ZhbGlkX2VudHJpZXMtLTtcXG4rXFxuIFxcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcXG4gXFx0ZnJlZShwa3RzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMjM6NTY6MjcuNzU5ODYyNDIzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTMwODc5NDE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza190eF9jb21taXRfYmF0Y2hcIixcbiAgICBcIl9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoXCIsXG4gICAgXCJ4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoXCIsXG4gICAgXCJ4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZFwiLFxuICAgIFwieHNrX2J1aWxkX3NrYlwiLFxuICAgIFwieHNrX2J1aWxkX3NrYl96ZXJvY29weVwiLFxuICAgIFwiX194c2tfZ2VuZXJpY194bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCB0cmFuc21pc3Npb24gbG9naWMgdG8gY29ycmVjdGx5IGhhbmRsZSBtdWx0aS1idWZmZXIgcGFja2V0cyB3aXRoIGludmFsaWQgZGVzY3JpcHRvcnMgb3IgZXhjZWVkaW5nIHRoZSBtYXhpbXVtIGFsbG93ZWQgZnJhZ21lbnRzLiBJdCBpbnRyb2R1Y2VzIG5ldyBiYXRjaGluZyBhbmQgcmVjbGFpbWluZyBsb2dpYyBmb3IgZGVzY3JpcHRvcnMsIGFuZCB1cGRhdGVzIHRoZSBnZW5lcmljIFhEUCB0cmFuc21pdCBwYXRoIHRvIGRyYWluIGludmFsaWQgcGFja2V0cy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfWERQIHNvY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDlkYjNlNDA4MDAyMWNhNDhkZTU2YjE3ZDMxMGQ3MjIzMDNhY2M4Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDE0IDIzOjU2OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGRwX3NvY2suaCBiL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcbmluZGV4IGViYWM2MGEzZDhhMTdiLi44YjUxODc2ZWZiZWQxYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcbisrKyBiL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcbkBAIC04MCw2ICs4MCw3IEBAIHN0cnVjdCB4ZHBfc29jayB7XG4gXHQgKiBjYWxsIG9mIF9feHNrX2dlbmVyaWNfeG1pdCgpLlxuIFx0ICovXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0Ym9vbCBkcmFpbl9jb250O1xuIFxuIFx0c3RydWN0IGxpc3RfaGVhZCBtYXBfbGlzdDtcbiBcdC8qIFByb3RlY3RzIG1hcF9saXN0ICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oIGIvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXG5pbmRleCBjY2IzYjM1MDAwMWYyNC4uMmJiMWQxMjJiMWJjNmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcbisrKyBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxuQEAgLTc4LDYgKzc4LDkgQEAgc3RydWN0IHhza19idWZmX3Bvb2wge1xuIFx0dTMyIGNodW5rX3NpemU7XG4gXHR1MzIgY2h1bmtfc2hpZnQ7XG4gXHR1MzIgZnJhbWVfbGVuO1xuK1x0dTMyIHR4X2Rlc2NzX25lbnRyaWVzO1xuK1x0dTMyIHJlY2xhaW1fZGVzY3M7XG4rXHR1MzIgdHhfemNfcGVuZGluZ19kZXNjcztcbiBcdHUzMiB4ZHBfemNfbWF4X3NlZ3M7XG4gXHR1OCB0eF9tZXRhZGF0YV9sZW47IC8qIGluaGVyaXRlZCBmcm9tIHVtZW0gKi9cbiBcdHU4IGNhY2hlZF9uZWVkX3dha2V1cDtcbkBAIC0xMDIsMTIgKzEwNSwxNCBAQCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCB7XG4gXG4gLyogQUZfWERQIGNvcmUuICovXG4gc3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cyxcbi1cdFx0XHRcdFx0XHRzdHJ1Y3QgeGRwX3VtZW0gKnVtZW0pO1xuK1x0XHRcdFx0XHRcdHN0cnVjdCB4ZHBfdW1lbSAqdW1lbSxcbitcdFx0XHRcdFx0XHR1MzIgbWF4X3NlZ3MpO1xuIGludCB4cF9hc3NpZ25fZGV2KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgIHUxNiBxdWV1ZV9pZCwgdTE2IGZsYWdzKTtcbiBpbnQgeHBfYXNzaWduX2Rldl9zaGFyZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqdW1lbV94cyxcbiBcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHF1ZXVlX2lkKTtcbi1pbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMpO1xuK2ludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cyxcbitcdFx0ICAgICAgdTMyIG1heF9zZWdzKTtcbiB2b2lkIHhwX2Rlc3Ryb3koc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuIHZvaWQgeHBfZ2V0X3Bvb2woc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuIGJvb2wgeHBfcHV0X3Bvb2woc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXG5pbmRleCBiOTcwZjMwZWE5YjlkOC4uMjkwOWEwZWM2ODM3MzEgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hzay5jXG4rKysgYi9uZXQveGRwL3hzay5jXG5AQCAtNDk5LDYgKzQ5OSwyMyBAQCB2b2lkIF9feHNrX21hcF9mbHVzaChzdHJ1Y3QgbGlzdF9oZWFkICpmbHVzaF9saXN0KVxuIFxuIHZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXG4ge1xuK1x0dTMyIHJlY2xhaW1fZGVzY3MgPSBSRUFEX09OQ0UocG9vbC1cdTAwM2VyZWNsYWltX2Rlc2NzKTtcbitcbitcdGlmICh1bmxpa2VseShyZWNsYWltX2Rlc2NzKSkge1xuK1x0XHR1MzIgcGVuZGluZ19kZXNjcyA9IFJFQURfT05DRShwb29sLVx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MpO1xuK1xuK1x0XHRpZiAobmJfZW50cmllcyBcdTAwM2MgcGVuZGluZ19kZXNjcykge1xuK1x0XHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLFxuK1x0XHRcdFx0ICAgcGVuZGluZ19kZXNjcyAtIG5iX2VudHJpZXMpO1xuK1x0XHRcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVx1MDAzZWNxLCBuYl9lbnRyaWVzKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcbitcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MsIDApO1xuK1x0XHRuYl9lbnRyaWVzICs9IHJlY2xhaW1fZGVzY3M7XG4rXHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2VyZWNsYWltX2Rlc2NzLCAwKTtcbitcdH1cbitcbiBcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVx1MDAzZWNxLCBuYl9lbnRyaWVzKTtcbiB9XG4gRVhQT1JUX1NZTUJPTCh4c2tfdHhfY29tcGxldGVkKTtcbkBAIC01NzQsMjQgKzU5MSwxNjIgQEAgc3RhdGljIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2VudHJcbiBcdHJldHVybiBuYl9wa3RzO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB4c2tfdHhfY29tbWl0X2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuK1x0XHRcdFx0c3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpXG4re1xuK1x0dTMyIG5iX2Rlc2NzID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGJhdGNoKTtcbitcdHUzMiBjcV9jYWNoZWRfcHJvZDtcbitcbitcdGlmICghbmJfZGVzY3MpXG4rXHRcdHJldHVybjtcbitcbitcdGNxX2NhY2hlZF9wcm9kID0gcG9vbC1cdTAwM2VjcS1cdTAwM2VjYWNoZWRfcHJvZDtcbitcdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXHUwMDNlY3EsIHBvb2wtXHUwMDNldHhfZGVzY3MsIG5iX2Rlc2NzKTtcbitcbitcdGlmICh1bmxpa2VseShiYXRjaC1cdTAwM2VyZWNsYWltX2Rlc2NzKSkge1xuK1x0XHR1MzIgY3FfcGVuZGluZ19kZXNjcztcbitcbitcdFx0LyogQ1EgaXMgcG9zaXRpb25hbC4gRGVzY3JpcHRvcnMgYWxyZWFkeSB3cml0dGVuIGJ1dCBub3RcbitcdFx0ICogc3VibWl0dGVkIG11c3QgY29tcGxldGUgYmVmb3JlIGFueSByZWNsYWltLW9ubHkgZGVzY3JpcHRvcnNcbitcdFx0ICogYXBwZW5kZWQgYmVsb3cuXG4rXHRcdCAqL1xuK1x0XHRjcV9wZW5kaW5nX2Rlc2NzID0gY3FfY2FjaGVkX3Byb2QgLSB4c2txX2dldF9wcm9kKHBvb2wtXHUwMDNlY3EpO1xuK1xuK1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyxcbitcdFx0XHQgICBiYXRjaC1cdTAwM2V0eF9kZXNjcyArIGNxX3BlbmRpbmdfZGVzY3MpO1xuK1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcywgYmF0Y2gtXHUwMDNlcmVjbGFpbV9kZXNjcyk7XG4rXHRcdGlmICh1bmxpa2VseSghcG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzKSlcbitcdFx0XHR4c2tfdHhfY29tcGxldGVkKHBvb2wsIDApO1xuK1x0fVxuK31cbitcbitzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxuK19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuK1x0XHRcdFx0IHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXhfZGVzY3MpXG4re1xuK1x0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xuK1x0dTMyIGVudHJpZXM7XG4rXG4rXHRlbnRyaWVzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIG1heF9kZXNjcyk7XG4rXHRpZiAoIWVudHJpZXMpXG4rXHRcdHJldHVybiBiYXRjaDtcbitcbitcdGJhdGNoID0geHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaCh4cywgcG9vbCwgZGVzY3MsIG1heF9kZXNjcyk7XG4rXHRpZiAoIXhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZiYXRjaCkpIHtcbitcdFx0eHMtXHUwMDNldHgtXHUwMDNlcXVldWVfZW1wdHlfZGVzY3MrKztcbitcdFx0aWYgKGJhdGNoLmNvbnN1bWVkX2Rlc2NzKSB7XG4rXHRcdFx0X194c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4rXHRcdFx0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuK1x0XHR9XG4rXHRcdHJldHVybiBiYXRjaDtcbitcdH1cbitcbitcdF9feHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuK1x0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuK1x0cmV0dXJuIGJhdGNoO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxuK3hza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXG4re1xuK1x0dTMyIGNxX2Rlc2NzX2JlZm9yZSwgY3FfZGVzY3NfYWZ0ZXI7XG4rXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIHN1bV9iYXRjaCA9IHt9O1xuK1x0Ym9vbCBidWRnZXRfZXhoYXVzdGVkO1xuK1x0dTMyIHBlcl9zb2NrZXRfYnVkZ2V0O1xuK1x0c3RydWN0IHhkcF9zb2NrICp4cztcbitcbitcdC8qIFRoZSBmYWlybmVzcyBxdW90YSBtdXN0IGFsbG93IG9uZSBtYXhpbXVtLXNpemVkIHZhbGlkIHBhY2tldC4gKi9cbitcdHBlcl9zb2NrZXRfYnVkZ2V0ID0gbWF4X3QodTMyLCBNQVhfUEVSX1NPQ0tFVF9CVURHRVQsXG4rXHRcdFx0XHQgIHBvb2wtXHUwMDNleGRwX3pjX21heF9zZWdzKTtcbitcbithZ2FpbjpcbitcdGJ1ZGdldF9leGhhdXN0ZWQgPSBmYWxzZTtcbitcdGNxX2Rlc2NzX2JlZm9yZSA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsIFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpIHtcbitcdFx0dTMyIGJ1ZGdldCwgYnVkZ2V0X2xlZnQsIG9mZnNldCwgcmVtYWluaW5nO1xuK1x0XHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGN1cnJfYmF0Y2g7XG4rXG4rXHRcdC8qIE9uY2UgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBhcHBlbmRlZCB0byB0aGUgQ1FcbitcdFx0ICogYWRkcmVzcyBhcmVhLCBkbyBub3QgYXBwZW5kIGRyaXZlci12aXNpYmxlIFR4IGRlc2NyaXB0b3JzXG4rXHRcdCAqIGZyb20gYW5vdGhlciBzb2NrZXQgYWZ0ZXIgdGhlbS4geHNrX3R4X2NvbXBsZXRlZCgpIHJlbGllcyBvblxuK1x0XHQgKiBhbGwgZHJpdmVyLXZpc2libGUgZGVzY3JpcHRvcnMgcHJlY2VkaW5nIGFsbCByZWNsYWltLW9ubHlcbitcdFx0ICogZGVzY3JpcHRvcnMgaW4gQ1Egb3JkZXIuXG4rXHRcdCAqL1xuK1x0XHRpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIGJlIGdlbnRsZSB3aGVuIHBsYXlpbmcgd2l0aCBwb29sLVx1MDAzZXR4X2Rlc2NzICovXG4rXHRcdG9mZnNldCA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuK1x0XHRpZiAob2Zmc2V0IFx1MDAzZT0gbWF4X2Rlc2NzKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAoeHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50IFx1MDAzZT0gcGVyX3NvY2tldF9idWRnZXQpIHtcbitcdFx0XHRpZiAoeHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIDEpKVxuK1x0XHRcdFx0YnVkZ2V0X2V4aGF1c3RlZCA9IHRydWU7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0YnVkZ2V0X2xlZnQgPSBwZXJfc29ja2V0X2J1ZGdldCAtIHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudDtcbitcdFx0cmVtYWluaW5nID0gbWF4X2Rlc2NzIC0gb2Zmc2V0O1xuK1x0XHRidWRnZXQgPSBtaW4ocmVtYWluaW5nLCBidWRnZXRfbGVmdCk7XG4rXG4rXHRcdGN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcbitcdFx0XHRcdFx0XHRcdCAgICAgIHBvb2wtXHUwMDNldHhfZGVzY3MgKyBvZmZzZXQsXG4rXHRcdFx0XHRcdFx0XHQgICAgICBidWRnZXQpO1xuK1x0XHRpZiAoIXhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZjdXJyX2JhdGNoKSkge1xuK1x0XHRcdGlmIChjdXJyX2JhdGNoLmJ1ZGdldF9saW1pdGVkIFx1MDAyNlx1MDAyNiBidWRnZXRfbGVmdCBcdTAwM2MgcmVtYWluaW5nKVxuK1x0XHRcdFx0YnVkZ2V0X2V4aGF1c3RlZCA9IHRydWU7XG4rXHRcdFx0eHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50ICs9IGN1cnJfYmF0Y2guY29uc3VtZWRfZGVzY3M7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0eHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50ICs9IGN1cnJfYmF0Y2guY29uc3VtZWRfZGVzY3M7XG4rXHRcdHN1bV9iYXRjaC50eF9kZXNjcyArPSBjdXJyX2JhdGNoLnR4X2Rlc2NzO1xuK1x0XHRzdW1fYmF0Y2gucmVjbGFpbV9kZXNjcyArPSBjdXJyX2JhdGNoLnJlY2xhaW1fZGVzY3M7XG4rXHR9XG4rXG4rXHRjcV9kZXNjc19hZnRlciA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuK1xuK1x0aWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzIHx8IGNxX2Rlc2NzX2FmdGVyIFx1MDAzZT0gbWF4X2Rlc2NzKVxuK1x0XHRyZXR1cm4gc3VtX2JhdGNoO1xuK1xuK1x0LyogQ29udGludWUgZmlsbGluZyB0aGUgYmF0Y2ggd2hpbGUgdGhpcyBwYXNzIG1hZGUgcHJvZ3Jlc3MgKi9cbitcdGlmIChjcV9kZXNjc19iZWZvcmUgIT0gY3FfZGVzY3NfYWZ0ZXIpXG4rXHRcdGdvdG8gYWdhaW47XG4rXG4rXHRpZiAoIWJ1ZGdldF9leGhhdXN0ZWQpXG4rXHRcdHJldHVybiBzdW1fYmF0Y2g7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4cywgXHUwMDI2cG9vbC1cdTAwM2V4c2tfdHhfbGlzdCwgdHhfbGlzdClcbitcdFx0eHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50ID0gMDtcbitcdGdvdG8gYWdhaW47XG4rfVxuK1xuIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxuIHtcbitcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcbiBcdHN0cnVjdCB4ZHBfc29jayAqeHM7XG4rXHRib29sIHVtZW1fc2hhcmVkO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0aWYgKCFsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QpKSB7XG4tXHRcdC8qIEZhbGxiYWNrIHRvIHRoZSBub24tYmF0Y2hlZCB2ZXJzaW9uICovXG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcbi1cdH1cbitcdGlmICh1bmxpa2VseShSRUFEX09OQ0UocG9vbC1cdTAwM2VyZWNsYWltX2Rlc2NzKSkpXG4rXHRcdGdvdG8gb3V0O1xuIFxuLVx0eHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jaywgdHhfbGlzdCk7XG4tXHRpZiAoIXhzKSB7XG4tXHRcdG5iX3BrdHMgPSAwO1xuK1x0eHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jayxcbitcdFx0XHRcdCAgICB0eF9saXN0KTtcbitcdGlmICgheHMpXG4gXHRcdGdvdG8gb3V0O1xuLVx0fVxuIFxuLVx0bmJfcGt0cyA9IHhza3FfY29uc19uYl9lbnRyaWVzKHhzLVx1MDAzZXR4LCBuYl9wa3RzKTtcbitcdG5iX3BrdHMgPSBtaW4obmJfcGt0cywgcG9vbC1cdTAwM2V0eF9kZXNjc19uZW50cmllcyk7XG4rXHRpZiAoIW5iX3BrdHMpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0dW1lbV9zaGFyZWQgPSAhbGlzdF9pc19zaW5ndWxhcihcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0KTtcbitcbitcdGlmICh1bWVtX3NoYXJlZCBcdTAwMjZcdTAwMjYgIShwb29sLVx1MDAzZXVtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9VTUVNX1NHX0ZMQUcpKSB7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcbitcdH1cbiBcbiBcdC8qIFRoaXMgaXMgdGhlIGJhY2twcmVzc3VyZSBtZWNoYW5pc20gZm9yIHRoZSBUeCBwYXRoLiBUcnkgdG9cbiBcdCAqIHJlc2VydmUgc3BhY2UgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgZm9yIGFsbCBwYWNrZXRzLCBidXRcbkBAIC02MDMsMTkgKzc1OCwxNiBAQCB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcbiBcdGlmICghbmJfcGt0cylcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRuYl9wa3RzID0geHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaCh4cy1cdTAwM2V0eCwgcG9vbCwgbmJfcGt0cyk7XG4tXHRpZiAoIW5iX3BrdHMpIHtcbi1cdFx0eHMtXHUwMDNldHgtXHUwMDNlcXVldWVfZW1wdHlfZGVzY3MrKztcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbi1cdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXHUwMDNlY3EsIHBvb2wtXHUwMDNldHhfZGVzY3MsIG5iX3BrdHMpO1xuLVx0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuK1x0YmF0Y2ggPSB1bWVtX3NoYXJlZCA/XG4rXHRcdHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gocG9vbCwgbmJfcGt0cykgOlxuK1x0XHRfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcbitcdFx0XHRcdFx0XHQgcG9vbC1cdTAwM2V0eF9kZXNjcyxcbitcdFx0XHRcdFx0XHQgbmJfcGt0cyk7XG4rXHR4c2tfdHhfY29tbWl0X2JhdGNoKHBvb2wsIFx1MDAyNmJhdGNoKTtcbiBcbiBvdXQ6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdHJldHVybiBuYl9wa3RzO1xuK1x0cmV0dXJuIGJhdGNoLnR4X2Rlc2NzO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XG4gXG5AQCAtNzM3LDYgKzg4OSwxOSBAQCBzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHUzMiBpZHg7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuK1x0aWR4ID0geHNrcV9nZXRfcHJvZChwb29sLVx1MDAzZWNxKTtcbitcdHhza3FfcHJvZF93cml0ZV9hZGRyKHBvb2wtXHUwMDNlY3EsIGlkeCwgZGVzYy1cdTAwM2VhZGRyKTtcbitcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVx1MDAzZWNxLCAxKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9vbC1cdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxuIHtcbiBcdHNwaW5fbG9jayhcdTAwMjZwb29sLVx1MDAzZWNxLVx1MDAzZWNxX2NhY2hlZF9wcm9kX2xvY2spO1xuQEAgLTc5NCw4ICs5NTksMTEgQEAgc3RhdGljIHZvaWQgeHNrX2NvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gc3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0eGRwX3NrKHNrYi1cdTAwM2VzayktXHUwMDNldHgtXHUwMDNlaW52YWxpZF9kZXNjcyArPSB4c2tfZ2V0X251bV9kZXNjKHNrYik7XG4tXHR4c2tfY29uc3VtZV9za2Ioc2tiKTtcbitcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2tiLVx1MDAzZXNrKTtcbitcbitcdHhzLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MgKz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xuK1x0Y29uc3VtZV9za2Ioc2tiKTtcbitcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXG5AQCAtODc3LDcgKzEwNDUsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdFx0LyogaW4gY2FzZSBvZiAtRU9WRVJGTE9XIHRoYXQgY291bGQgaGFwcGVuIGJlbG93LFxuLVx0XHQgKiB4c2tfY29uc3VtZV9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYlxuK1x0XHQgKiB4c2tfZHJvcF9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYlxuIFx0XHQgKiB3b3VsZCBiZSBkcm9wcGVkLCB3aGljaCBpbXBsaWVzIGZyZWVpbmcgYWxsIGxpc3QgZWxlbWVudHNcbiBcdFx0ICovXG4gXHRcdHhza19hZGRyLVx1MDAzZWFkZHJzW3hza19hZGRyLVx1MDAzZW51bV9kZXNjc10gPSBkZXNjLVx1MDAzZWFkZHI7XG5AQCAtOTY5LDYgKzExMzcsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4gXHRcdFx0fVxuIFxuK1x0XHRcdHhza19hZGRyLVx1MDAzZWFkZHJzW3hza19hZGRyLVx1MDAzZW51bV9kZXNjc10gPSBkZXNjLVx1MDAzZWFkZHI7XG4rXG4gXHRcdFx0aWYgKHVubGlrZWx5KG5yX2ZyYWdzID09IChNQVhfU0tCX0ZSQUdTIC0gMSkgXHUwMDI2XHUwMDI2IHhwX21iX2Rlc2MoZGVzYykpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRU9WRVJGTE9XO1xuIFx0XHRcdFx0Z290byBmcmVlX2VycjtcbkBAIC05ODYsOCArMTE1Niw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuIFxuIFx0XHRcdHNrYl9hZGRfcnhfZnJhZyhza2IsIG5yX2ZyYWdzLCBwYWdlLCAwLCBsZW4sIFBBR0VfU0laRSk7XG4gXHRcdFx0cmVmY291bnRfYWRkKFBBR0VfU0laRSwgXHUwMDI2eHMtXHUwMDNlc2suc2tfd21lbV9hbGxvYyk7XG4tXG4tXHRcdFx0eHNrX2FkZHItXHUwMDNlYWRkcnNbeHNrX2FkZHItXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXHUwMDNlYWRkcjtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTEwNjAsMTEgKzEyMjgsMjIgQEAgc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4rXHRcdGlmICh1bmxpa2VseSh4cy1cdTAwM2VkcmFpbl9jb250KSkge1xuK1x0XHRcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIFx1MDAyNmRlc2MpO1xuK1xuK1x0XHRcdHhzLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MrKztcbitcdFx0XHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4rXHRcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXHUwMDI2ZGVzYyk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXHUwMDI2ZGVzYyk7XG4gXHRcdGlmIChJU19FUlIoc2tiKSkge1xuIFx0XHRcdGVyciA9IFBUUl9FUlIoc2tiKTtcbiBcdFx0XHRpZiAoZXJyICE9IC1FT1ZFUkZMT1cpXG4gXHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHRpZiAoeHBfbWJfZGVzYyhcdTAwMjZkZXNjKSlcbitcdFx0XHRcdHhzLVx1MDAzZWRyYWluX2NvbnQgPSB0cnVlO1xuIFx0XHRcdGVyciA9IDA7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbkBAIC0xMDk4LDkgKzEyNzcsMjQgQEAgc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuIFx0fVxuIFxuIFx0aWYgKHhza3FfaGFzX2Rlc2NzKHhzLVx1MDAzZXR4KSkge1xuK1x0XHRib29sIHJlY2xhaW1fZGVzYyA9IHhzLVx1MDAzZXNrYiB8fCB4cy1cdTAwM2VkcmFpbl9jb250O1xuK1xuK1x0XHRpZiAocmVjbGFpbV9kZXNjKSB7XG4rXHRcdFx0ZXJyID0geHNrX2NxX3Jlc2VydmVfbG9ja2VkKHhzLVx1MDAzZXBvb2wpO1xuK1x0XHRcdGlmIChlcnIpIHtcbitcdFx0XHRcdGVyciA9IC1FQUdBSU47XG4rXHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHR9XG4rXHRcdH1cbitcbiBcdFx0aWYgKHhzLVx1MDAzZXNrYilcbiBcdFx0XHR4c2tfZHJvcF9za2IoeHMtXHUwMDNlc2tiKTtcbitcbitcdFx0aWYgKHJlY2xhaW1fZGVzYylcbitcdFx0XHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cdTAwM2Vwb29sLCBcdTAwMjZkZXNjKTtcbitcbiBcdFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuK1x0XHR4cy1cdTAwM2VkcmFpbl9jb250ID0geHBfbWJfZGVzYyhcdTAwMjZkZXNjKTtcbiBcdH1cbiBcbiBvdXQ6XG5AQCAtMTQ4Myw3ICsxNjc3LDggQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcbiBcdFx0XHQgKiBhbmQvb3IgZGV2aWNlLlxuIFx0XHRcdCAqL1xuIFx0XHRcdHhzLVx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLFxuLVx0XHRcdFx0XHRcdFx0ICAgICB1bWVtX3hzLVx1MDAzZXVtZW0pO1xuK1x0XHRcdFx0XHRcdFx0ICAgICB1bWVtX3hzLVx1MDAzZXVtZW0sXG4rXHRcdFx0XHRcdFx0XHQgICAgIGRldi1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xuIFx0XHRcdGlmICgheHMtXHUwMDNlcG9vbCkge1xuIFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG5AQCAtMTUxNSw3ICsxNzEwLDggQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcbiBcdFx0XHQgKiB1dGlsaXplc1xuIFx0XHRcdCAqL1xuIFx0XHRcdGlmICh4cy1cdTAwM2V0eCBcdTAwMjZcdTAwMjYgIXhzLVx1MDAzZXBvb2wtXHUwMDNldHhfZGVzY3MpIHtcbi1cdFx0XHRcdGVyciA9IHhwX2FsbG9jX3R4X2Rlc2NzKHhzLVx1MDAzZXBvb2wsIHhzKTtcbitcdFx0XHRcdGVyciA9IHhwX2FsbG9jX3R4X2Rlc2NzKHhzLVx1MDAzZXBvb2wsIHhzLFxuK1x0XHRcdFx0XHRcdFx0ZGV2LVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRcdHhwX3B1dF9wb29sKHhzLVx1MDAzZXBvb2wpO1xuIFx0XHRcdFx0XHR4cy1cdTAwM2Vwb29sID0gTlVMTDtcbkBAIC0xNTMzLDcgKzE3MjksOSBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkclxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBUaGlzIHhzayBoYXMgaXRzIG93biB1bWVtLiAqL1xuLVx0XHR4cy1cdTAwM2Vwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cywgeHMtXHUwMDNldW1lbSk7XG4rXHRcdHhzLVx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLCB4cy1cdTAwM2V1bWVtLFxuK1x0XHRcdFx0XHRcdCAgICAgZGV2LVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4rXG4gXHRcdGlmICgheHMtXHUwMDNlcG9vbCkge1xuIFx0XHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jIGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcbmluZGV4IDFmMjhhOTY0MTU3MWU0Li5hNDA4OTQ4MGIyMmIyNSAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXG4rKysgYi9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xuQEAgLTQyLDE3ICs0MiwyMiBAQCB2b2lkIHhwX2Rlc3Ryb3koc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG4gXHRrdmZyZWUocG9vbCk7XG4gfVxuIFxuLWludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cylcbitpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4rXHRcdCAgICAgIHUzMiBtYXhfc2VncylcbiB7XG4tXHRwb29sLVx1MDAzZXR4X2Rlc2NzID0ga3Z6YWxsb2Nfb2JqcygqcG9vbC1cdTAwM2V0eF9kZXNjcywgeHMtXHUwMDNldHgtXHUwMDNlbmVudHJpZXMpO1xuK1x0dTMyIG5lbnRyaWVzID0gbWF4KHhzLVx1MDAzZXR4LVx1MDAzZW5lbnRyaWVzLCBtYXhfc2Vncyk7XG4rXG4rXHRwb29sLVx1MDAzZXR4X2Rlc2NzID0ga3Z6YWxsb2Nfb2JqcygqcG9vbC1cdTAwM2V0eF9kZXNjcywgbmVudHJpZXMpO1xuIFx0aWYgKCFwb29sLVx1MDAzZXR4X2Rlc2NzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdHBvb2wtXHUwMDNldHhfZGVzY3NfbmVudHJpZXMgPSBuZW50cmllcztcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLVx0XHRcdFx0XHRcdHN0cnVjdCB4ZHBfdW1lbSAqdW1lbSlcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgeGRwX3VtZW0gKnVtZW0sXG4rXHRcdFx0XHRcdFx0dTMyIG1heF9zZWdzKVxuIHtcbiBcdGJvb2wgdW5hbGlnbmVkID0gdW1lbS1cdTAwM2VmbGFncyBcdTAwMjYgWERQX1VNRU1fVU5BTElHTkVEX0NIVU5LX0ZMQUc7XG4gXHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbDtcbkBAIC02OSw3ICs3NCw3IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0aWYgKHhzLVx1MDAzZXR4KVxuLVx0XHRpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMpKVxuK1x0XHRpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMsIG1heF9zZWdzKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbiBcdHBvb2wtXHUwMDNlY2h1bmtfbWFzayA9IH4oKHU2NCl1bWVtLVx1MDAzZWNodW5rX3NpemUgLSAxKTtcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19xdWV1ZS5oIGIvbmV0L3hkcC94c2tfcXVldWUuaFxuaW5kZXggM2UzZmJiNzNkMjNlMmYuLmExNWZmMTkyOWRiNjIzIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2tfcXVldWUuaFxuKysrIGIvbmV0L3hkcC94c2tfcXVldWUuaFxuQEAgLTU4LDYgKzU4LDE4IEBAIHN0cnVjdCBwYXJzZWRfZGVzYyB7XG4gXHR1MzIgdmFsaWQ7XG4gfTtcbiBcbitzdHJ1Y3QgeHNrX3R4X2JhdGNoIHtcbitcdHUzMiB0eF9kZXNjcztcbitcdHUzMiByZWNsYWltX2Rlc2NzO1xuK1x0dTMyIGNvbnN1bWVkX2Rlc2NzO1xuK1x0Ym9vbCBidWRnZXRfbGltaXRlZDtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgdTMyIHhza190eF9iYXRjaF9jcV9kZXNjcyhjb25zdCBzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaClcbit7XG4rXHRyZXR1cm4gYmF0Y2gtXHUwMDNldHhfZGVzY3MgKyBiYXRjaC1cdTAwM2VyZWNsYWltX2Rlc2NzO1xuK31cbitcbiAvKiBUaGUgc3RydWN0dXJlIG9mIHRoZSBzaGFyZWQgc3RhdGUgb2YgdGhlIHJpbmdzIGFyZSBhIHNpbXBsZVxuICAqIGNpcmN1bGFyIGJ1ZmZlciwgYXMgb3V0bGluZWQgaW5cbiAgKiBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL2NpcmN1bGFyLWJ1ZmZlcnMucnN0LiBGb3IgdGhlIFJ4IGFuZFxuQEAgLTI2MywxNyArMjc1LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZV9kZXNjKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIFx0cGFyc2VkLVx1MDAzZW1iID0geHBfbWJfZGVzYyhkZXNjKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZVxuLXUzMiB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLVx0XHRcdCAgICAgIHUzMiBtYXgpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeHNrX3R4X2JhdGNoXG4reHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbitcdFx0XHQgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXgpXG4ge1xuLVx0dTMyIGNhY2hlZF9jb25zID0gcS1cdTAwM2VjYWNoZWRfY29ucywgbmJfZW50cmllcyA9IDA7XG4tXHRzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzID0gcG9vbC1cdTAwM2V0eF9kZXNjcztcbi1cdHUzMiB0b3RhbF9kZXNjcyA9IDAsIG5yX2ZyYWdzID0gMDtcbitcdGJvb2wgZHJhaW4gPSBSRUFEX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCk7XG4rXHR1MzIgY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwLCByZWxlYXNlZDtcbitcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcbitcdHN0cnVjdCB4c2tfcXVldWUgKnEgPSB4cy1cdTAwM2V0eDtcbitcdHUzMiBucl9mcmFncyA9IDA7XG4rXG4rXHRjYWNoZWRfY29ucyA9IHEtXHUwMDNlY2FjaGVkX2NvbnM7XG4gXG4tXHQvKiB0cmFjayBmaXJzdCBlbnRyeSwgaWYgc3R1bWJsZSB1cG9uICphbnkqIGludmFsaWQgZGVzY3JpcHRvciwgcmV3aW5kXG4tXHQgKiBjdXJyZW50IHBhY2tldCB0aGF0IGNvbnNpc3RzIG9mIGZyYWdzIGFuZCBzdG9wIHRoZSBwcm9jZXNzaW5nXG4tXHQgKi9cbiBcdHdoaWxlIChjYWNoZWRfY29ucyAhPSBxLVx1MDAzZWNhY2hlZF9wcm9kIFx1MDAyNlx1MDAyNiBuYl9lbnRyaWVzIFx1MDAzYyBtYXgpIHtcbiBcdFx0c3RydWN0IHhkcF9yeHR4X3JpbmcgKnJpbmcgPSAoc3RydWN0IHhkcF9yeHR4X3JpbmcgKilxLVx1MDAzZXJpbmc7XG4gXHRcdHUzMiBpZHggPSBjYWNoZWRfY29ucyBcdTAwMjYgcS1cdTAwM2VyaW5nX21hc2s7XG5AQCAtMjgyLDI2ICsyOTUsNDkgQEAgdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4gXHRcdGRlc2NzW25iX2VudHJpZXNdID0gcmluZy1cdTAwM2VkZXNjW2lkeF07XG4gXHRcdGNhY2hlZF9jb25zKys7XG4gXHRcdHBhcnNlX2Rlc2MocSwgcG9vbCwgXHUwMDI2ZGVzY3NbbmJfZW50cmllc10sIFx1MDAyNnBhcnNlZCk7XG4tXHRcdGlmICh1bmxpa2VseSghcGFyc2VkLnZhbGlkKSlcbi1cdFx0XHRicmVhaztcbitcdFx0aWYgKHVubGlrZWx5KCFwYXJzZWQudmFsaWQpKSB7XG4rXHRcdFx0aWYgKCFkcmFpbiBcdTAwMjZcdTAwMjYgIW5yX2ZyYWdzIFx1MDAyNlx1MDAyNiAhcGFyc2VkLm1iKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdFx0ZHJhaW4gPSB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdG5yX2ZyYWdzKys7XG4rXHRcdG5iX2VudHJpZXMrKztcbiBcbiBcdFx0aWYgKGxpa2VseSghcGFyc2VkLm1iKSkge1xuLVx0XHRcdHRvdGFsX2Rlc2NzICs9IChucl9mcmFncyArIDEpO1xuLVx0XHRcdG5yX2ZyYWdzID0gMDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRucl9mcmFncysrO1xuLVx0XHRcdGlmIChucl9mcmFncyA9PSBwb29sLVx1MDAzZXhkcF96Y19tYXhfc2Vncykge1xuK1x0XHRcdGlmICh1bmxpa2VseShkcmFpbikpIHtcbitcdFx0XHRcdGJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFncztcbitcdFx0XHRcdFdSSVRFX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCwgZmFsc2UpO1xuIFx0XHRcdFx0bnJfZnJhZ3MgPSAwO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuK1xuK1x0XHRcdGJhdGNoLnR4X2Rlc2NzICs9IG5yX2ZyYWdzO1xuK1x0XHRcdG5yX2ZyYWdzID0gMDtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAobnJfZnJhZ3MgPT0gcG9vbC1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpXG4rXHRcdFx0ZHJhaW4gPSB0cnVlO1xuK1x0fVxuK1xuK1x0aWYgKG5yX2ZyYWdzKSB7XG4rXHRcdGlmIChkcmFpbikge1xuK1x0XHRcdGJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFncztcbitcdFx0XHRXUklURV9PTkNFKHhzLVx1MDAzZWRyYWluX2NvbnQsIHRydWUpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGlmIChuYl9lbnRyaWVzID09IG1heClcbitcdFx0XHRcdGJhdGNoLmJ1ZGdldF9saW1pdGVkID0gdHJ1ZTtcbitcdFx0XHRjYWNoZWRfY29ucyAtPSBucl9mcmFncztcbiBcdFx0fVxuLVx0XHRuYl9lbnRyaWVzKys7XG4gXHR9XG4gXG4tXHRjYWNoZWRfY29ucyAtPSBucl9mcmFncztcbitcdHJlbGVhc2VkID0gY2FjaGVkX2NvbnMgLSBxLVx1MDAzZWNhY2hlZF9jb25zO1xuIFx0LyogUmVsZWFzZSB2YWxpZCBwbHVzIGFueSBpbnZhbGlkIGVudHJpZXMgKi9cbi1cdHhza3FfY29uc19yZWxlYXNlX24ocSwgY2FjaGVkX2NvbnMgLSBxLVx1MDAzZWNhY2hlZF9jb25zKTtcbi1cdHJldHVybiB0b3RhbF9kZXNjcztcbitcdHhza3FfY29uc19yZWxlYXNlX24ocSwgcmVsZWFzZWQpO1xuK1x0YmF0Y2guY29uc3VtZWRfZGVzY3MgPSByZWxlYXNlZDtcbitcdHJldHVybiBiYXRjaDtcbiB9XG4gXG4gLyogRnVuY3Rpb25zIGZvciBjb25zdW1lcnMgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuaW5kZXggNmViOTA5NmQwODRjMDEuLjdhYmI0OTM1ZWRmOWFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuQEAgLTQyNywxNCArNDI3LDE0IEBAIHN0YXRpYyB1MzIgcGt0X25iX2ZyYWdzKHUzMiBmcmFtZV9zaXplLCBzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbSwgc3RydWN0IHBrXG4gXHR9XG4gXG4gXHQvKiBTZWFyY2ggZm9yIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBpbiB2ZXJiYXRpbSBtb2RlICovXG4tXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4rXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpKVxuIFx0XHRyZXR1cm4gbmJfZnJhZ3M7XG4gXG4gXHRuZXh0X2ZyYWcgPSBwa3Rfc3RyZWFtLVx1MDAzZWN1cnJlbnRfcGt0X25iO1xuIFx0cGt0Kys7XG4gXHR3aGlsZSAobmV4dF9mcmFnKysgXHUwMDNjIHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cykge1xuIFx0XHRuYl9mcmFncysrO1xuLVx0XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4rXHRcdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXHUwMDNlb3B0aW9ucykpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHBrdCsrO1xuIFx0fVxuQEAgLTY2NSwxMSArNjY1LDExIEBAIHN0YXRpYyBzdHJ1Y3QgcGt0X3N0cmVhbSAqX19wa3Rfc3RyZWFtX2dlbmVyYXRlX2N1c3RvbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzXG4gXHRcdFx0aWYgKCFmcmFtZS1cdTAwM2V2YWxpZCB8fCAhcGt0X2NvbnRpbnVlcyhmcmFtZS1cdTAwM2VvcHRpb25zKSlcbiBcdFx0XHRcdHBheWxvYWQrKztcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAoZnJhbWUtXHUwMDNldmFsaWQpXG4rXHRcdFx0aWYgKGZyYW1lLVx1MDAzZXZhbGlkKSB7XG4gXHRcdFx0XHRsZW4gKz0gZnJhbWUtXHUwMDNlbGVuO1xuLVx0XHRcdGlmIChmcmFtZS1cdTAwM2V2YWxpZCBcdTAwMjZcdTAwMjYgcGt0X2NvbnRpbnVlcyhmcmFtZS1cdTAwM2VvcHRpb25zKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuK1x0XHRcdFx0aWYgKHBrdF9jb250aW51ZXMoZnJhbWUtXHUwMDNlb3B0aW9ucykpXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbiBcdFx0XHRwa3QtXHUwMDNlcGt0X25iID0gcGt0X25iO1xuIFx0XHRcdHBrdC1cdTAwM2VsZW4gPSBsZW47XG4gXHRcdFx0cGt0LVx1MDAzZXZhbGlkID0gZnJhbWUtXHUwMDNldmFsaWQ7XG5AQCAtMTIwOSw2ICsxMjA5LDcgQEAgc3RhdGljIGludCBfX3NlbmRfcGt0cyhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB4c2stXHUwMDNlYmF0Y2hfc2l6ZTsgaSsrKSB7XG4gXHRcdHN0cnVjdCBwa3QgKnBrdCA9IHBrdF9zdHJlYW1fZ2V0X25leHRfdHhfcGt0KHBrdF9zdHJlYW0pO1xuIFx0XHR1MzIgbmJfZnJhZ3NfbGVmdCwgbmJfZnJhZ3MsIGJ5dGVzX3dyaXR0ZW4gPSAwO1xuK1x0XHRzdHJ1Y3QgcGt0ICpmaXJzdF9wa3QgPSBwa3Q7XG4gXG4gXHRcdGlmICghcGt0KVxuIFx0XHRcdGJyZWFrO1xuQEAgLTEyNTMsNiArMTI1NCw4IEBAIHN0YXRpYyBpbnQgX19zZW5kX3BrdHMoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLFxuIFx0XHRpZiAocGt0IFx1MDAyNlx1MDAyNiBwa3QtXHUwMDNldmFsaWQpIHtcbiBcdFx0XHR2YWxpZF9wa3RzKys7XG4gXHRcdFx0dmFsaWRfZnJhZ3MgKz0gbmJfZnJhZ3M7XG4rXHRcdH0gZWxzZSBpZiAocGt0X3N0cmVhbS1cdTAwM2V2ZXJiYXRpbSBcdTAwMjZcdTAwMjYgcGt0X2NvbnRpbnVlcyhmaXJzdF9wa3QtXHUwMDNlb3B0aW9ucykpIHtcbitcdFx0XHR2YWxpZF9mcmFncyArPSBuYl9mcmFncztcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTIwOTksMTMgKzIxMDIsMTYgQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRcdHswLCAwLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgYWRkcmVzcyBpbiB0aGUgc2Vjb25kIGZyYW1lICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuLVx0XHR7dW1lbV9zeiwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbitcdFx0e3VtZW1fc3ogKiAyLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuK1x0XHR7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4rXHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogSW52YWxpZCBvcHRpb25zIGluIHRoZSBtaWRkbGUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhTS19ERVNDX19JTlZBTElEX09QVElPTn0sXG4rXHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogVHJhbnNtaXQgMiBmcmFncywgcmVjZWl2ZSAzICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIFhEUF9QS1RfQ09OVER9LFxuIFx0XHR7MCwgWFNLX1VNRU1fX01BWF9GUkFNRV9TSVpFLCAwLCB0cnVlLCAwfSxcbkBAIC0yMTE3LDggKzIxMjMsOCBAQCBpbnQgdGVzdGFwcF9pbnZhbGlkX2Rlc2NfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcbiBcdGlmICh1bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlKSB7XG4gXHRcdC8qIENyb3NzaW5nIGEgY2h1bmsgYm91bmRhcnkgYWxsb3dlZCAqL1xuLVx0XHRwa3RzWzEyXS52YWxpZCA9IHRydWU7XG4tXHRcdHBrdHNbMTNdLnZhbGlkID0gdHJ1ZTtcbitcdFx0cGt0c1sxNV0udmFsaWQgPSB0cnVlO1xuK1x0XHRwa3RzWzE2XS52YWxpZCA9IHRydWU7XG4gXHR9XG4gXG4gXHR0ZXN0LVx1MDAzZW10dSA9IE1BWF9FVEhfSlVNQk9fU0laRTtcbkBAIC0yMjcwLDcgKzIyNzYsNyBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHRtYXhfZnJhZ3MgKz0gMTtcbiBcdH1cbiBcbi1cdHBrdHMgPSBjYWxsb2MoMiAqIG1heF9mcmFncyArIDIsIHNpemVvZihzdHJ1Y3QgcGt0KSk7XG4rXHRwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgKyAzLCBzaXplb2Yoc3RydWN0IHBrdCkpO1xuIFx0aWYgKCFwa3RzKVxuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFxuQEAgLTIyODgsMjQgKzIyOTQsMzAgQEAgaW50IHRlc3RhcHBfdG9vX21hbnlfZnJhZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdH1cbiBcdHBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDtcbiBcbi1cdC8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0XG4tXHQgKiBjb250aW51ZXMgb24gdGhlIGxhc3QgZnJhZ1xuLVx0ICovXG4tXHRmb3IgKGkgPSBtYXhfZnJhZ3MgKyAxOyBpIFx1MDAzYyAyICogbWF4X2ZyYWdzICsgMTsgaSsrKSB7XG4rXHQvKiBBbiBpbnZhbGlkIHBhY2tldCB3aXRoIHRoZSBtYXggKyAxIGFtb3VudCBvZiBmcmFncyAqL1xuK1x0Zm9yIChpID0gbWF4X2ZyYWdzICsgMTsgaSBcdTAwM2MgMiAqIG1heF9mcmFncyArIDI7IGkrKykge1xuIFx0XHRwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTtcbiBcdFx0cGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDtcbi1cdFx0cGt0c1tpXS52YWxpZCA9IGZhbHNlO1xuK1x0XHRwa3RzW2ldLnZhbGlkID0gdHJ1ZTtcbiBcdH1cbitcdHBrdHNbMiAqIG1heF9mcmFncyArIDFdLm9wdGlvbnMgPSAwO1xuIFxuIFx0LyogVmFsaWQgcGFja2V0IGZvciBzeW5jaCAqL1xuLVx0cGt0c1syICogbWF4X2ZyYWdzICsgMV0ubGVuID0gTUlOX1BLVF9TSVpFO1xuLVx0cGt0c1syICogbWF4X2ZyYWdzICsgMV0udmFsaWQgPSB0cnVlO1xuK1x0cGt0c1syICogbWF4X2ZyYWdzICsgMl0ubGVuID0gTUlOX1BLVF9TSVpFO1xuK1x0cGt0c1syICogbWF4X2ZyYWdzICsgMl0udmFsaWQgPSB0cnVlO1xuIFxuLVx0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgKyAyKSkge1xuK1x0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgKyAzKSkge1xuIFx0XHRmcmVlKHBrdHMpO1xuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0fVxuIFxuK1x0LyogVGhlIGdlbmVyYXRlZCBUeCBzdHJlYW0gbXVzdCBrZWVwIHRoZSB0b28tYmlnIHBhY2tldCB2YWxpZCBzbyB0aGF0XG4rXHQgKiBfX3NlbmRfcGt0cygpIGFjY291bnRzIGl0cyBkZXNjcmlwdG9ycyBpbiBvdXRzdGFuZGluZ190eC4gVGhlIFJ4XG4rXHQgKiBzdHJlYW0sIGhvd2V2ZXIsIG11c3Qgbm90IGV4cGVjdCB0aGlzIHBhY2tldCBvbiB0aGUgd2lyZS5cbitcdCAqL1xuK1x0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNlcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzJdLnZhbGlkID0gZmFsc2U7XG4rXHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2Vwa3Rfc3RyZWFtLVx1MDAzZW5iX3ZhbGlkX2VudHJpZXMtLTtcbitcbiBcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcbiBcdGZyZWUocGt0cyk7XG4gXHRyZXR1cm4gcmV0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMjM6NTY6MjcuNzU5ODY0MDczWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMxMDMwMjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFGX1hEUCBNdWx0aS1CdWZmZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gQUZfWERQLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgbXVsdGktYnVmZmVyIHBhY2tldHMuIEl0J3MgdG91Y2hpbmcgYSBsb3Qgb2Yga2V5IGFyZWFzOiBgeGRwX3NvY2suaGAsIGB4c2tfYnVmZl9wb29sLmhgLCBhbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZmlsZXMgbGlrZSBgeHNrLmNgLCBgeHNrX2J1ZmZfcG9vbC5jYCwgYW5kIGB4c2tfcXVldWUuaGAsIGFsb25nIHdpdGggaXRzIHNlbGZ0ZXN0cy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWJvdXQgaW1wcm92aW5nIGhvdyB3ZSBkZWFsIHdpdGggaW52YWxpZCBkZXNjcmlwdG9ycyBvciBzaXR1YXRpb25zIHdoZXJlIHdlIGhhdmUgdG9vIG1hbnkgcGFja2V0IGZyYWdtZW50cy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGVyZm9ybWFuY2UgYW5kIGVycm9yIGhhbmRsaW5nIGltcHJvdmVtZW50LiBUaGV54oCZdmUgaW50cm9kdWNlZCBhIGBkcmFpbl9jb250YCBmaWVsZCBpbiBgeGRwX3NvY2tgIGFuZCBhIGB4c2tfdHhfYmF0Y2hgIHN0cnVjdHVyZSB0byBoYW5kbGUgZGVzY3JpcHRvciBiYXRjaGluZyBhbmQgcmVjbGFtYXRpb24sIHdoaWNoIEkgdGhpbmsgaXMgYSBzbWFydCBtb3ZlLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkgd2FudCB0byBjb25maXJtIHRoYXQgQUZfWERQIGlzLCBpbiBmYWN0LCBhbiBhY3RpdmUsIGNvcmUgcGllY2Ugb2YgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LiBZZXAsIHRoYXQncyBjb3JyZWN0LiBHb29kLCB3ZSBjYW4gZm9jdXMgb3VyIGVmZm9ydHMgaGVyZS4gQW5kIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIGZ1enppbmcgdGhpcyBwYXRjaCBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCB0byBlbnN1cmUgaXRzIHJvYnVzdG5lc3MuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSXQncyBvYnZpb3VzbHkgZGVwZW5kZW50IG9uIGBDT05GSUdfWERQX1NPQ0tFVFM9eWAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTEw9eWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBcblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggaXMgY2xlYXJseSB6ZXJvaW5nIGluIG9uIGEgbnVtYmVyIG9mIGtleSBmdW5jdGlvbnM6IGB4c2tfdHhfY29tcGxldGVkYCwgYHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2tgLCBhIG5ldyBiYXRjaGluZyBmdW5jdGlvbjogYHhza190eF9jb21taXRfYmF0Y2hgLCBzZXZlcmFsIG5ldyBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCB2YXJpYW50cywgdGhlIGB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZGAgYW5kIHNvbWUgY29yZSBoYW5kbGluZyBmdW5jdGlvbnMgZm9yIGRyb3AsIGJ1aWxkaW5nIGFuZCB0cmFuc21pc3Npb24gdmlhIGB4c2tfZHJvcF9za2JgLCBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAsIGB4c2tfYnVpbGRfc2tiYCwgYW5kIGBfX3hza19nZW5lcmljX3htaXRgLCBwbHVzIHNvbWUgc2V0dXAgZnVuY3Rpb25zIGxpa2UgYHhza19iaW5kYCwgYHhwX2FsbG9jX3R4X2Rlc2NzYCwgYHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW1gLCBhbmQgYHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2hgLiBUaGF0J3MgcXVpdGUgYSB3aWRlIGltcGFjdCwgc28gSSdsbCB3YW50IHRvIGZvY3VzIHNwZWNpZmljYWxseSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXBzIHdpbGwgYmUgdG8gZ3JlcCBmb3IgYHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAgYW5kIGBfX3hza19nZW5lcmljX3htaXRgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGJlaW5nIHVzZWQgaW4gdGhlIGNvZGUgYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBwcmltYXJ5IHNjb3BlIG9mIHRoZSBjaGFuZ2VzIGFuZCBndWlkZSBteSBkZWVwIGRpdmUgaW50byB0aGUgcGF0Y2gncyBpbXBsZW1lbnRhdGlvbiBhbmQgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNDIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQyMzo1NjozNS4wNzAxNjc5OTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYwMDg3MjkxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTc5MT1zdGF0aWMgdm9pZCB0c25lcF94ZHBfeG1pdF96YyhzdHJ1Y3QgdHNuZXBfdHggKnR4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTgwNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM6ODA1OlxcdGJhdGNoID0geHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHR4LVxcdTAwM2V4c2tfcG9vbCwgZGVzY19hdmFpbGFibGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy04MDYtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJhdGNoOyBpKyspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmM9MzkwPWJvb2wgZHBhYTJfeHNrX3R4KHN0cnVjdCBkcGFhMl9ldGhfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi14c2suYy00MDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXhzay5jOjQxMDpcXHRiYXRjaCA9IHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChjaC1cXHUwMDNleHNrX3Bvb2wsIGJ1ZGdldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXhzay5jLTQxMS1cXHRpZiAoIWJhdGNoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9MTQ4Mj1zdGF0aWMgYm9vbCBmZWNfZW5ldF94c2tfeG1pdChzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMTUwNS1cXHRidWRnZXQgPSBtaW4oZnJlZV9iZHMsIEZFQ19YU0tfVFhfQlVER0VUX01BWCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MTUwNjpcXHRiYXRjaCA9IHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCBidWRnZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTE1MDctXFx0aWYgKCFiYXRjaClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYz01Nzk9c3RhdGljIGJvb2wgaTQwZV94bWl0X3pjKHN0cnVjdCBpNDBlX3JpbmcgKnhkcF9yaW5nLCB1bnNpZ25lZCBpbnQgYnVkZ2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jLTU4NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmM6NTg1OlxcdG5iX3BrdHMgPSB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goeGRwX3JpbmctXFx1MDAzZXhza19wb29sLCBidWRnZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYy01ODYtXFx0aWYgKCFuYl9wa3RzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suYz03OTE9Ym9vbCBpY2VfeG1pdF96YyhzdHJ1Y3QgaWNlX3R4X3JpbmcgKnhkcF9yaW5nLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHNrX3Bvb2wpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5jLTgwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5jOjgwNzpcXHRuYl9wa3RzID0geHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHhza19wb29sLCBidWRnZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmMtODA4LVxcdGlmICghbmJfcGt0cylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfeHNrLmM9NDY1PWJvb2wgaWdiX3htaXRfemMoc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHNrX3Bvb2wpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3hzay5jLTQ4MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3hzay5jOjQ4MTpcXHRuYl9wa3RzID0geHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHhza19wb29sLCBidWRnZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfeHNrLmMtNDgyLVxcdGlmICghbmJfcGt0cylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3hzay5jPTIyOD12b2lkIG90eDJfemNfbmFwaV9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suYy0yMzQtXFx0YnVkZ2V0ID0gbWluKGJ1ZGdldCwgb3R4Ml9yZWFkX2ZyZWVfc3FlKHBmdmYsIHF1ZXVlKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmM6MjM1OlxcdGJhdGNoID0geHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHBvb2wsIGJ1ZGdldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmMtMjM2LVxcdGlmICghYmF0Y2gpXFxuLS1cXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM9MTQwNT1zdGF0aWMgaW50IHZpcnRuZXRfeHNrX3htaXRfYmF0Y2goc3RydWN0IHNlbmRfcXVldWUgKnNxLFxcbi0tXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTE0MTYtXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jOjE0MTc6XFx0bmJfcGt0cyA9IHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCBidWRnZXQpO1xcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0xNDE4LVxcdGlmICghbmJfcGt0cylcXG4tLVxcbmluY2x1ZGUvbmV0L2xpYmV0aC94c2suaD0yODU9bGliZXRoX3hza194bWl0X2RvX2J1bGsoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHZvaWQgKnhkcHNxLCB1MzIgYnVkZ2V0LFxcbi0tXFxuaW5jbHVkZS9uZXQvbGliZXRoL3hzay5oLTI5OS1cXG5pbmNsdWRlL25ldC9saWJldGgveHNrLmg6MzAwOlxcdG4gPSB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gocG9vbCwgYnVkZ2V0KTtcXG5pbmNsdWRlL25ldC9saWJldGgveHNrLmgtMzAxLVxcdGJ1bGsgPSBjb250YWluZXJfb2YoXFx1MDAyNnBvb2wtXFx1MDAzZXR4X2Rlc2NzWzBdLCB0eXBlb2YoKmJ1bGspLCBkZXNjKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oPTI4PWJvb2wgeHNrX3R4X3BlZWtfZGVzYyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9kZXNjICpkZXNjKTtcXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDoyOTp1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4KTtcXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC0zMC12b2lkIHhza190eF9yZWxlYXNlKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oPTMwOT1zdGF0aWMgaW5saW5lIGJvb2wgeHNrX3R4X3BlZWtfZGVzYyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTMxNC1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDozMTU6c3RhdGljIGlubGluZSB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4KVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTMxNi17XFxuLS1cXG5uZXQveGRwL3hzay5jPTYyMz1zdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxcbm5ldC94ZHAveHNrLmM6NjI0Ol9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbm5ldC94ZHAveHNrLmMtNjI1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4X2Rlc2NzKVxcbi0tXFxubmV0L3hkcC94c2suYz02NTA9eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9kZXNjcylcXG4tLVxcbm5ldC94ZHAveHNrLmMtNjkyLVxcbm5ldC94ZHAveHNrLmM6NjkzOlxcdFxcdGN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcXG5uZXQveGRwL3hzay5jLTY5NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBwb29sLVxcdTAwM2V0eF9kZXNjcyArIG9mZnNldCxcXG4tLVxcbm5ldC94ZHAveHNrLmMtNzI0LVxcbm5ldC94ZHAveHNrLmM6NzI1OnUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxcbm5ldC94ZHAveHNrLmMtNzI2LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNzYyLVxcdFxcdHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gocG9vbCwgbmJfcGt0cykgOlxcbm5ldC94ZHAveHNrLmM6NzYzOlxcdFxcdF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHBvb2wsIHhzLFxcbm5ldC94ZHAveHNrLmMtNzY0LVxcdFxcdFxcdFxcdFxcdFxcdCBwb29sLVxcdTAwM2V0eF9kZXNjcyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtNzcxLX1cXG5uZXQveGRwL3hzay5jOjc3MjpFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XFxubmV0L3hkcC94c2suYy03NzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDIzOjU2OjM4LjY3MTA0NTg5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MDIwNDcwODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBRl9YRFAgVFggUGF0aCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgQUZfWERQIHRyYW5zbWlzc2lvbiBwYXRoLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgbXVsdGktYnVmZmVyIHBhY2tldHMgYW5kIGludmFsaWQgZGVzY3JpcHRvcnMuIEknbSBzZWVpbmcgdGhhdCB0aGUga2V5IGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGlzIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCB3aGljaCBpcyBwcmV0dHkgZnVuZGFtZW50YWwgc2luY2UgdmFyaW91cyBkcml2ZXJzIOKAkyB0c25lcCwgZHBhYTIsIGZlYywgaTQwZSwgaWNlLCBpZ2IsIG9jdGVvbnR4MiwgdmlydGlvX25ldCwgbGliZXRoLCBhbmQgdGhlIGdlbmVyaWMgWERQIHRyYW5zbWlzc2lvbiB2aWEgYF9feHNrX2dlbmVyaWNfeG1pdGAg4oCTIGFsbCByZWx5IG9uIGl0LlxuXG5GaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBYRFBfU09DS0VUU2AgYW5kIGBCUEZfU1lTQ0FMTGAgYXJlIHRoZSBrZXkgb25lcywgd2l0aCBgQ09ORklHX1hEUF9TT0NLRVRTYCBiZWluZyB0aGUgcHJpbWFyeSBlbmFibGVyLlxuXG5Ob3csIGxldCdzIHplcm8gaW4gb24gdGhlIGNvcmUgY2hhbmdlcy4gVGhlIGluaXRpYWwgbGlzdCBpbmNsdWRlZCBhIGJyb2FkZXIgc2V0IG9mIHN5bWJvbHMuIFNpbmNlIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgICppcyogdGhlIG1haW4gVFggZnVuY3Rpb24gZm9yIEFGX1hEUCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGRpZmZlcmVudCBpbiB0aGUgKm1vZGlmaWVkKiBsb2dpYy4gVGhlIG5ldyBmdW5jdGlvbnMsIGxpa2UgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgIGFuZCBgX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgIGFyZSBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gYHhza190eF9jb21taXRfYmF0Y2hgLCBhbmQgYHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkYCBhcmUgY29tcGxldGVseSBuZXcgZW50cmllcyBpbiB0aGUgZmxvdy4gVGhlIGB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoYCBmdW5jdGlvbiBpcyBiZWluZyBhbHRlcmVkLlxuXG5UaGVyZWZvcmUsIG15IGZvY3VzIHNob3VsZCBiZSBvbjpcblxuKiAgIGB4c2tfdHhfY29tbWl0X2JhdGNoYFxuKiAgIGBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGBcbiogICBgeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaGBcbiogICBgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRgXG4qICAgYHhza19idWlsZF9za2JgXG4qICAgYHhza19idWlsZF9za2JfemVyb2NvcHlgXG4qICAgYF9feHNrX2dlbmVyaWNfeG1pdGBcblxuR29vZCwgYHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAgaXMgZXhwb3J0ZWQgYXMgYEVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKWAsIHNvIGl0IGlzIHB1YmxpY2x5IGF2YWlsYWJsZS4gSSB3aWxsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGhvdyB0aGVzZSBjaGFuZ2VzIGltcGFjdCB0aGUgZHJpdmVycyB0aGF0IGFyZSByZWx5aW5nIG9uIHRoaXMgY3JpdGljYWwgZnVuY3Rpb24sIHBhcnRpY3VsYXJseSB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlc2UgbmV3IGZ1bmN0aW9ucyBpbiB0aGUgZGF0YSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM1OSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQyMzo1Njo0Ni4zNzMwOTQ2MzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyMDk3NjA2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3hza19nZW5lcmljX3htaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQveGRwX3NvY2suaD00OD1zdHJ1Y3QgeGRwX3NvY2sge1xcbi0tXFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaC03Ny1cXG5pbmNsdWRlL25ldC94ZHBfc29jay5oOjc4OlxcdC8qIFdoZW4gX194c2tfZ2VuZXJpY194bWl0KCkgbXVzdCByZXR1cm4gYmVmb3JlIGl0IHNlZXMgdGhlIEVPUCBkZXNjcmlwdG9yIGZvciB0aGUgY3VycmVudFxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmgtNzktXFx0ICogcGFja2V0LCB0aGUgcGFydGlhbGx5IGJ1aWx0IHNrYiBpcyBzYXZlZCBoZXJlIHNvIHRoYXQgcGFja2V0IGJ1aWxkaW5nIGNhbiByZXN1bWUgaW4gbmV4dFxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg6ODA6XFx0ICogY2FsbCBvZiBfX3hza19nZW5lcmljX3htaXQoKS5cXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTgxLVxcdCAqL1xcbi0tXFxubmV0L3hkcC94c2suYz0xMDg3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbi0tXFxubmV0L3hkcC94c2suYy0xMTkyLVxcbm5ldC94ZHAveHNrLmM6MTE5MzpzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hkcC94c2suYy0xMTk0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTMwOD1zdGF0aWMgaW50IHhza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMzEzLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbm5ldC94ZHAveHNrLmM6MTMxNDpcXHRyZXQgPSBfX3hza19nZW5lcmljX3htaXQoc2spO1xcbm5ldC94ZHAveHNrLmMtMTMxNS1cXHQvKiBSZWFxdWlyZSBSQ1UgbG9jayBiZWZvcmUgZ29pbmcgaW50byBjb21tb24gY29kZS4gKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmM9ODk4PXN0YXRpYyBib29sIGtpY2tfdHhfd2l0aF9jaGVjayhzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIGludCAqcmV0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYy05MTAtXFx0ICogc2VuZCBpbiB0aGlzIGNhc2Ugd2hlcmUgaGl0dGluZyB0aGUgbWF4IGJ1ZGdldCBsaW1pdCBpbiB3aGlsZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmM6OTExOlxcdCAqIGxvb3AgaXMgdHJpZ2dlcmVkIGluIF9feHNrX2dlbmVyaWNfeG1pdCgpLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jLTkxMi1cXHQgKiB0aGUgbnVtYmVyIG9mIGRlc2NzIHRvIGJlIHNlbnQgaXMgbGFyZ2VyIHRoYW4gQG1heF9idWRnZXQsIG9yXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDIzOjU2OjQ5LjA5NDA3NjcyNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4Mzc4NjMyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQUZfWERQIE11bHRpLUJ1ZmZlciBCdWcgRml4IEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHJlc3NlcyBhIGJ1ZyBpbiBBRl9YRFAncyBtdWx0aS1idWZmZXIgaGFuZGxpbmcuIE15IGZpcnN0IHRob3VnaHQgaXMsIHRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBlc3BlY2lhbGx5IHdpdGggdGhlIHJpc2Ugb2YgWERQIGFuZCBBRl9YRFAuIFRoaXMgZml4IGludHJvZHVjZXMgYGRyYWluX2NvbnRgLCB3aGljaCBpcyB1c2VkIHRvIHRyYWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgcGFja2V0IGlzIGJlaW5nIGRyYWluZWQgYmVjYXVzZSBvZiBlaXRoZXIgaW52YWxpZCBkZXNjcmlwdG9ycyBvciBleGNlZWRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYWdtZW50cy4gVGhhdCBtYWtlcyBzZW5zZSwgd2UgbmVlZCByb2J1c3QgZXJyb3IgaGFuZGxpbmcgaW4gdGhpcyBzZWN0aW9uLlxuXG5UaGUgYFhEUF9TT0NLRVRTYCBjb25maWcgaXMgd2hhdCB3ZSdyZSB0YXJnZXRpbmcgaGVyZSwgdGhhdCdzIHdoYXQncyBkcml2aW5nIHRoaXMgQUZfWERQIGJlaGF2aW9yLiBMZXQgbWUgc2VlLi4uIEkndmUgZ290IGEgbGlzdCBvZiBzeW1ib2xzIHRvIGZvY3VzIG9uOiBgeHNrX3R4X2NvbW1pdF9iYXRjaGAsIGBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAsIGB4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoYCwgYHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkYCwgYHhza19idWlsZF9za2JgLCBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAsIGBfX3hza19nZW5lcmljX3htaXRgLCBhbmQgYHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2hgLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IGBDT05GSUdfWERQX1NPQ0tFVFNgIGlzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZyBmb3IgQUZfWERQIGluIHRoaXMgY29udGV4dC4gWWVwLCB0aGF0J3MgdGhlIG9uZS4gTm93LCBsZXQncyBjaGVjayB0aGUgdmlzaWJpbGl0eSBvZiB0aG9zZSBzeW1ib2xzLiBMb29rcyBsaWtlIGB4c2tfdHhfY29tbWl0X2JhdGNoYCwgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCwgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgLCBgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRgLCBgeHNrX2J1aWxkX3NrYmAsIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YCwgYW5kIGBfX3hza19nZW5lcmljX3htaXRgIGFyZSBhbGwgc3RhdGljLCBhbmQgYHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2hgIGlzIHN0YXRpYyBpbmxpbmUuXG5cblNvLCB3ZSBjYW4gbWFrZSBhIGNsZWFuIGxpc3Qgb2YgdGhlIG5vbi1pbmxpbmUgb25lcy5cblxuT2theSwgbXkgcmVhc29uaW5nIGhlcmUgaXM6IHRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBob3cgd2UgaGFuZGxlIG11bHRpLWJ1ZmZlciBwYWNrZXRzLiBFc3NlbnRpYWxseSwgaXQncyBhYm91dCBoYW5kbGluZyBwYWNrZXRzIHdpdGggYmFkIGRlc2NyaXB0b3JzIG9yIHRvbyBtYW55IGZyYWdtZW50cy4gVGhpcyBhZmZlY3RzIHRoZSB0cmFuc21pc3Npb24gbG9naWMgb2YgQUZfWERQIGFuZCBpbnRyb2R1Y2VzIG5ldyBkZXNjcmlwdG9yIGJhdGNoaW5nIGFuZCByZWNsYWltaW5nLCB3aGljaCBhbHNvIHRvdWNoZXMgdGhlIGdlbmVyaWMgWERQIHRyYW5zbWl0IHBhdGggZm9yIGRyYWluaW5nIGJhZCBwYWNrZXRzLiBUaGlzIGlzICpjb3JlKiBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHksIGFuZCB0aGlzIGlzIHJlYWNoYWJsZSB2aWEgQUZfWERQIHNvY2tldHMgZnJvbSB1c2Vyc3BhY2UuIFdoaWNoIG1lYW5zLi4uIGZ1enppbmchIExldCdzIGdldCB0aGUgcmVzdWx0cyBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDgxLCJPdXRwdXRUb2tlbnMiOjIwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQyMzo1Njo1Ni45MzE5NDIxMDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjcwOTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfdHhfY29tbWl0X2JhdGNoXCIsXG4gICAgXCJfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRcIixcbiAgICBcInhza19idWlsZF9za2JcIixcbiAgICBcInhza19idWlsZF9za2JfemVyb2NvcHlcIixcbiAgICBcIl9feHNrX2dlbmVyaWNfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgdHJhbnNtaXNzaW9uIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgbXVsdGktYnVmZmVyIHBhY2tldHMgd2l0aCBpbnZhbGlkIGRlc2NyaXB0b3JzIG9yIGV4Y2VlZGluZyB0aGUgbWF4aW11bSBhbGxvd2VkIGZyYWdtZW50cy4gSXQgaW50cm9kdWNlcyBuZXcgYmF0Y2hpbmcgYW5kIHJlY2xhaW1pbmcgbG9naWMgZm9yIGRlc2NyaXB0b3JzLCBhbmQgdXBkYXRlcyB0aGUgZ2VuZXJpYyBYRFAgdHJhbnNtaXQgcGF0aCB0byBkcmFpbiBpbnZhbGlkIHBhY2tldHMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1hEUCBzb2NrZXRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhEUF9TT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieHNrX3R4X2NvbW1pdF9iYXRjaFwiLFxuICAgIFwiX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hcIixcbiAgICBcInhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hcIixcbiAgICBcInhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkXCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiXCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiX3plcm9jb3B5XCIsXG4gICAgXCJfX3hza19nZW5lcmljX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZfWERQIHRyYW5zbWlzc2lvbiBsb2dpYyB0byBjb3JyZWN0bHkgaGFuZGxlIG11bHRpLWJ1ZmZlciBwYWNrZXRzIHdpdGggaW52YWxpZCBkZXNjcmlwdG9ycyBvciBleGNlZWRpbmcgdGhlIG1heGltdW0gYWxsb3dlZCBmcmFnbWVudHMuIEl0IGludHJvZHVjZXMgbmV3IGJhdGNoaW5nIGFuZCByZWNsYWltaW5nIGxvZ2ljIGZvciBkZXNjcmlwdG9ycywgYW5kIHVwZGF0ZXMgdGhlIGdlbmVyaWMgWERQIHRyYW5zbWl0IHBhdGggdG8gZHJhaW4gaW52YWxpZCBwYWNrZXRzLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBBRl9YRFAgc29ja2V0cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowdtn97[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-14 23:12:53 +0000 UTC FinishedAt: 2026-07-14 23:56:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS" ], "series_id": "6c4ca4c4-a0b3-475c-b34e-9d649039aaac" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xsk_tx_commit_batch", "__xsk_tx_peek_release_desc_batch", "xsk_tx_peek_release_shared_desc_batch", "xsk_cq_submit_addr_single_locked", "xsk_build_skb", "xsk_build_skb_zerocopy", "__xsk_generic_xmit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDIzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX3R4X2NvbW1pdF9iYXRjaCYjMzQ7LAogICAgJiMzNDtfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCYjMzQ7LAogICAgJiMzNDt4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoJiMzNDssCiAgICAmIzM0O3hza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkJiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2ImIzM0OywKICAgICYjMzQ7eHNrX2J1aWxkX3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDtfX3hza19nZW5lcmljX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCB0cmFuc21pc3Npb24gbG9naWMgdG8gY29ycmVjdGx5IGhhbmRsZSBtdWx0aS1idWZmZXIgcGFja2V0cyB3aXRoIGludmFsaWQgZGVzY3JpcHRvcnMgb3IgZXhjZWVkaW5nIHRoZSBtYXhpbXVtIGFsbG93ZWQgZnJhZ21lbnRzLiBJdCBpbnRyb2R1Y2VzIG5ldyBiYXRjaGluZyBhbmQgcmVjbGFpbWluZyBsb2dpYyBmb3IgZGVzY3JpcHRvcnMsIGFuZCB1cGRhdGVzIHRoZSBnZW5lcmljIFhEUCB0cmFuc21pdCBwYXRoIHRvIGRyYWluIGludmFsaWQgcGFja2V0cy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfWERQIHNvY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMjM6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwOWRiM2U0MDgwMDIxY2E0OGRlNTZiMTdkMzEwZDcyMjMwM2FjYzhjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMjM6NTY6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGRwX3NvY2suaCBiL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcbmluZGV4IGViYWM2MGEzZDhhMTdiLi44YjUxODc2ZWZiZWQxYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcbkBAIC04MCw2ICYjNDM7ODAsNyBAQCBzdHJ1Y3QgeGRwX3NvY2sge1xuIFx0ICogY2FsbCBvZiBfX3hza19nZW5lcmljX3htaXQoKS5cbiBcdCAqL1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHRib29sIGRyYWluX2NvbnQ7XG4gXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG1hcF9saXN0O1xuIFx0LyogUHJvdGVjdHMgbWFwX2xpc3QgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmggYi9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcbmluZGV4IGNjYjNiMzUwMDAxZjI0Li4yYmIxZDEyMmIxYmM2YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXG5AQCAtNzgsNiAmIzQzOzc4LDkgQEAgc3RydWN0IHhza19idWZmX3Bvb2wge1xuIFx0dTMyIGNodW5rX3NpemU7XG4gXHR1MzIgY2h1bmtfc2hpZnQ7XG4gXHR1MzIgZnJhbWVfbGVuO1xuJiM0MztcdHUzMiB0eF9kZXNjc19uZW50cmllcztcbiYjNDM7XHR1MzIgcmVjbGFpbV9kZXNjcztcbiYjNDM7XHR1MzIgdHhfemNfcGVuZGluZ19kZXNjcztcbiBcdHUzMiB4ZHBfemNfbWF4X3NlZ3M7XG4gXHR1OCB0eF9tZXRhZGF0YV9sZW47IC8qIGluaGVyaXRlZCBmcm9tIHVtZW0gKi9cbiBcdHU4IGNhY2hlZF9uZWVkX3dha2V1cDtcbkBAIC0xMDIsMTIgJiM0MzsxMDUsMTQgQEAgc3RydWN0IHhza19idWZmX3Bvb2wge1xuIFxuIC8qIEFGX1hEUCBjb3JlLiAqL1xuIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tXHRcdFx0XHRcdFx0c3RydWN0IHhkcF91bWVtICp1bWVtKTtcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IHhkcF91bWVtICp1bWVtLFxuJiM0MztcdFx0XHRcdFx0XHR1MzIgbWF4X3NlZ3MpO1xuIGludCB4cF9hc3NpZ25fZGV2KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgIHUxNiBxdWV1ZV9pZCwgdTE2IGZsYWdzKTtcbiBpbnQgeHBfYXNzaWduX2Rldl9zaGFyZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqdW1lbV94cyxcbiBcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHF1ZXVlX2lkKTtcbi1pbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMpO1xuJiM0MztpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4mIzQzO1x0XHQgICAgICB1MzIgbWF4X3NlZ3MpO1xuIHZvaWQgeHBfZGVzdHJveShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XG4gdm9pZCB4cF9nZXRfcG9vbChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XG4gYm9vbCB4cF9wdXRfcG9vbChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2suYyBiL25ldC94ZHAveHNrLmNcbmluZGV4IGI5NzBmMzBlYTliOWQ4Li4yOTA5YTBlYzY4MzczMSAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrLmNcbkBAIC00OTksNiAmIzQzOzQ5OSwyMyBAQCB2b2lkIF9feHNrX21hcF9mbHVzaChzdHJ1Y3QgbGlzdF9oZWFkICpmbHVzaF9saXN0KVxuIFxuIHZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXG4ge1xuJiM0MztcdHUzMiByZWNsYWltX2Rlc2NzID0gUkVBRF9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcyk7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShyZWNsYWltX2Rlc2NzKSkge1xuJiM0MztcdFx0dTMyIHBlbmRpbmdfZGVzY3MgPSBSRUFEX09OQ0UocG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobmJfZW50cmllcyBcdTAwM2MgcGVuZGluZ19kZXNjcykge1xuJiM0MztcdFx0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyxcbiYjNDM7XHRcdFx0XHQgICBwZW5kaW5nX2Rlc2NzIC0gbmJfZW50cmllcyk7XG4mIzQzO1x0XHRcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVx1MDAzZWNxLCBuYl9lbnRyaWVzKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLCAwKTtcbiYjNDM7XHRcdG5iX2VudHJpZXMgJiM0Mzs9IHJlY2xhaW1fZGVzY3M7XG4mIzQzO1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcywgMCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVx1MDAzZWNxLCBuYl9lbnRyaWVzKTtcbiB9XG4gRVhQT1JUX1NZTUJPTCh4c2tfdHhfY29tcGxldGVkKTtcbkBAIC01NzQsMjQgJiM0Mzs1OTEsMTYyIEBAIHN0YXRpYyB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9lbnRyXG4gXHRyZXR1cm4gbmJfcGt0cztcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHhza190eF9jb21taXRfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbmJfZGVzY3MgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoYmF0Y2gpO1xuJiM0MztcdHUzMiBjcV9jYWNoZWRfcHJvZDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuYl9kZXNjcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Y3FfY2FjaGVkX3Byb2QgPSBwb29sLVx1MDAzZWNxLVx1MDAzZWNhY2hlZF9wcm9kO1xuJiM0MztcdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXHUwMDNlY3EsIHBvb2wtXHUwMDNldHhfZGVzY3MsIG5iX2Rlc2NzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGJhdGNoLVx1MDAzZXJlY2xhaW1fZGVzY3MpKSB7XG4mIzQzO1x0XHR1MzIgY3FfcGVuZGluZ19kZXNjcztcbiYjNDM7XG4mIzQzO1x0XHQvKiBDUSBpcyBwb3NpdGlvbmFsLiBEZXNjcmlwdG9ycyBhbHJlYWR5IHdyaXR0ZW4gYnV0IG5vdFxuJiM0MztcdFx0ICogc3VibWl0dGVkIG11c3QgY29tcGxldGUgYmVmb3JlIGFueSByZWNsYWltLW9ubHkgZGVzY3JpcHRvcnNcbiYjNDM7XHRcdCAqIGFwcGVuZGVkIGJlbG93LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjcV9wZW5kaW5nX2Rlc2NzID0gY3FfY2FjaGVkX3Byb2QgLSB4c2txX2dldF9wcm9kKHBvb2wtXHUwMDNlY3EpO1xuJiM0MztcbiYjNDM7XHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLFxuJiM0MztcdFx0XHQgICBiYXRjaC1cdTAwM2V0eF9kZXNjcyAmIzQzOyBjcV9wZW5kaW5nX2Rlc2NzKTtcbiYjNDM7XHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2VyZWNsYWltX2Rlc2NzLCBiYXRjaC1cdTAwM2VyZWNsYWltX2Rlc2NzKTtcbiYjNDM7XHRcdGlmICh1bmxpa2VseSghcG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzKSlcbiYjNDM7XHRcdFx0eHNrX3R4X2NvbXBsZXRlZChwb29sLCAwKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoXG4mIzQzO19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4X2Rlc2NzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xuJiM0MztcdHUzMiBlbnRyaWVzO1xuJiM0MztcbiYjNDM7XHRlbnRyaWVzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIG1heF9kZXNjcyk7XG4mIzQzO1x0aWYgKCFlbnRyaWVzKVxuJiM0MztcdFx0cmV0dXJuIGJhdGNoO1xuJiM0MztcbiYjNDM7XHRiYXRjaCA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMsIHBvb2wsIGRlc2NzLCBtYXhfZGVzY3MpO1xuJiM0MztcdGlmICgheHNrX3R4X2JhdGNoX2NxX2Rlc2NzKFx1MDAyNmJhdGNoKSkge1xuJiM0MztcdFx0eHMtXHUwMDNldHgtXHUwMDNlcXVldWVfZW1wdHlfZGVzY3MmIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKGJhdGNoLmNvbnN1bWVkX2Rlc2NzKSB7XG4mIzQzO1x0XHRcdF9feHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuJiM0MztcdFx0XHR4cy1cdTAwM2Vzay5za193cml0ZV9zcGFjZShcdTAwMjZ4cy1cdTAwM2Vzayk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gYmF0Y2g7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbiYjNDM7XHR4cy1cdTAwM2Vzay5za193cml0ZV9zcGFjZShcdTAwMjZ4cy1cdTAwM2Vzayk7XG4mIzQzO1x0cmV0dXJuIGJhdGNoO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxuJiM0Mzt4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2Rlc2NzKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGNxX2Rlc2NzX2JlZm9yZSwgY3FfZGVzY3NfYWZ0ZXI7XG4mIzQzO1x0c3RydWN0IHhza190eF9iYXRjaCBzdW1fYmF0Y2ggPSB7fTtcbiYjNDM7XHRib29sIGJ1ZGdldF9leGhhdXN0ZWQ7XG4mIzQzO1x0dTMyIHBlcl9zb2NrZXRfYnVkZ2V0O1xuJiM0MztcdHN0cnVjdCB4ZHBfc29jayAqeHM7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBmYWlybmVzcyBxdW90YSBtdXN0IGFsbG93IG9uZSBtYXhpbXVtLXNpemVkIHZhbGlkIHBhY2tldC4gKi9cbiYjNDM7XHRwZXJfc29ja2V0X2J1ZGdldCA9IG1heF90KHUzMiwgTUFYX1BFUl9TT0NLRVRfQlVER0VULFxuJiM0MztcdFx0XHRcdCAgcG9vbC1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xuJiM0MztcbiYjNDM7YWdhaW46XG4mIzQzO1x0YnVkZ2V0X2V4aGF1c3RlZCA9IGZhbHNlO1xuJiM0MztcdGNxX2Rlc2NzX2JlZm9yZSA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCBcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0LCB0eF9saXN0KSB7XG4mIzQzO1x0XHR1MzIgYnVkZ2V0LCBidWRnZXRfbGVmdCwgb2Zmc2V0LCByZW1haW5pbmc7XG4mIzQzO1x0XHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGN1cnJfYmF0Y2g7XG4mIzQzO1xuJiM0MztcdFx0LyogT25jZSByZWNsYWltLW9ubHkgZGVzY3JpcHRvcnMgaGF2ZSBiZWVuIGFwcGVuZGVkIHRvIHRoZSBDUVxuJiM0MztcdFx0ICogYWRkcmVzcyBhcmVhLCBkbyBub3QgYXBwZW5kIGRyaXZlci12aXNpYmxlIFR4IGRlc2NyaXB0b3JzXG4mIzQzO1x0XHQgKiBmcm9tIGFub3RoZXIgc29ja2V0IGFmdGVyIHRoZW0uIHhza190eF9jb21wbGV0ZWQoKSByZWxpZXMgb25cbiYjNDM7XHRcdCAqIGFsbCBkcml2ZXItdmlzaWJsZSBkZXNjcmlwdG9ycyBwcmVjZWRpbmcgYWxsIHJlY2xhaW0tb25seVxuJiM0MztcdFx0ICogZGVzY3JpcHRvcnMgaW4gQ1Egb3JkZXIuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChzdW1fYmF0Y2gucmVjbGFpbV9kZXNjcylcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0LyogYmUgZ2VudGxlIHdoZW4gcGxheWluZyB3aXRoIHBvb2wtXHUwMDNldHhfZGVzY3MgKi9cbiYjNDM7XHRcdG9mZnNldCA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuJiM0MztcdFx0aWYgKG9mZnNldCBcdTAwM2U9IG1heF9kZXNjcylcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudCBcdTAwM2U9IHBlcl9zb2NrZXRfYnVkZ2V0KSB7XG4mIzQzO1x0XHRcdGlmICh4c2txX2NvbnNfbmJfZW50cmllcyh4cy1cdTAwM2V0eCwgMSkpXG4mIzQzO1x0XHRcdFx0YnVkZ2V0X2V4aGF1c3RlZCA9IHRydWU7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGJ1ZGdldF9sZWZ0ID0gcGVyX3NvY2tldF9idWRnZXQgLSB4cy1cdTAwM2V0eF9idWRnZXRfc3BlbnQ7XG4mIzQzO1x0XHRyZW1haW5pbmcgPSBtYXhfZGVzY3MgLSBvZmZzZXQ7XG4mIzQzO1x0XHRidWRnZXQgPSBtaW4ocmVtYWluaW5nLCBidWRnZXRfbGVmdCk7XG4mIzQzO1xuJiM0MztcdFx0Y3Vycl9iYXRjaCA9IF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHBvb2wsIHhzLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIHBvb2wtXHUwMDNldHhfZGVzY3MgJiM0Mzsgb2Zmc2V0LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIGJ1ZGdldCk7XG4mIzQzO1x0XHRpZiAoIXhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZjdXJyX2JhdGNoKSkge1xuJiM0MztcdFx0XHRpZiAoY3Vycl9iYXRjaC5idWRnZXRfbGltaXRlZCBcdTAwMjZcdTAwMjYgYnVkZ2V0X2xlZnQgXHUwMDNjIHJlbWFpbmluZylcbiYjNDM7XHRcdFx0XHRidWRnZXRfZXhoYXVzdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdFx0eHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50ICYjNDM7PSBjdXJyX2JhdGNoLmNvbnN1bWVkX2Rlc2NzO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR4cy1cdTAwM2V0eF9idWRnZXRfc3BlbnQgJiM0Mzs9IGN1cnJfYmF0Y2guY29uc3VtZWRfZGVzY3M7XG4mIzQzO1x0XHRzdW1fYmF0Y2gudHhfZGVzY3MgJiM0Mzs9IGN1cnJfYmF0Y2gudHhfZGVzY3M7XG4mIzQzO1x0XHRzdW1fYmF0Y2gucmVjbGFpbV9kZXNjcyAmIzQzOz0gY3Vycl9iYXRjaC5yZWNsYWltX2Rlc2NzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3FfZGVzY3NfYWZ0ZXIgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2c3VtX2JhdGNoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzIHx8IGNxX2Rlc2NzX2FmdGVyIFx1MDAzZT0gbWF4X2Rlc2NzKVxuJiM0MztcdFx0cmV0dXJuIHN1bV9iYXRjaDtcbiYjNDM7XG4mIzQzO1x0LyogQ29udGludWUgZmlsbGluZyB0aGUgYmF0Y2ggd2hpbGUgdGhpcyBwYXNzIG1hZGUgcHJvZ3Jlc3MgKi9cbiYjNDM7XHRpZiAoY3FfZGVzY3NfYmVmb3JlICE9IGNxX2Rlc2NzX2FmdGVyKVxuJiM0MztcdFx0Z290byBhZ2FpbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFidWRnZXRfZXhoYXVzdGVkKVxuJiM0MztcdFx0cmV0dXJuIHN1bV9iYXRjaDtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsIFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpXG4mIzQzO1x0XHR4cy1cdTAwM2V0eF9idWRnZXRfc3BlbnQgPSAwO1xuJiM0MztcdGdvdG8gYWdhaW47XG4mIzQzO31cbiYjNDM7XG4gdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX3BrdHMpXG4ge1xuJiM0MztcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcbiBcdHN0cnVjdCB4ZHBfc29jayAqeHM7XG4mIzQzO1x0Ym9vbCB1bWVtX3NoYXJlZDtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGlmICghbGlzdF9pc19zaW5ndWxhcihcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0KSkge1xuLVx0XHQvKiBGYWxsYmFjayB0byB0aGUgbm9uLWJhdGNoZWQgdmVyc2lvbiAqL1xuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0cmV0dXJuIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2socG9vbCwgbmJfcGt0cyk7XG4tXHR9XG4mIzQzO1x0aWYgKHVubGlrZWx5KFJFQURfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MpKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFxuLVx0eHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jaywgdHhfbGlzdCk7XG4tXHRpZiAoIXhzKSB7XG4tXHRcdG5iX3BrdHMgPSAwO1xuJiM0MztcdHhzID0gbGlzdF9maXJzdF9vcl9udWxsX3JjdShcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0LCBzdHJ1Y3QgeGRwX3NvY2ssXG4mIzQzO1x0XHRcdFx0ICAgIHR4X2xpc3QpO1xuJiM0MztcdGlmICgheHMpXG4gXHRcdGdvdG8gb3V0O1xuLVx0fVxuIFxuLVx0bmJfcGt0cyA9IHhza3FfY29uc19uYl9lbnRyaWVzKHhzLVx1MDAzZXR4LCBuYl9wa3RzKTtcbiYjNDM7XHRuYl9wa3RzID0gbWluKG5iX3BrdHMsIHBvb2wtXHUwMDNldHhfZGVzY3NfbmVudHJpZXMpO1xuJiM0MztcdGlmICghbmJfcGt0cylcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHR1bWVtX3NoYXJlZCA9ICFsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QpO1xuJiM0MztcbiYjNDM7XHRpZiAodW1lbV9zaGFyZWQgXHUwMDI2XHUwMDI2ICEocG9vbC1cdTAwM2V1bWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBYRFBfVU1FTV9TR19GTEFHKSkge1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBUaGlzIGlzIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtIGZvciB0aGUgVHggcGF0aC4gVHJ5IHRvXG4gXHQgKiByZXNlcnZlIHNwYWNlIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlIGZvciBhbGwgcGFja2V0cywgYnV0XG5AQCAtNjAzLDE5ICYjNDM7NzU4LDE2IEBAIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxuIFx0aWYgKCFuYl9wa3RzKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdG5iX3BrdHMgPSB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHhzLVx1MDAzZXR4LCBwb29sLCBuYl9wa3RzKTtcbi1cdGlmICghbmJfcGt0cykge1xuLVx0XHR4cy1cdTAwM2V0eC1cdTAwM2VxdWV1ZV9lbXB0eV9kZXNjcyYjNDM7JiM0Mzs7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0X194c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4tXHR4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLVx1MDAzZWNxLCBwb29sLVx1MDAzZXR4X2Rlc2NzLCBuYl9wa3RzKTtcbi1cdHhzLVx1MDAzZXNrLnNrX3dyaXRlX3NwYWNlKFx1MDAyNnhzLVx1MDAzZXNrKTtcbiYjNDM7XHRiYXRjaCA9IHVtZW1fc2hhcmVkID9cbiYjNDM7XHRcdHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gocG9vbCwgbmJfcGt0cykgOlxuJiM0MztcdFx0X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gocG9vbCwgeHMsXG4mIzQzO1x0XHRcdFx0XHRcdCBwb29sLVx1MDAzZXR4X2Rlc2NzLFxuJiM0MztcdFx0XHRcdFx0XHQgbmJfcGt0cyk7XG4mIzQzO1x0eHNrX3R4X2NvbW1pdF9iYXRjaChwb29sLCBcdTAwMjZiYXRjaCk7XG4gXG4gb3V0OlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRyZXR1cm4gbmJfcGt0cztcbiYjNDM7XHRyZXR1cm4gYmF0Y2gudHhfZGVzY3M7XG4gfVxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKTtcbiBcbkBAIC03MzcsNiAmIzQzOzg4OSwxOSBAQCBzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0dTMyIGlkeDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cG9vbC1cdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZHggPSB4c2txX2dldF9wcm9kKHBvb2wtXHUwMDNlY3EpO1xuJiM0MztcdHhza3FfcHJvZF93cml0ZV9hZGRyKHBvb2wtXHUwMDNlY3EsIGlkeCwgZGVzYy1cdTAwM2VhZGRyKTtcbiYjNDM7XHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgMSk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHhza19jcV9jYW5jZWxfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbilcbiB7XG4gXHRzcGluX2xvY2soXHUwMDI2cG9vbC1cdTAwM2VjcS1cdTAwM2VjcV9jYWNoZWRfcHJvZF9sb2NrKTtcbkBAIC03OTQsOCAmIzQzOzk1OSwxMSBAQCBzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBzdGF0aWMgdm9pZCB4c2tfZHJvcF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHR4ZHBfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzICYjNDM7PSB4c2tfZ2V0X251bV9kZXNjKHNrYik7XG4tXHR4c2tfY29uc3VtZV9za2Ioc2tiKTtcbiYjNDM7XHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi1cdTAwM2Vzayk7XG4mIzQzO1xuJiM0MztcdHhzLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MgJiM0Mzs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcbiYjNDM7XHRjb25zdW1lX3NrYihza2IpO1xuJiM0MztcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXG5AQCAtODc3LDcgJiM0MzsxMDQ1LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG4gXHRcdC8qIGluIGNhc2Ugb2YgLUVPVkVSRkxPVyB0aGF0IGNvdWxkIGhhcHBlbiBiZWxvdyxcbi1cdFx0ICogeHNrX2NvbnN1bWVfc2tiKCkgd2lsbCByZWxlYXNlIHRoaXMgbm9kZSBhcyB3aG9sZSBza2JcbiYjNDM7XHRcdCAqIHhza19kcm9wX3NrYigpIHdpbGwgcmVsZWFzZSB0aGlzIG5vZGUgYXMgd2hvbGUgc2tiXG4gXHRcdCAqIHdvdWxkIGJlIGRyb3BwZWQsIHdoaWNoIGltcGxpZXMgZnJlZWluZyBhbGwgbGlzdCBlbGVtZW50c1xuIFx0XHQgKi9cbiBcdFx0eHNrX2FkZHItXHUwMDNlYWRkcnNbeHNrX2FkZHItXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXHUwMDNlYWRkcjtcbkBAIC05NjksNiAmIzQzOzExMzcsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4gXHRcdFx0fVxuIFxuJiM0MztcdFx0XHR4c2tfYWRkci1cdTAwM2VhZGRyc1t4c2tfYWRkci1cdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cdTAwM2VhZGRyO1xuJiM0MztcbiBcdFx0XHRpZiAodW5saWtlbHkobnJfZnJhZ3MgPT0gKE1BWF9TS0JfRlJBR1MgLSAxKSBcdTAwMjZcdTAwMjYgeHBfbWJfZGVzYyhkZXNjKSkpIHtcbiBcdFx0XHRcdGVyciA9IC1FT1ZFUkZMT1c7XG4gXHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuQEAgLTk4Niw4ICYjNDM7MTE1Niw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuIFxuIFx0XHRcdHNrYl9hZGRfcnhfZnJhZyhza2IsIG5yX2ZyYWdzLCBwYWdlLCAwLCBsZW4sIFBBR0VfU0laRSk7XG4gXHRcdFx0cmVmY291bnRfYWRkKFBBR0VfU0laRSwgXHUwMDI2eHMtXHUwMDNlc2suc2tfd21lbV9hbGxvYyk7XG4tXG4tXHRcdFx0eHNrX2FkZHItXHUwMDNlYWRkcnNbeHNrX2FkZHItXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXHUwMDNlYWRkcjtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTEwNjAsMTEgJiM0MzsxMjI4LDIyIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuJiM0MztcdFx0aWYgKHVubGlrZWx5KHhzLVx1MDAzZWRyYWluX2NvbnQpKSB7XG4mIzQzO1x0XHRcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIFx1MDAyNmRlc2MpO1xuJiM0MztcbiYjNDM7XHRcdFx0eHMtXHUwMDNldHgtXHUwMDNlaW52YWxpZF9kZXNjcyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdHhza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbiYjNDM7XHRcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXHUwMDI2ZGVzYyk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXHUwMDI2ZGVzYyk7XG4gXHRcdGlmIChJU19FUlIoc2tiKSkge1xuIFx0XHRcdGVyciA9IFBUUl9FUlIoc2tiKTtcbiBcdFx0XHRpZiAoZXJyICE9IC1FT1ZFUkZMT1cpXG4gXHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0aWYgKHhwX21iX2Rlc2MoXHUwMDI2ZGVzYykpXG4mIzQzO1x0XHRcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHRydWU7XG4gXHRcdFx0ZXJyID0gMDtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuQEAgLTEwOTgsOSAmIzQzOzEyNzcsMjQgQEAgc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuIFx0fVxuIFxuIFx0aWYgKHhza3FfaGFzX2Rlc2NzKHhzLVx1MDAzZXR4KSkge1xuJiM0MztcdFx0Ym9vbCByZWNsYWltX2Rlc2MgPSB4cy1cdTAwM2Vza2IgfHwgeHMtXHUwMDNlZHJhaW5fY29udDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmVjbGFpbV9kZXNjKSB7XG4mIzQzO1x0XHRcdGVyciA9IHhza19jcV9yZXNlcnZlX2xvY2tlZCh4cy1cdTAwM2Vwb29sKTtcbiYjNDM7XHRcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRcdGVyciA9IC1FQUdBSU47XG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGlmICh4cy1cdTAwM2Vza2IpXG4gXHRcdFx0eHNrX2Ryb3Bfc2tiKHhzLVx1MDAzZXNrYik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJlY2xhaW1fZGVzYylcbiYjNDM7XHRcdFx0eHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoeHMtXHUwMDNlcG9vbCwgXHUwMDI2ZGVzYyk7XG4mIzQzO1xuIFx0XHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4mIzQzO1x0XHR4cy1cdTAwM2VkcmFpbl9jb250ID0geHBfbWJfZGVzYyhcdTAwMjZkZXNjKTtcbiBcdH1cbiBcbiBvdXQ6XG5AQCAtMTQ4Myw3ICYjNDM7MTY3Nyw4IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXG4gXHRcdFx0ICogYW5kL29yIGRldmljZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHR4cy1cdTAwM2Vwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cyxcbi1cdFx0XHRcdFx0XHRcdCAgICAgdW1lbV94cy1cdTAwM2V1bWVtKTtcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgIHVtZW1feHMtXHUwMDNldW1lbSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgIGRldi1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xuIFx0XHRcdGlmICgheHMtXHUwMDNlcG9vbCkge1xuIFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG5AQCAtMTUxNSw3ICYjNDM7MTcxMCw4IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXG4gXHRcdFx0ICogdXRpbGl6ZXNcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoeHMtXHUwMDNldHggXHUwMDI2XHUwMDI2ICF4cy1cdTAwM2Vwb29sLVx1MDAzZXR4X2Rlc2NzKSB7XG4tXHRcdFx0XHRlcnIgPSB4cF9hbGxvY190eF9kZXNjcyh4cy1cdTAwM2Vwb29sLCB4cyk7XG4mIzQzO1x0XHRcdFx0ZXJyID0geHBfYWxsb2NfdHhfZGVzY3MoeHMtXHUwMDNlcG9vbCwgeHMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ZGV2LVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRcdHhwX3B1dF9wb29sKHhzLVx1MDAzZXBvb2wpO1xuIFx0XHRcdFx0XHR4cy1cdTAwM2Vwb29sID0gTlVMTDtcbkBAIC0xNTMzLDcgJiM0MzsxNzI5LDkgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogVGhpcyB4c2sgaGFzIGl0cyBvd24gdW1lbS4gKi9cbi1cdFx0eHMtXHUwMDNlcG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsIHhzLVx1MDAzZXVtZW0pO1xuJiM0MztcdFx0eHMtXHUwMDNlcG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsIHhzLVx1MDAzZXVtZW0sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgZGV2LVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4mIzQzO1xuIFx0XHRpZiAoIXhzLVx1MDAzZXBvb2wpIHtcbiBcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19idWZmX3Bvb2wuYyBiL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXG5pbmRleCAxZjI4YTk2NDE1NzFlNC4uYTQwODk0ODBiMjJiMjUgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcbkBAIC00MiwxNyAmIzQzOzQyLDIyIEBAIHZvaWQgeHBfZGVzdHJveShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbiBcdGt2ZnJlZShwb29sKTtcbiB9XG4gXG4taW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuJiM0MztpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4mIzQzO1x0XHQgICAgICB1MzIgbWF4X3NlZ3MpXG4ge1xuLVx0cG9vbC1cdTAwM2V0eF9kZXNjcyA9IGt2emFsbG9jX29ianMoKnBvb2wtXHUwMDNldHhfZGVzY3MsIHhzLVx1MDAzZXR4LVx1MDAzZW5lbnRyaWVzKTtcbiYjNDM7XHR1MzIgbmVudHJpZXMgPSBtYXgoeHMtXHUwMDNldHgtXHUwMDNlbmVudHJpZXMsIG1heF9zZWdzKTtcbiYjNDM7XG4mIzQzO1x0cG9vbC1cdTAwM2V0eF9kZXNjcyA9IGt2emFsbG9jX29ianMoKnBvb2wtXHUwMDNldHhfZGVzY3MsIG5lbnRyaWVzKTtcbiBcdGlmICghcG9vbC1cdTAwM2V0eF9kZXNjcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4mIzQzO1x0cG9vbC1cdTAwM2V0eF9kZXNjc19uZW50cmllcyA9IG5lbnRyaWVzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tXHRcdFx0XHRcdFx0c3RydWN0IHhkcF91bWVtICp1bWVtKVxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgeGRwX3VtZW0gKnVtZW0sXG4mIzQzO1x0XHRcdFx0XHRcdHUzMiBtYXhfc2VncylcbiB7XG4gXHRib29sIHVuYWxpZ25lZCA9IHVtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9VTUVNX1VOQUxJR05FRF9DSFVOS19GTEFHO1xuIFx0c3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2w7XG5AQCAtNjksNyAmIzQzOzc0LDcgQEAgc3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRpZiAoeHMtXHUwMDNldHgpXG4tXHRcdGlmICh4cF9hbGxvY190eF9kZXNjcyhwb29sLCB4cykpXG4mIzQzO1x0XHRpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMsIG1heF9zZWdzKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbiBcdHBvb2wtXHUwMDNlY2h1bmtfbWFzayA9IH4oKHU2NCl1bWVtLVx1MDAzZWNodW5rX3NpemUgLSAxKTtcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19xdWV1ZS5oIGIvbmV0L3hkcC94c2tfcXVldWUuaFxuaW5kZXggM2UzZmJiNzNkMjNlMmYuLmExNWZmMTkyOWRiNjIzIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2tfcXVldWUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2tfcXVldWUuaFxuQEAgLTU4LDYgJiM0Mzs1OCwxOCBAQCBzdHJ1Y3QgcGFyc2VkX2Rlc2Mge1xuIFx0dTMyIHZhbGlkO1xuIH07XG4gXG4mIzQzO3N0cnVjdCB4c2tfdHhfYmF0Y2gge1xuJiM0MztcdHUzMiB0eF9kZXNjcztcbiYjNDM7XHR1MzIgcmVjbGFpbV9kZXNjcztcbiYjNDM7XHR1MzIgY29uc3VtZWRfZGVzY3M7XG4mIzQzO1x0Ym9vbCBidWRnZXRfbGltaXRlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIHhza190eF9iYXRjaF9jcV9kZXNjcyhjb25zdCBzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBiYXRjaC1cdTAwM2V0eF9kZXNjcyAmIzQzOyBiYXRjaC1cdTAwM2VyZWNsYWltX2Rlc2NzO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHNoYXJlZCBzdGF0ZSBvZiB0aGUgcmluZ3MgYXJlIGEgc2ltcGxlXG4gICogY2lyY3VsYXIgYnVmZmVyLCBhcyBvdXRsaW5lZCBpblxuICAqIERvY3VtZW50YXRpb24vY29yZS1hcGkvY2lyY3VsYXItYnVmZmVycy5yc3QuIEZvciB0aGUgUnggYW5kXG5AQCAtMjYzLDE3ICYjNDM7Mjc1LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZV9kZXNjKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIFx0cGFyc2VkLVx1MDAzZW1iID0geHBfbWJfZGVzYyhkZXNjKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZVxuLXUzMiB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLVx0XHRcdCAgICAgIHUzMiBtYXgpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHhza190eF9iYXRjaFxuJiM0Mzt4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuJiM0MztcdFx0XHQgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXgpXG4ge1xuLVx0dTMyIGNhY2hlZF9jb25zID0gcS1cdTAwM2VjYWNoZWRfY29ucywgbmJfZW50cmllcyA9IDA7XG4tXHRzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzID0gcG9vbC1cdTAwM2V0eF9kZXNjcztcbi1cdHUzMiB0b3RhbF9kZXNjcyA9IDAsIG5yX2ZyYWdzID0gMDtcbiYjNDM7XHRib29sIGRyYWluID0gUkVBRF9PTkNFKHhzLVx1MDAzZWRyYWluX2NvbnQpO1xuJiM0MztcdHUzMiBjYWNoZWRfY29ucywgbmJfZW50cmllcyA9IDAsIHJlbGVhc2VkO1xuJiM0MztcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3F1ZXVlICpxID0geHMtXHUwMDNldHg7XG4mIzQzO1x0dTMyIG5yX2ZyYWdzID0gMDtcbiYjNDM7XG4mIzQzO1x0Y2FjaGVkX2NvbnMgPSBxLVx1MDAzZWNhY2hlZF9jb25zO1xuIFxuLVx0LyogdHJhY2sgZmlyc3QgZW50cnksIGlmIHN0dW1ibGUgdXBvbiAqYW55KiBpbnZhbGlkIGRlc2NyaXB0b3IsIHJld2luZFxuLVx0ICogY3VycmVudCBwYWNrZXQgdGhhdCBjb25zaXN0cyBvZiBmcmFncyBhbmQgc3RvcCB0aGUgcHJvY2Vzc2luZ1xuLVx0ICovXG4gXHR3aGlsZSAoY2FjaGVkX2NvbnMgIT0gcS1cdTAwM2VjYWNoZWRfcHJvZCBcdTAwMjZcdTAwMjYgbmJfZW50cmllcyBcdTAwM2MgbWF4KSB7XG4gXHRcdHN0cnVjdCB4ZHBfcnh0eF9yaW5nICpyaW5nID0gKHN0cnVjdCB4ZHBfcnh0eF9yaW5nICopcS1cdTAwM2VyaW5nO1xuIFx0XHR1MzIgaWR4ID0gY2FjaGVkX2NvbnMgXHUwMDI2IHEtXHUwMDNlcmluZ19tYXNrO1xuQEAgLTI4MiwyNiAmIzQzOzI5NSw0OSBAQCB1MzIgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbiBcdFx0ZGVzY3NbbmJfZW50cmllc10gPSByaW5nLVx1MDAzZWRlc2NbaWR4XTtcbiBcdFx0Y2FjaGVkX2NvbnMmIzQzOyYjNDM7O1xuIFx0XHRwYXJzZV9kZXNjKHEsIHBvb2wsIFx1MDAyNmRlc2NzW25iX2VudHJpZXNdLCBcdTAwMjZwYXJzZWQpO1xuLVx0XHRpZiAodW5saWtlbHkoIXBhcnNlZC52YWxpZCkpXG4tXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIXBhcnNlZC52YWxpZCkpIHtcbiYjNDM7XHRcdFx0aWYgKCFkcmFpbiBcdTAwMjZcdTAwMjYgIW5yX2ZyYWdzIFx1MDAyNlx1MDAyNiAhcGFyc2VkLm1iKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdFx0ZHJhaW4gPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG5yX2ZyYWdzJiM0MzsmIzQzOztcbiYjNDM7XHRcdG5iX2VudHJpZXMmIzQzOyYjNDM7O1xuIFxuIFx0XHRpZiAobGlrZWx5KCFwYXJzZWQubWIpKSB7XG4tXHRcdFx0dG90YWxfZGVzY3MgJiM0Mzs9IChucl9mcmFncyAmIzQzOyAxKTtcbi1cdFx0XHRucl9mcmFncyA9IDA7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0bnJfZnJhZ3MmIzQzOyYjNDM7O1xuLVx0XHRcdGlmIChucl9mcmFncyA9PSBwb29sLVx1MDAzZXhkcF96Y19tYXhfc2Vncykge1xuJiM0MztcdFx0XHRpZiAodW5saWtlbHkoZHJhaW4pKSB7XG4mIzQzO1x0XHRcdFx0YmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzO1xuJiM0MztcdFx0XHRcdFdSSVRFX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCwgZmFsc2UpO1xuIFx0XHRcdFx0bnJfZnJhZ3MgPSAwO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0YmF0Y2gudHhfZGVzY3MgJiM0Mzs9IG5yX2ZyYWdzO1xuJiM0MztcdFx0XHRucl9mcmFncyA9IDA7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChucl9mcmFncyA9PSBwb29sLVx1MDAzZXhkcF96Y19tYXhfc2VncylcbiYjNDM7XHRcdFx0ZHJhaW4gPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG5yX2ZyYWdzKSB7XG4mIzQzO1x0XHRpZiAoZHJhaW4pIHtcbiYjNDM7XHRcdFx0YmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzO1xuJiM0MztcdFx0XHRXUklURV9PTkNFKHhzLVx1MDAzZWRyYWluX2NvbnQsIHRydWUpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0aWYgKG5iX2VudHJpZXMgPT0gbWF4KVxuJiM0MztcdFx0XHRcdGJhdGNoLmJ1ZGdldF9saW1pdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdFx0Y2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7XG4gXHRcdH1cbi1cdFx0bmJfZW50cmllcyYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4tXHRjYWNoZWRfY29ucyAtPSBucl9mcmFncztcbiYjNDM7XHRyZWxlYXNlZCA9IGNhY2hlZF9jb25zIC0gcS1cdTAwM2VjYWNoZWRfY29ucztcbiBcdC8qIFJlbGVhc2UgdmFsaWQgcGx1cyBhbnkgaW52YWxpZCBlbnRyaWVzICovXG4tXHR4c2txX2NvbnNfcmVsZWFzZV9uKHEsIGNhY2hlZF9jb25zIC0gcS1cdTAwM2VjYWNoZWRfY29ucyk7XG4tXHRyZXR1cm4gdG90YWxfZGVzY3M7XG4mIzQzO1x0eHNrcV9jb25zX3JlbGVhc2VfbihxLCByZWxlYXNlZCk7XG4mIzQzO1x0YmF0Y2guY29uc3VtZWRfZGVzY3MgPSByZWxlYXNlZDtcbiYjNDM7XHRyZXR1cm4gYmF0Y2g7XG4gfVxuIFxuIC8qIEZ1bmN0aW9ucyBmb3IgY29uc3VtZXJzICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbmluZGV4IDZlYjkwOTZkMDg0YzAxLi43YWJiNDkzNWVkZjlhZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbkBAIC00MjcsMTQgJiM0Mzs0MjcsMTQgQEAgc3RhdGljIHUzMiBwa3RfbmJfZnJhZ3ModTMyIGZyYW1lX3NpemUsIHN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtLCBzdHJ1Y3QgcGtcbiBcdH1cbiBcbiBcdC8qIFNlYXJjaCBmb3IgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGluIHZlcmJhdGltIG1vZGUgKi9cbi1cdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXHUwMDNlb3B0aW9ucykgfHwgIXBrdC1cdTAwM2V2YWxpZClcbiYjNDM7XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpKVxuIFx0XHRyZXR1cm4gbmJfZnJhZ3M7XG4gXG4gXHRuZXh0X2ZyYWcgPSBwa3Rfc3RyZWFtLVx1MDAzZWN1cnJlbnRfcGt0X25iO1xuIFx0cGt0JiM0MzsmIzQzOztcbiBcdHdoaWxlIChuZXh0X2ZyYWcmIzQzOyYjNDM7IFx1MDAzYyBwa3Rfc3RyZWFtLVx1MDAzZW5iX3BrdHMpIHtcbiBcdFx0bmJfZnJhZ3MmIzQzOyYjNDM7O1xuLVx0XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRwa3QmIzQzOyYjNDM7O1xuIFx0fVxuQEAgLTY2NSwxMSAmIzQzOzY2NSwxMSBAQCBzdGF0aWMgc3RydWN0IHBrdF9zdHJlYW0gKl9fcGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgc1xuIFx0XHRcdGlmICghZnJhbWUtXHUwMDNldmFsaWQgfHwgIXBrdF9jb250aW51ZXMoZnJhbWUtXHUwMDNlb3B0aW9ucykpXG4gXHRcdFx0XHRwYXlsb2FkJiM0MzsmIzQzOztcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAoZnJhbWUtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRcdGlmIChmcmFtZS1cdTAwM2V2YWxpZCkge1xuIFx0XHRcdFx0bGVuICYjNDM7PSBmcmFtZS1cdTAwM2VsZW47XG4tXHRcdFx0aWYgKGZyYW1lLVx1MDAzZXZhbGlkIFx1MDAyNlx1MDAyNiBwa3RfY29udGludWVzKGZyYW1lLVx1MDAzZW9wdGlvbnMpKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXG4mIzQzO1x0XHRcdFx0aWYgKHBrdF9jb250aW51ZXMoZnJhbWUtXHUwMDNlb3B0aW9ucykpXG4mIzQzO1x0XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdHBrdC1cdTAwM2Vwa3RfbmIgPSBwa3RfbmI7XG4gXHRcdFx0cGt0LVx1MDAzZWxlbiA9IGxlbjtcbiBcdFx0XHRwa3QtXHUwMDNldmFsaWQgPSBmcmFtZS1cdTAwM2V2YWxpZDtcbkBAIC0xMjA5LDYgJiM0MzsxMjA5LDcgQEAgc3RhdGljIGludCBfX3NlbmRfcGt0cyhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB4c2stXHUwMDNlYmF0Y2hfc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IHBrdCAqcGt0ID0gcGt0X3N0cmVhbV9nZXRfbmV4dF90eF9wa3QocGt0X3N0cmVhbSk7XG4gXHRcdHUzMiBuYl9mcmFnc19sZWZ0LCBuYl9mcmFncywgYnl0ZXNfd3JpdHRlbiA9IDA7XG4mIzQzO1x0XHRzdHJ1Y3QgcGt0ICpmaXJzdF9wa3QgPSBwa3Q7XG4gXG4gXHRcdGlmICghcGt0KVxuIFx0XHRcdGJyZWFrO1xuQEAgLTEyNTMsNiAmIzQzOzEyNTQsOCBAQCBzdGF0aWMgaW50IF9fc2VuZF9wa3RzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayxcbiBcdFx0aWYgKHBrdCBcdTAwMjZcdTAwMjYgcGt0LVx1MDAzZXZhbGlkKSB7XG4gXHRcdFx0dmFsaWRfcGt0cyYjNDM7JiM0Mzs7XG4gXHRcdFx0dmFsaWRfZnJhZ3MgJiM0Mzs9IG5iX2ZyYWdzO1xuJiM0MztcdFx0fSBlbHNlIGlmIChwa3Rfc3RyZWFtLVx1MDAzZXZlcmJhdGltIFx1MDAyNlx1MDAyNiBwa3RfY29udGludWVzKGZpcnN0X3BrdC1cdTAwM2VvcHRpb25zKSkge1xuJiM0MztcdFx0XHR2YWxpZF9mcmFncyAmIzQzOz0gbmJfZnJhZ3M7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0yMDk5LDEzICYjNDM7MjEwMiwxNiBAQCBpbnQgdGVzdGFwcF9pbnZhbGlkX2Rlc2NfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdFx0ezAsIDAsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogSW52YWxpZCBhZGRyZXNzIGluIHRoZSBzZWNvbmQgZnJhbWUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4tXHRcdHt1bWVtX3N6LCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuJiM0MztcdFx0e3VtZW1fc3ogKiAyLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuJiM0MztcdFx0ezAsIE1JTl9QS1RfU0laRSwgMCwgZmFsc2UsIDB9LFxuIFx0XHQvKiBJbnZhbGlkIGxlbiBpbiB0aGUgbWlkZGxlICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuIFx0XHR7MCwgWFNLX1VNRU1fX0lOVkFMSURfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuJiM0MztcdFx0ezAsIE1JTl9QS1RfU0laRSwgMCwgZmFsc2UsIDB9LFxuIFx0XHQvKiBJbnZhbGlkIG9wdGlvbnMgaW4gdGhlIG1pZGRsZSAqL1xuIFx0XHR7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWFNLX0RFU0NfX0lOVkFMSURfT1BUSU9OfSxcbiYjNDM7XHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogVHJhbnNtaXQgMiBmcmFncywgcmVjZWl2ZSAzICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIFhEUF9QS1RfQ09OVER9LFxuIFx0XHR7MCwgWFNLX1VNRU1fX01BWF9GUkFNRV9TSVpFLCAwLCB0cnVlLCAwfSxcbkBAIC0yMTE3LDggJiM0MzsyMTIzLDggQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXG4gXHRpZiAodW1lbS1cdTAwM2V1bmFsaWduZWRfbW9kZSkge1xuIFx0XHQvKiBDcm9zc2luZyBhIGNodW5rIGJvdW5kYXJ5IGFsbG93ZWQgKi9cbi1cdFx0cGt0c1sxMl0udmFsaWQgPSB0cnVlO1xuLVx0XHRwa3RzWzEzXS52YWxpZCA9IHRydWU7XG4mIzQzO1x0XHRwa3RzWzE1XS52YWxpZCA9IHRydWU7XG4mIzQzO1x0XHRwa3RzWzE2XS52YWxpZCA9IHRydWU7XG4gXHR9XG4gXG4gXHR0ZXN0LVx1MDAzZW10dSA9IE1BWF9FVEhfSlVNQk9fU0laRTtcbkBAIC0yMjcwLDcgJiM0MzsyMjc2LDcgQEAgaW50IHRlc3RhcHBfdG9vX21hbnlfZnJhZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdFx0bWF4X2ZyYWdzICYjNDM7PSAxO1xuIFx0fVxuIFxuLVx0cGt0cyA9IGNhbGxvYygyICogbWF4X2ZyYWdzICYjNDM7IDIsIHNpemVvZihzdHJ1Y3QgcGt0KSk7XG4mIzQzO1x0cGt0cyA9IGNhbGxvYygyICogbWF4X2ZyYWdzICYjNDM7IDMsIHNpemVvZihzdHJ1Y3QgcGt0KSk7XG4gXHRpZiAoIXBrdHMpXG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXG5AQCAtMjI4OCwyNCAmIzQzOzIyOTQsMzAgQEAgaW50IHRlc3RhcHBfdG9vX21hbnlfZnJhZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdH1cbiBcdHBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDtcbiBcbi1cdC8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0XG4tXHQgKiBjb250aW51ZXMgb24gdGhlIGxhc3QgZnJhZ1xuLVx0ICovXG4tXHRmb3IgKGkgPSBtYXhfZnJhZ3MgJiM0MzsgMTsgaSBcdTAwM2MgMiAqIG1heF9mcmFncyAmIzQzOyAxOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdC8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCAmIzQzOyAxIGFtb3VudCBvZiBmcmFncyAqL1xuJiM0MztcdGZvciAoaSA9IG1heF9mcmFncyAmIzQzOyAxOyBpIFx1MDAzYyAyICogbWF4X2ZyYWdzICYjNDM7IDI7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHBrdHNbaV0ubGVuID0gTUlOX1BLVF9TSVpFO1xuIFx0XHRwa3RzW2ldLm9wdGlvbnMgPSBYRFBfUEtUX0NPTlREO1xuLVx0XHRwa3RzW2ldLnZhbGlkID0gZmFsc2U7XG4mIzQzO1x0XHRwa3RzW2ldLnZhbGlkID0gdHJ1ZTtcbiBcdH1cbiYjNDM7XHRwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0ub3B0aW9ucyA9IDA7XG4gXG4gXHQvKiBWYWxpZCBwYWNrZXQgZm9yIHN5bmNoICovXG4tXHRwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0ubGVuID0gTUlOX1BLVF9TSVpFO1xuLVx0cGt0c1syICogbWF4X2ZyYWdzICYjNDM7IDFdLnZhbGlkID0gdHJ1ZTtcbiYjNDM7XHRwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMl0ubGVuID0gTUlOX1BLVF9TSVpFO1xuJiM0MztcdHBrdHNbMiAqIG1heF9mcmFncyAmIzQzOyAyXS52YWxpZCA9IHRydWU7XG4gXG4tXHRpZiAocGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20odGVzdCwgcGt0cywgMiAqIG1heF9mcmFncyAmIzQzOyAyKSkge1xuJiM0MztcdGlmIChwa3Rfc3RyZWFtX2dlbmVyYXRlX2N1c3RvbSh0ZXN0LCBwa3RzLCAyICogbWF4X2ZyYWdzICYjNDM7IDMpKSB7XG4gXHRcdGZyZWUocGt0cyk7XG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHR9XG4gXG4mIzQzO1x0LyogVGhlIGdlbmVyYXRlZCBUeCBzdHJlYW0gbXVzdCBrZWVwIHRoZSB0b28tYmlnIHBhY2tldCB2YWxpZCBzbyB0aGF0XG4mIzQzO1x0ICogX19zZW5kX3BrdHMoKSBhY2NvdW50cyBpdHMgZGVzY3JpcHRvcnMgaW4gb3V0c3RhbmRpbmdfdHguIFRoZSBSeFxuJiM0MztcdCAqIHN0cmVhbSwgaG93ZXZlciwgbXVzdCBub3QgZXhwZWN0IHRoaXMgcGFja2V0IG9uIHRoZSB3aXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrLVx1MDAzZXBrdF9zdHJlYW0tXHUwMDNlcGt0c1syXS52YWxpZCA9IGZhbHNlO1xuJiM0MztcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrLVx1MDAzZXBrdF9zdHJlYW0tXHUwMDNlbmJfdmFsaWRfZW50cmllcy0tO1xuJiM0MztcbiBcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcbiBcdGZyZWUocGt0cyk7XG4gXHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDIzOjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX3R4X2NvbW1pdF9iYXRjaCYjMzQ7LAogICAgJiMzNDtfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCYjMzQ7LAogICAgJiMzNDt4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoJiMzNDssCiAgICAmIzM0O3hza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkJiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2ImIzM0OywKICAgICYjMzQ7eHNrX2J1aWxkX3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDtfX3hza19nZW5lcmljX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCB0cmFuc21pc3Npb24gbG9naWMgdG8gY29ycmVjdGx5IGhhbmRsZSBtdWx0aS1idWZmZXIgcGFja2V0cyB3aXRoIGludmFsaWQgZGVzY3JpcHRvcnMgb3IgZXhjZWVkaW5nIHRoZSBtYXhpbXVtIGFsbG93ZWQgZnJhZ21lbnRzLiBJdCBpbnRyb2R1Y2VzIG5ldyBiYXRjaGluZyBhbmQgcmVjbGFpbWluZyBsb2dpYyBmb3IgZGVzY3JpcHRvcnMsIGFuZCB1cGRhdGVzIHRoZSBnZW5lcmljIFhEUCB0cmFuc21pdCBwYXRoIHRvIGRyYWluIGludmFsaWQgcGFja2V0cy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfWERQIHNvY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA5ZGIzZTQwODAwMjFjYTQ4ZGU1NmIxN2QzMTBkNzIyMzAzYWNjOGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAxNCAyMzo1NjoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmggYi9pbmNsdWRlL25ldC94ZHBfc29jay5oCmluZGV4IGViYWM2MGEzZDhhMTdiLi44YjUxODc2ZWZiZWQxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGRwX3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC94ZHBfc29jay5oCkBAIC04MCw2ICYjNDM7ODAsNyBAQCBzdHJ1Y3QgeGRwX3NvY2sgewogCSAqIGNhbGwgb2YgX194c2tfZ2VuZXJpY194bWl0KCkuCiAJICovCiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJYm9vbCBkcmFpbl9jb250OwogCiAJc3RydWN0IGxpc3RfaGVhZCBtYXBfbGlzdDsKIAkvKiBQcm90ZWN0cyBtYXBfbGlzdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oIGIvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oCmluZGV4IGNjYjNiMzUwMDAxZjI0Li4yYmIxZDEyMmIxYmM2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaApAQCAtNzgsNiAmIzQzOzc4LDkgQEAgc3RydWN0IHhza19idWZmX3Bvb2wgewogCXUzMiBjaHVua19zaXplOwogCXUzMiBjaHVua19zaGlmdDsKIAl1MzIgZnJhbWVfbGVuOwomIzQzOwl1MzIgdHhfZGVzY3NfbmVudHJpZXM7CiYjNDM7CXUzMiByZWNsYWltX2Rlc2NzOwomIzQzOwl1MzIgdHhfemNfcGVuZGluZ19kZXNjczsKIAl1MzIgeGRwX3pjX21heF9zZWdzOwogCXU4IHR4X21ldGFkYXRhX2xlbjsgLyogaW5oZXJpdGVkIGZyb20gdW1lbSAqLwogCXU4IGNhY2hlZF9uZWVkX3dha2V1cDsKQEAgLTEwMiwxMiAmIzQzOzEwNSwxNCBAQCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCB7CiAKIC8qIEFGX1hEUCBjb3JlLiAqLwogc3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cywKLQkJCQkJCXN0cnVjdCB4ZHBfdW1lbSAqdW1lbSk7CiYjNDM7CQkJCQkJc3RydWN0IHhkcF91bWVtICp1bWVtLAomIzQzOwkJCQkJCXUzMiBtYXhfc2Vncyk7CiBpbnQgeHBfYXNzaWduX2RldihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICB1MTYgcXVldWVfaWQsIHUxNiBmbGFncyk7CiBpbnQgeHBfYXNzaWduX2Rldl9zaGFyZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqdW1lbV94cywKIAkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcXVldWVfaWQpOwotaW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKTsKJiM0MztpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsCiYjNDM7CQkgICAgICB1MzIgbWF4X3NlZ3MpOwogdm9pZCB4cF9kZXN0cm95KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTsKIHZvaWQgeHBfZ2V0X3Bvb2woc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpOwogYm9vbCB4cF9wdXRfcG9vbChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7CmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suYwppbmRleCBiOTcwZjMwZWE5YjlkOC4uMjkwOWEwZWM2ODM3MzEgMTAwNjQ0Ci0tLSBhL25ldC94ZHAveHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2suYwpAQCAtNDk5LDYgJiM0Mzs0OTksMjMgQEAgdm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdCkKIAogdm9pZCB4c2tfdHhfY29tcGxldGVkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfZW50cmllcykKIHsKJiM0MzsJdTMyIHJlY2xhaW1fZGVzY3MgPSBSRUFEX09OQ0UocG9vbC0mZ3Q7cmVjbGFpbV9kZXNjcyk7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShyZWNsYWltX2Rlc2NzKSkgewomIzQzOwkJdTMyIHBlbmRpbmdfZGVzY3MgPSBSRUFEX09OQ0UocG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcyk7CiYjNDM7CiYjNDM7CQlpZiAobmJfZW50cmllcyAmbHQ7IHBlbmRpbmdfZGVzY3MpIHsKJiM0MzsJCQlXUklURV9PTkNFKHBvb2wtJmd0O3R4X3pjX3BlbmRpbmdfZGVzY3MsCiYjNDM7CQkJCSAgIHBlbmRpbmdfZGVzY3MgLSBuYl9lbnRyaWVzKTsKJiM0MzsJCQl4c2txX3Byb2Rfc3VibWl0X24ocG9vbC0mZ3Q7Y3EsIG5iX2VudHJpZXMpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCVdSSVRFX09OQ0UocG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcywgMCk7CiYjNDM7CQluYl9lbnRyaWVzICYjNDM7PSByZWNsYWltX2Rlc2NzOwomIzQzOwkJV1JJVEVfT05DRShwb29sLSZndDtyZWNsYWltX2Rlc2NzLCAwKTsKJiM0MzsJfQomIzQzOwogCXhza3FfcHJvZF9zdWJtaXRfbihwb29sLSZndDtjcSwgbmJfZW50cmllcyk7CiB9CiBFWFBPUlRfU1lNQk9MKHhza190eF9jb21wbGV0ZWQpOwpAQCAtNTc0LDI0ICYjNDM7NTkxLDE2MiBAQCBzdGF0aWMgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2soc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZW50cgogCXJldHVybiBuYl9wa3RzOwogfQogCiYjNDM7c3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwKJiM0MzsJCQkJc3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpCiYjNDM7ewomIzQzOwl1MzIgbmJfZGVzY3MgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoYmF0Y2gpOwomIzQzOwl1MzIgY3FfY2FjaGVkX3Byb2Q7CiYjNDM7CiYjNDM7CWlmICghbmJfZGVzY3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWNxX2NhY2hlZF9wcm9kID0gcG9vbC0mZ3Q7Y3EtJmd0O2NhY2hlZF9wcm9kOwomIzQzOwl4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLSZndDtjcSwgcG9vbC0mZ3Q7dHhfZGVzY3MsIG5iX2Rlc2NzKTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGJhdGNoLSZndDtyZWNsYWltX2Rlc2NzKSkgewomIzQzOwkJdTMyIGNxX3BlbmRpbmdfZGVzY3M7CiYjNDM7CiYjNDM7CQkvKiBDUSBpcyBwb3NpdGlvbmFsLiBEZXNjcmlwdG9ycyBhbHJlYWR5IHdyaXR0ZW4gYnV0IG5vdAomIzQzOwkJICogc3VibWl0dGVkIG11c3QgY29tcGxldGUgYmVmb3JlIGFueSByZWNsYWltLW9ubHkgZGVzY3JpcHRvcnMKJiM0MzsJCSAqIGFwcGVuZGVkIGJlbG93LgomIzQzOwkJICovCiYjNDM7CQljcV9wZW5kaW5nX2Rlc2NzID0gY3FfY2FjaGVkX3Byb2QgLSB4c2txX2dldF9wcm9kKHBvb2wtJmd0O2NxKTsKJiM0MzsKJiM0MzsJCVdSSVRFX09OQ0UocG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcywKJiM0MzsJCQkgICBiYXRjaC0mZ3Q7dHhfZGVzY3MgJiM0MzsgY3FfcGVuZGluZ19kZXNjcyk7CiYjNDM7CQlXUklURV9PTkNFKHBvb2wtJmd0O3JlY2xhaW1fZGVzY3MsIGJhdGNoLSZndDtyZWNsYWltX2Rlc2NzKTsKJiM0MzsJCWlmICh1bmxpa2VseSghcG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcykpCiYjNDM7CQkJeHNrX3R4X2NvbXBsZXRlZChwb29sLCAwKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaAomIzQzO19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLAomIzQzOwkJCQkgc3RydWN0IHhkcF9kZXNjICpkZXNjcywgdTMyIG1heF9kZXNjcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTsKJiM0MzsJdTMyIGVudHJpZXM7CiYjNDM7CiYjNDM7CWVudHJpZXMgPSB4c2txX2NvbnNfbmJfZW50cmllcyh4cy0mZ3Q7dHgsIG1heF9kZXNjcyk7CiYjNDM7CWlmICghZW50cmllcykKJiM0MzsJCXJldHVybiBiYXRjaDsKJiM0MzsKJiM0MzsJYmF0Y2ggPSB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHhzLCBwb29sLCBkZXNjcywgbWF4X2Rlc2NzKTsKJiM0MzsJaWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoJmFtcDtiYXRjaCkpIHsKJiM0MzsJCXhzLSZndDt0eC0mZ3Q7cXVldWVfZW1wdHlfZGVzY3MmIzQzOyYjNDM7OwomIzQzOwkJaWYgKGJhdGNoLmNvbnN1bWVkX2Rlc2NzKSB7CiYjNDM7CQkJX194c2txX2NvbnNfcmVsZWFzZSh4cy0mZ3Q7dHgpOwomIzQzOwkJCXhzLSZndDtzay5za193cml0ZV9zcGFjZSgmYW1wO3hzLSZndDtzayk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gYmF0Y2g7CiYjNDM7CX0KJiM0MzsKJiM0MzsJX194c2txX2NvbnNfcmVsZWFzZSh4cy0mZ3Q7dHgpOwomIzQzOwl4cy0mZ3Q7c2suc2tfd3JpdGVfc3BhY2UoJmFtcDt4cy0mZ3Q7c2spOwomIzQzOwlyZXR1cm4gYmF0Y2g7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoCiYjNDM7eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9kZXNjcykKJiM0Mzt7CiYjNDM7CXUzMiBjcV9kZXNjc19iZWZvcmUsIGNxX2Rlc2NzX2FmdGVyOwomIzQzOwlzdHJ1Y3QgeHNrX3R4X2JhdGNoIHN1bV9iYXRjaCA9IHt9OwomIzQzOwlib29sIGJ1ZGdldF9leGhhdXN0ZWQ7CiYjNDM7CXUzMiBwZXJfc29ja2V0X2J1ZGdldDsKJiM0MzsJc3RydWN0IHhkcF9zb2NrICp4czsKJiM0MzsKJiM0MzsJLyogVGhlIGZhaXJuZXNzIHF1b3RhIG11c3QgYWxsb3cgb25lIG1heGltdW0tc2l6ZWQgdmFsaWQgcGFja2V0LiAqLwomIzQzOwlwZXJfc29ja2V0X2J1ZGdldCA9IG1heF90KHUzMiwgTUFYX1BFUl9TT0NLRVRfQlVER0VULAomIzQzOwkJCQkgIHBvb2wtJmd0O3hkcF96Y19tYXhfc2Vncyk7CiYjNDM7CiYjNDM7YWdhaW46CiYjNDM7CWJ1ZGdldF9leGhhdXN0ZWQgPSBmYWxzZTsKJiM0MzsJY3FfZGVzY3NfYmVmb3JlID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKCZhbXA7c3VtX2JhdGNoKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsICZhbXA7cG9vbC0mZ3Q7eHNrX3R4X2xpc3QsIHR4X2xpc3QpIHsKJiM0MzsJCXUzMiBidWRnZXQsIGJ1ZGdldF9sZWZ0LCBvZmZzZXQsIHJlbWFpbmluZzsKJiM0MzsJCXN0cnVjdCB4c2tfdHhfYmF0Y2ggY3Vycl9iYXRjaDsKJiM0MzsKJiM0MzsJCS8qIE9uY2UgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBhcHBlbmRlZCB0byB0aGUgQ1EKJiM0MzsJCSAqIGFkZHJlc3MgYXJlYSwgZG8gbm90IGFwcGVuZCBkcml2ZXItdmlzaWJsZSBUeCBkZXNjcmlwdG9ycwomIzQzOwkJICogZnJvbSBhbm90aGVyIHNvY2tldCBhZnRlciB0aGVtLiB4c2tfdHhfY29tcGxldGVkKCkgcmVsaWVzIG9uCiYjNDM7CQkgKiBhbGwgZHJpdmVyLXZpc2libGUgZGVzY3JpcHRvcnMgcHJlY2VkaW5nIGFsbCByZWNsYWltLW9ubHkKJiM0MzsJCSAqIGRlc2NyaXB0b3JzIGluIENRIG9yZGVyLgomIzQzOwkJICovCiYjNDM7CQlpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBiZSBnZW50bGUgd2hlbiBwbGF5aW5nIHdpdGggcG9vbC0mZ3Q7dHhfZGVzY3MgKi8KJiM0MzsJCW9mZnNldCA9IHhza190eF9iYXRjaF9jcV9kZXNjcygmYW1wO3N1bV9iYXRjaCk7CiYjNDM7CQlpZiAob2Zmc2V0ICZndDs9IG1heF9kZXNjcykKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmICh4cy0mZ3Q7dHhfYnVkZ2V0X3NwZW50ICZndDs9IHBlcl9zb2NrZXRfYnVkZ2V0KSB7CiYjNDM7CQkJaWYgKHhza3FfY29uc19uYl9lbnRyaWVzKHhzLSZndDt0eCwgMSkpCiYjNDM7CQkJCWJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYnVkZ2V0X2xlZnQgPSBwZXJfc29ja2V0X2J1ZGdldCAtIHhzLSZndDt0eF9idWRnZXRfc3BlbnQ7CiYjNDM7CQlyZW1haW5pbmcgPSBtYXhfZGVzY3MgLSBvZmZzZXQ7CiYjNDM7CQlidWRnZXQgPSBtaW4ocmVtYWluaW5nLCBidWRnZXRfbGVmdCk7CiYjNDM7CiYjNDM7CQljdXJyX2JhdGNoID0gX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gocG9vbCwgeHMsCiYjNDM7CQkJCQkJCSAgICAgIHBvb2wtJmd0O3R4X2Rlc2NzICYjNDM7IG9mZnNldCwKJiM0MzsJCQkJCQkJICAgICAgYnVkZ2V0KTsKJiM0MzsJCWlmICgheHNrX3R4X2JhdGNoX2NxX2Rlc2NzKCZhbXA7Y3Vycl9iYXRjaCkpIHsKJiM0MzsJCQlpZiAoY3Vycl9iYXRjaC5idWRnZXRfbGltaXRlZCAmYW1wOyZhbXA7IGJ1ZGdldF9sZWZ0ICZsdDsgcmVtYWluaW5nKQomIzQzOwkJCQlidWRnZXRfZXhoYXVzdGVkID0gdHJ1ZTsKJiM0MzsJCQl4cy0mZ3Q7dHhfYnVkZ2V0X3NwZW50ICYjNDM7PSBjdXJyX2JhdGNoLmNvbnN1bWVkX2Rlc2NzOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJeHMtJmd0O3R4X2J1ZGdldF9zcGVudCAmIzQzOz0gY3Vycl9iYXRjaC5jb25zdW1lZF9kZXNjczsKJiM0MzsJCXN1bV9iYXRjaC50eF9kZXNjcyAmIzQzOz0gY3Vycl9iYXRjaC50eF9kZXNjczsKJiM0MzsJCXN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzICYjNDM7PSBjdXJyX2JhdGNoLnJlY2xhaW1fZGVzY3M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY3FfZGVzY3NfYWZ0ZXIgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoJmFtcDtzdW1fYmF0Y2gpOwomIzQzOwomIzQzOwlpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgfHwgY3FfZGVzY3NfYWZ0ZXIgJmd0Oz0gbWF4X2Rlc2NzKQomIzQzOwkJcmV0dXJuIHN1bV9iYXRjaDsKJiM0MzsKJiM0MzsJLyogQ29udGludWUgZmlsbGluZyB0aGUgYmF0Y2ggd2hpbGUgdGhpcyBwYXNzIG1hZGUgcHJvZ3Jlc3MgKi8KJiM0MzsJaWYgKGNxX2Rlc2NzX2JlZm9yZSAhPSBjcV9kZXNjc19hZnRlcikKJiM0MzsJCWdvdG8gYWdhaW47CiYjNDM7CiYjNDM7CWlmICghYnVkZ2V0X2V4aGF1c3RlZCkKJiM0MzsJCXJldHVybiBzdW1fYmF0Y2g7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCAmYW1wO3Bvb2wtJmd0O3hza190eF9saXN0LCB0eF9saXN0KQomIzQzOwkJeHMtJmd0O3R4X2J1ZGdldF9zcGVudCA9IDA7CiYjNDM7CWdvdG8gYWdhaW47CiYjNDM7fQomIzQzOwogdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX3BrdHMpCiB7CiYjNDM7CXN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTsKIAlzdHJ1Y3QgeGRwX3NvY2sgKnhzOwomIzQzOwlib29sIHVtZW1fc2hhcmVkOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWlmICghbGlzdF9pc19zaW5ndWxhcigmYW1wO3Bvb2wtJmd0O3hza190eF9saXN0KSkgewotCQkvKiBGYWxsYmFjayB0byB0aGUgbm9uLWJhdGNoZWQgdmVyc2lvbiAqLwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2socG9vbCwgbmJfcGt0cyk7Ci0JfQomIzQzOwlpZiAodW5saWtlbHkoUkVBRF9PTkNFKHBvb2wtJmd0O3JlY2xhaW1fZGVzY3MpKSkKJiM0MzsJCWdvdG8gb3V0OwogCi0JeHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KCZhbXA7cG9vbC0mZ3Q7eHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jaywgdHhfbGlzdCk7Ci0JaWYgKCF4cykgewotCQluYl9wa3RzID0gMDsKJiM0MzsJeHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KCZhbXA7cG9vbC0mZ3Q7eHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jaywKJiM0MzsJCQkJICAgIHR4X2xpc3QpOwomIzQzOwlpZiAoIXhzKQogCQlnb3RvIG91dDsKLQl9CiAKLQluYl9wa3RzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtJmd0O3R4LCBuYl9wa3RzKTsKJiM0MzsJbmJfcGt0cyA9IG1pbihuYl9wa3RzLCBwb29sLSZndDt0eF9kZXNjc19uZW50cmllcyk7CiYjNDM7CWlmICghbmJfcGt0cykKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl1bWVtX3NoYXJlZCA9ICFsaXN0X2lzX3Npbmd1bGFyKCZhbXA7cG9vbC0mZ3Q7eHNrX3R4X2xpc3QpOwomIzQzOwomIzQzOwlpZiAodW1lbV9zaGFyZWQgJmFtcDsmYW1wOyAhKHBvb2wtJmd0O3VtZW0tJmd0O2ZsYWdzICZhbXA7IFhEUF9VTUVNX1NHX0ZMQUcpKSB7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHBvb2wsIG5iX3BrdHMpOwomIzQzOwl9CiAKIAkvKiBUaGlzIGlzIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtIGZvciB0aGUgVHggcGF0aC4gVHJ5IHRvCiAJICogcmVzZXJ2ZSBzcGFjZSBpbiB0aGUgY29tcGxldGlvbiBxdWV1ZSBmb3IgYWxsIHBhY2tldHMsIGJ1dApAQCAtNjAzLDE5ICYjNDM7NzU4LDE2IEBAIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKQogCWlmICghbmJfcGt0cykKIAkJZ290byBvdXQ7CiAKLQluYl9wa3RzID0geHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaCh4cy0mZ3Q7dHgsIHBvb2wsIG5iX3BrdHMpOwotCWlmICghbmJfcGt0cykgewotCQl4cy0mZ3Q7dHgtJmd0O3F1ZXVlX2VtcHR5X2Rlc2NzJiM0MzsmIzQzOzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JX194c2txX2NvbnNfcmVsZWFzZSh4cy0mZ3Q7dHgpOwotCXhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtJmd0O2NxLCBwb29sLSZndDt0eF9kZXNjcywgbmJfcGt0cyk7Ci0JeHMtJmd0O3NrLnNrX3dyaXRlX3NwYWNlKCZhbXA7eHMtJmd0O3NrKTsKJiM0MzsJYmF0Y2ggPSB1bWVtX3NoYXJlZCA/CiYjNDM7CQl4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoKHBvb2wsIG5iX3BrdHMpIDoKJiM0MzsJCV9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHBvb2wsIHhzLAomIzQzOwkJCQkJCSBwb29sLSZndDt0eF9kZXNjcywKJiM0MzsJCQkJCQkgbmJfcGt0cyk7CiYjNDM7CXhza190eF9jb21taXRfYmF0Y2gocG9vbCwgJmFtcDtiYXRjaCk7CiAKIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gbmJfcGt0czsKJiM0MzsJcmV0dXJuIGJhdGNoLnR4X2Rlc2NzOwogfQogRVhQT1JUX1NZTUJPTCh4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gpOwogCkBAIC03MzcsNiAmIzQzOzg4OSwxOSBAQCBzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwb29sLSZndDtjcV9wcm9kX2xvY2ssIGZsYWdzKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwl1MzIgaWR4OwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3Bvb2wtJmd0O2NxX3Byb2RfbG9jaywgZmxhZ3MpOwomIzQzOwlpZHggPSB4c2txX2dldF9wcm9kKHBvb2wtJmd0O2NxKTsKJiM0MzsJeHNrcV9wcm9kX3dyaXRlX2FkZHIocG9vbC0mZ3Q7Y3EsIGlkeCwgZGVzYy0mZ3Q7YWRkcik7CiYjNDM7CXhza3FfcHJvZF9zdWJtaXRfbihwb29sLSZndDtjcSwgMSk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwb29sLSZndDtjcV9wcm9kX2xvY2ssIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB4c2tfY3FfY2FuY2VsX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG4pCiB7CiAJc3Bpbl9sb2NrKCZhbXA7cG9vbC0mZ3Q7Y3EtJmd0O2NxX2NhY2hlZF9wcm9kX2xvY2spOwpAQCAtNzk0LDggJiM0Mzs5NTksMTEgQEAgc3RhdGljIHZvaWQgeHNrX2NvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiAKIHN0YXRpYyB2b2lkIHhza19kcm9wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXhkcF9zayhza2ItJmd0O3NrKS0mZ3Q7dHgtJmd0O2ludmFsaWRfZGVzY3MgJiM0Mzs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTsKLQl4c2tfY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJc3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhza2ItJmd0O3NrKTsKJiM0MzsKJiM0MzsJeHMtJmd0O3R4LSZndDtpbnZhbGlkX2Rlc2NzICYjNDM7PSB4c2tfZ2V0X251bV9kZXNjKHNrYik7CiYjNDM7CWNvbnN1bWVfc2tiKHNrYik7CiYjNDM7CXhzLSZndDtza2IgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLApAQCAtODc3LDcgJiM0MzsxMDQ1LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsCiAJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCQkvKiBpbiBjYXNlIG9mIC1FT1ZFUkZMT1cgdGhhdCBjb3VsZCBoYXBwZW4gYmVsb3csCi0JCSAqIHhza19jb25zdW1lX3NrYigpIHdpbGwgcmVsZWFzZSB0aGlzIG5vZGUgYXMgd2hvbGUgc2tiCiYjNDM7CQkgKiB4c2tfZHJvcF9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYgogCQkgKiB3b3VsZCBiZSBkcm9wcGVkLCB3aGljaCBpbXBsaWVzIGZyZWVpbmcgYWxsIGxpc3QgZWxlbWVudHMKIAkJICovCiAJCXhza19hZGRyLSZndDthZGRyc1t4c2tfYWRkci0mZ3Q7bnVtX2Rlc2NzXSA9IGRlc2MtJmd0O2FkZHI7CkBAIC05NjksNiAmIzQzOzExMzcsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cywKIAkJCQlnb3RvIGZyZWVfZXJyOwogCQkJfQogCiYjNDM7CQkJeHNrX2FkZHItJmd0O2FkZHJzW3hza19hZGRyLSZndDtudW1fZGVzY3NdID0gZGVzYy0mZ3Q7YWRkcjsKJiM0MzsKIAkJCWlmICh1bmxpa2VseShucl9mcmFncyA9PSAoTUFYX1NLQl9GUkFHUyAtIDEpICZhbXA7JmFtcDsgeHBfbWJfZGVzYyhkZXNjKSkpIHsKIAkJCQllcnIgPSAtRU9WRVJGTE9XOwogCQkJCWdvdG8gZnJlZV9lcnI7CkBAIC05ODYsOCAmIzQzOzExNTYsNiBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cywKIAogCQkJc2tiX2FkZF9yeF9mcmFnKHNrYiwgbnJfZnJhZ3MsIHBhZ2UsIDAsIGxlbiwgUEFHRV9TSVpFKTsKIAkJCXJlZmNvdW50X2FkZChQQUdFX1NJWkUsICZhbXA7eHMtJmd0O3NrLnNrX3dtZW1fYWxsb2MpOwotCi0JCQl4c2tfYWRkci0mZ3Q7YWRkcnNbeHNrX2FkZHItJmd0O251bV9kZXNjc10gPSBkZXNjLSZndDthZGRyOwogCQl9CiAJfQogCkBAIC0xMDYwLDExICYjNDM7MTIyOCwyMiBAQCBzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spCiAJCQlnb3RvIG91dDsKIAkJfQogCiYjNDM7CQlpZiAodW5saWtlbHkoeHMtJmd0O2RyYWluX2NvbnQpKSB7CiYjNDM7CQkJeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoeHMtJmd0O3Bvb2wsICZhbXA7ZGVzYyk7CiYjNDM7CiYjNDM7CQkJeHMtJmd0O3R4LSZndDtpbnZhbGlkX2Rlc2NzJiM0MzsmIzQzOzsKJiM0MzsJCQl4c2txX2NvbnNfcmVsZWFzZSh4cy0mZ3Q7dHgpOwomIzQzOwkJCXhzLSZndDtkcmFpbl9jb250ID0geHBfbWJfZGVzYygmYW1wO2Rlc2MpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwogCQlza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCAmYW1wO2Rlc2MpOwogCQlpZiAoSVNfRVJSKHNrYikpIHsKIAkJCWVyciA9IFBUUl9FUlIoc2tiKTsKIAkJCWlmIChlcnIgIT0gLUVPVkVSRkxPVykKIAkJCQlnb3RvIG91dDsKJiM0MzsJCQlpZiAoeHBfbWJfZGVzYygmYW1wO2Rlc2MpKQomIzQzOwkJCQl4cy0mZ3Q7ZHJhaW5fY29udCA9IHRydWU7CiAJCQllcnIgPSAwOwogCQkJY29udGludWU7CiAJCX0KQEAgLTEwOTgsOSAmIzQzOzEyNzcsMjQgQEAgc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKQogCX0KIAogCWlmICh4c2txX2hhc19kZXNjcyh4cy0mZ3Q7dHgpKSB7CiYjNDM7CQlib29sIHJlY2xhaW1fZGVzYyA9IHhzLSZndDtza2IgfHwgeHMtJmd0O2RyYWluX2NvbnQ7CiYjNDM7CiYjNDM7CQlpZiAocmVjbGFpbV9kZXNjKSB7CiYjNDM7CQkJZXJyID0geHNrX2NxX3Jlc2VydmVfbG9ja2VkKHhzLSZndDtwb29sKTsKJiM0MzsJCQlpZiAoZXJyKSB7CiYjNDM7CQkJCWVyciA9IC1FQUdBSU47CiYjNDM7CQkJCWdvdG8gb3V0OwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKIAkJaWYgKHhzLSZndDtza2IpCiAJCQl4c2tfZHJvcF9za2IoeHMtJmd0O3NrYik7CiYjNDM7CiYjNDM7CQlpZiAocmVjbGFpbV9kZXNjKQomIzQzOwkJCXhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLSZndDtwb29sLCAmYW1wO2Rlc2MpOwomIzQzOwogCQl4c2txX2NvbnNfcmVsZWFzZSh4cy0mZ3Q7dHgpOwomIzQzOwkJeHMtJmd0O2RyYWluX2NvbnQgPSB4cF9tYl9kZXNjKCZhbXA7ZGVzYyk7CiAJfQogCiBvdXQ6CkBAIC0xNDgzLDcgJiM0MzsxNjc3LDggQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHIKIAkJCSAqIGFuZC9vciBkZXZpY2UuCiAJCQkgKi8KIAkJCXhzLSZndDtwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cywKLQkJCQkJCQkgICAgIHVtZW1feHMtJmd0O3VtZW0pOwomIzQzOwkJCQkJCQkgICAgIHVtZW1feHMtJmd0O3VtZW0sCiYjNDM7CQkJCQkJCSAgICAgZGV2LSZndDt4ZHBfemNfbWF4X3NlZ3MpOwogCQkJaWYgKCF4cy0mZ3Q7cG9vbCkgewogCQkJCWVyciA9IC1FTk9NRU07CiAJCQkJc29ja2ZkX3B1dChzb2NrKTsKQEAgLTE1MTUsNyAmIzQzOzE3MTAsOCBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcgogCQkJICogdXRpbGl6ZXMKIAkJCSAqLwogCQkJaWYgKHhzLSZndDt0eCAmYW1wOyZhbXA7ICF4cy0mZ3Q7cG9vbC0mZ3Q7dHhfZGVzY3MpIHsKLQkJCQllcnIgPSB4cF9hbGxvY190eF9kZXNjcyh4cy0mZ3Q7cG9vbCwgeHMpOwomIzQzOwkJCQllcnIgPSB4cF9hbGxvY190eF9kZXNjcyh4cy0mZ3Q7cG9vbCwgeHMsCiYjNDM7CQkJCQkJCWRldi0mZ3Q7eGRwX3pjX21heF9zZWdzKTsKIAkJCQlpZiAoZXJyKSB7CiAJCQkJCXhwX3B1dF9wb29sKHhzLSZndDtwb29sKTsKIAkJCQkJeHMtJmd0O3Bvb2wgPSBOVUxMOwpAQCAtMTUzMyw3ICYjNDM7MTcyOSw5IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9IGVsc2UgewogCQkvKiBUaGlzIHhzayBoYXMgaXRzIG93biB1bWVtLiAqLwotCQl4cy0mZ3Q7cG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsIHhzLSZndDt1bWVtKTsKJiM0MzsJCXhzLSZndDtwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cywgeHMtJmd0O3VtZW0sCiYjNDM7CQkJCQkJICAgICBkZXYtJmd0O3hkcF96Y19tYXhfc2Vncyk7CiYjNDM7CiAJCWlmICgheHMtJmd0O3Bvb2wpIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIG91dF91bmxvY2s7CmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19idWZmX3Bvb2wuYyBiL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jCmluZGV4IDFmMjhhOTY0MTU3MWU0Li5hNDA4OTQ4MGIyMmIyNSAxMDA2NDQKLS0tIGEvbmV0L3hkcC94c2tfYnVmZl9wb29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmMKQEAgLTQyLDE3ICYjNDM7NDIsMjIgQEAgdm9pZCB4cF9kZXN0cm95KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKQogCWt2ZnJlZShwb29sKTsKIH0KIAotaW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKQomIzQzO2ludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cywKJiM0MzsJCSAgICAgIHUzMiBtYXhfc2VncykKIHsKLQlwb29sLSZndDt0eF9kZXNjcyA9IGt2emFsbG9jX29ianMoKnBvb2wtJmd0O3R4X2Rlc2NzLCB4cy0mZ3Q7dHgtJmd0O25lbnRyaWVzKTsKJiM0MzsJdTMyIG5lbnRyaWVzID0gbWF4KHhzLSZndDt0eC0mZ3Q7bmVudHJpZXMsIG1heF9zZWdzKTsKJiM0MzsKJiM0MzsJcG9vbC0mZ3Q7dHhfZGVzY3MgPSBrdnphbGxvY19vYmpzKCpwb29sLSZndDt0eF9kZXNjcywgbmVudHJpZXMpOwogCWlmICghcG9vbC0mZ3Q7dHhfZGVzY3MpCiAJCXJldHVybiAtRU5PTUVNOwogCiYjNDM7CXBvb2wtJmd0O3R4X2Rlc2NzX25lbnRyaWVzID0gbmVudHJpZXM7CiAJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsCi0JCQkJCQlzdHJ1Y3QgeGRwX3VtZW0gKnVtZW0pCiYjNDM7CQkJCQkJc3RydWN0IHhkcF91bWVtICp1bWVtLAomIzQzOwkJCQkJCXUzMiBtYXhfc2VncykKIHsKIAlib29sIHVuYWxpZ25lZCA9IHVtZW0tJmd0O2ZsYWdzICZhbXA7IFhEUF9VTUVNX1VOQUxJR05FRF9DSFVOS19GTEFHOwogCXN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sOwpAQCAtNjksNyAmIzQzOzc0LDcgQEAgc3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cywKIAkJZ290byBvdXQ7CiAKIAlpZiAoeHMtJmd0O3R4KQotCQlpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMpKQomIzQzOwkJaWYgKHhwX2FsbG9jX3R4X2Rlc2NzKHBvb2wsIHhzLCBtYXhfc2VncykpCiAJCQlnb3RvIG91dDsKIAogCXBvb2wtJmd0O2NodW5rX21hc2sgPSB+KCh1NjQpdW1lbS0mZ3Q7Y2h1bmtfc2l6ZSAtIDEpOwpkaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2tfcXVldWUuaCBiL25ldC94ZHAveHNrX3F1ZXVlLmgKaW5kZXggM2UzZmJiNzNkMjNlMmYuLmExNWZmMTkyOWRiNjIzIDEwMDY0NAotLS0gYS9uZXQveGRwL3hza19xdWV1ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrX3F1ZXVlLmgKQEAgLTU4LDYgJiM0Mzs1OCwxOCBAQCBzdHJ1Y3QgcGFyc2VkX2Rlc2MgewogCXUzMiB2YWxpZDsKIH07CiAKJiM0MztzdHJ1Y3QgeHNrX3R4X2JhdGNoIHsKJiM0MzsJdTMyIHR4X2Rlc2NzOwomIzQzOwl1MzIgcmVjbGFpbV9kZXNjczsKJiM0MzsJdTMyIGNvbnN1bWVkX2Rlc2NzOwomIzQzOwlib29sIGJ1ZGdldF9saW1pdGVkOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1MzIgeHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGNvbnN0IHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJhdGNoLSZndDt0eF9kZXNjcyAmIzQzOyBiYXRjaC0mZ3Q7cmVjbGFpbV9kZXNjczsKJiM0Mzt9CiYjNDM7CiAvKiBUaGUgc3RydWN0dXJlIG9mIHRoZSBzaGFyZWQgc3RhdGUgb2YgdGhlIHJpbmdzIGFyZSBhIHNpbXBsZQogICogY2lyY3VsYXIgYnVmZmVyLCBhcyBvdXRsaW5lZCBpbgogICogRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9jaXJjdWxhci1idWZmZXJzLnJzdC4gRm9yIHRoZSBSeCBhbmQKQEAgLTI2MywxNyAmIzQzOzI3NSwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFyc2VfZGVzYyhzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwKIAlwYXJzZWQtJmd0O21iID0geHBfbWJfZGVzYyhkZXNjKTsKIH0KIAotc3RhdGljIGlubGluZQotdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsCi0JCQkgICAgICB1MzIgbWF4KQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHhza190eF9iYXRjaAomIzQzO3hza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsCiYjNDM7CQkJICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4KQogewotCXUzMiBjYWNoZWRfY29ucyA9IHEtJmd0O2NhY2hlZF9jb25zLCBuYl9lbnRyaWVzID0gMDsKLQlzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzID0gcG9vbC0mZ3Q7dHhfZGVzY3M7Ci0JdTMyIHRvdGFsX2Rlc2NzID0gMCwgbnJfZnJhZ3MgPSAwOwomIzQzOwlib29sIGRyYWluID0gUkVBRF9PTkNFKHhzLSZndDtkcmFpbl9jb250KTsKJiM0MzsJdTMyIGNhY2hlZF9jb25zLCBuYl9lbnRyaWVzID0gMCwgcmVsZWFzZWQ7CiYjNDM7CXN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTsKJiM0MzsJc3RydWN0IHhza19xdWV1ZSAqcSA9IHhzLSZndDt0eDsKJiM0MzsJdTMyIG5yX2ZyYWdzID0gMDsKJiM0MzsKJiM0MzsJY2FjaGVkX2NvbnMgPSBxLSZndDtjYWNoZWRfY29uczsKIAotCS8qIHRyYWNrIGZpcnN0IGVudHJ5LCBpZiBzdHVtYmxlIHVwb24gKmFueSogaW52YWxpZCBkZXNjcmlwdG9yLCByZXdpbmQKLQkgKiBjdXJyZW50IHBhY2tldCB0aGF0IGNvbnNpc3RzIG9mIGZyYWdzIGFuZCBzdG9wIHRoZSBwcm9jZXNzaW5nCi0JICovCiAJd2hpbGUgKGNhY2hlZF9jb25zICE9IHEtJmd0O2NhY2hlZF9wcm9kICZhbXA7JmFtcDsgbmJfZW50cmllcyAmbHQ7IG1heCkgewogCQlzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqcmluZyA9IChzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqKXEtJmd0O3Jpbmc7CiAJCXUzMiBpZHggPSBjYWNoZWRfY29ucyAmYW1wOyBxLSZndDtyaW5nX21hc2s7CkBAIC0yODIsMjYgJiM0MzsyOTUsNDkgQEAgdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsCiAJCWRlc2NzW25iX2VudHJpZXNdID0gcmluZy0mZ3Q7ZGVzY1tpZHhdOwogCQljYWNoZWRfY29ucyYjNDM7JiM0Mzs7CiAJCXBhcnNlX2Rlc2MocSwgcG9vbCwgJmFtcDtkZXNjc1tuYl9lbnRyaWVzXSwgJmFtcDtwYXJzZWQpOwotCQlpZiAodW5saWtlbHkoIXBhcnNlZC52YWxpZCkpCi0JCQlicmVhazsKJiM0MzsJCWlmICh1bmxpa2VseSghcGFyc2VkLnZhbGlkKSkgewomIzQzOwkJCWlmICghZHJhaW4gJmFtcDsmYW1wOyAhbnJfZnJhZ3MgJmFtcDsmYW1wOyAhcGFyc2VkLm1iKQomIzQzOwkJCQlicmVhazsKJiM0MzsKJiM0MzsJCQlkcmFpbiA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlucl9mcmFncyYjNDM7JiM0Mzs7CiYjNDM7CQluYl9lbnRyaWVzJiM0MzsmIzQzOzsKIAogCQlpZiAobGlrZWx5KCFwYXJzZWQubWIpKSB7Ci0JCQl0b3RhbF9kZXNjcyAmIzQzOz0gKG5yX2ZyYWdzICYjNDM7IDEpOwotCQkJbnJfZnJhZ3MgPSAwOwotCQl9IGVsc2UgewotCQkJbnJfZnJhZ3MmIzQzOyYjNDM7OwotCQkJaWYgKG5yX2ZyYWdzID09IHBvb2wtJmd0O3hkcF96Y19tYXhfc2VncykgewomIzQzOwkJCWlmICh1bmxpa2VseShkcmFpbikpIHsKJiM0MzsJCQkJYmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzOwomIzQzOwkJCQlXUklURV9PTkNFKHhzLSZndDtkcmFpbl9jb250LCBmYWxzZSk7CiAJCQkJbnJfZnJhZ3MgPSAwOwogCQkJCWJyZWFrOwogCQkJfQomIzQzOwomIzQzOwkJCWJhdGNoLnR4X2Rlc2NzICYjNDM7PSBucl9mcmFnczsKJiM0MzsJCQlucl9mcmFncyA9IDA7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobnJfZnJhZ3MgPT0gcG9vbC0mZ3Q7eGRwX3pjX21heF9zZWdzKQomIzQzOwkJCWRyYWluID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnJfZnJhZ3MpIHsKJiM0MzsJCWlmIChkcmFpbikgewomIzQzOwkJCWJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFnczsKJiM0MzsJCQlXUklURV9PTkNFKHhzLSZndDtkcmFpbl9jb250LCB0cnVlKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaWYgKG5iX2VudHJpZXMgPT0gbWF4KQomIzQzOwkJCQliYXRjaC5idWRnZXRfbGltaXRlZCA9IHRydWU7CiYjNDM7CQkJY2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7CiAJCX0KLQkJbmJfZW50cmllcyYjNDM7JiM0Mzs7CiAJfQogCi0JY2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7CiYjNDM7CXJlbGVhc2VkID0gY2FjaGVkX2NvbnMgLSBxLSZndDtjYWNoZWRfY29uczsKIAkvKiBSZWxlYXNlIHZhbGlkIHBsdXMgYW55IGludmFsaWQgZW50cmllcyAqLwotCXhza3FfY29uc19yZWxlYXNlX24ocSwgY2FjaGVkX2NvbnMgLSBxLSZndDtjYWNoZWRfY29ucyk7Ci0JcmV0dXJuIHRvdGFsX2Rlc2NzOwomIzQzOwl4c2txX2NvbnNfcmVsZWFzZV9uKHEsIHJlbGVhc2VkKTsKJiM0MzsJYmF0Y2guY29uc3VtZWRfZGVzY3MgPSByZWxlYXNlZDsKJiM0MzsJcmV0dXJuIGJhdGNoOwogfQogCiAvKiBGdW5jdGlvbnMgZm9yIGNvbnN1bWVycyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKaW5kZXggNmViOTA5NmQwODRjMDEuLjdhYmI0OTM1ZWRmOWFkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKQEAgLTQyNywxNCAmIzQzOzQyNywxNCBAQCBzdGF0aWMgdTMyIHBrdF9uYl9mcmFncyh1MzIgZnJhbWVfc2l6ZSwgc3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW0sIHN0cnVjdCBwawogCX0KIAogCS8qIFNlYXJjaCBmb3IgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGluIHZlcmJhdGltIG1vZGUgKi8KLQlpZiAoIXBrdF9jb250aW51ZXMocGt0LSZndDtvcHRpb25zKSB8fCAhcGt0LSZndDt2YWxpZCkKJiM0MzsJaWYgKCFwa3RfY29udGludWVzKHBrdC0mZ3Q7b3B0aW9ucykpCiAJCXJldHVybiBuYl9mcmFnczsKIAogCW5leHRfZnJhZyA9IHBrdF9zdHJlYW0tJmd0O2N1cnJlbnRfcGt0X25iOwogCXBrdCYjNDM7JiM0Mzs7CiAJd2hpbGUgKG5leHRfZnJhZyYjNDM7JiM0MzsgJmx0OyBwa3Rfc3RyZWFtLSZndDtuYl9wa3RzKSB7CiAJCW5iX2ZyYWdzJiM0MzsmIzQzOzsKLQkJaWYgKCFwa3RfY29udGludWVzKHBrdC0mZ3Q7b3B0aW9ucykgfHwgIXBrdC0mZ3Q7dmFsaWQpCiYjNDM7CQlpZiAoIXBrdF9jb250aW51ZXMocGt0LSZndDtvcHRpb25zKSkKIAkJCWJyZWFrOwogCQlwa3QmIzQzOyYjNDM7OwogCX0KQEAgLTY2NSwxMSAmIzQzOzY2NSwxMSBAQCBzdGF0aWMgc3RydWN0IHBrdF9zdHJlYW0gKl9fcGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgcwogCQkJaWYgKCFmcmFtZS0mZ3Q7dmFsaWQgfHwgIXBrdF9jb250aW51ZXMoZnJhbWUtJmd0O29wdGlvbnMpKQogCQkJCXBheWxvYWQmIzQzOyYjNDM7OwogCQl9IGVsc2UgewotCQkJaWYgKGZyYW1lLSZndDt2YWxpZCkKJiM0MzsJCQlpZiAoZnJhbWUtJmd0O3ZhbGlkKSB7CiAJCQkJbGVuICYjNDM7PSBmcmFtZS0mZ3Q7bGVuOwotCQkJaWYgKGZyYW1lLSZndDt2YWxpZCAmYW1wOyZhbXA7IHBrdF9jb250aW51ZXMoZnJhbWUtJmd0O29wdGlvbnMpKQotCQkJCWNvbnRpbnVlOwotCiYjNDM7CQkJCWlmIChwa3RfY29udGludWVzKGZyYW1lLSZndDtvcHRpb25zKSkKJiM0MzsJCQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJCXBrdC0mZ3Q7cGt0X25iID0gcGt0X25iOwogCQkJcGt0LSZndDtsZW4gPSBsZW47CiAJCQlwa3QtJmd0O3ZhbGlkID0gZnJhbWUtJmd0O3ZhbGlkOwpAQCAtMTIwOSw2ICYjNDM7MTIwOSw3IEBAIHN0YXRpYyBpbnQgX19zZW5kX3BrdHMoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLAogCWZvciAoaSA9IDA7IGkgJmx0OyB4c2stJmd0O2JhdGNoX3NpemU7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBwa3QgKnBrdCA9IHBrdF9zdHJlYW1fZ2V0X25leHRfdHhfcGt0KHBrdF9zdHJlYW0pOwogCQl1MzIgbmJfZnJhZ3NfbGVmdCwgbmJfZnJhZ3MsIGJ5dGVzX3dyaXR0ZW4gPSAwOwomIzQzOwkJc3RydWN0IHBrdCAqZmlyc3RfcGt0ID0gcGt0OwogCiAJCWlmICghcGt0KQogCQkJYnJlYWs7CkBAIC0xMjUzLDYgJiM0MzsxMjU0LDggQEAgc3RhdGljIGludCBfX3NlbmRfcGt0cyhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssCiAJCWlmIChwa3QgJmFtcDsmYW1wOyBwa3QtJmd0O3ZhbGlkKSB7CiAJCQl2YWxpZF9wa3RzJiM0MzsmIzQzOzsKIAkJCXZhbGlkX2ZyYWdzICYjNDM7PSBuYl9mcmFnczsKJiM0MzsJCX0gZWxzZSBpZiAocGt0X3N0cmVhbS0mZ3Q7dmVyYmF0aW0gJmFtcDsmYW1wOyBwa3RfY29udGludWVzKGZpcnN0X3BrdC0mZ3Q7b3B0aW9ucykpIHsKJiM0MzsJCQl2YWxpZF9mcmFncyAmIzQzOz0gbmJfZnJhZ3M7CiAJCX0KIAl9CiAKQEAgLTIwOTksMTMgJiM0MzsyMTAyLDE2IEBAIGludCB0ZXN0YXBwX2ludmFsaWRfZGVzY19tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogCQl7MCwgMCwgMCwgZmFsc2UsIDB9LAogCQkvKiBJbnZhbGlkIGFkZHJlc3MgaW4gdGhlIHNlY29uZCBmcmFtZSAqLwogCQl7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSwKLQkJe3VtZW1fc3osIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7dW1lbV9zeiAqIDIsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sCiAJCS8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi8KIAkJezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiAJCXswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sCiAJCS8qIEludmFsaWQgb3B0aW9ucyBpbiB0aGUgbWlkZGxlICovCiAJCXswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LAogCQl7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYU0tfREVTQ19fSU5WQUxJRF9PUFRJT059LAomIzQzOwkJezAsIE1JTl9QS1RfU0laRSwgMCwgZmFsc2UsIDB9LAogCQkvKiBUcmFuc21pdCAyIGZyYWdzLCByZWNlaXZlIDMgKi8KIAkJezAsIFhTS19VTUVNX19NQVhfRlJBTUVfU0laRSwgMCwgdHJ1ZSwgWERQX1BLVF9DT05URH0sCiAJCXswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIDB9LApAQCAtMjExNyw4ICYjNDM7MjEyMyw4IEBAIGludCB0ZXN0YXBwX2ludmFsaWRfZGVzY19tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogCiAJaWYgKHVtZW0tJmd0O3VuYWxpZ25lZF9tb2RlKSB7CiAJCS8qIENyb3NzaW5nIGEgY2h1bmsgYm91bmRhcnkgYWxsb3dlZCAqLwotCQlwa3RzWzEyXS52YWxpZCA9IHRydWU7Ci0JCXBrdHNbMTNdLnZhbGlkID0gdHJ1ZTsKJiM0MzsJCXBrdHNbMTVdLnZhbGlkID0gdHJ1ZTsKJiM0MzsJCXBrdHNbMTZdLnZhbGlkID0gdHJ1ZTsKIAl9CiAKIAl0ZXN0LSZndDttdHUgPSBNQVhfRVRIX0pVTUJPX1NJWkU7CkBAIC0yMjcwLDcgJiM0MzsyMjc2LDcgQEAgaW50IHRlc3RhcHBfdG9vX21hbnlfZnJhZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKIAkJbWF4X2ZyYWdzICYjNDM7PSAxOwogCX0KIAotCXBrdHMgPSBjYWxsb2MoMiAqIG1heF9mcmFncyAmIzQzOyAyLCBzaXplb2Yoc3RydWN0IHBrdCkpOwomIzQzOwlwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgJiM0MzsgMywgc2l6ZW9mKHN0cnVjdCBwa3QpKTsKIAlpZiAoIXBrdHMpCiAJCXJldHVybiBURVNUX0ZBSUxVUkU7CiAKQEAgLTIyODgsMjQgJiM0MzsyMjk0LDMwIEBAIGludCB0ZXN0YXBwX3Rvb19tYW55X2ZyYWdzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJfQogCXBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDsKIAotCS8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0Ci0JICogY29udGludWVzIG9uIHRoZSBsYXN0IGZyYWcKLQkgKi8KLQlmb3IgKGkgPSBtYXhfZnJhZ3MgJiM0MzsgMTsgaSAmbHQ7IDIgKiBtYXhfZnJhZ3MgJiM0MzsgMTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJLyogQW4gaW52YWxpZCBwYWNrZXQgd2l0aCB0aGUgbWF4ICYjNDM7IDEgYW1vdW50IG9mIGZyYWdzICovCiYjNDM7CWZvciAoaSA9IG1heF9mcmFncyAmIzQzOyAxOyBpICZsdDsgMiAqIG1heF9mcmFncyAmIzQzOyAyOyBpJiM0MzsmIzQzOykgewogCQlwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTsKIAkJcGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDsKLQkJcGt0c1tpXS52YWxpZCA9IGZhbHNlOwomIzQzOwkJcGt0c1tpXS52YWxpZCA9IHRydWU7CiAJfQomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0ub3B0aW9ucyA9IDA7CiAKIAkvKiBWYWxpZCBwYWNrZXQgZm9yIHN5bmNoICovCi0JcGt0c1syICogbWF4X2ZyYWdzICYjNDM7IDFdLmxlbiA9IE1JTl9QS1RfU0laRTsKLQlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0udmFsaWQgPSB0cnVlOwomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMl0ubGVuID0gTUlOX1BLVF9TSVpFOwomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMl0udmFsaWQgPSB0cnVlOwogCi0JaWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMikpIHsKJiM0MzsJaWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMykpIHsKIAkJZnJlZShwa3RzKTsKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAl9CiAKJiM0MzsJLyogVGhlIGdlbmVyYXRlZCBUeCBzdHJlYW0gbXVzdCBrZWVwIHRoZSB0b28tYmlnIHBhY2tldCB2YWxpZCBzbyB0aGF0CiYjNDM7CSAqIF9fc2VuZF9wa3RzKCkgYWNjb3VudHMgaXRzIGRlc2NyaXB0b3JzIGluIG91dHN0YW5kaW5nX3R4LiBUaGUgUngKJiM0MzsJICogc3RyZWFtLCBob3dldmVyLCBtdXN0IG5vdCBleHBlY3QgdGhpcyBwYWNrZXQgb24gdGhlIHdpcmUuCiYjNDM7CSAqLwomIzQzOwl0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrLSZndDtwa3Rfc3RyZWFtLSZndDtwa3RzWzJdLnZhbGlkID0gZmFsc2U7CiYjNDM7CXRlc3QtJmd0O2lmb2JqX3J4LSZndDt4c2stJmd0O3BrdF9zdHJlYW0tJmd0O25iX3ZhbGlkX2VudHJpZXMtLTsKJiM0MzsKIAlyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7CiAJZnJlZShwa3RzKTsKIAlyZXR1cm4gcmV0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAyMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA0MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFGX1hEUCBNdWx0aS1CdWZmZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBBRl9YRFAsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBtdWx0aS1idWZmZXIgcGFja2V0cy4gSXQmIzM5O3MgdG91Y2hpbmcgYSBsb3Qgb2Yga2V5IGFyZWFzOiBgeGRwX3NvY2suaGAsIGB4c2tfYnVmZl9wb29sLmhgLCBhbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZmlsZXMgbGlrZSBgeHNrLmNgLCBgeHNrX2J1ZmZfcG9vbC5jYCwgYW5kIGB4c2tfcXVldWUuaGAsIGFsb25nIHdpdGggaXRzIHNlbGZ0ZXN0cy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWJvdXQgaW1wcm92aW5nIGhvdyB3ZSBkZWFsIHdpdGggaW52YWxpZCBkZXNjcmlwdG9ycyBvciBzaXR1YXRpb25zIHdoZXJlIHdlIGhhdmUgdG9vIG1hbnkgcGFja2V0IGZyYWdtZW50cy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGVyZm9ybWFuY2UgYW5kIGVycm9yIGhhbmRsaW5nIGltcHJvdmVtZW50LiBUaGV54oCZdmUgaW50cm9kdWNlZCBhIGBkcmFpbl9jb250YCBmaWVsZCBpbiBgeGRwX3NvY2tgIGFuZCBhIGB4c2tfdHhfYmF0Y2hgIHN0cnVjdHVyZSB0byBoYW5kbGUgZGVzY3JpcHRvciBiYXRjaGluZyBhbmQgcmVjbGFtYXRpb24sIHdoaWNoIEkgdGhpbmsgaXMgYSBzbWFydCBtb3ZlLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IEFGX1hEUCBpcywgaW4gZmFjdCwgYW4gYWN0aXZlLCBjb3JlIHBpZWNlIG9mIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eS4gWWVwLCB0aGF0JiMzOTtzIGNvcnJlY3QuIEdvb2QsIHdlIGNhbiBmb2N1cyBvdXIgZWZmb3J0cyBoZXJlLiBBbmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcywgZnV6emluZyB0aGlzIHBhdGNoIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIHRvIGVuc3VyZSBpdHMgcm9idXN0bmVzcy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEl0JiMzOTtzIG9idmlvdXNseSBkZXBlbmRlbnQgb24gYENPTkZJR19YRFBfU09DS0VUUz15YCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTD15YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIAoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggaXMgY2xlYXJseSB6ZXJvaW5nIGluIG9uIGEgbnVtYmVyIG9mIGtleSBmdW5jdGlvbnM6IGB4c2tfdHhfY29tcGxldGVkYCwgYHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2tgLCBhIG5ldyBiYXRjaGluZyBmdW5jdGlvbjogYHhza190eF9jb21taXRfYmF0Y2hgLCBzZXZlcmFsIG5ldyBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCB2YXJpYW50cywgdGhlIGB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZGAgYW5kIHNvbWUgY29yZSBoYW5kbGluZyBmdW5jdGlvbnMgZm9yIGRyb3AsIGJ1aWxkaW5nIGFuZCB0cmFuc21pc3Npb24gdmlhIGB4c2tfZHJvcF9za2JgLCBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAsIGB4c2tfYnVpbGRfc2tiYCwgYW5kIGBfX3hza19nZW5lcmljX3htaXRgLCBwbHVzIHNvbWUgc2V0dXAgZnVuY3Rpb25zIGxpa2UgYHhza19iaW5kYCwgYHhwX2FsbG9jX3R4X2Rlc2NzYCwgYHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW1gLCBhbmQgYHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2hgLiBUaGF0JiMzOTtzIHF1aXRlIGEgd2lkZSBpbXBhY3QsIHNvIEkmIzM5O2xsIHdhbnQgdG8gZm9jdXMgc3BlY2lmaWNhbGx5IG9uIHRob3NlIGZ1bmN0aW9ucy4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXBzIHdpbGwgYmUgdG8gZ3JlcCBmb3IgYHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAgYW5kIGBfX3hza19nZW5lcmljX3htaXRgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGJlaW5nIHVzZWQgaW4gdGhlIGNvZGUgYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBwcmltYXJ5IHNjb3BlIG9mIHRoZSBjaGFuZ2VzIGFuZCBndWlkZSBteSBkZWVwIGRpdmUgaW50byB0aGUgcGF0Y2gmIzM5O3MgaW1wbGVtZW50YXRpb24gYW5kIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMjM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYz03OTE9c3RhdGljIHZvaWQgdHNuZXBfeGRwX3htaXRfemMoc3RydWN0IHRzbmVwX3R4ICp0eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtODA0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjgwNTpcdGJhdGNoID0geHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHR4LVx1MDAzZXhza19wb29sLCBkZXNjX2F2YWlsYWJsZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtODA2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYmF0Y2g7IGkmIzQzOyYjNDM7KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi14c2suYz0zOTA9Ym9vbCBkcGFhMl94c2tfdHgoc3RydWN0IGRwYWEyX2V0aF9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi14c2suYy00MDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmM6NDEwOlx0YmF0Y2ggPSB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goY2gtXHUwMDNleHNrX3Bvb2wsIGJ1ZGdldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmMtNDExLVx0aWYgKCFiYXRjaClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz0xNDgyPXN0YXRpYyBib29sIGZlY19lbmV0X3hza194bWl0KHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMTUwNS1cdGJ1ZGdldCA9IG1pbihmcmVlX2JkcywgRkVDX1hTS19UWF9CVURHRVRfTUFYKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjE1MDY6XHRiYXRjaCA9IHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCBidWRnZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMTUwNy1cdGlmICghYmF0Y2gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jPTU3OT1zdGF0aWMgYm9vbCBpNDBlX3htaXRfemMoc3RydWN0IGk0MGVfcmluZyAqeGRwX3JpbmcsIHVuc2lnbmVkIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jLTU4NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYzo1ODU6XHRuYl9wa3RzID0geHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHhkcF9yaW5nLVx1MDAzZXhza19wb29sLCBidWRnZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jLTU4Ni1cdGlmICghbmJfcGt0cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5jPTc5MT1ib29sIGljZV94bWl0X3pjKHN0cnVjdCBpY2VfdHhfcmluZyAqeGRwX3JpbmcsIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4c2tfcG9vbClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5jLTgwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmM6ODA3Olx0bmJfcGt0cyA9IHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCh4c2tfcG9vbCwgYnVkZ2V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmMtODA4LVx0aWYgKCFuYl9wa3RzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfeHNrLmM9NDY1PWJvb2wgaWdiX3htaXRfemMoc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHNrX3Bvb2wpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl94c2suYy00ODAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3hzay5jOjQ4MTpcdG5iX3BrdHMgPSB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goeHNrX3Bvb2wsIGJ1ZGdldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3hzay5jLTQ4Mi1cdGlmICghbmJfcGt0cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suYz0yMjg9dm9pZCBvdHgyX3pjX25hcGlfaGFuZGxlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3hzay5jLTIzNC1cdGJ1ZGdldCA9IG1pbihidWRnZXQsIG90eDJfcmVhZF9mcmVlX3NxZShwZnZmLCBxdWV1ZSkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmM6MjM1Olx0YmF0Y2ggPSB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gocG9vbCwgYnVkZ2V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3hzay5jLTIzNi1cdGlmICghYmF0Y2gpXG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTE0MDU9c3RhdGljIGludCB2aXJ0bmV0X3hza194bWl0X2JhdGNoKHN0cnVjdCBzZW5kX3F1ZXVlICpzcSxcbi0tXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtMTQxNi1cbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYzoxNDE3Olx0bmJfcGt0cyA9IHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCBidWRnZXQpO1xuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTE0MTgtXHRpZiAoIW5iX3BrdHMpXG4tLVxuaW5jbHVkZS9uZXQvbGliZXRoL3hzay5oPTI4NT1saWJldGhfeHNrX3htaXRfZG9fYnVsayhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdm9pZCAqeGRwc3EsIHUzMiBidWRnZXQsXG4tLVxuaW5jbHVkZS9uZXQvbGliZXRoL3hzay5oLTI5OS1cbmluY2x1ZGUvbmV0L2xpYmV0aC94c2suaDozMDA6XHRuID0geHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHBvb2wsIGJ1ZGdldCk7XG5pbmNsdWRlL25ldC9saWJldGgveHNrLmgtMzAxLVx0YnVsayA9IGNvbnRhaW5lcl9vZihcdTAwMjZwb29sLVx1MDAzZXR4X2Rlc2NzWzBdLCB0eXBlb2YoKmJ1bGspLCBkZXNjKTtcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaD0yOD1ib29sIHhza190eF9wZWVrX2Rlc2Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYyk7XG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDoyOTp1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4KTtcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTMwLXZvaWQgeHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuLS1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oPTMwOT1zdGF0aWMgaW5saW5lIGJvb2wgeHNrX3R4X3BlZWtfZGVzYyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC0zMTQtXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDozMTU6c3RhdGljIGlubGluZSB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4KVxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtMzE2LXtcbi0tXG5uZXQveGRwL3hzay5jPTYyMz1zdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxubmV0L3hkcC94c2suYzo2MjQ6X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTYyNS1cdFx0XHRcdCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4X2Rlc2NzKVxuLS1cbm5ldC94ZHAveHNrLmM9NjUwPXhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXG4tLVxubmV0L3hkcC94c2suYy02OTItXG5uZXQveGRwL3hzay5jOjY5MzpcdFx0Y3Vycl9iYXRjaCA9IF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHBvb2wsIHhzLFxubmV0L3hkcC94c2suYy02OTQtXHRcdFx0XHRcdFx0XHQgICAgICBwb29sLVx1MDAzZXR4X2Rlc2NzICYjNDM7IG9mZnNldCxcbi0tXG5uZXQveGRwL3hzay5jLTcyNC1cbm5ldC94ZHAveHNrLmM6NzI1OnUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxubmV0L3hkcC94c2suYy03MjYte1xuLS1cbm5ldC94ZHAveHNrLmMtNzYyLVx0XHR4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoKHBvb2wsIG5iX3BrdHMpIDpcbm5ldC94ZHAveHNrLmM6NzYzOlx0XHRfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcbm5ldC94ZHAveHNrLmMtNzY0LVx0XHRcdFx0XHRcdCBwb29sLVx1MDAzZXR4X2Rlc2NzLFxuLS1cbm5ldC94ZHAveHNrLmMtNzcxLX1cbm5ldC94ZHAveHNrLmM6NzcyOkVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKTtcbm5ldC94ZHAveHNrLmMtNzczLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDIzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzU5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUZfWERQIFRYIFBhdGggTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBBRl9YRFAgdHJhbnNtaXNzaW9uIHBhdGgsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBtdWx0aS1idWZmZXIgcGFja2V0cyBhbmQgaW52YWxpZCBkZXNjcmlwdG9ycy4gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUga2V5IGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGlzIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCB3aGljaCBpcyBwcmV0dHkgZnVuZGFtZW50YWwgc2luY2UgdmFyaW91cyBkcml2ZXJzIOKAkyB0c25lcCwgZHBhYTIsIGZlYywgaTQwZSwgaWNlLCBpZ2IsIG9jdGVvbnR4MiwgdmlydGlvX25ldCwgbGliZXRoLCBhbmQgdGhlIGdlbmVyaWMgWERQIHRyYW5zbWlzc2lvbiB2aWEgYF9feHNrX2dlbmVyaWNfeG1pdGAg4oCTIGFsbCByZWx5IG9uIGl0LgoKRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWdzIGFyZSBlbmFibGVkOiBgWERQX1NPQ0tFVFNgIGFuZCBgQlBGX1NZU0NBTExgIGFyZSB0aGUga2V5IG9uZXMsIHdpdGggYENPTkZJR19YRFBfU09DS0VUU2AgYmVpbmcgdGhlIHByaW1hcnkgZW5hYmxlci4KCk5vdywgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGNvcmUgY2hhbmdlcy4gVGhlIGluaXRpYWwgbGlzdCBpbmNsdWRlZCBhIGJyb2FkZXIgc2V0IG9mIHN5bWJvbHMuIFNpbmNlIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgICppcyogdGhlIG1haW4gVFggZnVuY3Rpb24gZm9yIEFGX1hEUCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBkaWZmZXJlbnQgaW4gdGhlICptb2RpZmllZCogbG9naWMuIFRoZSBuZXcgZnVuY3Rpb25zLCBsaWtlIGB4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoYCBhbmQgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCBhcmUgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIGB4c2tfdHhfY29tbWl0X2JhdGNoYCwgYW5kIGB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZGAgYXJlIGNvbXBsZXRlbHkgbmV3IGVudHJpZXMgaW4gdGhlIGZsb3cuIFRoZSBgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaGAgZnVuY3Rpb24gaXMgYmVpbmcgYWx0ZXJlZC4KClRoZXJlZm9yZSwgbXkgZm9jdXMgc2hvdWxkIGJlIG9uOgoKKiAgIGB4c2tfdHhfY29tbWl0X2JhdGNoYAoqICAgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYAoqICAgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgCiogICBgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRgCiogICBgeHNrX2J1aWxkX3NrYmAKKiAgIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YAoqICAgYF9feHNrX2dlbmVyaWNfeG1pdGAKCkdvb2QsIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgIGlzIGV4cG9ydGVkIGFzIGBFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaClgLCBzbyBpdCBpcyBwdWJsaWNseSBhdmFpbGFibGUuIEkgd2lsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIGRyaXZlcnMgdGhhdCBhcmUgcmVseWluZyBvbiB0aGlzIGNyaXRpY2FsIGZ1bmN0aW9uLCBwYXJ0aWN1bGFybHkgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZXNlIG5ldyBmdW5jdGlvbnMgaW4gdGhlIGRhdGEgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAyMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3hza19nZW5lcmljX3htaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQveGRwX3NvY2suaD00OD1zdHJ1Y3QgeGRwX3NvY2sge1xuLS1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmgtNzctXG5pbmNsdWRlL25ldC94ZHBfc29jay5oOjc4Olx0LyogV2hlbiBfX3hza19nZW5lcmljX3htaXQoKSBtdXN0IHJldHVybiBiZWZvcmUgaXQgc2VlcyB0aGUgRU9QIGRlc2NyaXB0b3IgZm9yIHRoZSBjdXJyZW50XG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTc5LVx0ICogcGFja2V0LCB0aGUgcGFydGlhbGx5IGJ1aWx0IHNrYiBpcyBzYXZlZCBoZXJlIHNvIHRoYXQgcGFja2V0IGJ1aWxkaW5nIGNhbiByZXN1bWUgaW4gbmV4dFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaDo4MDpcdCAqIGNhbGwgb2YgX194c2tfZ2VuZXJpY194bWl0KCkuXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTgxLVx0ICovXG4tLVxubmV0L3hkcC94c2suYz0xMDg3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTE5Mi1cbm5ldC94ZHAveHNrLmM6MTE5MzpzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTExOTQte1xuLS1cbm5ldC94ZHAveHNrLmM9MTMwOD1zdGF0aWMgaW50IHhza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZHAveHNrLmMtMTMxMy1cdHJjdV9yZWFkX3VubG9jaygpO1xubmV0L3hkcC94c2suYzoxMzE0Olx0cmV0ID0gX194c2tfZ2VuZXJpY194bWl0KHNrKTtcbm5ldC94ZHAveHNrLmMtMTMxNS1cdC8qIFJlYXF1aXJlIFJDVSBsb2NrIGJlZm9yZSBnb2luZyBpbnRvIGNvbW1vbiBjb2RlLiAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmM9ODk4PXN0YXRpYyBib29sIGtpY2tfdHhfd2l0aF9jaGVjayhzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIGludCAqcmV0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMtOTEwLVx0ICogc2VuZCBpbiB0aGlzIGNhc2Ugd2hlcmUgaGl0dGluZyB0aGUgbWF4IGJ1ZGdldCBsaW1pdCBpbiB3aGlsZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYzo5MTE6XHQgKiBsb29wIGlzIHRyaWdnZXJlZCBpbiBfX3hza19nZW5lcmljX3htaXQoKS4gUGxlYXNlIG1ha2Ugc3VyZSB0aGF0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jLTkxMi1cdCAqIHRoZSBudW1iZXIgb2YgZGVzY3MgdG8gYmUgc2VudCBpcyBsYXJnZXIgdGhhbiBAbWF4X2J1ZGdldCwgb3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAyMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA4MQoJCQkJCQkJb3V0cHV0OiAyMDYKCQkJCQkJCXRob3VnaHRzOiA0NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQUZfWERQIE11bHRpLUJ1ZmZlciBCdWcgRml4IEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgYnVnIGluIEFGX1hEUCYjMzk7cyBtdWx0aS1idWZmZXIgaGFuZGxpbmcuIE15IGZpcnN0IHRob3VnaHQgaXMsIHRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBlc3BlY2lhbGx5IHdpdGggdGhlIHJpc2Ugb2YgWERQIGFuZCBBRl9YRFAuIFRoaXMgZml4IGludHJvZHVjZXMgYGRyYWluX2NvbnRgLCB3aGljaCBpcyB1c2VkIHRvIHRyYWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgcGFja2V0IGlzIGJlaW5nIGRyYWluZWQgYmVjYXVzZSBvZiBlaXRoZXIgaW52YWxpZCBkZXNjcmlwdG9ycyBvciBleGNlZWRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYWdtZW50cy4gVGhhdCBtYWtlcyBzZW5zZSwgd2UgbmVlZCByb2J1c3QgZXJyb3IgaGFuZGxpbmcgaW4gdGhpcyBzZWN0aW9uLgoKVGhlIGBYRFBfU09DS0VUU2AgY29uZmlnIGlzIHdoYXQgd2UmIzM5O3JlIHRhcmdldGluZyBoZXJlLCB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgZHJpdmluZyB0aGlzIEFGX1hEUCBiZWhhdmlvci4gTGV0IG1lIHNlZS4uLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb246IGB4c2tfdHhfY29tbWl0X2JhdGNoYCwgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCwgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgLCBgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRgLCBgeHNrX2J1aWxkX3NrYmAsIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YCwgYF9feHNrX2dlbmVyaWNfeG1pdGAsIGFuZCBgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaGAuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBgQ09ORklHX1hEUF9TT0NLRVRTYCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWcgZm9yIEFGX1hEUCBpbiB0aGlzIGNvbnRleHQuIFllcCwgdGhhdCYjMzk7cyB0aGUgb25lLiBOb3csIGxldCYjMzk7cyBjaGVjayB0aGUgdmlzaWJpbGl0eSBvZiB0aG9zZSBzeW1ib2xzLiBMb29rcyBsaWtlIGB4c2tfdHhfY29tbWl0X2JhdGNoYCwgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCwgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgLCBgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRgLCBgeHNrX2J1aWxkX3NrYmAsIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YCwgYW5kIGBfX3hza19nZW5lcmljX3htaXRgIGFyZSBhbGwgc3RhdGljLCBhbmQgYHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2hgIGlzIHN0YXRpYyBpbmxpbmUuCgpTbywgd2UgY2FuIG1ha2UgYSBjbGVhbiBsaXN0IG9mIHRoZSBub24taW5saW5lIG9uZXMuCgpPa2F5LCBteSByZWFzb25pbmcgaGVyZSBpczogdGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyB3ZSBoYW5kbGUgbXVsdGktYnVmZmVyIHBhY2tldHMuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhYm91dCBoYW5kbGluZyBwYWNrZXRzIHdpdGggYmFkIGRlc2NyaXB0b3JzIG9yIHRvbyBtYW55IGZyYWdtZW50cy4gVGhpcyBhZmZlY3RzIHRoZSB0cmFuc21pc3Npb24gbG9naWMgb2YgQUZfWERQIGFuZCBpbnRyb2R1Y2VzIG5ldyBkZXNjcmlwdG9yIGJhdGNoaW5nIGFuZCByZWNsYWltaW5nLCB3aGljaCBhbHNvIHRvdWNoZXMgdGhlIGdlbmVyaWMgWERQIHRyYW5zbWl0IHBhdGggZm9yIGRyYWluaW5nIGJhZCBwYWNrZXRzLiBUaGlzIGlzICpjb3JlKiBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHksIGFuZCB0aGlzIGlzIHJlYWNoYWJsZSB2aWEgQUZfWERQIHNvY2tldHMgZnJvbSB1c2Vyc3BhY2UuIFdoaWNoIG1lYW5zLi4uIGZ1enppbmchIExldCYjMzk7cyBnZXQgdGhlIHJlc3VsdHMgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDIzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza190eF9jb21taXRfYmF0Y2gmIzM0OywKICAgICYjMzQ7X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaCYjMzQ7LAogICAgJiMzNDt4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCYjMzQ7LAogICAgJiMzNDt4c2tfYnVpbGRfc2tiJiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2JfemVyb2NvcHkmIzM0OywKICAgICYjMzQ7X194c2tfZ2VuZXJpY194bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgdHJhbnNtaXNzaW9uIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgbXVsdGktYnVmZmVyIHBhY2tldHMgd2l0aCBpbnZhbGlkIGRlc2NyaXB0b3JzIG9yIGV4Y2VlZGluZyB0aGUgbWF4aW11bSBhbGxvd2VkIGZyYWdtZW50cy4gSXQgaW50cm9kdWNlcyBuZXcgYmF0Y2hpbmcgYW5kIHJlY2xhaW1pbmcgbG9naWMgZm9yIGRlc2NyaXB0b3JzLCBhbmQgdXBkYXRlcyB0aGUgZ2VuZXJpYyBYRFAgdHJhbnNtaXQgcGF0aCB0byBkcmFpbiBpbnZhbGlkIHBhY2tldHMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1hEUCBzb2NrZXRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza190eF9jb21taXRfYmF0Y2gmIzM0OywKICAgICYjMzQ7X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaCYjMzQ7LAogICAgJiMzNDt4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCYjMzQ7LAogICAgJiMzNDt4c2tfYnVpbGRfc2tiJiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2JfemVyb2NvcHkmIzM0OywKICAgICYjMzQ7X194c2tfZ2VuZXJpY194bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgdHJhbnNtaXNzaW9uIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgbXVsdGktYnVmZmVyIHBhY2tldHMgd2l0aCBpbnZhbGlkIGRlc2NyaXB0b3JzIG9yIGV4Y2VlZGluZyB0aGUgbWF4aW11bSBhbGxvd2VkIGZyYWdtZW50cy4gSXQgaW50cm9kdWNlcyBuZXcgYmF0Y2hpbmcgYW5kIHJlY2xhaW1pbmcgbG9naWMgZm9yIGRlc2NyaXB0b3JzLCBhbmQgdXBkYXRlcyB0aGUgZ2VuZXJpYyBYRFAgdHJhbnNtaXQgcGF0aCB0byBkcmFpbiBpbnZhbGlkIHBhY2tldHMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1hEUCBzb2NrZXRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTRUMjM6NTY6MjYuNTk5NTQzMzUyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0NjkxMjE0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfdHhfY29tbWl0X2JhdGNoXCIsXG4gICAgXCJfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRcIixcbiAgICBcInhza19idWlsZF9za2JcIixcbiAgICBcInhza19idWlsZF9za2JfemVyb2NvcHlcIixcbiAgICBcIl9feHNrX2dlbmVyaWNfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgdHJhbnNtaXNzaW9uIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgbXVsdGktYnVmZmVyIHBhY2tldHMgd2l0aCBpbnZhbGlkIGRlc2NyaXB0b3JzIG9yIGV4Y2VlZGluZyB0aGUgbWF4aW11bSBhbGxvd2VkIGZyYWdtZW50cy4gSXQgaW50cm9kdWNlcyBuZXcgYmF0Y2hpbmcgYW5kIHJlY2xhaW1pbmcgbG9naWMgZm9yIGRlc2NyaXB0b3JzLCBhbmQgdXBkYXRlcyB0aGUgZ2VuZXJpYyBYRFAgdHJhbnNtaXQgcGF0aCB0byBkcmFpbiBpbnZhbGlkIHBhY2tldHMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1hEUCBzb2NrZXRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQyMzo1NjoyNi41OTk1NDkwNTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTkzOTgxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwOWRiM2U0MDgwMDIxY2E0OGRlNTZiMTdkMzEwZDcyMjMwM2FjYzhjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDE0IDIzOjU2OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmggYi9pbmNsdWRlL25ldC94ZHBfc29jay5oXFxuaW5kZXggZWJhYzYwYTNkOGExN2IuLjhiNTE4NzZlZmJlZDFhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcXG4rKysgYi9pbmNsdWRlL25ldC94ZHBfc29jay5oXFxuQEAgLTgwLDYgKzgwLDcgQEAgc3RydWN0IHhkcF9zb2NrIHtcXG4gXFx0ICogY2FsbCBvZiBfX3hza19nZW5lcmljX3htaXQoKS5cXG4gXFx0ICovXFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdGJvb2wgZHJhaW5fY29udDtcXG4gXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbWFwX2xpc3Q7XFxuIFxcdC8qIFByb3RlY3RzIG1hcF9saXN0ICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaCBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxcbmluZGV4IGNjYjNiMzUwMDAxZjI0Li4yYmIxZDEyMmIxYmM2YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcXG4rKysgYi9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcXG5AQCAtNzgsNiArNzgsOSBAQCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCB7XFxuIFxcdHUzMiBjaHVua19zaXplO1xcbiBcXHR1MzIgY2h1bmtfc2hpZnQ7XFxuIFxcdHUzMiBmcmFtZV9sZW47XFxuK1xcdHUzMiB0eF9kZXNjc19uZW50cmllcztcXG4rXFx0dTMyIHJlY2xhaW1fZGVzY3M7XFxuK1xcdHUzMiB0eF96Y19wZW5kaW5nX2Rlc2NzO1xcbiBcXHR1MzIgeGRwX3pjX21heF9zZWdzO1xcbiBcXHR1OCB0eF9tZXRhZGF0YV9sZW47IC8qIGluaGVyaXRlZCBmcm9tIHVtZW0gKi9cXG4gXFx0dTggY2FjaGVkX25lZWRfd2FrZXVwO1xcbkBAIC0xMDIsMTIgKzEwNSwxNCBAQCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCB7XFxuIFxcbiAvKiBBRl9YRFAgY29yZS4gKi9cXG4gc3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHhkcF91bWVtICp1bWVtKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHhkcF91bWVtICp1bWVtLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR1MzIgbWF4X3NlZ3MpO1xcbiBpbnQgeHBfYXNzaWduX2RldihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0ICB1MTYgcXVldWVfaWQsIHUxNiBmbGFncyk7XFxuIGludCB4cF9hc3NpZ25fZGV2X3NoYXJlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp1bWVtX3hzLFxcbiBcXHRcXHRcXHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHF1ZXVlX2lkKTtcXG4taW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKTtcXG4raW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbitcXHRcXHQgICAgICB1MzIgbWF4X3NlZ3MpO1xcbiB2b2lkIHhwX2Rlc3Ryb3koc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xcbiB2b2lkIHhwX2dldF9wb29sKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcXG4gYm9vbCB4cF9wdXRfcG9vbChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XFxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXFxuaW5kZXggYjk3MGYzMGVhOWI5ZDguLjI5MDlhMGVjNjgzNzMxIDEwMDY0NFxcbi0tLSBhL25ldC94ZHAveHNrLmNcXG4rKysgYi9uZXQveGRwL3hzay5jXFxuQEAgLTQ5OSw2ICs0OTksMjMgQEAgdm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdClcXG4gXFxuIHZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXFxuIHtcXG4rXFx0dTMyIHJlY2xhaW1fZGVzY3MgPSBSRUFEX09OQ0UocG9vbC1cXHUwMDNlcmVjbGFpbV9kZXNjcyk7XFxuK1xcbitcXHRpZiAodW5saWtlbHkocmVjbGFpbV9kZXNjcykpIHtcXG4rXFx0XFx0dTMyIHBlbmRpbmdfZGVzY3MgPSBSRUFEX09OQ0UocG9vbC1cXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyk7XFxuK1xcbitcXHRcXHRpZiAobmJfZW50cmllcyBcXHUwMDNjIHBlbmRpbmdfZGVzY3MpIHtcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShwb29sLVxcdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLFxcbitcXHRcXHRcXHRcXHQgICBwZW5kaW5nX2Rlc2NzIC0gbmJfZW50cmllcyk7XFxuK1xcdFxcdFxcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVxcdTAwM2VjcSwgbmJfZW50cmllcyk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0V1JJVEVfT05DRShwb29sLVxcdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLCAwKTtcXG4rXFx0XFx0bmJfZW50cmllcyArPSByZWNsYWltX2Rlc2NzO1xcbitcXHRcXHRXUklURV9PTkNFKHBvb2wtXFx1MDAzZXJlY2xhaW1fZGVzY3MsIDApO1xcbitcXHR9XFxuK1xcbiBcXHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cXHUwMDNlY3EsIG5iX2VudHJpZXMpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XFxuQEAgLTU3NCwyNCArNTkxLDE2MiBAQCBzdGF0aWMgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2soc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZW50clxcbiBcXHRyZXR1cm4gbmJfcGt0cztcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpXFxuK3tcXG4rXFx0dTMyIG5iX2Rlc2NzID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGJhdGNoKTtcXG4rXFx0dTMyIGNxX2NhY2hlZF9wcm9kO1xcbitcXG4rXFx0aWYgKCFuYl9kZXNjcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y3FfY2FjaGVkX3Byb2QgPSBwb29sLVxcdTAwM2VjcS1cXHUwMDNlY2FjaGVkX3Byb2Q7XFxuK1xcdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXFx1MDAzZWNxLCBwb29sLVxcdTAwM2V0eF9kZXNjcywgbmJfZGVzY3MpO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGJhdGNoLVxcdTAwM2VyZWNsYWltX2Rlc2NzKSkge1xcbitcXHRcXHR1MzIgY3FfcGVuZGluZ19kZXNjcztcXG4rXFxuK1xcdFxcdC8qIENRIGlzIHBvc2l0aW9uYWwuIERlc2NyaXB0b3JzIGFscmVhZHkgd3JpdHRlbiBidXQgbm90XFxuK1xcdFxcdCAqIHN1Ym1pdHRlZCBtdXN0IGNvbXBsZXRlIGJlZm9yZSBhbnkgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzXFxuK1xcdFxcdCAqIGFwcGVuZGVkIGJlbG93LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Y3FfcGVuZGluZ19kZXNjcyA9IGNxX2NhY2hlZF9wcm9kIC0geHNrcV9nZXRfcHJvZChwb29sLVxcdTAwM2VjcSk7XFxuK1xcbitcXHRcXHRXUklURV9PTkNFKHBvb2wtXFx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MsXFxuK1xcdFxcdFxcdCAgIGJhdGNoLVxcdTAwM2V0eF9kZXNjcyArIGNxX3BlbmRpbmdfZGVzY3MpO1xcbitcXHRcXHRXUklURV9PTkNFKHBvb2wtXFx1MDAzZXJlY2xhaW1fZGVzY3MsIGJhdGNoLVxcdTAwM2VyZWNsYWltX2Rlc2NzKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFwb29sLVxcdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzKSlcXG4rXFx0XFx0XFx0eHNrX3R4X2NvbXBsZXRlZChwb29sLCAwKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxcbitfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXhfZGVzY3MpXFxuK3tcXG4rXFx0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xcbitcXHR1MzIgZW50cmllcztcXG4rXFxuK1xcdGVudHJpZXMgPSB4c2txX2NvbnNfbmJfZW50cmllcyh4cy1cXHUwMDNldHgsIG1heF9kZXNjcyk7XFxuK1xcdGlmICghZW50cmllcylcXG4rXFx0XFx0cmV0dXJuIGJhdGNoO1xcbitcXG4rXFx0YmF0Y2ggPSB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHhzLCBwb29sLCBkZXNjcywgbWF4X2Rlc2NzKTtcXG4rXFx0aWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNmJhdGNoKSkge1xcbitcXHRcXHR4cy1cXHUwMDNldHgtXFx1MDAzZXF1ZXVlX2VtcHR5X2Rlc2NzKys7XFxuK1xcdFxcdGlmIChiYXRjaC5jb25zdW1lZF9kZXNjcykge1xcbitcXHRcXHRcXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVxcdTAwM2V0eCk7XFxuK1xcdFxcdFxcdHhzLVxcdTAwM2Vzay5za193cml0ZV9zcGFjZShcXHUwMDI2eHMtXFx1MDAzZXNrKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gYmF0Y2g7XFxuK1xcdH1cXG4rXFxuK1xcdF9feHNrcV9jb25zX3JlbGVhc2UoeHMtXFx1MDAzZXR4KTtcXG4rXFx0eHMtXFx1MDAzZXNrLnNrX3dyaXRlX3NwYWNlKFxcdTAwMjZ4cy1cXHUwMDNlc2spO1xcbitcXHRyZXR1cm4gYmF0Y2g7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoXFxuK3hza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXFxuK3tcXG4rXFx0dTMyIGNxX2Rlc2NzX2JlZm9yZSwgY3FfZGVzY3NfYWZ0ZXI7XFxuK1xcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggc3VtX2JhdGNoID0ge307XFxuK1xcdGJvb2wgYnVkZ2V0X2V4aGF1c3RlZDtcXG4rXFx0dTMyIHBlcl9zb2NrZXRfYnVkZ2V0O1xcbitcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xcbitcXG4rXFx0LyogVGhlIGZhaXJuZXNzIHF1b3RhIG11c3QgYWxsb3cgb25lIG1heGltdW0tc2l6ZWQgdmFsaWQgcGFja2V0LiAqL1xcbitcXHRwZXJfc29ja2V0X2J1ZGdldCA9IG1heF90KHUzMiwgTUFYX1BFUl9TT0NLRVRfQlVER0VULFxcbitcXHRcXHRcXHRcXHQgIHBvb2wtXFx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XFxuK1xcbithZ2FpbjpcXG4rXFx0YnVkZ2V0X2V4aGF1c3RlZCA9IGZhbHNlO1xcbitcXHRjcV9kZXNjc19iZWZvcmUgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNnN1bV9iYXRjaCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCBcXHUwMDI2cG9vbC1cXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpIHtcXG4rXFx0XFx0dTMyIGJ1ZGdldCwgYnVkZ2V0X2xlZnQsIG9mZnNldCwgcmVtYWluaW5nO1xcbitcXHRcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGN1cnJfYmF0Y2g7XFxuK1xcbitcXHRcXHQvKiBPbmNlIHJlY2xhaW0tb25seSBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gYXBwZW5kZWQgdG8gdGhlIENRXFxuK1xcdFxcdCAqIGFkZHJlc3MgYXJlYSwgZG8gbm90IGFwcGVuZCBkcml2ZXItdmlzaWJsZSBUeCBkZXNjcmlwdG9yc1xcbitcXHRcXHQgKiBmcm9tIGFub3RoZXIgc29ja2V0IGFmdGVyIHRoZW0uIHhza190eF9jb21wbGV0ZWQoKSByZWxpZXMgb25cXG4rXFx0XFx0ICogYWxsIGRyaXZlci12aXNpYmxlIGRlc2NyaXB0b3JzIHByZWNlZGluZyBhbGwgcmVjbGFpbS1vbmx5XFxuK1xcdFxcdCAqIGRlc2NyaXB0b3JzIGluIENRIG9yZGVyLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIGJlIGdlbnRsZSB3aGVuIHBsYXlpbmcgd2l0aCBwb29sLVxcdTAwM2V0eF9kZXNjcyAqL1xcbitcXHRcXHRvZmZzZXQgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNnN1bV9iYXRjaCk7XFxuK1xcdFxcdGlmIChvZmZzZXQgXFx1MDAzZT0gbWF4X2Rlc2NzKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGlmICh4cy1cXHUwMDNldHhfYnVkZ2V0X3NwZW50IFxcdTAwM2U9IHBlcl9zb2NrZXRfYnVkZ2V0KSB7XFxuK1xcdFxcdFxcdGlmICh4c2txX2NvbnNfbmJfZW50cmllcyh4cy1cXHUwMDNldHgsIDEpKVxcbitcXHRcXHRcXHRcXHRidWRnZXRfZXhoYXVzdGVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGJ1ZGdldF9sZWZ0ID0gcGVyX3NvY2tldF9idWRnZXQgLSB4cy1cXHUwMDNldHhfYnVkZ2V0X3NwZW50O1xcbitcXHRcXHRyZW1haW5pbmcgPSBtYXhfZGVzY3MgLSBvZmZzZXQ7XFxuK1xcdFxcdGJ1ZGdldCA9IG1pbihyZW1haW5pbmcsIGJ1ZGdldF9sZWZ0KTtcXG4rXFxuK1xcdFxcdGN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcG9vbC1cXHUwMDNldHhfZGVzY3MgKyBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGJ1ZGdldCk7XFxuK1xcdFxcdGlmICgheHNrX3R4X2JhdGNoX2NxX2Rlc2NzKFxcdTAwMjZjdXJyX2JhdGNoKSkge1xcbitcXHRcXHRcXHRpZiAoY3Vycl9iYXRjaC5idWRnZXRfbGltaXRlZCBcXHUwMDI2XFx1MDAyNiBidWRnZXRfbGVmdCBcXHUwMDNjIHJlbWFpbmluZylcXG4rXFx0XFx0XFx0XFx0YnVkZ2V0X2V4aGF1c3RlZCA9IHRydWU7XFxuK1xcdFxcdFxcdHhzLVxcdTAwM2V0eF9idWRnZXRfc3BlbnQgKz0gY3Vycl9iYXRjaC5jb25zdW1lZF9kZXNjcztcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHhzLVxcdTAwM2V0eF9idWRnZXRfc3BlbnQgKz0gY3Vycl9iYXRjaC5jb25zdW1lZF9kZXNjcztcXG4rXFx0XFx0c3VtX2JhdGNoLnR4X2Rlc2NzICs9IGN1cnJfYmF0Y2gudHhfZGVzY3M7XFxuK1xcdFxcdHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzICs9IGN1cnJfYmF0Y2gucmVjbGFpbV9kZXNjcztcXG4rXFx0fVxcbitcXG4rXFx0Y3FfZGVzY3NfYWZ0ZXIgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNnN1bV9iYXRjaCk7XFxuK1xcbitcXHRpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgfHwgY3FfZGVzY3NfYWZ0ZXIgXFx1MDAzZT0gbWF4X2Rlc2NzKVxcbitcXHRcXHRyZXR1cm4gc3VtX2JhdGNoO1xcbitcXG4rXFx0LyogQ29udGludWUgZmlsbGluZyB0aGUgYmF0Y2ggd2hpbGUgdGhpcyBwYXNzIG1hZGUgcHJvZ3Jlc3MgKi9cXG4rXFx0aWYgKGNxX2Rlc2NzX2JlZm9yZSAhPSBjcV9kZXNjc19hZnRlcilcXG4rXFx0XFx0Z290byBhZ2FpbjtcXG4rXFxuK1xcdGlmICghYnVkZ2V0X2V4aGF1c3RlZClcXG4rXFx0XFx0cmV0dXJuIHN1bV9iYXRjaDtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCBcXHUwMDI2cG9vbC1cXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpXFxuK1xcdFxcdHhzLVxcdTAwM2V0eF9idWRnZXRfc3BlbnQgPSAwO1xcbitcXHRnb3RvIGFnYWluO1xcbit9XFxuK1xcbiB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcXG4ge1xcbitcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307XFxuIFxcdHN0cnVjdCB4ZHBfc29jayAqeHM7XFxuK1xcdGJvb2wgdW1lbV9zaGFyZWQ7XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdGlmICghbGlzdF9pc19zaW5ndWxhcihcXHUwMDI2cG9vbC1cXHUwMDNleHNrX3R4X2xpc3QpKSB7XFxuLVxcdFxcdC8qIEZhbGxiYWNrIHRvIHRoZSBub24tYmF0Y2hlZCB2ZXJzaW9uICovXFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRcXHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcXG4tXFx0fVxcbitcXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHBvb2wtXFx1MDAzZXJlY2xhaW1fZGVzY3MpKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHR4cyA9IGxpc3RfZmlyc3Rfb3JfbnVsbF9yY3UoXFx1MDAyNnBvb2wtXFx1MDAzZXhza190eF9saXN0LCBzdHJ1Y3QgeGRwX3NvY2ssIHR4X2xpc3QpO1xcbi1cXHRpZiAoIXhzKSB7XFxuLVxcdFxcdG5iX3BrdHMgPSAwO1xcbitcXHR4cyA9IGxpc3RfZmlyc3Rfb3JfbnVsbF9yY3UoXFx1MDAyNnBvb2wtXFx1MDAzZXhza190eF9saXN0LCBzdHJ1Y3QgeGRwX3NvY2ssXFxuK1xcdFxcdFxcdFxcdCAgICB0eF9saXN0KTtcXG4rXFx0aWYgKCF4cylcXG4gXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4gXFxuLVxcdG5iX3BrdHMgPSB4c2txX2NvbnNfbmJfZW50cmllcyh4cy1cXHUwMDNldHgsIG5iX3BrdHMpO1xcbitcXHRuYl9wa3RzID0gbWluKG5iX3BrdHMsIHBvb2wtXFx1MDAzZXR4X2Rlc2NzX25lbnRyaWVzKTtcXG4rXFx0aWYgKCFuYl9wa3RzKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHVtZW1fc2hhcmVkID0gIWxpc3RfaXNfc2luZ3VsYXIoXFx1MDAyNnBvb2wtXFx1MDAzZXhza190eF9saXN0KTtcXG4rXFxuK1xcdGlmICh1bWVtX3NoYXJlZCBcXHUwMDI2XFx1MDAyNiAhKHBvb2wtXFx1MDAzZXVtZW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWERQX1VNRU1fU0dfRkxBRykpIHtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHBvb2wsIG5iX3BrdHMpO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBUaGlzIGlzIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtIGZvciB0aGUgVHggcGF0aC4gVHJ5IHRvXFxuIFxcdCAqIHJlc2VydmUgc3BhY2UgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgZm9yIGFsbCBwYWNrZXRzLCBidXRcXG5AQCAtNjAzLDE5ICs3NTgsMTYgQEAgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX3BrdHMpXFxuIFxcdGlmICghbmJfcGt0cylcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRuYl9wa3RzID0geHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaCh4cy1cXHUwMDNldHgsIHBvb2wsIG5iX3BrdHMpO1xcbi1cXHRpZiAoIW5iX3BrdHMpIHtcXG4tXFx0XFx0eHMtXFx1MDAzZXR4LVxcdTAwM2VxdWV1ZV9lbXB0eV9kZXNjcysrO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0fVxcbi1cXG4tXFx0X194c2txX2NvbnNfcmVsZWFzZSh4cy1cXHUwMDNldHgpO1xcbi1cXHR4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLVxcdTAwM2VjcSwgcG9vbC1cXHUwMDNldHhfZGVzY3MsIG5iX3BrdHMpO1xcbi1cXHR4cy1cXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXFx1MDAyNnhzLVxcdTAwM2Vzayk7XFxuK1xcdGJhdGNoID0gdW1lbV9zaGFyZWQgP1xcbitcXHRcXHR4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoKHBvb2wsIG5iX3BrdHMpIDpcXG4rXFx0XFx0X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gocG9vbCwgeHMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBwb29sLVxcdTAwM2V0eF9kZXNjcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IG5iX3BrdHMpO1xcbitcXHR4c2tfdHhfY29tbWl0X2JhdGNoKHBvb2wsIFxcdTAwMjZiYXRjaCk7XFxuIFxcbiBvdXQ6XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRyZXR1cm4gbmJfcGt0cztcXG4rXFx0cmV0dXJuIGJhdGNoLnR4X2Rlc2NzO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKTtcXG4gXFxuQEAgLTczNyw2ICs4ODksMTkgQEAgc3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cG9vbC1cXHUwMDNlY3FfcHJvZF9sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHR1MzIgaWR4O1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnBvb2wtXFx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xcbitcXHRpZHggPSB4c2txX2dldF9wcm9kKHBvb2wtXFx1MDAzZWNxKTtcXG4rXFx0eHNrcV9wcm9kX3dyaXRlX2FkZHIocG9vbC1cXHUwMDNlY3EsIGlkeCwgZGVzYy1cXHUwMDNlYWRkcik7XFxuK1xcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVxcdTAwM2VjcSwgMSk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBvb2wtXFx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB4c2tfY3FfY2FuY2VsX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG4pXFxuIHtcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZwb29sLVxcdTAwM2VjcS1cXHUwMDNlY3FfY2FjaGVkX3Byb2RfbG9jayk7XFxuQEAgLTc5NCw4ICs5NTksMTEgQEAgc3RhdGljIHZvaWQgeHNrX2NvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBzdGF0aWMgdm9pZCB4c2tfZHJvcF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHR4ZHBfc2soc2tiLVxcdTAwM2VzayktXFx1MDAzZXR4LVxcdTAwM2VpbnZhbGlkX2Rlc2NzICs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcXG4tXFx0eHNrX2NvbnN1bWVfc2tiKHNrYik7XFxuK1xcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2tiLVxcdTAwM2Vzayk7XFxuK1xcbitcXHR4cy1cXHUwMDNldHgtXFx1MDAzZWludmFsaWRfZGVzY3MgKz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xcbitcXHRjb25zdW1lX3NrYihza2IpO1xcbitcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcXG5AQCAtODc3LDcgKzEwNDUsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbiBcXHRcXHQvKiBpbiBjYXNlIG9mIC1FT1ZFUkZMT1cgdGhhdCBjb3VsZCBoYXBwZW4gYmVsb3csXFxuLVxcdFxcdCAqIHhza19jb25zdW1lX3NrYigpIHdpbGwgcmVsZWFzZSB0aGlzIG5vZGUgYXMgd2hvbGUgc2tiXFxuK1xcdFxcdCAqIHhza19kcm9wX3NrYigpIHdpbGwgcmVsZWFzZSB0aGlzIG5vZGUgYXMgd2hvbGUgc2tiXFxuIFxcdFxcdCAqIHdvdWxkIGJlIGRyb3BwZWQsIHdoaWNoIGltcGxpZXMgZnJlZWluZyBhbGwgbGlzdCBlbGVtZW50c1xcbiBcXHRcXHQgKi9cXG4gXFx0XFx0eHNrX2FkZHItXFx1MDAzZWFkZHJzW3hza19hZGRyLVxcdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cXHUwMDNlYWRkcjtcXG5AQCAtOTY5LDYgKzExMzcsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gXFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0eHNrX2FkZHItXFx1MDAzZWFkZHJzW3hza19hZGRyLVxcdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cXHUwMDNlYWRkcjtcXG4rXFxuIFxcdFxcdFxcdGlmICh1bmxpa2VseShucl9mcmFncyA9PSAoTUFYX1NLQl9GUkFHUyAtIDEpIFxcdTAwMjZcXHUwMDI2IHhwX21iX2Rlc2MoZGVzYykpKSB7XFxuIFxcdFxcdFxcdFxcdGVyciA9IC1FT1ZFUkZMT1c7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuQEAgLTk4Niw4ICsxMTU2LDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuIFxcbiBcXHRcXHRcXHRza2JfYWRkX3J4X2ZyYWcoc2tiLCBucl9mcmFncywgcGFnZSwgMCwgbGVuLCBQQUdFX1NJWkUpO1xcbiBcXHRcXHRcXHRyZWZjb3VudF9hZGQoUEFHRV9TSVpFLCBcXHUwMDI2eHMtXFx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xcbi1cXG4tXFx0XFx0XFx0eHNrX2FkZHItXFx1MDAzZWFkZHJzW3hza19hZGRyLVxcdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cXHUwMDNlYWRkcjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC0xMDYwLDExICsxMjI4LDIyIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmICh1bmxpa2VseSh4cy1cXHUwMDNlZHJhaW5fY29udCkpIHtcXG4rXFx0XFx0XFx0eHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoeHMtXFx1MDAzZXBvb2wsIFxcdTAwMjZkZXNjKTtcXG4rXFxuK1xcdFxcdFxcdHhzLVxcdTAwM2V0eC1cXHUwMDNlaW52YWxpZF9kZXNjcysrO1xcbitcXHRcXHRcXHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cXHUwMDNldHgpO1xcbitcXHRcXHRcXHR4cy1cXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXFx1MDAyNmRlc2MpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXFx1MDAyNmRlc2MpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4gXFx0XFx0XFx0ZXJyID0gUFRSX0VSUihza2IpO1xcbiBcXHRcXHRcXHRpZiAoZXJyICE9IC1FT1ZFUkZMT1cpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRpZiAoeHBfbWJfZGVzYyhcXHUwMDI2ZGVzYykpXFxuK1xcdFxcdFxcdFxcdHhzLVxcdTAwM2VkcmFpbl9jb250ID0gdHJ1ZTtcXG4gXFx0XFx0XFx0ZXJyID0gMDtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG5AQCAtMTA5OCw5ICsxMjc3LDI0IEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHhza3FfaGFzX2Rlc2NzKHhzLVxcdTAwM2V0eCkpIHtcXG4rXFx0XFx0Ym9vbCByZWNsYWltX2Rlc2MgPSB4cy1cXHUwMDNlc2tiIHx8IHhzLVxcdTAwM2VkcmFpbl9jb250O1xcbitcXG4rXFx0XFx0aWYgKHJlY2xhaW1fZGVzYykge1xcbitcXHRcXHRcXHRlcnIgPSB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoeHMtXFx1MDAzZXBvb2wpO1xcbitcXHRcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdFxcdGVyciA9IC1FQUdBSU47XFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGlmICh4cy1cXHUwMDNlc2tiKVxcbiBcXHRcXHRcXHR4c2tfZHJvcF9za2IoeHMtXFx1MDAzZXNrYik7XFxuK1xcbitcXHRcXHRpZiAocmVjbGFpbV9kZXNjKVxcbitcXHRcXHRcXHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cXHUwMDNlcG9vbCwgXFx1MDAyNmRlc2MpO1xcbitcXG4gXFx0XFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXFx1MDAzZXR4KTtcXG4rXFx0XFx0eHMtXFx1MDAzZWRyYWluX2NvbnQgPSB4cF9tYl9kZXNjKFxcdTAwMjZkZXNjKTtcXG4gXFx0fVxcbiBcXG4gb3V0OlxcbkBAIC0xNDgzLDcgKzE2NzcsOCBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkclxcbiBcXHRcXHRcXHQgKiBhbmQvb3IgZGV2aWNlLlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0eHMtXFx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHVtZW1feHMtXFx1MDAzZXVtZW0pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHVtZW1feHMtXFx1MDAzZXVtZW0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZGV2LVxcdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xcbiBcXHRcXHRcXHRpZiAoIXhzLVxcdTAwM2Vwb29sKSB7XFxuIFxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdFxcdFxcdHNvY2tmZF9wdXQoc29jayk7XFxuQEAgLTE1MTUsNyArMTcxMCw4IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXFxuIFxcdFxcdFxcdCAqIHV0aWxpemVzXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRpZiAoeHMtXFx1MDAzZXR4IFxcdTAwMjZcXHUwMDI2ICF4cy1cXHUwMDNlcG9vbC1cXHUwMDNldHhfZGVzY3MpIHtcXG4tXFx0XFx0XFx0XFx0ZXJyID0geHBfYWxsb2NfdHhfZGVzY3MoeHMtXFx1MDAzZXBvb2wsIHhzKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0geHBfYWxsb2NfdHhfZGVzY3MoeHMtXFx1MDAzZXBvb2wsIHhzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XFxuIFxcdFxcdFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0XFx0XFx0eHBfcHV0X3Bvb2woeHMtXFx1MDAzZXBvb2wpO1xcbiBcXHRcXHRcXHRcXHRcXHR4cy1cXHUwMDNlcG9vbCA9IE5VTEw7XFxuQEAgLTE1MzMsNyArMTcyOSw5IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LyogVGhpcyB4c2sgaGFzIGl0cyBvd24gdW1lbS4gKi9cXG4tXFx0XFx0eHMtXFx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLCB4cy1cXHUwMDNldW1lbSk7XFxuK1xcdFxcdHhzLVxcdTAwM2Vwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cywgeHMtXFx1MDAzZXVtZW0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgZGV2LVxcdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xcbitcXG4gXFx0XFx0aWYgKCF4cy1cXHUwMDNlcG9vbCkge1xcbiBcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jIGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcXG5pbmRleCAxZjI4YTk2NDE1NzFlNC4uYTQwODk0ODBiMjJiMjUgMTAwNjQ0XFxuLS0tIGEvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcXG4rKysgYi9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xcbkBAIC00MiwxNyArNDIsMjIgQEAgdm9pZCB4cF9kZXN0cm95KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxcbiBcXHRrdmZyZWUocG9vbCk7XFxuIH1cXG4gXFxuLWludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cylcXG4raW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbitcXHRcXHQgICAgICB1MzIgbWF4X3NlZ3MpXFxuIHtcXG4tXFx0cG9vbC1cXHUwMDNldHhfZGVzY3MgPSBrdnphbGxvY19vYmpzKCpwb29sLVxcdTAwM2V0eF9kZXNjcywgeHMtXFx1MDAzZXR4LVxcdTAwM2VuZW50cmllcyk7XFxuK1xcdHUzMiBuZW50cmllcyA9IG1heCh4cy1cXHUwMDNldHgtXFx1MDAzZW5lbnRyaWVzLCBtYXhfc2Vncyk7XFxuK1xcbitcXHRwb29sLVxcdTAwM2V0eF9kZXNjcyA9IGt2emFsbG9jX29ianMoKnBvb2wtXFx1MDAzZXR4X2Rlc2NzLCBuZW50cmllcyk7XFxuIFxcdGlmICghcG9vbC1cXHUwMDNldHhfZGVzY3MpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0cG9vbC1cXHUwMDNldHhfZGVzY3NfbmVudHJpZXMgPSBuZW50cmllcztcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB4ZHBfdW1lbSAqdW1lbSlcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHhkcF91bWVtICp1bWVtLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR1MzIgbWF4X3NlZ3MpXFxuIHtcXG4gXFx0Ym9vbCB1bmFsaWduZWQgPSB1bWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhEUF9VTUVNX1VOQUxJR05FRF9DSFVOS19GTEFHO1xcbiBcXHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbDtcXG5AQCAtNjksNyArNzQsNyBAQCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdGlmICh4cy1cXHUwMDNldHgpXFxuLVxcdFxcdGlmICh4cF9hbGxvY190eF9kZXNjcyhwb29sLCB4cykpXFxuK1xcdFxcdGlmICh4cF9hbGxvY190eF9kZXNjcyhwb29sLCB4cywgbWF4X3NlZ3MpKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdHBvb2wtXFx1MDAzZWNodW5rX21hc2sgPSB+KCh1NjQpdW1lbS1cXHUwMDNlY2h1bmtfc2l6ZSAtIDEpO1xcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19xdWV1ZS5oIGIvbmV0L3hkcC94c2tfcXVldWUuaFxcbmluZGV4IDNlM2ZiYjczZDIzZTJmLi5hMTVmZjE5MjlkYjYyMyAxMDA2NDRcXG4tLS0gYS9uZXQveGRwL3hza19xdWV1ZS5oXFxuKysrIGIvbmV0L3hkcC94c2tfcXVldWUuaFxcbkBAIC01OCw2ICs1OCwxOCBAQCBzdHJ1Y3QgcGFyc2VkX2Rlc2Mge1xcbiBcXHR1MzIgdmFsaWQ7XFxuIH07XFxuIFxcbitzdHJ1Y3QgeHNrX3R4X2JhdGNoIHtcXG4rXFx0dTMyIHR4X2Rlc2NzO1xcbitcXHR1MzIgcmVjbGFpbV9kZXNjcztcXG4rXFx0dTMyIGNvbnN1bWVkX2Rlc2NzO1xcbitcXHRib29sIGJ1ZGdldF9saW1pdGVkO1xcbit9O1xcbitcXG4rc3RhdGljIGlubGluZSB1MzIgeHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGNvbnN0IHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoKVxcbit7XFxuK1xcdHJldHVybiBiYXRjaC1cXHUwMDNldHhfZGVzY3MgKyBiYXRjaC1cXHUwMDNlcmVjbGFpbV9kZXNjcztcXG4rfVxcbitcXG4gLyogVGhlIHN0cnVjdHVyZSBvZiB0aGUgc2hhcmVkIHN0YXRlIG9mIHRoZSByaW5ncyBhcmUgYSBzaW1wbGVcXG4gICogY2lyY3VsYXIgYnVmZmVyLCBhcyBvdXRsaW5lZCBpblxcbiAgKiBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL2NpcmN1bGFyLWJ1ZmZlcnMucnN0LiBGb3IgdGhlIFJ4IGFuZFxcbkBAIC0yNjMsMTcgKzI3NSwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFyc2VfZGVzYyhzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4gXFx0cGFyc2VkLVxcdTAwM2VtYiA9IHhwX21iX2Rlc2MoZGVzYyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmVcXG4tdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuLVxcdFxcdFxcdCAgICAgIHUzMiBtYXgpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhza190eF9iYXRjaFxcbit4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbitcXHRcXHRcXHQgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXgpXFxuIHtcXG4tXFx0dTMyIGNhY2hlZF9jb25zID0gcS1cXHUwMDNlY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwO1xcbi1cXHRzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzID0gcG9vbC1cXHUwMDNldHhfZGVzY3M7XFxuLVxcdHUzMiB0b3RhbF9kZXNjcyA9IDAsIG5yX2ZyYWdzID0gMDtcXG4rXFx0Ym9vbCBkcmFpbiA9IFJFQURfT05DRSh4cy1cXHUwMDNlZHJhaW5fY29udCk7XFxuK1xcdHUzMiBjYWNoZWRfY29ucywgbmJfZW50cmllcyA9IDAsIHJlbGVhc2VkO1xcbitcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307XFxuK1xcdHN0cnVjdCB4c2tfcXVldWUgKnEgPSB4cy1cXHUwMDNldHg7XFxuK1xcdHUzMiBucl9mcmFncyA9IDA7XFxuK1xcbitcXHRjYWNoZWRfY29ucyA9IHEtXFx1MDAzZWNhY2hlZF9jb25zO1xcbiBcXG4tXFx0LyogdHJhY2sgZmlyc3QgZW50cnksIGlmIHN0dW1ibGUgdXBvbiAqYW55KiBpbnZhbGlkIGRlc2NyaXB0b3IsIHJld2luZFxcbi1cXHQgKiBjdXJyZW50IHBhY2tldCB0aGF0IGNvbnNpc3RzIG9mIGZyYWdzIGFuZCBzdG9wIHRoZSBwcm9jZXNzaW5nXFxuLVxcdCAqL1xcbiBcXHR3aGlsZSAoY2FjaGVkX2NvbnMgIT0gcS1cXHUwMDNlY2FjaGVkX3Byb2QgXFx1MDAyNlxcdTAwMjYgbmJfZW50cmllcyBcXHUwMDNjIG1heCkge1xcbiBcXHRcXHRzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqcmluZyA9IChzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqKXEtXFx1MDAzZXJpbmc7XFxuIFxcdFxcdHUzMiBpZHggPSBjYWNoZWRfY29ucyBcXHUwMDI2IHEtXFx1MDAzZXJpbmdfbWFzaztcXG5AQCAtMjgyLDI2ICsyOTUsNDkgQEAgdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuIFxcdFxcdGRlc2NzW25iX2VudHJpZXNdID0gcmluZy1cXHUwMDNlZGVzY1tpZHhdO1xcbiBcXHRcXHRjYWNoZWRfY29ucysrO1xcbiBcXHRcXHRwYXJzZV9kZXNjKHEsIHBvb2wsIFxcdTAwMjZkZXNjc1tuYl9lbnRyaWVzXSwgXFx1MDAyNnBhcnNlZCk7XFxuLVxcdFxcdGlmICh1bmxpa2VseSghcGFyc2VkLnZhbGlkKSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmICh1bmxpa2VseSghcGFyc2VkLnZhbGlkKSkge1xcbitcXHRcXHRcXHRpZiAoIWRyYWluIFxcdTAwMjZcXHUwMDI2ICFucl9mcmFncyBcXHUwMDI2XFx1MDAyNiAhcGFyc2VkLm1iKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdFxcdGRyYWluID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bnJfZnJhZ3MrKztcXG4rXFx0XFx0bmJfZW50cmllcysrO1xcbiBcXG4gXFx0XFx0aWYgKGxpa2VseSghcGFyc2VkLm1iKSkge1xcbi1cXHRcXHRcXHR0b3RhbF9kZXNjcyArPSAobnJfZnJhZ3MgKyAxKTtcXG4tXFx0XFx0XFx0bnJfZnJhZ3MgPSAwO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRucl9mcmFncysrO1xcbi1cXHRcXHRcXHRpZiAobnJfZnJhZ3MgPT0gcG9vbC1cXHUwMDNleGRwX3pjX21heF9zZWdzKSB7XFxuK1xcdFxcdFxcdGlmICh1bmxpa2VseShkcmFpbikpIHtcXG4rXFx0XFx0XFx0XFx0YmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzO1xcbitcXHRcXHRcXHRcXHRXUklURV9PTkNFKHhzLVxcdTAwM2VkcmFpbl9jb250LCBmYWxzZSk7XFxuIFxcdFxcdFxcdFxcdG5yX2ZyYWdzID0gMDtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdGJhdGNoLnR4X2Rlc2NzICs9IG5yX2ZyYWdzO1xcbitcXHRcXHRcXHRucl9mcmFncyA9IDA7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobnJfZnJhZ3MgPT0gcG9vbC1cXHUwMDNleGRwX3pjX21heF9zZWdzKVxcbitcXHRcXHRcXHRkcmFpbiA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChucl9mcmFncykge1xcbitcXHRcXHRpZiAoZHJhaW4pIHtcXG4rXFx0XFx0XFx0YmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzO1xcbitcXHRcXHRcXHRXUklURV9PTkNFKHhzLVxcdTAwM2VkcmFpbl9jb250LCB0cnVlKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0aWYgKG5iX2VudHJpZXMgPT0gbWF4KVxcbitcXHRcXHRcXHRcXHRiYXRjaC5idWRnZXRfbGltaXRlZCA9IHRydWU7XFxuK1xcdFxcdFxcdGNhY2hlZF9jb25zIC09IG5yX2ZyYWdzO1xcbiBcXHRcXHR9XFxuLVxcdFxcdG5iX2VudHJpZXMrKztcXG4gXFx0fVxcbiBcXG4tXFx0Y2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7XFxuK1xcdHJlbGVhc2VkID0gY2FjaGVkX2NvbnMgLSBxLVxcdTAwM2VjYWNoZWRfY29ucztcXG4gXFx0LyogUmVsZWFzZSB2YWxpZCBwbHVzIGFueSBpbnZhbGlkIGVudHJpZXMgKi9cXG4tXFx0eHNrcV9jb25zX3JlbGVhc2VfbihxLCBjYWNoZWRfY29ucyAtIHEtXFx1MDAzZWNhY2hlZF9jb25zKTtcXG4tXFx0cmV0dXJuIHRvdGFsX2Rlc2NzO1xcbitcXHR4c2txX2NvbnNfcmVsZWFzZV9uKHEsIHJlbGVhc2VkKTtcXG4rXFx0YmF0Y2guY29uc3VtZWRfZGVzY3MgPSByZWxlYXNlZDtcXG4rXFx0cmV0dXJuIGJhdGNoO1xcbiB9XFxuIFxcbiAvKiBGdW5jdGlvbnMgZm9yIGNvbnN1bWVycyAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xcbmluZGV4IDZlYjkwOTZkMDg0YzAxLi43YWJiNDkzNWVkZjlhZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xcbkBAIC00MjcsMTQgKzQyNywxNCBAQCBzdGF0aWMgdTMyIHBrdF9uYl9mcmFncyh1MzIgZnJhbWVfc2l6ZSwgc3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW0sIHN0cnVjdCBwa1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBTZWFyY2ggZm9yIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBpbiB2ZXJiYXRpbSBtb2RlICovXFxuLVxcdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXFx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXFx1MDAzZXZhbGlkKVxcbitcXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVxcdTAwM2VvcHRpb25zKSlcXG4gXFx0XFx0cmV0dXJuIG5iX2ZyYWdzO1xcbiBcXG4gXFx0bmV4dF9mcmFnID0gcGt0X3N0cmVhbS1cXHUwMDNlY3VycmVudF9wa3RfbmI7XFxuIFxcdHBrdCsrO1xcbiBcXHR3aGlsZSAobmV4dF9mcmFnKysgXFx1MDAzYyBwa3Rfc3RyZWFtLVxcdTAwM2VuYl9wa3RzKSB7XFxuIFxcdFxcdG5iX2ZyYWdzKys7XFxuLVxcdFxcdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXFx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVxcdTAwM2VvcHRpb25zKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdHBrdCsrO1xcbiBcXHR9XFxuQEAgLTY2NSwxMSArNjY1LDExIEBAIHN0YXRpYyBzdHJ1Y3QgcGt0X3N0cmVhbSAqX19wa3Rfc3RyZWFtX2dlbmVyYXRlX2N1c3RvbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzXFxuIFxcdFxcdFxcdGlmICghZnJhbWUtXFx1MDAzZXZhbGlkIHx8ICFwa3RfY29udGludWVzKGZyYW1lLVxcdTAwM2VvcHRpb25zKSlcXG4gXFx0XFx0XFx0XFx0cGF5bG9hZCsrO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRpZiAoZnJhbWUtXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRcXHRpZiAoZnJhbWUtXFx1MDAzZXZhbGlkKSB7XFxuIFxcdFxcdFxcdFxcdGxlbiArPSBmcmFtZS1cXHUwMDNlbGVuO1xcbi1cXHRcXHRcXHRpZiAoZnJhbWUtXFx1MDAzZXZhbGlkIFxcdTAwMjZcXHUwMDI2IHBrdF9jb250aW51ZXMoZnJhbWUtXFx1MDAzZW9wdGlvbnMpKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuK1xcdFxcdFxcdFxcdGlmIChwa3RfY29udGludWVzKGZyYW1lLVxcdTAwM2VvcHRpb25zKSlcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0cGt0LVxcdTAwM2Vwa3RfbmIgPSBwa3RfbmI7XFxuIFxcdFxcdFxcdHBrdC1cXHUwMDNlbGVuID0gbGVuO1xcbiBcXHRcXHRcXHRwa3QtXFx1MDAzZXZhbGlkID0gZnJhbWUtXFx1MDAzZXZhbGlkO1xcbkBAIC0xMjA5LDYgKzEyMDksNyBAQCBzdGF0aWMgaW50IF9fc2VuZF9wa3RzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayxcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHhzay1cXHUwMDNlYmF0Y2hfc2l6ZTsgaSsrKSB7XFxuIFxcdFxcdHN0cnVjdCBwa3QgKnBrdCA9IHBrdF9zdHJlYW1fZ2V0X25leHRfdHhfcGt0KHBrdF9zdHJlYW0pO1xcbiBcXHRcXHR1MzIgbmJfZnJhZ3NfbGVmdCwgbmJfZnJhZ3MsIGJ5dGVzX3dyaXR0ZW4gPSAwO1xcbitcXHRcXHRzdHJ1Y3QgcGt0ICpmaXJzdF9wa3QgPSBwa3Q7XFxuIFxcbiBcXHRcXHRpZiAoIXBrdClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTEyNTMsNiArMTI1NCw4IEBAIHN0YXRpYyBpbnQgX19zZW5kX3BrdHMoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLFxcbiBcXHRcXHRpZiAocGt0IFxcdTAwMjZcXHUwMDI2IHBrdC1cXHUwMDNldmFsaWQpIHtcXG4gXFx0XFx0XFx0dmFsaWRfcGt0cysrO1xcbiBcXHRcXHRcXHR2YWxpZF9mcmFncyArPSBuYl9mcmFncztcXG4rXFx0XFx0fSBlbHNlIGlmIChwa3Rfc3RyZWFtLVxcdTAwM2V2ZXJiYXRpbSBcXHUwMDI2XFx1MDAyNiBwa3RfY29udGludWVzKGZpcnN0X3BrdC1cXHUwMDNlb3B0aW9ucykpIHtcXG4rXFx0XFx0XFx0dmFsaWRfZnJhZ3MgKz0gbmJfZnJhZ3M7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtMjA5OSwxMyArMjEwMiwxNiBAQCBpbnQgdGVzdGFwcF9pbnZhbGlkX2Rlc2NfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4gXFx0XFx0ezAsIDAsIDAsIGZhbHNlLCAwfSxcXG4gXFx0XFx0LyogSW52YWxpZCBhZGRyZXNzIGluIHRoZSBzZWNvbmQgZnJhbWUgKi9cXG4gXFx0XFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXFxuLVxcdFxcdHt1bWVtX3N6LCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxcbitcXHRcXHR7dW1lbV9zeiAqIDIsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXFxuK1xcdFxcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcXG4gXFx0XFx0LyogSW52YWxpZCBsZW4gaW4gdGhlIG1pZGRsZSAqL1xcbiBcXHRcXHR7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcXG4gXFx0XFx0ezAsIFhTS19VTUVNX19JTlZBTElEX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcXG4rXFx0XFx0ezAsIE1JTl9QS1RfU0laRSwgMCwgZmFsc2UsIDB9LFxcbiBcXHRcXHQvKiBJbnZhbGlkIG9wdGlvbnMgaW4gdGhlIG1pZGRsZSAqL1xcbiBcXHRcXHR7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcXG4gXFx0XFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWFNLX0RFU0NfX0lOVkFMSURfT1BUSU9OfSxcXG4rXFx0XFx0ezAsIE1JTl9QS1RfU0laRSwgMCwgZmFsc2UsIDB9LFxcbiBcXHRcXHQvKiBUcmFuc21pdCAyIGZyYWdzLCByZWNlaXZlIDMgKi9cXG4gXFx0XFx0ezAsIFhTS19VTUVNX19NQVhfRlJBTUVfU0laRSwgMCwgdHJ1ZSwgWERQX1BLVF9DT05URH0sXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIDB9LFxcbkBAIC0yMTE3LDggKzIxMjMsOCBAQCBpbnQgdGVzdGFwcF9pbnZhbGlkX2Rlc2NfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4gXFxuIFxcdGlmICh1bWVtLVxcdTAwM2V1bmFsaWduZWRfbW9kZSkge1xcbiBcXHRcXHQvKiBDcm9zc2luZyBhIGNodW5rIGJvdW5kYXJ5IGFsbG93ZWQgKi9cXG4tXFx0XFx0cGt0c1sxMl0udmFsaWQgPSB0cnVlO1xcbi1cXHRcXHRwa3RzWzEzXS52YWxpZCA9IHRydWU7XFxuK1xcdFxcdHBrdHNbMTVdLnZhbGlkID0gdHJ1ZTtcXG4rXFx0XFx0cGt0c1sxNl0udmFsaWQgPSB0cnVlO1xcbiBcXHR9XFxuIFxcbiBcXHR0ZXN0LVxcdTAwM2VtdHUgPSBNQVhfRVRIX0pVTUJPX1NJWkU7XFxuQEAgLTIyNzAsNyArMjI3Niw3IEBAIGludCB0ZXN0YXBwX3Rvb19tYW55X2ZyYWdzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcdFxcdG1heF9mcmFncyArPSAxO1xcbiBcXHR9XFxuIFxcbi1cXHRwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgKyAyLCBzaXplb2Yoc3RydWN0IHBrdCkpO1xcbitcXHRwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgKyAzLCBzaXplb2Yoc3RydWN0IHBrdCkpO1xcbiBcXHRpZiAoIXBrdHMpXFxuIFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuIFxcbkBAIC0yMjg4LDI0ICsyMjk0LDMwIEBAIGludCB0ZXN0YXBwX3Rvb19tYW55X2ZyYWdzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcdH1cXG4gXFx0cGt0c1ttYXhfZnJhZ3NdLm9wdGlvbnMgPSAwO1xcbiBcXG4tXFx0LyogQW4gaW52YWxpZCBwYWNrZXQgd2l0aCB0aGUgbWF4IGFtb3VudCBvZiBmcmFncyBidXQgc2lnbmFscyBwYWNrZXRcXG4tXFx0ICogY29udGludWVzIG9uIHRoZSBsYXN0IGZyYWdcXG4tXFx0ICovXFxuLVxcdGZvciAoaSA9IG1heF9mcmFncyArIDE7IGkgXFx1MDAzYyAyICogbWF4X2ZyYWdzICsgMTsgaSsrKSB7XFxuK1xcdC8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCArIDEgYW1vdW50IG9mIGZyYWdzICovXFxuK1xcdGZvciAoaSA9IG1heF9mcmFncyArIDE7IGkgXFx1MDAzYyAyICogbWF4X2ZyYWdzICsgMjsgaSsrKSB7XFxuIFxcdFxcdHBrdHNbaV0ubGVuID0gTUlOX1BLVF9TSVpFO1xcbiBcXHRcXHRwa3RzW2ldLm9wdGlvbnMgPSBYRFBfUEtUX0NPTlREO1xcbi1cXHRcXHRwa3RzW2ldLnZhbGlkID0gZmFsc2U7XFxuK1xcdFxcdHBrdHNbaV0udmFsaWQgPSB0cnVlO1xcbiBcXHR9XFxuK1xcdHBrdHNbMiAqIG1heF9mcmFncyArIDFdLm9wdGlvbnMgPSAwO1xcbiBcXG4gXFx0LyogVmFsaWQgcGFja2V0IGZvciBzeW5jaCAqL1xcbi1cXHRwa3RzWzIgKiBtYXhfZnJhZ3MgKyAxXS5sZW4gPSBNSU5fUEtUX1NJWkU7XFxuLVxcdHBrdHNbMiAqIG1heF9mcmFncyArIDFdLnZhbGlkID0gdHJ1ZTtcXG4rXFx0cGt0c1syICogbWF4X2ZyYWdzICsgMl0ubGVuID0gTUlOX1BLVF9TSVpFO1xcbitcXHRwa3RzWzIgKiBtYXhfZnJhZ3MgKyAyXS52YWxpZCA9IHRydWU7XFxuIFxcbi1cXHRpZiAocGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20odGVzdCwgcGt0cywgMiAqIG1heF9mcmFncyArIDIpKSB7XFxuK1xcdGlmIChwa3Rfc3RyZWFtX2dlbmVyYXRlX2N1c3RvbSh0ZXN0LCBwa3RzLCAyICogbWF4X2ZyYWdzICsgMykpIHtcXG4gXFx0XFx0ZnJlZShwa3RzKTtcXG4gXFx0XFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcXG4gXFx0fVxcbiBcXG4rXFx0LyogVGhlIGdlbmVyYXRlZCBUeCBzdHJlYW0gbXVzdCBrZWVwIHRoZSB0b28tYmlnIHBhY2tldCB2YWxpZCBzbyB0aGF0XFxuK1xcdCAqIF9fc2VuZF9wa3RzKCkgYWNjb3VudHMgaXRzIGRlc2NyaXB0b3JzIGluIG91dHN0YW5kaW5nX3R4LiBUaGUgUnhcXG4rXFx0ICogc3RyZWFtLCBob3dldmVyLCBtdXN0IG5vdCBleHBlY3QgdGhpcyBwYWNrZXQgb24gdGhlIHdpcmUuXFxuK1xcdCAqL1xcbitcXHR0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrLVxcdTAwM2Vwa3Rfc3RyZWFtLVxcdTAwM2Vwa3RzWzJdLnZhbGlkID0gZmFsc2U7XFxuK1xcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2stXFx1MDAzZXBrdF9zdHJlYW0tXFx1MDAzZW5iX3ZhbGlkX2VudHJpZXMtLTtcXG4rXFxuIFxcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcXG4gXFx0ZnJlZShwa3RzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMjM6NTY6MjcuNzU5ODYyNDIzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTMwODc5NDE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza190eF9jb21taXRfYmF0Y2hcIixcbiAgICBcIl9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoXCIsXG4gICAgXCJ4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoXCIsXG4gICAgXCJ4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZFwiLFxuICAgIFwieHNrX2J1aWxkX3NrYlwiLFxuICAgIFwieHNrX2J1aWxkX3NrYl96ZXJvY29weVwiLFxuICAgIFwiX194c2tfZ2VuZXJpY194bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCB0cmFuc21pc3Npb24gbG9naWMgdG8gY29ycmVjdGx5IGhhbmRsZSBtdWx0aS1idWZmZXIgcGFja2V0cyB3aXRoIGludmFsaWQgZGVzY3JpcHRvcnMgb3IgZXhjZWVkaW5nIHRoZSBtYXhpbXVtIGFsbG93ZWQgZnJhZ21lbnRzLiBJdCBpbnRyb2R1Y2VzIG5ldyBiYXRjaGluZyBhbmQgcmVjbGFpbWluZyBsb2dpYyBmb3IgZGVzY3JpcHRvcnMsIGFuZCB1cGRhdGVzIHRoZSBnZW5lcmljIFhEUCB0cmFuc21pdCBwYXRoIHRvIGRyYWluIGludmFsaWQgcGFja2V0cy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQUZfWERQIHNvY2tldHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDlkYjNlNDA4MDAyMWNhNDhkZTU2YjE3ZDMxMGQ3MjIzMDNhY2M4Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDE0IDIzOjU2OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGRwX3NvY2suaCBiL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcbmluZGV4IGViYWM2MGEzZDhhMTdiLi44YjUxODc2ZWZiZWQxYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcbisrKyBiL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmhcbkBAIC04MCw2ICs4MCw3IEBAIHN0cnVjdCB4ZHBfc29jayB7XG4gXHQgKiBjYWxsIG9mIF9feHNrX2dlbmVyaWNfeG1pdCgpLlxuIFx0ICovXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0Ym9vbCBkcmFpbl9jb250O1xuIFxuIFx0c3RydWN0IGxpc3RfaGVhZCBtYXBfbGlzdDtcbiBcdC8qIFByb3RlY3RzIG1hcF9saXN0ICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oIGIvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXG5pbmRleCBjY2IzYjM1MDAwMWYyNC4uMmJiMWQxMjJiMWJjNmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcbisrKyBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxuQEAgLTc4LDYgKzc4LDkgQEAgc3RydWN0IHhza19idWZmX3Bvb2wge1xuIFx0dTMyIGNodW5rX3NpemU7XG4gXHR1MzIgY2h1bmtfc2hpZnQ7XG4gXHR1MzIgZnJhbWVfbGVuO1xuK1x0dTMyIHR4X2Rlc2NzX25lbnRyaWVzO1xuK1x0dTMyIHJlY2xhaW1fZGVzY3M7XG4rXHR1MzIgdHhfemNfcGVuZGluZ19kZXNjcztcbiBcdHUzMiB4ZHBfemNfbWF4X3NlZ3M7XG4gXHR1OCB0eF9tZXRhZGF0YV9sZW47IC8qIGluaGVyaXRlZCBmcm9tIHVtZW0gKi9cbiBcdHU4IGNhY2hlZF9uZWVkX3dha2V1cDtcbkBAIC0xMDIsMTIgKzEwNSwxNCBAQCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCB7XG4gXG4gLyogQUZfWERQIGNvcmUuICovXG4gc3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cyxcbi1cdFx0XHRcdFx0XHRzdHJ1Y3QgeGRwX3VtZW0gKnVtZW0pO1xuK1x0XHRcdFx0XHRcdHN0cnVjdCB4ZHBfdW1lbSAqdW1lbSxcbitcdFx0XHRcdFx0XHR1MzIgbWF4X3NlZ3MpO1xuIGludCB4cF9hc3NpZ25fZGV2KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgIHUxNiBxdWV1ZV9pZCwgdTE2IGZsYWdzKTtcbiBpbnQgeHBfYXNzaWduX2Rldl9zaGFyZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqdW1lbV94cyxcbiBcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHF1ZXVlX2lkKTtcbi1pbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMpO1xuK2ludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cyxcbitcdFx0ICAgICAgdTMyIG1heF9zZWdzKTtcbiB2b2lkIHhwX2Rlc3Ryb3koc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuIHZvaWQgeHBfZ2V0X3Bvb2woc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuIGJvb2wgeHBfcHV0X3Bvb2woc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXG5pbmRleCBiOTcwZjMwZWE5YjlkOC4uMjkwOWEwZWM2ODM3MzEgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hzay5jXG4rKysgYi9uZXQveGRwL3hzay5jXG5AQCAtNDk5LDYgKzQ5OSwyMyBAQCB2b2lkIF9feHNrX21hcF9mbHVzaChzdHJ1Y3QgbGlzdF9oZWFkICpmbHVzaF9saXN0KVxuIFxuIHZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXG4ge1xuK1x0dTMyIHJlY2xhaW1fZGVzY3MgPSBSRUFEX09OQ0UocG9vbC1cdTAwM2VyZWNsYWltX2Rlc2NzKTtcbitcbitcdGlmICh1bmxpa2VseShyZWNsYWltX2Rlc2NzKSkge1xuK1x0XHR1MzIgcGVuZGluZ19kZXNjcyA9IFJFQURfT05DRShwb29sLVx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MpO1xuK1xuK1x0XHRpZiAobmJfZW50cmllcyBcdTAwM2MgcGVuZGluZ19kZXNjcykge1xuK1x0XHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLFxuK1x0XHRcdFx0ICAgcGVuZGluZ19kZXNjcyAtIG5iX2VudHJpZXMpO1xuK1x0XHRcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVx1MDAzZWNxLCBuYl9lbnRyaWVzKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcbitcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MsIDApO1xuK1x0XHRuYl9lbnRyaWVzICs9IHJlY2xhaW1fZGVzY3M7XG4rXHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2VyZWNsYWltX2Rlc2NzLCAwKTtcbitcdH1cbitcbiBcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVx1MDAzZWNxLCBuYl9lbnRyaWVzKTtcbiB9XG4gRVhQT1JUX1NZTUJPTCh4c2tfdHhfY29tcGxldGVkKTtcbkBAIC01NzQsMjQgKzU5MSwxNjIgQEAgc3RhdGljIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2VudHJcbiBcdHJldHVybiBuYl9wa3RzO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB4c2tfdHhfY29tbWl0X2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuK1x0XHRcdFx0c3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpXG4re1xuK1x0dTMyIG5iX2Rlc2NzID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGJhdGNoKTtcbitcdHUzMiBjcV9jYWNoZWRfcHJvZDtcbitcbitcdGlmICghbmJfZGVzY3MpXG4rXHRcdHJldHVybjtcbitcbitcdGNxX2NhY2hlZF9wcm9kID0gcG9vbC1cdTAwM2VjcS1cdTAwM2VjYWNoZWRfcHJvZDtcbitcdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXHUwMDNlY3EsIHBvb2wtXHUwMDNldHhfZGVzY3MsIG5iX2Rlc2NzKTtcbitcbitcdGlmICh1bmxpa2VseShiYXRjaC1cdTAwM2VyZWNsYWltX2Rlc2NzKSkge1xuK1x0XHR1MzIgY3FfcGVuZGluZ19kZXNjcztcbitcbitcdFx0LyogQ1EgaXMgcG9zaXRpb25hbC4gRGVzY3JpcHRvcnMgYWxyZWFkeSB3cml0dGVuIGJ1dCBub3RcbitcdFx0ICogc3VibWl0dGVkIG11c3QgY29tcGxldGUgYmVmb3JlIGFueSByZWNsYWltLW9ubHkgZGVzY3JpcHRvcnNcbitcdFx0ICogYXBwZW5kZWQgYmVsb3cuXG4rXHRcdCAqL1xuK1x0XHRjcV9wZW5kaW5nX2Rlc2NzID0gY3FfY2FjaGVkX3Byb2QgLSB4c2txX2dldF9wcm9kKHBvb2wtXHUwMDNlY3EpO1xuK1xuK1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyxcbitcdFx0XHQgICBiYXRjaC1cdTAwM2V0eF9kZXNjcyArIGNxX3BlbmRpbmdfZGVzY3MpO1xuK1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcywgYmF0Y2gtXHUwMDNlcmVjbGFpbV9kZXNjcyk7XG4rXHRcdGlmICh1bmxpa2VseSghcG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzKSlcbitcdFx0XHR4c2tfdHhfY29tcGxldGVkKHBvb2wsIDApO1xuK1x0fVxuK31cbitcbitzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxuK19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuK1x0XHRcdFx0IHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXhfZGVzY3MpXG4re1xuK1x0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xuK1x0dTMyIGVudHJpZXM7XG4rXG4rXHRlbnRyaWVzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIG1heF9kZXNjcyk7XG4rXHRpZiAoIWVudHJpZXMpXG4rXHRcdHJldHVybiBiYXRjaDtcbitcbitcdGJhdGNoID0geHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaCh4cywgcG9vbCwgZGVzY3MsIG1heF9kZXNjcyk7XG4rXHRpZiAoIXhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZiYXRjaCkpIHtcbitcdFx0eHMtXHUwMDNldHgtXHUwMDNlcXVldWVfZW1wdHlfZGVzY3MrKztcbitcdFx0aWYgKGJhdGNoLmNvbnN1bWVkX2Rlc2NzKSB7XG4rXHRcdFx0X194c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4rXHRcdFx0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuK1x0XHR9XG4rXHRcdHJldHVybiBiYXRjaDtcbitcdH1cbitcbitcdF9feHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuK1x0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuK1x0cmV0dXJuIGJhdGNoO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxuK3hza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXG4re1xuK1x0dTMyIGNxX2Rlc2NzX2JlZm9yZSwgY3FfZGVzY3NfYWZ0ZXI7XG4rXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIHN1bV9iYXRjaCA9IHt9O1xuK1x0Ym9vbCBidWRnZXRfZXhoYXVzdGVkO1xuK1x0dTMyIHBlcl9zb2NrZXRfYnVkZ2V0O1xuK1x0c3RydWN0IHhkcF9zb2NrICp4cztcbitcbitcdC8qIFRoZSBmYWlybmVzcyBxdW90YSBtdXN0IGFsbG93IG9uZSBtYXhpbXVtLXNpemVkIHZhbGlkIHBhY2tldC4gKi9cbitcdHBlcl9zb2NrZXRfYnVkZ2V0ID0gbWF4X3QodTMyLCBNQVhfUEVSX1NPQ0tFVF9CVURHRVQsXG4rXHRcdFx0XHQgIHBvb2wtXHUwMDNleGRwX3pjX21heF9zZWdzKTtcbitcbithZ2FpbjpcbitcdGJ1ZGdldF9leGhhdXN0ZWQgPSBmYWxzZTtcbitcdGNxX2Rlc2NzX2JlZm9yZSA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsIFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpIHtcbitcdFx0dTMyIGJ1ZGdldCwgYnVkZ2V0X2xlZnQsIG9mZnNldCwgcmVtYWluaW5nO1xuK1x0XHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGN1cnJfYmF0Y2g7XG4rXG4rXHRcdC8qIE9uY2UgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBhcHBlbmRlZCB0byB0aGUgQ1FcbitcdFx0ICogYWRkcmVzcyBhcmVhLCBkbyBub3QgYXBwZW5kIGRyaXZlci12aXNpYmxlIFR4IGRlc2NyaXB0b3JzXG4rXHRcdCAqIGZyb20gYW5vdGhlciBzb2NrZXQgYWZ0ZXIgdGhlbS4geHNrX3R4X2NvbXBsZXRlZCgpIHJlbGllcyBvblxuK1x0XHQgKiBhbGwgZHJpdmVyLXZpc2libGUgZGVzY3JpcHRvcnMgcHJlY2VkaW5nIGFsbCByZWNsYWltLW9ubHlcbitcdFx0ICogZGVzY3JpcHRvcnMgaW4gQ1Egb3JkZXIuXG4rXHRcdCAqL1xuK1x0XHRpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIGJlIGdlbnRsZSB3aGVuIHBsYXlpbmcgd2l0aCBwb29sLVx1MDAzZXR4X2Rlc2NzICovXG4rXHRcdG9mZnNldCA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuK1x0XHRpZiAob2Zmc2V0IFx1MDAzZT0gbWF4X2Rlc2NzKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAoeHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50IFx1MDAzZT0gcGVyX3NvY2tldF9idWRnZXQpIHtcbitcdFx0XHRpZiAoeHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIDEpKVxuK1x0XHRcdFx0YnVkZ2V0X2V4aGF1c3RlZCA9IHRydWU7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0YnVkZ2V0X2xlZnQgPSBwZXJfc29ja2V0X2J1ZGdldCAtIHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudDtcbitcdFx0cmVtYWluaW5nID0gbWF4X2Rlc2NzIC0gb2Zmc2V0O1xuK1x0XHRidWRnZXQgPSBtaW4ocmVtYWluaW5nLCBidWRnZXRfbGVmdCk7XG4rXG4rXHRcdGN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcbitcdFx0XHRcdFx0XHRcdCAgICAgIHBvb2wtXHUwMDNldHhfZGVzY3MgKyBvZmZzZXQsXG4rXHRcdFx0XHRcdFx0XHQgICAgICBidWRnZXQpO1xuK1x0XHRpZiAoIXhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZjdXJyX2JhdGNoKSkge1xuK1x0XHRcdGlmIChjdXJyX2JhdGNoLmJ1ZGdldF9saW1pdGVkIFx1MDAyNlx1MDAyNiBidWRnZXRfbGVmdCBcdTAwM2MgcmVtYWluaW5nKVxuK1x0XHRcdFx0YnVkZ2V0X2V4aGF1c3RlZCA9IHRydWU7XG4rXHRcdFx0eHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50ICs9IGN1cnJfYmF0Y2guY29uc3VtZWRfZGVzY3M7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0eHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50ICs9IGN1cnJfYmF0Y2guY29uc3VtZWRfZGVzY3M7XG4rXHRcdHN1bV9iYXRjaC50eF9kZXNjcyArPSBjdXJyX2JhdGNoLnR4X2Rlc2NzO1xuK1x0XHRzdW1fYmF0Y2gucmVjbGFpbV9kZXNjcyArPSBjdXJyX2JhdGNoLnJlY2xhaW1fZGVzY3M7XG4rXHR9XG4rXG4rXHRjcV9kZXNjc19hZnRlciA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuK1xuK1x0aWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzIHx8IGNxX2Rlc2NzX2FmdGVyIFx1MDAzZT0gbWF4X2Rlc2NzKVxuK1x0XHRyZXR1cm4gc3VtX2JhdGNoO1xuK1xuK1x0LyogQ29udGludWUgZmlsbGluZyB0aGUgYmF0Y2ggd2hpbGUgdGhpcyBwYXNzIG1hZGUgcHJvZ3Jlc3MgKi9cbitcdGlmIChjcV9kZXNjc19iZWZvcmUgIT0gY3FfZGVzY3NfYWZ0ZXIpXG4rXHRcdGdvdG8gYWdhaW47XG4rXG4rXHRpZiAoIWJ1ZGdldF9leGhhdXN0ZWQpXG4rXHRcdHJldHVybiBzdW1fYmF0Y2g7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4cywgXHUwMDI2cG9vbC1cdTAwM2V4c2tfdHhfbGlzdCwgdHhfbGlzdClcbitcdFx0eHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50ID0gMDtcbitcdGdvdG8gYWdhaW47XG4rfVxuK1xuIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxuIHtcbitcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcbiBcdHN0cnVjdCB4ZHBfc29jayAqeHM7XG4rXHRib29sIHVtZW1fc2hhcmVkO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0aWYgKCFsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QpKSB7XG4tXHRcdC8qIEZhbGxiYWNrIHRvIHRoZSBub24tYmF0Y2hlZCB2ZXJzaW9uICovXG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcbi1cdH1cbitcdGlmICh1bmxpa2VseShSRUFEX09OQ0UocG9vbC1cdTAwM2VyZWNsYWltX2Rlc2NzKSkpXG4rXHRcdGdvdG8gb3V0O1xuIFxuLVx0eHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jaywgdHhfbGlzdCk7XG4tXHRpZiAoIXhzKSB7XG4tXHRcdG5iX3BrdHMgPSAwO1xuK1x0eHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jayxcbitcdFx0XHRcdCAgICB0eF9saXN0KTtcbitcdGlmICgheHMpXG4gXHRcdGdvdG8gb3V0O1xuLVx0fVxuIFxuLVx0bmJfcGt0cyA9IHhza3FfY29uc19uYl9lbnRyaWVzKHhzLVx1MDAzZXR4LCBuYl9wa3RzKTtcbitcdG5iX3BrdHMgPSBtaW4obmJfcGt0cywgcG9vbC1cdTAwM2V0eF9kZXNjc19uZW50cmllcyk7XG4rXHRpZiAoIW5iX3BrdHMpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0dW1lbV9zaGFyZWQgPSAhbGlzdF9pc19zaW5ndWxhcihcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0KTtcbitcbitcdGlmICh1bWVtX3NoYXJlZCBcdTAwMjZcdTAwMjYgIShwb29sLVx1MDAzZXVtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9VTUVNX1NHX0ZMQUcpKSB7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcbitcdH1cbiBcbiBcdC8qIFRoaXMgaXMgdGhlIGJhY2twcmVzc3VyZSBtZWNoYW5pc20gZm9yIHRoZSBUeCBwYXRoLiBUcnkgdG9cbiBcdCAqIHJlc2VydmUgc3BhY2UgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgZm9yIGFsbCBwYWNrZXRzLCBidXRcbkBAIC02MDMsMTkgKzc1OCwxNiBAQCB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcbiBcdGlmICghbmJfcGt0cylcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRuYl9wa3RzID0geHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaCh4cy1cdTAwM2V0eCwgcG9vbCwgbmJfcGt0cyk7XG4tXHRpZiAoIW5iX3BrdHMpIHtcbi1cdFx0eHMtXHUwMDNldHgtXHUwMDNlcXVldWVfZW1wdHlfZGVzY3MrKztcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbi1cdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXHUwMDNlY3EsIHBvb2wtXHUwMDNldHhfZGVzY3MsIG5iX3BrdHMpO1xuLVx0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuK1x0YmF0Y2ggPSB1bWVtX3NoYXJlZCA/XG4rXHRcdHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gocG9vbCwgbmJfcGt0cykgOlxuK1x0XHRfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcbitcdFx0XHRcdFx0XHQgcG9vbC1cdTAwM2V0eF9kZXNjcyxcbitcdFx0XHRcdFx0XHQgbmJfcGt0cyk7XG4rXHR4c2tfdHhfY29tbWl0X2JhdGNoKHBvb2wsIFx1MDAyNmJhdGNoKTtcbiBcbiBvdXQ6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdHJldHVybiBuYl9wa3RzO1xuK1x0cmV0dXJuIGJhdGNoLnR4X2Rlc2NzO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XG4gXG5AQCAtNzM3LDYgKzg4OSwxOSBAQCBzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHUzMiBpZHg7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuK1x0aWR4ID0geHNrcV9nZXRfcHJvZChwb29sLVx1MDAzZWNxKTtcbitcdHhza3FfcHJvZF93cml0ZV9hZGRyKHBvb2wtXHUwMDNlY3EsIGlkeCwgZGVzYy1cdTAwM2VhZGRyKTtcbitcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVx1MDAzZWNxLCAxKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9vbC1cdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxuIHtcbiBcdHNwaW5fbG9jayhcdTAwMjZwb29sLVx1MDAzZWNxLVx1MDAzZWNxX2NhY2hlZF9wcm9kX2xvY2spO1xuQEAgLTc5NCw4ICs5NTksMTEgQEAgc3RhdGljIHZvaWQgeHNrX2NvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gc3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0eGRwX3NrKHNrYi1cdTAwM2VzayktXHUwMDNldHgtXHUwMDNlaW52YWxpZF9kZXNjcyArPSB4c2tfZ2V0X251bV9kZXNjKHNrYik7XG4tXHR4c2tfY29uc3VtZV9za2Ioc2tiKTtcbitcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2tiLVx1MDAzZXNrKTtcbitcbitcdHhzLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MgKz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xuK1x0Y29uc3VtZV9za2Ioc2tiKTtcbitcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXG5AQCAtODc3LDcgKzEwNDUsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdFx0LyogaW4gY2FzZSBvZiAtRU9WRVJGTE9XIHRoYXQgY291bGQgaGFwcGVuIGJlbG93LFxuLVx0XHQgKiB4c2tfY29uc3VtZV9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYlxuK1x0XHQgKiB4c2tfZHJvcF9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYlxuIFx0XHQgKiB3b3VsZCBiZSBkcm9wcGVkLCB3aGljaCBpbXBsaWVzIGZyZWVpbmcgYWxsIGxpc3QgZWxlbWVudHNcbiBcdFx0ICovXG4gXHRcdHhza19hZGRyLVx1MDAzZWFkZHJzW3hza19hZGRyLVx1MDAzZW51bV9kZXNjc10gPSBkZXNjLVx1MDAzZWFkZHI7XG5AQCAtOTY5LDYgKzExMzcsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4gXHRcdFx0fVxuIFxuK1x0XHRcdHhza19hZGRyLVx1MDAzZWFkZHJzW3hza19hZGRyLVx1MDAzZW51bV9kZXNjc10gPSBkZXNjLVx1MDAzZWFkZHI7XG4rXG4gXHRcdFx0aWYgKHVubGlrZWx5KG5yX2ZyYWdzID09IChNQVhfU0tCX0ZSQUdTIC0gMSkgXHUwMDI2XHUwMDI2IHhwX21iX2Rlc2MoZGVzYykpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRU9WRVJGTE9XO1xuIFx0XHRcdFx0Z290byBmcmVlX2VycjtcbkBAIC05ODYsOCArMTE1Niw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuIFxuIFx0XHRcdHNrYl9hZGRfcnhfZnJhZyhza2IsIG5yX2ZyYWdzLCBwYWdlLCAwLCBsZW4sIFBBR0VfU0laRSk7XG4gXHRcdFx0cmVmY291bnRfYWRkKFBBR0VfU0laRSwgXHUwMDI2eHMtXHUwMDNlc2suc2tfd21lbV9hbGxvYyk7XG4tXG4tXHRcdFx0eHNrX2FkZHItXHUwMDNlYWRkcnNbeHNrX2FkZHItXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXHUwMDNlYWRkcjtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTEwNjAsMTEgKzEyMjgsMjIgQEAgc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4rXHRcdGlmICh1bmxpa2VseSh4cy1cdTAwM2VkcmFpbl9jb250KSkge1xuK1x0XHRcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIFx1MDAyNmRlc2MpO1xuK1xuK1x0XHRcdHhzLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MrKztcbitcdFx0XHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4rXHRcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXHUwMDI2ZGVzYyk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXHUwMDI2ZGVzYyk7XG4gXHRcdGlmIChJU19FUlIoc2tiKSkge1xuIFx0XHRcdGVyciA9IFBUUl9FUlIoc2tiKTtcbiBcdFx0XHRpZiAoZXJyICE9IC1FT1ZFUkZMT1cpXG4gXHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHRpZiAoeHBfbWJfZGVzYyhcdTAwMjZkZXNjKSlcbitcdFx0XHRcdHhzLVx1MDAzZWRyYWluX2NvbnQgPSB0cnVlO1xuIFx0XHRcdGVyciA9IDA7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbkBAIC0xMDk4LDkgKzEyNzcsMjQgQEAgc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuIFx0fVxuIFxuIFx0aWYgKHhza3FfaGFzX2Rlc2NzKHhzLVx1MDAzZXR4KSkge1xuK1x0XHRib29sIHJlY2xhaW1fZGVzYyA9IHhzLVx1MDAzZXNrYiB8fCB4cy1cdTAwM2VkcmFpbl9jb250O1xuK1xuK1x0XHRpZiAocmVjbGFpbV9kZXNjKSB7XG4rXHRcdFx0ZXJyID0geHNrX2NxX3Jlc2VydmVfbG9ja2VkKHhzLVx1MDAzZXBvb2wpO1xuK1x0XHRcdGlmIChlcnIpIHtcbitcdFx0XHRcdGVyciA9IC1FQUdBSU47XG4rXHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHR9XG4rXHRcdH1cbitcbiBcdFx0aWYgKHhzLVx1MDAzZXNrYilcbiBcdFx0XHR4c2tfZHJvcF9za2IoeHMtXHUwMDNlc2tiKTtcbitcbitcdFx0aWYgKHJlY2xhaW1fZGVzYylcbitcdFx0XHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cdTAwM2Vwb29sLCBcdTAwMjZkZXNjKTtcbitcbiBcdFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuK1x0XHR4cy1cdTAwM2VkcmFpbl9jb250ID0geHBfbWJfZGVzYyhcdTAwMjZkZXNjKTtcbiBcdH1cbiBcbiBvdXQ6XG5AQCAtMTQ4Myw3ICsxNjc3LDggQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcbiBcdFx0XHQgKiBhbmQvb3IgZGV2aWNlLlxuIFx0XHRcdCAqL1xuIFx0XHRcdHhzLVx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLFxuLVx0XHRcdFx0XHRcdFx0ICAgICB1bWVtX3hzLVx1MDAzZXVtZW0pO1xuK1x0XHRcdFx0XHRcdFx0ICAgICB1bWVtX3hzLVx1MDAzZXVtZW0sXG4rXHRcdFx0XHRcdFx0XHQgICAgIGRldi1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xuIFx0XHRcdGlmICgheHMtXHUwMDNlcG9vbCkge1xuIFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG5AQCAtMTUxNSw3ICsxNzEwLDggQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcbiBcdFx0XHQgKiB1dGlsaXplc1xuIFx0XHRcdCAqL1xuIFx0XHRcdGlmICh4cy1cdTAwM2V0eCBcdTAwMjZcdTAwMjYgIXhzLVx1MDAzZXBvb2wtXHUwMDNldHhfZGVzY3MpIHtcbi1cdFx0XHRcdGVyciA9IHhwX2FsbG9jX3R4X2Rlc2NzKHhzLVx1MDAzZXBvb2wsIHhzKTtcbitcdFx0XHRcdGVyciA9IHhwX2FsbG9jX3R4X2Rlc2NzKHhzLVx1MDAzZXBvb2wsIHhzLFxuK1x0XHRcdFx0XHRcdFx0ZGV2LVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRcdHhwX3B1dF9wb29sKHhzLVx1MDAzZXBvb2wpO1xuIFx0XHRcdFx0XHR4cy1cdTAwM2Vwb29sID0gTlVMTDtcbkBAIC0xNTMzLDcgKzE3MjksOSBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkclxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBUaGlzIHhzayBoYXMgaXRzIG93biB1bWVtLiAqL1xuLVx0XHR4cy1cdTAwM2Vwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cywgeHMtXHUwMDNldW1lbSk7XG4rXHRcdHhzLVx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLCB4cy1cdTAwM2V1bWVtLFxuK1x0XHRcdFx0XHRcdCAgICAgZGV2LVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4rXG4gXHRcdGlmICgheHMtXHUwMDNlcG9vbCkge1xuIFx0XHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jIGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcbmluZGV4IDFmMjhhOTY0MTU3MWU0Li5hNDA4OTQ4MGIyMmIyNSAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXG4rKysgYi9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xuQEAgLTQyLDE3ICs0MiwyMiBAQCB2b2lkIHhwX2Rlc3Ryb3koc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG4gXHRrdmZyZWUocG9vbCk7XG4gfVxuIFxuLWludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cylcbitpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4rXHRcdCAgICAgIHUzMiBtYXhfc2VncylcbiB7XG4tXHRwb29sLVx1MDAzZXR4X2Rlc2NzID0ga3Z6YWxsb2Nfb2JqcygqcG9vbC1cdTAwM2V0eF9kZXNjcywgeHMtXHUwMDNldHgtXHUwMDNlbmVudHJpZXMpO1xuK1x0dTMyIG5lbnRyaWVzID0gbWF4KHhzLVx1MDAzZXR4LVx1MDAzZW5lbnRyaWVzLCBtYXhfc2Vncyk7XG4rXG4rXHRwb29sLVx1MDAzZXR4X2Rlc2NzID0ga3Z6YWxsb2Nfb2JqcygqcG9vbC1cdTAwM2V0eF9kZXNjcywgbmVudHJpZXMpO1xuIFx0aWYgKCFwb29sLVx1MDAzZXR4X2Rlc2NzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdHBvb2wtXHUwMDNldHhfZGVzY3NfbmVudHJpZXMgPSBuZW50cmllcztcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLVx0XHRcdFx0XHRcdHN0cnVjdCB4ZHBfdW1lbSAqdW1lbSlcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgeGRwX3VtZW0gKnVtZW0sXG4rXHRcdFx0XHRcdFx0dTMyIG1heF9zZWdzKVxuIHtcbiBcdGJvb2wgdW5hbGlnbmVkID0gdW1lbS1cdTAwM2VmbGFncyBcdTAwMjYgWERQX1VNRU1fVU5BTElHTkVEX0NIVU5LX0ZMQUc7XG4gXHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbDtcbkBAIC02OSw3ICs3NCw3IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0aWYgKHhzLVx1MDAzZXR4KVxuLVx0XHRpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMpKVxuK1x0XHRpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMsIG1heF9zZWdzKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbiBcdHBvb2wtXHUwMDNlY2h1bmtfbWFzayA9IH4oKHU2NCl1bWVtLVx1MDAzZWNodW5rX3NpemUgLSAxKTtcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19xdWV1ZS5oIGIvbmV0L3hkcC94c2tfcXVldWUuaFxuaW5kZXggM2UzZmJiNzNkMjNlMmYuLmExNWZmMTkyOWRiNjIzIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2tfcXVldWUuaFxuKysrIGIvbmV0L3hkcC94c2tfcXVldWUuaFxuQEAgLTU4LDYgKzU4LDE4IEBAIHN0cnVjdCBwYXJzZWRfZGVzYyB7XG4gXHR1MzIgdmFsaWQ7XG4gfTtcbiBcbitzdHJ1Y3QgeHNrX3R4X2JhdGNoIHtcbitcdHUzMiB0eF9kZXNjcztcbitcdHUzMiByZWNsYWltX2Rlc2NzO1xuK1x0dTMyIGNvbnN1bWVkX2Rlc2NzO1xuK1x0Ym9vbCBidWRnZXRfbGltaXRlZDtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgdTMyIHhza190eF9iYXRjaF9jcV9kZXNjcyhjb25zdCBzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaClcbit7XG4rXHRyZXR1cm4gYmF0Y2gtXHUwMDNldHhfZGVzY3MgKyBiYXRjaC1cdTAwM2VyZWNsYWltX2Rlc2NzO1xuK31cbitcbiAvKiBUaGUgc3RydWN0dXJlIG9mIHRoZSBzaGFyZWQgc3RhdGUgb2YgdGhlIHJpbmdzIGFyZSBhIHNpbXBsZVxuICAqIGNpcmN1bGFyIGJ1ZmZlciwgYXMgb3V0bGluZWQgaW5cbiAgKiBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL2NpcmN1bGFyLWJ1ZmZlcnMucnN0LiBGb3IgdGhlIFJ4IGFuZFxuQEAgLTI2MywxNyArMjc1LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZV9kZXNjKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIFx0cGFyc2VkLVx1MDAzZW1iID0geHBfbWJfZGVzYyhkZXNjKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZVxuLXUzMiB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLVx0XHRcdCAgICAgIHUzMiBtYXgpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeHNrX3R4X2JhdGNoXG4reHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbitcdFx0XHQgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXgpXG4ge1xuLVx0dTMyIGNhY2hlZF9jb25zID0gcS1cdTAwM2VjYWNoZWRfY29ucywgbmJfZW50cmllcyA9IDA7XG4tXHRzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzID0gcG9vbC1cdTAwM2V0eF9kZXNjcztcbi1cdHUzMiB0b3RhbF9kZXNjcyA9IDAsIG5yX2ZyYWdzID0gMDtcbitcdGJvb2wgZHJhaW4gPSBSRUFEX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCk7XG4rXHR1MzIgY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwLCByZWxlYXNlZDtcbitcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcbitcdHN0cnVjdCB4c2tfcXVldWUgKnEgPSB4cy1cdTAwM2V0eDtcbitcdHUzMiBucl9mcmFncyA9IDA7XG4rXG4rXHRjYWNoZWRfY29ucyA9IHEtXHUwMDNlY2FjaGVkX2NvbnM7XG4gXG4tXHQvKiB0cmFjayBmaXJzdCBlbnRyeSwgaWYgc3R1bWJsZSB1cG9uICphbnkqIGludmFsaWQgZGVzY3JpcHRvciwgcmV3aW5kXG4tXHQgKiBjdXJyZW50IHBhY2tldCB0aGF0IGNvbnNpc3RzIG9mIGZyYWdzIGFuZCBzdG9wIHRoZSBwcm9jZXNzaW5nXG4tXHQgKi9cbiBcdHdoaWxlIChjYWNoZWRfY29ucyAhPSBxLVx1MDAzZWNhY2hlZF9wcm9kIFx1MDAyNlx1MDAyNiBuYl9lbnRyaWVzIFx1MDAzYyBtYXgpIHtcbiBcdFx0c3RydWN0IHhkcF9yeHR4X3JpbmcgKnJpbmcgPSAoc3RydWN0IHhkcF9yeHR4X3JpbmcgKilxLVx1MDAzZXJpbmc7XG4gXHRcdHUzMiBpZHggPSBjYWNoZWRfY29ucyBcdTAwMjYgcS1cdTAwM2VyaW5nX21hc2s7XG5AQCAtMjgyLDI2ICsyOTUsNDkgQEAgdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4gXHRcdGRlc2NzW25iX2VudHJpZXNdID0gcmluZy1cdTAwM2VkZXNjW2lkeF07XG4gXHRcdGNhY2hlZF9jb25zKys7XG4gXHRcdHBhcnNlX2Rlc2MocSwgcG9vbCwgXHUwMDI2ZGVzY3NbbmJfZW50cmllc10sIFx1MDAyNnBhcnNlZCk7XG4tXHRcdGlmICh1bmxpa2VseSghcGFyc2VkLnZhbGlkKSlcbi1cdFx0XHRicmVhaztcbitcdFx0aWYgKHVubGlrZWx5KCFwYXJzZWQudmFsaWQpKSB7XG4rXHRcdFx0aWYgKCFkcmFpbiBcdTAwMjZcdTAwMjYgIW5yX2ZyYWdzIFx1MDAyNlx1MDAyNiAhcGFyc2VkLm1iKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdFx0ZHJhaW4gPSB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdG5yX2ZyYWdzKys7XG4rXHRcdG5iX2VudHJpZXMrKztcbiBcbiBcdFx0aWYgKGxpa2VseSghcGFyc2VkLm1iKSkge1xuLVx0XHRcdHRvdGFsX2Rlc2NzICs9IChucl9mcmFncyArIDEpO1xuLVx0XHRcdG5yX2ZyYWdzID0gMDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRucl9mcmFncysrO1xuLVx0XHRcdGlmIChucl9mcmFncyA9PSBwb29sLVx1MDAzZXhkcF96Y19tYXhfc2Vncykge1xuK1x0XHRcdGlmICh1bmxpa2VseShkcmFpbikpIHtcbitcdFx0XHRcdGJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFncztcbitcdFx0XHRcdFdSSVRFX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCwgZmFsc2UpO1xuIFx0XHRcdFx0bnJfZnJhZ3MgPSAwO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuK1xuK1x0XHRcdGJhdGNoLnR4X2Rlc2NzICs9IG5yX2ZyYWdzO1xuK1x0XHRcdG5yX2ZyYWdzID0gMDtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAobnJfZnJhZ3MgPT0gcG9vbC1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpXG4rXHRcdFx0ZHJhaW4gPSB0cnVlO1xuK1x0fVxuK1xuK1x0aWYgKG5yX2ZyYWdzKSB7XG4rXHRcdGlmIChkcmFpbikge1xuK1x0XHRcdGJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFncztcbitcdFx0XHRXUklURV9PTkNFKHhzLVx1MDAzZWRyYWluX2NvbnQsIHRydWUpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGlmIChuYl9lbnRyaWVzID09IG1heClcbitcdFx0XHRcdGJhdGNoLmJ1ZGdldF9saW1pdGVkID0gdHJ1ZTtcbitcdFx0XHRjYWNoZWRfY29ucyAtPSBucl9mcmFncztcbiBcdFx0fVxuLVx0XHRuYl9lbnRyaWVzKys7XG4gXHR9XG4gXG4tXHRjYWNoZWRfY29ucyAtPSBucl9mcmFncztcbitcdHJlbGVhc2VkID0gY2FjaGVkX2NvbnMgLSBxLVx1MDAzZWNhY2hlZF9jb25zO1xuIFx0LyogUmVsZWFzZSB2YWxpZCBwbHVzIGFueSBpbnZhbGlkIGVudHJpZXMgKi9cbi1cdHhza3FfY29uc19yZWxlYXNlX24ocSwgY2FjaGVkX2NvbnMgLSBxLVx1MDAzZWNhY2hlZF9jb25zKTtcbi1cdHJldHVybiB0b3RhbF9kZXNjcztcbitcdHhza3FfY29uc19yZWxlYXNlX24ocSwgcmVsZWFzZWQpO1xuK1x0YmF0Y2guY29uc3VtZWRfZGVzY3MgPSByZWxlYXNlZDtcbitcdHJldHVybiBiYXRjaDtcbiB9XG4gXG4gLyogRnVuY3Rpb25zIGZvciBjb25zdW1lcnMgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuaW5kZXggNmViOTA5NmQwODRjMDEuLjdhYmI0OTM1ZWRmOWFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuQEAgLTQyNywxNCArNDI3LDE0IEBAIHN0YXRpYyB1MzIgcGt0X25iX2ZyYWdzKHUzMiBmcmFtZV9zaXplLCBzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbSwgc3RydWN0IHBrXG4gXHR9XG4gXG4gXHQvKiBTZWFyY2ggZm9yIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBpbiB2ZXJiYXRpbSBtb2RlICovXG4tXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4rXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpKVxuIFx0XHRyZXR1cm4gbmJfZnJhZ3M7XG4gXG4gXHRuZXh0X2ZyYWcgPSBwa3Rfc3RyZWFtLVx1MDAzZWN1cnJlbnRfcGt0X25iO1xuIFx0cGt0Kys7XG4gXHR3aGlsZSAobmV4dF9mcmFnKysgXHUwMDNjIHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cykge1xuIFx0XHRuYl9mcmFncysrO1xuLVx0XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4rXHRcdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXHUwMDNlb3B0aW9ucykpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHBrdCsrO1xuIFx0fVxuQEAgLTY2NSwxMSArNjY1LDExIEBAIHN0YXRpYyBzdHJ1Y3QgcGt0X3N0cmVhbSAqX19wa3Rfc3RyZWFtX2dlbmVyYXRlX2N1c3RvbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzXG4gXHRcdFx0aWYgKCFmcmFtZS1cdTAwM2V2YWxpZCB8fCAhcGt0X2NvbnRpbnVlcyhmcmFtZS1cdTAwM2VvcHRpb25zKSlcbiBcdFx0XHRcdHBheWxvYWQrKztcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAoZnJhbWUtXHUwMDNldmFsaWQpXG4rXHRcdFx0aWYgKGZyYW1lLVx1MDAzZXZhbGlkKSB7XG4gXHRcdFx0XHRsZW4gKz0gZnJhbWUtXHUwMDNlbGVuO1xuLVx0XHRcdGlmIChmcmFtZS1cdTAwM2V2YWxpZCBcdTAwMjZcdTAwMjYgcGt0X2NvbnRpbnVlcyhmcmFtZS1cdTAwM2VvcHRpb25zKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuK1x0XHRcdFx0aWYgKHBrdF9jb250aW51ZXMoZnJhbWUtXHUwMDNlb3B0aW9ucykpXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbiBcdFx0XHRwa3QtXHUwMDNlcGt0X25iID0gcGt0X25iO1xuIFx0XHRcdHBrdC1cdTAwM2VsZW4gPSBsZW47XG4gXHRcdFx0cGt0LVx1MDAzZXZhbGlkID0gZnJhbWUtXHUwMDNldmFsaWQ7XG5AQCAtMTIwOSw2ICsxMjA5LDcgQEAgc3RhdGljIGludCBfX3NlbmRfcGt0cyhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB4c2stXHUwMDNlYmF0Y2hfc2l6ZTsgaSsrKSB7XG4gXHRcdHN0cnVjdCBwa3QgKnBrdCA9IHBrdF9zdHJlYW1fZ2V0X25leHRfdHhfcGt0KHBrdF9zdHJlYW0pO1xuIFx0XHR1MzIgbmJfZnJhZ3NfbGVmdCwgbmJfZnJhZ3MsIGJ5dGVzX3dyaXR0ZW4gPSAwO1xuK1x0XHRzdHJ1Y3QgcGt0ICpmaXJzdF9wa3QgPSBwa3Q7XG4gXG4gXHRcdGlmICghcGt0KVxuIFx0XHRcdGJyZWFrO1xuQEAgLTEyNTMsNiArMTI1NCw4IEBAIHN0YXRpYyBpbnQgX19zZW5kX3BrdHMoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLFxuIFx0XHRpZiAocGt0IFx1MDAyNlx1MDAyNiBwa3QtXHUwMDNldmFsaWQpIHtcbiBcdFx0XHR2YWxpZF9wa3RzKys7XG4gXHRcdFx0dmFsaWRfZnJhZ3MgKz0gbmJfZnJhZ3M7XG4rXHRcdH0gZWxzZSBpZiAocGt0X3N0cmVhbS1cdTAwM2V2ZXJiYXRpbSBcdTAwMjZcdTAwMjYgcGt0X2NvbnRpbnVlcyhmaXJzdF9wa3QtXHUwMDNlb3B0aW9ucykpIHtcbitcdFx0XHR2YWxpZF9mcmFncyArPSBuYl9mcmFncztcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTIwOTksMTMgKzIxMDIsMTYgQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRcdHswLCAwLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgYWRkcmVzcyBpbiB0aGUgc2Vjb25kIGZyYW1lICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuLVx0XHR7dW1lbV9zeiwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbitcdFx0e3VtZW1fc3ogKiAyLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuK1x0XHR7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4rXHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogSW52YWxpZCBvcHRpb25zIGluIHRoZSBtaWRkbGUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhTS19ERVNDX19JTlZBTElEX09QVElPTn0sXG4rXHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogVHJhbnNtaXQgMiBmcmFncywgcmVjZWl2ZSAzICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIFhEUF9QS1RfQ09OVER9LFxuIFx0XHR7MCwgWFNLX1VNRU1fX01BWF9GUkFNRV9TSVpFLCAwLCB0cnVlLCAwfSxcbkBAIC0yMTE3LDggKzIxMjMsOCBAQCBpbnQgdGVzdGFwcF9pbnZhbGlkX2Rlc2NfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcbiBcdGlmICh1bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlKSB7XG4gXHRcdC8qIENyb3NzaW5nIGEgY2h1bmsgYm91bmRhcnkgYWxsb3dlZCAqL1xuLVx0XHRwa3RzWzEyXS52YWxpZCA9IHRydWU7XG4tXHRcdHBrdHNbMTNdLnZhbGlkID0gdHJ1ZTtcbitcdFx0cGt0c1sxNV0udmFsaWQgPSB0cnVlO1xuK1x0XHRwa3RzWzE2XS52YWxpZCA9IHRydWU7XG4gXHR9XG4gXG4gXHR0ZXN0LVx1MDAzZW10dSA9IE1BWF9FVEhfSlVNQk9fU0laRTtcbkBAIC0yMjcwLDcgKzIyNzYsNyBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHRtYXhfZnJhZ3MgKz0gMTtcbiBcdH1cbiBcbi1cdHBrdHMgPSBjYWxsb2MoMiAqIG1heF9mcmFncyArIDIsIHNpemVvZihzdHJ1Y3QgcGt0KSk7XG4rXHRwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgKyAzLCBzaXplb2Yoc3RydWN0IHBrdCkpO1xuIFx0aWYgKCFwa3RzKVxuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFxuQEAgLTIyODgsMjQgKzIyOTQsMzAgQEAgaW50IHRlc3RhcHBfdG9vX21hbnlfZnJhZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdH1cbiBcdHBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDtcbiBcbi1cdC8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0XG4tXHQgKiBjb250aW51ZXMgb24gdGhlIGxhc3QgZnJhZ1xuLVx0ICovXG4tXHRmb3IgKGkgPSBtYXhfZnJhZ3MgKyAxOyBpIFx1MDAzYyAyICogbWF4X2ZyYWdzICsgMTsgaSsrKSB7XG4rXHQvKiBBbiBpbnZhbGlkIHBhY2tldCB3aXRoIHRoZSBtYXggKyAxIGFtb3VudCBvZiBmcmFncyAqL1xuK1x0Zm9yIChpID0gbWF4X2ZyYWdzICsgMTsgaSBcdTAwM2MgMiAqIG1heF9mcmFncyArIDI7IGkrKykge1xuIFx0XHRwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTtcbiBcdFx0cGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDtcbi1cdFx0cGt0c1tpXS52YWxpZCA9IGZhbHNlO1xuK1x0XHRwa3RzW2ldLnZhbGlkID0gdHJ1ZTtcbiBcdH1cbitcdHBrdHNbMiAqIG1heF9mcmFncyArIDFdLm9wdGlvbnMgPSAwO1xuIFxuIFx0LyogVmFsaWQgcGFja2V0IGZvciBzeW5jaCAqL1xuLVx0cGt0c1syICogbWF4X2ZyYWdzICsgMV0ubGVuID0gTUlOX1BLVF9TSVpFO1xuLVx0cGt0c1syICogbWF4X2ZyYWdzICsgMV0udmFsaWQgPSB0cnVlO1xuK1x0cGt0c1syICogbWF4X2ZyYWdzICsgMl0ubGVuID0gTUlOX1BLVF9TSVpFO1xuK1x0cGt0c1syICogbWF4X2ZyYWdzICsgMl0udmFsaWQgPSB0cnVlO1xuIFxuLVx0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgKyAyKSkge1xuK1x0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgKyAzKSkge1xuIFx0XHRmcmVlKHBrdHMpO1xuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0fVxuIFxuK1x0LyogVGhlIGdlbmVyYXRlZCBUeCBzdHJlYW0gbXVzdCBrZWVwIHRoZSB0b28tYmlnIHBhY2tldCB2YWxpZCBzbyB0aGF0XG4rXHQgKiBfX3NlbmRfcGt0cygpIGFjY291bnRzIGl0cyBkZXNjcmlwdG9ycyBpbiBvdXRzdGFuZGluZ190eC4gVGhlIFJ4XG4rXHQgKiBzdHJlYW0sIGhvd2V2ZXIsIG11c3Qgbm90IGV4cGVjdCB0aGlzIHBhY2tldCBvbiB0aGUgd2lyZS5cbitcdCAqL1xuK1x0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNlcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzJdLnZhbGlkID0gZmFsc2U7XG4rXHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2Vwa3Rfc3RyZWFtLVx1MDAzZW5iX3ZhbGlkX2VudHJpZXMtLTtcbitcbiBcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcbiBcdGZyZWUocGt0cyk7XG4gXHRyZXR1cm4gcmV0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMjM6NTY6MjcuNzU5ODY0MDczWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMxMDMwMjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFGX1hEUCBNdWx0aS1CdWZmZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gQUZfWERQLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgbXVsdGktYnVmZmVyIHBhY2tldHMuIEl0J3MgdG91Y2hpbmcgYSBsb3Qgb2Yga2V5IGFyZWFzOiBgeGRwX3NvY2suaGAsIGB4c2tfYnVmZl9wb29sLmhgLCBhbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZmlsZXMgbGlrZSBgeHNrLmNgLCBgeHNrX2J1ZmZfcG9vbC5jYCwgYW5kIGB4c2tfcXVldWUuaGAsIGFsb25nIHdpdGggaXRzIHNlbGZ0ZXN0cy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWJvdXQgaW1wcm92aW5nIGhvdyB3ZSBkZWFsIHdpdGggaW52YWxpZCBkZXNjcmlwdG9ycyBvciBzaXR1YXRpb25zIHdoZXJlIHdlIGhhdmUgdG9vIG1hbnkgcGFja2V0IGZyYWdtZW50cy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGVyZm9ybWFuY2UgYW5kIGVycm9yIGhhbmRsaW5nIGltcHJvdmVtZW50LiBUaGV54oCZdmUgaW50cm9kdWNlZCBhIGBkcmFpbl9jb250YCBmaWVsZCBpbiBgeGRwX3NvY2tgIGFuZCBhIGB4c2tfdHhfYmF0Y2hgIHN0cnVjdHVyZSB0byBoYW5kbGUgZGVzY3JpcHRvciBiYXRjaGluZyBhbmQgcmVjbGFtYXRpb24sIHdoaWNoIEkgdGhpbmsgaXMgYSBzbWFydCBtb3ZlLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkgd2FudCB0byBjb25maXJtIHRoYXQgQUZfWERQIGlzLCBpbiBmYWN0LCBhbiBhY3RpdmUsIGNvcmUgcGllY2Ugb2YgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LiBZZXAsIHRoYXQncyBjb3JyZWN0LiBHb29kLCB3ZSBjYW4gZm9jdXMgb3VyIGVmZm9ydHMgaGVyZS4gQW5kIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIGZ1enppbmcgdGhpcyBwYXRjaCBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCB0byBlbnN1cmUgaXRzIHJvYnVzdG5lc3MuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSXQncyBvYnZpb3VzbHkgZGVwZW5kZW50IG9uIGBDT05GSUdfWERQX1NPQ0tFVFM9eWAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTEw9eWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBcblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggaXMgY2xlYXJseSB6ZXJvaW5nIGluIG9uIGEgbnVtYmVyIG9mIGtleSBmdW5jdGlvbnM6IGB4c2tfdHhfY29tcGxldGVkYCwgYHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2tgLCBhIG5ldyBiYXRjaGluZyBmdW5jdGlvbjogYHhza190eF9jb21taXRfYmF0Y2hgLCBzZXZlcmFsIG5ldyBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCB2YXJpYW50cywgdGhlIGB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZGAgYW5kIHNvbWUgY29yZSBoYW5kbGluZyBmdW5jdGlvbnMgZm9yIGRyb3AsIGJ1aWxkaW5nIGFuZCB0cmFuc21pc3Npb24gdmlhIGB4c2tfZHJvcF9za2JgLCBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAsIGB4c2tfYnVpbGRfc2tiYCwgYW5kIGBfX3hza19nZW5lcmljX3htaXRgLCBwbHVzIHNvbWUgc2V0dXAgZnVuY3Rpb25zIGxpa2UgYHhza19iaW5kYCwgYHhwX2FsbG9jX3R4X2Rlc2NzYCwgYHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW1gLCBhbmQgYHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2hgLiBUaGF0J3MgcXVpdGUgYSB3aWRlIGltcGFjdCwgc28gSSdsbCB3YW50IHRvIGZvY3VzIHNwZWNpZmljYWxseSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXBzIHdpbGwgYmUgdG8gZ3JlcCBmb3IgYHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAgYW5kIGBfX3hza19nZW5lcmljX3htaXRgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGJlaW5nIHVzZWQgaW4gdGhlIGNvZGUgYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBwcmltYXJ5IHNjb3BlIG9mIHRoZSBjaGFuZ2VzIGFuZCBndWlkZSBteSBkZWVwIGRpdmUgaW50byB0aGUgcGF0Y2gncyBpbXBsZW1lbnRhdGlvbiBhbmQgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNDIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQyMzo1NjozNS4wNzAxNjc5OTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYwMDg3MjkxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTc5MT1zdGF0aWMgdm9pZCB0c25lcF94ZHBfeG1pdF96YyhzdHJ1Y3QgdHNuZXBfdHggKnR4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTgwNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM6ODA1OlxcdGJhdGNoID0geHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHR4LVxcdTAwM2V4c2tfcG9vbCwgZGVzY19hdmFpbGFibGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy04MDYtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJhdGNoOyBpKyspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTIteHNrLmM9MzkwPWJvb2wgZHBhYTJfeHNrX3R4KHN0cnVjdCBkcGFhMl9ldGhfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi14c2suYy00MDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXhzay5jOjQxMDpcXHRiYXRjaCA9IHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChjaC1cXHUwMDNleHNrX3Bvb2wsIGJ1ZGdldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLXhzay5jLTQxMS1cXHRpZiAoIWJhdGNoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9MTQ4Mj1zdGF0aWMgYm9vbCBmZWNfZW5ldF94c2tfeG1pdChzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMTUwNS1cXHRidWRnZXQgPSBtaW4oZnJlZV9iZHMsIEZFQ19YU0tfVFhfQlVER0VUX01BWCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MTUwNjpcXHRiYXRjaCA9IHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCBidWRnZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTE1MDctXFx0aWYgKCFiYXRjaClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYz01Nzk9c3RhdGljIGJvb2wgaTQwZV94bWl0X3pjKHN0cnVjdCBpNDBlX3JpbmcgKnhkcF9yaW5nLCB1bnNpZ25lZCBpbnQgYnVkZ2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jLTU4NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmM6NTg1OlxcdG5iX3BrdHMgPSB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goeGRwX3JpbmctXFx1MDAzZXhza19wb29sLCBidWRnZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYy01ODYtXFx0aWYgKCFuYl9wa3RzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suYz03OTE9Ym9vbCBpY2VfeG1pdF96YyhzdHJ1Y3QgaWNlX3R4X3JpbmcgKnhkcF9yaW5nLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHNrX3Bvb2wpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5jLTgwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5jOjgwNzpcXHRuYl9wa3RzID0geHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHhza19wb29sLCBidWRnZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmMtODA4LVxcdGlmICghbmJfcGt0cylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfeHNrLmM9NDY1PWJvb2wgaWdiX3htaXRfemMoc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHNrX3Bvb2wpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3hzay5jLTQ4MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3hzay5jOjQ4MTpcXHRuYl9wa3RzID0geHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHhza19wb29sLCBidWRnZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfeHNrLmMtNDgyLVxcdGlmICghbmJfcGt0cylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3hzay5jPTIyOD12b2lkIG90eDJfemNfbmFwaV9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suYy0yMzQtXFx0YnVkZ2V0ID0gbWluKGJ1ZGdldCwgb3R4Ml9yZWFkX2ZyZWVfc3FlKHBmdmYsIHF1ZXVlKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmM6MjM1OlxcdGJhdGNoID0geHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHBvb2wsIGJ1ZGdldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmMtMjM2LVxcdGlmICghYmF0Y2gpXFxuLS1cXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM9MTQwNT1zdGF0aWMgaW50IHZpcnRuZXRfeHNrX3htaXRfYmF0Y2goc3RydWN0IHNlbmRfcXVldWUgKnNxLFxcbi0tXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTE0MTYtXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jOjE0MTc6XFx0bmJfcGt0cyA9IHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCBidWRnZXQpO1xcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0xNDE4LVxcdGlmICghbmJfcGt0cylcXG4tLVxcbmluY2x1ZGUvbmV0L2xpYmV0aC94c2suaD0yODU9bGliZXRoX3hza194bWl0X2RvX2J1bGsoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHZvaWQgKnhkcHNxLCB1MzIgYnVkZ2V0LFxcbi0tXFxuaW5jbHVkZS9uZXQvbGliZXRoL3hzay5oLTI5OS1cXG5pbmNsdWRlL25ldC9saWJldGgveHNrLmg6MzAwOlxcdG4gPSB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gocG9vbCwgYnVkZ2V0KTtcXG5pbmNsdWRlL25ldC9saWJldGgveHNrLmgtMzAxLVxcdGJ1bGsgPSBjb250YWluZXJfb2YoXFx1MDAyNnBvb2wtXFx1MDAzZXR4X2Rlc2NzWzBdLCB0eXBlb2YoKmJ1bGspLCBkZXNjKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oPTI4PWJvb2wgeHNrX3R4X3BlZWtfZGVzYyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9kZXNjICpkZXNjKTtcXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDoyOTp1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4KTtcXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC0zMC12b2lkIHhza190eF9yZWxlYXNlKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oPTMwOT1zdGF0aWMgaW5saW5lIGJvb2wgeHNrX3R4X3BlZWtfZGVzYyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTMxNC1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDozMTU6c3RhdGljIGlubGluZSB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4KVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTMxNi17XFxuLS1cXG5uZXQveGRwL3hzay5jPTYyMz1zdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxcbm5ldC94ZHAveHNrLmM6NjI0Ol9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbm5ldC94ZHAveHNrLmMtNjI1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4X2Rlc2NzKVxcbi0tXFxubmV0L3hkcC94c2suYz02NTA9eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9kZXNjcylcXG4tLVxcbm5ldC94ZHAveHNrLmMtNjkyLVxcbm5ldC94ZHAveHNrLmM6NjkzOlxcdFxcdGN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcXG5uZXQveGRwL3hzay5jLTY5NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBwb29sLVxcdTAwM2V0eF9kZXNjcyArIG9mZnNldCxcXG4tLVxcbm5ldC94ZHAveHNrLmMtNzI0LVxcbm5ldC94ZHAveHNrLmM6NzI1OnUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxcbm5ldC94ZHAveHNrLmMtNzI2LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNzYyLVxcdFxcdHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gocG9vbCwgbmJfcGt0cykgOlxcbm5ldC94ZHAveHNrLmM6NzYzOlxcdFxcdF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHBvb2wsIHhzLFxcbm5ldC94ZHAveHNrLmMtNzY0LVxcdFxcdFxcdFxcdFxcdFxcdCBwb29sLVxcdTAwM2V0eF9kZXNjcyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtNzcxLX1cXG5uZXQveGRwL3hzay5jOjc3MjpFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XFxubmV0L3hkcC94c2suYy03NzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDIzOjU2OjM4LjY3MTA0NTg5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MDIwNDcwODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBRl9YRFAgVFggUGF0aCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgQUZfWERQIHRyYW5zbWlzc2lvbiBwYXRoLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgbXVsdGktYnVmZmVyIHBhY2tldHMgYW5kIGludmFsaWQgZGVzY3JpcHRvcnMuIEknbSBzZWVpbmcgdGhhdCB0aGUga2V5IGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGlzIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCB3aGljaCBpcyBwcmV0dHkgZnVuZGFtZW50YWwgc2luY2UgdmFyaW91cyBkcml2ZXJzIOKAkyB0c25lcCwgZHBhYTIsIGZlYywgaTQwZSwgaWNlLCBpZ2IsIG9jdGVvbnR4MiwgdmlydGlvX25ldCwgbGliZXRoLCBhbmQgdGhlIGdlbmVyaWMgWERQIHRyYW5zbWlzc2lvbiB2aWEgYF9feHNrX2dlbmVyaWNfeG1pdGAg4oCTIGFsbCByZWx5IG9uIGl0LlxuXG5GaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBYRFBfU09DS0VUU2AgYW5kIGBCUEZfU1lTQ0FMTGAgYXJlIHRoZSBrZXkgb25lcywgd2l0aCBgQ09ORklHX1hEUF9TT0NLRVRTYCBiZWluZyB0aGUgcHJpbWFyeSBlbmFibGVyLlxuXG5Ob3csIGxldCdzIHplcm8gaW4gb24gdGhlIGNvcmUgY2hhbmdlcy4gVGhlIGluaXRpYWwgbGlzdCBpbmNsdWRlZCBhIGJyb2FkZXIgc2V0IG9mIHN5bWJvbHMuIFNpbmNlIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgICppcyogdGhlIG1haW4gVFggZnVuY3Rpb24gZm9yIEFGX1hEUCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGRpZmZlcmVudCBpbiB0aGUgKm1vZGlmaWVkKiBsb2dpYy4gVGhlIG5ldyBmdW5jdGlvbnMsIGxpa2UgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgIGFuZCBgX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgIGFyZSBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gYHhza190eF9jb21taXRfYmF0Y2hgLCBhbmQgYHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkYCBhcmUgY29tcGxldGVseSBuZXcgZW50cmllcyBpbiB0aGUgZmxvdy4gVGhlIGB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoYCBmdW5jdGlvbiBpcyBiZWluZyBhbHRlcmVkLlxuXG5UaGVyZWZvcmUsIG15IGZvY3VzIHNob3VsZCBiZSBvbjpcblxuKiAgIGB4c2tfdHhfY29tbWl0X2JhdGNoYFxuKiAgIGBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGBcbiogICBgeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaGBcbiogICBgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRgXG4qICAgYHhza19idWlsZF9za2JgXG4qICAgYHhza19idWlsZF9za2JfemVyb2NvcHlgXG4qICAgYF9feHNrX2dlbmVyaWNfeG1pdGBcblxuR29vZCwgYHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAgaXMgZXhwb3J0ZWQgYXMgYEVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKWAsIHNvIGl0IGlzIHB1YmxpY2x5IGF2YWlsYWJsZS4gSSB3aWxsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGhvdyB0aGVzZSBjaGFuZ2VzIGltcGFjdCB0aGUgZHJpdmVycyB0aGF0IGFyZSByZWx5aW5nIG9uIHRoaXMgY3JpdGljYWwgZnVuY3Rpb24sIHBhcnRpY3VsYXJseSB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlc2UgbmV3IGZ1bmN0aW9ucyBpbiB0aGUgZGF0YSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM1OSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQyMzo1Njo0Ni4zNzMwOTQ2MzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyMDk3NjA2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3hza19nZW5lcmljX3htaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQveGRwX3NvY2suaD00OD1zdHJ1Y3QgeGRwX3NvY2sge1xcbi0tXFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaC03Ny1cXG5pbmNsdWRlL25ldC94ZHBfc29jay5oOjc4OlxcdC8qIFdoZW4gX194c2tfZ2VuZXJpY194bWl0KCkgbXVzdCByZXR1cm4gYmVmb3JlIGl0IHNlZXMgdGhlIEVPUCBkZXNjcmlwdG9yIGZvciB0aGUgY3VycmVudFxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmgtNzktXFx0ICogcGFja2V0LCB0aGUgcGFydGlhbGx5IGJ1aWx0IHNrYiBpcyBzYXZlZCBoZXJlIHNvIHRoYXQgcGFja2V0IGJ1aWxkaW5nIGNhbiByZXN1bWUgaW4gbmV4dFxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg6ODA6XFx0ICogY2FsbCBvZiBfX3hza19nZW5lcmljX3htaXQoKS5cXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTgxLVxcdCAqL1xcbi0tXFxubmV0L3hkcC94c2suYz0xMDg3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbi0tXFxubmV0L3hkcC94c2suYy0xMTkyLVxcbm5ldC94ZHAveHNrLmM6MTE5MzpzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hkcC94c2suYy0xMTk0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTMwOD1zdGF0aWMgaW50IHhza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMzEzLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbm5ldC94ZHAveHNrLmM6MTMxNDpcXHRyZXQgPSBfX3hza19nZW5lcmljX3htaXQoc2spO1xcbm5ldC94ZHAveHNrLmMtMTMxNS1cXHQvKiBSZWFxdWlyZSBSQ1UgbG9jayBiZWZvcmUgZ29pbmcgaW50byBjb21tb24gY29kZS4gKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmM9ODk4PXN0YXRpYyBib29sIGtpY2tfdHhfd2l0aF9jaGVjayhzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIGludCAqcmV0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYy05MTAtXFx0ICogc2VuZCBpbiB0aGlzIGNhc2Ugd2hlcmUgaGl0dGluZyB0aGUgbWF4IGJ1ZGdldCBsaW1pdCBpbiB3aGlsZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmM6OTExOlxcdCAqIGxvb3AgaXMgdHJpZ2dlcmVkIGluIF9feHNrX2dlbmVyaWNfeG1pdCgpLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jLTkxMi1cXHQgKiB0aGUgbnVtYmVyIG9mIGRlc2NzIHRvIGJlIHNlbnQgaXMgbGFyZ2VyIHRoYW4gQG1heF9idWRnZXQsIG9yXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDIzOjU2OjQ5LjA5NDA3NjcyNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4Mzc4NjMyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQUZfWERQIE11bHRpLUJ1ZmZlciBCdWcgRml4IEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHJlc3NlcyBhIGJ1ZyBpbiBBRl9YRFAncyBtdWx0aS1idWZmZXIgaGFuZGxpbmcuIE15IGZpcnN0IHRob3VnaHQgaXMsIHRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBlc3BlY2lhbGx5IHdpdGggdGhlIHJpc2Ugb2YgWERQIGFuZCBBRl9YRFAuIFRoaXMgZml4IGludHJvZHVjZXMgYGRyYWluX2NvbnRgLCB3aGljaCBpcyB1c2VkIHRvIHRyYWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgcGFja2V0IGlzIGJlaW5nIGRyYWluZWQgYmVjYXVzZSBvZiBlaXRoZXIgaW52YWxpZCBkZXNjcmlwdG9ycyBvciBleGNlZWRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYWdtZW50cy4gVGhhdCBtYWtlcyBzZW5zZSwgd2UgbmVlZCByb2J1c3QgZXJyb3IgaGFuZGxpbmcgaW4gdGhpcyBzZWN0aW9uLlxuXG5UaGUgYFhEUF9TT0NLRVRTYCBjb25maWcgaXMgd2hhdCB3ZSdyZSB0YXJnZXRpbmcgaGVyZSwgdGhhdCdzIHdoYXQncyBkcml2aW5nIHRoaXMgQUZfWERQIGJlaGF2aW9yLiBMZXQgbWUgc2VlLi4uIEkndmUgZ290IGEgbGlzdCBvZiBzeW1ib2xzIHRvIGZvY3VzIG9uOiBgeHNrX3R4X2NvbW1pdF9iYXRjaGAsIGBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAsIGB4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoYCwgYHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkYCwgYHhza19idWlsZF9za2JgLCBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAsIGBfX3hza19nZW5lcmljX3htaXRgLCBhbmQgYHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2hgLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IGBDT05GSUdfWERQX1NPQ0tFVFNgIGlzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZyBmb3IgQUZfWERQIGluIHRoaXMgY29udGV4dC4gWWVwLCB0aGF0J3MgdGhlIG9uZS4gTm93LCBsZXQncyBjaGVjayB0aGUgdmlzaWJpbGl0eSBvZiB0aG9zZSBzeW1ib2xzLiBMb29rcyBsaWtlIGB4c2tfdHhfY29tbWl0X2JhdGNoYCwgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCwgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgLCBgeHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRgLCBgeHNrX2J1aWxkX3NrYmAsIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YCwgYW5kIGBfX3hza19nZW5lcmljX3htaXRgIGFyZSBhbGwgc3RhdGljLCBhbmQgYHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2hgIGlzIHN0YXRpYyBpbmxpbmUuXG5cblNvLCB3ZSBjYW4gbWFrZSBhIGNsZWFuIGxpc3Qgb2YgdGhlIG5vbi1pbmxpbmUgb25lcy5cblxuT2theSwgbXkgcmVhc29uaW5nIGhlcmUgaXM6IHRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBob3cgd2UgaGFuZGxlIG11bHRpLWJ1ZmZlciBwYWNrZXRzLiBFc3NlbnRpYWxseSwgaXQncyBhYm91dCBoYW5kbGluZyBwYWNrZXRzIHdpdGggYmFkIGRlc2NyaXB0b3JzIG9yIHRvbyBtYW55IGZyYWdtZW50cy4gVGhpcyBhZmZlY3RzIHRoZSB0cmFuc21pc3Npb24gbG9naWMgb2YgQUZfWERQIGFuZCBpbnRyb2R1Y2VzIG5ldyBkZXNjcmlwdG9yIGJhdGNoaW5nIGFuZCByZWNsYWltaW5nLCB3aGljaCBhbHNvIHRvdWNoZXMgdGhlIGdlbmVyaWMgWERQIHRyYW5zbWl0IHBhdGggZm9yIGRyYWluaW5nIGJhZCBwYWNrZXRzLiBUaGlzIGlzICpjb3JlKiBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHksIGFuZCB0aGlzIGlzIHJlYWNoYWJsZSB2aWEgQUZfWERQIHNvY2tldHMgZnJvbSB1c2Vyc3BhY2UuIFdoaWNoIG1lYW5zLi4uIGZ1enppbmchIExldCdzIGdldCB0aGUgcmVzdWx0cyBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDgxLCJPdXRwdXRUb2tlbnMiOjIwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQyMzo1Njo1Ni45MzE5NDIxMDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjcwOTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfdHhfY29tbWl0X2JhdGNoXCIsXG4gICAgXCJfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWRcIixcbiAgICBcInhza19idWlsZF9za2JcIixcbiAgICBcInhza19idWlsZF9za2JfemVyb2NvcHlcIixcbiAgICBcIl9feHNrX2dlbmVyaWNfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgdHJhbnNtaXNzaW9uIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgbXVsdGktYnVmZmVyIHBhY2tldHMgd2l0aCBpbnZhbGlkIGRlc2NyaXB0b3JzIG9yIGV4Y2VlZGluZyB0aGUgbWF4aW11bSBhbGxvd2VkIGZyYWdtZW50cy4gSXQgaW50cm9kdWNlcyBuZXcgYmF0Y2hpbmcgYW5kIHJlY2xhaW1pbmcgbG9naWMgZm9yIGRlc2NyaXB0b3JzLCBhbmQgdXBkYXRlcyB0aGUgZ2VuZXJpYyBYRFAgdHJhbnNtaXQgcGF0aCB0byBkcmFpbiBpbnZhbGlkIHBhY2tldHMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1hEUCBzb2NrZXRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhEUF9TT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieHNrX3R4X2NvbW1pdF9iYXRjaFwiLFxuICAgIFwiX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hcIixcbiAgICBcInhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hcIixcbiAgICBcInhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkXCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiXCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiX3plcm9jb3B5XCIsXG4gICAgXCJfX3hza19nZW5lcmljX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZfWERQIHRyYW5zbWlzc2lvbiBsb2dpYyB0byBjb3JyZWN0bHkgaGFuZGxlIG11bHRpLWJ1ZmZlciBwYWNrZXRzIHdpdGggaW52YWxpZCBkZXNjcmlwdG9ycyBvciBleGNlZWRpbmcgdGhlIG1heGltdW0gYWxsb3dlZCBmcmFnbWVudHMuIEl0IGludHJvZHVjZXMgbmV3IGJhdGNoaW5nIGFuZCByZWNsYWltaW5nIGxvZ2ljIGZvciBkZXNjcmlwdG9ycywgYW5kIHVwZGF0ZXMgdGhlIGdlbmVyaWMgWERQIHRyYW5zbWl0IHBhdGggdG8gZHJhaW4gaW52YWxpZCBwYWNrZXRzLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBBRl9YRFAgc29ja2V0cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowdtn97[1] Phase: Succeeded StartedAt: 2026-07-14 23:57:09 +0000 UTC FinishedAt: 2026-07-14 23:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-14 23:57:09 +0000 UTC FinishedAt: 2026-07-14 23:57:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2] Phase: Succeeded StartedAt: 2026-07-14 23:57:09 +0000 UTC FinishedAt: 2026-07-15 04:27:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-14 23:57:09 +0000 UTC FinishedAt: 2026-07-15 04:27:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-14 23:57:09 +0000 UTC FinishedAt: 2026-07-14 23:57:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-14 23:57:09 +0000 UTC FinishedAt: 2026-07-14 23:57:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdtn97/series-workflowdtn97-convert-artifact-2434414539/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-14 23:57:19 +0000 UTC FinishedAt: 2026-07-15 00:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-14 23:57:19 +0000 UTC FinishedAt: 2026-07-15 00:39:23 +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:*06f958b9-1ec4-43d9-b54a-0ffb5ac75e90,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-workflowdtn97/series-workflowdtn97-convert-artifact-2434414539/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": "70761b06-85cf-4280-9f8a-94adf12c132d", "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-workflowdtn97/series-workflowdtn97-build-action-1910353609/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-14 23:57:19 +0000 UTC FinishedAt: 2026-07-15 00:39:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*06f958b9-1ec4-43d9-b54a-0ffb5ac75e90,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-workflowdtn97/series-workflowdtn97-convert-artifact-2434414539/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": "70761b06-85cf-4280-9f8a-94adf12c132d", "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-workflowdtn97/series-workflowdtn97-build-action-1910353609/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-15 00:39:23 +0000 UTC FinishedAt: 2026-07-15 00:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-15 00:39:23 +0000 UTC FinishedAt: 2026-07-15 00:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-15 00:39:23 +0000 UTC FinishedAt: 2026-07-15 00:39:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-15 00:39:23 +0000 UTC FinishedAt: 2026-07-15 00:39:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdtn97/series-workflowdtn97-convert-artifact-2916454434/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-15 00:39:33 +0000 UTC FinishedAt: 2026-07-15 00:41:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-15 00:39:33 +0000 UTC FinishedAt: 2026-07-15 00:41:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*70761b06-85cf-4280-9f8a-94adf12c132d,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-workflowdtn97/series-workflowdtn97-build-action-1910353609/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-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-15 00:41:44 +0000 UTC FinishedAt: 2026-07-15 00:41:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-15 00:41:44 +0000 UTC FinishedAt: 2026-07-15 00:41:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-15 00:41:44 +0000 UTC FinishedAt: 2026-07-15 01:24:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-15 00:41:44 +0000 UTC FinishedAt: 2026-07-15 01:24:05 +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:*06f958b9-1ec4-43d9-b54a-0ffb5ac75e90,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-workflowdtn97/series-workflowdtn97-convert-artifact-2916454434/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": "c7963145-9695-4d46-87ad-8b747fb674d8", "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-workflowdtn97/series-workflowdtn97-build-action-1001312374/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-15 00:41:44 +0000 UTC FinishedAt: 2026-07-15 01:23:55 +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:*06f958b9-1ec4-43d9-b54a-0ffb5ac75e90,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-workflowdtn97/series-workflowdtn97-convert-artifact-2916454434/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": "c7963145-9695-4d46-87ad-8b747fb674d8", "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-workflowdtn97/series-workflowdtn97-build-action-1001312374/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-15 01:24:05 +0000 UTC FinishedAt: 2026-07-15 01:24:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-15 01:24:05 +0000 UTC FinishedAt: 2026-07-15 01:24:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-15 01:24:05 +0000 UTC FinishedAt: 2026-07-15 01:25:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-15 01:24:05 +0000 UTC FinishedAt: 2026-07-15 01:25:48 +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:*c7963145-9695-4d46-87ad-8b747fb674d8,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-workflowdtn97/series-workflowdtn97-build-action-1001312374/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-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-15 01:25:59 +0000 UTC FinishedAt: 2026-07-15 04:27:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-15 01:25:59 +0000 UTC FinishedAt: 2026-07-15 04:27:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"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:*70761b06-85cf-4280-9f8a-94adf12c132d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c7963145-9695-4d46-87ad-8b747fb674d8,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-workflowdtn97/series-workflowdtn97-build-action-1910353609/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-workflowdtn97/series-workflowdtn97-build-action-1001312374/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-15 01:25:59 +0000 UTC FinishedAt: 2026-07-15 01:26:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-15 01:25:59 +0000 UTC FinishedAt: 2026-07-15 01:26:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"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-workflowdtn97/series-workflowdtn97-convert-artifact-3410406487/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-15 01:25:59 +0000 UTC FinishedAt: 2026-07-15 01:25:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-15 01:25:59 +0000 UTC FinishedAt: 2026-07-15 01:25:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-15 01:25:59 +0000 UTC FinishedAt: 2026-07-15 01:25:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-15 01:26:09 +0000 UTC FinishedAt: 2026-07-15 04:27:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtn97[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_commit_batch","__xsk_tx_peek_release_desc_batch","xsk_tx_peek_release_shared_desc_batch","xsk_cq_submit_addr_single_locked","xsk_build_skb","xsk_build_skb_zerocopy","__xsk_generic_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"6c4ca4c4-a0b3-475c-b34e-9d649039aaac","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-15 01:26:09 +0000 UTC FinishedAt: 2026-07-15 04:27:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*70761b06-85cf-4280-9f8a-94adf12c132d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c7963145-9695-4d46-87ad-8b747fb674d8,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-workflowdtn97/series-workflowdtn97-build-action-1910353609/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-workflowdtn97/series-workflowdtn97-build-action-1001312374/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-workflowdtn97/series-workflowdtn97-convert-artifact-3410406487/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,}