Name: series-workflowv5wcl Phase: Succeeded StartedAt: 2026-07-16 03:25:25 +0000 UTC FinishedAt: 2026-07-16 08:00:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[0] Phase: Succeeded StartedAt: 2026-07-16 03:25:25 +0000 UTC FinishedAt: 2026-07-16 03:49:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 03:25:25 +0000 UTC FinishedAt: 2026-07-16 03:49:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "58717b2a1365d06c8c64b72aa948541b53fe31eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "58717b2a1365d06c8c64b72aa948541b53fe31eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "e601f882-dcfd-4e92-b0cc-06dbaf1cc186" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vmap", "__vmalloc_node_range_noprof", "__vmap_pages_range_noflush", "vmap_pages_range_batched", "vmap_get_aligned_vm_area", "vmap_pages_range_noflush_walk", "vmap_pages_pte_range", "vmap_pages_pmd_range", "vmap_pages_pud_range", "vmap_pages_p4d_range", "arch_make_huge_pte" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXAmIzM0OywKICAgICYjMzQ7X192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O19fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoJiMzNDssCiAgICAmIzM0O3ZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZCYjMzQ7LAogICAgJiMzNDt2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWEmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19wdGVfcmFuZ2UmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19wbWRfcmFuZ2UmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19wdWRfcmFuZ2UmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19wNGRfcmFuZ2UmIzM0OywKICAgICYjMzQ7YXJjaF9tYWtlX2h1Z2VfcHRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgY29udGlndW91cyBQVEUgbWFwcGluZ3MgZm9yIHZtYWxsb2Mgb24gYXJtNjQsIGFuZCB1cGRhdGVzIHZtYXAgdG8gc3VwcG9ydCBiYXRjaGVkIG1hcHBpbmcgZm9yIGNvbnRpZ3VvdXMgcGFnZXMuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZDE3MGFkZDRkZDFjMjc4NDJmOTNlZDNiYmFjNDRhMDg2Njc3MzhjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMDM6NDg6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaFxuaW5kZXggNGVjMWFjZDNjMWIzNDguLmQ2NjVmOWQ2ODc0MjJkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oXG5AQCAtMjMsMTAgJiM0MzsyMywxNCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBlbmQsIHU2NCBwZm4sXG4gXHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0KVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNpemU7XG4mIzQzO1xuIFx0LypcbiBcdCAqIElmIHRoZSBibG9jayBpcyBhdCBsZWFzdCBDT05UX1BURV9TSVpFIGluIHNpemUsIGFuZCBpcyBuYXR1cmFsbHlcbiBcdCAqIGFsaWduZWQgaW4gYm90aCB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBzcGFjZSwgdGhlbiB3ZSBjYW4gcHRlLW1hcCB0aGVcbiBcdCAqIGJsb2NrIHVzaW5nIHRoZSBQVEVfQ09OVCBiaXQgZm9yIG1vcmUgZWZmaWNpZW50IHVzZSBvZiB0aGUgVExCLlxuJiM0MztcdCAqIFRoZSByZXR1cm5lZCBtYXBwaW5nIHNpemUgbWF5IGNvdmVyIG11bHRpcGxlIENPTlRfUFRFX1NJWkUgYmxvY2tzLFxuJiM0MztcdCAqIGNhcHBlZCBiZWxvdyBQTURfU0laRS5cbiBcdCAqL1xuIFx0aWYgKG1heF9wYWdlX3NoaWZ0IFx1MDAzYyBDT05UX1BURV9TSElGVClcbiBcdFx0cmV0dXJuIFBBR0VfU0laRTtcbkBAIC00MCw3ICYjNDM7NDQsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoIUlTX0FMSUdORUQoUEZOX1BIWVMocGZuKSwgQ09OVF9QVEVfU0laRSkpXG4gXHRcdHJldHVybiBQQUdFX1NJWkU7XG4gXG4tXHRyZXR1cm4gQ09OVF9QVEVfU0laRTtcbiYjNDM7XHRzaXplID0gbWluMyhlbmQgLSBhZGRyLCAxVUwgXHUwMDNjXHUwMDNjIG1heF9wYWdlX3NoaWZ0LCBQTURfU0laRSBcdTAwM2VcdTAwM2UgMSk7XG4mIzQzO1x0c2l6ZSA9IHJvdW5kZG93bl9wb3dfb2ZfdHdvKHNpemUpO1xuJiM0MztcdHJldHVybiBzaXplO1xuIH1cbiBcbiAjZGVmaW5lIGFyY2hfdm1hcF9wdGVfcmFuZ2VfdW5tYXBfc2l6ZSBhcmNoX3ZtYXBfcHRlX3JhbmdlX3VubWFwX3NpemVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcbmluZGV4IDMwNzcyYTkwOWFlYTNlLi43NzlkMzI5ODZkMGQ2NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jXG5AQCAtOTQsNiAmIzQzOzk0LDExIEBAIHN0YXRpYyBpbnQgZmluZF9udW1fY29udGlnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRyZXR1cm4gQ09OVF9QVEVTO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogbnVtX2NvbnRpZ19wdGVzKCksIHNldF9odWdlX3B0ZV9hdCgpIGFuZCBhcmNoX21ha2VfaHVnZV9wdGUoKSBjYW4gYmVcbiYjNDM7ICogdXNlZCBieSBub24taHVnZXRsYmZzKHZtYWxsb2MpIG1tIGNvZGUgdG8gc2V0IG11bHRpcGxlIGh1Z2UgbWFwcGluZ3NcbiYjNDM7ICogYXQgdGhlIFBURSBsZXZlbC5cbiYjNDM7ICovXG4gc3RhdGljIGlubGluZSBpbnQgbnVtX2NvbnRpZ19wdGVzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgc2l6ZV90ICpwZ3NpemUpXG4ge1xuIFx0aW50IGNvbnRpZ19wdGVzID0gMTtcbkBAIC0xMTAsNiAmIzQzOzExNSwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBudW1fY29udGlnX3B0ZXModW5zaWduZWQgbG9uZyBzaXplLCBzaXplX3QgKnBnc2l6ZSlcbiBcdFx0Y29udGlnX3B0ZXMgPSBDT05UX1BURVM7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiYjNDM7XHRcdGlmIChzaXplIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzYyBQTURfU0laRSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHRJU19BTElHTkVEKHNpemUsIENPTlRfUFRFX1NJWkUpKSB7XG4mIzQzO1x0XHRcdCpwZ3NpemUgPSBQQUdFX1NJWkU7XG4mIzQzO1x0XHRcdGNvbnRpZ19wdGVzID0gc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4gXHRcdFdBUk5fT04oIV9faHVnZXRsYl92YWxpZF9zaXplKHNpemUpKTtcbiBcdH1cbiBcbkBAIC0zNTksNiAmIzQzOzM3MCwxMCBAQCBwdGVfdCBhcmNoX21ha2VfaHVnZV9wdGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdCwgdm1fZmxhZ3NfdCBmbGFncylcbiBcdGNhc2UgQ09OVF9QVEVfU0laRTpcbiBcdFx0cmV0dXJuIHB0ZV9ta2NvbnQoZW50cnkpO1xuIFx0ZGVmYXVsdDpcbiYjNDM7XHRcdGlmIChwYWdlc2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgcGFnZXNpemUgXHUwMDNjIFBNRF9TSVpFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdElTX0FMSUdORUQocGFnZXNpemUsIENPTlRfUFRFX1NJWkUpKVxuJiM0MztcdFx0XHRyZXR1cm4gcHRlX21rY29udChlbnRyeSk7XG4mIzQzO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdHByX3dhcm4oXCYjMzQ7JXM6IHVucmVjb2duaXplZCBodWdlIHBhZ2Ugc2l6ZSAweCVseFxcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IDFhZmNhMzU2OGI5YjY1Li45NWZmY2EyMTk0Njc5MyAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jXG5AQCAtOTEsNiAmIzQzOzkxLDMzIEBAIHN0cnVjdCB2ZnJlZV9kZWZlcnJlZCB7XG4gc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB2ZnJlZV9kZWZlcnJlZCwgdmZyZWVfZGVmZXJyZWQpO1xuIFxuIC8qKiogUGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICoqKi9cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRyeSBjb250aWd1b3VzIG1hcHBpbmdzIGF0IHRoZSBQVEUgbGV2ZWwgZm9yIGFyY2hlcyB3aGljaCBzdXBwb3J0IHRoZW0sIGFuZCBpZlxuJiM0MzsgKiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4gRmFsbCBiYWNrIHRvIFBBR0VfU0laRSBtYXBwaW5ncyBvdGhlcndpc2UuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogbWFwcGluZyBzaXplLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZtYXBfc2V0X3B0ZXMocHRlX3QgKnB0ZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHU2NCBwZm4sXG4mIzQzO1x0XHRwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNpemU7XG4mIzQzO1xuJiM0MztcdHNpemUgPSBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplKGFkZHIsIGVuZCwgcGZuLCBtYXhfcGFnZV9zaGlmdCk7XG4mIzQzO1x0aWYgKHNpemUgIT0gUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHRwdGVfdCBlbnRyeSA9IHBmbl9wdGUocGZuLCBwcm90KTtcbiYjNDM7XG4mIzQzO1x0XHRlbnRyeSA9IGFyY2hfbWFrZV9odWdlX3B0ZShlbnRyeSwgaWxvZzIoc2l6ZSksIDApO1xuJiM0MztcdFx0c2V0X2h1Z2VfcHRlX2F0KFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgZW50cnksIHNpemUpO1xuJiM0MztcdFx0cmV0dXJuIHNpemU7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcbiYjNDM7XHRzZXRfcHRlX2F0KFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTtcbiYjNDM7XHRyZXR1cm4gUEFHRV9TSVpFO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXG4gXHRcdFx0dW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbkBAIC05OCw3ICYjNDM7MTI1LDggQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0cHRlX3QgKnB0ZTtcbiBcdHU2NCBwZm47XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbi1cdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNpemU7XG4mIzQzO1x0dW5zaWduZWQgaW50IHN0ZXBzO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghUEFHRV9BTElHTkVEKGVuZCAtIGFkZHIpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTE5LDIwICYjNDM7MTQ3LDkgQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdEJVRygpO1xuIFx0XHR9XG4gXG4tI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbi1cdFx0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTtcbi1cdFx0aWYgKHNpemUgIT0gUEFHRV9TSVpFKSB7XG4tXHRcdFx0cHRlX3QgZW50cnkgPSBwZm5fcHRlKHBmbiwgcHJvdCk7XG4tXG4tXHRcdFx0ZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIGlsb2cyKHNpemUpLCAwKTtcbi1cdFx0XHRzZXRfaHVnZV9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSwgc2l6ZSk7XG4tXHRcdFx0cGZuICYjNDM7PSBQRk5fRE9XTihzaXplKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLSNlbmRpZlxuLVx0XHRzZXRfcHRlX2F0KFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTtcbi1cdFx0cGZuJiM0MzsmIzQzOztcbi1cdH0gd2hpbGUgKHB0ZSAmIzQzOz0gUEZOX0RPV04oc2l6ZSksIGFkZHIgJiM0Mzs9IHNpemUsIGFkZHIgIT0gZW5kKTtcbiYjNDM7XHRcdHNpemUgPSB2bWFwX3NldF9wdGVzKHB0ZSwgYWRkciwgZW5kLCBwZm4sIHByb3QsIG1heF9wYWdlX3NoaWZ0KTtcbiYjNDM7XHRcdHN0ZXBzID0gUEZOX0RPV04oc2l6ZSk7XG4mIzQzO1x0fSB3aGlsZSAocHRlICYjNDM7PSBzdGVwcywgcGZuICYjNDM7PSBzdGVwcywgYWRkciAmIzQzOz0gc2l6ZSwgYWRkciAhPSBlbmQpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXHQqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7XG5AQCAtNTI0LDggJiM0Mzs1NDEsMTAgQEAgdm9pZCB2dW5tYXBfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZClcbiBcbiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0dW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsXG4tXHRcdHBndGJsX21vZF9tYXNrICptYXNrKVxuJiM0MztcdFx0cGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdClcbiB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwZm4sIHNpemU7XG4mIzQzO1x0dW5zaWduZWQgaW50IHN0ZXBzO1xuIFx0aW50IGVyciA9IDA7XG4gXHRwdGVfdCAqcHRlO1xuIFxuQEAgLTU1Niw5ICYjNDM7NTc1LDEwIEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBta19wdGUocGFnZSwgcHJvdCkpO1xuLVx0XHQoKm5yKSYjNDM7JiM0Mzs7XG4tXHR9IHdoaWxlIChwdGUmIzQzOyYjNDM7LCBhZGRyICYjNDM7PSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTtcbiYjNDM7XHRcdHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xuJiM0MztcdFx0c2l6ZSA9IHZtYXBfc2V0X3B0ZXMocHRlLCBhZGRyLCBlbmQsIHBmbiwgcHJvdCwgc2hpZnQpO1xuJiM0MztcdFx0c3RlcHMgPSBQRk5fRE9XTihzaXplKTtcbiYjNDM7XHR9IHdoaWxlIChwdGUgJiM0Mzs9IHN0ZXBzLCAqbnIgJiM0Mzs9IHN0ZXBzLCBhZGRyICYjNDM7PSBzaXplLCBhZGRyICE9IGVuZCk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcdCptYXNrIHw9IFBHVEJMX1BURV9NT0RJRklFRDtcbkBAIC01NjgsNjAgJiM0Mzs1ODgsOTAgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXG4gc3RhdGljIGludCB2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLFxuLVx0XHRwZ3RibF9tb2RfbWFzayAqbWFzaylcbiYjNDM7XHRcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4ge1xuIFx0cG1kX3QgKnBtZDtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0cG1kID0gcG1kX2FsbG9jX3RyYWNrKFx1MDAyNmluaXRfbW0sIHB1ZCwgYWRkciwgbWFzayk7XG4gXHRpZiAoIXBtZClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbi1cdFx0aWYgKHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrKSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2hpZnQgXHUwMDNlPSBQTURfU0hJRlQpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1sqbnJdO1xuJiM0MztcdFx0XHRwaHlzX2FkZHJfdCBwaHlzX2FkZHI7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoV0FSTl9PTighcGFnZSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRcdGlmIChXQVJOX09OKCFwZm5fdmFsaWQocGFnZV90b19wZm4ocGFnZSkpKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRcdHBoeXNfYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCxcbiYjNDM7XHRcdFx0XHRcdFx0c2hpZnQpKSB7XG4mIzQzO1x0XHRcdFx0Km1hc2sgfD0gUEdUQkxfUE1EX01PRElGSUVEO1xuJiM0MztcdFx0XHRcdCpuciAmIzQzOz0gMSBcdTAwM2NcdTAwM2MgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gdm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4gXHR9IHdoaWxlIChwbWQmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcbi1cdFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXG4mIzQzO1x0XHRwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KVxuIHtcbiBcdHB1ZF90ICpwdWQ7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG4mIzQzO1x0aW50IGVycjtcbiBcbiBcdHB1ZCA9IHB1ZF9hbGxvY190cmFjayhcdTAwMjZpbml0X21tLCBwNGQsIGFkZHIsIG1hc2spO1xuIFx0aWYgKCFwdWQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4tXHRcdGlmICh2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRlcnIgPSB2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaywgc2hpZnQpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiBcdH0gd2hpbGUgKHB1ZCYjNDM7JiM0MzssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLFxuLVx0XHRwZ3RibF9tb2RfbWFzayAqbWFzaylcbiYjNDM7XHRcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4ge1xuIFx0cDRkX3QgKnA0ZDtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0cDRkID0gcDRkX2FsbG9jX3RyYWNrKFx1MDAyNmluaXRfbW0sIHBnZCwgYWRkciwgbWFzayk7XG4gXHRpZiAoIXA0ZClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwNGRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbi1cdFx0aWYgKHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrKSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdGVyciA9IHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrLCBzaGlmdCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fSB3aGlsZSAocDRkJiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLVx0XHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuJiM0MzsvKlxuJiM0MzsgKiBJdCBjYW4gdGFrZSBhbiBhcnJheSBvZiBwYWdlcyB3aGljaCBhcmUgbm90IGFsbCBjb250aWd1b3VzLCBidXQgaXRcbiYjNDM7ICogbWF5IGhhdmUgY29udGlndW91cyBjaHVua3MsIGFzIGhpbnRlZCBieSBAc2hpZnQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4mIzQzO1x0XHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHI7XG4gXHRwZ2RfdCAqcGdkO1xuQEAgLTYzNiw3ICYjNDM7Njg2LDcgQEAgc3RhdGljIGludCB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0bmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuIFx0XHRpZiAocGdkX2JhZCgqcGdkKSlcbiBcdFx0XHRtYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDtcbi1cdFx0ZXJyID0gdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgXHUwMDI2bnIsIFx1MDAyNm1hc2spO1xuJiM0MztcdFx0ZXJyID0gdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgXHUwMDI2bnIsIFx1MDAyNm1hc2ssIHNoaWZ0KTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRicmVhaztcbiBcdH0gd2hpbGUgKHBnZCYjNDM7JiM0MzssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XG5AQCAtNjU5LDI3ICYjNDM7NzA5LDEyIEBAIHN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gaW50IF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0KVxuIHtcbi1cdHVuc2lnbmVkIGludCBpLCBuciA9IChlbmQgLSBhZGRyKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cbiBcdFdBUk5fT04ocGFnZV9zaGlmdCBcdTAwM2MgUEFHRV9TSElGVCk7XG4gXG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MpIHx8XG4tXHRcdFx0cGFnZV9zaGlmdCA9PSBQQUdFX1NISUZUKVxuLVx0XHRyZXR1cm4gdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMpO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnI7IGkgJiM0Mzs9IDFVIFx1MDAzY1x1MDAzYyAocGFnZV9zaGlmdCAtIFBBR0VfU0hJRlQpKSB7XG4tXHRcdGludCBlcnI7XG4tXG4tXHRcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIHBhZ2Vfc2hpZnQpLFxuLVx0XHRcdFx0XHRwYWdlX3RvX3BoeXMocGFnZXNbaV0pLCBwcm90LFxuLVx0XHRcdFx0XHRwYWdlX3NoaWZ0KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0XHRhZGRyICYjNDM7PSAxVUwgXHUwMDNjXHUwMDNjIHBhZ2Vfc2hpZnQ7XG4tXHR9XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DKSlcbiYjNDM7XHRcdHBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMsIHBhZ2Vfc2hpZnQpO1xuIH1cbiBcbiBpbnQgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5AQCAtMzI3OSw2ICYjNDM7MzMxNCwxNCBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfdm1fYXJlYV9jYWxsZXIodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxuIFx0XHRcdFx0ICBOVU1BX05PX05PREUsIEdGUF9LRVJORUwsIGNhbGxlcik7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqX19nZXRfdm1fYXJlYV9ub2RlX2FsaWduZWRfY2FsbGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IHZvaWQgKmNhbGxlcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgYWxpZ24sIFBBR0VfU0hJRlQsIGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXG4mIzQzO1x0XHRcdFx0ICBOVU1BX05PX05PREUsIEdGUF9LRVJORUwsIGNhbGxlcik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZmluZF92bV9hcmVhIC0gZmluZCBhIGNvbnRpbnVvdXMga2VybmVsIHZpcnR1YWwgYXJlYVxuICAqIEBhZGRyOlx0ICBiYXNlIGFkZHJlc3NcbkBAIC0zNTE5LDYgJiM0MzszNTYyLDExNiBAQCB2b2lkIHZ1bm1hcChjb25zdCB2b2lkICphZGRyKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHZ1bm1hcCk7XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHZtX3NoaWZ0KHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGlmIChhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IFBNRF9TSVpFKVxuJiM0MztcdFx0cmV0dXJuIFBNRF9TSElGVDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBnZXRfdm1hcF9iYXRjaF9vcmRlcihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuJiM0MztcdFx0cGdwcm90X3QgcHJvdCwgdW5zaWduZWQgaW50IG1heF9zdGVwcywgdW5zaWduZWQgaW50IGlkeClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcGZuO1xuJiM0MztcdHVuc2lnbmVkIGludCBucl9jb250aWc7XG4mIzQzO1x0aW50IG9yZGVyO1xuJiM0MztcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVApKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG5yX2NvbnRpZyA9IG51bV9wYWdlc19jb250aWd1b3VzKFx1MDAyNnBhZ2VzW2lkeF0sIG1heF9zdGVwcyk7XG4mIzQzO1x0aWYgKG5yX2NvbnRpZyBcdTAwM2MgMilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRvcmRlciA9IGlsb2cyKG5yX2NvbnRpZyk7XG4mIzQzO1x0cGZuID0gcGFnZV90b19wZm4ocGFnZXNbaWR4XSk7XG4mIzQzO1xuJiM0MztcdC8qIExpbWl0IG9yZGVyIGJ5IHBmbiBhbGlnbm1lbnQgKi9cbiYjNDM7XHRpZiAocGZuIFx1MDAzZSAwKVxuJiM0MztcdFx0b3JkZXIgPSBtaW5fdChpbnQsIG9yZGVyLCBfX2ZmcyhwZm4pKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZtX3NoaWZ0KHByb3QsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpID09IFBBR0VfU0hJRlQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG9yZGVyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuJiM0MztcdFx0cGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBjb3VudCA9IChlbmQgLSBhZGRyKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcHJldl9zaGlmdCA9IDAsIGlkeCA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtYXBfYWRkciA9IGFkZHIsIGJhdGNoX2VuZCA9IGFkZHI7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0ga21zYW5fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFBBR0VfU0hJRlQsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIGNvdW50OyApIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBzaGlmdCA9IFBBR0VfU0hJRlQgJiM0MztcbiYjNDM7XHRcdFx0Z2V0X3ZtYXBfYmF0Y2hfb3JkZXIocGFnZXMsIHByb3QsIGNvdW50IC0gaSwgaSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFpKVxuJiM0MztcdFx0XHRwcmV2X3NoaWZ0ID0gc2hpZnQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNoaWZ0ICE9IHByZXZfc2hpZnQpIHtcbiYjNDM7XHRcdFx0ZXJyID0gdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsobWFwX2FkZHIsIGJhdGNoX2VuZCxcbiYjNDM7XHRcdFx0XHRcdHByb3QsIHBhZ2VzICYjNDM7IGlkeCwgcHJldl9zaGlmdCk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdHByZXZfc2hpZnQgPSBzaGlmdDtcbiYjNDM7XHRcdFx0bWFwX2FkZHIgPSBiYXRjaF9lbmQ7XG4mIzQzO1x0XHRcdGlkeCA9IGk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE9uY2Ugc21hbGwgcGFnZXMgYXJlIGVuY291bnRlcmVkLCB0aGUgcmVtYWluaW5nIHBhZ2VzXG4mIzQzO1x0XHQgKiBhcmUgbGlrZWx5IHNtYWxsIGFzIHdlbGwuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChzaGlmdCA9PSBQQUdFX1NISUZUKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRiYXRjaF9lbmQgJiM0Mzs9IDFVTCBcdTAwM2NcdTAwM2Mgc2hpZnQ7XG4mIzQzO1x0XHRpICYjNDM7PSAxVSBcdTAwM2NcdTAwM2MgKHNoaWZ0IC0gUEFHRV9TSElGVCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBSZW1haW5pbmcgKi9cbiYjNDM7XHRpZiAobWFwX2FkZHIgXHUwMDNjIGVuZClcbiYjNDM7XHRcdGVyciA9IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKG1hcF9hZGRyLCBlbmQsXG4mIzQzO1x0XHRcdFx0cHJvdCwgcGFnZXMgJiM0MzsgaWR4LCBwcmV2X3NoaWZ0KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRmbHVzaF9jYWNoZV92bWFwKGFkZHIsIGVuZCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKnZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGZsYWdzLCBwZ3Byb3RfdCBwcm90LCBjb25zdCB2b2lkICpjYWxsZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhO1xuJiM0MztcdHVuc2lnbmVkIGludCBzaGlmdDtcbiYjNDM7XG4mIzQzO1x0aWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gUE1EX1NJWkUpIHtcbiYjNDM7XHRcdHZtX2FyZWEgPSBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgUE1EX1NJWkUsXG4mIzQzO1x0XHRcdFx0ZmxhZ3MsIGNhbGxlcik7XG4mIzQzO1x0XHRpZiAodm1fYXJlYSlcbiYjNDM7XHRcdFx0cmV0dXJuIHZtX2FyZWE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzaGlmdCA9IGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpO1xuJiM0MztcdGlmIChzaGlmdCBcdTAwM2UgUEFHRV9TSElGVCkge1xuJiM0MztcdFx0dm1fYXJlYSA9IF9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcihzaXplLCAxVUwgXHUwMDNjXHUwMDNjIHNoaWZ0LFxuJiM0MztcdFx0XHRcdGZsYWdzLCBjYWxsZXIpO1xuJiM0MztcdFx0aWYgKHZtX2FyZWEpXG4mIzQzO1x0XHRcdHJldHVybiB2bV9hcmVhO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcihzaXplLCBQQUdFX1NJWkUsIGZsYWdzLCBjYWxsZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHZtYXAgLSBtYXAgYW4gYXJyYXkgb2YgcGFnZXMgaW50byB2aXJ0dWFsbHkgY29udGlndW91cyBzcGFjZVxuICAqIEBwYWdlczogYXJyYXkgb2YgcGFnZSBwb2ludGVyc1xuQEAgLTM1NTcsMTMgJiM0MzszNzEwLDE0IEBAIHZvaWQgKnZtYXAoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGNvdW50LFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdHNpemUgPSAodW5zaWduZWQgbG9uZyljb3VudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbi1cdGFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4mIzQzO1x0YXJlYSA9IHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYShzaXplLCBmbGFncywgcHJvdCxcbiYjNDM7XHRcdFx0XHRfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuIFx0aWYgKCFhcmVhKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLVx1MDAzZWFkZHI7XG4tXHRpZiAodm1hcF9wYWdlc19yYW5nZShhZGRyLCBhZGRyICYjNDM7IHNpemUsIHBncHJvdF9ueChwcm90KSxcbi1cdFx0XHRcdHBhZ2VzLCBQQUdFX1NISUZUKSBcdTAwM2MgMCkge1xuJiM0MztcdGlmICh2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWQoYWRkciwgYWRkciAmIzQzOyBzaXplLCBwZ3Byb3RfbngocHJvdCksXG4mIzQzO1x0XHRcdFx0cGFnZXMpIFx1MDAzYyAwKSB7XG4gXHRcdHZ1bm1hcChhcmVhLVx1MDAzZWFkZHIpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbkBAIC00MDMwLDExICYjNDM7NDE4NCw3IEBAIHZvaWQgKl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXG4gXHRcdCAqIHN1cHBvcnRpbmcgdGhlbS5cbiBcdFx0ICovXG4gXG4tXHRcdGlmIChhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IFBNRF9TSVpFKVxuLVx0XHRcdHNoaWZ0ID0gUE1EX1NISUZUO1xuLVx0XHRlbHNlXG4tXHRcdFx0c2hpZnQgPSBhcmNoX3ZtYXBfcHRlX3N1cHBvcnRlZF9zaGlmdChzaXplKTtcbi1cbiYjNDM7XHRcdHNoaWZ0ID0gdm1fc2hpZnQocHJvdCwgc2l6ZSk7XG4gXHRcdGFsaWduID0gbWF4KG9yaWdpbmFsX2FsaWduLCAxVUwgXHUwMDNjXHUwMDNjIHNoaWZ0KTtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWFwJiMzNDssCiAgICAmIzM0O19fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDtfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWQmIzM0OywKICAgICYjMzQ7dm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhJiMzNDssCiAgICAmIzM0O3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrJiMzNDssCiAgICAmIzM0O3ZtYXBfcGFnZXNfcHRlX3JhbmdlJiMzNDssCiAgICAmIzM0O3ZtYXBfcGFnZXNfcG1kX3JhbmdlJiMzNDssCiAgICAmIzM0O3ZtYXBfcGFnZXNfcHVkX3JhbmdlJiMzNDssCiAgICAmIzM0O3ZtYXBfcGFnZXNfcDRkX3JhbmdlJiMzNDssCiAgICAmIzM0O2FyY2hfbWFrZV9odWdlX3B0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGNvbnRpZ3VvdXMgUFRFIG1hcHBpbmdzIGZvciB2bWFsbG9jIG9uIGFybTY0LCBhbmQgdXBkYXRlcyB2bWFwIHRvIHN1cHBvcnQgYmF0Y2hlZCBtYXBwaW5nIGZvciBjb250aWd1b3VzIHBhZ2VzLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZDE3MGFkZDRkZDFjMjc4NDJmOTNlZDNiYmFjNDRhMDg2Njc3MzhjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMDM6NDg6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oCmluZGV4IDRlYzFhY2QzYzFiMzQ4Li5kNjY1ZjlkNjg3NDIyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmgKQEAgLTIzLDEwICYjNDM7MjMsMTQgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUodW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCQkJdW5zaWduZWQgbG9uZyBlbmQsIHU2NCBwZm4sCiAJCQkJCQl1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZTsKJiM0MzsKIAkvKgogCSAqIElmIHRoZSBibG9jayBpcyBhdCBsZWFzdCBDT05UX1BURV9TSVpFIGluIHNpemUsIGFuZCBpcyBuYXR1cmFsbHkKIAkgKiBhbGlnbmVkIGluIGJvdGggdmlydHVhbCBhbmQgcGh5c2ljYWwgc3BhY2UsIHRoZW4gd2UgY2FuIHB0ZS1tYXAgdGhlCiAJICogYmxvY2sgdXNpbmcgdGhlIFBURV9DT05UIGJpdCBmb3IgbW9yZSBlZmZpY2llbnQgdXNlIG9mIHRoZSBUTEIuCiYjNDM7CSAqIFRoZSByZXR1cm5lZCBtYXBwaW5nIHNpemUgbWF5IGNvdmVyIG11bHRpcGxlIENPTlRfUFRFX1NJWkUgYmxvY2tzLAomIzQzOwkgKiBjYXBwZWQgYmVsb3cgUE1EX1NJWkUuCiAJICovCiAJaWYgKG1heF9wYWdlX3NoaWZ0ICZsdDsgQ09OVF9QVEVfU0hJRlQpCiAJCXJldHVybiBQQUdFX1NJWkU7CkBAIC00MCw3ICYjNDM7NDQsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKCFJU19BTElHTkVEKFBGTl9QSFlTKHBmbiksIENPTlRfUFRFX1NJWkUpKQogCQlyZXR1cm4gUEFHRV9TSVpFOwogCi0JcmV0dXJuIENPTlRfUFRFX1NJWkU7CiYjNDM7CXNpemUgPSBtaW4zKGVuZCAtIGFkZHIsIDFVTCAmbHQ7Jmx0OyBtYXhfcGFnZV9zaGlmdCwgUE1EX1NJWkUgJmd0OyZndDsgMSk7CiYjNDM7CXNpemUgPSByb3VuZGRvd25fcG93X29mX3R3byhzaXplKTsKJiM0MzsJcmV0dXJuIHNpemU7CiB9CiAKICNkZWZpbmUgYXJjaF92bWFwX3B0ZV9yYW5nZV91bm1hcF9zaXplIGFyY2hfdm1hcF9wdGVfcmFuZ2VfdW5tYXBfc2l6ZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jCmluZGV4IDMwNzcyYTkwOWFlYTNlLi43NzlkMzI5ODZkMGQ2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtOTQsNiAmIzQzOzk0LDExIEBAIHN0YXRpYyBpbnQgZmluZF9udW1fY29udGlnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJcmV0dXJuIENPTlRfUFRFUzsKIH0KIAomIzQzOy8qCiYjNDM7ICogbnVtX2NvbnRpZ19wdGVzKCksIHNldF9odWdlX3B0ZV9hdCgpIGFuZCBhcmNoX21ha2VfaHVnZV9wdGUoKSBjYW4gYmUKJiM0MzsgKiB1c2VkIGJ5IG5vbi1odWdldGxiZnModm1hbGxvYykgbW0gY29kZSB0byBzZXQgbXVsdGlwbGUgaHVnZSBtYXBwaW5ncwomIzQzOyAqIGF0IHRoZSBQVEUgbGV2ZWwuCiYjNDM7ICovCiBzdGF0aWMgaW5saW5lIGludCBudW1fY29udGlnX3B0ZXModW5zaWduZWQgbG9uZyBzaXplLCBzaXplX3QgKnBnc2l6ZSkKIHsKIAlpbnQgY29udGlnX3B0ZXMgPSAxOwpAQCAtMTEwLDYgJiM0MzsxMTUsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgbnVtX2NvbnRpZ19wdGVzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgc2l6ZV90ICpwZ3NpemUpCiAJCWNvbnRpZ19wdGVzID0gQ09OVF9QVEVTOwogCQlicmVhazsKIAlkZWZhdWx0OgomIzQzOwkJaWYgKHNpemUgJmd0OyAwICZhbXA7JmFtcDsgc2l6ZSAmbHQ7IFBNRF9TSVpFICZhbXA7JmFtcDsKJiM0MzsJCQkJSVNfQUxJR05FRChzaXplLCBDT05UX1BURV9TSVpFKSkgewomIzQzOwkJCSpwZ3NpemUgPSBQQUdFX1NJWkU7CiYjNDM7CQkJY29udGlnX3B0ZXMgPSBzaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiAJCVdBUk5fT04oIV9faHVnZXRsYl92YWxpZF9zaXplKHNpemUpKTsKIAl9CiAKQEAgLTM1OSw2ICYjNDM7MzcwLDEwIEBAIHB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKQogCWNhc2UgQ09OVF9QVEVfU0laRToKIAkJcmV0dXJuIHB0ZV9ta2NvbnQoZW50cnkpOwogCWRlZmF1bHQ6CiYjNDM7CQlpZiAocGFnZXNpemUgJmd0OyAwICZhbXA7JmFtcDsgcGFnZXNpemUgJmx0OyBQTURfU0laRSAmYW1wOyZhbXA7CiYjNDM7CQkJCUlTX0FMSUdORUQocGFnZXNpemUsIENPTlRfUFRFX1NJWkUpKQomIzQzOwkJCXJldHVybiBwdGVfbWtjb250KGVudHJ5KTsKJiM0MzsKIAkJYnJlYWs7CiAJfQogCXByX3dhcm4oJiMzNDslczogdW5yZWNvZ25pemVkIGh1Z2UgcGFnZSBzaXplIDB4JWx4XG4mIzM0OywKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAxYWZjYTM1NjhiOWI2NS4uOTVmZmNhMjE5NDY3OTMgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTkxLDYgJiM0Mzs5MSwzMyBAQCBzdHJ1Y3QgdmZyZWVfZGVmZXJyZWQgewogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB2ZnJlZV9kZWZlcnJlZCwgdmZyZWVfZGVmZXJyZWQpOwogCiAvKioqIFBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyAqKiovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUcnkgY29udGlndW91cyBtYXBwaW5ncyBhdCB0aGUgUFRFIGxldmVsIGZvciBhcmNoZXMgd2hpY2ggc3VwcG9ydCB0aGVtLCBhbmQgaWYKJiM0MzsgKiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4gRmFsbCBiYWNrIHRvIFBBR0VfU0laRSBtYXBwaW5ncyBvdGhlcndpc2UuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IG1hcHBpbmcgc2l6ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hcF9zZXRfcHRlcyhwdGVfdCAqcHRlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgdTY0IHBmbiwKJiM0MzsJCXBncHJvdF90IHByb3QsIHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdCkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplOwomIzQzOwomIzQzOwlzaXplID0gYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZShhZGRyLCBlbmQsIHBmbiwgbWF4X3BhZ2Vfc2hpZnQpOwomIzQzOwlpZiAoc2l6ZSAhPSBQQUdFX1NJWkUpIHsKJiM0MzsJCXB0ZV90IGVudHJ5ID0gcGZuX3B0ZShwZm4sIHByb3QpOwomIzQzOwomIzQzOwkJZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIGlsb2cyKHNpemUpLCAwKTsKJiM0MzsJCXNldF9odWdlX3B0ZV9hdCgmYW1wO2luaXRfbW0sIGFkZHIsIHB0ZSwgZW50cnksIHNpemUpOwomIzQzOwkJcmV0dXJuIHNpemU7CiYjNDM7CX0KJiM0MzsjZW5kaWYKJiM0MzsJc2V0X3B0ZV9hdCgmYW1wO2luaXRfbW0sIGFkZHIsIHB0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTsKJiM0MzsJcmV0dXJuIFBBR0VfU0laRTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQlwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsCiAJCQl1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQsIHBndGJsX21vZF9tYXNrICptYXNrKQpAQCAtOTgsNyAmIzQzOzEyNSw4IEBAIHN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAlwdGVfdCAqcHRlOwogCXU2NCBwZm47CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBzaXplID0gUEFHRV9TSVpFOwomIzQzOwl1bnNpZ25lZCBsb25nIHNpemU7CiYjNDM7CXVuc2lnbmVkIGludCBzdGVwczsKIAogCWlmIChXQVJOX09OX09OQ0UoIVBBR0VfQUxJR05FRChlbmQgLSBhZGRyKSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTE5LDIwICYjNDM7MTQ3LDkgQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJQlVHKCk7CiAJCX0KIAotI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKLQkJc2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTsKLQkJaWYgKHNpemUgIT0gUEFHRV9TSVpFKSB7Ci0JCQlwdGVfdCBlbnRyeSA9IHBmbl9wdGUocGZuLCBwcm90KTsKLQotCQkJZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIGlsb2cyKHNpemUpLCAwKTsKLQkJCXNldF9odWdlX3B0ZV9hdCgmYW1wO2luaXRfbW0sIGFkZHIsIHB0ZSwgZW50cnksIHNpemUpOwotCQkJcGZuICYjNDM7PSBQRk5fRE9XTihzaXplKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0jZW5kaWYKLQkJc2V0X3B0ZV9hdCgmYW1wO2luaXRfbW0sIGFkZHIsIHB0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTsKLQkJcGZuJiM0MzsmIzQzOzsKLQl9IHdoaWxlIChwdGUgJiM0Mzs9IFBGTl9ET1dOKHNpemUpLCBhZGRyICYjNDM7PSBzaXplLCBhZGRyICE9IGVuZCk7CiYjNDM7CQlzaXplID0gdm1hcF9zZXRfcHRlcyhwdGUsIGFkZHIsIGVuZCwgcGZuLCBwcm90LCBtYXhfcGFnZV9zaGlmdCk7CiYjNDM7CQlzdGVwcyA9IFBGTl9ET1dOKHNpemUpOwomIzQzOwl9IHdoaWxlIChwdGUgJiM0Mzs9IHN0ZXBzLCBwZm4gJiM0Mzs9IHN0ZXBzLCBhZGRyICYjNDM7PSBzaXplLCBhZGRyICE9IGVuZCk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAkqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7CkBAIC01MjQsOCAmIzQzOzU0MSwxMCBAQCB2b2lkIHZ1bm1hcF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQogCiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsCi0JCXBndGJsX21vZF9tYXNrICptYXNrKQomIzQzOwkJcGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdCkKIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBwZm4sIHNpemU7CiYjNDM7CXVuc2lnbmVkIGludCBzdGVwczsKIAlpbnQgZXJyID0gMDsKIAlwdGVfdCAqcHRlOwogCkBAIC01NTYsOSAmIzQzOzU3NSwxMCBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCWJyZWFrOwogCQl9CiAKLQkJc2V0X3B0ZV9hdCgmYW1wO2luaXRfbW0sIGFkZHIsIHB0ZSwgbWtfcHRlKHBhZ2UsIHByb3QpKTsKLQkJKCpucikmIzQzOyYjNDM7OwotCX0gd2hpbGUgKHB0ZSYjNDM7JiM0MzssIGFkZHIgJiM0Mzs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwomIzQzOwkJcGZuID0gcGFnZV90b19wZm4ocGFnZSk7CiYjNDM7CQlzaXplID0gdm1hcF9zZXRfcHRlcyhwdGUsIGFkZHIsIGVuZCwgcGZuLCBwcm90LCBzaGlmdCk7CiYjNDM7CQlzdGVwcyA9IFBGTl9ET1dOKHNpemUpOwomIzQzOwl9IHdoaWxlIChwdGUgJiM0Mzs9IHN0ZXBzLCAqbnIgJiM0Mzs9IHN0ZXBzLCBhZGRyICYjNDM7PSBzaXplLCBhZGRyICE9IGVuZCk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAkqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7CkBAIC01NjgsNjAgJiM0Mzs1ODgsOTAgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAKIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQl1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpuciwKLQkJcGd0YmxfbW9kX21hc2sgKm1hc2spCiYjNDM7CQlwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KQogewogCXBtZF90ICpwbWQ7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwomIzQzOwlpbnQgZXJyOwogCiAJcG1kID0gcG1kX2FsbG9jX3RyYWNrKCZhbXA7aW5pdF9tbSwgcHVkLCBhZGRyLCBtYXNrKTsKIAlpZiAoIXBtZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZG8gewogCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWlmICh2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpCi0JCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJCWlmIChzaGlmdCAmZ3Q7PSBQTURfU0hJRlQpIHsKJiM0MzsJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzWypucl07CiYjNDM7CQkJcGh5c19hZGRyX3QgcGh5c19hZGRyOwomIzQzOwomIzQzOwkJCWlmIChXQVJOX09OKCFwYWdlKSkKJiM0MzsJCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQkJaWYgKFdBUk5fT04oIXBmbl92YWxpZChwYWdlX3RvX3BmbihwYWdlKSkpKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCQlwaHlzX2FkZHIgPSBwYWdlX3RvX3BoeXMocGFnZSk7CiYjNDM7CiYjNDM7CQkJaWYgKHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyLCBwcm90LAomIzQzOwkJCQkJCXNoaWZ0KSkgewomIzQzOwkJCQkqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7CiYjNDM7CQkJCSpuciAmIzQzOz0gMSAmbHQ7Jmx0OyAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWVyciA9IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrLCBzaGlmdCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiAJfSB3aGlsZSAocG1kJiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLAotCQlwZ3RibF9tb2RfbWFzayAqbWFzaykKJiM0MzsJCXBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpCiB7CiAJcHVkX3QgKnB1ZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CiYjNDM7CWludCBlcnI7CiAKIAlwdWQgPSBwdWRfYWxsb2NfdHJhY2soJmFtcDtpbml0X21tLCBwNGQsIGFkZHIsIG1hc2spOwogCWlmICghcHVkKQogCQlyZXR1cm4gLUVOT01FTTsKIAlkbyB7CiAJCW5leHQgPSBwdWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJaWYgKHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrKSkKLQkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJZXJyID0gdm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKIAl9IHdoaWxlIChwdWQmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcDRkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsCi0JCXBndGJsX21vZF9tYXNrICptYXNrKQomIzQzOwkJcGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdCkKIHsKIAlwNGRfdCAqcDRkOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKJiM0MzsJaW50IGVycjsKIAogCXA0ZCA9IHA0ZF9hbGxvY190cmFjaygmYW1wO2luaXRfbW0sIHBnZCwgYWRkciwgbWFzayk7CiAJaWYgKCFwNGQpCiAJCXJldHVybiAtRU5PTUVNOwogCWRvIHsKIAkJbmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQlpZiAodm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2spKQotCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQllcnIgPSB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaywgc2hpZnQpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwogCX0gd2hpbGUgKHA0ZCYjNDM7JiM0MzssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCXBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMpCiYjNDM7LyoKJiM0MzsgKiBJdCBjYW4gdGFrZSBhbiBhcnJheSBvZiBwYWdlcyB3aGljaCBhcmUgbm90IGFsbCBjb250aWd1b3VzLCBidXQgaXQKJiM0MzsgKiBtYXkgaGF2ZSBjb250aWd1b3VzIGNodW5rcywgYXMgaGludGVkIGJ5IEBzaGlmdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiYjNDM7CQlwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgc2hpZnQpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHI7CiAJcGdkX3QgKnBnZDsKQEAgLTYzNiw3ICYjNDM7Njg2LDcgQEAgc3RhdGljIGludCB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocGdkX2JhZCgqcGdkKSkKIAkJCW1hc2sgfD0gUEdUQkxfUEdEX01PRElGSUVEOwotCQllcnIgPSB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2QsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCAmYW1wO25yLCAmYW1wO21hc2spOwomIzQzOwkJZXJyID0gdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgJmFtcDtuciwgJmFtcDttYXNrLCBzaGlmdCk7CiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAl9IHdoaWxlIChwZ2QmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwpAQCAtNjU5LDI3ICYjNDM7NzA5LDEyIEBAIHN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiBpbnQgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IHBhZ2Vfc2hpZnQpCiB7Ci0JdW5zaWduZWQgaW50IGksIG5yID0gKGVuZCAtIGFkZHIpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7Ci0KIAlXQVJOX09OKHBhZ2Vfc2hpZnQgJmx0OyBQQUdFX1NISUZUKTsKIAotCWlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQykgfHwKLQkJCXBhZ2Vfc2hpZnQgPT0gUEFHRV9TSElGVCkKLQkJcmV0dXJuIHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaChhZGRyLCBlbmQsIHByb3QsIHBhZ2VzKTsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBucjsgaSAmIzQzOz0gMVUgJmx0OyZsdDsgKHBhZ2Vfc2hpZnQgLSBQQUdFX1NISUZUKSkgewotCQlpbnQgZXJyOwotCi0JCWVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICYjNDM7ICgxVUwgJmx0OyZsdDsgcGFnZV9zaGlmdCksCi0JCQkJCXBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIHByb3QsCi0JCQkJCXBhZ2Vfc2hpZnQpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQlhZGRyICYjNDM7PSAxVUwgJmx0OyZsdDsgcGFnZV9zaGlmdDsKLQl9CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQykpCiYjNDM7CQlwYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsoYWRkciwgZW5kLCBwcm90LCBwYWdlcywgcGFnZV9zaGlmdCk7CiB9CiAKIGludCB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKQEAgLTMyNzksNiAmIzQzOzMzMTQsMTQgQEAgc3RydWN0IHZtX3N0cnVjdCAqZ2V0X3ZtX2FyZWFfY2FsbGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJCQkgIE5VTUFfTk9fTk9ERSwgR0ZQX0tFUk5FTCwgY2FsbGVyKTsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIodW5zaWduZWQgbG9uZyBzaXplLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3Qgdm9pZCAqY2FsbGVyKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBhbGlnbiwgUEFHRV9TSElGVCwgZmxhZ3MsCiYjNDM7CQkJCSAgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsCiYjNDM7CQkJCSAgTlVNQV9OT19OT0RFLCBHRlBfS0VSTkVMLCBjYWxsZXIpOwomIzQzO30KJiM0MzsKIC8qKgogICogZmluZF92bV9hcmVhIC0gZmluZCBhIGNvbnRpbnVvdXMga2VybmVsIHZpcnR1YWwgYXJlYQogICogQGFkZHI6CSAgYmFzZSBhZGRyZXNzCkBAIC0zNTE5LDYgJiM0MzszNTYyLDExNiBAQCB2b2lkIHZ1bm1hcChjb25zdCB2b2lkICphZGRyKQogfQogRVhQT1JUX1NZTUJPTCh2dW5tYXApOwogCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdm1fc2hpZnQocGdwcm90X3QgcHJvdCwgdW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3sKJiM0MzsJaWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpICZhbXA7JmFtcDsgc2l6ZSAmZ3Q7PSBQTURfU0laRSkKJiM0MzsJCXJldHVybiBQTURfU0hJRlQ7CiYjNDM7CiYjNDM7CXJldHVybiBhcmNoX3ZtYXBfcHRlX3N1cHBvcnRlZF9zaGlmdChzaXplKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZ2V0X3ZtYXBfYmF0Y2hfb3JkZXIoc3RydWN0IHBhZ2UgKipwYWdlcywKJiM0MzsJCXBncHJvdF90IHByb3QsIHVuc2lnbmVkIGludCBtYXhfc3RlcHMsIHVuc2lnbmVkIGludCBpZHgpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHBmbjsKJiM0MzsJdW5zaWduZWQgaW50IG5yX2NvbnRpZzsKJiM0MzsJaW50IG9yZGVyOwomIzQzOwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW5yX2NvbnRpZyA9IG51bV9wYWdlc19jb250aWd1b3VzKCZhbXA7cGFnZXNbaWR4XSwgbWF4X3N0ZXBzKTsKJiM0MzsJaWYgKG5yX2NvbnRpZyAmbHQ7IDIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJb3JkZXIgPSBpbG9nMihucl9jb250aWcpOwomIzQzOwlwZm4gPSBwYWdlX3RvX3BmbihwYWdlc1tpZHhdKTsKJiM0MzsKJiM0MzsJLyogTGltaXQgb3JkZXIgYnkgcGZuIGFsaWdubWVudCAqLwomIzQzOwlpZiAocGZuICZndDsgMCkKJiM0MzsJCW9yZGVyID0gbWluX3QoaW50LCBvcmRlciwgX19mZnMocGZuKSk7CiYjNDM7CiYjNDM7CWlmICh2bV9zaGlmdChwcm90LCBQQUdFX1NJWkUgJmx0OyZsdDsgb3JkZXIpID09IFBBR0VfU0hJRlQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIG9yZGVyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAomIzQzOwkJcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBjb3VudCA9IChlbmQgLSBhZGRyKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwl1bnNpZ25lZCBpbnQgcHJldl9zaGlmdCA9IDAsIGlkeCA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWFwX2FkZHIgPSBhZGRyLCBiYXRjaF9lbmQgPSBhZGRyOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBrbXNhbl92bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2goYWRkciwgZW5kLCBwcm90LCBwYWdlcywKJiM0MzsJCQkJCSAgICAgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBjb3VudDsgKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgc2hpZnQgPSBQQUdFX1NISUZUICYjNDM7CiYjNDM7CQkJZ2V0X3ZtYXBfYmF0Y2hfb3JkZXIocGFnZXMsIHByb3QsIGNvdW50IC0gaSwgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIWkpCiYjNDM7CQkJcHJldl9zaGlmdCA9IHNoaWZ0OwomIzQzOwomIzQzOwkJaWYgKHNoaWZ0ICE9IHByZXZfc2hpZnQpIHsKJiM0MzsJCQllcnIgPSB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhtYXBfYWRkciwgYmF0Y2hfZW5kLAomIzQzOwkJCQkJcHJvdCwgcGFnZXMgJiM0MzsgaWR4LCBwcmV2X3NoaWZ0KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsJCQlwcmV2X3NoaWZ0ID0gc2hpZnQ7CiYjNDM7CQkJbWFwX2FkZHIgPSBiYXRjaF9lbmQ7CiYjNDM7CQkJaWR4ID0gaTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBPbmNlIHNtYWxsIHBhZ2VzIGFyZSBlbmNvdW50ZXJlZCwgdGhlIHJlbWFpbmluZyBwYWdlcwomIzQzOwkJICogYXJlIGxpa2VseSBzbWFsbCBhcyB3ZWxsLgomIzQzOwkJICovCiYjNDM7CQlpZiAoc2hpZnQgPT0gUEFHRV9TSElGVCkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWJhdGNoX2VuZCAmIzQzOz0gMVVMICZsdDsmbHQ7IHNoaWZ0OwomIzQzOwkJaSAmIzQzOz0gMVUgJmx0OyZsdDsgKHNoaWZ0IC0gUEFHRV9TSElGVCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUmVtYWluaW5nICovCiYjNDM7CWlmIChtYXBfYWRkciAmbHQ7IGVuZCkKJiM0MzsJCWVyciA9IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKG1hcF9hZGRyLCBlbmQsCiYjNDM7CQkJCXByb3QsIHBhZ2VzICYjNDM7IGlkeCwgcHJldl9zaGlmdCk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlmbHVzaF9jYWNoZV92bWFwKGFkZHIsIGVuZCk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICp2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLAomIzQzOwkJdW5zaWduZWQgbG9uZyBmbGFncywgcGdwcm90X3QgcHJvdCwgY29uc3Qgdm9pZCAqY2FsbGVyKQomIzQzO3sKJiM0MzsJc3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYTsKJiM0MzsJdW5zaWduZWQgaW50IHNoaWZ0OwomIzQzOwomIzQzOwlpZiAoYXJjaF92bWFwX3BtZF9zdXBwb3J0ZWQocHJvdCkgJmFtcDsmYW1wOyBzaXplICZndDs9IFBNRF9TSVpFKSB7CiYjNDM7CQl2bV9hcmVhID0gX19nZXRfdm1fYXJlYV9ub2RlX2FsaWduZWRfY2FsbGVyKHNpemUsIFBNRF9TSVpFLAomIzQzOwkJCQlmbGFncywgY2FsbGVyKTsKJiM0MzsJCWlmICh2bV9hcmVhKQomIzQzOwkJCXJldHVybiB2bV9hcmVhOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNoaWZ0ID0gYXJjaF92bWFwX3B0ZV9zdXBwb3J0ZWRfc2hpZnQoc2l6ZSk7CiYjNDM7CWlmIChzaGlmdCAmZ3Q7IFBBR0VfU0hJRlQpIHsKJiM0MzsJCXZtX2FyZWEgPSBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgMVVMICZsdDsmbHQ7IHNoaWZ0LAomIzQzOwkJCQlmbGFncywgY2FsbGVyKTsKJiM0MzsJCWlmICh2bV9hcmVhKQomIzQzOwkJCXJldHVybiB2bV9hcmVhOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgUEFHRV9TSVpFLCBmbGFncywgY2FsbGVyKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHZtYXAgLSBtYXAgYW4gYXJyYXkgb2YgcGFnZXMgaW50byB2aXJ0dWFsbHkgY29udGlndW91cyBzcGFjZQogICogQHBhZ2VzOiBhcnJheSBvZiBwYWdlIHBvaW50ZXJzCkBAIC0zNTU3LDEzICYjNDM7MzcxMCwxNCBAQCB2b2lkICp2bWFwKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCwKIAkJcmV0dXJuIE5VTEw7CiAKIAlzaXplID0gKHVuc2lnbmVkIGxvbmcpY291bnQgJmx0OyZsdDsgUEFHRV9TSElGVDsKLQlhcmVhID0gZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwomIzQzOwlhcmVhID0gdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhKHNpemUsIGZsYWdzLCBwcm90LAomIzQzOwkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCWlmICghYXJlYSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0mZ3Q7YWRkcjsKLQlpZiAodm1hcF9wYWdlc19yYW5nZShhZGRyLCBhZGRyICYjNDM7IHNpemUsIHBncHJvdF9ueChwcm90KSwKLQkJCQlwYWdlcywgUEFHRV9TSElGVCkgJmx0OyAwKSB7CiYjNDM7CWlmICh2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWQoYWRkciwgYWRkciAmIzQzOyBzaXplLCBwZ3Byb3RfbngocHJvdCksCiYjNDM7CQkJCXBhZ2VzKSAmbHQ7IDApIHsKIAkJdnVubWFwKGFyZWEtJmd0O2FkZHIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC00MDMwLDExICYjNDM7NDE4NCw3IEBAIHZvaWQgKl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCSAqIHN1cHBvcnRpbmcgdGhlbS4KIAkJICovCiAKLQkJaWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpICZhbXA7JmFtcDsgc2l6ZSAmZ3Q7PSBQTURfU0laRSkKLQkJCXNoaWZ0ID0gUE1EX1NISUZUOwotCQllbHNlCi0JCQlzaGlmdCA9IGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpOwotCiYjNDM7CQlzaGlmdCA9IHZtX3NoaWZ0KHByb3QsIHNpemUpOwogCQlhbGlnbiA9IG1heChvcmlnaW5hbF9hbGlnbiwgMVVMICZsdDsmbHQ7IHNoaWZ0KTsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ5MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQ2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgQ29udGlndW91cyBQVEUgTWFwcGluZ3MgaW4gdm1hbGxvYyBvbiBhcm02NCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdHJ5aW5nIHRvIGludHJvZHVjZSBjb250aWd1b3VzIFBURSBtYXBwaW5ncyBmb3Igdm1hbGxvYyBvbiBhcm02NCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoZSBjaGFuZ2VzIGFyZSBzcHJlYWQgYWNyb3NzIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaGAsIGBhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNgLCBhbmQgYG1tL3ZtYWxsb2MuY2AsIHNvIGl0JiMzOTtzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGFyZWFzLgoKRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGV4dGVuZGluZyBgdm1hcGAgdG8gaGFuZGxlIGJhdGNoZWQgbWFwcGluZ3MgZm9yIGNvbnRpZ3VvdXMgcGFnZXMuIEl0JiMzOTtzIG1vZGlmeWluZyBgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZWAgdG8gaGFuZGxlIHNpemVzIHVwIHRvIHRoZSBQTUQgYm91bmRhcnksIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlZW4gdXBkYXRlZCB0byB0YWtlIGluIG11bHRpcGxlIGBDT05UX1BURV9TSVpFYCBibG9ja3MuIFRoZXJlIGFyZSBhbHNvIHVwZGF0ZXMgdG8gYG51bV9jb250aWdfcHRlc2AgYW5kIGBhcmNoX21ha2VfaHVnZV9wdGVgIHRvIHN1cHBvcnQgc2l6ZXMgd2l0aGluIGEgZ2l2ZW4gcmFuZ2UgdGhhdCBhcmUgYWxpZ25lZCB0byBgQ09OVF9QVEVfU0laRWAuCgpJbiBgbW0vdm1hbGxvYy5jYCwgdGhlIHBhdGNoIHNlZW1zIHRvIGFkZCBhIGZ1bmN0aW9uIGNhbGxlZCBgdm1hcF9zZXRfcHRlc2AgdGhhdCBsZXZlcmFnZXMgdGhlIHVwZGF0ZWQgYGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemVgIGFuZCBgYXJjaF9tYWtlX2h1Z2VfcHRlYCB0byBzZXQgbXVsdGlwbGUgUFRFcyBhdCBvbmNlLCB3aGljaCBpcyB3aGVyZSB0aGUgYmF0Y2hpbmcgY29tZXMgaW50byBwbGF5LiBJdCBhcHBlYXJzIHRoYXQgaXQmIzM5O3MgdXBkYXRpbmcgdGhlIGRpZmZlcmVudCByYW5nZSBtYXBwaW5nIGZ1bmN0aW9ucywgc3VjaCBhcyBgdm1hcF9wYWdlc19wdGVfcmFuZ2VgLCBgdm1hcF9wYWdlc19wbWRfcmFuZ2VgLCBhbmQgc28gb24sIHRvIGFjY2VwdCBhIHNoaWZ0IHBhcmFtZXRlciBhbmQgdXNlIHRoaXMgbmV3IGB2bWFwX3NldF9wdGVzYCBmdW5jdGlvbi4gVGhlcmUgYXJlIGFsc28gbmV3IGZ1bmN0aW9ucywgYHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZGAgYW5kIGB2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWFgLCB0aGF0IHNlZW0gdG8gYmUga2V5IGNvbXBvbmVudHMgb2YgdGhpcyBuZXcgYmF0Y2hpbmcgZnVuY3Rpb25hbGl0eSwgYmVpbmcgdXNlZCBpbiBgdm1hcGAuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIHZtYWxsb2MgcG9ydGlvbiwgYXMgd2VsbCBhcyB0aGUgYXJtNjQgYXJjaGl0ZWN0dXJlIGltcGxlbWVudGF0aW9uLiBDb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBtZW1vcnkgYWxsb2NhdGlvbiwgSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgYSBwcmltZSBjYW5kaWRhdGUgZm9yIHRob3JvdWdoIGZ1enppbmcuCgpCZWZvcmUgSSBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlLi4uIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AsIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAsIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIG1lbnRpb25lZCBpbiBgbW0vdm1hbGxvYy5jYC4gSSYjMzk7bGwgZ3JlcCBgbW0vS2NvbmZpZ2AgYW5kIGBhcmNoL2FybTY0L0tjb25maWdgIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY2FuIGJ1aWxkIGEga2VybmVsIHRoYXQgd2lsbCBhY3R1YWxseSBydW4gdGhpcyBuZXcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz0xMDkyPWNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXG4tLVxuYXJjaC9LY29uZmlnLTEwOTktI1xuYXJjaC9LY29uZmlnOjExMDA6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcbmFyY2gvS2NvbmZpZy0xMTAxLVx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfSFVHRV9WTUFQXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE1My1cdHNlbGVjdCBIQVZFX0FSQ0hfQ09NUElMRVJfSFxuYXJjaC9hcm02NC9LY29uZmlnOjE1NDpcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG5hcmNoL2FybTY0L0tjb25maWctMTU1LVx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTIxOC1cdHNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoyMTk6XHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1x0XHRpZiBIQVZFX0FSQ0hfSFVHRV9WTUFQXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0yMjAtXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BUFx0XHRpZiBQUENfUkFESVhfTU1VIHx8IFBQQ184eHhcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTEzMS1cdHNlbGVjdCBIQVZFX0FSQ0hfQklUUkVWRVJTRSBpZiBSSVNDVl9JU0FfWkJLQiBcdTAwMjZcdTAwMjYgQklUUkVWRVJTRVxuYXJjaC9yaXNjdi9LY29uZmlnOjEzMjpcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DIGlmIEhBVkVfQVJDSF9IVUdFX1ZNQVBcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMzMtXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BUCBpZiBNTVUgXHUwMDI2XHUwMDI2IDY0QklUXG4tLVxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xOTItXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BUFx0XHRpZiBYODZfNjQgfHwgWDg2X1BBRVxuYXJjaC94ODYvS2NvbmZpZzoxOTM6XHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1x0XHRpZiBYODZfNjRcbmFyY2gveDg2L0tjb25maWctMTk0LVx0c2VsZWN0IEhBVkVfQVJDSF9KVU1QX0xBQkVMXG4tLVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg9MTk9c3RydWN0IGlvdl9pdGVyO1x0XHQvKiBpbiB1aW8uaCAqL1xuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTMxLSNkZWZpbmUgVk1fTUFQX1BVVF9QQUdFU1x0MHgwMDAwMDIwMFx0LyogcHV0IHBhZ2VzIGFuZCBmcmVlIGFycmF5IGluIHZmcmVlICovXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDozMjojZGVmaW5lIFZNX0FMTE9XX0hVR0VfVk1BUFx0MHgwMDAwMDQwMCAgICAgIC8qIEFsbG93IGZvciBodWdlIHBhZ2VzIG9uIGFyY2hzIHdpdGggSEFWRV9BUkNIX0hVR0VfVk1BTExPQyAqL1xuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMzMtXG4tLVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg9NTI9c3RydWN0IHZtX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtNjEtXHRzdHJ1Y3QgcGFnZVx0XHQqKnBhZ2VzO1xuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6NjI6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC02My1cdHVuc2lnbmVkIGludFx0XHRwYWdlX29yZGVyO1xuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTI1OD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdm1fYXJlYV9odWdlcGFnZXMoY29uc3Qgdm9pZCAqYWRkcilcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0yNjYtXHQgKi9cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjI2NzojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTI2OC1cdHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEgPSBmaW5kX3ZtX2FyZWEoYWRkcik7XG4tLVxubW0vdm1hbGxvYy5jPTYzPXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7XG4tLVxubW0vdm1hbGxvYy5jLTY1LVxubW0vdm1hbGxvYy5jOjY2OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xubW0vdm1hbGxvYy5jLTY3LXN0YXRpYyBib29sIF9fcm9fYWZ0ZXJfaW5pdCB2bWFwX2FsbG93X2h1Z2UgPSB0cnVlO1xuLS1cbm1tL3ZtYWxsb2MuYz03ND1lYXJseV9wYXJhbShcJiMzNDtub2h1Z2V2bWFsbG9jXCYjMzQ7LCBzZXRfbm9odWdldm1hbGxvYyk7XG5tbS92bWFsbG9jLmM6NzU6I2Vsc2UgLyogQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MgKi9cbm1tL3ZtYWxsb2MuYy03Ni1zdGF0aWMgY29uc3QgYm9vbCB2bWFwX2FsbG93X2h1Z2UgPSBmYWxzZTtcbm1tL3ZtYWxsb2MuYzo3NzojZW5kaWZcdC8qIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DICovXG5tbS92bWFsbG9jLmMtNzgtXG4tLVxubW0vdm1hbGxvYy5jPTcwOT1pbnQgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtNzEzLVxubW0vdm1hbGxvYy5jOjcxNDpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQykpXG5tbS92bWFsbG9jLmMtNzE1LVx0XHRwYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDtcbi0tXG5tbS92bWFsbG9jLmM9MzE0MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2bV9hcmVhX3BhZ2Vfb3JkZXIoc3RydWN0IHZtX3N0cnVjdCAqdm0pXG5tbS92bWFsbG9jLmMtMzE0MS17XG5tbS92bWFsbG9jLmM6MzE0MjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0Ncbm1tL3ZtYWxsb2MuYy0zMTQzLVx0cmV0dXJuIHZtLVx1MDAzZXBhZ2Vfb3JkZXI7XG4tLVxubW0vdm1hbGxvYy5jPTMxNTQ9c3RhdGljIGlubGluZSB2b2lkIHNldF92bV9hcmVhX3BhZ2Vfb3JkZXIoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3ZtYWxsb2MuYy0zMTU1LXtcbm1tL3ZtYWxsb2MuYzozMTU2OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xubW0vdm1hbGxvYy5jLTMxNTctXHR2bS1cdTAwM2VwYWdlX29yZGVyID0gb3JkZXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk2MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB2bWFwIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHZpcnR1YWwgbWFwcGluZ3MgYW5kIHBvdGVudGlhbGx5IGh1Z2UgcGFnZXMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSBvbiBgQVJNNjRgIGFuZCBgWDg2XzY0YCBhcmNoaXRlY3R1cmVzLiBTaW5jZSB0aG9zZSBhcmNoaXRlY3R1cmVzIGF1dG9tYXRpY2FsbHkgZW5hYmxlIGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCwgYEhBVkVfQVJDSF9IVUdFX1ZNQVBgLCBhbmQgYEhVR0VUTEJfUEFHRWAsIEkgY2FuIGFzc3VtZSB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgYWxyZWFkeSBiYWtlZCBpbi4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEJhc2VkIG9uIHRoZSBuYW1lcywgYHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZGAsIGB2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWFgLCBgdm1hcF9zZXRfcHRlc2AsIGB2bWFwX3BhZ2VzX3B0ZV9yYW5nZWAsIGB2bWFwX3BhZ2VzX3BtZF9yYW5nZWAsIGB2bWFwX3BhZ2VzX3B1ZF9yYW5nZWAsIGB2bWFwX3BhZ2VzX3A0ZF9yYW5nZWAsIGB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa2AsIGBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAsIGB2bWFwYCwgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAsIGBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplYCwgYG51bV9jb250aWdfcHRlc2AsIGFuZCBgYXJjaF9tYWtlX2h1Z2VfcHRlYCBhcmUgZ29pbmcgdG8gYmUga2V5IHBsYXllcnMuCgpNeSBnb2FsIGlzIHRvIG5hcnJvdyBkb3duIHRoZSBhY3R1YWwgc3ltYm9scyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIGB2bWFwYCBhbmQgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgYXJlIHByb2JhYmx5IGdvaW5nIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3IgdGhlIGFsbG9jYXRvci4gYHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZGAgYW5kIGB2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWFgIGxpa2VseSBoYW5kbGUgdGhlIGJ1bGsgb2YgdGhlIG1hcHBpbmcgcHJvY2Vzcy4gYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCBwcm9iYWJseSBvcHRpbWl6ZXMgdGhlIG1hcHBpbmcuIEkgd2lsbCBpZ25vcmUgYHZtYXBfc2V0X3B0ZXNgIGJlY2F1c2UgaXQgaXMgYW4gYF9fYWx3YXlzX2lubGluZWAgYW5kIGBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplYCwgYW5kIGBudW1fY29udGlnX3B0ZXNgIGFzIHRoZXkgYXJlIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbnMuIEkgd2lsbCBuZWVkIHRvIGxvb2sgaW50byBgYXJjaF9tYWtlX2h1Z2VfcHRlYCBhcyBpdCBpcyBhIGZ1bmN0aW9uIGRlZmluZWQgaW4gYGFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJjaF9tYWtlX2h1Z2VfcHRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMucnN0PTIwMz1IdWdlVExCIFBhZ2UgVGFibGUgSGVscGVyc1xuLS1cbkRvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMucnN0LTIwOC0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzO1xuRG9jdW1lbnRhdGlvbi9tbS9hcmNoX3BndGFibGVfaGVscGVycy5yc3Q6MjA5OnwgYXJjaF9tYWtlX2h1Z2VfcHRlICAgICAgICB8IENyZWF0ZXMgYSBIdWdlVExCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG5Eb2N1bWVudGF0aW9uL21tL2FyY2hfcGd0YWJsZV9oZWxwZXJzLnJzdC0yMTAtJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0Mztcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD0yMj1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9jbGVhcl9odWdldGxiX2ZsYWdzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMzQtXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDozNTpwdGVfdCBhcmNoX21ha2VfaHVnZV9wdGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdCwgdm1fZmxhZ3NfdCBmbGFncyk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDozNjojZGVmaW5lIGFyY2hfbWFrZV9odWdlX3B0ZSBhcmNoX21ha2VfaHVnZV9wdGVcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTM3LSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9TRVRfSFVHRV9QVEVfQVRcbi0tXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM9Nzg9c3RhdGljIGludCBmaW5kX251bV9jb250aWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtOTctLypcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzo5ODogKiBudW1fY29udGlnX3B0ZXMoKSwgc2V0X2h1Z2VfcHRlX2F0KCkgYW5kIGFyY2hfbWFrZV9odWdlX3B0ZSgpIGNhbiBiZVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTk5LSAqIHVzZWQgYnkgbm9uLWh1Z2V0bGJmcyh2bWFsbG9jKSBtbSBjb2RlIHRvIHNldCBtdWx0aXBsZSBodWdlIG1hcHBpbmdzXG4tLVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jPTMzMT11bnNpZ25lZCBsb25nIGh1Z2V0bGJfbWFza19sYXN0X3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtMzU0LVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjM1NTpwdGVfdCBhcmNoX21ha2VfaHVnZV9wdGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdCwgdm1fZmxhZ3NfdCBmbGFncylcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zNTYte1xuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaD0zOD1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9odWdldGxiLTh4eC5oLTQ3LSNpZmRlZiBDT05GSUdfUFBDXzRLX1BBR0VTXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzMyL2h1Z2V0bGItOHh4Lmg6NDg6c3RhdGljIGlubGluZSBwdGVfdCBhcmNoX21ha2VfaHVnZV9wdGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdCwgdm1fZmxhZ3NfdCBmbGFncylcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaC00OS17XG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9odWdldGxiLTh4eC5oLTU2LX1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaDo1NzojZGVmaW5lIGFyY2hfbWFrZV9odWdlX3B0ZSBhcmNoX21ha2VfaHVnZV9wdGVcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaC01OC0jZW5kaWZcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoL2h1Z2V0bGItZTUwMC5oPTc9c3RhdGljIGlubGluZSBpbnQgY2hlY2tfYW5kX2dldF9odWdlX3BzaXplKGludCBzaGlmdClcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoL2h1Z2V0bGItZTUwMC5oLTE0LVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC9odWdldGxiLWU1MDAuaDoxNTpzdGF0aWMgaW5saW5lIHB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC9odWdldGxiLWU1MDAuaC0xNi17XG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC9odWdldGxiLWU1MDAuaC0yMS19XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoL2h1Z2V0bGItZTUwMC5oOjIyOiNkZWZpbmUgYXJjaF9tYWtlX2h1Z2VfcHRlIGFyY2hfbWFrZV9odWdlX3B0ZVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC9odWdldGxiLWU1MDAuaC0yMy1cbi0tXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoLzh4eC5jPTUyPXN0YXRpYyBpbnQgX19yZWYgX19lYXJseV9tYXBfa2VybmVsX2h1Z2VwYWdlKHVuc2lnbmVkIGxvbmcgdmEsIHBoeXNfYWRkcl90IHBhLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvOHh4LmMtOTAtXHRzZXRfaHVnZV9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgdmEsIHB0ZXAsXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoLzh4eC5jOjkxOlx0XHRcdGFyY2hfbWFrZV9odWdlX3B0ZShwZm5fcHRlKHBhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBwcm90KSwgc2hpZnQsIDApLFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC84eHguYy05Mi1cdFx0XHQxVUwgXHUwMDNjXHUwMDNjIHNoaWZ0KTtcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD00OD1wdGVfdCBodWdlX3B0ZXBfZ2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTtcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQ5LVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmg6NTA6cHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsIHZtX2ZsYWdzX3QgZmxhZ3MpO1xuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmg6NTE6I2RlZmluZSBhcmNoX21ha2VfaHVnZV9wdGUgYXJjaF9tYWtlX2h1Z2VfcHRlXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC01Mi1cbi0tXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM9MTcyPXN0YXRpYyBwdGVfdCBnZXRfY2xlYXJfY29udGlnX2ZsdXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy0xODYtXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM6MTg3OnB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTE4OC17XG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0Lmg9Mzc0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfd3JpdGUocHRlX3QgcHRlKVxuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oLTM5Mi0jaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oOjM5MzpwdGVfdCBhcmNoX21ha2VfaHVnZV9wdGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdCwgdm1fZmxhZ3NfdCBmbGFncyk7XG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaDozOTQ6I2RlZmluZSBhcmNoX21ha2VfaHVnZV9wdGUgYXJjaF9tYWtlX2h1Z2VfcHRlXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaC0zOTUtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcHRlX2RlZmF1bHRfaHVnZV9tYXNrKHZvaWQpXG4tLVxuYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jPTgxPXN0YXRpYyBwdGVfdCBodWdlcGFnZV9zaGlmdF90b190dGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdClcbi0tXG5hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmMtODgtXG5hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmM6ODk6cHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsIHZtX2ZsYWdzX3QgZmxhZ3MpXG5hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmMtOTAte1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTgzNz1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9jbGVhcl9odWdldGxiX2ZsYWdzKHN0cnVjdCBmb2xpbyAqZm9saW8pIHsgfVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg0MC1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjg0MTojaWZuZGVmIGFyY2hfbWFrZV9odWdlX3B0ZVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODQyOnN0YXRpYyBpbmxpbmUgcHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04NDMtXHRcdFx0XHQgICAgICAgdm1fZmxhZ3NfdCBmbGFncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9ODg1PXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg5MC1cdHB0ZSA9IHBmbl9wdGUoYXJncy1cdTAwM2VmaXhlZF9wbWRfcGZuLCBhcmdzLVx1MDAzZXBhZ2VfcHJvdCk7XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODkxOlx0cHRlID0gYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZSwgUE1EX1NISUZULCBWTV9BQ0NFU1NfRkxBR1MpO1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg5Mi1cbi0tXG5tbS9odWdldGxiLmM9NDgwND1zdGF0aWMgcHRlX3QgbWFrZV9odWdlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtNDgxNS1cdGVudHJ5ID0gcHRlX21reW91bmcoZW50cnkpO1xubW0vaHVnZXRsYi5jOjQ4MTY6XHRlbnRyeSA9IGFyY2hfbWFrZV9odWdlX3B0ZShlbnRyeSwgc2hpZnQsIHZtYS1cdTAwM2V2bV9mbGFncyk7XG5tbS9odWdldGxiLmMtNDgxNy1cbi0tXG5tbS9odWdldGxiLmM9NjM4ND1sb25nIGh1Z2V0bGJfY2hhbmdlX3Byb3RlY3Rpb24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTY0OTktXHRcdFx0cHRlID0gaHVnZV9wdGVfbW9kaWZ5KG9sZF9wdGUsIG5ld3Byb3QpO1xubW0vaHVnZXRsYi5jOjY1MDA6XHRcdFx0cHRlID0gYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZSwgc2hpZnQsIHZtYS1cdTAwM2V2bV9mbGFncyk7XG5tbS9odWdldGxiLmMtNjUwMS1cdFx0XHRpZiAodWZmZF93cClcbi0tXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTQxOS1cbm1tL21pZ3JhdGUuYzo0MjA6XHRcdFx0cHRlID0gYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZSwgc2hpZnQsIHZtYS1cdTAwM2V2bV9mbGFncyk7XG5tbS9taWdyYXRlLmMtNDIxLVx0XHRcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKVxuLS1cbm1tL3ZtYWxsb2MuYz0xMDE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZtYXBfc2V0X3B0ZXMocHRlX3QgKnB0ZSxcbi0tXG5tbS92bWFsbG9jLmMtMTExLVxubW0vdm1hbGxvYy5jOjExMjpcdFx0ZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIGlsb2cyKHNpemUpLCAwKTtcbm1tL3ZtYWxsb2MuYy0xMTMtXHRcdHNldF9odWdlX3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5LCBzaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ4MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBWaXJ0dWFsIE1lbW9yeSBNYXBwaW5nIEZ1bmN0aW9ucyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmcgY29kZSwgYW5kIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2Vzcy4gSW5pdGlhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gYSBjb3JlIHNldCBvZiBmdW5jdGlvbnM6IGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgLCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCwgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCwgYF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoYCwgYHZtYXBgLCBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCwgYHZtYXBfcGFnZXNfcHRlX3JhbmdlYCwgYHZtYXBfcGFnZXNfcG1kX3JhbmdlYCwgYHZtYXBfcGFnZXNfcHVkX3JhbmdlYCwgYW5kIGB2bWFwX3BhZ2VzX3A0ZF9yYW5nZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLgoKTXkgZmlyc3Qgc3RlcCBpcyBjaGVja2luZyB0aGUgdmlzaWJpbGl0eSBvZiBgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYCBhbmQgYHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYWAuIEFoYSwgdGhleSYjMzk7cmUgc3RhdGljIHdpdGhpbiBgbW0vdm1hbGxvYy5jYC4gSW50ZXJlc3RpbmcuIGB2bWFwYCBpcyBleHBvcnRlZCwgYXMgaXMgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAuIFNpbWlsYXJseSwgYF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoYCBpcyBhbHNvIGV4cG9ydGVkLCB3aGlsZSBgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGtgIGlzIHN0YXRpYy4KCkdpdmVuIHRoYXQgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMsIEkgd2lsbCBpbmNsdWRlIGFsbCBmdW5jdGlvbnMgbGlzdGVkIGluIG15IHRob3VnaHRzOgpgdm1hcGAKYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAKYF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoYApgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYApgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYApgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGtgCmB2bWFwX3BhZ2VzX3B0ZV9yYW5nZWAKYHZtYXBfcGFnZXNfcG1kX3JhbmdlYApgdm1hcF9wYWdlc19wdWRfcmFuZ2VgCmB2bWFwX3BhZ2VzX3A0ZF9yYW5nZWAKCkkgcmVhbGl6ZWQgSSBuZWVkIHRvIGJlICpzdXJlKiB0byBpbmNsdWRlIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgIGFuZCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCBiZWNhdXNlIHRoZXkgYXJlIHN0YXRpYyBidXQgY3J1Y2lhbCwgYW5kIGFsc28gYGFyY2hfbWFrZV9odWdlX3B0ZWAgZnJvbSBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYC4KCk5vdywgbW92aW5nIG9uIHRvIGNvbmZpZ3VyYXRpb24gY29uc2lkZXJhdGlvbnMuIEkgc2VlIGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCwgYEhBVkVfQVJDSF9IVUdFX1ZNQVBgLCBhbmQgYEhVR0VUTEJfUEFHRWAgYXJlIHJlbGV2YW50LiBXYWl0LCBgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AgYW5kIGBIQVZFX0FSQ0hfSFVHRV9WTUFQYCBhcmUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCwgc28gSSBkb24mIzM5O3QgbmVlZCB0byB3b3JyeSBhYm91dCB1c2VyIHNlbGVjdGlvbi4gSG93ZXZlciwgYEhVR0VUTEJfUEFHRWAgaXMgYSB1c2VyLXNlbGVjdGFibGUgY29uZmlnLCBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IGl04oCZcyBiZWluZyB1c2VkLgoKTG9va2luZyBpbnRvIHRoZSBjb2RlLCBJIHNlZSBhIGAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRWAgaW5zaWRlIGB2bWFwX3NldF9wdGVzYCwgd2hpY2ggbWVhbnMgdGhlIG5ldyBjb2RlIHBhdGggd2l0aGluIHRoaXMgZnVuY3Rpb24gaXMgb25seSB0ZXN0ZWQgd2hlbiB0aGUgYEhVR0VUTEJfUEFHRWAgY29uZmlnIGlzIGVuYWJsZWQuIFRoZXJlZm9yZSwgdGVzdGluZyB0aGlzIGNvZGUgcmVxdWlyZXMgYEhVR0VUTEJfUEFHRWAgdG8gYmUgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgYXJjaC9hcm02NC9LY29uZmlnYCB0byBzZWUgaG93IHRoaXMgaXMgZGVmaW5lZCBpbiB0aGF0IGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7NjRrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVx0Ym9vbCBcJiMzNDsyNTZrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0OzFNQlwmIzM0O1xuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cdGJvb2wgXCYjMzQ7NE1CXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXHRib29sIFwmIzM0OzY0TUJcJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG5mcy9LY29uZmlnLTI2NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI3Mi1cbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcbmZzL0tjb25maWctMjc0LVx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNzYtXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmZzL0tjb25maWctMjc4LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4tLVxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTcwOC1cbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vS2NvbmZpZy03MTAtXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MDQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipBbmFseXppbmcgdGhlIEh1Z2VUTEIgUGFnZSBEZWZpbml0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYEhVR0VUTEJfUEFHRWAgaXMgZXNzZW50aWFsbHkgZGVmaW5lZCBhcyB0aGUgc2FtZSB0aGluZyBhcyBgZGVmX2Jvb2wgSFVHRVRMQkZTYC4gVGhpcyBtZWFucyB0aGUgYEhVR0VUTEJGU2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgdGhlIGtleSB0byBlbmFibGluZyB0aGUgYEhVR0VUTEJfUEFHRWAgZnVuY3Rpb25hbGl0eS4gU28sIGlmIEkgd2FudCB0byB3b3JrIHdpdGggaHVnZSBwYWdlcywgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBIVUdFVExCRlNgIGlzIGVuYWJsZWQgd2l0aGluIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBJdCB0ZWxscyBtZSB3aGVyZSB0byBsb29rIHRvIGVuc3VyZSBpdCYjMzk7cyBhdmFpbGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY3MQoJCQkJCQkJb3V0cHV0OiAyMTMKCQkJCQkJCXRob3VnaHRzOiA0OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb250aWd1b3VzIFBURSBNYXBwaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGVuYWJsaW5nIGBIVUdFVExCRlNgIGlzIHRoZSByZWxldmFudCBjb25maWcgZm9yIHRoaXMgcGF0Y2guIEkgYWxzbyBzZWUgdGhhdCBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIGFuZCBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVBgIGFyZSBzZWxlY3RlZCBieSBhcm02NCwgYnV0IGBIVUdFVExCRlNgIGlzIHRoZSBrZXkgb25lLgoKSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IHRoZSB2YXJpb3VzIHN5bWJvbHMgdG91Y2hlZCBieSB0aGlzIHBhdGNoOiBgdm1hcGAsIGFuZCB0aGUgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBmb3IgYHZtYXBgIC0gYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAsIGBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAsIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgLCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCwgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCwgYHZtYXBfcGFnZXNfcHRlX3JhbmdlYCwgYHZtYXBfcGFnZXNfcG1kX3JhbmdlYCwgYHZtYXBfcGFnZXNfcHVkX3JhbmdlYCwgYHZtYXBfcGFnZXNfcDRkX3JhbmdlYCBhbmQgZmluYWxseSwgY3JpdGljYWxseSwgYGFyY2hfbWFrZV9odWdlX3B0ZWAuIEkmIzM5O3ZlIGNoZWNrZWQgYW5kIGBhcmNoX21ha2VfaHVnZV9wdGVgICppcyogZGVmaW5lZCBpbiBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYC4gT3RoZXIgYXJjaGl0ZWN0dXJlcywgbGlrZSBwb3dlcnBjLCByaXNjdiwgYW5kIHNwYXJjIGFsc28gZGVmaW5lIGl0IGJ1dCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRvdWNoZXMgdGhlIGFybTY0IGltcGxlbWVudGF0aW9uLgoKVGhlIHBhdGNoIG1vZGlmaWVzIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaGAsIGBhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNgLCBhbmQgYG1tL3ZtYWxsb2MuY2AuIFRoZSBjaGFuZ2VzIGluIGBtbS92bWFsbG9jLmNgIGFyZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgYnV0IHJlbHkgb24gYGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemVgIGFuZCBgYXJjaF9tYWtlX2h1Z2VfcHRlYCBkZWZpbmVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUuIFNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIGNvbnRpZ3VvdXMgUFRFIG1hcHBpbmdzIGZvciB2bWFsbG9jIG9uIGFybTY0LgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCB0aGUgYXJtNjQgYXJjaGl0ZWN0dXJlLiBJdCBpbnRyb2R1Y2VzIGNvbnRpZ3VvdXMgUFRFIG1hcHBpbmdzIGZvciB2bWFsbG9jIG9uIGFybTY0IGFuZCB1cGRhdGVzIGB2bWFwYCB0byBzdXBwb3J0IGJhdGNoZWQgbWFwcGluZyBmb3IgY29udGlndW91cyBwYWdlcy4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbi4gR2l2ZW4gdGhlc2UgY2hhbmdlcywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBzdGFiaWxpdHkuIEkgc2hvdWxkIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtYXJrIHRoaXMgYXMgYW4gaW1wb3J0YW50IGZ1enppbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcCYjMzQ7LAogICAgJiMzNDtfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7X192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2gmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkJiMzNDssCiAgICAmIzM0O3ZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3BtZF9yYW5nZSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3B1ZF9yYW5nZSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3A0ZF9yYW5nZSYjMzQ7LAogICAgJiMzNDthcmNoX21ha2VfaHVnZV9wdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBjb250aWd1b3VzIFBURSBtYXBwaW5ncyBmb3Igdm1hbGxvYyBvbiBhcm02NCwgYW5kIHVwZGF0ZXMgdm1hcCB0byBzdXBwb3J0IGJhdGNoZWQgbWFwcGluZyBmb3IgY29udGlndW91cyBwYWdlcy4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcCYjMzQ7LAogICAgJiMzNDtfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7X192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2gmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkJiMzNDssCiAgICAmIzM0O3ZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3BtZF9yYW5nZSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3B1ZF9yYW5nZSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3A0ZF9yYW5nZSYjMzQ7LAogICAgJiMzNDthcmNoX21ha2VfaHVnZV9wdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBjb250aWd1b3VzIFBURSBtYXBwaW5ncyBmb3Igdm1hbGxvYyBvbiBhcm02NCwgYW5kIHVwZGF0ZXMgdm1hcCB0byBzdXBwb3J0IGJhdGNoZWQgbWFwcGluZyBmb3IgY29udGlndW91cyBwYWdlcy4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjQ4OjU2LjE0MDA2Njk2OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTkyOTI4MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBcIixcbiAgICBcIl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hcIixcbiAgICBcInZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZFwiLFxuICAgIFwidm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa1wiLFxuICAgIFwidm1hcF9wYWdlc19wdGVfcmFuZ2VcIixcbiAgICBcInZtYXBfcGFnZXNfcG1kX3JhbmdlXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3B1ZF9yYW5nZVwiLFxuICAgIFwidm1hcF9wYWdlc19wNGRfcmFuZ2VcIixcbiAgICBcImFyY2hfbWFrZV9odWdlX3B0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgY29udGlndW91cyBQVEUgbWFwcGluZ3MgZm9yIHZtYWxsb2Mgb24gYXJtNjQsIGFuZCB1cGRhdGVzIHZtYXAgdG8gc3VwcG9ydCBiYXRjaGVkIG1hcHBpbmcgZm9yIGNvbnRpZ3VvdXMgcGFnZXMuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjQ4OjU2LjE0MDA3MjI4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMzA2OTcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhkMTcwYWRkNGRkMWMyNzg0MmY5M2VkM2JiYWM0NGEwODY2NzczOGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMDM6NDg6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaFxcbmluZGV4IDRlYzFhY2QzYzFiMzQ4Li5kNjY1ZjlkNjg3NDIyZCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oXFxuQEAgLTIzLDEwICsyMywxNCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCB1NjQgcGZuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbitcXG4gXFx0LypcXG4gXFx0ICogSWYgdGhlIGJsb2NrIGlzIGF0IGxlYXN0IENPTlRfUFRFX1NJWkUgaW4gc2l6ZSwgYW5kIGlzIG5hdHVyYWxseVxcbiBcXHQgKiBhbGlnbmVkIGluIGJvdGggdmlydHVhbCBhbmQgcGh5c2ljYWwgc3BhY2UsIHRoZW4gd2UgY2FuIHB0ZS1tYXAgdGhlXFxuIFxcdCAqIGJsb2NrIHVzaW5nIHRoZSBQVEVfQ09OVCBiaXQgZm9yIG1vcmUgZWZmaWNpZW50IHVzZSBvZiB0aGUgVExCLlxcbitcXHQgKiBUaGUgcmV0dXJuZWQgbWFwcGluZyBzaXplIG1heSBjb3ZlciBtdWx0aXBsZSBDT05UX1BURV9TSVpFIGJsb2NrcyxcXG4rXFx0ICogY2FwcGVkIGJlbG93IFBNRF9TSVpFLlxcbiBcXHQgKi9cXG4gXFx0aWYgKG1heF9wYWdlX3NoaWZ0IFxcdTAwM2MgQ09OVF9QVEVfU0hJRlQpXFxuIFxcdFxcdHJldHVybiBQQUdFX1NJWkU7XFxuQEAgLTQwLDcgKzQ0LDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUodW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRpZiAoIUlTX0FMSUdORUQoUEZOX1BIWVMocGZuKSwgQ09OVF9QVEVfU0laRSkpXFxuIFxcdFxcdHJldHVybiBQQUdFX1NJWkU7XFxuIFxcbi1cXHRyZXR1cm4gQ09OVF9QVEVfU0laRTtcXG4rXFx0c2l6ZSA9IG1pbjMoZW5kIC0gYWRkciwgMVVMIFxcdTAwM2NcXHUwMDNjIG1heF9wYWdlX3NoaWZ0LCBQTURfU0laRSBcXHUwMDNlXFx1MDAzZSAxKTtcXG4rXFx0c2l6ZSA9IHJvdW5kZG93bl9wb3dfb2ZfdHdvKHNpemUpO1xcbitcXHRyZXR1cm4gc2l6ZTtcXG4gfVxcbiBcXG4gI2RlZmluZSBhcmNoX3ZtYXBfcHRlX3JhbmdlX3VubWFwX3NpemUgYXJjaF92bWFwX3B0ZV9yYW5nZV91bm1hcF9zaXplXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xcbmluZGV4IDMwNzcyYTkwOWFlYTNlLi43NzlkMzI5ODZkMGQ2NyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcXG4rKysgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcXG5AQCAtOTQsNiArOTQsMTEgQEAgc3RhdGljIGludCBmaW5kX251bV9jb250aWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0cmV0dXJuIENPTlRfUFRFUztcXG4gfVxcbiBcXG4rLypcXG4rICogbnVtX2NvbnRpZ19wdGVzKCksIHNldF9odWdlX3B0ZV9hdCgpIGFuZCBhcmNoX21ha2VfaHVnZV9wdGUoKSBjYW4gYmVcXG4rICogdXNlZCBieSBub24taHVnZXRsYmZzKHZtYWxsb2MpIG1tIGNvZGUgdG8gc2V0IG11bHRpcGxlIGh1Z2UgbWFwcGluZ3NcXG4rICogYXQgdGhlIFBURSBsZXZlbC5cXG4rICovXFxuIHN0YXRpYyBpbmxpbmUgaW50IG51bV9jb250aWdfcHRlcyh1bnNpZ25lZCBsb25nIHNpemUsIHNpemVfdCAqcGdzaXplKVxcbiB7XFxuIFxcdGludCBjb250aWdfcHRlcyA9IDE7XFxuQEAgLTExMCw2ICsxMTUsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgbnVtX2NvbnRpZ19wdGVzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgc2l6ZV90ICpwZ3NpemUpXFxuIFxcdFxcdGNvbnRpZ19wdGVzID0gQ09OVF9QVEVTO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4rXFx0XFx0aWYgKHNpemUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzYyBQTURfU0laRSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHRJU19BTElHTkVEKHNpemUsIENPTlRfUFRFX1NJWkUpKSB7XFxuK1xcdFxcdFxcdCpwZ3NpemUgPSBQQUdFX1NJWkU7XFxuK1xcdFxcdFxcdGNvbnRpZ19wdGVzID0gc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbiBcXHRcXHRXQVJOX09OKCFfX2h1Z2V0bGJfdmFsaWRfc2l6ZShzaXplKSk7XFxuIFxcdH1cXG4gXFxuQEAgLTM1OSw2ICszNzAsMTAgQEAgcHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsIHZtX2ZsYWdzX3QgZmxhZ3MpXFxuIFxcdGNhc2UgQ09OVF9QVEVfU0laRTpcXG4gXFx0XFx0cmV0dXJuIHB0ZV9ta2NvbnQoZW50cnkpO1xcbiBcXHRkZWZhdWx0OlxcbitcXHRcXHRpZiAocGFnZXNpemUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHBhZ2VzaXplIFxcdTAwM2MgUE1EX1NJWkUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0SVNfQUxJR05FRChwYWdlc2l6ZSwgQ09OVF9QVEVfU0laRSkpXFxuK1xcdFxcdFxcdHJldHVybiBwdGVfbWtjb250KGVudHJ5KTtcXG4rXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcdHByX3dhcm4oXFxcIiVzOiB1bnJlY29nbml6ZWQgaHVnZSBwYWdlIHNpemUgMHglbHhcXFxcblxcXCIsXFxuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xcbmluZGV4IDFhZmNhMzU2OGI5YjY1Li45NWZmY2EyMTk0Njc5MyAxMDA2NDRcXG4tLS0gYS9tbS92bWFsbG9jLmNcXG4rKysgYi9tbS92bWFsbG9jLmNcXG5AQCAtOTEsNiArOTEsMzMgQEAgc3RydWN0IHZmcmVlX2RlZmVycmVkIHtcXG4gc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB2ZnJlZV9kZWZlcnJlZCwgdmZyZWVfZGVmZXJyZWQpO1xcbiBcXG4gLyoqKiBQYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgKioqL1xcbitcXG4rLypcXG4rICogVHJ5IGNvbnRpZ3VvdXMgbWFwcGluZ3MgYXQgdGhlIFBURSBsZXZlbCBmb3IgYXJjaGVzIHdoaWNoIHN1cHBvcnQgdGhlbSwgYW5kIGlmXFxuKyAqIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyLiBGYWxsIGJhY2sgdG8gUEFHRV9TSVpFIG1hcHBpbmdzIG90aGVyd2lzZS5cXG4rICpcXG4rICogUmV0dXJuOiBtYXBwaW5nIHNpemUuXFxuKyAqL1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hcF9zZXRfcHRlcyhwdGVfdCAqcHRlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCB1NjQgcGZuLFxcbitcXHRcXHRwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4rXFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbitcXG4rXFx0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTtcXG4rXFx0aWYgKHNpemUgIT0gUEFHRV9TSVpFKSB7XFxuK1xcdFxcdHB0ZV90IGVudHJ5ID0gcGZuX3B0ZShwZm4sIHByb3QpO1xcbitcXG4rXFx0XFx0ZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIGlsb2cyKHNpemUpLCAwKTtcXG4rXFx0XFx0c2V0X2h1Z2VfcHRlX2F0KFxcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5LCBzaXplKTtcXG4rXFx0XFx0cmV0dXJuIHNpemU7XFxuK1xcdH1cXG4rI2VuZGlmXFxuK1xcdHNldF9wdGVfYXQoXFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTtcXG4rXFx0cmV0dXJuIFBBR0VfU0laRTtcXG4rfVxcbitcXG4gc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdCwgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuQEAgLTk4LDcgKzEyNSw4IEBAIHN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0cHRlX3QgKnB0ZTtcXG4gXFx0dTY0IHBmbjtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuLVxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbitcXHR1bnNpZ25lZCBpbnQgc3RlcHM7XFxuIFxcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCFQQUdFX0FMSUdORUQoZW5kIC0gYWRkcikpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtMTE5LDIwICsxNDcsOSBAQCBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdFxcdEJVRygpO1xcbiBcXHRcXHR9XFxuIFxcbi0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbi1cXHRcXHRzaXplID0gYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZShhZGRyLCBlbmQsIHBmbiwgbWF4X3BhZ2Vfc2hpZnQpO1xcbi1cXHRcXHRpZiAoc2l6ZSAhPSBQQUdFX1NJWkUpIHtcXG4tXFx0XFx0XFx0cHRlX3QgZW50cnkgPSBwZm5fcHRlKHBmbiwgcHJvdCk7XFxuLVxcbi1cXHRcXHRcXHRlbnRyeSA9IGFyY2hfbWFrZV9odWdlX3B0ZShlbnRyeSwgaWxvZzIoc2l6ZSksIDApO1xcbi1cXHRcXHRcXHRzZXRfaHVnZV9wdGVfYXQoXFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgZW50cnksIHNpemUpO1xcbi1cXHRcXHRcXHRwZm4gKz0gUEZOX0RPV04oc2l6ZSk7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLSNlbmRpZlxcbi1cXHRcXHRzZXRfcHRlX2F0KFxcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7XFxuLVxcdFxcdHBmbisrO1xcbi1cXHR9IHdoaWxlIChwdGUgKz0gUEZOX0RPV04oc2l6ZSksIGFkZHIgKz0gc2l6ZSwgYWRkciAhPSBlbmQpO1xcbitcXHRcXHRzaXplID0gdm1hcF9zZXRfcHRlcyhwdGUsIGFkZHIsIGVuZCwgcGZuLCBwcm90LCBtYXhfcGFnZV9zaGlmdCk7XFxuK1xcdFxcdHN0ZXBzID0gUEZOX0RPV04oc2l6ZSk7XFxuK1xcdH0gd2hpbGUgKHB0ZSArPSBzdGVwcywgcGZuICs9IHN0ZXBzLCBhZGRyICs9IHNpemUsIGFkZHIgIT0gZW5kKTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXHQqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7XFxuQEAgLTUyNCw4ICs1NDEsMTAgQEAgdm9pZCB2dW5tYXBfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZClcXG4gXFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcXG4tXFx0XFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXFxuK1xcdFxcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBwZm4sIHNpemU7XFxuK1xcdHVuc2lnbmVkIGludCBzdGVwcztcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcdHB0ZV90ICpwdGU7XFxuIFxcbkBAIC01NTYsOSArNTc1LDEwIEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0c2V0X3B0ZV9hdChcXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBta19wdGUocGFnZSwgcHJvdCkpO1xcbi1cXHRcXHQoKm5yKSsrO1xcbi1cXHR9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTtcXG4rXFx0XFx0cGZuID0gcGFnZV90b19wZm4ocGFnZSk7XFxuK1xcdFxcdHNpemUgPSB2bWFwX3NldF9wdGVzKHB0ZSwgYWRkciwgZW5kLCBwZm4sIHByb3QsIHNoaWZ0KTtcXG4rXFx0XFx0c3RlcHMgPSBQRk5fRE9XTihzaXplKTtcXG4rXFx0fSB3aGlsZSAocHRlICs9IHN0ZXBzLCAqbnIgKz0gc3RlcHMsIGFkZHIgKz0gc2l6ZSwgYWRkciAhPSBlbmQpO1xcbiBcXG4gXFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XFxuIFxcdCptYXNrIHw9IFBHVEJMX1BURV9NT0RJRklFRDtcXG5AQCAtNTY4LDYwICs1ODgsOTAgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcbiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsXFxuLVxcdFxcdHBndGJsX21vZF9tYXNrICptYXNrKVxcbitcXHRcXHRwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KVxcbiB7XFxuIFxcdHBtZF90ICpwbWQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV4dDtcXG4rXFx0aW50IGVycjtcXG4gXFxuIFxcdHBtZCA9IHBtZF9hbGxvY190cmFjayhcXHUwMDI2aW5pdF9tbSwgcHVkLCBhZGRyLCBtYXNrKTtcXG4gXFx0aWYgKCFwbWQpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRkbyB7XFxuIFxcdFxcdG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcXG4tXFx0XFx0aWYgKHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRcXHRpZiAoc2hpZnQgXFx1MDAzZT0gUE1EX1NISUZUKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXNbKm5yXTtcXG4rXFx0XFx0XFx0cGh5c19hZGRyX3QgcGh5c19hZGRyO1xcbitcXG4rXFx0XFx0XFx0aWYgKFdBUk5fT04oIXBhZ2UpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0XFx0aWYgKFdBUk5fT04oIXBmbl92YWxpZChwYWdlX3RvX3BmbihwYWdlKSkpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdFxcdHBoeXNfYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKTtcXG4rXFxuK1xcdFxcdFxcdGlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c2hpZnQpKSB7XFxuK1xcdFxcdFxcdFxcdCptYXNrIHw9IFBHVEJMX1BNRF9NT0RJRklFRDtcXG4rXFx0XFx0XFx0XFx0Km5yICs9IDEgXFx1MDAzY1xcdTAwM2MgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlcnIgPSB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaywgc2hpZnQpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcXG4tXFx0XFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXFxuK1xcdFxcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXFxuIHtcXG4gXFx0cHVkX3QgKnB1ZDtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0cHVkID0gcHVkX2FsbG9jX3RyYWNrKFxcdTAwMjZpbml0X21tLCBwNGQsIGFkZHIsIG1hc2spO1xcbiBcXHRpZiAoIXB1ZClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGRvIHtcXG4gXFx0XFx0bmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xcbi1cXHRcXHRpZiAodm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2spKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0ZXJyID0gdm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fSB3aGlsZSAocHVkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcDRkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsXFxuLVxcdFxcdHBndGJsX21vZF9tYXNrICptYXNrKVxcbitcXHRcXHRwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KVxcbiB7XFxuIFxcdHA0ZF90ICpwNGQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV4dDtcXG4rXFx0aW50IGVycjtcXG4gXFxuIFxcdHA0ZCA9IHA0ZF9hbGxvY190cmFjayhcXHUwMDI2aW5pdF9tbSwgcGdkLCBhZGRyLCBtYXNrKTtcXG4gXFx0aWYgKCFwNGQpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRkbyB7XFxuIFxcdFxcdG5leHQgPSBwNGRfYWRkcl9lbmQoYWRkciwgZW5kKTtcXG4tXFx0XFx0aWYgKHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdGVyciA9IHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrLCBzaGlmdCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH0gd2hpbGUgKHA0ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tXFx0XFx0cGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcylcXG4rLypcXG4rICogSXQgY2FuIHRha2UgYW4gYXJyYXkgb2YgcGFnZXMgd2hpY2ggYXJlIG5vdCBhbGwgY29udGlndW91cywgYnV0IGl0XFxuKyAqIG1heSBoYXZlIGNvbnRpZ3VvdXMgY2h1bmtzLCBhcyBoaW50ZWQgYnkgQHNoaWZ0LlxcbisgKi9cXG4rc3RhdGljIGludCB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbitcXHRcXHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgc2hpZnQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHI7XFxuIFxcdHBnZF90ICpwZ2Q7XFxuQEAgLTYzNiw3ICs2ODYsNyBAQCBzdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XFxuIFxcdFxcdGlmIChwZ2RfYmFkKCpwZ2QpKVxcbiBcXHRcXHRcXHRtYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDtcXG4tXFx0XFx0ZXJyID0gdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgXFx1MDAyNm5yLCBcXHUwMDI2bWFzayk7XFxuK1xcdFxcdGVyciA9IHZtYXBfcGFnZXNfcDRkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIFxcdTAwMjZuciwgXFx1MDAyNm1hc2ssIHNoaWZ0KTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdH0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xcbkBAIC02NTksMjcgKzcwOSwxMiBAQCBzdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBpbnQgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0cGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IHBhZ2Vfc2hpZnQpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IGksIG5yID0gKGVuZCAtIGFkZHIpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuLVxcbiBcXHRXQVJOX09OKHBhZ2Vfc2hpZnQgXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4gXFxuLVxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQykgfHxcXG4tXFx0XFx0XFx0cGFnZV9zaGlmdCA9PSBQQUdFX1NISUZUKVxcbi1cXHRcXHRyZXR1cm4gdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMpO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yOyBpICs9IDFVIFxcdTAwM2NcXHUwMDNjIChwYWdlX3NoaWZ0IC0gUEFHRV9TSElGVCkpIHtcXG4tXFx0XFx0aW50IGVycjtcXG4tXFxuLVxcdFxcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICsgKDFVTCBcXHUwMDNjXFx1MDAzYyBwYWdlX3NoaWZ0KSxcXG4tXFx0XFx0XFx0XFx0XFx0cGFnZV90b19waHlzKHBhZ2VzW2ldKSwgcHJvdCxcXG4tXFx0XFx0XFx0XFx0XFx0cGFnZV9zaGlmdCk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuLVxcbi1cXHRcXHRhZGRyICs9IDFVTCBcXHUwMDNjXFx1MDAzYyBwYWdlX3NoaWZ0O1xcbi1cXHR9XFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQykpXFxuK1xcdFxcdHBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhhZGRyLCBlbmQsIHByb3QsIHBhZ2VzLCBwYWdlX3NoaWZ0KTtcXG4gfVxcbiBcXG4gaW50IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbkBAIC0zMjc5LDYgKzMzMTQsMTQgQEAgc3RydWN0IHZtX3N0cnVjdCAqZ2V0X3ZtX2FyZWFfY2FsbGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyxcXG4gXFx0XFx0XFx0XFx0ICBOVU1BX05PX05PREUsIEdGUF9LRVJORUwsIGNhbGxlcik7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIodW5zaWduZWQgbG9uZyBzaXplLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCB2b2lkICpjYWxsZXIpXFxuK3tcXG4rXFx0cmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBhbGlnbiwgUEFHRV9TSElGVCwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXFxuK1xcdFxcdFxcdFxcdCAgTlVNQV9OT19OT0RFLCBHRlBfS0VSTkVMLCBjYWxsZXIpO1xcbit9XFxuK1xcbiAvKipcXG4gICogZmluZF92bV9hcmVhIC0gZmluZCBhIGNvbnRpbnVvdXMga2VybmVsIHZpcnR1YWwgYXJlYVxcbiAgKiBAYWRkcjpcXHQgIGJhc2UgYWRkcmVzc1xcbkBAIC0zNTE5LDYgKzM1NjIsMTE2IEBAIHZvaWQgdnVubWFwKGNvbnN0IHZvaWQgKmFkZHIpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh2dW5tYXApO1xcbiBcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdm1fc2hpZnQocGdwcm90X3QgcHJvdCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbit7XFxuK1xcdGlmIChhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSBcXHUwMDI2XFx1MDAyNiBzaXplIFxcdTAwM2U9IFBNRF9TSVpFKVxcbitcXHRcXHRyZXR1cm4gUE1EX1NISUZUO1xcbitcXG4rXFx0cmV0dXJuIGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBnZXRfdm1hcF9iYXRjaF9vcmRlcihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbitcXHRcXHRwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3N0ZXBzLCB1bnNpZ25lZCBpbnQgaWR4KVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbitcXHR1bnNpZ25lZCBpbnQgbnJfY29udGlnO1xcbitcXHRpbnQgb3JkZXI7XFxuK1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG5yX2NvbnRpZyA9IG51bV9wYWdlc19jb250aWd1b3VzKFxcdTAwMjZwYWdlc1tpZHhdLCBtYXhfc3RlcHMpO1xcbitcXHRpZiAobnJfY29udGlnIFxcdTAwM2MgMilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRvcmRlciA9IGlsb2cyKG5yX2NvbnRpZyk7XFxuK1xcdHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2VzW2lkeF0pO1xcbitcXG4rXFx0LyogTGltaXQgb3JkZXIgYnkgcGZuIGFsaWdubWVudCAqL1xcbitcXHRpZiAocGZuIFxcdTAwM2UgMClcXG4rXFx0XFx0b3JkZXIgPSBtaW5fdChpbnQsIG9yZGVyLCBfX2ZmcyhwZm4pKTtcXG4rXFxuK1xcdGlmICh2bV9zaGlmdChwcm90LCBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpID09IFBBR0VfU0hJRlQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIG9yZGVyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbitcXHRcXHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBjb3VudCA9IChlbmQgLSBhZGRyKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHR1bnNpZ25lZCBpbnQgcHJldl9zaGlmdCA9IDAsIGlkeCA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWFwX2FkZHIgPSBhZGRyLCBiYXRjaF9lbmQgPSBhZGRyO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0ga21zYW5fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBjb3VudDsgKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBzaGlmdCA9IFBBR0VfU0hJRlQgK1xcbitcXHRcXHRcXHRnZXRfdm1hcF9iYXRjaF9vcmRlcihwYWdlcywgcHJvdCwgY291bnQgLSBpLCBpKTtcXG4rXFxuK1xcdFxcdGlmICghaSlcXG4rXFx0XFx0XFx0cHJldl9zaGlmdCA9IHNoaWZ0O1xcbitcXG4rXFx0XFx0aWYgKHNoaWZ0ICE9IHByZXZfc2hpZnQpIHtcXG4rXFx0XFx0XFx0ZXJyID0gdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsobWFwX2FkZHIsIGJhdGNoX2VuZCxcXG4rXFx0XFx0XFx0XFx0XFx0cHJvdCwgcGFnZXMgKyBpZHgsIHByZXZfc2hpZnQpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0cHJldl9zaGlmdCA9IHNoaWZ0O1xcbitcXHRcXHRcXHRtYXBfYWRkciA9IGJhdGNoX2VuZDtcXG4rXFx0XFx0XFx0aWR4ID0gaTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogT25jZSBzbWFsbCBwYWdlcyBhcmUgZW5jb3VudGVyZWQsIHRoZSByZW1haW5pbmcgcGFnZXNcXG4rXFx0XFx0ICogYXJlIGxpa2VseSBzbWFsbCBhcyB3ZWxsLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHNoaWZ0ID09IFBBR0VfU0hJRlQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0YmF0Y2hfZW5kICs9IDFVTCBcXHUwMDNjXFx1MDAzYyBzaGlmdDtcXG4rXFx0XFx0aSArPSAxVSBcXHUwMDNjXFx1MDAzYyAoc2hpZnQgLSBQQUdFX1NISUZUKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUmVtYWluaW5nICovXFxuK1xcdGlmIChtYXBfYWRkciBcXHUwMDNjIGVuZClcXG4rXFx0XFx0ZXJyID0gdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsobWFwX2FkZHIsIGVuZCxcXG4rXFx0XFx0XFx0XFx0cHJvdCwgcGFnZXMgKyBpZHgsIHByZXZfc2hpZnQpO1xcbitcXG4rb3V0OlxcbitcXHRmbHVzaF9jYWNoZV92bWFwKGFkZHIsIGVuZCk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICp2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzLCBwZ3Byb3RfdCBwcm90LCBjb25zdCB2b2lkICpjYWxsZXIpXFxuK3tcXG4rXFx0c3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYTtcXG4rXFx0dW5zaWduZWQgaW50IHNoaWZ0O1xcbitcXG4rXFx0aWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzZT0gUE1EX1NJWkUpIHtcXG4rXFx0XFx0dm1fYXJlYSA9IF9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcihzaXplLCBQTURfU0laRSxcXG4rXFx0XFx0XFx0XFx0ZmxhZ3MsIGNhbGxlcik7XFxuK1xcdFxcdGlmICh2bV9hcmVhKVxcbitcXHRcXHRcXHRyZXR1cm4gdm1fYXJlYTtcXG4rXFx0fVxcbitcXG4rXFx0c2hpZnQgPSBhcmNoX3ZtYXBfcHRlX3N1cHBvcnRlZF9zaGlmdChzaXplKTtcXG4rXFx0aWYgKHNoaWZ0IFxcdTAwM2UgUEFHRV9TSElGVCkge1xcbitcXHRcXHR2bV9hcmVhID0gX19nZXRfdm1fYXJlYV9ub2RlX2FsaWduZWRfY2FsbGVyKHNpemUsIDFVTCBcXHUwMDNjXFx1MDAzYyBzaGlmdCxcXG4rXFx0XFx0XFx0XFx0ZmxhZ3MsIGNhbGxlcik7XFxuK1xcdFxcdGlmICh2bV9hcmVhKVxcbitcXHRcXHRcXHRyZXR1cm4gdm1fYXJlYTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcihzaXplLCBQQUdFX1NJWkUsIGZsYWdzLCBjYWxsZXIpO1xcbit9XFxuK1xcbiAvKipcXG4gICogdm1hcCAtIG1hcCBhbiBhcnJheSBvZiBwYWdlcyBpbnRvIHZpcnR1YWxseSBjb250aWd1b3VzIHNwYWNlXFxuICAqIEBwYWdlczogYXJyYXkgb2YgcGFnZSBwb2ludGVyc1xcbkBAIC0zNTU3LDEzICszNzEwLDE0IEBAIHZvaWQgKnZtYXAoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGNvdW50LFxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdHNpemUgPSAodW5zaWduZWQgbG9uZyljb3VudCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbi1cXHRhcmVhID0gZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xcbitcXHRhcmVhID0gdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhKHNpemUsIGZsYWdzLCBwcm90LFxcbitcXHRcXHRcXHRcXHRfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xcbiBcXHRpZiAoIWFyZWEpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXFx1MDAzZWFkZHI7XFxuLVxcdGlmICh2bWFwX3BhZ2VzX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplLCBwZ3Byb3RfbngocHJvdCksXFxuLVxcdFxcdFxcdFxcdHBhZ2VzLCBQQUdFX1NISUZUKSBcXHUwMDNjIDApIHtcXG4rXFx0aWYgKHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZChhZGRyLCBhZGRyICsgc2l6ZSwgcGdwcm90X254KHByb3QpLFxcbitcXHRcXHRcXHRcXHRwYWdlcykgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdHZ1bm1hcChhcmVhLVxcdTAwM2VhZGRyKTtcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG5AQCAtNDAzMCwxMSArNDE4NCw3IEBAIHZvaWQgKl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXFxuIFxcdFxcdCAqIHN1cHBvcnRpbmcgdGhlbS5cXG4gXFx0XFx0ICovXFxuIFxcbi1cXHRcXHRpZiAoYXJjaF92bWFwX3BtZF9zdXBwb3J0ZWQocHJvdCkgXFx1MDAyNlxcdTAwMjYgc2l6ZSBcXHUwMDNlPSBQTURfU0laRSlcXG4tXFx0XFx0XFx0c2hpZnQgPSBQTURfU0hJRlQ7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0c2hpZnQgPSBhcmNoX3ZtYXBfcHRlX3N1cHBvcnRlZF9zaGlmdChzaXplKTtcXG4tXFxuK1xcdFxcdHNoaWZ0ID0gdm1fc2hpZnQocHJvdCwgc2l6ZSk7XFxuIFxcdFxcdGFsaWduID0gbWF4KG9yaWdpbmFsX2FsaWduLCAxVUwgXFx1MDAzY1xcdTAwM2Mgc2hpZnQpO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzo0ODo1Ny4xNTM5NjU0NThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MTc4OTk4NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBcIixcbiAgICBcIl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hcIixcbiAgICBcInZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZFwiLFxuICAgIFwidm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa1wiLFxuICAgIFwidm1hcF9wYWdlc19wdGVfcmFuZ2VcIixcbiAgICBcInZtYXBfcGFnZXNfcG1kX3JhbmdlXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3B1ZF9yYW5nZVwiLFxuICAgIFwidm1hcF9wYWdlc19wNGRfcmFuZ2VcIixcbiAgICBcImFyY2hfbWFrZV9odWdlX3B0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgY29udGlndW91cyBQVEUgbWFwcGluZ3MgZm9yIHZtYWxsb2Mgb24gYXJtNjQsIGFuZCB1cGRhdGVzIHZtYXAgdG8gc3VwcG9ydCBiYXRjaGVkIG1hcHBpbmcgZm9yIGNvbnRpZ3VvdXMgcGFnZXMuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGQxNzBhZGQ0ZGQxYzI3ODQyZjkzZWQzYmJhYzQ0YTA4NjY3NzM4Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDAzOjQ4OjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaFxuaW5kZXggNGVjMWFjZDNjMWIzNDguLmQ2NjVmOWQ2ODc0MjJkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oXG5AQCAtMjMsMTAgKzIzLDE0IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplKHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgdTY0IHBmbixcbiBcdFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBzaXplO1xuK1xuIFx0LypcbiBcdCAqIElmIHRoZSBibG9jayBpcyBhdCBsZWFzdCBDT05UX1BURV9TSVpFIGluIHNpemUsIGFuZCBpcyBuYXR1cmFsbHlcbiBcdCAqIGFsaWduZWQgaW4gYm90aCB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBzcGFjZSwgdGhlbiB3ZSBjYW4gcHRlLW1hcCB0aGVcbiBcdCAqIGJsb2NrIHVzaW5nIHRoZSBQVEVfQ09OVCBiaXQgZm9yIG1vcmUgZWZmaWNpZW50IHVzZSBvZiB0aGUgVExCLlxuK1x0ICogVGhlIHJldHVybmVkIG1hcHBpbmcgc2l6ZSBtYXkgY292ZXIgbXVsdGlwbGUgQ09OVF9QVEVfU0laRSBibG9ja3MsXG4rXHQgKiBjYXBwZWQgYmVsb3cgUE1EX1NJWkUuXG4gXHQgKi9cbiBcdGlmIChtYXhfcGFnZV9zaGlmdCBcdTAwM2MgQ09OVF9QVEVfU0hJRlQpXG4gXHRcdHJldHVybiBQQUdFX1NJWkU7XG5AQCAtNDAsNyArNDQsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoIUlTX0FMSUdORUQoUEZOX1BIWVMocGZuKSwgQ09OVF9QVEVfU0laRSkpXG4gXHRcdHJldHVybiBQQUdFX1NJWkU7XG4gXG4tXHRyZXR1cm4gQ09OVF9QVEVfU0laRTtcbitcdHNpemUgPSBtaW4zKGVuZCAtIGFkZHIsIDFVTCBcdTAwM2NcdTAwM2MgbWF4X3BhZ2Vfc2hpZnQsIFBNRF9TSVpFIFx1MDAzZVx1MDAzZSAxKTtcbitcdHNpemUgPSByb3VuZGRvd25fcG93X29mX3R3byhzaXplKTtcbitcdHJldHVybiBzaXplO1xuIH1cbiBcbiAjZGVmaW5lIGFyY2hfdm1hcF9wdGVfcmFuZ2VfdW5tYXBfc2l6ZSBhcmNoX3ZtYXBfcHRlX3JhbmdlX3VubWFwX3NpemVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcbmluZGV4IDMwNzcyYTkwOWFlYTNlLi43NzlkMzI5ODZkMGQ2NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jXG5AQCAtOTQsNiArOTQsMTEgQEAgc3RhdGljIGludCBmaW5kX251bV9jb250aWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHJldHVybiBDT05UX1BURVM7XG4gfVxuIFxuKy8qXG4rICogbnVtX2NvbnRpZ19wdGVzKCksIHNldF9odWdlX3B0ZV9hdCgpIGFuZCBhcmNoX21ha2VfaHVnZV9wdGUoKSBjYW4gYmVcbisgKiB1c2VkIGJ5IG5vbi1odWdldGxiZnModm1hbGxvYykgbW0gY29kZSB0byBzZXQgbXVsdGlwbGUgaHVnZSBtYXBwaW5nc1xuKyAqIGF0IHRoZSBQVEUgbGV2ZWwuXG4rICovXG4gc3RhdGljIGlubGluZSBpbnQgbnVtX2NvbnRpZ19wdGVzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgc2l6ZV90ICpwZ3NpemUpXG4ge1xuIFx0aW50IGNvbnRpZ19wdGVzID0gMTtcbkBAIC0xMTAsNiArMTE1LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IG51bV9jb250aWdfcHRlcyh1bnNpZ25lZCBsb25nIHNpemUsIHNpemVfdCAqcGdzaXplKVxuIFx0XHRjb250aWdfcHRlcyA9IENPTlRfUFRFUztcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuK1x0XHRpZiAoc2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2MgUE1EX1NJWkUgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHRJU19BTElHTkVEKHNpemUsIENPTlRfUFRFX1NJWkUpKSB7XG4rXHRcdFx0KnBnc2l6ZSA9IFBBR0VfU0laRTtcbitcdFx0XHRjb250aWdfcHRlcyA9IHNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdFx0V0FSTl9PTighX19odWdldGxiX3ZhbGlkX3NpemUoc2l6ZSkpO1xuIFx0fVxuIFxuQEAgLTM1OSw2ICszNzAsMTAgQEAgcHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsIHZtX2ZsYWdzX3QgZmxhZ3MpXG4gXHRjYXNlIENPTlRfUFRFX1NJWkU6XG4gXHRcdHJldHVybiBwdGVfbWtjb250KGVudHJ5KTtcbiBcdGRlZmF1bHQ6XG4rXHRcdGlmIChwYWdlc2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgcGFnZXNpemUgXHUwMDNjIFBNRF9TSVpFIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0SVNfQUxJR05FRChwYWdlc2l6ZSwgQ09OVF9QVEVfU0laRSkpXG4rXHRcdFx0cmV0dXJuIHB0ZV9ta2NvbnQoZW50cnkpO1xuK1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdHByX3dhcm4oXCIlczogdW5yZWNvZ25pemVkIGh1Z2UgcGFnZSBzaXplIDB4JWx4XFxuXCIsXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uOTVmZmNhMjE5NDY3OTMgMTAwNjQ0XG4tLS0gYS9tbS92bWFsbG9jLmNcbisrKyBiL21tL3ZtYWxsb2MuY1xuQEAgLTkxLDYgKzkxLDMzIEBAIHN0cnVjdCB2ZnJlZV9kZWZlcnJlZCB7XG4gc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB2ZnJlZV9kZWZlcnJlZCwgdmZyZWVfZGVmZXJyZWQpO1xuIFxuIC8qKiogUGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICoqKi9cbitcbisvKlxuKyAqIFRyeSBjb250aWd1b3VzIG1hcHBpbmdzIGF0IHRoZSBQVEUgbGV2ZWwgZm9yIGFyY2hlcyB3aGljaCBzdXBwb3J0IHRoZW0sIGFuZCBpZlxuKyAqIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyLiBGYWxsIGJhY2sgdG8gUEFHRV9TSVpFIG1hcHBpbmdzIG90aGVyd2lzZS5cbisgKlxuKyAqIFJldHVybjogbWFwcGluZyBzaXplLlxuKyAqL1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFwX3NldF9wdGVzKHB0ZV90ICpwdGUsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHU2NCBwZm4sXG4rXHRcdHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdClcbit7XG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbitcbitcdHNpemUgPSBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplKGFkZHIsIGVuZCwgcGZuLCBtYXhfcGFnZV9zaGlmdCk7XG4rXHRpZiAoc2l6ZSAhPSBQQUdFX1NJWkUpIHtcbitcdFx0cHRlX3QgZW50cnkgPSBwZm5fcHRlKHBmbiwgcHJvdCk7XG4rXG4rXHRcdGVudHJ5ID0gYXJjaF9tYWtlX2h1Z2VfcHRlKGVudHJ5LCBpbG9nMihzaXplKSwgMCk7XG4rXHRcdHNldF9odWdlX3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5LCBzaXplKTtcbitcdFx0cmV0dXJuIHNpemU7XG4rXHR9XG4rI2VuZGlmXG4rXHRzZXRfcHRlX2F0KFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTtcbitcdHJldHVybiBQQUdFX1NJWkU7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXG4gXHRcdFx0dW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbkBAIC05OCw3ICsxMjUsOCBAQCBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRwdGVfdCAqcHRlO1xuIFx0dTY0IHBmbjtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0dW5zaWduZWQgbG9uZyBzaXplID0gUEFHRV9TSVpFO1xuK1x0dW5zaWduZWQgbG9uZyBzaXplO1xuK1x0dW5zaWduZWQgaW50IHN0ZXBzO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghUEFHRV9BTElHTkVEKGVuZCAtIGFkZHIpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTE5LDIwICsxNDcsOSBAQCBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0QlVHKCk7XG4gXHRcdH1cbiBcbi0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuLVx0XHRzaXplID0gYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZShhZGRyLCBlbmQsIHBmbiwgbWF4X3BhZ2Vfc2hpZnQpO1xuLVx0XHRpZiAoc2l6ZSAhPSBQQUdFX1NJWkUpIHtcbi1cdFx0XHRwdGVfdCBlbnRyeSA9IHBmbl9wdGUocGZuLCBwcm90KTtcbi1cbi1cdFx0XHRlbnRyeSA9IGFyY2hfbWFrZV9odWdlX3B0ZShlbnRyeSwgaWxvZzIoc2l6ZSksIDApO1xuLVx0XHRcdHNldF9odWdlX3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5LCBzaXplKTtcbi1cdFx0XHRwZm4gKz0gUEZOX0RPV04oc2l6ZSk7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi0jZW5kaWZcbi1cdFx0c2V0X3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7XG4tXHRcdHBmbisrO1xuLVx0fSB3aGlsZSAocHRlICs9IFBGTl9ET1dOKHNpemUpLCBhZGRyICs9IHNpemUsIGFkZHIgIT0gZW5kKTtcbitcdFx0c2l6ZSA9IHZtYXBfc2V0X3B0ZXMocHRlLCBhZGRyLCBlbmQsIHBmbiwgcHJvdCwgbWF4X3BhZ2Vfc2hpZnQpO1xuK1x0XHRzdGVwcyA9IFBGTl9ET1dOKHNpemUpO1xuK1x0fSB3aGlsZSAocHRlICs9IHN0ZXBzLCBwZm4gKz0gc3RlcHMsIGFkZHIgKz0gc2l6ZSwgYWRkciAhPSBlbmQpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXHQqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7XG5AQCAtNTI0LDggKzU0MSwxMCBAQCB2b2lkIHZ1bm1hcF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcbi1cdFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXG4rXHRcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBwZm4sIHNpemU7XG4rXHR1bnNpZ25lZCBpbnQgc3RlcHM7XG4gXHRpbnQgZXJyID0gMDtcbiBcdHB0ZV90ICpwdGU7XG4gXG5AQCAtNTU2LDkgKzU3NSwxMCBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0XHRzZXRfcHRlX2F0KFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgbWtfcHRlKHBhZ2UsIHByb3QpKTtcbi1cdFx0KCpucikrKztcbi1cdH0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpO1xuK1x0XHRwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbitcdFx0c2l6ZSA9IHZtYXBfc2V0X3B0ZXMocHRlLCBhZGRyLCBlbmQsIHBmbiwgcHJvdCwgc2hpZnQpO1xuK1x0XHRzdGVwcyA9IFBGTl9ET1dOKHNpemUpO1xuK1x0fSB3aGlsZSAocHRlICs9IHN0ZXBzLCAqbnIgKz0gc3RlcHMsIGFkZHIgKz0gc2l6ZSwgYWRkciAhPSBlbmQpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXHQqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7XG5AQCAtNTY4LDYwICs1ODgsOTAgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXG4gc3RhdGljIGludCB2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLFxuLVx0XHRwZ3RibF9tb2RfbWFzayAqbWFzaylcbitcdFx0cGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdClcbiB7XG4gXHRwbWRfdCAqcG1kO1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuK1x0aW50IGVycjtcbiBcbiBcdHBtZCA9IHBtZF9hbGxvY190cmFjayhcdTAwMjZpbml0X21tLCBwdWQsIGFkZHIsIG1hc2spO1xuIFx0aWYgKCFwbWQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4tXHRcdGlmICh2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRcdGlmIChzaGlmdCBcdTAwM2U9IFBNRF9TSElGVCkge1xuK1x0XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXNbKm5yXTtcbitcdFx0XHRwaHlzX2FkZHJfdCBwaHlzX2FkZHI7XG4rXG4rXHRcdFx0aWYgKFdBUk5fT04oIXBhZ2UpKVxuK1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdFx0aWYgKFdBUk5fT04oIXBmbl92YWxpZChwYWdlX3RvX3BmbihwYWdlKSkpKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdFx0cGh5c19hZGRyID0gcGFnZV90b19waHlzKHBhZ2UpO1xuK1xuK1x0XHRcdGlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCxcbitcdFx0XHRcdFx0XHRzaGlmdCkpIHtcbitcdFx0XHRcdCptYXNrIHw9IFBHVEJMX1BNRF9NT0RJRklFRDtcbitcdFx0XHRcdCpuciArPSAxIFx1MDAzY1x1MDAzYyAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0ZXJyID0gdm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fSB3aGlsZSAocG1kKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLFxuLVx0XHRwZ3RibF9tb2RfbWFzayAqbWFzaylcbitcdFx0cGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdClcbiB7XG4gXHRwdWRfdCAqcHVkO1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuK1x0aW50IGVycjtcbiBcbiBcdHB1ZCA9IHB1ZF9hbGxvY190cmFjayhcdTAwMjZpbml0X21tLCBwNGQsIGFkZHIsIG1hc2spO1xuIFx0aWYgKCFwdWQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4tXHRcdGlmICh2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdGVyciA9IHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrLCBzaGlmdCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbiBcdH0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcbi1cdFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXG4rXHRcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4ge1xuIFx0cDRkX3QgKnA0ZDtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbitcdGludCBlcnI7XG4gXG4gXHRwNGQgPSBwNGRfYWxsb2NfdHJhY2soXHUwMDI2aW5pdF9tbSwgcGdkLCBhZGRyLCBtYXNrKTtcbiBcdGlmICghcDRkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGRvIHtcbiBcdFx0bmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuLVx0XHRpZiAodm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2spKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRlcnIgPSB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaywgc2hpZnQpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4gXHR9IHdoaWxlIChwNGQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLVx0XHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuKy8qXG4rICogSXQgY2FuIHRha2UgYW4gYXJyYXkgb2YgcGFnZXMgd2hpY2ggYXJlIG5vdCBhbGwgY29udGlndW91cywgYnV0IGl0XG4rICogbWF5IGhhdmUgY29udGlndW91cyBjaHVua3MsIGFzIGhpbnRlZCBieSBAc2hpZnQuXG4rICovXG4rc3RhdGljIGludCB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuK1x0XHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHI7XG4gXHRwZ2RfdCAqcGdkO1xuQEAgLTYzNiw3ICs2ODYsNyBAQCBzdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4gXHRcdGlmIChwZ2RfYmFkKCpwZ2QpKVxuIFx0XHRcdG1hc2sgfD0gUEdUQkxfUEdEX01PRElGSUVEO1xuLVx0XHRlcnIgPSB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2QsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBcdTAwMjZuciwgXHUwMDI2bWFzayk7XG4rXHRcdGVyciA9IHZtYXBfcGFnZXNfcDRkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIFx1MDAyNm5yLCBcdTAwMjZtYXNrLCBzaGlmdCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0YnJlYWs7XG4gXHR9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTtcbkBAIC02NTksMjcgKzcwOSwxMiBAQCBzdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIGludCBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgcGFnZV9zaGlmdClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaSwgbnIgPSAoZW5kIC0gYWRkcikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXG4gXHRXQVJOX09OKHBhZ2Vfc2hpZnQgXHUwMDNjIFBBR0VfU0hJRlQpO1xuIFxuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DKSB8fFxuLVx0XHRcdHBhZ2Vfc2hpZnQgPT0gUEFHRV9TSElGVClcbi1cdFx0cmV0dXJuIHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaChhZGRyLCBlbmQsIHByb3QsIHBhZ2VzKTtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yOyBpICs9IDFVIFx1MDAzY1x1MDAzYyAocGFnZV9zaGlmdCAtIFBBR0VfU0hJRlQpKSB7XG4tXHRcdGludCBlcnI7XG4tXG4tXHRcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICsgKDFVTCBcdTAwM2NcdTAwM2MgcGFnZV9zaGlmdCksXG4tXHRcdFx0XHRcdHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIHByb3QsXG4tXHRcdFx0XHRcdHBhZ2Vfc2hpZnQpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXG4tXHRcdGFkZHIgKz0gMVVMIFx1MDAzY1x1MDAzYyBwYWdlX3NoaWZ0O1xuLVx0fVxuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DKSlcbitcdFx0cGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7XG4gXG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhhZGRyLCBlbmQsIHByb3QsIHBhZ2VzLCBwYWdlX3NoaWZ0KTtcbiB9XG4gXG4gaW50IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuQEAgLTMyNzksNiArMzMxNCwxNCBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfdm1fYXJlYV9jYWxsZXIodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxuIFx0XHRcdFx0ICBOVU1BX05PX05PREUsIEdGUF9LRVJORUwsIGNhbGxlcik7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIodW5zaWduZWQgbG9uZyBzaXplLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCB2b2lkICpjYWxsZXIpXG4re1xuK1x0cmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBhbGlnbiwgUEFHRV9TSElGVCwgZmxhZ3MsXG4rXHRcdFx0XHQgIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELFxuK1x0XHRcdFx0ICBOVU1BX05PX05PREUsIEdGUF9LRVJORUwsIGNhbGxlcik7XG4rfVxuK1xuIC8qKlxuICAqIGZpbmRfdm1fYXJlYSAtIGZpbmQgYSBjb250aW51b3VzIGtlcm5lbCB2aXJ0dWFsIGFyZWFcbiAgKiBAYWRkcjpcdCAgYmFzZSBhZGRyZXNzXG5AQCAtMzUxOSw2ICszNTYyLDExNiBAQCB2b2lkIHZ1bm1hcChjb25zdCB2b2lkICphZGRyKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHZ1bm1hcCk7XG4gXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdm1fc2hpZnQocGdwcm90X3QgcHJvdCwgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdGlmIChhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IFBNRF9TSVpFKVxuK1x0XHRyZXR1cm4gUE1EX1NISUZUO1xuK1xuK1x0cmV0dXJuIGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBnZXRfdm1hcF9iYXRjaF9vcmRlcihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuK1x0XHRwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3N0ZXBzLCB1bnNpZ25lZCBpbnQgaWR4KVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgcGZuO1xuK1x0dW5zaWduZWQgaW50IG5yX2NvbnRpZztcbitcdGludCBvcmRlcjtcbitcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bnJfY29udGlnID0gbnVtX3BhZ2VzX2NvbnRpZ3VvdXMoXHUwMDI2cGFnZXNbaWR4XSwgbWF4X3N0ZXBzKTtcbitcdGlmIChucl9jb250aWcgXHUwMDNjIDIpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0b3JkZXIgPSBpbG9nMihucl9jb250aWcpO1xuK1x0cGZuID0gcGFnZV90b19wZm4ocGFnZXNbaWR4XSk7XG4rXG4rXHQvKiBMaW1pdCBvcmRlciBieSBwZm4gYWxpZ25tZW50ICovXG4rXHRpZiAocGZuIFx1MDAzZSAwKVxuK1x0XHRvcmRlciA9IG1pbl90KGludCwgb3JkZXIsIF9fZmZzKHBmbikpO1xuK1xuK1x0aWYgKHZtX3NoaWZ0KHByb3QsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpID09IFBBR0VfU0hJRlQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIG9yZGVyO1xuK31cbitcbitzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuK1x0XHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuK3tcbitcdHVuc2lnbmVkIGludCBjb3VudCA9IChlbmQgLSBhZGRyKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdHVuc2lnbmVkIGludCBwcmV2X3NoaWZ0ID0gMCwgaWR4ID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgbWFwX2FkZHIgPSBhZGRyLCBiYXRjaF9lbmQgPSBhZGRyO1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IGttc2FuX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaChhZGRyLCBlbmQsIHByb3QsIHBhZ2VzLFxuK1x0XHRcdFx0XHQgICAgIFBBR0VfU0hJRlQsIEdGUF9LRVJORUwpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgY291bnQ7ICkge1xuK1x0XHR1bnNpZ25lZCBpbnQgc2hpZnQgPSBQQUdFX1NISUZUICtcbitcdFx0XHRnZXRfdm1hcF9iYXRjaF9vcmRlcihwYWdlcywgcHJvdCwgY291bnQgLSBpLCBpKTtcbitcbitcdFx0aWYgKCFpKVxuK1x0XHRcdHByZXZfc2hpZnQgPSBzaGlmdDtcbitcbitcdFx0aWYgKHNoaWZ0ICE9IHByZXZfc2hpZnQpIHtcbitcdFx0XHRlcnIgPSB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhtYXBfYWRkciwgYmF0Y2hfZW5kLFxuK1x0XHRcdFx0XHRwcm90LCBwYWdlcyArIGlkeCwgcHJldl9zaGlmdCk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdHByZXZfc2hpZnQgPSBzaGlmdDtcbitcdFx0XHRtYXBfYWRkciA9IGJhdGNoX2VuZDtcbitcdFx0XHRpZHggPSBpO1xuK1x0XHR9XG4rXG4rXHRcdC8qXG4rXHRcdCAqIE9uY2Ugc21hbGwgcGFnZXMgYXJlIGVuY291bnRlcmVkLCB0aGUgcmVtYWluaW5nIHBhZ2VzXG4rXHRcdCAqIGFyZSBsaWtlbHkgc21hbGwgYXMgd2VsbC5cbitcdFx0ICovXG4rXHRcdGlmIChzaGlmdCA9PSBQQUdFX1NISUZUKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRiYXRjaF9lbmQgKz0gMVVMIFx1MDAzY1x1MDAzYyBzaGlmdDtcbitcdFx0aSArPSAxVSBcdTAwM2NcdTAwM2MgKHNoaWZ0IC0gUEFHRV9TSElGVCk7XG4rXHR9XG4rXG4rXHQvKiBSZW1haW5pbmcgKi9cbitcdGlmIChtYXBfYWRkciBcdTAwM2MgZW5kKVxuK1x0XHRlcnIgPSB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhtYXBfYWRkciwgZW5kLFxuK1x0XHRcdFx0cHJvdCwgcGFnZXMgKyBpZHgsIHByZXZfc2hpZnQpO1xuK1xuK291dDpcbitcdGZsdXNoX2NhY2hlX3ZtYXAoYWRkciwgZW5kKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICp2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLFxuK1x0XHR1bnNpZ25lZCBsb25nIGZsYWdzLCBwZ3Byb3RfdCBwcm90LCBjb25zdCB2b2lkICpjYWxsZXIpXG4re1xuK1x0c3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYTtcbitcdHVuc2lnbmVkIGludCBzaGlmdDtcbitcbitcdGlmIChhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IFBNRF9TSVpFKSB7XG4rXHRcdHZtX2FyZWEgPSBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgUE1EX1NJWkUsXG4rXHRcdFx0XHRmbGFncywgY2FsbGVyKTtcbitcdFx0aWYgKHZtX2FyZWEpXG4rXHRcdFx0cmV0dXJuIHZtX2FyZWE7XG4rXHR9XG4rXG4rXHRzaGlmdCA9IGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpO1xuK1x0aWYgKHNoaWZ0IFx1MDAzZSBQQUdFX1NISUZUKSB7XG4rXHRcdHZtX2FyZWEgPSBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgMVVMIFx1MDAzY1x1MDAzYyBzaGlmdCxcbitcdFx0XHRcdGZsYWdzLCBjYWxsZXIpO1xuK1x0XHRpZiAodm1fYXJlYSlcbitcdFx0XHRyZXR1cm4gdm1fYXJlYTtcbitcdH1cbitcbitcdHJldHVybiBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgUEFHRV9TSVpFLCBmbGFncywgY2FsbGVyKTtcbit9XG4rXG4gLyoqXG4gICogdm1hcCAtIG1hcCBhbiBhcnJheSBvZiBwYWdlcyBpbnRvIHZpcnR1YWxseSBjb250aWd1b3VzIHNwYWNlXG4gICogQHBhZ2VzOiBhcnJheSBvZiBwYWdlIHBvaW50ZXJzXG5AQCAtMzU1NywxMyArMzcxMCwxNCBAQCB2b2lkICp2bWFwKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCxcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRzaXplID0gKHVuc2lnbmVkIGxvbmcpY291bnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4tXHRhcmVhID0gZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuK1x0YXJlYSA9IHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYShzaXplLCBmbGFncywgcHJvdCxcbitcdFx0XHRcdF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4gXHRpZiAoIWFyZWEpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXHUwMDNlYWRkcjtcbi1cdGlmICh2bWFwX3BhZ2VzX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplLCBwZ3Byb3RfbngocHJvdCksXG4tXHRcdFx0XHRwYWdlcywgUEFHRV9TSElGVCkgXHUwMDNjIDApIHtcbitcdGlmICh2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWQoYWRkciwgYWRkciArIHNpemUsIHBncHJvdF9ueChwcm90KSxcbitcdFx0XHRcdHBhZ2VzKSBcdTAwM2MgMCkge1xuIFx0XHR2dW5tYXAoYXJlYS1cdTAwM2VhZGRyKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG5AQCAtNDAzMCwxMSArNDE4NCw3IEBAIHZvaWQgKl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXG4gXHRcdCAqIHN1cHBvcnRpbmcgdGhlbS5cbiBcdFx0ICovXG4gXG4tXHRcdGlmIChhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IFBNRF9TSVpFKVxuLVx0XHRcdHNoaWZ0ID0gUE1EX1NISUZUO1xuLVx0XHRlbHNlXG4tXHRcdFx0c2hpZnQgPSBhcmNoX3ZtYXBfcHRlX3N1cHBvcnRlZF9zaGlmdChzaXplKTtcbi1cbitcdFx0c2hpZnQgPSB2bV9zaGlmdChwcm90LCBzaXplKTtcbiBcdFx0YWxpZ24gPSBtYXgob3JpZ2luYWxfYWxpZ24sIDFVTCBcdTAwM2NcdTAwM2Mgc2hpZnQpO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6NDg6NTcuMTUzOTY3MTI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM4OTQ3NTQxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBmb3IgQ29udGlndW91cyBQVEUgTWFwcGluZ3MgaW4gdm1hbGxvYyBvbiBhcm02NCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgaXQncyB0cnlpbmcgdG8gaW50cm9kdWNlIGNvbnRpZ3VvdXMgUFRFIG1hcHBpbmdzIGZvciB2bWFsbG9jIG9uIGFybTY0LCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oYCwgYGFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY2AsIGFuZCBgbW0vdm1hbGxvYy5jYCwgc28gaXQncyB0b3VjaGluZyBxdWl0ZSBhIGZldyBhcmVhcy5cblxuRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGV4dGVuZGluZyBgdm1hcGAgdG8gaGFuZGxlIGJhdGNoZWQgbWFwcGluZ3MgZm9yIGNvbnRpZ3VvdXMgcGFnZXMuIEl0J3MgbW9kaWZ5aW5nIGBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplYCB0byBoYW5kbGUgc2l6ZXMgdXAgdG8gdGhlIFBNRCBib3VuZGFyeSwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBiZWVuIHVwZGF0ZWQgdG8gdGFrZSBpbiBtdWx0aXBsZSBgQ09OVF9QVEVfU0laRWAgYmxvY2tzLiBUaGVyZSBhcmUgYWxzbyB1cGRhdGVzIHRvIGBudW1fY29udGlnX3B0ZXNgIGFuZCBgYXJjaF9tYWtlX2h1Z2VfcHRlYCB0byBzdXBwb3J0IHNpemVzIHdpdGhpbiBhIGdpdmVuIHJhbmdlIHRoYXQgYXJlIGFsaWduZWQgdG8gYENPTlRfUFRFX1NJWkVgLlxuXG5JbiBgbW0vdm1hbGxvYy5jYCwgdGhlIHBhdGNoIHNlZW1zIHRvIGFkZCBhIGZ1bmN0aW9uIGNhbGxlZCBgdm1hcF9zZXRfcHRlc2AgdGhhdCBsZXZlcmFnZXMgdGhlIHVwZGF0ZWQgYGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemVgIGFuZCBgYXJjaF9tYWtlX2h1Z2VfcHRlYCB0byBzZXQgbXVsdGlwbGUgUFRFcyBhdCBvbmNlLCB3aGljaCBpcyB3aGVyZSB0aGUgYmF0Y2hpbmcgY29tZXMgaW50byBwbGF5LiBJdCBhcHBlYXJzIHRoYXQgaXQncyB1cGRhdGluZyB0aGUgZGlmZmVyZW50IHJhbmdlIG1hcHBpbmcgZnVuY3Rpb25zLCBzdWNoIGFzIGB2bWFwX3BhZ2VzX3B0ZV9yYW5nZWAsIGB2bWFwX3BhZ2VzX3BtZF9yYW5nZWAsIGFuZCBzbyBvbiwgdG8gYWNjZXB0IGEgc2hpZnQgcGFyYW1ldGVyIGFuZCB1c2UgdGhpcyBuZXcgYHZtYXBfc2V0X3B0ZXNgIGZ1bmN0aW9uLiBUaGVyZSBhcmUgYWxzbyBuZXcgZnVuY3Rpb25zLCBgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYCBhbmQgYHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYWAsIHRoYXQgc2VlbSB0byBiZSBrZXkgY29tcG9uZW50cyBvZiB0aGlzIG5ldyBiYXRjaGluZyBmdW5jdGlvbmFsaXR5LCBiZWluZyB1c2VkIGluIGB2bWFwYC5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSB2bWFsbG9jIHBvcnRpb24sIGFzIHdlbGwgYXMgdGhlIGFybTY0IGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbi4gQ29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gbWVtb3J5IGFsbG9jYXRpb24sIEknbSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgYSBwcmltZSBjYW5kaWRhdGUgZm9yIHRob3JvdWdoIGZ1enppbmcuXG5cbkJlZm9yZSBJIGRlbHZlIGRlZXBlciBpbnRvIHRoZSBjb2RlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIExldCdzIHNlZS4uLiBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgLCBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVBgLCBhbmQgYENPTkZJR19IVUdFVExCX1BBR0VgIGFyZSBtZW50aW9uZWQgaW4gYG1tL3ZtYWxsb2MuY2AuIEknbGwgZ3JlcCBgbW0vS2NvbmZpZ2AgYW5kIGBhcmNoL2FybTY0L0tjb25maWdgIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY2FuIGJ1aWxkIGEga2VybmVsIHRoYXQgd2lsbCBhY3R1YWxseSBydW4gdGhpcyBuZXcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ5MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjQ5OjA0LjU0MzQ0NDA4M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ3NDg2OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTEwOTI9Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG4tLVxcbmFyY2gvS2NvbmZpZy0xMDk5LSNcXG5hcmNoL0tjb25maWc6MTEwMDpjb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcbmFyY2gvS2NvbmZpZy0xMTAxLVxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX0hVR0VfVk1BUFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTUzLVxcdHNlbGVjdCBIQVZFX0FSQ0hfQ09NUElMRVJfSFxcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNTQ6XFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5hcmNoL2FybTY0L0tjb25maWctMTU1LVxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMjE4LVxcdHNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMXFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MjE5OlxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFx0XFx0aWYgSEFWRV9BUkNIX0hVR0VfVk1BUFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTIyMC1cXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BUFxcdFxcdGlmIFBQQ19SQURJWF9NTVUgfHwgUFBDXzh4eFxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTEzMS1cXHRzZWxlY3QgSEFWRV9BUkNIX0JJVFJFVkVSU0UgaWYgUklTQ1ZfSVNBX1pCS0IgXFx1MDAyNlxcdTAwMjYgQklUUkVWRVJTRVxcbmFyY2gvcmlzY3YvS2NvbmZpZzoxMzI6XFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0MgaWYgSEFWRV9BUkNIX0hVR0VfVk1BUFxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMzMtXFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVAgaWYgTU1VIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTkyLVxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFQXFx0XFx0aWYgWDg2XzY0IHx8IFg4Nl9QQUVcXG5hcmNoL3g4Ni9LY29uZmlnOjE5MzpcXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcdFxcdGlmIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWctMTk0LVxcdHNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTFxcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg9MTk9c3RydWN0IGlvdl9pdGVyO1xcdFxcdC8qIGluIHVpby5oICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0zMS0jZGVmaW5lIFZNX01BUF9QVVRfUEFHRVNcXHQweDAwMDAwMjAwXFx0LyogcHV0IHBhZ2VzIGFuZCBmcmVlIGFycmF5IGluIHZmcmVlICovXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6MzI6I2RlZmluZSBWTV9BTExPV19IVUdFX1ZNQVBcXHQweDAwMDAwNDAwICAgICAgLyogQWxsb3cgZm9yIGh1Z2UgcGFnZXMgb24gYXJjaHMgd2l0aCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DICovXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMzMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD01Mj1zdHJ1Y3Qgdm1fc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTYxLVxcdHN0cnVjdCBwYWdlXFx0XFx0KipwYWdlcztcXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDo2MjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC02My1cXHR1bnNpZ25lZCBpbnRcXHRcXHRwYWdlX29yZGVyO1xcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg9MjU4PXN0YXRpYyBpbmxpbmUgYm9vbCBpc192bV9hcmVhX2h1Z2VwYWdlcyhjb25zdCB2b2lkICphZGRyKVxcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMjY2LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjI2NzojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0yNjgtXFx0c3RydWN0IHZtX3N0cnVjdCAqYXJlYSA9IGZpbmRfdm1fYXJlYShhZGRyKTtcXG4tLVxcbm1tL3ZtYWxsb2MuYz02Mz1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGlvcmVtYXBfbWF4X3BhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUO1xcbi0tXFxubW0vdm1hbGxvYy5jLTY1LVxcbm1tL3ZtYWxsb2MuYzo2NjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5tbS92bWFsbG9jLmMtNjctc3RhdGljIGJvb2wgX19yb19hZnRlcl9pbml0IHZtYXBfYWxsb3dfaHVnZSA9IHRydWU7XFxuLS1cXG5tbS92bWFsbG9jLmM9NzQ9ZWFybHlfcGFyYW0oXFxcIm5vaHVnZXZtYWxsb2NcXFwiLCBzZXRfbm9odWdldm1hbGxvYyk7XFxubW0vdm1hbGxvYy5jOjc1OiNlbHNlIC8qIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DICovXFxubW0vdm1hbGxvYy5jLTc2LXN0YXRpYyBjb25zdCBib29sIHZtYXBfYWxsb3dfaHVnZSA9IGZhbHNlO1xcbm1tL3ZtYWxsb2MuYzo3NzojZW5kaWZcXHQvKiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQyAqL1xcbm1tL3ZtYWxsb2MuYy03OC1cXG4tLVxcbm1tL3ZtYWxsb2MuYz03MDk9aW50IF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bWFsbG9jLmMtNzEzLVxcbm1tL3ZtYWxsb2MuYzo3MTQ6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DKSlcXG5tbS92bWFsbG9jLmMtNzE1LVxcdFxcdHBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUO1xcbi0tXFxubW0vdm1hbGxvYy5jPTMxNDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdm1fYXJlYV9wYWdlX29yZGVyKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtKVxcbm1tL3ZtYWxsb2MuYy0zMTQxLXtcXG5tbS92bWFsbG9jLmM6MzE0MjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5tbS92bWFsbG9jLmMtMzE0My1cXHRyZXR1cm4gdm0tXFx1MDAzZXBhZ2Vfb3JkZXI7XFxuLS1cXG5tbS92bWFsbG9jLmM9MzE1ND1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3ZtX2FyZWFfcGFnZV9vcmRlcihzdHJ1Y3Qgdm1fc3RydWN0ICp2bSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3ZtYWxsb2MuYy0zMTU1LXtcXG5tbS92bWFsbG9jLmM6MzE1NjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5tbS92bWFsbG9jLmMtMzE1Ny1cXHR2bS1cXHUwMDNlcGFnZV9vcmRlciA9IG9yZGVyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzo0OTowOS4wOTA5Mzc3MThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjM1MDMxMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHZtYXAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHZpcnR1YWwgbWFwcGluZ3MgYW5kIHBvdGVudGlhbGx5IGh1Z2UgcGFnZXMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSBvbiBgQVJNNjRgIGFuZCBgWDg2XzY0YCBhcmNoaXRlY3R1cmVzLiBTaW5jZSB0aG9zZSBhcmNoaXRlY3R1cmVzIGF1dG9tYXRpY2FsbHkgZW5hYmxlIGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCwgYEhBVkVfQVJDSF9IVUdFX1ZNQVBgLCBhbmQgYEhVR0VUTEJfUEFHRWAsIEkgY2FuIGFzc3VtZSB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgYWxyZWFkeSBiYWtlZCBpbi5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gQmFzZWQgb24gdGhlIG5hbWVzLCBgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYCwgYHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYWAsIGB2bWFwX3NldF9wdGVzYCwgYHZtYXBfcGFnZXNfcHRlX3JhbmdlYCwgYHZtYXBfcGFnZXNfcG1kX3JhbmdlYCwgYHZtYXBfcGFnZXNfcHVkX3JhbmdlYCwgYHZtYXBfcGFnZXNfcDRkX3JhbmdlYCwgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCwgYF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoYCwgYHZtYXBgLCBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCwgYGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemVgLCBgbnVtX2NvbnRpZ19wdGVzYCwgYW5kIGBhcmNoX21ha2VfaHVnZV9wdGVgIGFyZSBnb2luZyB0byBiZSBrZXkgcGxheWVycy5cblxuTXkgZ29hbCBpcyB0byBuYXJyb3cgZG93biB0aGUgYWN0dWFsIHN5bWJvbHMgSSBuZWVkIHRvIGludmVzdGlnYXRlLiBgdm1hcGAgYW5kIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgIGFyZSBwcm9iYWJseSBnb2luZyB0byBiZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIHRoZSBhbGxvY2F0b3IuIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgIGFuZCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCBsaWtlbHkgaGFuZGxlIHRoZSBidWxrIG9mIHRoZSBtYXBwaW5nIHByb2Nlc3MuIGB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa2AgcHJvYmFibHkgb3B0aW1pemVzIHRoZSBtYXBwaW5nLiBJIHdpbGwgaWdub3JlIGB2bWFwX3NldF9wdGVzYCBiZWNhdXNlIGl0IGlzIGFuIGBfX2Fsd2F5c19pbmxpbmVgIGFuZCBgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZWAsIGFuZCBgbnVtX2NvbnRpZ19wdGVzYCBhcyB0aGV5IGFyZSBgc3RhdGljIGlubGluZWAgZnVuY3Rpb25zLiBJIHdpbGwgbmVlZCB0byBsb29rIGludG8gYGFyY2hfbWFrZV9odWdlX3B0ZWAgYXMgaXQgaXMgYSBmdW5jdGlvbiBkZWZpbmVkIGluIGBhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTYwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjQ5OjE1LjMyNTk3MTY5OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY3Nzg4MzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfbWFrZV9odWdlX3B0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL2FyY2hfcGd0YWJsZV9oZWxwZXJzLnJzdD0yMDM9SHVnZVRMQiBQYWdlIFRhYmxlIEhlbHBlcnNcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMucnN0LTIwOC0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xcbkRvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMucnN0OjIwOTp8IGFyY2hfbWFrZV9odWdlX3B0ZSAgICAgICAgfCBDcmVhdGVzIGEgSHVnZVRMQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxcbkRvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMucnN0LTIxMC0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmg9MjI9c3RhdGljIGlubGluZSB2b2lkIGFyY2hfY2xlYXJfaHVnZXRsYl9mbGFncyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMzQtXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmg6MzU6cHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsIHZtX2ZsYWdzX3QgZmxhZ3MpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjM2OiNkZWZpbmUgYXJjaF9tYWtlX2h1Z2VfcHRlIGFyY2hfbWFrZV9odWdlX3B0ZVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTM3LSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9TRVRfSFVHRV9QVEVfQVRcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYz03OD1zdGF0aWMgaW50IGZpbmRfbnVtX2NvbnRpZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTk3LS8qXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjk4OiAqIG51bV9jb250aWdfcHRlcygpLCBzZXRfaHVnZV9wdGVfYXQoKSBhbmQgYXJjaF9tYWtlX2h1Z2VfcHRlKCkgY2FuIGJlXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTk5LSAqIHVzZWQgYnkgbm9uLWh1Z2V0bGJmcyh2bWFsbG9jKSBtbSBjb2RlIHRvIHNldCBtdWx0aXBsZSBodWdlIG1hcHBpbmdzXFxuLS1cXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM9MzMxPXVuc2lnbmVkIGxvbmcgaHVnZXRsYl9tYXNrX2xhc3RfcGFnZShzdHJ1Y3QgaHN0YXRlICpoKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTM1NC1cXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM6MzU1OnB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zNTYte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9odWdldGxiLTh4eC5oPTM4PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdlX3B0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaC00Ny0jaWZkZWYgQ09ORklHX1BQQ180S19QQUdFU1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaDo0ODpzdGF0aWMgaW5saW5lIHB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaC00OS17XFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzMyL2h1Z2V0bGItOHh4LmgtNTYtfVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaDo1NzojZGVmaW5lIGFyY2hfbWFrZV9odWdlX3B0ZSBhcmNoX21ha2VfaHVnZV9wdGVcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzMyL2h1Z2V0bGItOHh4LmgtNTgtI2VuZGlmXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoL2h1Z2V0bGItZTUwMC5oPTc9c3RhdGljIGlubGluZSBpbnQgY2hlY2tfYW5kX2dldF9odWdlX3BzaXplKGludCBzaGlmdClcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvaHVnZXRsYi1lNTAwLmgtMTQtXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC9odWdldGxiLWU1MDAuaDoxNTpzdGF0aWMgaW5saW5lIHB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvaHVnZXRsYi1lNTAwLmgtMTYte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC9odWdldGxiLWU1MDAuaC0yMS19XFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC9odWdldGxiLWU1MDAuaDoyMjojZGVmaW5lIGFyY2hfbWFrZV9odWdlX3B0ZSBhcmNoX21ha2VfaHVnZV9wdGVcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoL2h1Z2V0bGItZTUwMC5oLTIzLVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC84eHguYz01Mj1zdGF0aWMgaW50IF9fcmVmIF9fZWFybHlfbWFwX2tlcm5lbF9odWdlcGFnZSh1bnNpZ25lZCBsb25nIHZhLCBwaHlzX2FkZHJfdCBwYSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvOHh4LmMtOTAtXFx0c2V0X2h1Z2VfcHRlX2F0KFxcdTAwMjZpbml0X21tLCB2YSwgcHRlcCxcXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoLzh4eC5jOjkxOlxcdFxcdFxcdGFyY2hfbWFrZV9odWdlX3B0ZShwZm5fcHRlKHBhIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsIHByb3QpLCBzaGlmdCwgMCksXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC84eHguYy05Mi1cXHRcXHRcXHQxVUwgXFx1MDAzY1xcdTAwM2Mgc2hpZnQpO1xcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmg9NDg9cHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmgtNDktXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmg6NTA6cHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsIHZtX2ZsYWdzX3QgZmxhZ3MpO1xcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjUxOiNkZWZpbmUgYXJjaF9tYWtlX2h1Z2VfcHRlIGFyY2hfbWFrZV9odWdlX3B0ZVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTUyLVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jPTE3Mj1zdGF0aWMgcHRlX3QgZ2V0X2NsZWFyX2NvbnRpZ19mbHVzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy0xODYtXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jOjE4NzpwdGVfdCBhcmNoX21ha2VfaHVnZV9wdGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdCwgdm1fZmxhZ3NfdCBmbGFncylcXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtMTg4LXtcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oPTM3ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3dyaXRlKHB0ZV90IHB0ZSlcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oLTM5Mi0jaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaDozOTM6cHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsIHZtX2ZsYWdzX3QgZmxhZ3MpO1xcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oOjM5NDojZGVmaW5lIGFyY2hfbWFrZV9odWdlX3B0ZSBhcmNoX21ha2VfaHVnZV9wdGVcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaC0zOTUtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcHRlX2RlZmF1bHRfaHVnZV9tYXNrKHZvaWQpXFxuLS1cXG5hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmM9ODE9c3RhdGljIHB0ZV90IGh1Z2VwYWdlX3NoaWZ0X3RvX3R0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0KVxcbi0tXFxuYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jLTg4LVxcbmFyY2gvc3BhcmMvbW0vaHVnZXRsYnBhZ2UuYzo4OTpwdGVfdCBhcmNoX21ha2VfaHVnZV9wdGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdCwgdm1fZmxhZ3NfdCBmbGFncylcXG5hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmMtOTAte1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9ODM3PXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2NsZWFyX2h1Z2V0bGJfZmxhZ3Moc3RydWN0IGZvbGlvICpmb2xpbykgeyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04NDAtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODQxOiNpZm5kZWYgYXJjaF9tYWtlX2h1Z2VfcHRlXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODQyOnN0YXRpYyBpbmxpbmUgcHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODQzLVxcdFxcdFxcdFxcdCAgICAgICB2bV9mbGFnc190IGZsYWdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTg4NT1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9iYXNpY190ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg5MC1cXHRwdGUgPSBwZm5fcHRlKGFyZ3MtXFx1MDAzZWZpeGVkX3BtZF9wZm4sIGFyZ3MtXFx1MDAzZXBhZ2VfcHJvdCk7XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjg5MTpcXHRwdGUgPSBhcmNoX21ha2VfaHVnZV9wdGUocHRlLCBQTURfU0hJRlQsIFZNX0FDQ0VTU19GTEFHUyk7XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg5Mi1cXG4tLVxcbm1tL2h1Z2V0bGIuYz00ODA0PXN0YXRpYyBwdGVfdCBtYWtlX2h1Z2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTQ4MTUtXFx0ZW50cnkgPSBwdGVfbWt5b3VuZyhlbnRyeSk7XFxubW0vaHVnZXRsYi5jOjQ4MTY6XFx0ZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIHNoaWZ0LCB2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS9odWdldGxiLmMtNDgxNy1cXG4tLVxcbm1tL2h1Z2V0bGIuYz02Mzg0PWxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NDk5LVxcdFxcdFxcdHB0ZSA9IGh1Z2VfcHRlX21vZGlmeShvbGRfcHRlLCBuZXdwcm90KTtcXG5tbS9odWdldGxiLmM6NjUwMDpcXHRcXHRcXHRwdGUgPSBhcmNoX21ha2VfaHVnZV9wdGUocHRlLCBzaGlmdCwgdm1hLVxcdTAwM2V2bV9mbGFncyk7XFxubW0vaHVnZXRsYi5jLTY1MDEtXFx0XFx0XFx0aWYgKHVmZmRfd3ApXFxuLS1cXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtNDE5LVxcbm1tL21pZ3JhdGUuYzo0MjA6XFx0XFx0XFx0cHRlID0gYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZSwgc2hpZnQsIHZtYS1cXHUwMDNldm1fZmxhZ3MpO1xcbm1tL21pZ3JhdGUuYy00MjEtXFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpXFxuLS1cXG5tbS92bWFsbG9jLmM9MTAxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFwX3NldF9wdGVzKHB0ZV90ICpwdGUsXFxuLS1cXG5tbS92bWFsbG9jLmMtMTExLVxcbm1tL3ZtYWxsb2MuYzoxMTI6XFx0XFx0ZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIGlsb2cyKHNpemUpLCAwKTtcXG5tbS92bWFsbG9jLmMtMTEzLVxcdFxcdHNldF9odWdlX3B0ZV9hdChcXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSwgc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjQ5OjE3Ljg5Mzc2NjYwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNDkzMzMxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVmlydHVhbCBNZW1vcnkgTWFwcGluZyBGdW5jdGlvbnMgYW5kIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgdmlydHVhbCBtZW1vcnkgbWFwcGluZyBjb2RlLCBhbmQgaGVyZSdzIHRoZSBicmVha2Rvd24gb2YgbXkgY3VycmVudCB0aG91Z2h0IHByb2Nlc3MuIEluaXRpYWxseSwgSSdtIHplcm9pbmcgaW4gb24gYSBjb3JlIHNldCBvZiBmdW5jdGlvbnM6IGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgLCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCwgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCwgYF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoYCwgYHZtYXBgLCBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCwgYHZtYXBfcGFnZXNfcHRlX3JhbmdlYCwgYHZtYXBfcGFnZXNfcG1kX3JhbmdlYCwgYHZtYXBfcGFnZXNfcHVkX3JhbmdlYCwgYW5kIGB2bWFwX3BhZ2VzX3A0ZF9yYW5nZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLlxuXG5NeSBmaXJzdCBzdGVwIGlzIGNoZWNraW5nIHRoZSB2aXNpYmlsaXR5IG9mIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgIGFuZCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYC4gQWhhLCB0aGV5J3JlIHN0YXRpYyB3aXRoaW4gYG1tL3ZtYWxsb2MuY2AuIEludGVyZXN0aW5nLiBgdm1hcGAgaXMgZXhwb3J0ZWQsIGFzIGlzIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgLiBTaW1pbGFybHksIGBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAgaXMgYWxzbyBleHBvcnRlZCwgd2hpbGUgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCBpcyBzdGF0aWMuXG5cbkdpdmVuIHRoYXQgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMsIEkgd2lsbCBpbmNsdWRlIGFsbCBmdW5jdGlvbnMgbGlzdGVkIGluIG15IHRob3VnaHRzOlxuYHZtYXBgXG5gX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYFxuYF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoYFxuYHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZGBcbmB2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWFgXG5gdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGtgXG5gdm1hcF9wYWdlc19wdGVfcmFuZ2VgXG5gdm1hcF9wYWdlc19wbWRfcmFuZ2VgXG5gdm1hcF9wYWdlc19wdWRfcmFuZ2VgXG5gdm1hcF9wYWdlc19wNGRfcmFuZ2VgXG5cbkkgcmVhbGl6ZWQgSSBuZWVkIHRvIGJlICpzdXJlKiB0byBpbmNsdWRlIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgIGFuZCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCBiZWNhdXNlIHRoZXkgYXJlIHN0YXRpYyBidXQgY3J1Y2lhbCwgYW5kIGFsc28gYGFyY2hfbWFrZV9odWdlX3B0ZWAgZnJvbSBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYC5cblxuTm93LCBtb3Zpbmcgb24gdG8gY29uZmlndXJhdGlvbiBjb25zaWRlcmF0aW9ucy4gSSBzZWUgYEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgLCBgSEFWRV9BUkNIX0hVR0VfVk1BUGAsIGFuZCBgSFVHRVRMQl9QQUdFYCBhcmUgcmVsZXZhbnQuIFdhaXQsIGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBhbmQgYEhBVkVfQVJDSF9IVUdFX1ZNQVBgIGFyZSBhcmNoaXRlY3R1cmUtZGVwZW5kZW50LCBzbyBJIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdXNlciBzZWxlY3Rpb24uIEhvd2V2ZXIsIGBIVUdFVExCX1BBR0VgIGlzIGEgdXNlci1zZWxlY3RhYmxlIGNvbmZpZywgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdOKAmXMgYmVpbmcgdXNlZC5cblxuTG9va2luZyBpbnRvIHRoZSBjb2RlLCBJIHNlZSBhIGAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRWAgaW5zaWRlIGB2bWFwX3NldF9wdGVzYCwgd2hpY2ggbWVhbnMgdGhlIG5ldyBjb2RlIHBhdGggd2l0aGluIHRoaXMgZnVuY3Rpb24gaXMgb25seSB0ZXN0ZWQgd2hlbiB0aGUgYEhVR0VUTEJfUEFHRWAgY29uZmlnIGlzIGVuYWJsZWQuIFRoZXJlZm9yZSwgdGVzdGluZyB0aGlzIGNvZGUgcmVxdWlyZXMgYEhVR0VUTEJfUEFHRWAgdG8gYmUgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIGBhcmNoL2FybTY0L0tjb25maWdgIHRvIHNlZSBob3cgdGhpcyBpcyBkZWZpbmVkIGluIHRoYXQgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ4MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzo0OToyNi4xNDMxMDE4OTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwNTkzODQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTYzLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiNjRrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2ODpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjktXFx0Ym9vbCBcXFwiMjU2a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTcxLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiMU1CXFxcIlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzQtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3NTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCI0TUJcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTc4LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTgwLVxcdGJvb2wgXFxcIjY0TUJcXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbmZzL0tjb25maWctMjY0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjc2LVxcbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc4LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbi0tXFxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNzA4LVxcbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbm1tL0tjb25maWctNzEwLVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6NDk6MjguNjQ5MDQ3MzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzYwMjAyMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC5cblxuKipBbmFseXppbmcgdGhlIEh1Z2VUTEIgUGFnZSBEZWZpbml0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYEhVR0VUTEJfUEFHRWAgaXMgZXNzZW50aWFsbHkgZGVmaW5lZCBhcyB0aGUgc2FtZSB0aGluZyBhcyBgZGVmX2Jvb2wgSFVHRVRMQkZTYC4gVGhpcyBtZWFucyB0aGUgYEhVR0VUTEJGU2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgdGhlIGtleSB0byBlbmFibGluZyB0aGUgYEhVR0VUTEJfUEFHRWAgZnVuY3Rpb25hbGl0eS4gU28sIGlmIEkgd2FudCB0byB3b3JrIHdpdGggaHVnZSBwYWdlcywgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBIVUdFVExCRlNgIGlzIGVuYWJsZWQgd2l0aGluIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBJdCB0ZWxscyBtZSB3aGVyZSB0byBsb29rIHRvIGVuc3VyZSBpdCdzIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MDQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzo0OTozMS40MDkyNTMyMzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTY0NjgxMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzo0OTozMy45MDU3MzAzN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzA0MzIwNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29udGlndW91cyBQVEUgTWFwcGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgZW5hYmxpbmcgYEhVR0VUTEJGU2AgaXMgdGhlIHJlbGV2YW50IGNvbmZpZyBmb3IgdGhpcyBwYXRjaC4gSSBhbHNvIHNlZSB0aGF0IGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AgYW5kIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAgYXJlIHNlbGVjdGVkIGJ5IGFybTY0LCBidXQgYEhVR0VUTEJGU2AgaXMgdGhlIGtleSBvbmUuXG5cbkkndmUgdGFrZW4gYSBsb29rIGF0IHRoZSB2YXJpb3VzIHN5bWJvbHMgdG91Y2hlZCBieSB0aGlzIHBhdGNoOiBgdm1hcGAsIGFuZCB0aGUgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBmb3IgYHZtYXBgIC0gYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAsIGBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAsIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgLCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCwgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCwgYHZtYXBfcGFnZXNfcHRlX3JhbmdlYCwgYHZtYXBfcGFnZXNfcG1kX3JhbmdlYCwgYHZtYXBfcGFnZXNfcHVkX3JhbmdlYCwgYHZtYXBfcGFnZXNfcDRkX3JhbmdlYCBhbmQgZmluYWxseSwgY3JpdGljYWxseSwgYGFyY2hfbWFrZV9odWdlX3B0ZWAuIEkndmUgY2hlY2tlZCBhbmQgYGFyY2hfbWFrZV9odWdlX3B0ZWAgKmlzKiBkZWZpbmVkIGluIGBhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNgLiBPdGhlciBhcmNoaXRlY3R1cmVzLCBsaWtlIHBvd2VycGMsIHJpc2N2LCBhbmQgc3BhcmMgYWxzbyBkZWZpbmUgaXQgYnV0IHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdG91Y2hlcyB0aGUgYXJtNjQgaW1wbGVtZW50YXRpb24uXG5cblRoZSBwYXRjaCBtb2RpZmllcyBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhgLCBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYCwgYW5kIGBtbS92bWFsbG9jLmNgLiBUaGUgY2hhbmdlcyBpbiBgbW0vdm1hbGxvYy5jYCBhcmUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGJ1dCByZWx5IG9uIGBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplYCBhbmQgYGFyY2hfbWFrZV9odWdlX3B0ZWAgZGVmaW5lZCBieSB0aGUgYXJjaGl0ZWN0dXJlLiBTbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBjb250aWd1b3VzIFBURSBtYXBwaW5ncyBmb3Igdm1hbGxvYyBvbiBhcm02NC5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCB0aGUgYXJtNjQgYXJjaGl0ZWN0dXJlLiBJdCBpbnRyb2R1Y2VzIGNvbnRpZ3VvdXMgUFRFIG1hcHBpbmdzIGZvciB2bWFsbG9jIG9uIGFybTY0IGFuZCB1cGRhdGVzIGB2bWFwYCB0byBzdXBwb3J0IGJhdGNoZWQgbWFwcGluZyBmb3IgY29udGlndW91cyBwYWdlcy4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbi4gR2l2ZW4gdGhlc2UgY2hhbmdlcywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBzdGFiaWxpdHkuIEkgc2hvdWxkIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtYXJrIHRoaXMgYXMgYW4gaW1wb3J0YW50IGZ1enppbmcgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY3MSwiT3V0cHV0VG9rZW5zIjoyMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6NDk6NDIuMjEwMDU1ODk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyOTAxNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFwXCIsXG4gICAgXCJfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZcIixcbiAgICBcIl9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRcIixcbiAgICBcInZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYVwiLFxuICAgIFwidm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGtcIixcbiAgICBcInZtYXBfcGFnZXNfcHRlX3JhbmdlXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3BtZF9yYW5nZVwiLFxuICAgIFwidm1hcF9wYWdlc19wdWRfcmFuZ2VcIixcbiAgICBcInZtYXBfcGFnZXNfcDRkX3JhbmdlXCIsXG4gICAgXCJhcmNoX21ha2VfaHVnZV9wdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGNvbnRpZ3VvdXMgUFRFIG1hcHBpbmdzIGZvciB2bWFsbG9jIG9uIGFybTY0LCBhbmQgdXBkYXRlcyB2bWFwIHRvIHN1cHBvcnQgYmF0Y2hlZCBtYXBwaW5nIGZvciBjb250aWd1b3VzIHBhZ2VzLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBcIixcbiAgICBcIl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hcIixcbiAgICBcInZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZFwiLFxuICAgIFwidm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa1wiLFxuICAgIFwidm1hcF9wYWdlc19wdGVfcmFuZ2VcIixcbiAgICBcInZtYXBfcGFnZXNfcG1kX3JhbmdlXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3B1ZF9yYW5nZVwiLFxuICAgIFwidm1hcF9wYWdlc19wNGRfcmFuZ2VcIixcbiAgICBcImFyY2hfbWFrZV9odWdlX3B0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgY29udGlndW91cyBQVEUgbWFwcGluZ3MgZm9yIHZtYWxsb2Mgb24gYXJtNjQsIGFuZCB1cGRhdGVzIHZtYXAgdG8gc3VwcG9ydCBiYXRjaGVkIG1hcHBpbmcgZm9yIGNvbnRpZ3VvdXMgcGFnZXMuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv5wcl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 03:25:25 +0000 UTC FinishedAt: 2026-07-16 03:49:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "58717b2a1365d06c8c64b72aa948541b53fe31eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "58717b2a1365d06c8c64b72aa948541b53fe31eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "e601f882-dcfd-4e92-b0cc-06dbaf1cc186" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vmap", "__vmalloc_node_range_noprof", "__vmap_pages_range_noflush", "vmap_pages_range_batched", "vmap_get_aligned_vm_area", "vmap_pages_range_noflush_walk", "vmap_pages_pte_range", "vmap_pages_pmd_range", "vmap_pages_pud_range", "vmap_pages_p4d_range", "arch_make_huge_pte" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXAmIzM0OywKICAgICYjMzQ7X192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O19fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoJiMzNDssCiAgICAmIzM0O3ZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZCYjMzQ7LAogICAgJiMzNDt2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWEmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19wdGVfcmFuZ2UmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19wbWRfcmFuZ2UmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19wdWRfcmFuZ2UmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19wNGRfcmFuZ2UmIzM0OywKICAgICYjMzQ7YXJjaF9tYWtlX2h1Z2VfcHRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgY29udGlndW91cyBQVEUgbWFwcGluZ3MgZm9yIHZtYWxsb2Mgb24gYXJtNjQsIGFuZCB1cGRhdGVzIHZtYXAgdG8gc3VwcG9ydCBiYXRjaGVkIG1hcHBpbmcgZm9yIGNvbnRpZ3VvdXMgcGFnZXMuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZDE3MGFkZDRkZDFjMjc4NDJmOTNlZDNiYmFjNDRhMDg2Njc3MzhjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMDM6NDg6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaFxuaW5kZXggNGVjMWFjZDNjMWIzNDguLmQ2NjVmOWQ2ODc0MjJkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oXG5AQCAtMjMsMTAgJiM0MzsyMywxNCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBlbmQsIHU2NCBwZm4sXG4gXHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0KVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNpemU7XG4mIzQzO1xuIFx0LypcbiBcdCAqIElmIHRoZSBibG9jayBpcyBhdCBsZWFzdCBDT05UX1BURV9TSVpFIGluIHNpemUsIGFuZCBpcyBuYXR1cmFsbHlcbiBcdCAqIGFsaWduZWQgaW4gYm90aCB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBzcGFjZSwgdGhlbiB3ZSBjYW4gcHRlLW1hcCB0aGVcbiBcdCAqIGJsb2NrIHVzaW5nIHRoZSBQVEVfQ09OVCBiaXQgZm9yIG1vcmUgZWZmaWNpZW50IHVzZSBvZiB0aGUgVExCLlxuJiM0MztcdCAqIFRoZSByZXR1cm5lZCBtYXBwaW5nIHNpemUgbWF5IGNvdmVyIG11bHRpcGxlIENPTlRfUFRFX1NJWkUgYmxvY2tzLFxuJiM0MztcdCAqIGNhcHBlZCBiZWxvdyBQTURfU0laRS5cbiBcdCAqL1xuIFx0aWYgKG1heF9wYWdlX3NoaWZ0IFx1MDAzYyBDT05UX1BURV9TSElGVClcbiBcdFx0cmV0dXJuIFBBR0VfU0laRTtcbkBAIC00MCw3ICYjNDM7NDQsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoIUlTX0FMSUdORUQoUEZOX1BIWVMocGZuKSwgQ09OVF9QVEVfU0laRSkpXG4gXHRcdHJldHVybiBQQUdFX1NJWkU7XG4gXG4tXHRyZXR1cm4gQ09OVF9QVEVfU0laRTtcbiYjNDM7XHRzaXplID0gbWluMyhlbmQgLSBhZGRyLCAxVUwgXHUwMDNjXHUwMDNjIG1heF9wYWdlX3NoaWZ0LCBQTURfU0laRSBcdTAwM2VcdTAwM2UgMSk7XG4mIzQzO1x0c2l6ZSA9IHJvdW5kZG93bl9wb3dfb2ZfdHdvKHNpemUpO1xuJiM0MztcdHJldHVybiBzaXplO1xuIH1cbiBcbiAjZGVmaW5lIGFyY2hfdm1hcF9wdGVfcmFuZ2VfdW5tYXBfc2l6ZSBhcmNoX3ZtYXBfcHRlX3JhbmdlX3VubWFwX3NpemVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcbmluZGV4IDMwNzcyYTkwOWFlYTNlLi43NzlkMzI5ODZkMGQ2NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jXG5AQCAtOTQsNiAmIzQzOzk0LDExIEBAIHN0YXRpYyBpbnQgZmluZF9udW1fY29udGlnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRyZXR1cm4gQ09OVF9QVEVTO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogbnVtX2NvbnRpZ19wdGVzKCksIHNldF9odWdlX3B0ZV9hdCgpIGFuZCBhcmNoX21ha2VfaHVnZV9wdGUoKSBjYW4gYmVcbiYjNDM7ICogdXNlZCBieSBub24taHVnZXRsYmZzKHZtYWxsb2MpIG1tIGNvZGUgdG8gc2V0IG11bHRpcGxlIGh1Z2UgbWFwcGluZ3NcbiYjNDM7ICogYXQgdGhlIFBURSBsZXZlbC5cbiYjNDM7ICovXG4gc3RhdGljIGlubGluZSBpbnQgbnVtX2NvbnRpZ19wdGVzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgc2l6ZV90ICpwZ3NpemUpXG4ge1xuIFx0aW50IGNvbnRpZ19wdGVzID0gMTtcbkBAIC0xMTAsNiAmIzQzOzExNSwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBudW1fY29udGlnX3B0ZXModW5zaWduZWQgbG9uZyBzaXplLCBzaXplX3QgKnBnc2l6ZSlcbiBcdFx0Y29udGlnX3B0ZXMgPSBDT05UX1BURVM7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiYjNDM7XHRcdGlmIChzaXplIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzYyBQTURfU0laRSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHRJU19BTElHTkVEKHNpemUsIENPTlRfUFRFX1NJWkUpKSB7XG4mIzQzO1x0XHRcdCpwZ3NpemUgPSBQQUdFX1NJWkU7XG4mIzQzO1x0XHRcdGNvbnRpZ19wdGVzID0gc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4gXHRcdFdBUk5fT04oIV9faHVnZXRsYl92YWxpZF9zaXplKHNpemUpKTtcbiBcdH1cbiBcbkBAIC0zNTksNiAmIzQzOzM3MCwxMCBAQCBwdGVfdCBhcmNoX21ha2VfaHVnZV9wdGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdCwgdm1fZmxhZ3NfdCBmbGFncylcbiBcdGNhc2UgQ09OVF9QVEVfU0laRTpcbiBcdFx0cmV0dXJuIHB0ZV9ta2NvbnQoZW50cnkpO1xuIFx0ZGVmYXVsdDpcbiYjNDM7XHRcdGlmIChwYWdlc2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgcGFnZXNpemUgXHUwMDNjIFBNRF9TSVpFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdElTX0FMSUdORUQocGFnZXNpemUsIENPTlRfUFRFX1NJWkUpKVxuJiM0MztcdFx0XHRyZXR1cm4gcHRlX21rY29udChlbnRyeSk7XG4mIzQzO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdHByX3dhcm4oXCYjMzQ7JXM6IHVucmVjb2duaXplZCBodWdlIHBhZ2Ugc2l6ZSAweCVseFxcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IDFhZmNhMzU2OGI5YjY1Li45NWZmY2EyMTk0Njc5MyAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jXG5AQCAtOTEsNiAmIzQzOzkxLDMzIEBAIHN0cnVjdCB2ZnJlZV9kZWZlcnJlZCB7XG4gc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB2ZnJlZV9kZWZlcnJlZCwgdmZyZWVfZGVmZXJyZWQpO1xuIFxuIC8qKiogUGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICoqKi9cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRyeSBjb250aWd1b3VzIG1hcHBpbmdzIGF0IHRoZSBQVEUgbGV2ZWwgZm9yIGFyY2hlcyB3aGljaCBzdXBwb3J0IHRoZW0sIGFuZCBpZlxuJiM0MzsgKiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4gRmFsbCBiYWNrIHRvIFBBR0VfU0laRSBtYXBwaW5ncyBvdGhlcndpc2UuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogbWFwcGluZyBzaXplLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZtYXBfc2V0X3B0ZXMocHRlX3QgKnB0ZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHU2NCBwZm4sXG4mIzQzO1x0XHRwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNpemU7XG4mIzQzO1xuJiM0MztcdHNpemUgPSBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplKGFkZHIsIGVuZCwgcGZuLCBtYXhfcGFnZV9zaGlmdCk7XG4mIzQzO1x0aWYgKHNpemUgIT0gUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHRwdGVfdCBlbnRyeSA9IHBmbl9wdGUocGZuLCBwcm90KTtcbiYjNDM7XG4mIzQzO1x0XHRlbnRyeSA9IGFyY2hfbWFrZV9odWdlX3B0ZShlbnRyeSwgaWxvZzIoc2l6ZSksIDApO1xuJiM0MztcdFx0c2V0X2h1Z2VfcHRlX2F0KFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgZW50cnksIHNpemUpO1xuJiM0MztcdFx0cmV0dXJuIHNpemU7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcbiYjNDM7XHRzZXRfcHRlX2F0KFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTtcbiYjNDM7XHRyZXR1cm4gUEFHRV9TSVpFO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXG4gXHRcdFx0dW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbkBAIC05OCw3ICYjNDM7MTI1LDggQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0cHRlX3QgKnB0ZTtcbiBcdHU2NCBwZm47XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbi1cdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNpemU7XG4mIzQzO1x0dW5zaWduZWQgaW50IHN0ZXBzO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghUEFHRV9BTElHTkVEKGVuZCAtIGFkZHIpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTE5LDIwICYjNDM7MTQ3LDkgQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdEJVRygpO1xuIFx0XHR9XG4gXG4tI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbi1cdFx0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTtcbi1cdFx0aWYgKHNpemUgIT0gUEFHRV9TSVpFKSB7XG4tXHRcdFx0cHRlX3QgZW50cnkgPSBwZm5fcHRlKHBmbiwgcHJvdCk7XG4tXG4tXHRcdFx0ZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIGlsb2cyKHNpemUpLCAwKTtcbi1cdFx0XHRzZXRfaHVnZV9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSwgc2l6ZSk7XG4tXHRcdFx0cGZuICYjNDM7PSBQRk5fRE9XTihzaXplKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLSNlbmRpZlxuLVx0XHRzZXRfcHRlX2F0KFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTtcbi1cdFx0cGZuJiM0MzsmIzQzOztcbi1cdH0gd2hpbGUgKHB0ZSAmIzQzOz0gUEZOX0RPV04oc2l6ZSksIGFkZHIgJiM0Mzs9IHNpemUsIGFkZHIgIT0gZW5kKTtcbiYjNDM7XHRcdHNpemUgPSB2bWFwX3NldF9wdGVzKHB0ZSwgYWRkciwgZW5kLCBwZm4sIHByb3QsIG1heF9wYWdlX3NoaWZ0KTtcbiYjNDM7XHRcdHN0ZXBzID0gUEZOX0RPV04oc2l6ZSk7XG4mIzQzO1x0fSB3aGlsZSAocHRlICYjNDM7PSBzdGVwcywgcGZuICYjNDM7PSBzdGVwcywgYWRkciAmIzQzOz0gc2l6ZSwgYWRkciAhPSBlbmQpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXHQqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7XG5AQCAtNTI0LDggJiM0Mzs1NDEsMTAgQEAgdm9pZCB2dW5tYXBfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZClcbiBcbiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0dW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsXG4tXHRcdHBndGJsX21vZF9tYXNrICptYXNrKVxuJiM0MztcdFx0cGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdClcbiB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwZm4sIHNpemU7XG4mIzQzO1x0dW5zaWduZWQgaW50IHN0ZXBzO1xuIFx0aW50IGVyciA9IDA7XG4gXHRwdGVfdCAqcHRlO1xuIFxuQEAgLTU1Niw5ICYjNDM7NTc1LDEwIEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBta19wdGUocGFnZSwgcHJvdCkpO1xuLVx0XHQoKm5yKSYjNDM7JiM0Mzs7XG4tXHR9IHdoaWxlIChwdGUmIzQzOyYjNDM7LCBhZGRyICYjNDM7PSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTtcbiYjNDM7XHRcdHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xuJiM0MztcdFx0c2l6ZSA9IHZtYXBfc2V0X3B0ZXMocHRlLCBhZGRyLCBlbmQsIHBmbiwgcHJvdCwgc2hpZnQpO1xuJiM0MztcdFx0c3RlcHMgPSBQRk5fRE9XTihzaXplKTtcbiYjNDM7XHR9IHdoaWxlIChwdGUgJiM0Mzs9IHN0ZXBzLCAqbnIgJiM0Mzs9IHN0ZXBzLCBhZGRyICYjNDM7PSBzaXplLCBhZGRyICE9IGVuZCk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcdCptYXNrIHw9IFBHVEJMX1BURV9NT0RJRklFRDtcbkBAIC01NjgsNjAgJiM0Mzs1ODgsOTAgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXG4gc3RhdGljIGludCB2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLFxuLVx0XHRwZ3RibF9tb2RfbWFzayAqbWFzaylcbiYjNDM7XHRcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4ge1xuIFx0cG1kX3QgKnBtZDtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0cG1kID0gcG1kX2FsbG9jX3RyYWNrKFx1MDAyNmluaXRfbW0sIHB1ZCwgYWRkciwgbWFzayk7XG4gXHRpZiAoIXBtZClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbi1cdFx0aWYgKHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrKSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2hpZnQgXHUwMDNlPSBQTURfU0hJRlQpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1sqbnJdO1xuJiM0MztcdFx0XHRwaHlzX2FkZHJfdCBwaHlzX2FkZHI7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoV0FSTl9PTighcGFnZSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRcdGlmIChXQVJOX09OKCFwZm5fdmFsaWQocGFnZV90b19wZm4ocGFnZSkpKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRcdHBoeXNfYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCxcbiYjNDM7XHRcdFx0XHRcdFx0c2hpZnQpKSB7XG4mIzQzO1x0XHRcdFx0Km1hc2sgfD0gUEdUQkxfUE1EX01PRElGSUVEO1xuJiM0MztcdFx0XHRcdCpuciAmIzQzOz0gMSBcdTAwM2NcdTAwM2MgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gdm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4gXHR9IHdoaWxlIChwbWQmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcbi1cdFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXG4mIzQzO1x0XHRwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KVxuIHtcbiBcdHB1ZF90ICpwdWQ7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG4mIzQzO1x0aW50IGVycjtcbiBcbiBcdHB1ZCA9IHB1ZF9hbGxvY190cmFjayhcdTAwMjZpbml0X21tLCBwNGQsIGFkZHIsIG1hc2spO1xuIFx0aWYgKCFwdWQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4tXHRcdGlmICh2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRlcnIgPSB2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaywgc2hpZnQpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiBcdH0gd2hpbGUgKHB1ZCYjNDM7JiM0MzssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLFxuLVx0XHRwZ3RibF9tb2RfbWFzayAqbWFzaylcbiYjNDM7XHRcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4ge1xuIFx0cDRkX3QgKnA0ZDtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0cDRkID0gcDRkX2FsbG9jX3RyYWNrKFx1MDAyNmluaXRfbW0sIHBnZCwgYWRkciwgbWFzayk7XG4gXHRpZiAoIXA0ZClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwNGRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbi1cdFx0aWYgKHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrKSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdGVyciA9IHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrLCBzaGlmdCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fSB3aGlsZSAocDRkJiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLVx0XHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuJiM0MzsvKlxuJiM0MzsgKiBJdCBjYW4gdGFrZSBhbiBhcnJheSBvZiBwYWdlcyB3aGljaCBhcmUgbm90IGFsbCBjb250aWd1b3VzLCBidXQgaXRcbiYjNDM7ICogbWF5IGhhdmUgY29udGlndW91cyBjaHVua3MsIGFzIGhpbnRlZCBieSBAc2hpZnQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4mIzQzO1x0XHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHI7XG4gXHRwZ2RfdCAqcGdkO1xuQEAgLTYzNiw3ICYjNDM7Njg2LDcgQEAgc3RhdGljIGludCB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0bmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuIFx0XHRpZiAocGdkX2JhZCgqcGdkKSlcbiBcdFx0XHRtYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDtcbi1cdFx0ZXJyID0gdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgXHUwMDI2bnIsIFx1MDAyNm1hc2spO1xuJiM0MztcdFx0ZXJyID0gdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgXHUwMDI2bnIsIFx1MDAyNm1hc2ssIHNoaWZ0KTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRicmVhaztcbiBcdH0gd2hpbGUgKHBnZCYjNDM7JiM0MzssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XG5AQCAtNjU5LDI3ICYjNDM7NzA5LDEyIEBAIHN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gaW50IF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0KVxuIHtcbi1cdHVuc2lnbmVkIGludCBpLCBuciA9IChlbmQgLSBhZGRyKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cbiBcdFdBUk5fT04ocGFnZV9zaGlmdCBcdTAwM2MgUEFHRV9TSElGVCk7XG4gXG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MpIHx8XG4tXHRcdFx0cGFnZV9zaGlmdCA9PSBQQUdFX1NISUZUKVxuLVx0XHRyZXR1cm4gdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMpO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnI7IGkgJiM0Mzs9IDFVIFx1MDAzY1x1MDAzYyAocGFnZV9zaGlmdCAtIFBBR0VfU0hJRlQpKSB7XG4tXHRcdGludCBlcnI7XG4tXG4tXHRcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIHBhZ2Vfc2hpZnQpLFxuLVx0XHRcdFx0XHRwYWdlX3RvX3BoeXMocGFnZXNbaV0pLCBwcm90LFxuLVx0XHRcdFx0XHRwYWdlX3NoaWZ0KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0XHRhZGRyICYjNDM7PSAxVUwgXHUwMDNjXHUwMDNjIHBhZ2Vfc2hpZnQ7XG4tXHR9XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DKSlcbiYjNDM7XHRcdHBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMsIHBhZ2Vfc2hpZnQpO1xuIH1cbiBcbiBpbnQgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5AQCAtMzI3OSw2ICYjNDM7MzMxNCwxNCBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfdm1fYXJlYV9jYWxsZXIodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxuIFx0XHRcdFx0ICBOVU1BX05PX05PREUsIEdGUF9LRVJORUwsIGNhbGxlcik7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqX19nZXRfdm1fYXJlYV9ub2RlX2FsaWduZWRfY2FsbGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IHZvaWQgKmNhbGxlcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgYWxpZ24sIFBBR0VfU0hJRlQsIGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXG4mIzQzO1x0XHRcdFx0ICBOVU1BX05PX05PREUsIEdGUF9LRVJORUwsIGNhbGxlcik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZmluZF92bV9hcmVhIC0gZmluZCBhIGNvbnRpbnVvdXMga2VybmVsIHZpcnR1YWwgYXJlYVxuICAqIEBhZGRyOlx0ICBiYXNlIGFkZHJlc3NcbkBAIC0zNTE5LDYgJiM0MzszNTYyLDExNiBAQCB2b2lkIHZ1bm1hcChjb25zdCB2b2lkICphZGRyKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHZ1bm1hcCk7XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHZtX3NoaWZ0KHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGlmIChhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IFBNRF9TSVpFKVxuJiM0MztcdFx0cmV0dXJuIFBNRF9TSElGVDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBnZXRfdm1hcF9iYXRjaF9vcmRlcihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuJiM0MztcdFx0cGdwcm90X3QgcHJvdCwgdW5zaWduZWQgaW50IG1heF9zdGVwcywgdW5zaWduZWQgaW50IGlkeClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcGZuO1xuJiM0MztcdHVuc2lnbmVkIGludCBucl9jb250aWc7XG4mIzQzO1x0aW50IG9yZGVyO1xuJiM0MztcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVApKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG5yX2NvbnRpZyA9IG51bV9wYWdlc19jb250aWd1b3VzKFx1MDAyNnBhZ2VzW2lkeF0sIG1heF9zdGVwcyk7XG4mIzQzO1x0aWYgKG5yX2NvbnRpZyBcdTAwM2MgMilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRvcmRlciA9IGlsb2cyKG5yX2NvbnRpZyk7XG4mIzQzO1x0cGZuID0gcGFnZV90b19wZm4ocGFnZXNbaWR4XSk7XG4mIzQzO1xuJiM0MztcdC8qIExpbWl0IG9yZGVyIGJ5IHBmbiBhbGlnbm1lbnQgKi9cbiYjNDM7XHRpZiAocGZuIFx1MDAzZSAwKVxuJiM0MztcdFx0b3JkZXIgPSBtaW5fdChpbnQsIG9yZGVyLCBfX2ZmcyhwZm4pKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZtX3NoaWZ0KHByb3QsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpID09IFBBR0VfU0hJRlQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG9yZGVyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuJiM0MztcdFx0cGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBjb3VudCA9IChlbmQgLSBhZGRyKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcHJldl9zaGlmdCA9IDAsIGlkeCA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtYXBfYWRkciA9IGFkZHIsIGJhdGNoX2VuZCA9IGFkZHI7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0ga21zYW5fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFBBR0VfU0hJRlQsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIGNvdW50OyApIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBzaGlmdCA9IFBBR0VfU0hJRlQgJiM0MztcbiYjNDM7XHRcdFx0Z2V0X3ZtYXBfYmF0Y2hfb3JkZXIocGFnZXMsIHByb3QsIGNvdW50IC0gaSwgaSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFpKVxuJiM0MztcdFx0XHRwcmV2X3NoaWZ0ID0gc2hpZnQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNoaWZ0ICE9IHByZXZfc2hpZnQpIHtcbiYjNDM7XHRcdFx0ZXJyID0gdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsobWFwX2FkZHIsIGJhdGNoX2VuZCxcbiYjNDM7XHRcdFx0XHRcdHByb3QsIHBhZ2VzICYjNDM7IGlkeCwgcHJldl9zaGlmdCk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdHByZXZfc2hpZnQgPSBzaGlmdDtcbiYjNDM7XHRcdFx0bWFwX2FkZHIgPSBiYXRjaF9lbmQ7XG4mIzQzO1x0XHRcdGlkeCA9IGk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE9uY2Ugc21hbGwgcGFnZXMgYXJlIGVuY291bnRlcmVkLCB0aGUgcmVtYWluaW5nIHBhZ2VzXG4mIzQzO1x0XHQgKiBhcmUgbGlrZWx5IHNtYWxsIGFzIHdlbGwuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChzaGlmdCA9PSBQQUdFX1NISUZUKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRiYXRjaF9lbmQgJiM0Mzs9IDFVTCBcdTAwM2NcdTAwM2Mgc2hpZnQ7XG4mIzQzO1x0XHRpICYjNDM7PSAxVSBcdTAwM2NcdTAwM2MgKHNoaWZ0IC0gUEFHRV9TSElGVCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBSZW1haW5pbmcgKi9cbiYjNDM7XHRpZiAobWFwX2FkZHIgXHUwMDNjIGVuZClcbiYjNDM7XHRcdGVyciA9IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKG1hcF9hZGRyLCBlbmQsXG4mIzQzO1x0XHRcdFx0cHJvdCwgcGFnZXMgJiM0MzsgaWR4LCBwcmV2X3NoaWZ0KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRmbHVzaF9jYWNoZV92bWFwKGFkZHIsIGVuZCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKnZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGZsYWdzLCBwZ3Byb3RfdCBwcm90LCBjb25zdCB2b2lkICpjYWxsZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhO1xuJiM0MztcdHVuc2lnbmVkIGludCBzaGlmdDtcbiYjNDM7XG4mIzQzO1x0aWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzZT0gUE1EX1NJWkUpIHtcbiYjNDM7XHRcdHZtX2FyZWEgPSBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgUE1EX1NJWkUsXG4mIzQzO1x0XHRcdFx0ZmxhZ3MsIGNhbGxlcik7XG4mIzQzO1x0XHRpZiAodm1fYXJlYSlcbiYjNDM7XHRcdFx0cmV0dXJuIHZtX2FyZWE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzaGlmdCA9IGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpO1xuJiM0MztcdGlmIChzaGlmdCBcdTAwM2UgUEFHRV9TSElGVCkge1xuJiM0MztcdFx0dm1fYXJlYSA9IF9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcihzaXplLCAxVUwgXHUwMDNjXHUwMDNjIHNoaWZ0LFxuJiM0MztcdFx0XHRcdGZsYWdzLCBjYWxsZXIpO1xuJiM0MztcdFx0aWYgKHZtX2FyZWEpXG4mIzQzO1x0XHRcdHJldHVybiB2bV9hcmVhO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcihzaXplLCBQQUdFX1NJWkUsIGZsYWdzLCBjYWxsZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHZtYXAgLSBtYXAgYW4gYXJyYXkgb2YgcGFnZXMgaW50byB2aXJ0dWFsbHkgY29udGlndW91cyBzcGFjZVxuICAqIEBwYWdlczogYXJyYXkgb2YgcGFnZSBwb2ludGVyc1xuQEAgLTM1NTcsMTMgJiM0MzszNzEwLDE0IEBAIHZvaWQgKnZtYXAoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGNvdW50LFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdHNpemUgPSAodW5zaWduZWQgbG9uZyljb3VudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbi1cdGFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4mIzQzO1x0YXJlYSA9IHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYShzaXplLCBmbGFncywgcHJvdCxcbiYjNDM7XHRcdFx0XHRfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuIFx0aWYgKCFhcmVhKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLVx1MDAzZWFkZHI7XG4tXHRpZiAodm1hcF9wYWdlc19yYW5nZShhZGRyLCBhZGRyICYjNDM7IHNpemUsIHBncHJvdF9ueChwcm90KSxcbi1cdFx0XHRcdHBhZ2VzLCBQQUdFX1NISUZUKSBcdTAwM2MgMCkge1xuJiM0MztcdGlmICh2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWQoYWRkciwgYWRkciAmIzQzOyBzaXplLCBwZ3Byb3RfbngocHJvdCksXG4mIzQzO1x0XHRcdFx0cGFnZXMpIFx1MDAzYyAwKSB7XG4gXHRcdHZ1bm1hcChhcmVhLVx1MDAzZWFkZHIpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbkBAIC00MDMwLDExICYjNDM7NDE4NCw3IEBAIHZvaWQgKl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXG4gXHRcdCAqIHN1cHBvcnRpbmcgdGhlbS5cbiBcdFx0ICovXG4gXG4tXHRcdGlmIChhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IFBNRF9TSVpFKVxuLVx0XHRcdHNoaWZ0ID0gUE1EX1NISUZUO1xuLVx0XHRlbHNlXG4tXHRcdFx0c2hpZnQgPSBhcmNoX3ZtYXBfcHRlX3N1cHBvcnRlZF9zaGlmdChzaXplKTtcbi1cbiYjNDM7XHRcdHNoaWZ0ID0gdm1fc2hpZnQocHJvdCwgc2l6ZSk7XG4gXHRcdGFsaWduID0gbWF4KG9yaWdpbmFsX2FsaWduLCAxVUwgXHUwMDNjXHUwMDNjIHNoaWZ0KTtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWFwJiMzNDssCiAgICAmIzM0O19fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDtfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWQmIzM0OywKICAgICYjMzQ7dm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhJiMzNDssCiAgICAmIzM0O3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrJiMzNDssCiAgICAmIzM0O3ZtYXBfcGFnZXNfcHRlX3JhbmdlJiMzNDssCiAgICAmIzM0O3ZtYXBfcGFnZXNfcG1kX3JhbmdlJiMzNDssCiAgICAmIzM0O3ZtYXBfcGFnZXNfcHVkX3JhbmdlJiMzNDssCiAgICAmIzM0O3ZtYXBfcGFnZXNfcDRkX3JhbmdlJiMzNDssCiAgICAmIzM0O2FyY2hfbWFrZV9odWdlX3B0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGNvbnRpZ3VvdXMgUFRFIG1hcHBpbmdzIGZvciB2bWFsbG9jIG9uIGFybTY0LCBhbmQgdXBkYXRlcyB2bWFwIHRvIHN1cHBvcnQgYmF0Y2hlZCBtYXBwaW5nIGZvciBjb250aWd1b3VzIHBhZ2VzLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZDE3MGFkZDRkZDFjMjc4NDJmOTNlZDNiYmFjNDRhMDg2Njc3MzhjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMDM6NDg6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oCmluZGV4IDRlYzFhY2QzYzFiMzQ4Li5kNjY1ZjlkNjg3NDIyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmgKQEAgLTIzLDEwICYjNDM7MjMsMTQgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUodW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCQkJdW5zaWduZWQgbG9uZyBlbmQsIHU2NCBwZm4sCiAJCQkJCQl1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZTsKJiM0MzsKIAkvKgogCSAqIElmIHRoZSBibG9jayBpcyBhdCBsZWFzdCBDT05UX1BURV9TSVpFIGluIHNpemUsIGFuZCBpcyBuYXR1cmFsbHkKIAkgKiBhbGlnbmVkIGluIGJvdGggdmlydHVhbCBhbmQgcGh5c2ljYWwgc3BhY2UsIHRoZW4gd2UgY2FuIHB0ZS1tYXAgdGhlCiAJICogYmxvY2sgdXNpbmcgdGhlIFBURV9DT05UIGJpdCBmb3IgbW9yZSBlZmZpY2llbnQgdXNlIG9mIHRoZSBUTEIuCiYjNDM7CSAqIFRoZSByZXR1cm5lZCBtYXBwaW5nIHNpemUgbWF5IGNvdmVyIG11bHRpcGxlIENPTlRfUFRFX1NJWkUgYmxvY2tzLAomIzQzOwkgKiBjYXBwZWQgYmVsb3cgUE1EX1NJWkUuCiAJICovCiAJaWYgKG1heF9wYWdlX3NoaWZ0ICZsdDsgQ09OVF9QVEVfU0hJRlQpCiAJCXJldHVybiBQQUdFX1NJWkU7CkBAIC00MCw3ICYjNDM7NDQsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKCFJU19BTElHTkVEKFBGTl9QSFlTKHBmbiksIENPTlRfUFRFX1NJWkUpKQogCQlyZXR1cm4gUEFHRV9TSVpFOwogCi0JcmV0dXJuIENPTlRfUFRFX1NJWkU7CiYjNDM7CXNpemUgPSBtaW4zKGVuZCAtIGFkZHIsIDFVTCAmbHQ7Jmx0OyBtYXhfcGFnZV9zaGlmdCwgUE1EX1NJWkUgJmd0OyZndDsgMSk7CiYjNDM7CXNpemUgPSByb3VuZGRvd25fcG93X29mX3R3byhzaXplKTsKJiM0MzsJcmV0dXJuIHNpemU7CiB9CiAKICNkZWZpbmUgYXJjaF92bWFwX3B0ZV9yYW5nZV91bm1hcF9zaXplIGFyY2hfdm1hcF9wdGVfcmFuZ2VfdW5tYXBfc2l6ZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jCmluZGV4IDMwNzcyYTkwOWFlYTNlLi43NzlkMzI5ODZkMGQ2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtOTQsNiAmIzQzOzk0LDExIEBAIHN0YXRpYyBpbnQgZmluZF9udW1fY29udGlnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJcmV0dXJuIENPTlRfUFRFUzsKIH0KIAomIzQzOy8qCiYjNDM7ICogbnVtX2NvbnRpZ19wdGVzKCksIHNldF9odWdlX3B0ZV9hdCgpIGFuZCBhcmNoX21ha2VfaHVnZV9wdGUoKSBjYW4gYmUKJiM0MzsgKiB1c2VkIGJ5IG5vbi1odWdldGxiZnModm1hbGxvYykgbW0gY29kZSB0byBzZXQgbXVsdGlwbGUgaHVnZSBtYXBwaW5ncwomIzQzOyAqIGF0IHRoZSBQVEUgbGV2ZWwuCiYjNDM7ICovCiBzdGF0aWMgaW5saW5lIGludCBudW1fY29udGlnX3B0ZXModW5zaWduZWQgbG9uZyBzaXplLCBzaXplX3QgKnBnc2l6ZSkKIHsKIAlpbnQgY29udGlnX3B0ZXMgPSAxOwpAQCAtMTEwLDYgJiM0MzsxMTUsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgbnVtX2NvbnRpZ19wdGVzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgc2l6ZV90ICpwZ3NpemUpCiAJCWNvbnRpZ19wdGVzID0gQ09OVF9QVEVTOwogCQlicmVhazsKIAlkZWZhdWx0OgomIzQzOwkJaWYgKHNpemUgJmd0OyAwICZhbXA7JmFtcDsgc2l6ZSAmbHQ7IFBNRF9TSVpFICZhbXA7JmFtcDsKJiM0MzsJCQkJSVNfQUxJR05FRChzaXplLCBDT05UX1BURV9TSVpFKSkgewomIzQzOwkJCSpwZ3NpemUgPSBQQUdFX1NJWkU7CiYjNDM7CQkJY29udGlnX3B0ZXMgPSBzaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiAJCVdBUk5fT04oIV9faHVnZXRsYl92YWxpZF9zaXplKHNpemUpKTsKIAl9CiAKQEAgLTM1OSw2ICYjNDM7MzcwLDEwIEBAIHB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKQogCWNhc2UgQ09OVF9QVEVfU0laRToKIAkJcmV0dXJuIHB0ZV9ta2NvbnQoZW50cnkpOwogCWRlZmF1bHQ6CiYjNDM7CQlpZiAocGFnZXNpemUgJmd0OyAwICZhbXA7JmFtcDsgcGFnZXNpemUgJmx0OyBQTURfU0laRSAmYW1wOyZhbXA7CiYjNDM7CQkJCUlTX0FMSUdORUQocGFnZXNpemUsIENPTlRfUFRFX1NJWkUpKQomIzQzOwkJCXJldHVybiBwdGVfbWtjb250KGVudHJ5KTsKJiM0MzsKIAkJYnJlYWs7CiAJfQogCXByX3dhcm4oJiMzNDslczogdW5yZWNvZ25pemVkIGh1Z2UgcGFnZSBzaXplIDB4JWx4XG4mIzM0OywKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAxYWZjYTM1NjhiOWI2NS4uOTVmZmNhMjE5NDY3OTMgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTkxLDYgJiM0Mzs5MSwzMyBAQCBzdHJ1Y3QgdmZyZWVfZGVmZXJyZWQgewogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB2ZnJlZV9kZWZlcnJlZCwgdmZyZWVfZGVmZXJyZWQpOwogCiAvKioqIFBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyAqKiovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUcnkgY29udGlndW91cyBtYXBwaW5ncyBhdCB0aGUgUFRFIGxldmVsIGZvciBhcmNoZXMgd2hpY2ggc3VwcG9ydCB0aGVtLCBhbmQgaWYKJiM0MzsgKiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4gRmFsbCBiYWNrIHRvIFBBR0VfU0laRSBtYXBwaW5ncyBvdGhlcndpc2UuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IG1hcHBpbmcgc2l6ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hcF9zZXRfcHRlcyhwdGVfdCAqcHRlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgdTY0IHBmbiwKJiM0MzsJCXBncHJvdF90IHByb3QsIHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdCkKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplOwomIzQzOwomIzQzOwlzaXplID0gYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZShhZGRyLCBlbmQsIHBmbiwgbWF4X3BhZ2Vfc2hpZnQpOwomIzQzOwlpZiAoc2l6ZSAhPSBQQUdFX1NJWkUpIHsKJiM0MzsJCXB0ZV90IGVudHJ5ID0gcGZuX3B0ZShwZm4sIHByb3QpOwomIzQzOwomIzQzOwkJZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIGlsb2cyKHNpemUpLCAwKTsKJiM0MzsJCXNldF9odWdlX3B0ZV9hdCgmYW1wO2luaXRfbW0sIGFkZHIsIHB0ZSwgZW50cnksIHNpemUpOwomIzQzOwkJcmV0dXJuIHNpemU7CiYjNDM7CX0KJiM0MzsjZW5kaWYKJiM0MzsJc2V0X3B0ZV9hdCgmYW1wO2luaXRfbW0sIGFkZHIsIHB0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTsKJiM0MzsJcmV0dXJuIFBBR0VfU0laRTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQlwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsCiAJCQl1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQsIHBndGJsX21vZF9tYXNrICptYXNrKQpAQCAtOTgsNyAmIzQzOzEyNSw4IEBAIHN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAlwdGVfdCAqcHRlOwogCXU2NCBwZm47CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBzaXplID0gUEFHRV9TSVpFOwomIzQzOwl1bnNpZ25lZCBsb25nIHNpemU7CiYjNDM7CXVuc2lnbmVkIGludCBzdGVwczsKIAogCWlmIChXQVJOX09OX09OQ0UoIVBBR0VfQUxJR05FRChlbmQgLSBhZGRyKSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTE5LDIwICYjNDM7MTQ3LDkgQEAgc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJQlVHKCk7CiAJCX0KIAotI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKLQkJc2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTsKLQkJaWYgKHNpemUgIT0gUEFHRV9TSVpFKSB7Ci0JCQlwdGVfdCBlbnRyeSA9IHBmbl9wdGUocGZuLCBwcm90KTsKLQotCQkJZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIGlsb2cyKHNpemUpLCAwKTsKLQkJCXNldF9odWdlX3B0ZV9hdCgmYW1wO2luaXRfbW0sIGFkZHIsIHB0ZSwgZW50cnksIHNpemUpOwotCQkJcGZuICYjNDM7PSBQRk5fRE9XTihzaXplKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0jZW5kaWYKLQkJc2V0X3B0ZV9hdCgmYW1wO2luaXRfbW0sIGFkZHIsIHB0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTsKLQkJcGZuJiM0MzsmIzQzOzsKLQl9IHdoaWxlIChwdGUgJiM0Mzs9IFBGTl9ET1dOKHNpemUpLCBhZGRyICYjNDM7PSBzaXplLCBhZGRyICE9IGVuZCk7CiYjNDM7CQlzaXplID0gdm1hcF9zZXRfcHRlcyhwdGUsIGFkZHIsIGVuZCwgcGZuLCBwcm90LCBtYXhfcGFnZV9zaGlmdCk7CiYjNDM7CQlzdGVwcyA9IFBGTl9ET1dOKHNpemUpOwomIzQzOwl9IHdoaWxlIChwdGUgJiM0Mzs9IHN0ZXBzLCBwZm4gJiM0Mzs9IHN0ZXBzLCBhZGRyICYjNDM7PSBzaXplLCBhZGRyICE9IGVuZCk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAkqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7CkBAIC01MjQsOCAmIzQzOzU0MSwxMCBAQCB2b2lkIHZ1bm1hcF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQogCiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsCi0JCXBndGJsX21vZF9tYXNrICptYXNrKQomIzQzOwkJcGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdCkKIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBwZm4sIHNpemU7CiYjNDM7CXVuc2lnbmVkIGludCBzdGVwczsKIAlpbnQgZXJyID0gMDsKIAlwdGVfdCAqcHRlOwogCkBAIC01NTYsOSAmIzQzOzU3NSwxMCBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCWJyZWFrOwogCQl9CiAKLQkJc2V0X3B0ZV9hdCgmYW1wO2luaXRfbW0sIGFkZHIsIHB0ZSwgbWtfcHRlKHBhZ2UsIHByb3QpKTsKLQkJKCpucikmIzQzOyYjNDM7OwotCX0gd2hpbGUgKHB0ZSYjNDM7JiM0MzssIGFkZHIgJiM0Mzs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwomIzQzOwkJcGZuID0gcGFnZV90b19wZm4ocGFnZSk7CiYjNDM7CQlzaXplID0gdm1hcF9zZXRfcHRlcyhwdGUsIGFkZHIsIGVuZCwgcGZuLCBwcm90LCBzaGlmdCk7CiYjNDM7CQlzdGVwcyA9IFBGTl9ET1dOKHNpemUpOwomIzQzOwl9IHdoaWxlIChwdGUgJiM0Mzs9IHN0ZXBzLCAqbnIgJiM0Mzs9IHN0ZXBzLCBhZGRyICYjNDM7PSBzaXplLCBhZGRyICE9IGVuZCk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAkqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7CkBAIC01NjgsNjAgJiM0Mzs1ODgsOTAgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAKIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQl1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpuciwKLQkJcGd0YmxfbW9kX21hc2sgKm1hc2spCiYjNDM7CQlwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KQogewogCXBtZF90ICpwbWQ7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwomIzQzOwlpbnQgZXJyOwogCiAJcG1kID0gcG1kX2FsbG9jX3RyYWNrKCZhbXA7aW5pdF9tbSwgcHVkLCBhZGRyLCBtYXNrKTsKIAlpZiAoIXBtZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZG8gewogCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWlmICh2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpCi0JCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJCWlmIChzaGlmdCAmZ3Q7PSBQTURfU0hJRlQpIHsKJiM0MzsJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzWypucl07CiYjNDM7CQkJcGh5c19hZGRyX3QgcGh5c19hZGRyOwomIzQzOwomIzQzOwkJCWlmIChXQVJOX09OKCFwYWdlKSkKJiM0MzsJCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQkJaWYgKFdBUk5fT04oIXBmbl92YWxpZChwYWdlX3RvX3BmbihwYWdlKSkpKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCQlwaHlzX2FkZHIgPSBwYWdlX3RvX3BoeXMocGFnZSk7CiYjNDM7CiYjNDM7CQkJaWYgKHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyLCBwcm90LAomIzQzOwkJCQkJCXNoaWZ0KSkgewomIzQzOwkJCQkqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7CiYjNDM7CQkJCSpuciAmIzQzOz0gMSAmbHQ7Jmx0OyAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWVyciA9IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrLCBzaGlmdCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiAJfSB3aGlsZSAocG1kJiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLAotCQlwZ3RibF9tb2RfbWFzayAqbWFzaykKJiM0MzsJCXBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpCiB7CiAJcHVkX3QgKnB1ZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CiYjNDM7CWludCBlcnI7CiAKIAlwdWQgPSBwdWRfYWxsb2NfdHJhY2soJmFtcDtpbml0X21tLCBwNGQsIGFkZHIsIG1hc2spOwogCWlmICghcHVkKQogCQlyZXR1cm4gLUVOT01FTTsKIAlkbyB7CiAJCW5leHQgPSBwdWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJaWYgKHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrKSkKLQkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJZXJyID0gdm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKIAl9IHdoaWxlIChwdWQmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcDRkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsCi0JCXBndGJsX21vZF9tYXNrICptYXNrKQomIzQzOwkJcGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdCkKIHsKIAlwNGRfdCAqcDRkOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKJiM0MzsJaW50IGVycjsKIAogCXA0ZCA9IHA0ZF9hbGxvY190cmFjaygmYW1wO2luaXRfbW0sIHBnZCwgYWRkciwgbWFzayk7CiAJaWYgKCFwNGQpCiAJCXJldHVybiAtRU5PTUVNOwogCWRvIHsKIAkJbmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQlpZiAodm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2spKQotCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQllcnIgPSB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaywgc2hpZnQpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwogCX0gd2hpbGUgKHA0ZCYjNDM7JiM0MzssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCXBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMpCiYjNDM7LyoKJiM0MzsgKiBJdCBjYW4gdGFrZSBhbiBhcnJheSBvZiBwYWdlcyB3aGljaCBhcmUgbm90IGFsbCBjb250aWd1b3VzLCBidXQgaXQKJiM0MzsgKiBtYXkgaGF2ZSBjb250aWd1b3VzIGNodW5rcywgYXMgaGludGVkIGJ5IEBzaGlmdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiYjNDM7CQlwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgc2hpZnQpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHI7CiAJcGdkX3QgKnBnZDsKQEAgLTYzNiw3ICYjNDM7Njg2LDcgQEAgc3RhdGljIGludCB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocGdkX2JhZCgqcGdkKSkKIAkJCW1hc2sgfD0gUEdUQkxfUEdEX01PRElGSUVEOwotCQllcnIgPSB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2QsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCAmYW1wO25yLCAmYW1wO21hc2spOwomIzQzOwkJZXJyID0gdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgJmFtcDtuciwgJmFtcDttYXNrLCBzaGlmdCk7CiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAl9IHdoaWxlIChwZ2QmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwpAQCAtNjU5LDI3ICYjNDM7NzA5LDEyIEBAIHN0YXRpYyBpbnQgdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiBpbnQgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IHBhZ2Vfc2hpZnQpCiB7Ci0JdW5zaWduZWQgaW50IGksIG5yID0gKGVuZCAtIGFkZHIpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7Ci0KIAlXQVJOX09OKHBhZ2Vfc2hpZnQgJmx0OyBQQUdFX1NISUZUKTsKIAotCWlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQykgfHwKLQkJCXBhZ2Vfc2hpZnQgPT0gUEFHRV9TSElGVCkKLQkJcmV0dXJuIHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaChhZGRyLCBlbmQsIHByb3QsIHBhZ2VzKTsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBucjsgaSAmIzQzOz0gMVUgJmx0OyZsdDsgKHBhZ2Vfc2hpZnQgLSBQQUdFX1NISUZUKSkgewotCQlpbnQgZXJyOwotCi0JCWVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICYjNDM7ICgxVUwgJmx0OyZsdDsgcGFnZV9zaGlmdCksCi0JCQkJCXBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIHByb3QsCi0JCQkJCXBhZ2Vfc2hpZnQpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQlhZGRyICYjNDM7PSAxVUwgJmx0OyZsdDsgcGFnZV9zaGlmdDsKLQl9CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQykpCiYjNDM7CQlwYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsoYWRkciwgZW5kLCBwcm90LCBwYWdlcywgcGFnZV9zaGlmdCk7CiB9CiAKIGludCB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKQEAgLTMyNzksNiAmIzQzOzMzMTQsMTQgQEAgc3RydWN0IHZtX3N0cnVjdCAqZ2V0X3ZtX2FyZWFfY2FsbGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJCQkgIE5VTUFfTk9fTk9ERSwgR0ZQX0tFUk5FTCwgY2FsbGVyKTsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIodW5zaWduZWQgbG9uZyBzaXplLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3Qgdm9pZCAqY2FsbGVyKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBhbGlnbiwgUEFHRV9TSElGVCwgZmxhZ3MsCiYjNDM7CQkJCSAgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsCiYjNDM7CQkJCSAgTlVNQV9OT19OT0RFLCBHRlBfS0VSTkVMLCBjYWxsZXIpOwomIzQzO30KJiM0MzsKIC8qKgogICogZmluZF92bV9hcmVhIC0gZmluZCBhIGNvbnRpbnVvdXMga2VybmVsIHZpcnR1YWwgYXJlYQogICogQGFkZHI6CSAgYmFzZSBhZGRyZXNzCkBAIC0zNTE5LDYgJiM0MzszNTYyLDExNiBAQCB2b2lkIHZ1bm1hcChjb25zdCB2b2lkICphZGRyKQogfQogRVhQT1JUX1NZTUJPTCh2dW5tYXApOwogCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdm1fc2hpZnQocGdwcm90X3QgcHJvdCwgdW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3sKJiM0MzsJaWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpICZhbXA7JmFtcDsgc2l6ZSAmZ3Q7PSBQTURfU0laRSkKJiM0MzsJCXJldHVybiBQTURfU0hJRlQ7CiYjNDM7CiYjNDM7CXJldHVybiBhcmNoX3ZtYXBfcHRlX3N1cHBvcnRlZF9zaGlmdChzaXplKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZ2V0X3ZtYXBfYmF0Y2hfb3JkZXIoc3RydWN0IHBhZ2UgKipwYWdlcywKJiM0MzsJCXBncHJvdF90IHByb3QsIHVuc2lnbmVkIGludCBtYXhfc3RlcHMsIHVuc2lnbmVkIGludCBpZHgpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHBmbjsKJiM0MzsJdW5zaWduZWQgaW50IG5yX2NvbnRpZzsKJiM0MzsJaW50IG9yZGVyOwomIzQzOwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW5yX2NvbnRpZyA9IG51bV9wYWdlc19jb250aWd1b3VzKCZhbXA7cGFnZXNbaWR4XSwgbWF4X3N0ZXBzKTsKJiM0MzsJaWYgKG5yX2NvbnRpZyAmbHQ7IDIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJb3JkZXIgPSBpbG9nMihucl9jb250aWcpOwomIzQzOwlwZm4gPSBwYWdlX3RvX3BmbihwYWdlc1tpZHhdKTsKJiM0MzsKJiM0MzsJLyogTGltaXQgb3JkZXIgYnkgcGZuIGFsaWdubWVudCAqLwomIzQzOwlpZiAocGZuICZndDsgMCkKJiM0MzsJCW9yZGVyID0gbWluX3QoaW50LCBvcmRlciwgX19mZnMocGZuKSk7CiYjNDM7CiYjNDM7CWlmICh2bV9zaGlmdChwcm90LCBQQUdFX1NJWkUgJmx0OyZsdDsgb3JkZXIpID09IFBBR0VfU0hJRlQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIG9yZGVyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAomIzQzOwkJcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBjb3VudCA9IChlbmQgLSBhZGRyKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwl1bnNpZ25lZCBpbnQgcHJldl9zaGlmdCA9IDAsIGlkeCA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWFwX2FkZHIgPSBhZGRyLCBiYXRjaF9lbmQgPSBhZGRyOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBrbXNhbl92bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2goYWRkciwgZW5kLCBwcm90LCBwYWdlcywKJiM0MzsJCQkJCSAgICAgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBjb3VudDsgKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgc2hpZnQgPSBQQUdFX1NISUZUICYjNDM7CiYjNDM7CQkJZ2V0X3ZtYXBfYmF0Y2hfb3JkZXIocGFnZXMsIHByb3QsIGNvdW50IC0gaSwgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIWkpCiYjNDM7CQkJcHJldl9zaGlmdCA9IHNoaWZ0OwomIzQzOwomIzQzOwkJaWYgKHNoaWZ0ICE9IHByZXZfc2hpZnQpIHsKJiM0MzsJCQllcnIgPSB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhtYXBfYWRkciwgYmF0Y2hfZW5kLAomIzQzOwkJCQkJcHJvdCwgcGFnZXMgJiM0MzsgaWR4LCBwcmV2X3NoaWZ0KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsJCQlwcmV2X3NoaWZ0ID0gc2hpZnQ7CiYjNDM7CQkJbWFwX2FkZHIgPSBiYXRjaF9lbmQ7CiYjNDM7CQkJaWR4ID0gaTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBPbmNlIHNtYWxsIHBhZ2VzIGFyZSBlbmNvdW50ZXJlZCwgdGhlIHJlbWFpbmluZyBwYWdlcwomIzQzOwkJICogYXJlIGxpa2VseSBzbWFsbCBhcyB3ZWxsLgomIzQzOwkJICovCiYjNDM7CQlpZiAoc2hpZnQgPT0gUEFHRV9TSElGVCkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWJhdGNoX2VuZCAmIzQzOz0gMVVMICZsdDsmbHQ7IHNoaWZ0OwomIzQzOwkJaSAmIzQzOz0gMVUgJmx0OyZsdDsgKHNoaWZ0IC0gUEFHRV9TSElGVCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUmVtYWluaW5nICovCiYjNDM7CWlmIChtYXBfYWRkciAmbHQ7IGVuZCkKJiM0MzsJCWVyciA9IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrKG1hcF9hZGRyLCBlbmQsCiYjNDM7CQkJCXByb3QsIHBhZ2VzICYjNDM7IGlkeCwgcHJldl9zaGlmdCk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlmbHVzaF9jYWNoZV92bWFwKGFkZHIsIGVuZCk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICp2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLAomIzQzOwkJdW5zaWduZWQgbG9uZyBmbGFncywgcGdwcm90X3QgcHJvdCwgY29uc3Qgdm9pZCAqY2FsbGVyKQomIzQzO3sKJiM0MzsJc3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYTsKJiM0MzsJdW5zaWduZWQgaW50IHNoaWZ0OwomIzQzOwomIzQzOwlpZiAoYXJjaF92bWFwX3BtZF9zdXBwb3J0ZWQocHJvdCkgJmFtcDsmYW1wOyBzaXplICZndDs9IFBNRF9TSVpFKSB7CiYjNDM7CQl2bV9hcmVhID0gX19nZXRfdm1fYXJlYV9ub2RlX2FsaWduZWRfY2FsbGVyKHNpemUsIFBNRF9TSVpFLAomIzQzOwkJCQlmbGFncywgY2FsbGVyKTsKJiM0MzsJCWlmICh2bV9hcmVhKQomIzQzOwkJCXJldHVybiB2bV9hcmVhOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNoaWZ0ID0gYXJjaF92bWFwX3B0ZV9zdXBwb3J0ZWRfc2hpZnQoc2l6ZSk7CiYjNDM7CWlmIChzaGlmdCAmZ3Q7IFBBR0VfU0hJRlQpIHsKJiM0MzsJCXZtX2FyZWEgPSBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgMVVMICZsdDsmbHQ7IHNoaWZ0LAomIzQzOwkJCQlmbGFncywgY2FsbGVyKTsKJiM0MzsJCWlmICh2bV9hcmVhKQomIzQzOwkJCXJldHVybiB2bV9hcmVhOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgUEFHRV9TSVpFLCBmbGFncywgY2FsbGVyKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHZtYXAgLSBtYXAgYW4gYXJyYXkgb2YgcGFnZXMgaW50byB2aXJ0dWFsbHkgY29udGlndW91cyBzcGFjZQogICogQHBhZ2VzOiBhcnJheSBvZiBwYWdlIHBvaW50ZXJzCkBAIC0zNTU3LDEzICYjNDM7MzcxMCwxNCBAQCB2b2lkICp2bWFwKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCwKIAkJcmV0dXJuIE5VTEw7CiAKIAlzaXplID0gKHVuc2lnbmVkIGxvbmcpY291bnQgJmx0OyZsdDsgUEFHRV9TSElGVDsKLQlhcmVhID0gZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwomIzQzOwlhcmVhID0gdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhKHNpemUsIGZsYWdzLCBwcm90LAomIzQzOwkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCWlmICghYXJlYSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0mZ3Q7YWRkcjsKLQlpZiAodm1hcF9wYWdlc19yYW5nZShhZGRyLCBhZGRyICYjNDM7IHNpemUsIHBncHJvdF9ueChwcm90KSwKLQkJCQlwYWdlcywgUEFHRV9TSElGVCkgJmx0OyAwKSB7CiYjNDM7CWlmICh2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWQoYWRkciwgYWRkciAmIzQzOyBzaXplLCBwZ3Byb3RfbngocHJvdCksCiYjNDM7CQkJCXBhZ2VzKSAmbHQ7IDApIHsKIAkJdnVubWFwKGFyZWEtJmd0O2FkZHIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC00MDMwLDExICYjNDM7NDE4NCw3IEBAIHZvaWQgKl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCSAqIHN1cHBvcnRpbmcgdGhlbS4KIAkJICovCiAKLQkJaWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpICZhbXA7JmFtcDsgc2l6ZSAmZ3Q7PSBQTURfU0laRSkKLQkJCXNoaWZ0ID0gUE1EX1NISUZUOwotCQllbHNlCi0JCQlzaGlmdCA9IGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpOwotCiYjNDM7CQlzaGlmdCA9IHZtX3NoaWZ0KHByb3QsIHNpemUpOwogCQlhbGlnbiA9IG1heChvcmlnaW5hbF9hbGlnbiwgMVVMICZsdDsmbHQ7IHNoaWZ0KTsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ5MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQ2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgQ29udGlndW91cyBQVEUgTWFwcGluZ3MgaW4gdm1hbGxvYyBvbiBhcm02NCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdHJ5aW5nIHRvIGludHJvZHVjZSBjb250aWd1b3VzIFBURSBtYXBwaW5ncyBmb3Igdm1hbGxvYyBvbiBhcm02NCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoZSBjaGFuZ2VzIGFyZSBzcHJlYWQgYWNyb3NzIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaGAsIGBhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNgLCBhbmQgYG1tL3ZtYWxsb2MuY2AsIHNvIGl0JiMzOTtzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGFyZWFzLgoKRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGV4dGVuZGluZyBgdm1hcGAgdG8gaGFuZGxlIGJhdGNoZWQgbWFwcGluZ3MgZm9yIGNvbnRpZ3VvdXMgcGFnZXMuIEl0JiMzOTtzIG1vZGlmeWluZyBgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZWAgdG8gaGFuZGxlIHNpemVzIHVwIHRvIHRoZSBQTUQgYm91bmRhcnksIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlZW4gdXBkYXRlZCB0byB0YWtlIGluIG11bHRpcGxlIGBDT05UX1BURV9TSVpFYCBibG9ja3MuIFRoZXJlIGFyZSBhbHNvIHVwZGF0ZXMgdG8gYG51bV9jb250aWdfcHRlc2AgYW5kIGBhcmNoX21ha2VfaHVnZV9wdGVgIHRvIHN1cHBvcnQgc2l6ZXMgd2l0aGluIGEgZ2l2ZW4gcmFuZ2UgdGhhdCBhcmUgYWxpZ25lZCB0byBgQ09OVF9QVEVfU0laRWAuCgpJbiBgbW0vdm1hbGxvYy5jYCwgdGhlIHBhdGNoIHNlZW1zIHRvIGFkZCBhIGZ1bmN0aW9uIGNhbGxlZCBgdm1hcF9zZXRfcHRlc2AgdGhhdCBsZXZlcmFnZXMgdGhlIHVwZGF0ZWQgYGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemVgIGFuZCBgYXJjaF9tYWtlX2h1Z2VfcHRlYCB0byBzZXQgbXVsdGlwbGUgUFRFcyBhdCBvbmNlLCB3aGljaCBpcyB3aGVyZSB0aGUgYmF0Y2hpbmcgY29tZXMgaW50byBwbGF5LiBJdCBhcHBlYXJzIHRoYXQgaXQmIzM5O3MgdXBkYXRpbmcgdGhlIGRpZmZlcmVudCByYW5nZSBtYXBwaW5nIGZ1bmN0aW9ucywgc3VjaCBhcyBgdm1hcF9wYWdlc19wdGVfcmFuZ2VgLCBgdm1hcF9wYWdlc19wbWRfcmFuZ2VgLCBhbmQgc28gb24sIHRvIGFjY2VwdCBhIHNoaWZ0IHBhcmFtZXRlciBhbmQgdXNlIHRoaXMgbmV3IGB2bWFwX3NldF9wdGVzYCBmdW5jdGlvbi4gVGhlcmUgYXJlIGFsc28gbmV3IGZ1bmN0aW9ucywgYHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZGAgYW5kIGB2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWFgLCB0aGF0IHNlZW0gdG8gYmUga2V5IGNvbXBvbmVudHMgb2YgdGhpcyBuZXcgYmF0Y2hpbmcgZnVuY3Rpb25hbGl0eSwgYmVpbmcgdXNlZCBpbiBgdm1hcGAuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIHZtYWxsb2MgcG9ydGlvbiwgYXMgd2VsbCBhcyB0aGUgYXJtNjQgYXJjaGl0ZWN0dXJlIGltcGxlbWVudGF0aW9uLiBDb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBtZW1vcnkgYWxsb2NhdGlvbiwgSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgYSBwcmltZSBjYW5kaWRhdGUgZm9yIHRob3JvdWdoIGZ1enppbmcuCgpCZWZvcmUgSSBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlLi4uIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AsIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAsIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIG1lbnRpb25lZCBpbiBgbW0vdm1hbGxvYy5jYC4gSSYjMzk7bGwgZ3JlcCBgbW0vS2NvbmZpZ2AgYW5kIGBhcmNoL2FybTY0L0tjb25maWdgIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY2FuIGJ1aWxkIGEga2VybmVsIHRoYXQgd2lsbCBhY3R1YWxseSBydW4gdGhpcyBuZXcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz0xMDkyPWNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXG4tLVxuYXJjaC9LY29uZmlnLTEwOTktI1xuYXJjaC9LY29uZmlnOjExMDA6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcbmFyY2gvS2NvbmZpZy0xMTAxLVx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfSFVHRV9WTUFQXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE1My1cdHNlbGVjdCBIQVZFX0FSQ0hfQ09NUElMRVJfSFxuYXJjaC9hcm02NC9LY29uZmlnOjE1NDpcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG5hcmNoL2FybTY0L0tjb25maWctMTU1LVx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTIxOC1cdHNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoyMTk6XHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1x0XHRpZiBIQVZFX0FSQ0hfSFVHRV9WTUFQXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0yMjAtXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BUFx0XHRpZiBQUENfUkFESVhfTU1VIHx8IFBQQ184eHhcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTEzMS1cdHNlbGVjdCBIQVZFX0FSQ0hfQklUUkVWRVJTRSBpZiBSSVNDVl9JU0FfWkJLQiBcdTAwMjZcdTAwMjYgQklUUkVWRVJTRVxuYXJjaC9yaXNjdi9LY29uZmlnOjEzMjpcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DIGlmIEhBVkVfQVJDSF9IVUdFX1ZNQVBcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMzMtXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BUCBpZiBNTVUgXHUwMDI2XHUwMDI2IDY0QklUXG4tLVxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xOTItXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BUFx0XHRpZiBYODZfNjQgfHwgWDg2X1BBRVxuYXJjaC94ODYvS2NvbmZpZzoxOTM6XHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1x0XHRpZiBYODZfNjRcbmFyY2gveDg2L0tjb25maWctMTk0LVx0c2VsZWN0IEhBVkVfQVJDSF9KVU1QX0xBQkVMXG4tLVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg9MTk9c3RydWN0IGlvdl9pdGVyO1x0XHQvKiBpbiB1aW8uaCAqL1xuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTMxLSNkZWZpbmUgVk1fTUFQX1BVVF9QQUdFU1x0MHgwMDAwMDIwMFx0LyogcHV0IHBhZ2VzIGFuZCBmcmVlIGFycmF5IGluIHZmcmVlICovXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDozMjojZGVmaW5lIFZNX0FMTE9XX0hVR0VfVk1BUFx0MHgwMDAwMDQwMCAgICAgIC8qIEFsbG93IGZvciBodWdlIHBhZ2VzIG9uIGFyY2hzIHdpdGggSEFWRV9BUkNIX0hVR0VfVk1BTExPQyAqL1xuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMzMtXG4tLVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg9NTI9c3RydWN0IHZtX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtNjEtXHRzdHJ1Y3QgcGFnZVx0XHQqKnBhZ2VzO1xuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6NjI6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC02My1cdHVuc2lnbmVkIGludFx0XHRwYWdlX29yZGVyO1xuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTI1OD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdm1fYXJlYV9odWdlcGFnZXMoY29uc3Qgdm9pZCAqYWRkcilcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0yNjYtXHQgKi9cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjI2NzojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTI2OC1cdHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEgPSBmaW5kX3ZtX2FyZWEoYWRkcik7XG4tLVxubW0vdm1hbGxvYy5jPTYzPXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7XG4tLVxubW0vdm1hbGxvYy5jLTY1LVxubW0vdm1hbGxvYy5jOjY2OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xubW0vdm1hbGxvYy5jLTY3LXN0YXRpYyBib29sIF9fcm9fYWZ0ZXJfaW5pdCB2bWFwX2FsbG93X2h1Z2UgPSB0cnVlO1xuLS1cbm1tL3ZtYWxsb2MuYz03ND1lYXJseV9wYXJhbShcJiMzNDtub2h1Z2V2bWFsbG9jXCYjMzQ7LCBzZXRfbm9odWdldm1hbGxvYyk7XG5tbS92bWFsbG9jLmM6NzU6I2Vsc2UgLyogQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MgKi9cbm1tL3ZtYWxsb2MuYy03Ni1zdGF0aWMgY29uc3QgYm9vbCB2bWFwX2FsbG93X2h1Z2UgPSBmYWxzZTtcbm1tL3ZtYWxsb2MuYzo3NzojZW5kaWZcdC8qIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DICovXG5tbS92bWFsbG9jLmMtNzgtXG4tLVxubW0vdm1hbGxvYy5jPTcwOT1pbnQgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtNzEzLVxubW0vdm1hbGxvYy5jOjcxNDpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQykpXG5tbS92bWFsbG9jLmMtNzE1LVx0XHRwYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDtcbi0tXG5tbS92bWFsbG9jLmM9MzE0MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2bV9hcmVhX3BhZ2Vfb3JkZXIoc3RydWN0IHZtX3N0cnVjdCAqdm0pXG5tbS92bWFsbG9jLmMtMzE0MS17XG5tbS92bWFsbG9jLmM6MzE0MjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0Ncbm1tL3ZtYWxsb2MuYy0zMTQzLVx0cmV0dXJuIHZtLVx1MDAzZXBhZ2Vfb3JkZXI7XG4tLVxubW0vdm1hbGxvYy5jPTMxNTQ9c3RhdGljIGlubGluZSB2b2lkIHNldF92bV9hcmVhX3BhZ2Vfb3JkZXIoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3ZtYWxsb2MuYy0zMTU1LXtcbm1tL3ZtYWxsb2MuYzozMTU2OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xubW0vdm1hbGxvYy5jLTMxNTctXHR2bS1cdTAwM2VwYWdlX29yZGVyID0gb3JkZXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk2MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB2bWFwIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHZpcnR1YWwgbWFwcGluZ3MgYW5kIHBvdGVudGlhbGx5IGh1Z2UgcGFnZXMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSBvbiBgQVJNNjRgIGFuZCBgWDg2XzY0YCBhcmNoaXRlY3R1cmVzLiBTaW5jZSB0aG9zZSBhcmNoaXRlY3R1cmVzIGF1dG9tYXRpY2FsbHkgZW5hYmxlIGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCwgYEhBVkVfQVJDSF9IVUdFX1ZNQVBgLCBhbmQgYEhVR0VUTEJfUEFHRWAsIEkgY2FuIGFzc3VtZSB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgYWxyZWFkeSBiYWtlZCBpbi4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEJhc2VkIG9uIHRoZSBuYW1lcywgYHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZGAsIGB2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWFgLCBgdm1hcF9zZXRfcHRlc2AsIGB2bWFwX3BhZ2VzX3B0ZV9yYW5nZWAsIGB2bWFwX3BhZ2VzX3BtZF9yYW5nZWAsIGB2bWFwX3BhZ2VzX3B1ZF9yYW5nZWAsIGB2bWFwX3BhZ2VzX3A0ZF9yYW5nZWAsIGB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa2AsIGBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAsIGB2bWFwYCwgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAsIGBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplYCwgYG51bV9jb250aWdfcHRlc2AsIGFuZCBgYXJjaF9tYWtlX2h1Z2VfcHRlYCBhcmUgZ29pbmcgdG8gYmUga2V5IHBsYXllcnMuCgpNeSBnb2FsIGlzIHRvIG5hcnJvdyBkb3duIHRoZSBhY3R1YWwgc3ltYm9scyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIGB2bWFwYCBhbmQgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgYXJlIHByb2JhYmx5IGdvaW5nIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3IgdGhlIGFsbG9jYXRvci4gYHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZGAgYW5kIGB2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWFgIGxpa2VseSBoYW5kbGUgdGhlIGJ1bGsgb2YgdGhlIG1hcHBpbmcgcHJvY2Vzcy4gYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCBwcm9iYWJseSBvcHRpbWl6ZXMgdGhlIG1hcHBpbmcuIEkgd2lsbCBpZ25vcmUgYHZtYXBfc2V0X3B0ZXNgIGJlY2F1c2UgaXQgaXMgYW4gYF9fYWx3YXlzX2lubGluZWAgYW5kIGBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplYCwgYW5kIGBudW1fY29udGlnX3B0ZXNgIGFzIHRoZXkgYXJlIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbnMuIEkgd2lsbCBuZWVkIHRvIGxvb2sgaW50byBgYXJjaF9tYWtlX2h1Z2VfcHRlYCBhcyBpdCBpcyBhIGZ1bmN0aW9uIGRlZmluZWQgaW4gYGFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJjaF9tYWtlX2h1Z2VfcHRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMucnN0PTIwMz1IdWdlVExCIFBhZ2UgVGFibGUgSGVscGVyc1xuLS1cbkRvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMucnN0LTIwOC0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzO1xuRG9jdW1lbnRhdGlvbi9tbS9hcmNoX3BndGFibGVfaGVscGVycy5yc3Q6MjA5OnwgYXJjaF9tYWtlX2h1Z2VfcHRlICAgICAgICB8IENyZWF0ZXMgYSBIdWdlVExCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG5Eb2N1bWVudGF0aW9uL21tL2FyY2hfcGd0YWJsZV9oZWxwZXJzLnJzdC0yMTAtJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0Mztcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD0yMj1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9jbGVhcl9odWdldGxiX2ZsYWdzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMzQtXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDozNTpwdGVfdCBhcmNoX21ha2VfaHVnZV9wdGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdCwgdm1fZmxhZ3NfdCBmbGFncyk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDozNjojZGVmaW5lIGFyY2hfbWFrZV9odWdlX3B0ZSBhcmNoX21ha2VfaHVnZV9wdGVcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTM3LSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9TRVRfSFVHRV9QVEVfQVRcbi0tXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM9Nzg9c3RhdGljIGludCBmaW5kX251bV9jb250aWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtOTctLypcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzo5ODogKiBudW1fY29udGlnX3B0ZXMoKSwgc2V0X2h1Z2VfcHRlX2F0KCkgYW5kIGFyY2hfbWFrZV9odWdlX3B0ZSgpIGNhbiBiZVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTk5LSAqIHVzZWQgYnkgbm9uLWh1Z2V0bGJmcyh2bWFsbG9jKSBtbSBjb2RlIHRvIHNldCBtdWx0aXBsZSBodWdlIG1hcHBpbmdzXG4tLVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jPTMzMT11bnNpZ25lZCBsb25nIGh1Z2V0bGJfbWFza19sYXN0X3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtMzU0LVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjM1NTpwdGVfdCBhcmNoX21ha2VfaHVnZV9wdGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdCwgdm1fZmxhZ3NfdCBmbGFncylcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zNTYte1xuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaD0zOD1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9odWdldGxiLTh4eC5oLTQ3LSNpZmRlZiBDT05GSUdfUFBDXzRLX1BBR0VTXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzMyL2h1Z2V0bGItOHh4Lmg6NDg6c3RhdGljIGlubGluZSBwdGVfdCBhcmNoX21ha2VfaHVnZV9wdGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdCwgdm1fZmxhZ3NfdCBmbGFncylcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaC00OS17XG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9odWdldGxiLTh4eC5oLTU2LX1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaDo1NzojZGVmaW5lIGFyY2hfbWFrZV9odWdlX3B0ZSBhcmNoX21ha2VfaHVnZV9wdGVcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaC01OC0jZW5kaWZcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoL2h1Z2V0bGItZTUwMC5oPTc9c3RhdGljIGlubGluZSBpbnQgY2hlY2tfYW5kX2dldF9odWdlX3BzaXplKGludCBzaGlmdClcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoL2h1Z2V0bGItZTUwMC5oLTE0LVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC9odWdldGxiLWU1MDAuaDoxNTpzdGF0aWMgaW5saW5lIHB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC9odWdldGxiLWU1MDAuaC0xNi17XG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC9odWdldGxiLWU1MDAuaC0yMS19XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoL2h1Z2V0bGItZTUwMC5oOjIyOiNkZWZpbmUgYXJjaF9tYWtlX2h1Z2VfcHRlIGFyY2hfbWFrZV9odWdlX3B0ZVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC9odWdldGxiLWU1MDAuaC0yMy1cbi0tXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoLzh4eC5jPTUyPXN0YXRpYyBpbnQgX19yZWYgX19lYXJseV9tYXBfa2VybmVsX2h1Z2VwYWdlKHVuc2lnbmVkIGxvbmcgdmEsIHBoeXNfYWRkcl90IHBhLFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvOHh4LmMtOTAtXHRzZXRfaHVnZV9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgdmEsIHB0ZXAsXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoLzh4eC5jOjkxOlx0XHRcdGFyY2hfbWFrZV9odWdlX3B0ZShwZm5fcHRlKHBhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBwcm90KSwgc2hpZnQsIDApLFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC84eHguYy05Mi1cdFx0XHQxVUwgXHUwMDNjXHUwMDNjIHNoaWZ0KTtcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD00OD1wdGVfdCBodWdlX3B0ZXBfZ2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTtcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQ5LVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmg6NTA6cHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsIHZtX2ZsYWdzX3QgZmxhZ3MpO1xuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmg6NTE6I2RlZmluZSBhcmNoX21ha2VfaHVnZV9wdGUgYXJjaF9tYWtlX2h1Z2VfcHRlXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC01Mi1cbi0tXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM9MTcyPXN0YXRpYyBwdGVfdCBnZXRfY2xlYXJfY29udGlnX2ZsdXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy0xODYtXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM6MTg3OnB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTE4OC17XG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0Lmg9Mzc0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfd3JpdGUocHRlX3QgcHRlKVxuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oLTM5Mi0jaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oOjM5MzpwdGVfdCBhcmNoX21ha2VfaHVnZV9wdGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdCwgdm1fZmxhZ3NfdCBmbGFncyk7XG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaDozOTQ6I2RlZmluZSBhcmNoX21ha2VfaHVnZV9wdGUgYXJjaF9tYWtlX2h1Z2VfcHRlXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaC0zOTUtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcHRlX2RlZmF1bHRfaHVnZV9tYXNrKHZvaWQpXG4tLVxuYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jPTgxPXN0YXRpYyBwdGVfdCBodWdlcGFnZV9zaGlmdF90b190dGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdClcbi0tXG5hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmMtODgtXG5hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmM6ODk6cHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsIHZtX2ZsYWdzX3QgZmxhZ3MpXG5hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmMtOTAte1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTgzNz1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9jbGVhcl9odWdldGxiX2ZsYWdzKHN0cnVjdCBmb2xpbyAqZm9saW8pIHsgfVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg0MC1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjg0MTojaWZuZGVmIGFyY2hfbWFrZV9odWdlX3B0ZVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODQyOnN0YXRpYyBpbmxpbmUgcHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04NDMtXHRcdFx0XHQgICAgICAgdm1fZmxhZ3NfdCBmbGFncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9ODg1PXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg5MC1cdHB0ZSA9IHBmbl9wdGUoYXJncy1cdTAwM2VmaXhlZF9wbWRfcGZuLCBhcmdzLVx1MDAzZXBhZ2VfcHJvdCk7XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODkxOlx0cHRlID0gYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZSwgUE1EX1NISUZULCBWTV9BQ0NFU1NfRkxBR1MpO1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg5Mi1cbi0tXG5tbS9odWdldGxiLmM9NDgwND1zdGF0aWMgcHRlX3QgbWFrZV9odWdlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtNDgxNS1cdGVudHJ5ID0gcHRlX21reW91bmcoZW50cnkpO1xubW0vaHVnZXRsYi5jOjQ4MTY6XHRlbnRyeSA9IGFyY2hfbWFrZV9odWdlX3B0ZShlbnRyeSwgc2hpZnQsIHZtYS1cdTAwM2V2bV9mbGFncyk7XG5tbS9odWdldGxiLmMtNDgxNy1cbi0tXG5tbS9odWdldGxiLmM9NjM4ND1sb25nIGh1Z2V0bGJfY2hhbmdlX3Byb3RlY3Rpb24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTY0OTktXHRcdFx0cHRlID0gaHVnZV9wdGVfbW9kaWZ5KG9sZF9wdGUsIG5ld3Byb3QpO1xubW0vaHVnZXRsYi5jOjY1MDA6XHRcdFx0cHRlID0gYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZSwgc2hpZnQsIHZtYS1cdTAwM2V2bV9mbGFncyk7XG5tbS9odWdldGxiLmMtNjUwMS1cdFx0XHRpZiAodWZmZF93cClcbi0tXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTQxOS1cbm1tL21pZ3JhdGUuYzo0MjA6XHRcdFx0cHRlID0gYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZSwgc2hpZnQsIHZtYS1cdTAwM2V2bV9mbGFncyk7XG5tbS9taWdyYXRlLmMtNDIxLVx0XHRcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKVxuLS1cbm1tL3ZtYWxsb2MuYz0xMDE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZtYXBfc2V0X3B0ZXMocHRlX3QgKnB0ZSxcbi0tXG5tbS92bWFsbG9jLmMtMTExLVxubW0vdm1hbGxvYy5jOjExMjpcdFx0ZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIGlsb2cyKHNpemUpLCAwKTtcbm1tL3ZtYWxsb2MuYy0xMTMtXHRcdHNldF9odWdlX3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5LCBzaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ4MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBWaXJ0dWFsIE1lbW9yeSBNYXBwaW5nIEZ1bmN0aW9ucyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmcgY29kZSwgYW5kIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2Vzcy4gSW5pdGlhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gYSBjb3JlIHNldCBvZiBmdW5jdGlvbnM6IGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgLCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCwgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCwgYF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoYCwgYHZtYXBgLCBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCwgYHZtYXBfcGFnZXNfcHRlX3JhbmdlYCwgYHZtYXBfcGFnZXNfcG1kX3JhbmdlYCwgYHZtYXBfcGFnZXNfcHVkX3JhbmdlYCwgYW5kIGB2bWFwX3BhZ2VzX3A0ZF9yYW5nZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLgoKTXkgZmlyc3Qgc3RlcCBpcyBjaGVja2luZyB0aGUgdmlzaWJpbGl0eSBvZiBgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYCBhbmQgYHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYWAuIEFoYSwgdGhleSYjMzk7cmUgc3RhdGljIHdpdGhpbiBgbW0vdm1hbGxvYy5jYC4gSW50ZXJlc3RpbmcuIGB2bWFwYCBpcyBleHBvcnRlZCwgYXMgaXMgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAuIFNpbWlsYXJseSwgYF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoYCBpcyBhbHNvIGV4cG9ydGVkLCB3aGlsZSBgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGtgIGlzIHN0YXRpYy4KCkdpdmVuIHRoYXQgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMsIEkgd2lsbCBpbmNsdWRlIGFsbCBmdW5jdGlvbnMgbGlzdGVkIGluIG15IHRob3VnaHRzOgpgdm1hcGAKYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAKYF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoYApgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYApgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYApgdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGtgCmB2bWFwX3BhZ2VzX3B0ZV9yYW5nZWAKYHZtYXBfcGFnZXNfcG1kX3JhbmdlYApgdm1hcF9wYWdlc19wdWRfcmFuZ2VgCmB2bWFwX3BhZ2VzX3A0ZF9yYW5nZWAKCkkgcmVhbGl6ZWQgSSBuZWVkIHRvIGJlICpzdXJlKiB0byBpbmNsdWRlIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgIGFuZCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCBiZWNhdXNlIHRoZXkgYXJlIHN0YXRpYyBidXQgY3J1Y2lhbCwgYW5kIGFsc28gYGFyY2hfbWFrZV9odWdlX3B0ZWAgZnJvbSBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYC4KCk5vdywgbW92aW5nIG9uIHRvIGNvbmZpZ3VyYXRpb24gY29uc2lkZXJhdGlvbnMuIEkgc2VlIGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCwgYEhBVkVfQVJDSF9IVUdFX1ZNQVBgLCBhbmQgYEhVR0VUTEJfUEFHRWAgYXJlIHJlbGV2YW50LiBXYWl0LCBgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AgYW5kIGBIQVZFX0FSQ0hfSFVHRV9WTUFQYCBhcmUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCwgc28gSSBkb24mIzM5O3QgbmVlZCB0byB3b3JyeSBhYm91dCB1c2VyIHNlbGVjdGlvbi4gSG93ZXZlciwgYEhVR0VUTEJfUEFHRWAgaXMgYSB1c2VyLXNlbGVjdGFibGUgY29uZmlnLCBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IGl04oCZcyBiZWluZyB1c2VkLgoKTG9va2luZyBpbnRvIHRoZSBjb2RlLCBJIHNlZSBhIGAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRWAgaW5zaWRlIGB2bWFwX3NldF9wdGVzYCwgd2hpY2ggbWVhbnMgdGhlIG5ldyBjb2RlIHBhdGggd2l0aGluIHRoaXMgZnVuY3Rpb24gaXMgb25seSB0ZXN0ZWQgd2hlbiB0aGUgYEhVR0VUTEJfUEFHRWAgY29uZmlnIGlzIGVuYWJsZWQuIFRoZXJlZm9yZSwgdGVzdGluZyB0aGlzIGNvZGUgcmVxdWlyZXMgYEhVR0VUTEJfUEFHRWAgdG8gYmUgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgYXJjaC9hcm02NC9LY29uZmlnYCB0byBzZWUgaG93IHRoaXMgaXMgZGVmaW5lZCBpbiB0aGF0IGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7NjRrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVx0Ym9vbCBcJiMzNDsyNTZrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0OzFNQlwmIzM0O1xuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cdGJvb2wgXCYjMzQ7NE1CXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXHRib29sIFwmIzM0OzY0TUJcJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG5mcy9LY29uZmlnLTI2NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI3Mi1cbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcbmZzL0tjb25maWctMjc0LVx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNzYtXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmZzL0tjb25maWctMjc4LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4tLVxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTcwOC1cbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vS2NvbmZpZy03MTAtXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MDQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipBbmFseXppbmcgdGhlIEh1Z2VUTEIgUGFnZSBEZWZpbml0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYEhVR0VUTEJfUEFHRWAgaXMgZXNzZW50aWFsbHkgZGVmaW5lZCBhcyB0aGUgc2FtZSB0aGluZyBhcyBgZGVmX2Jvb2wgSFVHRVRMQkZTYC4gVGhpcyBtZWFucyB0aGUgYEhVR0VUTEJGU2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgdGhlIGtleSB0byBlbmFibGluZyB0aGUgYEhVR0VUTEJfUEFHRWAgZnVuY3Rpb25hbGl0eS4gU28sIGlmIEkgd2FudCB0byB3b3JrIHdpdGggaHVnZSBwYWdlcywgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBIVUdFVExCRlNgIGlzIGVuYWJsZWQgd2l0aGluIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBJdCB0ZWxscyBtZSB3aGVyZSB0byBsb29rIHRvIGVuc3VyZSBpdCYjMzk7cyBhdmFpbGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY3MQoJCQkJCQkJb3V0cHV0OiAyMTMKCQkJCQkJCXRob3VnaHRzOiA0OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb250aWd1b3VzIFBURSBNYXBwaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGVuYWJsaW5nIGBIVUdFVExCRlNgIGlzIHRoZSByZWxldmFudCBjb25maWcgZm9yIHRoaXMgcGF0Y2guIEkgYWxzbyBzZWUgdGhhdCBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIGFuZCBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVBgIGFyZSBzZWxlY3RlZCBieSBhcm02NCwgYnV0IGBIVUdFVExCRlNgIGlzIHRoZSBrZXkgb25lLgoKSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IHRoZSB2YXJpb3VzIHN5bWJvbHMgdG91Y2hlZCBieSB0aGlzIHBhdGNoOiBgdm1hcGAsIGFuZCB0aGUgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBmb3IgYHZtYXBgIC0gYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAsIGBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAsIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgLCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCwgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCwgYHZtYXBfcGFnZXNfcHRlX3JhbmdlYCwgYHZtYXBfcGFnZXNfcG1kX3JhbmdlYCwgYHZtYXBfcGFnZXNfcHVkX3JhbmdlYCwgYHZtYXBfcGFnZXNfcDRkX3JhbmdlYCBhbmQgZmluYWxseSwgY3JpdGljYWxseSwgYGFyY2hfbWFrZV9odWdlX3B0ZWAuIEkmIzM5O3ZlIGNoZWNrZWQgYW5kIGBhcmNoX21ha2VfaHVnZV9wdGVgICppcyogZGVmaW5lZCBpbiBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYC4gT3RoZXIgYXJjaGl0ZWN0dXJlcywgbGlrZSBwb3dlcnBjLCByaXNjdiwgYW5kIHNwYXJjIGFsc28gZGVmaW5lIGl0IGJ1dCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRvdWNoZXMgdGhlIGFybTY0IGltcGxlbWVudGF0aW9uLgoKVGhlIHBhdGNoIG1vZGlmaWVzIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaGAsIGBhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNgLCBhbmQgYG1tL3ZtYWxsb2MuY2AuIFRoZSBjaGFuZ2VzIGluIGBtbS92bWFsbG9jLmNgIGFyZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgYnV0IHJlbHkgb24gYGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemVgIGFuZCBgYXJjaF9tYWtlX2h1Z2VfcHRlYCBkZWZpbmVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUuIFNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIGNvbnRpZ3VvdXMgUFRFIG1hcHBpbmdzIGZvciB2bWFsbG9jIG9uIGFybTY0LgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCB0aGUgYXJtNjQgYXJjaGl0ZWN0dXJlLiBJdCBpbnRyb2R1Y2VzIGNvbnRpZ3VvdXMgUFRFIG1hcHBpbmdzIGZvciB2bWFsbG9jIG9uIGFybTY0IGFuZCB1cGRhdGVzIGB2bWFwYCB0byBzdXBwb3J0IGJhdGNoZWQgbWFwcGluZyBmb3IgY29udGlndW91cyBwYWdlcy4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbi4gR2l2ZW4gdGhlc2UgY2hhbmdlcywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBzdGFiaWxpdHkuIEkgc2hvdWxkIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtYXJrIHRoaXMgYXMgYW4gaW1wb3J0YW50IGZ1enppbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcCYjMzQ7LAogICAgJiMzNDtfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7X192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2gmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkJiMzNDssCiAgICAmIzM0O3ZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3BtZF9yYW5nZSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3B1ZF9yYW5nZSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3A0ZF9yYW5nZSYjMzQ7LAogICAgJiMzNDthcmNoX21ha2VfaHVnZV9wdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBjb250aWd1b3VzIFBURSBtYXBwaW5ncyBmb3Igdm1hbGxvYyBvbiBhcm02NCwgYW5kIHVwZGF0ZXMgdm1hcCB0byBzdXBwb3J0IGJhdGNoZWQgbWFwcGluZyBmb3IgY29udGlndW91cyBwYWdlcy4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcCYjMzQ7LAogICAgJiMzNDtfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7X192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2gmIzM0OywKICAgICYjMzQ7dm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkJiMzNDssCiAgICAmIzM0O3ZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3BtZF9yYW5nZSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3B1ZF9yYW5nZSYjMzQ7LAogICAgJiMzNDt2bWFwX3BhZ2VzX3A0ZF9yYW5nZSYjMzQ7LAogICAgJiMzNDthcmNoX21ha2VfaHVnZV9wdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBjb250aWd1b3VzIFBURSBtYXBwaW5ncyBmb3Igdm1hbGxvYyBvbiBhcm02NCwgYW5kIHVwZGF0ZXMgdm1hcCB0byBzdXBwb3J0IGJhdGNoZWQgbWFwcGluZyBmb3IgY29udGlndW91cyBwYWdlcy4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjQ4OjU2LjE0MDA2Njk2OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTkyOTI4MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBcIixcbiAgICBcIl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hcIixcbiAgICBcInZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZFwiLFxuICAgIFwidm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa1wiLFxuICAgIFwidm1hcF9wYWdlc19wdGVfcmFuZ2VcIixcbiAgICBcInZtYXBfcGFnZXNfcG1kX3JhbmdlXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3B1ZF9yYW5nZVwiLFxuICAgIFwidm1hcF9wYWdlc19wNGRfcmFuZ2VcIixcbiAgICBcImFyY2hfbWFrZV9odWdlX3B0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgY29udGlndW91cyBQVEUgbWFwcGluZ3MgZm9yIHZtYWxsb2Mgb24gYXJtNjQsIGFuZCB1cGRhdGVzIHZtYXAgdG8gc3VwcG9ydCBiYXRjaGVkIG1hcHBpbmcgZm9yIGNvbnRpZ3VvdXMgcGFnZXMuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjQ4OjU2LjE0MDA3MjI4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMzA2OTcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhkMTcwYWRkNGRkMWMyNzg0MmY5M2VkM2JiYWM0NGEwODY2NzczOGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMDM6NDg6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaFxcbmluZGV4IDRlYzFhY2QzYzFiMzQ4Li5kNjY1ZjlkNjg3NDIyZCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oXFxuQEAgLTIzLDEwICsyMywxNCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCB1NjQgcGZuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbitcXG4gXFx0LypcXG4gXFx0ICogSWYgdGhlIGJsb2NrIGlzIGF0IGxlYXN0IENPTlRfUFRFX1NJWkUgaW4gc2l6ZSwgYW5kIGlzIG5hdHVyYWxseVxcbiBcXHQgKiBhbGlnbmVkIGluIGJvdGggdmlydHVhbCBhbmQgcGh5c2ljYWwgc3BhY2UsIHRoZW4gd2UgY2FuIHB0ZS1tYXAgdGhlXFxuIFxcdCAqIGJsb2NrIHVzaW5nIHRoZSBQVEVfQ09OVCBiaXQgZm9yIG1vcmUgZWZmaWNpZW50IHVzZSBvZiB0aGUgVExCLlxcbitcXHQgKiBUaGUgcmV0dXJuZWQgbWFwcGluZyBzaXplIG1heSBjb3ZlciBtdWx0aXBsZSBDT05UX1BURV9TSVpFIGJsb2NrcyxcXG4rXFx0ICogY2FwcGVkIGJlbG93IFBNRF9TSVpFLlxcbiBcXHQgKi9cXG4gXFx0aWYgKG1heF9wYWdlX3NoaWZ0IFxcdTAwM2MgQ09OVF9QVEVfU0hJRlQpXFxuIFxcdFxcdHJldHVybiBQQUdFX1NJWkU7XFxuQEAgLTQwLDcgKzQ0LDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUodW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRpZiAoIUlTX0FMSUdORUQoUEZOX1BIWVMocGZuKSwgQ09OVF9QVEVfU0laRSkpXFxuIFxcdFxcdHJldHVybiBQQUdFX1NJWkU7XFxuIFxcbi1cXHRyZXR1cm4gQ09OVF9QVEVfU0laRTtcXG4rXFx0c2l6ZSA9IG1pbjMoZW5kIC0gYWRkciwgMVVMIFxcdTAwM2NcXHUwMDNjIG1heF9wYWdlX3NoaWZ0LCBQTURfU0laRSBcXHUwMDNlXFx1MDAzZSAxKTtcXG4rXFx0c2l6ZSA9IHJvdW5kZG93bl9wb3dfb2ZfdHdvKHNpemUpO1xcbitcXHRyZXR1cm4gc2l6ZTtcXG4gfVxcbiBcXG4gI2RlZmluZSBhcmNoX3ZtYXBfcHRlX3JhbmdlX3VubWFwX3NpemUgYXJjaF92bWFwX3B0ZV9yYW5nZV91bm1hcF9zaXplXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xcbmluZGV4IDMwNzcyYTkwOWFlYTNlLi43NzlkMzI5ODZkMGQ2NyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcXG4rKysgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcXG5AQCAtOTQsNiArOTQsMTEgQEAgc3RhdGljIGludCBmaW5kX251bV9jb250aWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0cmV0dXJuIENPTlRfUFRFUztcXG4gfVxcbiBcXG4rLypcXG4rICogbnVtX2NvbnRpZ19wdGVzKCksIHNldF9odWdlX3B0ZV9hdCgpIGFuZCBhcmNoX21ha2VfaHVnZV9wdGUoKSBjYW4gYmVcXG4rICogdXNlZCBieSBub24taHVnZXRsYmZzKHZtYWxsb2MpIG1tIGNvZGUgdG8gc2V0IG11bHRpcGxlIGh1Z2UgbWFwcGluZ3NcXG4rICogYXQgdGhlIFBURSBsZXZlbC5cXG4rICovXFxuIHN0YXRpYyBpbmxpbmUgaW50IG51bV9jb250aWdfcHRlcyh1bnNpZ25lZCBsb25nIHNpemUsIHNpemVfdCAqcGdzaXplKVxcbiB7XFxuIFxcdGludCBjb250aWdfcHRlcyA9IDE7XFxuQEAgLTExMCw2ICsxMTUsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgbnVtX2NvbnRpZ19wdGVzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgc2l6ZV90ICpwZ3NpemUpXFxuIFxcdFxcdGNvbnRpZ19wdGVzID0gQ09OVF9QVEVTO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4rXFx0XFx0aWYgKHNpemUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzYyBQTURfU0laRSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHRJU19BTElHTkVEKHNpemUsIENPTlRfUFRFX1NJWkUpKSB7XFxuK1xcdFxcdFxcdCpwZ3NpemUgPSBQQUdFX1NJWkU7XFxuK1xcdFxcdFxcdGNvbnRpZ19wdGVzID0gc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbiBcXHRcXHRXQVJOX09OKCFfX2h1Z2V0bGJfdmFsaWRfc2l6ZShzaXplKSk7XFxuIFxcdH1cXG4gXFxuQEAgLTM1OSw2ICszNzAsMTAgQEAgcHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsIHZtX2ZsYWdzX3QgZmxhZ3MpXFxuIFxcdGNhc2UgQ09OVF9QVEVfU0laRTpcXG4gXFx0XFx0cmV0dXJuIHB0ZV9ta2NvbnQoZW50cnkpO1xcbiBcXHRkZWZhdWx0OlxcbitcXHRcXHRpZiAocGFnZXNpemUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHBhZ2VzaXplIFxcdTAwM2MgUE1EX1NJWkUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0SVNfQUxJR05FRChwYWdlc2l6ZSwgQ09OVF9QVEVfU0laRSkpXFxuK1xcdFxcdFxcdHJldHVybiBwdGVfbWtjb250KGVudHJ5KTtcXG4rXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcdHByX3dhcm4oXFxcIiVzOiB1bnJlY29nbml6ZWQgaHVnZSBwYWdlIHNpemUgMHglbHhcXFxcblxcXCIsXFxuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xcbmluZGV4IDFhZmNhMzU2OGI5YjY1Li45NWZmY2EyMTk0Njc5MyAxMDA2NDRcXG4tLS0gYS9tbS92bWFsbG9jLmNcXG4rKysgYi9tbS92bWFsbG9jLmNcXG5AQCAtOTEsNiArOTEsMzMgQEAgc3RydWN0IHZmcmVlX2RlZmVycmVkIHtcXG4gc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB2ZnJlZV9kZWZlcnJlZCwgdmZyZWVfZGVmZXJyZWQpO1xcbiBcXG4gLyoqKiBQYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgKioqL1xcbitcXG4rLypcXG4rICogVHJ5IGNvbnRpZ3VvdXMgbWFwcGluZ3MgYXQgdGhlIFBURSBsZXZlbCBmb3IgYXJjaGVzIHdoaWNoIHN1cHBvcnQgdGhlbSwgYW5kIGlmXFxuKyAqIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyLiBGYWxsIGJhY2sgdG8gUEFHRV9TSVpFIG1hcHBpbmdzIG90aGVyd2lzZS5cXG4rICpcXG4rICogUmV0dXJuOiBtYXBwaW5nIHNpemUuXFxuKyAqL1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hcF9zZXRfcHRlcyhwdGVfdCAqcHRlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCB1NjQgcGZuLFxcbitcXHRcXHRwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4rXFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbitcXG4rXFx0c2l6ZSA9IGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemUoYWRkciwgZW5kLCBwZm4sIG1heF9wYWdlX3NoaWZ0KTtcXG4rXFx0aWYgKHNpemUgIT0gUEFHRV9TSVpFKSB7XFxuK1xcdFxcdHB0ZV90IGVudHJ5ID0gcGZuX3B0ZShwZm4sIHByb3QpO1xcbitcXG4rXFx0XFx0ZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIGlsb2cyKHNpemUpLCAwKTtcXG4rXFx0XFx0c2V0X2h1Z2VfcHRlX2F0KFxcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5LCBzaXplKTtcXG4rXFx0XFx0cmV0dXJuIHNpemU7XFxuK1xcdH1cXG4rI2VuZGlmXFxuK1xcdHNldF9wdGVfYXQoXFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTtcXG4rXFx0cmV0dXJuIFBBR0VfU0laRTtcXG4rfVxcbitcXG4gc3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdCwgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuQEAgLTk4LDcgKzEyNSw4IEBAIHN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0cHRlX3QgKnB0ZTtcXG4gXFx0dTY0IHBmbjtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuLVxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbitcXHR1bnNpZ25lZCBpbnQgc3RlcHM7XFxuIFxcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCFQQUdFX0FMSUdORUQoZW5kIC0gYWRkcikpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtMTE5LDIwICsxNDcsOSBAQCBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdFxcdEJVRygpO1xcbiBcXHRcXHR9XFxuIFxcbi0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbi1cXHRcXHRzaXplID0gYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZShhZGRyLCBlbmQsIHBmbiwgbWF4X3BhZ2Vfc2hpZnQpO1xcbi1cXHRcXHRpZiAoc2l6ZSAhPSBQQUdFX1NJWkUpIHtcXG4tXFx0XFx0XFx0cHRlX3QgZW50cnkgPSBwZm5fcHRlKHBmbiwgcHJvdCk7XFxuLVxcbi1cXHRcXHRcXHRlbnRyeSA9IGFyY2hfbWFrZV9odWdlX3B0ZShlbnRyeSwgaWxvZzIoc2l6ZSksIDApO1xcbi1cXHRcXHRcXHRzZXRfaHVnZV9wdGVfYXQoXFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgZW50cnksIHNpemUpO1xcbi1cXHRcXHRcXHRwZm4gKz0gUEZOX0RPV04oc2l6ZSk7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLSNlbmRpZlxcbi1cXHRcXHRzZXRfcHRlX2F0KFxcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7XFxuLVxcdFxcdHBmbisrO1xcbi1cXHR9IHdoaWxlIChwdGUgKz0gUEZOX0RPV04oc2l6ZSksIGFkZHIgKz0gc2l6ZSwgYWRkciAhPSBlbmQpO1xcbitcXHRcXHRzaXplID0gdm1hcF9zZXRfcHRlcyhwdGUsIGFkZHIsIGVuZCwgcGZuLCBwcm90LCBtYXhfcGFnZV9zaGlmdCk7XFxuK1xcdFxcdHN0ZXBzID0gUEZOX0RPV04oc2l6ZSk7XFxuK1xcdH0gd2hpbGUgKHB0ZSArPSBzdGVwcywgcGZuICs9IHN0ZXBzLCBhZGRyICs9IHNpemUsIGFkZHIgIT0gZW5kKTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXHQqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7XFxuQEAgLTUyNCw4ICs1NDEsMTAgQEAgdm9pZCB2dW5tYXBfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZClcXG4gXFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcXG4tXFx0XFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXFxuK1xcdFxcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBwZm4sIHNpemU7XFxuK1xcdHVuc2lnbmVkIGludCBzdGVwcztcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcdHB0ZV90ICpwdGU7XFxuIFxcbkBAIC01NTYsOSArNTc1LDEwIEBAIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0c2V0X3B0ZV9hdChcXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBta19wdGUocGFnZSwgcHJvdCkpO1xcbi1cXHRcXHQoKm5yKSsrO1xcbi1cXHR9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTtcXG4rXFx0XFx0cGZuID0gcGFnZV90b19wZm4ocGFnZSk7XFxuK1xcdFxcdHNpemUgPSB2bWFwX3NldF9wdGVzKHB0ZSwgYWRkciwgZW5kLCBwZm4sIHByb3QsIHNoaWZ0KTtcXG4rXFx0XFx0c3RlcHMgPSBQRk5fRE9XTihzaXplKTtcXG4rXFx0fSB3aGlsZSAocHRlICs9IHN0ZXBzLCAqbnIgKz0gc3RlcHMsIGFkZHIgKz0gc2l6ZSwgYWRkciAhPSBlbmQpO1xcbiBcXG4gXFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XFxuIFxcdCptYXNrIHw9IFBHVEJMX1BURV9NT0RJRklFRDtcXG5AQCAtNTY4LDYwICs1ODgsOTAgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcbiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsXFxuLVxcdFxcdHBndGJsX21vZF9tYXNrICptYXNrKVxcbitcXHRcXHRwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KVxcbiB7XFxuIFxcdHBtZF90ICpwbWQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV4dDtcXG4rXFx0aW50IGVycjtcXG4gXFxuIFxcdHBtZCA9IHBtZF9hbGxvY190cmFjayhcXHUwMDI2aW5pdF9tbSwgcHVkLCBhZGRyLCBtYXNrKTtcXG4gXFx0aWYgKCFwbWQpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRkbyB7XFxuIFxcdFxcdG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcXG4tXFx0XFx0aWYgKHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRcXHRpZiAoc2hpZnQgXFx1MDAzZT0gUE1EX1NISUZUKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXNbKm5yXTtcXG4rXFx0XFx0XFx0cGh5c19hZGRyX3QgcGh5c19hZGRyO1xcbitcXG4rXFx0XFx0XFx0aWYgKFdBUk5fT04oIXBhZ2UpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0XFx0aWYgKFdBUk5fT04oIXBmbl92YWxpZChwYWdlX3RvX3BmbihwYWdlKSkpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdFxcdHBoeXNfYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKTtcXG4rXFxuK1xcdFxcdFxcdGlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c2hpZnQpKSB7XFxuK1xcdFxcdFxcdFxcdCptYXNrIHw9IFBHVEJMX1BNRF9NT0RJRklFRDtcXG4rXFx0XFx0XFx0XFx0Km5yICs9IDEgXFx1MDAzY1xcdTAwM2MgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlcnIgPSB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaywgc2hpZnQpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcXG4tXFx0XFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXFxuK1xcdFxcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXFxuIHtcXG4gXFx0cHVkX3QgKnB1ZDtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0cHVkID0gcHVkX2FsbG9jX3RyYWNrKFxcdTAwMjZpbml0X21tLCBwNGQsIGFkZHIsIG1hc2spO1xcbiBcXHRpZiAoIXB1ZClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGRvIHtcXG4gXFx0XFx0bmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xcbi1cXHRcXHRpZiAodm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2spKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0ZXJyID0gdm1hcF9wYWdlc19wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fSB3aGlsZSAocHVkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcDRkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIsXFxuLVxcdFxcdHBndGJsX21vZF9tYXNrICptYXNrKVxcbitcXHRcXHRwZ3RibF9tb2RfbWFzayAqbWFzaywgdW5zaWduZWQgaW50IHNoaWZ0KVxcbiB7XFxuIFxcdHA0ZF90ICpwNGQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV4dDtcXG4rXFx0aW50IGVycjtcXG4gXFxuIFxcdHA0ZCA9IHA0ZF9hbGxvY190cmFjayhcXHUwMDI2aW5pdF9tbSwgcGdkLCBhZGRyLCBtYXNrKTtcXG4gXFx0aWYgKCFwNGQpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRkbyB7XFxuIFxcdFxcdG5leHQgPSBwNGRfYWRkcl9lbmQoYWRkciwgZW5kKTtcXG4tXFx0XFx0aWYgKHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdGVyciA9IHZtYXBfcGFnZXNfcHVkX3JhbmdlKHA0ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrLCBzaGlmdCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH0gd2hpbGUgKHA0ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tXFx0XFx0cGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcylcXG4rLypcXG4rICogSXQgY2FuIHRha2UgYW4gYXJyYXkgb2YgcGFnZXMgd2hpY2ggYXJlIG5vdCBhbGwgY29udGlndW91cywgYnV0IGl0XFxuKyAqIG1heSBoYXZlIGNvbnRpZ3VvdXMgY2h1bmtzLCBhcyBoaW50ZWQgYnkgQHNoaWZ0LlxcbisgKi9cXG4rc3RhdGljIGludCB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbitcXHRcXHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgc2hpZnQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHI7XFxuIFxcdHBnZF90ICpwZ2Q7XFxuQEAgLTYzNiw3ICs2ODYsNyBAQCBzdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XFxuIFxcdFxcdGlmIChwZ2RfYmFkKCpwZ2QpKVxcbiBcXHRcXHRcXHRtYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDtcXG4tXFx0XFx0ZXJyID0gdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgXFx1MDAyNm5yLCBcXHUwMDI2bWFzayk7XFxuK1xcdFxcdGVyciA9IHZtYXBfcGFnZXNfcDRkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIFxcdTAwMjZuciwgXFx1MDAyNm1hc2ssIHNoaWZ0KTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdH0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xcbkBAIC02NTksMjcgKzcwOSwxMiBAQCBzdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBpbnQgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0cGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IHBhZ2Vfc2hpZnQpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IGksIG5yID0gKGVuZCAtIGFkZHIpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuLVxcbiBcXHRXQVJOX09OKHBhZ2Vfc2hpZnQgXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4gXFxuLVxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQykgfHxcXG4tXFx0XFx0XFx0cGFnZV9zaGlmdCA9PSBQQUdFX1NISUZUKVxcbi1cXHRcXHRyZXR1cm4gdm1hcF9zbWFsbF9wYWdlc19yYW5nZV9ub2ZsdXNoKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMpO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yOyBpICs9IDFVIFxcdTAwM2NcXHUwMDNjIChwYWdlX3NoaWZ0IC0gUEFHRV9TSElGVCkpIHtcXG4tXFx0XFx0aW50IGVycjtcXG4tXFxuLVxcdFxcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICsgKDFVTCBcXHUwMDNjXFx1MDAzYyBwYWdlX3NoaWZ0KSxcXG4tXFx0XFx0XFx0XFx0XFx0cGFnZV90b19waHlzKHBhZ2VzW2ldKSwgcHJvdCxcXG4tXFx0XFx0XFx0XFx0XFx0cGFnZV9zaGlmdCk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuLVxcbi1cXHRcXHRhZGRyICs9IDFVTCBcXHUwMDNjXFx1MDAzYyBwYWdlX3NoaWZ0O1xcbi1cXHR9XFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQykpXFxuK1xcdFxcdHBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhhZGRyLCBlbmQsIHByb3QsIHBhZ2VzLCBwYWdlX3NoaWZ0KTtcXG4gfVxcbiBcXG4gaW50IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbkBAIC0zMjc5LDYgKzMzMTQsMTQgQEAgc3RydWN0IHZtX3N0cnVjdCAqZ2V0X3ZtX2FyZWFfY2FsbGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyxcXG4gXFx0XFx0XFx0XFx0ICBOVU1BX05PX05PREUsIEdGUF9LRVJORUwsIGNhbGxlcik7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIodW5zaWduZWQgbG9uZyBzaXplLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCB2b2lkICpjYWxsZXIpXFxuK3tcXG4rXFx0cmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBhbGlnbiwgUEFHRV9TSElGVCwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXFxuK1xcdFxcdFxcdFxcdCAgTlVNQV9OT19OT0RFLCBHRlBfS0VSTkVMLCBjYWxsZXIpO1xcbit9XFxuK1xcbiAvKipcXG4gICogZmluZF92bV9hcmVhIC0gZmluZCBhIGNvbnRpbnVvdXMga2VybmVsIHZpcnR1YWwgYXJlYVxcbiAgKiBAYWRkcjpcXHQgIGJhc2UgYWRkcmVzc1xcbkBAIC0zNTE5LDYgKzM1NjIsMTE2IEBAIHZvaWQgdnVubWFwKGNvbnN0IHZvaWQgKmFkZHIpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh2dW5tYXApO1xcbiBcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdm1fc2hpZnQocGdwcm90X3QgcHJvdCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbit7XFxuK1xcdGlmIChhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSBcXHUwMDI2XFx1MDAyNiBzaXplIFxcdTAwM2U9IFBNRF9TSVpFKVxcbitcXHRcXHRyZXR1cm4gUE1EX1NISUZUO1xcbitcXG4rXFx0cmV0dXJuIGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBnZXRfdm1hcF9iYXRjaF9vcmRlcihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbitcXHRcXHRwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3N0ZXBzLCB1bnNpZ25lZCBpbnQgaWR4KVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbitcXHR1bnNpZ25lZCBpbnQgbnJfY29udGlnO1xcbitcXHRpbnQgb3JkZXI7XFxuK1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG5yX2NvbnRpZyA9IG51bV9wYWdlc19jb250aWd1b3VzKFxcdTAwMjZwYWdlc1tpZHhdLCBtYXhfc3RlcHMpO1xcbitcXHRpZiAobnJfY29udGlnIFxcdTAwM2MgMilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRvcmRlciA9IGlsb2cyKG5yX2NvbnRpZyk7XFxuK1xcdHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2VzW2lkeF0pO1xcbitcXG4rXFx0LyogTGltaXQgb3JkZXIgYnkgcGZuIGFsaWdubWVudCAqL1xcbitcXHRpZiAocGZuIFxcdTAwM2UgMClcXG4rXFx0XFx0b3JkZXIgPSBtaW5fdChpbnQsIG9yZGVyLCBfX2ZmcyhwZm4pKTtcXG4rXFxuK1xcdGlmICh2bV9zaGlmdChwcm90LCBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpID09IFBBR0VfU0hJRlQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIG9yZGVyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbitcXHRcXHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBjb3VudCA9IChlbmQgLSBhZGRyKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHR1bnNpZ25lZCBpbnQgcHJldl9zaGlmdCA9IDAsIGlkeCA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWFwX2FkZHIgPSBhZGRyLCBiYXRjaF9lbmQgPSBhZGRyO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0ga21zYW5fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKGFkZHIsIGVuZCwgcHJvdCwgcGFnZXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBjb3VudDsgKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBzaGlmdCA9IFBBR0VfU0hJRlQgK1xcbitcXHRcXHRcXHRnZXRfdm1hcF9iYXRjaF9vcmRlcihwYWdlcywgcHJvdCwgY291bnQgLSBpLCBpKTtcXG4rXFxuK1xcdFxcdGlmICghaSlcXG4rXFx0XFx0XFx0cHJldl9zaGlmdCA9IHNoaWZ0O1xcbitcXG4rXFx0XFx0aWYgKHNoaWZ0ICE9IHByZXZfc2hpZnQpIHtcXG4rXFx0XFx0XFx0ZXJyID0gdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsobWFwX2FkZHIsIGJhdGNoX2VuZCxcXG4rXFx0XFx0XFx0XFx0XFx0cHJvdCwgcGFnZXMgKyBpZHgsIHByZXZfc2hpZnQpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0cHJldl9zaGlmdCA9IHNoaWZ0O1xcbitcXHRcXHRcXHRtYXBfYWRkciA9IGJhdGNoX2VuZDtcXG4rXFx0XFx0XFx0aWR4ID0gaTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogT25jZSBzbWFsbCBwYWdlcyBhcmUgZW5jb3VudGVyZWQsIHRoZSByZW1haW5pbmcgcGFnZXNcXG4rXFx0XFx0ICogYXJlIGxpa2VseSBzbWFsbCBhcyB3ZWxsLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHNoaWZ0ID09IFBBR0VfU0hJRlQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0YmF0Y2hfZW5kICs9IDFVTCBcXHUwMDNjXFx1MDAzYyBzaGlmdDtcXG4rXFx0XFx0aSArPSAxVSBcXHUwMDNjXFx1MDAzYyAoc2hpZnQgLSBQQUdFX1NISUZUKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUmVtYWluaW5nICovXFxuK1xcdGlmIChtYXBfYWRkciBcXHUwMDNjIGVuZClcXG4rXFx0XFx0ZXJyID0gdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGsobWFwX2FkZHIsIGVuZCxcXG4rXFx0XFx0XFx0XFx0cHJvdCwgcGFnZXMgKyBpZHgsIHByZXZfc2hpZnQpO1xcbitcXG4rb3V0OlxcbitcXHRmbHVzaF9jYWNoZV92bWFwKGFkZHIsIGVuZCk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICp2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzLCBwZ3Byb3RfdCBwcm90LCBjb25zdCB2b2lkICpjYWxsZXIpXFxuK3tcXG4rXFx0c3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYTtcXG4rXFx0dW5zaWduZWQgaW50IHNoaWZ0O1xcbitcXG4rXFx0aWYgKGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKHByb3QpIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzZT0gUE1EX1NJWkUpIHtcXG4rXFx0XFx0dm1fYXJlYSA9IF9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcihzaXplLCBQTURfU0laRSxcXG4rXFx0XFx0XFx0XFx0ZmxhZ3MsIGNhbGxlcik7XFxuK1xcdFxcdGlmICh2bV9hcmVhKVxcbitcXHRcXHRcXHRyZXR1cm4gdm1fYXJlYTtcXG4rXFx0fVxcbitcXG4rXFx0c2hpZnQgPSBhcmNoX3ZtYXBfcHRlX3N1cHBvcnRlZF9zaGlmdChzaXplKTtcXG4rXFx0aWYgKHNoaWZ0IFxcdTAwM2UgUEFHRV9TSElGVCkge1xcbitcXHRcXHR2bV9hcmVhID0gX19nZXRfdm1fYXJlYV9ub2RlX2FsaWduZWRfY2FsbGVyKHNpemUsIDFVTCBcXHUwMDNjXFx1MDAzYyBzaGlmdCxcXG4rXFx0XFx0XFx0XFx0ZmxhZ3MsIGNhbGxlcik7XFxuK1xcdFxcdGlmICh2bV9hcmVhKVxcbitcXHRcXHRcXHRyZXR1cm4gdm1fYXJlYTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZV9hbGlnbmVkX2NhbGxlcihzaXplLCBQQUdFX1NJWkUsIGZsYWdzLCBjYWxsZXIpO1xcbit9XFxuK1xcbiAvKipcXG4gICogdm1hcCAtIG1hcCBhbiBhcnJheSBvZiBwYWdlcyBpbnRvIHZpcnR1YWxseSBjb250aWd1b3VzIHNwYWNlXFxuICAqIEBwYWdlczogYXJyYXkgb2YgcGFnZSBwb2ludGVyc1xcbkBAIC0zNTU3LDEzICszNzEwLDE0IEBAIHZvaWQgKnZtYXAoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGNvdW50LFxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdHNpemUgPSAodW5zaWduZWQgbG9uZyljb3VudCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbi1cXHRhcmVhID0gZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xcbitcXHRhcmVhID0gdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhKHNpemUsIGZsYWdzLCBwcm90LFxcbitcXHRcXHRcXHRcXHRfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xcbiBcXHRpZiAoIWFyZWEpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXFx1MDAzZWFkZHI7XFxuLVxcdGlmICh2bWFwX3BhZ2VzX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplLCBwZ3Byb3RfbngocHJvdCksXFxuLVxcdFxcdFxcdFxcdHBhZ2VzLCBQQUdFX1NISUZUKSBcXHUwMDNjIDApIHtcXG4rXFx0aWYgKHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZChhZGRyLCBhZGRyICsgc2l6ZSwgcGdwcm90X254KHByb3QpLFxcbitcXHRcXHRcXHRcXHRwYWdlcykgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdHZ1bm1hcChhcmVhLVxcdTAwM2VhZGRyKTtcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG5AQCAtNDAzMCwxMSArNDE4NCw3IEBAIHZvaWQgKl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXFxuIFxcdFxcdCAqIHN1cHBvcnRpbmcgdGhlbS5cXG4gXFx0XFx0ICovXFxuIFxcbi1cXHRcXHRpZiAoYXJjaF92bWFwX3BtZF9zdXBwb3J0ZWQocHJvdCkgXFx1MDAyNlxcdTAwMjYgc2l6ZSBcXHUwMDNlPSBQTURfU0laRSlcXG4tXFx0XFx0XFx0c2hpZnQgPSBQTURfU0hJRlQ7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0c2hpZnQgPSBhcmNoX3ZtYXBfcHRlX3N1cHBvcnRlZF9zaGlmdChzaXplKTtcXG4tXFxuK1xcdFxcdHNoaWZ0ID0gdm1fc2hpZnQocHJvdCwgc2l6ZSk7XFxuIFxcdFxcdGFsaWduID0gbWF4KG9yaWdpbmFsX2FsaWduLCAxVUwgXFx1MDAzY1xcdTAwM2Mgc2hpZnQpO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzo0ODo1Ny4xNTM5NjU0NThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MTc4OTk4NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBcIixcbiAgICBcIl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hcIixcbiAgICBcInZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZFwiLFxuICAgIFwidm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa1wiLFxuICAgIFwidm1hcF9wYWdlc19wdGVfcmFuZ2VcIixcbiAgICBcInZtYXBfcGFnZXNfcG1kX3JhbmdlXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3B1ZF9yYW5nZVwiLFxuICAgIFwidm1hcF9wYWdlc19wNGRfcmFuZ2VcIixcbiAgICBcImFyY2hfbWFrZV9odWdlX3B0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgY29udGlndW91cyBQVEUgbWFwcGluZ3MgZm9yIHZtYWxsb2Mgb24gYXJtNjQsIGFuZCB1cGRhdGVzIHZtYXAgdG8gc3VwcG9ydCBiYXRjaGVkIG1hcHBpbmcgZm9yIGNvbnRpZ3VvdXMgcGFnZXMuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGQxNzBhZGQ0ZGQxYzI3ODQyZjkzZWQzYmJhYzQ0YTA4NjY3NzM4Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDAzOjQ4OjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZtYWxsb2MuaFxuaW5kZXggNGVjMWFjZDNjMWIzNDguLmQ2NjVmOWQ2ODc0MjJkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oXG5AQCAtMjMsMTAgKzIzLDE0IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplKHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgdTY0IHBmbixcbiBcdFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBzaXplO1xuK1xuIFx0LypcbiBcdCAqIElmIHRoZSBibG9jayBpcyBhdCBsZWFzdCBDT05UX1BURV9TSVpFIGluIHNpemUsIGFuZCBpcyBuYXR1cmFsbHlcbiBcdCAqIGFsaWduZWQgaW4gYm90aCB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBzcGFjZSwgdGhlbiB3ZSBjYW4gcHRlLW1hcCB0aGVcbiBcdCAqIGJsb2NrIHVzaW5nIHRoZSBQVEVfQ09OVCBiaXQgZm9yIG1vcmUgZWZmaWNpZW50IHVzZSBvZiB0aGUgVExCLlxuK1x0ICogVGhlIHJldHVybmVkIG1hcHBpbmcgc2l6ZSBtYXkgY292ZXIgbXVsdGlwbGUgQ09OVF9QVEVfU0laRSBibG9ja3MsXG4rXHQgKiBjYXBwZWQgYmVsb3cgUE1EX1NJWkUuXG4gXHQgKi9cbiBcdGlmIChtYXhfcGFnZV9zaGlmdCBcdTAwM2MgQ09OVF9QVEVfU0hJRlQpXG4gXHRcdHJldHVybiBQQUdFX1NJWkU7XG5AQCAtNDAsNyArNDQsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoIUlTX0FMSUdORUQoUEZOX1BIWVMocGZuKSwgQ09OVF9QVEVfU0laRSkpXG4gXHRcdHJldHVybiBQQUdFX1NJWkU7XG4gXG4tXHRyZXR1cm4gQ09OVF9QVEVfU0laRTtcbitcdHNpemUgPSBtaW4zKGVuZCAtIGFkZHIsIDFVTCBcdTAwM2NcdTAwM2MgbWF4X3BhZ2Vfc2hpZnQsIFBNRF9TSVpFIFx1MDAzZVx1MDAzZSAxKTtcbitcdHNpemUgPSByb3VuZGRvd25fcG93X29mX3R3byhzaXplKTtcbitcdHJldHVybiBzaXplO1xuIH1cbiBcbiAjZGVmaW5lIGFyY2hfdm1hcF9wdGVfcmFuZ2VfdW5tYXBfc2l6ZSBhcmNoX3ZtYXBfcHRlX3JhbmdlX3VubWFwX3NpemVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcbmluZGV4IDMwNzcyYTkwOWFlYTNlLi43NzlkMzI5ODZkMGQ2NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jXG5AQCAtOTQsNiArOTQsMTEgQEAgc3RhdGljIGludCBmaW5kX251bV9jb250aWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHJldHVybiBDT05UX1BURVM7XG4gfVxuIFxuKy8qXG4rICogbnVtX2NvbnRpZ19wdGVzKCksIHNldF9odWdlX3B0ZV9hdCgpIGFuZCBhcmNoX21ha2VfaHVnZV9wdGUoKSBjYW4gYmVcbisgKiB1c2VkIGJ5IG5vbi1odWdldGxiZnModm1hbGxvYykgbW0gY29kZSB0byBzZXQgbXVsdGlwbGUgaHVnZSBtYXBwaW5nc1xuKyAqIGF0IHRoZSBQVEUgbGV2ZWwuXG4rICovXG4gc3RhdGljIGlubGluZSBpbnQgbnVtX2NvbnRpZ19wdGVzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgc2l6ZV90ICpwZ3NpemUpXG4ge1xuIFx0aW50IGNvbnRpZ19wdGVzID0gMTtcbkBAIC0xMTAsNiArMTE1LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IG51bV9jb250aWdfcHRlcyh1bnNpZ25lZCBsb25nIHNpemUsIHNpemVfdCAqcGdzaXplKVxuIFx0XHRjb250aWdfcHRlcyA9IENPTlRfUFRFUztcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuK1x0XHRpZiAoc2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2MgUE1EX1NJWkUgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHRJU19BTElHTkVEKHNpemUsIENPTlRfUFRFX1NJWkUpKSB7XG4rXHRcdFx0KnBnc2l6ZSA9IFBBR0VfU0laRTtcbitcdFx0XHRjb250aWdfcHRlcyA9IHNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdFx0V0FSTl9PTighX19odWdldGxiX3ZhbGlkX3NpemUoc2l6ZSkpO1xuIFx0fVxuIFxuQEAgLTM1OSw2ICszNzAsMTAgQEAgcHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsIHZtX2ZsYWdzX3QgZmxhZ3MpXG4gXHRjYXNlIENPTlRfUFRFX1NJWkU6XG4gXHRcdHJldHVybiBwdGVfbWtjb250KGVudHJ5KTtcbiBcdGRlZmF1bHQ6XG4rXHRcdGlmIChwYWdlc2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgcGFnZXNpemUgXHUwMDNjIFBNRF9TSVpFIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0SVNfQUxJR05FRChwYWdlc2l6ZSwgQ09OVF9QVEVfU0laRSkpXG4rXHRcdFx0cmV0dXJuIHB0ZV9ta2NvbnQoZW50cnkpO1xuK1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdHByX3dhcm4oXCIlczogdW5yZWNvZ25pemVkIGh1Z2UgcGFnZSBzaXplIDB4JWx4XFxuXCIsXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uOTVmZmNhMjE5NDY3OTMgMTAwNjQ0XG4tLS0gYS9tbS92bWFsbG9jLmNcbisrKyBiL21tL3ZtYWxsb2MuY1xuQEAgLTkxLDYgKzkxLDMzIEBAIHN0cnVjdCB2ZnJlZV9kZWZlcnJlZCB7XG4gc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB2ZnJlZV9kZWZlcnJlZCwgdmZyZWVfZGVmZXJyZWQpO1xuIFxuIC8qKiogUGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICoqKi9cbitcbisvKlxuKyAqIFRyeSBjb250aWd1b3VzIG1hcHBpbmdzIGF0IHRoZSBQVEUgbGV2ZWwgZm9yIGFyY2hlcyB3aGljaCBzdXBwb3J0IHRoZW0sIGFuZCBpZlxuKyAqIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyLiBGYWxsIGJhY2sgdG8gUEFHRV9TSVpFIG1hcHBpbmdzIG90aGVyd2lzZS5cbisgKlxuKyAqIFJldHVybjogbWFwcGluZyBzaXplLlxuKyAqL1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFwX3NldF9wdGVzKHB0ZV90ICpwdGUsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHU2NCBwZm4sXG4rXHRcdHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdClcbit7XG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbitcbitcdHNpemUgPSBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplKGFkZHIsIGVuZCwgcGZuLCBtYXhfcGFnZV9zaGlmdCk7XG4rXHRpZiAoc2l6ZSAhPSBQQUdFX1NJWkUpIHtcbitcdFx0cHRlX3QgZW50cnkgPSBwZm5fcHRlKHBmbiwgcHJvdCk7XG4rXG4rXHRcdGVudHJ5ID0gYXJjaF9tYWtlX2h1Z2VfcHRlKGVudHJ5LCBpbG9nMihzaXplKSwgMCk7XG4rXHRcdHNldF9odWdlX3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5LCBzaXplKTtcbitcdFx0cmV0dXJuIHNpemU7XG4rXHR9XG4rI2VuZGlmXG4rXHRzZXRfcHRlX2F0KFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTtcbitcdHJldHVybiBQQUdFX1NJWkU7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXG4gXHRcdFx0dW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbkBAIC05OCw3ICsxMjUsOCBAQCBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRwdGVfdCAqcHRlO1xuIFx0dTY0IHBmbjtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0dW5zaWduZWQgbG9uZyBzaXplID0gUEFHRV9TSVpFO1xuK1x0dW5zaWduZWQgbG9uZyBzaXplO1xuK1x0dW5zaWduZWQgaW50IHN0ZXBzO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghUEFHRV9BTElHTkVEKGVuZCAtIGFkZHIpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTE5LDIwICsxNDcsOSBAQCBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0QlVHKCk7XG4gXHRcdH1cbiBcbi0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuLVx0XHRzaXplID0gYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZShhZGRyLCBlbmQsIHBmbiwgbWF4X3BhZ2Vfc2hpZnQpO1xuLVx0XHRpZiAoc2l6ZSAhPSBQQUdFX1NJWkUpIHtcbi1cdFx0XHRwdGVfdCBlbnRyeSA9IHBmbl9wdGUocGZuLCBwcm90KTtcbi1cbi1cdFx0XHRlbnRyeSA9IGFyY2hfbWFrZV9odWdlX3B0ZShlbnRyeSwgaWxvZzIoc2l6ZSksIDApO1xuLVx0XHRcdHNldF9odWdlX3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIGVudHJ5LCBzaXplKTtcbi1cdFx0XHRwZm4gKz0gUEZOX0RPV04oc2l6ZSk7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi0jZW5kaWZcbi1cdFx0c2V0X3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7XG4tXHRcdHBmbisrO1xuLVx0fSB3aGlsZSAocHRlICs9IFBGTl9ET1dOKHNpemUpLCBhZGRyICs9IHNpemUsIGFkZHIgIT0gZW5kKTtcbitcdFx0c2l6ZSA9IHZtYXBfc2V0X3B0ZXMocHRlLCBhZGRyLCBlbmQsIHBmbiwgcHJvdCwgbWF4X3BhZ2Vfc2hpZnQpO1xuK1x0XHRzdGVwcyA9IFBGTl9ET1dOKHNpemUpO1xuK1x0fSB3aGlsZSAocHRlICs9IHN0ZXBzLCBwZm4gKz0gc3RlcHMsIGFkZHIgKz0gc2l6ZSwgYWRkciAhPSBlbmQpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXHQqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7XG5AQCAtNTI0LDggKzU0MSwxMCBAQCB2b2lkIHZ1bm1hcF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcbi1cdFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXG4rXHRcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBwZm4sIHNpemU7XG4rXHR1bnNpZ25lZCBpbnQgc3RlcHM7XG4gXHRpbnQgZXJyID0gMDtcbiBcdHB0ZV90ICpwdGU7XG4gXG5AQCAtNTU2LDkgKzU3NSwxMCBAQCBzdGF0aWMgaW50IHZtYXBfcGFnZXNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0XHRzZXRfcHRlX2F0KFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgbWtfcHRlKHBhZ2UsIHByb3QpKTtcbi1cdFx0KCpucikrKztcbi1cdH0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpO1xuK1x0XHRwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbitcdFx0c2l6ZSA9IHZtYXBfc2V0X3B0ZXMocHRlLCBhZGRyLCBlbmQsIHBmbiwgcHJvdCwgc2hpZnQpO1xuK1x0XHRzdGVwcyA9IFBGTl9ET1dOKHNpemUpO1xuK1x0fSB3aGlsZSAocHRlICs9IHN0ZXBzLCAqbnIgKz0gc3RlcHMsIGFkZHIgKz0gc2l6ZSwgYWRkciAhPSBlbmQpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXHQqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7XG5AQCAtNTY4LDYwICs1ODgsOTAgQEAgc3RhdGljIGludCB2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXG4gc3RhdGljIGludCB2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLFxuLVx0XHRwZ3RibF9tb2RfbWFzayAqbWFzaylcbitcdFx0cGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdClcbiB7XG4gXHRwbWRfdCAqcG1kO1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuK1x0aW50IGVycjtcbiBcbiBcdHBtZCA9IHBtZF9hbGxvY190cmFjayhcdTAwMjZpbml0X21tLCBwdWQsIGFkZHIsIG1hc2spO1xuIFx0aWYgKCFwbWQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4tXHRcdGlmICh2bWFwX3BhZ2VzX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRcdGlmIChzaGlmdCBcdTAwM2U9IFBNRF9TSElGVCkge1xuK1x0XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXNbKm5yXTtcbitcdFx0XHRwaHlzX2FkZHJfdCBwaHlzX2FkZHI7XG4rXG4rXHRcdFx0aWYgKFdBUk5fT04oIXBhZ2UpKVxuK1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdFx0aWYgKFdBUk5fT04oIXBmbl92YWxpZChwYWdlX3RvX3BmbihwYWdlKSkpKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdFx0cGh5c19hZGRyID0gcGFnZV90b19waHlzKHBhZ2UpO1xuK1xuK1x0XHRcdGlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCxcbitcdFx0XHRcdFx0XHRzaGlmdCkpIHtcbitcdFx0XHRcdCptYXNrIHw9IFBHVEJMX1BNRF9NT0RJRklFRDtcbitcdFx0XHRcdCpuciArPSAxIFx1MDAzY1x1MDAzYyAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0ZXJyID0gdm1hcF9wYWdlc19wdGVfcmFuZ2UocG1kLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2ssIHNoaWZ0KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fSB3aGlsZSAocG1kKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yLFxuLVx0XHRwZ3RibF9tb2RfbWFzayAqbWFzaylcbitcdFx0cGd0YmxfbW9kX21hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBzaGlmdClcbiB7XG4gXHRwdWRfdCAqcHVkO1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuK1x0aW50IGVycjtcbiBcbiBcdHB1ZCA9IHB1ZF9hbGxvY190cmFjayhcdTAwMjZpbml0X21tLCBwNGQsIGFkZHIsIG1hc2spO1xuIFx0aWYgKCFwdWQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4tXHRcdGlmICh2bWFwX3BhZ2VzX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaykpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdGVyciA9IHZtYXBfcGFnZXNfcG1kX3JhbmdlKHB1ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yLCBtYXNrLCBzaGlmdCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbiBcdH0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wYWdlc19wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucixcbi1cdFx0cGd0YmxfbW9kX21hc2sgKm1hc2spXG4rXHRcdHBndGJsX21vZF9tYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4ge1xuIFx0cDRkX3QgKnA0ZDtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbitcdGludCBlcnI7XG4gXG4gXHRwNGQgPSBwNGRfYWxsb2NfdHJhY2soXHUwMDI2aW5pdF9tbSwgcGdkLCBhZGRyLCBtYXNrKTtcbiBcdGlmICghcDRkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGRvIHtcbiBcdFx0bmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuLVx0XHRpZiAodm1hcF9wYWdlc19wdWRfcmFuZ2UocDRkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcywgbnIsIG1hc2spKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRlcnIgPSB2bWFwX3BhZ2VzX3B1ZF9yYW5nZShwNGQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBuciwgbWFzaywgc2hpZnQpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4gXHR9IHdoaWxlIChwNGQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLVx0XHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuKy8qXG4rICogSXQgY2FuIHRha2UgYW4gYXJyYXkgb2YgcGFnZXMgd2hpY2ggYXJlIG5vdCBhbGwgY29udGlndW91cywgYnV0IGl0XG4rICogbWF5IGhhdmUgY29udGlndW91cyBjaHVua3MsIGFzIGhpbnRlZCBieSBAc2hpZnQuXG4rICovXG4rc3RhdGljIGludCB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuK1x0XHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgc2hpZnQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHI7XG4gXHRwZ2RfdCAqcGdkO1xuQEAgLTYzNiw3ICs2ODYsNyBAQCBzdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4gXHRcdGlmIChwZ2RfYmFkKCpwZ2QpKVxuIFx0XHRcdG1hc2sgfD0gUEdUQkxfUEdEX01PRElGSUVEO1xuLVx0XHRlcnIgPSB2bWFwX3BhZ2VzX3A0ZF9yYW5nZShwZ2QsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBcdTAwMjZuciwgXHUwMDI2bWFzayk7XG4rXHRcdGVyciA9IHZtYXBfcGFnZXNfcDRkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIFx1MDAyNm5yLCBcdTAwMjZtYXNrLCBzaGlmdCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0YnJlYWs7XG4gXHR9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTtcbkBAIC02NTksMjcgKzcwOSwxMiBAQCBzdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIGludCBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgcGFnZV9zaGlmdClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaSwgbnIgPSAoZW5kIC0gYWRkcikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXG4gXHRXQVJOX09OKHBhZ2Vfc2hpZnQgXHUwMDNjIFBBR0VfU0hJRlQpO1xuIFxuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DKSB8fFxuLVx0XHRcdHBhZ2Vfc2hpZnQgPT0gUEFHRV9TSElGVClcbi1cdFx0cmV0dXJuIHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaChhZGRyLCBlbmQsIHByb3QsIHBhZ2VzKTtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yOyBpICs9IDFVIFx1MDAzY1x1MDAzYyAocGFnZV9zaGlmdCAtIFBBR0VfU0hJRlQpKSB7XG4tXHRcdGludCBlcnI7XG4tXG4tXHRcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICsgKDFVTCBcdTAwM2NcdTAwM2MgcGFnZV9zaGlmdCksXG4tXHRcdFx0XHRcdHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIHByb3QsXG4tXHRcdFx0XHRcdHBhZ2Vfc2hpZnQpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXG4tXHRcdGFkZHIgKz0gMVVMIFx1MDAzY1x1MDAzYyBwYWdlX3NoaWZ0O1xuLVx0fVxuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DKSlcbitcdFx0cGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7XG4gXG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhhZGRyLCBlbmQsIHByb3QsIHBhZ2VzLCBwYWdlX3NoaWZ0KTtcbiB9XG4gXG4gaW50IHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuQEAgLTMyNzksNiArMzMxNCwxNCBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfdm1fYXJlYV9jYWxsZXIodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxuIFx0XHRcdFx0ICBOVU1BX05PX05PREUsIEdGUF9LRVJORUwsIGNhbGxlcik7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIodW5zaWduZWQgbG9uZyBzaXplLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCB2b2lkICpjYWxsZXIpXG4re1xuK1x0cmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBhbGlnbiwgUEFHRV9TSElGVCwgZmxhZ3MsXG4rXHRcdFx0XHQgIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELFxuK1x0XHRcdFx0ICBOVU1BX05PX05PREUsIEdGUF9LRVJORUwsIGNhbGxlcik7XG4rfVxuK1xuIC8qKlxuICAqIGZpbmRfdm1fYXJlYSAtIGZpbmQgYSBjb250aW51b3VzIGtlcm5lbCB2aXJ0dWFsIGFyZWFcbiAgKiBAYWRkcjpcdCAgYmFzZSBhZGRyZXNzXG5AQCAtMzUxOSw2ICszNTYyLDExNiBAQCB2b2lkIHZ1bm1hcChjb25zdCB2b2lkICphZGRyKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHZ1bm1hcCk7XG4gXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdm1fc2hpZnQocGdwcm90X3QgcHJvdCwgdW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdGlmIChhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IFBNRF9TSVpFKVxuK1x0XHRyZXR1cm4gUE1EX1NISUZUO1xuK1xuK1x0cmV0dXJuIGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBnZXRfdm1hcF9iYXRjaF9vcmRlcihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuK1x0XHRwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3N0ZXBzLCB1bnNpZ25lZCBpbnQgaWR4KVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgcGZuO1xuK1x0dW5zaWduZWQgaW50IG5yX2NvbnRpZztcbitcdGludCBvcmRlcjtcbitcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bnJfY29udGlnID0gbnVtX3BhZ2VzX2NvbnRpZ3VvdXMoXHUwMDI2cGFnZXNbaWR4XSwgbWF4X3N0ZXBzKTtcbitcdGlmIChucl9jb250aWcgXHUwMDNjIDIpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0b3JkZXIgPSBpbG9nMihucl9jb250aWcpO1xuK1x0cGZuID0gcGFnZV90b19wZm4ocGFnZXNbaWR4XSk7XG4rXG4rXHQvKiBMaW1pdCBvcmRlciBieSBwZm4gYWxpZ25tZW50ICovXG4rXHRpZiAocGZuIFx1MDAzZSAwKVxuK1x0XHRvcmRlciA9IG1pbl90KGludCwgb3JkZXIsIF9fZmZzKHBmbikpO1xuK1xuK1x0aWYgKHZtX3NoaWZ0KHByb3QsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpID09IFBBR0VfU0hJRlQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIG9yZGVyO1xuK31cbitcbitzdGF0aWMgaW50IHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuK1x0XHRwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuK3tcbitcdHVuc2lnbmVkIGludCBjb3VudCA9IChlbmQgLSBhZGRyKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdHVuc2lnbmVkIGludCBwcmV2X3NoaWZ0ID0gMCwgaWR4ID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgbWFwX2FkZHIgPSBhZGRyLCBiYXRjaF9lbmQgPSBhZGRyO1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IGttc2FuX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaChhZGRyLCBlbmQsIHByb3QsIHBhZ2VzLFxuK1x0XHRcdFx0XHQgICAgIFBBR0VfU0hJRlQsIEdGUF9LRVJORUwpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgY291bnQ7ICkge1xuK1x0XHR1bnNpZ25lZCBpbnQgc2hpZnQgPSBQQUdFX1NISUZUICtcbitcdFx0XHRnZXRfdm1hcF9iYXRjaF9vcmRlcihwYWdlcywgcHJvdCwgY291bnQgLSBpLCBpKTtcbitcbitcdFx0aWYgKCFpKVxuK1x0XHRcdHByZXZfc2hpZnQgPSBzaGlmdDtcbitcbitcdFx0aWYgKHNoaWZ0ICE9IHByZXZfc2hpZnQpIHtcbitcdFx0XHRlcnIgPSB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhtYXBfYWRkciwgYmF0Y2hfZW5kLFxuK1x0XHRcdFx0XHRwcm90LCBwYWdlcyArIGlkeCwgcHJldl9zaGlmdCk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdHByZXZfc2hpZnQgPSBzaGlmdDtcbitcdFx0XHRtYXBfYWRkciA9IGJhdGNoX2VuZDtcbitcdFx0XHRpZHggPSBpO1xuK1x0XHR9XG4rXG4rXHRcdC8qXG4rXHRcdCAqIE9uY2Ugc21hbGwgcGFnZXMgYXJlIGVuY291bnRlcmVkLCB0aGUgcmVtYWluaW5nIHBhZ2VzXG4rXHRcdCAqIGFyZSBsaWtlbHkgc21hbGwgYXMgd2VsbC5cbitcdFx0ICovXG4rXHRcdGlmIChzaGlmdCA9PSBQQUdFX1NISUZUKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRiYXRjaF9lbmQgKz0gMVVMIFx1MDAzY1x1MDAzYyBzaGlmdDtcbitcdFx0aSArPSAxVSBcdTAwM2NcdTAwM2MgKHNoaWZ0IC0gUEFHRV9TSElGVCk7XG4rXHR9XG4rXG4rXHQvKiBSZW1haW5pbmcgKi9cbitcdGlmIChtYXBfYWRkciBcdTAwM2MgZW5kKVxuK1x0XHRlcnIgPSB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2FsayhtYXBfYWRkciwgZW5kLFxuK1x0XHRcdFx0cHJvdCwgcGFnZXMgKyBpZHgsIHByZXZfc2hpZnQpO1xuK1xuK291dDpcbitcdGZsdXNoX2NhY2hlX3ZtYXAoYWRkciwgZW5kKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICp2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLFxuK1x0XHR1bnNpZ25lZCBsb25nIGZsYWdzLCBwZ3Byb3RfdCBwcm90LCBjb25zdCB2b2lkICpjYWxsZXIpXG4re1xuK1x0c3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYTtcbitcdHVuc2lnbmVkIGludCBzaGlmdDtcbitcbitcdGlmIChhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IFBNRF9TSVpFKSB7XG4rXHRcdHZtX2FyZWEgPSBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgUE1EX1NJWkUsXG4rXHRcdFx0XHRmbGFncywgY2FsbGVyKTtcbitcdFx0aWYgKHZtX2FyZWEpXG4rXHRcdFx0cmV0dXJuIHZtX2FyZWE7XG4rXHR9XG4rXG4rXHRzaGlmdCA9IGFyY2hfdm1hcF9wdGVfc3VwcG9ydGVkX3NoaWZ0KHNpemUpO1xuK1x0aWYgKHNoaWZ0IFx1MDAzZSBQQUdFX1NISUZUKSB7XG4rXHRcdHZtX2FyZWEgPSBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgMVVMIFx1MDAzY1x1MDAzYyBzaGlmdCxcbitcdFx0XHRcdGZsYWdzLCBjYWxsZXIpO1xuK1x0XHRpZiAodm1fYXJlYSlcbitcdFx0XHRyZXR1cm4gdm1fYXJlYTtcbitcdH1cbitcbitcdHJldHVybiBfX2dldF92bV9hcmVhX25vZGVfYWxpZ25lZF9jYWxsZXIoc2l6ZSwgUEFHRV9TSVpFLCBmbGFncywgY2FsbGVyKTtcbit9XG4rXG4gLyoqXG4gICogdm1hcCAtIG1hcCBhbiBhcnJheSBvZiBwYWdlcyBpbnRvIHZpcnR1YWxseSBjb250aWd1b3VzIHNwYWNlXG4gICogQHBhZ2VzOiBhcnJheSBvZiBwYWdlIHBvaW50ZXJzXG5AQCAtMzU1NywxMyArMzcxMCwxNCBAQCB2b2lkICp2bWFwKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCxcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRzaXplID0gKHVuc2lnbmVkIGxvbmcpY291bnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4tXHRhcmVhID0gZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuK1x0YXJlYSA9IHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYShzaXplLCBmbGFncywgcHJvdCxcbitcdFx0XHRcdF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4gXHRpZiAoIWFyZWEpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXHUwMDNlYWRkcjtcbi1cdGlmICh2bWFwX3BhZ2VzX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplLCBwZ3Byb3RfbngocHJvdCksXG4tXHRcdFx0XHRwYWdlcywgUEFHRV9TSElGVCkgXHUwMDNjIDApIHtcbitcdGlmICh2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWQoYWRkciwgYWRkciArIHNpemUsIHBncHJvdF9ueChwcm90KSxcbitcdFx0XHRcdHBhZ2VzKSBcdTAwM2MgMCkge1xuIFx0XHR2dW5tYXAoYXJlYS1cdTAwM2VhZGRyKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG5AQCAtNDAzMCwxMSArNDE4NCw3IEBAIHZvaWQgKl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXG4gXHRcdCAqIHN1cHBvcnRpbmcgdGhlbS5cbiBcdFx0ICovXG4gXG4tXHRcdGlmIChhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZChwcm90KSBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IFBNRF9TSVpFKVxuLVx0XHRcdHNoaWZ0ID0gUE1EX1NISUZUO1xuLVx0XHRlbHNlXG4tXHRcdFx0c2hpZnQgPSBhcmNoX3ZtYXBfcHRlX3N1cHBvcnRlZF9zaGlmdChzaXplKTtcbi1cbitcdFx0c2hpZnQgPSB2bV9zaGlmdChwcm90LCBzaXplKTtcbiBcdFx0YWxpZ24gPSBtYXgob3JpZ2luYWxfYWxpZ24sIDFVTCBcdTAwM2NcdTAwM2Mgc2hpZnQpO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6NDg6NTcuMTUzOTY3MTI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM4OTQ3NTQxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBmb3IgQ29udGlndW91cyBQVEUgTWFwcGluZ3MgaW4gdm1hbGxvYyBvbiBhcm02NCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgaXQncyB0cnlpbmcgdG8gaW50cm9kdWNlIGNvbnRpZ3VvdXMgUFRFIG1hcHBpbmdzIGZvciB2bWFsbG9jIG9uIGFybTY0LCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdm1hbGxvYy5oYCwgYGFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY2AsIGFuZCBgbW0vdm1hbGxvYy5jYCwgc28gaXQncyB0b3VjaGluZyBxdWl0ZSBhIGZldyBhcmVhcy5cblxuRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGV4dGVuZGluZyBgdm1hcGAgdG8gaGFuZGxlIGJhdGNoZWQgbWFwcGluZ3MgZm9yIGNvbnRpZ3VvdXMgcGFnZXMuIEl0J3MgbW9kaWZ5aW5nIGBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplYCB0byBoYW5kbGUgc2l6ZXMgdXAgdG8gdGhlIFBNRCBib3VuZGFyeSwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBiZWVuIHVwZGF0ZWQgdG8gdGFrZSBpbiBtdWx0aXBsZSBgQ09OVF9QVEVfU0laRWAgYmxvY2tzLiBUaGVyZSBhcmUgYWxzbyB1cGRhdGVzIHRvIGBudW1fY29udGlnX3B0ZXNgIGFuZCBgYXJjaF9tYWtlX2h1Z2VfcHRlYCB0byBzdXBwb3J0IHNpemVzIHdpdGhpbiBhIGdpdmVuIHJhbmdlIHRoYXQgYXJlIGFsaWduZWQgdG8gYENPTlRfUFRFX1NJWkVgLlxuXG5JbiBgbW0vdm1hbGxvYy5jYCwgdGhlIHBhdGNoIHNlZW1zIHRvIGFkZCBhIGZ1bmN0aW9uIGNhbGxlZCBgdm1hcF9zZXRfcHRlc2AgdGhhdCBsZXZlcmFnZXMgdGhlIHVwZGF0ZWQgYGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemVgIGFuZCBgYXJjaF9tYWtlX2h1Z2VfcHRlYCB0byBzZXQgbXVsdGlwbGUgUFRFcyBhdCBvbmNlLCB3aGljaCBpcyB3aGVyZSB0aGUgYmF0Y2hpbmcgY29tZXMgaW50byBwbGF5LiBJdCBhcHBlYXJzIHRoYXQgaXQncyB1cGRhdGluZyB0aGUgZGlmZmVyZW50IHJhbmdlIG1hcHBpbmcgZnVuY3Rpb25zLCBzdWNoIGFzIGB2bWFwX3BhZ2VzX3B0ZV9yYW5nZWAsIGB2bWFwX3BhZ2VzX3BtZF9yYW5nZWAsIGFuZCBzbyBvbiwgdG8gYWNjZXB0IGEgc2hpZnQgcGFyYW1ldGVyIGFuZCB1c2UgdGhpcyBuZXcgYHZtYXBfc2V0X3B0ZXNgIGZ1bmN0aW9uLiBUaGVyZSBhcmUgYWxzbyBuZXcgZnVuY3Rpb25zLCBgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYCBhbmQgYHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYWAsIHRoYXQgc2VlbSB0byBiZSBrZXkgY29tcG9uZW50cyBvZiB0aGlzIG5ldyBiYXRjaGluZyBmdW5jdGlvbmFsaXR5LCBiZWluZyB1c2VkIGluIGB2bWFwYC5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSB2bWFsbG9jIHBvcnRpb24sIGFzIHdlbGwgYXMgdGhlIGFybTY0IGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbi4gQ29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gbWVtb3J5IGFsbG9jYXRpb24sIEknbSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgYSBwcmltZSBjYW5kaWRhdGUgZm9yIHRob3JvdWdoIGZ1enppbmcuXG5cbkJlZm9yZSBJIGRlbHZlIGRlZXBlciBpbnRvIHRoZSBjb2RlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIExldCdzIHNlZS4uLiBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgLCBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVBgLCBhbmQgYENPTkZJR19IVUdFVExCX1BBR0VgIGFyZSBtZW50aW9uZWQgaW4gYG1tL3ZtYWxsb2MuY2AuIEknbGwgZ3JlcCBgbW0vS2NvbmZpZ2AgYW5kIGBhcmNoL2FybTY0L0tjb25maWdgIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY2FuIGJ1aWxkIGEga2VybmVsIHRoYXQgd2lsbCBhY3R1YWxseSBydW4gdGhpcyBuZXcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ5MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjQ5OjA0LjU0MzQ0NDA4M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ3NDg2OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTEwOTI9Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG4tLVxcbmFyY2gvS2NvbmZpZy0xMDk5LSNcXG5hcmNoL0tjb25maWc6MTEwMDpjb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcbmFyY2gvS2NvbmZpZy0xMTAxLVxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX0hVR0VfVk1BUFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTUzLVxcdHNlbGVjdCBIQVZFX0FSQ0hfQ09NUElMRVJfSFxcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNTQ6XFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5hcmNoL2FybTY0L0tjb25maWctMTU1LVxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMjE4LVxcdHNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMXFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MjE5OlxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFx0XFx0aWYgSEFWRV9BUkNIX0hVR0VfVk1BUFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTIyMC1cXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BUFxcdFxcdGlmIFBQQ19SQURJWF9NTVUgfHwgUFBDXzh4eFxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTEzMS1cXHRzZWxlY3QgSEFWRV9BUkNIX0JJVFJFVkVSU0UgaWYgUklTQ1ZfSVNBX1pCS0IgXFx1MDAyNlxcdTAwMjYgQklUUkVWRVJTRVxcbmFyY2gvcmlzY3YvS2NvbmZpZzoxMzI6XFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0MgaWYgSEFWRV9BUkNIX0hVR0VfVk1BUFxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMzMtXFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVAgaWYgTU1VIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTkyLVxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFQXFx0XFx0aWYgWDg2XzY0IHx8IFg4Nl9QQUVcXG5hcmNoL3g4Ni9LY29uZmlnOjE5MzpcXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcdFxcdGlmIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWctMTk0LVxcdHNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTFxcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg9MTk9c3RydWN0IGlvdl9pdGVyO1xcdFxcdC8qIGluIHVpby5oICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0zMS0jZGVmaW5lIFZNX01BUF9QVVRfUEFHRVNcXHQweDAwMDAwMjAwXFx0LyogcHV0IHBhZ2VzIGFuZCBmcmVlIGFycmF5IGluIHZmcmVlICovXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6MzI6I2RlZmluZSBWTV9BTExPV19IVUdFX1ZNQVBcXHQweDAwMDAwNDAwICAgICAgLyogQWxsb3cgZm9yIGh1Z2UgcGFnZXMgb24gYXJjaHMgd2l0aCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DICovXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMzMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD01Mj1zdHJ1Y3Qgdm1fc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTYxLVxcdHN0cnVjdCBwYWdlXFx0XFx0KipwYWdlcztcXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDo2MjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC02My1cXHR1bnNpZ25lZCBpbnRcXHRcXHRwYWdlX29yZGVyO1xcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg9MjU4PXN0YXRpYyBpbmxpbmUgYm9vbCBpc192bV9hcmVhX2h1Z2VwYWdlcyhjb25zdCB2b2lkICphZGRyKVxcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMjY2LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjI2NzojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0yNjgtXFx0c3RydWN0IHZtX3N0cnVjdCAqYXJlYSA9IGZpbmRfdm1fYXJlYShhZGRyKTtcXG4tLVxcbm1tL3ZtYWxsb2MuYz02Mz1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGlvcmVtYXBfbWF4X3BhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUO1xcbi0tXFxubW0vdm1hbGxvYy5jLTY1LVxcbm1tL3ZtYWxsb2MuYzo2NjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5tbS92bWFsbG9jLmMtNjctc3RhdGljIGJvb2wgX19yb19hZnRlcl9pbml0IHZtYXBfYWxsb3dfaHVnZSA9IHRydWU7XFxuLS1cXG5tbS92bWFsbG9jLmM9NzQ9ZWFybHlfcGFyYW0oXFxcIm5vaHVnZXZtYWxsb2NcXFwiLCBzZXRfbm9odWdldm1hbGxvYyk7XFxubW0vdm1hbGxvYy5jOjc1OiNlbHNlIC8qIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DICovXFxubW0vdm1hbGxvYy5jLTc2LXN0YXRpYyBjb25zdCBib29sIHZtYXBfYWxsb3dfaHVnZSA9IGZhbHNlO1xcbm1tL3ZtYWxsb2MuYzo3NzojZW5kaWZcXHQvKiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQyAqL1xcbm1tL3ZtYWxsb2MuYy03OC1cXG4tLVxcbm1tL3ZtYWxsb2MuYz03MDk9aW50IF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bWFsbG9jLmMtNzEzLVxcbm1tL3ZtYWxsb2MuYzo3MTQ6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DKSlcXG5tbS92bWFsbG9jLmMtNzE1LVxcdFxcdHBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUO1xcbi0tXFxubW0vdm1hbGxvYy5jPTMxNDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdm1fYXJlYV9wYWdlX29yZGVyKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtKVxcbm1tL3ZtYWxsb2MuYy0zMTQxLXtcXG5tbS92bWFsbG9jLmM6MzE0MjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5tbS92bWFsbG9jLmMtMzE0My1cXHRyZXR1cm4gdm0tXFx1MDAzZXBhZ2Vfb3JkZXI7XFxuLS1cXG5tbS92bWFsbG9jLmM9MzE1ND1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3ZtX2FyZWFfcGFnZV9vcmRlcihzdHJ1Y3Qgdm1fc3RydWN0ICp2bSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3ZtYWxsb2MuYy0zMTU1LXtcXG5tbS92bWFsbG9jLmM6MzE1NjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5tbS92bWFsbG9jLmMtMzE1Ny1cXHR2bS1cXHUwMDNlcGFnZV9vcmRlciA9IG9yZGVyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzo0OTowOS4wOTA5Mzc3MThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjM1MDMxMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHZtYXAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHZpcnR1YWwgbWFwcGluZ3MgYW5kIHBvdGVudGlhbGx5IGh1Z2UgcGFnZXMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSBvbiBgQVJNNjRgIGFuZCBgWDg2XzY0YCBhcmNoaXRlY3R1cmVzLiBTaW5jZSB0aG9zZSBhcmNoaXRlY3R1cmVzIGF1dG9tYXRpY2FsbHkgZW5hYmxlIGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCwgYEhBVkVfQVJDSF9IVUdFX1ZNQVBgLCBhbmQgYEhVR0VUTEJfUEFHRWAsIEkgY2FuIGFzc3VtZSB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgYWxyZWFkeSBiYWtlZCBpbi5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gQmFzZWQgb24gdGhlIG5hbWVzLCBgdm1hcF9wYWdlc19yYW5nZV9iYXRjaGVkYCwgYHZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYWAsIGB2bWFwX3NldF9wdGVzYCwgYHZtYXBfcGFnZXNfcHRlX3JhbmdlYCwgYHZtYXBfcGFnZXNfcG1kX3JhbmdlYCwgYHZtYXBfcGFnZXNfcHVkX3JhbmdlYCwgYHZtYXBfcGFnZXNfcDRkX3JhbmdlYCwgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCwgYF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoYCwgYHZtYXBgLCBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCwgYGFyY2hfdm1hcF9wdGVfcmFuZ2VfbWFwX3NpemVgLCBgbnVtX2NvbnRpZ19wdGVzYCwgYW5kIGBhcmNoX21ha2VfaHVnZV9wdGVgIGFyZSBnb2luZyB0byBiZSBrZXkgcGxheWVycy5cblxuTXkgZ29hbCBpcyB0byBuYXJyb3cgZG93biB0aGUgYWN0dWFsIHN5bWJvbHMgSSBuZWVkIHRvIGludmVzdGlnYXRlLiBgdm1hcGAgYW5kIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgIGFyZSBwcm9iYWJseSBnb2luZyB0byBiZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIHRoZSBhbGxvY2F0b3IuIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgIGFuZCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCBsaWtlbHkgaGFuZGxlIHRoZSBidWxrIG9mIHRoZSBtYXBwaW5nIHByb2Nlc3MuIGB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa2AgcHJvYmFibHkgb3B0aW1pemVzIHRoZSBtYXBwaW5nLiBJIHdpbGwgaWdub3JlIGB2bWFwX3NldF9wdGVzYCBiZWNhdXNlIGl0IGlzIGFuIGBfX2Fsd2F5c19pbmxpbmVgIGFuZCBgYXJjaF92bWFwX3B0ZV9yYW5nZV9tYXBfc2l6ZWAsIGFuZCBgbnVtX2NvbnRpZ19wdGVzYCBhcyB0aGV5IGFyZSBgc3RhdGljIGlubGluZWAgZnVuY3Rpb25zLiBJIHdpbGwgbmVlZCB0byBsb29rIGludG8gYGFyY2hfbWFrZV9odWdlX3B0ZWAgYXMgaXQgaXMgYSBmdW5jdGlvbiBkZWZpbmVkIGluIGBhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTYwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjQ5OjE1LjMyNTk3MTY5OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY3Nzg4MzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfbWFrZV9odWdlX3B0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL2FyY2hfcGd0YWJsZV9oZWxwZXJzLnJzdD0yMDM9SHVnZVRMQiBQYWdlIFRhYmxlIEhlbHBlcnNcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMucnN0LTIwOC0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xcbkRvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMucnN0OjIwOTp8IGFyY2hfbWFrZV9odWdlX3B0ZSAgICAgICAgfCBDcmVhdGVzIGEgSHVnZVRMQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxcbkRvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMucnN0LTIxMC0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmg9MjI9c3RhdGljIGlubGluZSB2b2lkIGFyY2hfY2xlYXJfaHVnZXRsYl9mbGFncyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMzQtXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmg6MzU6cHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsIHZtX2ZsYWdzX3QgZmxhZ3MpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjM2OiNkZWZpbmUgYXJjaF9tYWtlX2h1Z2VfcHRlIGFyY2hfbWFrZV9odWdlX3B0ZVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTM3LSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9TRVRfSFVHRV9QVEVfQVRcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYz03OD1zdGF0aWMgaW50IGZpbmRfbnVtX2NvbnRpZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTk3LS8qXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjk4OiAqIG51bV9jb250aWdfcHRlcygpLCBzZXRfaHVnZV9wdGVfYXQoKSBhbmQgYXJjaF9tYWtlX2h1Z2VfcHRlKCkgY2FuIGJlXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTk5LSAqIHVzZWQgYnkgbm9uLWh1Z2V0bGJmcyh2bWFsbG9jKSBtbSBjb2RlIHRvIHNldCBtdWx0aXBsZSBodWdlIG1hcHBpbmdzXFxuLS1cXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM9MzMxPXVuc2lnbmVkIGxvbmcgaHVnZXRsYl9tYXNrX2xhc3RfcGFnZShzdHJ1Y3QgaHN0YXRlICpoKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTM1NC1cXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM6MzU1OnB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zNTYte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9odWdldGxiLTh4eC5oPTM4PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdlX3B0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaC00Ny0jaWZkZWYgQ09ORklHX1BQQ180S19QQUdFU1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaDo0ODpzdGF0aWMgaW5saW5lIHB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaC00OS17XFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzMyL2h1Z2V0bGItOHh4LmgtNTYtfVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaDo1NzojZGVmaW5lIGFyY2hfbWFrZV9odWdlX3B0ZSBhcmNoX21ha2VfaHVnZV9wdGVcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzMyL2h1Z2V0bGItOHh4LmgtNTgtI2VuZGlmXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoL2h1Z2V0bGItZTUwMC5oPTc9c3RhdGljIGlubGluZSBpbnQgY2hlY2tfYW5kX2dldF9odWdlX3BzaXplKGludCBzaGlmdClcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvaHVnZXRsYi1lNTAwLmgtMTQtXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC9odWdldGxiLWU1MDAuaDoxNTpzdGF0aWMgaW5saW5lIHB0ZV90IGFyY2hfbWFrZV9odWdlX3B0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0LCB2bV9mbGFnc190IGZsYWdzKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvaHVnZXRsYi1lNTAwLmgtMTYte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC9odWdldGxiLWU1MDAuaC0yMS19XFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC9odWdldGxiLWU1MDAuaDoyMjojZGVmaW5lIGFyY2hfbWFrZV9odWdlX3B0ZSBhcmNoX21ha2VfaHVnZV9wdGVcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoL2h1Z2V0bGItZTUwMC5oLTIzLVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC84eHguYz01Mj1zdGF0aWMgaW50IF9fcmVmIF9fZWFybHlfbWFwX2tlcm5lbF9odWdlcGFnZSh1bnNpZ25lZCBsb25nIHZhLCBwaHlzX2FkZHJfdCBwYSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvOHh4LmMtOTAtXFx0c2V0X2h1Z2VfcHRlX2F0KFxcdTAwMjZpbml0X21tLCB2YSwgcHRlcCxcXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoLzh4eC5jOjkxOlxcdFxcdFxcdGFyY2hfbWFrZV9odWdlX3B0ZShwZm5fcHRlKHBhIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsIHByb3QpLCBzaGlmdCwgMCksXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC84eHguYy05Mi1cXHRcXHRcXHQxVUwgXFx1MDAzY1xcdTAwM2Mgc2hpZnQpO1xcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmg9NDg9cHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmgtNDktXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmg6NTA6cHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsIHZtX2ZsYWdzX3QgZmxhZ3MpO1xcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjUxOiNkZWZpbmUgYXJjaF9tYWtlX2h1Z2VfcHRlIGFyY2hfbWFrZV9odWdlX3B0ZVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTUyLVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jPTE3Mj1zdGF0aWMgcHRlX3QgZ2V0X2NsZWFyX2NvbnRpZ19mbHVzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy0xODYtXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jOjE4NzpwdGVfdCBhcmNoX21ha2VfaHVnZV9wdGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdCwgdm1fZmxhZ3NfdCBmbGFncylcXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtMTg4LXtcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oPTM3ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3dyaXRlKHB0ZV90IHB0ZSlcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oLTM5Mi0jaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFKSB8fCBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaDozOTM6cHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsIHZtX2ZsYWdzX3QgZmxhZ3MpO1xcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oOjM5NDojZGVmaW5lIGFyY2hfbWFrZV9odWdlX3B0ZSBhcmNoX21ha2VfaHVnZV9wdGVcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaC0zOTUtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcHRlX2RlZmF1bHRfaHVnZV9tYXNrKHZvaWQpXFxuLS1cXG5hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmM9ODE9c3RhdGljIHB0ZV90IGh1Z2VwYWdlX3NoaWZ0X3RvX3R0ZShwdGVfdCBlbnRyeSwgdW5zaWduZWQgaW50IHNoaWZ0KVxcbi0tXFxuYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jLTg4LVxcbmFyY2gvc3BhcmMvbW0vaHVnZXRsYnBhZ2UuYzo4OTpwdGVfdCBhcmNoX21ha2VfaHVnZV9wdGUocHRlX3QgZW50cnksIHVuc2lnbmVkIGludCBzaGlmdCwgdm1fZmxhZ3NfdCBmbGFncylcXG5hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmMtOTAte1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9ODM3PXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2NsZWFyX2h1Z2V0bGJfZmxhZ3Moc3RydWN0IGZvbGlvICpmb2xpbykgeyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04NDAtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODQxOiNpZm5kZWYgYXJjaF9tYWtlX2h1Z2VfcHRlXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODQyOnN0YXRpYyBpbmxpbmUgcHRlX3QgYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZV90IGVudHJ5LCB1bnNpZ25lZCBpbnQgc2hpZnQsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODQzLVxcdFxcdFxcdFxcdCAgICAgICB2bV9mbGFnc190IGZsYWdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTg4NT1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9iYXNpY190ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg5MC1cXHRwdGUgPSBwZm5fcHRlKGFyZ3MtXFx1MDAzZWZpeGVkX3BtZF9wZm4sIGFyZ3MtXFx1MDAzZXBhZ2VfcHJvdCk7XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjg5MTpcXHRwdGUgPSBhcmNoX21ha2VfaHVnZV9wdGUocHRlLCBQTURfU0hJRlQsIFZNX0FDQ0VTU19GTEFHUyk7XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg5Mi1cXG4tLVxcbm1tL2h1Z2V0bGIuYz00ODA0PXN0YXRpYyBwdGVfdCBtYWtlX2h1Z2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTQ4MTUtXFx0ZW50cnkgPSBwdGVfbWt5b3VuZyhlbnRyeSk7XFxubW0vaHVnZXRsYi5jOjQ4MTY6XFx0ZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIHNoaWZ0LCB2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS9odWdldGxiLmMtNDgxNy1cXG4tLVxcbm1tL2h1Z2V0bGIuYz02Mzg0PWxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NDk5LVxcdFxcdFxcdHB0ZSA9IGh1Z2VfcHRlX21vZGlmeShvbGRfcHRlLCBuZXdwcm90KTtcXG5tbS9odWdldGxiLmM6NjUwMDpcXHRcXHRcXHRwdGUgPSBhcmNoX21ha2VfaHVnZV9wdGUocHRlLCBzaGlmdCwgdm1hLVxcdTAwM2V2bV9mbGFncyk7XFxubW0vaHVnZXRsYi5jLTY1MDEtXFx0XFx0XFx0aWYgKHVmZmRfd3ApXFxuLS1cXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtNDE5LVxcbm1tL21pZ3JhdGUuYzo0MjA6XFx0XFx0XFx0cHRlID0gYXJjaF9tYWtlX2h1Z2VfcHRlKHB0ZSwgc2hpZnQsIHZtYS1cXHUwMDNldm1fZmxhZ3MpO1xcbm1tL21pZ3JhdGUuYy00MjEtXFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpXFxuLS1cXG5tbS92bWFsbG9jLmM9MTAxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFwX3NldF9wdGVzKHB0ZV90ICpwdGUsXFxuLS1cXG5tbS92bWFsbG9jLmMtMTExLVxcbm1tL3ZtYWxsb2MuYzoxMTI6XFx0XFx0ZW50cnkgPSBhcmNoX21ha2VfaHVnZV9wdGUoZW50cnksIGlsb2cyKHNpemUpLCAwKTtcXG5tbS92bWFsbG9jLmMtMTEzLVxcdFxcdHNldF9odWdlX3B0ZV9hdChcXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBlbnRyeSwgc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAzOjQ5OjE3Ljg5Mzc2NjYwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNDkzMzMxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVmlydHVhbCBNZW1vcnkgTWFwcGluZyBGdW5jdGlvbnMgYW5kIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgdmlydHVhbCBtZW1vcnkgbWFwcGluZyBjb2RlLCBhbmQgaGVyZSdzIHRoZSBicmVha2Rvd24gb2YgbXkgY3VycmVudCB0aG91Z2h0IHByb2Nlc3MuIEluaXRpYWxseSwgSSdtIHplcm9pbmcgaW4gb24gYSBjb3JlIHNldCBvZiBmdW5jdGlvbnM6IGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgLCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCwgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCwgYF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoYCwgYHZtYXBgLCBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCwgYHZtYXBfcGFnZXNfcHRlX3JhbmdlYCwgYHZtYXBfcGFnZXNfcG1kX3JhbmdlYCwgYHZtYXBfcGFnZXNfcHVkX3JhbmdlYCwgYW5kIGB2bWFwX3BhZ2VzX3A0ZF9yYW5nZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLlxuXG5NeSBmaXJzdCBzdGVwIGlzIGNoZWNraW5nIHRoZSB2aXNpYmlsaXR5IG9mIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgIGFuZCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYC4gQWhhLCB0aGV5J3JlIHN0YXRpYyB3aXRoaW4gYG1tL3ZtYWxsb2MuY2AuIEludGVyZXN0aW5nLiBgdm1hcGAgaXMgZXhwb3J0ZWQsIGFzIGlzIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgLiBTaW1pbGFybHksIGBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAgaXMgYWxzbyBleHBvcnRlZCwgd2hpbGUgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCBpcyBzdGF0aWMuXG5cbkdpdmVuIHRoYXQgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMsIEkgd2lsbCBpbmNsdWRlIGFsbCBmdW5jdGlvbnMgbGlzdGVkIGluIG15IHRob3VnaHRzOlxuYHZtYXBgXG5gX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYFxuYF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoYFxuYHZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZGBcbmB2bWFwX2dldF9hbGlnbmVkX3ZtX2FyZWFgXG5gdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGtgXG5gdm1hcF9wYWdlc19wdGVfcmFuZ2VgXG5gdm1hcF9wYWdlc19wbWRfcmFuZ2VgXG5gdm1hcF9wYWdlc19wdWRfcmFuZ2VgXG5gdm1hcF9wYWdlc19wNGRfcmFuZ2VgXG5cbkkgcmVhbGl6ZWQgSSBuZWVkIHRvIGJlICpzdXJlKiB0byBpbmNsdWRlIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgIGFuZCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCBiZWNhdXNlIHRoZXkgYXJlIHN0YXRpYyBidXQgY3J1Y2lhbCwgYW5kIGFsc28gYGFyY2hfbWFrZV9odWdlX3B0ZWAgZnJvbSBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYC5cblxuTm93LCBtb3Zpbmcgb24gdG8gY29uZmlndXJhdGlvbiBjb25zaWRlcmF0aW9ucy4gSSBzZWUgYEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgLCBgSEFWRV9BUkNIX0hVR0VfVk1BUGAsIGFuZCBgSFVHRVRMQl9QQUdFYCBhcmUgcmVsZXZhbnQuIFdhaXQsIGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBhbmQgYEhBVkVfQVJDSF9IVUdFX1ZNQVBgIGFyZSBhcmNoaXRlY3R1cmUtZGVwZW5kZW50LCBzbyBJIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdXNlciBzZWxlY3Rpb24uIEhvd2V2ZXIsIGBIVUdFVExCX1BBR0VgIGlzIGEgdXNlci1zZWxlY3RhYmxlIGNvbmZpZywgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdOKAmXMgYmVpbmcgdXNlZC5cblxuTG9va2luZyBpbnRvIHRoZSBjb2RlLCBJIHNlZSBhIGAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRWAgaW5zaWRlIGB2bWFwX3NldF9wdGVzYCwgd2hpY2ggbWVhbnMgdGhlIG5ldyBjb2RlIHBhdGggd2l0aGluIHRoaXMgZnVuY3Rpb24gaXMgb25seSB0ZXN0ZWQgd2hlbiB0aGUgYEhVR0VUTEJfUEFHRWAgY29uZmlnIGlzIGVuYWJsZWQuIFRoZXJlZm9yZSwgdGVzdGluZyB0aGlzIGNvZGUgcmVxdWlyZXMgYEhVR0VUTEJfUEFHRWAgdG8gYmUgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIGBhcmNoL2FybTY0L0tjb25maWdgIHRvIHNlZSBob3cgdGhpcyBpcyBkZWZpbmVkIGluIHRoYXQgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ4MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzo0OToyNi4xNDMxMDE4OTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwNTkzODQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTYzLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiNjRrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2ODpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjktXFx0Ym9vbCBcXFwiMjU2a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTcxLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiMU1CXFxcIlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzQtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3NTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCI0TUJcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTc4LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTgwLVxcdGJvb2wgXFxcIjY0TUJcXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbmZzL0tjb25maWctMjY0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjc2LVxcbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc4LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbi0tXFxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNzA4LVxcbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbm1tL0tjb25maWctNzEwLVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6NDk6MjguNjQ5MDQ3MzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzYwMjAyMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC5cblxuKipBbmFseXppbmcgdGhlIEh1Z2VUTEIgUGFnZSBEZWZpbml0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYEhVR0VUTEJfUEFHRWAgaXMgZXNzZW50aWFsbHkgZGVmaW5lZCBhcyB0aGUgc2FtZSB0aGluZyBhcyBgZGVmX2Jvb2wgSFVHRVRMQkZTYC4gVGhpcyBtZWFucyB0aGUgYEhVR0VUTEJGU2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgdGhlIGtleSB0byBlbmFibGluZyB0aGUgYEhVR0VUTEJfUEFHRWAgZnVuY3Rpb25hbGl0eS4gU28sIGlmIEkgd2FudCB0byB3b3JrIHdpdGggaHVnZSBwYWdlcywgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBIVUdFVExCRlNgIGlzIGVuYWJsZWQgd2l0aGluIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBJdCB0ZWxscyBtZSB3aGVyZSB0byBsb29rIHRvIGVuc3VyZSBpdCdzIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MDQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzo0OTozMS40MDkyNTMyMzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTY0NjgxMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMzo0OTozMy45MDU3MzAzN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzA0MzIwNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29udGlndW91cyBQVEUgTWFwcGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgZW5hYmxpbmcgYEhVR0VUTEJGU2AgaXMgdGhlIHJlbGV2YW50IGNvbmZpZyBmb3IgdGhpcyBwYXRjaC4gSSBhbHNvIHNlZSB0aGF0IGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AgYW5kIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUGAgYXJlIHNlbGVjdGVkIGJ5IGFybTY0LCBidXQgYEhVR0VUTEJGU2AgaXMgdGhlIGtleSBvbmUuXG5cbkkndmUgdGFrZW4gYSBsb29rIGF0IHRoZSB2YXJpb3VzIHN5bWJvbHMgdG91Y2hlZCBieSB0aGlzIHBhdGNoOiBgdm1hcGAsIGFuZCB0aGUgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBmb3IgYHZtYXBgIC0gYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAsIGBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaGAsIGB2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRgLCBgdm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhYCwgYHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaF93YWxrYCwgYHZtYXBfcGFnZXNfcHRlX3JhbmdlYCwgYHZtYXBfcGFnZXNfcG1kX3JhbmdlYCwgYHZtYXBfcGFnZXNfcHVkX3JhbmdlYCwgYHZtYXBfcGFnZXNfcDRkX3JhbmdlYCBhbmQgZmluYWxseSwgY3JpdGljYWxseSwgYGFyY2hfbWFrZV9odWdlX3B0ZWAuIEkndmUgY2hlY2tlZCBhbmQgYGFyY2hfbWFrZV9odWdlX3B0ZWAgKmlzKiBkZWZpbmVkIGluIGBhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNgLiBPdGhlciBhcmNoaXRlY3R1cmVzLCBsaWtlIHBvd2VycGMsIHJpc2N2LCBhbmQgc3BhcmMgYWxzbyBkZWZpbmUgaXQgYnV0IHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdG91Y2hlcyB0aGUgYXJtNjQgaW1wbGVtZW50YXRpb24uXG5cblRoZSBwYXRjaCBtb2RpZmllcyBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92bWFsbG9jLmhgLCBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYCwgYW5kIGBtbS92bWFsbG9jLmNgLiBUaGUgY2hhbmdlcyBpbiBgbW0vdm1hbGxvYy5jYCBhcmUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGJ1dCByZWx5IG9uIGBhcmNoX3ZtYXBfcHRlX3JhbmdlX21hcF9zaXplYCBhbmQgYGFyY2hfbWFrZV9odWdlX3B0ZWAgZGVmaW5lZCBieSB0aGUgYXJjaGl0ZWN0dXJlLiBTbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBjb250aWd1b3VzIFBURSBtYXBwaW5ncyBmb3Igdm1hbGxvYyBvbiBhcm02NC5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCB0aGUgYXJtNjQgYXJjaGl0ZWN0dXJlLiBJdCBpbnRyb2R1Y2VzIGNvbnRpZ3VvdXMgUFRFIG1hcHBpbmdzIGZvciB2bWFsbG9jIG9uIGFybTY0IGFuZCB1cGRhdGVzIGB2bWFwYCB0byBzdXBwb3J0IGJhdGNoZWQgbWFwcGluZyBmb3IgY29udGlndW91cyBwYWdlcy4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbi4gR2l2ZW4gdGhlc2UgY2hhbmdlcywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBzdGFiaWxpdHkuIEkgc2hvdWxkIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtYXJrIHRoaXMgYXMgYW4gaW1wb3J0YW50IGZ1enppbmcgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY3MSwiT3V0cHV0VG9rZW5zIjoyMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDM6NDk6NDIuMjEwMDU1ODk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyOTAxNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFwXCIsXG4gICAgXCJfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZcIixcbiAgICBcIl9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3JhbmdlX2JhdGNoZWRcIixcbiAgICBcInZtYXBfZ2V0X2FsaWduZWRfdm1fYXJlYVwiLFxuICAgIFwidm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoX3dhbGtcIixcbiAgICBcInZtYXBfcGFnZXNfcHRlX3JhbmdlXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3BtZF9yYW5nZVwiLFxuICAgIFwidm1hcF9wYWdlc19wdWRfcmFuZ2VcIixcbiAgICBcInZtYXBfcGFnZXNfcDRkX3JhbmdlXCIsXG4gICAgXCJhcmNoX21ha2VfaHVnZV9wdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGNvbnRpZ3VvdXMgUFRFIG1hcHBpbmdzIGZvciB2bWFsbG9jIG9uIGFybTY0LCBhbmQgdXBkYXRlcyB2bWFwIHRvIHN1cHBvcnQgYmF0Y2hlZCBtYXBwaW5nIGZvciBjb250aWd1b3VzIHBhZ2VzLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBcIixcbiAgICBcIl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hcIixcbiAgICBcInZtYXBfcGFnZXNfcmFuZ2VfYmF0Y2hlZFwiLFxuICAgIFwidm1hcF9nZXRfYWxpZ25lZF92bV9hcmVhXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2hfd2Fsa1wiLFxuICAgIFwidm1hcF9wYWdlc19wdGVfcmFuZ2VcIixcbiAgICBcInZtYXBfcGFnZXNfcG1kX3JhbmdlXCIsXG4gICAgXCJ2bWFwX3BhZ2VzX3B1ZF9yYW5nZVwiLFxuICAgIFwidm1hcF9wYWdlc19wNGRfcmFuZ2VcIixcbiAgICBcImFyY2hfbWFrZV9odWdlX3B0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgY29udGlndW91cyBQVEUgbWFwcGluZ3MgZm9yIHZtYWxsb2Mgb24gYXJtNjQsIGFuZCB1cGRhdGVzIHZtYXAgdG8gc3VwcG9ydCBiYXRjaGVkIG1hcHBpbmcgZm9yIGNvbnRpZ3VvdXMgcGFnZXMuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv5wcl[1] Phase: Succeeded StartedAt: 2026-07-16 03:49:54 +0000 UTC FinishedAt: 2026-07-16 03:49:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-16 03:49:54 +0000 UTC FinishedAt: 2026-07-16 03:49:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2] Phase: Succeeded StartedAt: 2026-07-16 03:49:54 +0000 UTC FinishedAt: 2026-07-16 08:00:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-16 03:49:54 +0000 UTC FinishedAt: 2026-07-16 08:00:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-16 03:49:54 +0000 UTC FinishedAt: 2026-07-16 03:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-16 03:49:54 +0000 UTC FinishedAt: 2026-07-16 03:50:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv5wcl/series-workflowv5wcl-convert-artifact-2388342591/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-16 03:50:04 +0000 UTC FinishedAt: 2026-07-16 04:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-16 03:50:04 +0000 UTC FinishedAt: 2026-07-16 04:24:00 +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:*70f28a48-1faa-4b5d-99b4-3628ded442dd,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-workflowv5wcl/series-workflowv5wcl-convert-artifact-2388342591/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": "fb4c4e3d-ab51-424f-9a0a-a1947c47186a", "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-workflowv5wcl/series-workflowv5wcl-build-action-3437445573/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-16 03:50:04 +0000 UTC FinishedAt: 2026-07-16 04:23:50 +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:*70f28a48-1faa-4b5d-99b4-3628ded442dd,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-workflowv5wcl/series-workflowv5wcl-convert-artifact-2388342591/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": "fb4c4e3d-ab51-424f-9a0a-a1947c47186a", "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-workflowv5wcl/series-workflowv5wcl-build-action-3437445573/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-16 04:24:00 +0000 UTC FinishedAt: 2026-07-16 04:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-16 04:24:00 +0000 UTC FinishedAt: 2026-07-16 04:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-16 04:24:00 +0000 UTC FinishedAt: 2026-07-16 04:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-16 04:24:00 +0000 UTC FinishedAt: 2026-07-16 04:24:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv5wcl/series-workflowv5wcl-convert-artifact-4089553998/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-16 04:24:37 +0000 UTC FinishedAt: 2026-07-16 04:26:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-16 04:24:37 +0000 UTC FinishedAt: 2026-07-16 04:26:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fb4c4e3d-ab51-424f-9a0a-a1947c47186a,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-workflowv5wcl/series-workflowv5wcl-build-action-3437445573/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-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-16 04:26:43 +0000 UTC FinishedAt: 2026-07-16 04:26:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-16 04:26:43 +0000 UTC FinishedAt: 2026-07-16 04:26:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-16 04:26:43 +0000 UTC FinishedAt: 2026-07-16 04:56:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-16 04:26:43 +0000 UTC FinishedAt: 2026-07-16 04:56: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:*70f28a48-1faa-4b5d-99b4-3628ded442dd,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-workflowv5wcl/series-workflowv5wcl-convert-artifact-4089553998/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": "9ddd148c-6644-4ca9-ae4b-ca042d98ab33", "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-workflowv5wcl/series-workflowv5wcl-build-action-116934114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-16 04:26:43 +0000 UTC FinishedAt: 2026-07-16 04:55: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:*70f28a48-1faa-4b5d-99b4-3628ded442dd,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-workflowv5wcl/series-workflowv5wcl-convert-artifact-4089553998/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": "9ddd148c-6644-4ca9-ae4b-ca042d98ab33", "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-workflowv5wcl/series-workflowv5wcl-build-action-116934114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-16 04:56:05 +0000 UTC FinishedAt: 2026-07-16 04:56:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-16 04:56:05 +0000 UTC FinishedAt: 2026-07-16 04:56:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-16 04:56:05 +0000 UTC FinishedAt: 2026-07-16 04:58:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-16 04:56:05 +0000 UTC FinishedAt: 2026-07-16 04:58:01 +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:*9ddd148c-6644-4ca9-ae4b-ca042d98ab33,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-workflowv5wcl/series-workflowv5wcl-build-action-116934114/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-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-16 04:58:11 +0000 UTC FinishedAt: 2026-07-16 08:00:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-16 04:58:11 +0000 UTC FinishedAt: 2026-07-16 08:00:55 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},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:*fb4c4e3d-ab51-424f-9a0a-a1947c47186a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9ddd148c-6644-4ca9-ae4b-ca042d98ab33,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-workflowv5wcl/series-workflowv5wcl-build-action-3437445573/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-workflowv5wcl/series-workflowv5wcl-build-action-116934114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-16 04:58:11 +0000 UTC FinishedAt: 2026-07-16 04:58:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-16 04:58:11 +0000 UTC FinishedAt: 2026-07-16 04:58:16 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},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-workflowv5wcl/series-workflowv5wcl-convert-artifact-3124460147/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-16 04:58:11 +0000 UTC FinishedAt: 2026-07-16 04:58:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-16 04:58:11 +0000 UTC FinishedAt: 2026-07-16 04:58:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-16 04:58:11 +0000 UTC FinishedAt: 2026-07-16 04:58:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-16 04:58:21 +0000 UTC FinishedAt: 2026-07-16 08:00:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv5wcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap","__vmalloc_node_range_noprof","__vmap_pages_range_noflush","vmap_pages_range_batched","vmap_get_aligned_vm_area","vmap_pages_range_noflush_walk","vmap_pages_pte_range","vmap_pages_pmd_range","vmap_pages_pud_range","vmap_pages_p4d_range","arch_make_huge_pte"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"58717b2a1365d06c8c64b72aa948541b53fe31eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"e601f882-dcfd-4e92-b0cc-06dbaf1cc186","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-16 04:58:21 +0000 UTC FinishedAt: 2026-07-16 08:00:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fb4c4e3d-ab51-424f-9a0a-a1947c47186a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9ddd148c-6644-4ca9-ae4b-ca042d98ab33,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-workflowv5wcl/series-workflowv5wcl-build-action-3437445573/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-workflowv5wcl/series-workflowv5wcl-build-action-116934114/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-workflowv5wcl/series-workflowv5wcl-convert-artifact-3124460147/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,}