Name: series-workflowf6svk Phase: Succeeded StartedAt: 2026-08-11 16:49:15 +0000 UTC FinishedAt: 2026-08-11 20:53:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[0] Phase: Succeeded StartedAt: 2026-08-11 16:49:15 +0000 UTC FinishedAt: 2026-08-11 17:11:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 16:49:15 +0000 UTC FinishedAt: 2026-08-11 17:11:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "511c7a2c5acf478c7d4be3386455a66d114ba929", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "511c7a2c5acf478c7d4be3386455a66d114ba929", "config_name": "upstream-apparmor-kasan.config", "series_id": "54878d3b-dfb0-4dcf-932b-a28823bad38e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "walk_page_range", "walk_page_vma", "walk_page_mapping" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDE3OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O3dhbGtfcGFnZV92bWEmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX21hcHBpbmcmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgcGFnZSB0YWJsZSB3YWxrZXIgKGBtbS9wYWdld2Fsay5jYCkgd2hlcmUgYSBzdGFsZSBgd2Fsay1cdTAwM2VhY3Rpb25gIChlLmcuLCBgQUNUSU9OX0FHQUlOYCkgY291bGQgZXNjYXBlIGEgbG93ZXItbGV2ZWwgd2FsayBmdW5jdGlvbiBhbmQgY2F1c2UgdGhlIGhpZ2hlci1sZXZlbCB3YWxrIGZ1bmN0aW9uIHRvIGluY29ycmVjdGx5IHJlcGVhdCB0aGUgd2FsayBvdmVyIHRoZSBzYW1lIHJhbmdlLiBUaGUgZml4IHNpbXBseSBtb3ZlcyB0aGUgYXNzaWdubWVudCBgd2Fsay1cdTAwM2VhY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTtgIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBjb250cm9sIGZsb3cgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLCBhbmQgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvcmUgTU0gcGFnZSB3YWxraW5nIGxvZ2ljICh3YWxrX3BtZF9yYW5nZSwgd2Fsa19wdWRfcmFuZ2UpIHdoZXJlIGEgc3RhbGUgd2Fsay1cdTAwM2VhY3Rpb24gY291bGQgY2F1c2UgdGhlIHNhbWUgcmFuZ2UgdG8gYmUgd2Fsa2VkIHR3aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgKGUuZy4sIHZpYSAvcHJvYy9waWQvc21hcHMgb3IgbWFkdmlzZSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTc6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NzAwZDY5OWNmMzQ3ZDRkMDkzMTJmOGJlMzcyNjVhNmI3MzE3MDhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTc6MTA6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcbmluZGV4IDVkODdjNjMyYTI1NTAuLmQzYmZlY2UzMTkzMzYgMTAwNjQ0XG4tLS0gYS9tbS9wYWdld2Fsay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jXG5AQCAtMTI2LDYgJiM0MzsxMjYsNyBAQCBzdGF0aWMgaW50IHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7XG4gXHRkbyB7XG4gYWdhaW46XG4mIzQzO1x0XHR3YWxrLVx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO1xuIFx0XHRuZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4gXHRcdGlmIChwbWRfbm9uZSgqcG1kKSkge1xuIFx0XHRcdGlmIChoYXNfaW5zdGFsbClcbkBAIC0xMzgsOCAmIzQzOzEzOSw2IEBAIHN0YXRpYyBpbnQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4tXHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7XG4tXG4gXHRcdC8qXG4gXHRcdCAqIFRoaXMgaW1wbGllcyB0aGF0IGVhY2ggLVx1MDAzZXBtZF9lbnRyeSgpIGhhbmRsZXJcbiBcdFx0ICogbmVlZHMgdG8ga25vdyBhYm91dCBwbWRfdHJhbnNfaHVnZSgpIHBtZHNcbkBAIC0xOTYsNiAmIzQzOzE5NSw3IEBAIHN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdHB1ZCA9IHB1ZF9vZmZzZXQocDRkLCBhZGRyKTtcbiBcdGRvIHtcbiAgYWdhaW46XG4mIzQzO1x0XHR3YWxrLVx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO1xuIFx0XHRuZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4gXHRcdGlmIChwdWRfbm9uZSgqcHVkKSkge1xuIFx0XHRcdGlmIChoYXNfaW5zdGFsbClcbkBAIC0yMDgsOCAmIzQzOzIwOCw2IEBAIHN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4tXHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7XG4tXG4gXHRcdGlmIChvcHMtXHUwMDNlcHVkX2VudHJ5KVxuIFx0XHRcdGVyciA9IG9wcy1cdTAwM2VwdWRfZW50cnkocHVkLCBhZGRyLCBuZXh0LCB3YWxrKTtcbiBcdFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZVxuaW5kZXggOWNjZDllMTQ0N2U2Ni4uOTJmOTgxZjk3NzQwZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmVcbkBAIC02NiwzICYjNDM7NjYsNCBAQCBtZXJnZVxuIHByY3RsX3RocF9kaXNhYmxlXG4gcm1hcFxuIGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxuJiM0MztwYWdld2Fsa19yYWNlX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCBlNmRmOTY4ZjA5NzFjLi5jZGU5YjIyZjEyMWQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMTA1LDYgJiM0MzsxMDUsNyBAQCBURVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VhcmQtcmVnaW9uc1xuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBtZXJnZVxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBybWFwXG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxuJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gcGFnZXdhbGtfcmFjZV90ZXN0XG4gXG4gaWZuZXEgKCQoQVJDSCksYXJtNjQpXG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IHNvZnQtZGlydHlcbkBAIC0xNjMsNiAmIzQzOzE2NCw3IEBAIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfbWxvY2suc2hcbiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X21tYXAuc2hcbiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X21yZW1hcC5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfcGFnZW1hcC5zaFxuJiM0MztURVNUX1BST0dTICYjNDM7PSBrc2Z0X3BhZ2V3YWxrLnNoXG4gVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wZm5tYXAuc2hcbiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X3BrZXkuc2hcbiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X3Byb2Nlc3NfbWFkdi5zaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfcGFnZXdhbGsuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X3BhZ2V3YWxrLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNmY2YzNlZTFjMTNlZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9wYWdld2Fsay5zaFxuQEAgLTAsMCAmIzQzOzEsNCBAQFxuJiM0MzsjIS9iaW4vc2ggLWVcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7Li9ydW5fdm10ZXN0cy5zaCAtdCBwYWdld2Fsa1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2V3YWxrX3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZXdhbGtfcmFjZV90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40MmZkNmU3NWU4MjFlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdld2Fsa19yYWNlX3Rlc3QuY1xuQEAgLTAsMCAmIzQzOzEsMTM4IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBzdGFsZSB3YWxrLVx1MDAzZWFjdGlvbiBlc2NhcGluZyB3YWxrX3BtZF9yYW5nZSgpIGFuZFxuJiM0MzsgKiBtYWtpbmcgd2Fsa19wdWRfcmFuZ2UoKSB3YWxrIHRoZSBzYW1lIHJhbmdlIHR3aWNlLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgbWFwcGluZyBpcyB0d28gUE1EcyBpbnNpZGUgb25lIFBVRC4gUE1EIDAgaXMgcG9wdWxhdGVkIG9uY2UgYW5kIGxlZnRcbiYjNDM7ICogYWxvbmUsIFBNRCAxIGlzIGZhdWx0ZWQgaW4gYW5kIGRyb3BwZWQgYWdhaW4gYnkgYSBzZWNvbmQgdGhyZWFkLiBDbGVhcmluZ1xuJiM0MzsgKiBQTUQgMSB1bmRlciBzbWFwc19wdGVfcmFuZ2UoKSBtYWtlcyBpdCByYWlzZSBBQ1RJT05fQUdBSU4sIGFuZCBzaW5jZSBpdCBpc1xuJiM0MzsgKiB0aGUgbGFzdCBlbnRyeSB0aGUgc3RhbGUgdmFsdWUgbGVhdmVzIHdhbGtfcG1kX3JhbmdlKCksIHNvIHNtYXBzIGFjY291bnRzXG4mIzQzOyAqIFBNRCAwIHR3aWNlLiBBIGtlcm5lbCB0aGF0IGRvZXMgbm90IHJlY2xhaW0gdGhlIGVtcHRpZWQgcGFnZSB0YWJsZSBuZXZlclxuJiM0MzsgKiBjbGVhcnMgUE1EIDEgYW5kIHNvIG5ldmVyIGhpdHMgdGhlIHJhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIEEgaGl0IGNhbiBvbmx5IGNvbWUgZnJvbSB0aGUga2VybmVsIGNvdW50aW5nIHRoZSBzYW1lIHBhZ2UgdHdpY2UsIHNvIHRoZVxuJiM0MzsgKiB0ZXN0IGNhbm5vdCBmYWlsIHNwdXJpb3VzbHkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYXRvbWljLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTlJfUE1EU1x0XHQyXG4mIzQzOyNkZWZpbmUgTlJfUk9VTkRTXHQyMDAwMFxuJiM0MzsvKiBDYXAgb24gaG93IG11Y2ggb2YgUE1EIDAgdG8gZmF1bHQgaW4sIHNvIHRoYXQgYSBsYXJnZSBQTUQgc3RheXMgY2hlYXAuICovXG4mIzQzOyNkZWZpbmUgUE9QX01BWFx0XHQoMiAqIDEwMjQgKiAxMDI0KVxuJiM0MztcbiYjNDM7c3RhdGljIGNoYXIgKmFyZWE7XG4mIzQzO3N0YXRpYyBzaXplX3QgcG1kX3NpemU7XG4mIzQzO3N0YXRpYyBhdG9taWNfaW50IHN0b3A7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqcmFjZXIodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqcG1kMSA9IGFyZWEgJiM0MzsgcG1kX3NpemU7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChhdG9taWNfbG9hZF9leHBsaWNpdChcdTAwMjZzdG9wLCBtZW1vcnlfb3JkZXJfYWNxdWlyZSkgPT0gMCkge1xuJiM0MztcdFx0LyogbWFkdmlzZSgpIGJlbG93IGtlZXBzIHRoZSBjb21waWxlciBmcm9tIGxpZnRpbmcgdGhpcyBvdXQuICovXG4mIzQzO1x0XHQqcG1kMSA9IDE7XG4mIzQzO1x0XHRtYWR2aXNlKHBtZDEsIHBtZF9zaXplLCBNQURWX0RPTlRORUVEKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHNtYXBzX3Jzc19rYih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMTAyNF07XG4mIzQzO1x0Y2hhciAqZW50cnk7XG4mIzQzO1xuJiM0MztcdGVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhcmVhLCBcJiMzNDtSc3M6XCYjMzQ7LCBidWYsIHNpemVvZihidWYpKTtcbiYjNDM7XHRpZiAoIWVudHJ5KVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O25vIFJzczogZW50cnkgZm9yIHRoZSB0ZXN0IG1hcHBpbmdcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3RydG91bChlbnRyeSwgTlVMTCwgMTApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtYXhfcnNzX2tiLCByc3Nfa2IgPSAwO1xuJiM0MztcdHNpemVfdCBzaXplLCBwb3Bfc2l6ZSwgaTtcbiYjNDM7XHRwdGhyZWFkX3QgdGhyZWFkO1xuJiM0MztcdGNoYXIgKnJhdztcbiYjNDM7XG4mIzQzO1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XG4mIzQzO1x0cG1kX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcdGlmICghcG1kX3NpemUpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtDYW5ub3QgZGV0ZXJtaW5lIFBNRCBzaXplXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pIFx1MDAzYyAyKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7TmVlZCBhdCBsZWFzdCAyIENQVXMgdG8gcmFjZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHNpemUgPSBOUl9QTURTICogcG1kX3NpemU7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWxpZ24gdG8gdGhlIG1hcHBpbmcgc2l6ZSB0byBzdGF5IGluc2lkZSBvbmUgUFVELCB0aGVuIHRyaW0gdGhlXG4mIzQzO1x0ICogc2xhY2sgc28gdGhhdCBzbWFwcyBoYXMgZXhhY3RseSBvbmUgVk1BIHRvIHJlcG9ydC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyYXcgPSBtbWFwKE5VTEwsIDIgKiBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0ICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSwgLTEsIDApO1xuJiM0MztcdGlmIChyYXcgPT0gTUFQX0ZBSUxFRClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDttbWFwIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGFyZWEgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpcmF3ICYjNDM7IHNpemUgLSAxKSBcdTAwMjYgfihzaXplIC0gMSkpO1xuJiM0MztcdGlmIChhcmVhICE9IHJhdylcbiYjNDM7XHRcdG11bm1hcChyYXcsIGFyZWEgLSByYXcpO1xuJiM0MztcdGlmIChyYXcgJiM0MzsgMiAqIHNpemUgIT0gYXJlYSAmIzQzOyBzaXplKVxuJiM0MztcdFx0bXVubWFwKGFyZWEgJiM0Mzsgc2l6ZSwgcmF3ICYjNDM7IDIgKiBzaXplIC0gKGFyZWEgJiM0Mzsgc2l6ZSkpO1xuJiM0MztcbiYjNDM7XHQvKiBBIGh1Z2UgUE1EIG5ldmVyIHJlYWNoZXMgcHRlX29mZnNldF9tYXBfbG9jaygpLCBzbyBrZWVwIHRoZW0gb3V0LiAqL1xuJiM0MztcdGlmIChtYWR2aXNlKGFyZWEsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSkpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtNQURWX05PSFVHRVBBR0UgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cG9wX3NpemUgPSBwbWRfc2l6ZSBcdTAwM2MgUE9QX01BWCA/IHBtZF9zaXplIDogUE9QX01BWDtcbiYjNDM7XHRtZW1zZXQoYXJlYSwgMSwgcG9wX3NpemUpO1xuJiM0MztcbiYjNDM7XHRtYXhfcnNzX2tiID0gKHBvcF9zaXplIFx1MDAzZVx1MDAzZSAxMCkgJiM0MzsgMjU2O1xuJiM0MztcbiYjNDM7XHQvKiBPdmVyIHRoZSBsaW1pdCBiZWZvcmUgcmFjaW5nIG1lYW5zIHRoaXMgaXMgbm90IG91ciBvd24gbWFwcGluZy4gKi9cbiYjNDM7XHRyc3Nfa2IgPSBzbWFwc19yc3Nfa2IoKTtcbiYjNDM7XHRpZiAocnNzX2tiIFx1MDAzZSBtYXhfcnNzX2tiKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1JzcyBpcyAlbHUga0IgYmVmb3JlIHJhY2luZywgZXhwZWN0ZWQgYXQgbW9zdCAlbHUga0JcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgcnNzX2tiLCBtYXhfcnNzX2tiKTtcbiYjNDM7XG4mIzQzO1x0a3NmdF9zZXRfcGxhbigxKTtcbiYjNDM7XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtyYWNpbmcgc21hcHMgYWdhaW5zdCBNQURWX0RPTlRORUVELCAlZCByb3VuZHNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgTlJfUk9VTkRTKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgcmFjZXIsIE5VTEwpKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O3B0aHJlYWRfY3JlYXRlIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX1JPVU5EUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJzc19rYiA9IHNtYXBzX3Jzc19rYigpO1xuJiM0MztcdFx0aWYgKHJzc19rYiBcdTAwM2UgbWF4X3Jzc19rYilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhdG9taWNfc3RvcmVfZXhwbGljaXQoXHUwMDI2c3RvcCwgMSwgbWVtb3J5X29yZGVyX3JlbGVhc2UpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRpZiAoaSBcdTAwM2MgTlJfUk9VTkRTKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDt3YWxrIHJhbiB0d2ljZSBvdmVyIHRoZSBzYW1lIHJhbmdlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcJiMzNDtSc3MgJWx1IGtCIGV4Y2VlZHMgJWx1IGtCLCByb3VuZCAlenVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgcnNzX2tiLCBtYXhfcnNzX2tiLCBpKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFwmIzM0O1JzcyB3aXRoaW4gJWx1IGtCIG92ZXIgJWQgcm91bmRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgIG1heF9yc3Nfa2IsIE5SX1JPVU5EUyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrc2Z0X2V4aXQoaSA9PSBOUl9ST1VORFMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbmluZGV4IDhjMjk2ZGVkZjA0NzQuLmQ5MGM2MzcwODE0ZjcgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0zOTgsNiAmIzQzOzM5OCw4IEBAIGZpXG4gXG4gQ0FURUdPUlk9XCYjMzQ7cGFnZW1hcFwmIzM0OyBydW5fdGVzdCAuL3BhZ2VtYXBfaW9jdGxcbiBcbiYjNDM7Q0FURUdPUlk9XCYjMzQ7cGFnZXdhbGtcJiMzNDsgcnVuX3Rlc3QgLi9wYWdld2Fsa19yYWNlX3Rlc3RcbiYjNDM7XG4gQ0FURUdPUlk9XCYjMzQ7cGZubWFwXCYjMzQ7IHJ1bl90ZXN0IC4vcGZubWFwXG4gXG4gIyBDT1cgdGVzdHNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbmluZGV4IGVhOGZjOGZkZjBlYjAuLjYyMjkyZTI0MTdkMTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuQEAgLTg4LDYgJiM0Mzs4OCw3IEBAIGJvb2wgcGFnZW1hcF9pc19wb3B1bGF0ZWQoaW50IGZkLCBjaGFyICpzdGFydCk7XG4gdW5zaWduZWQgbG9uZyBwYWdlbWFwX2dldF9wZm4oaW50IGZkLCBjaGFyICpzdGFydCk7XG4gdm9pZCBjbGVhcl9zb2Z0ZGlydHkodm9pZCk7XG4gYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbiYjNDM7Y2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xuIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpO1xuIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZCk7XG4gYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTc6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O3dhbGtfcGFnZV92bWEmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX21hcHBpbmcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBjb3JlIE1NIHBhZ2Ugd2Fsa2luZyBsb2dpYyAod2Fsa19wbWRfcmFuZ2UsIHdhbGtfcHVkX3JhbmdlKSB3aGVyZSBhIHN0YWxlIHdhbGstXHUwMDNlYWN0aW9uIGNvdWxkIGNhdXNlIHRoZSBzYW1lIHJhbmdlIHRvIGJlIHdhbGtlZCB0d2ljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIChlLmcuLCB2aWEgL3Byb2MvcGlkL3NtYXBzIG9yIG1hZHZpc2UpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjcwMGQ2OTljZjM0N2Q0ZDA5MzEyZjhiZTM3MjY1YTZiNzMxNzA4ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDE3OjEwOjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmMKaW5kZXggNWQ4N2M2MzJhMjU1MC4uZDNiZmVjZTMxOTMzNiAxMDA2NDQKLS0tIGEvbW0vcGFnZXdhbGsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jCkBAIC0xMjYsNiAmIzQzOzEyNiw3IEBAIHN0YXRpYyBpbnQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CiAJZG8gewogYWdhaW46CiYjNDM7CQl3YWxrLSZndDthY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTsKIAkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocG1kX25vbmUoKnBtZCkpIHsKIAkJCWlmIChoYXNfaW5zdGFsbCkKQEAgLTEzOCw4ICYjNDM7MTM5LDYgQEAgc3RhdGljIGludCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCWNvbnRpbnVlOwogCQl9CiAKLQkJd2Fsay0mZ3Q7YWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7Ci0KIAkJLyoKIAkJICogVGhpcyBpbXBsaWVzIHRoYXQgZWFjaCAtJmd0O3BtZF9lbnRyeSgpIGhhbmRsZXIKIAkJICogbmVlZHMgdG8ga25vdyBhYm91dCBwbWRfdHJhbnNfaHVnZSgpIHBtZHMKQEAgLTE5Niw2ICYjNDM7MTk1LDcgQEAgc3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXB1ZCA9IHB1ZF9vZmZzZXQocDRkLCBhZGRyKTsKIAlkbyB7CiAgYWdhaW46CiYjNDM7CQl3YWxrLSZndDthY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTsKIAkJbmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocHVkX25vbmUoKnB1ZCkpIHsKIAkJCWlmIChoYXNfaW5zdGFsbCkKQEAgLTIwOCw4ICYjNDM7MjA4LDYgQEAgc3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCWNvbnRpbnVlOwogCQl9CiAKLQkJd2Fsay0mZ3Q7YWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7Ci0KIAkJaWYgKG9wcy0mZ3Q7cHVkX2VudHJ5KQogCQkJZXJyID0gb3BzLSZndDtwdWRfZW50cnkocHVkLCBhZGRyLCBuZXh0LCB3YWxrKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlCmluZGV4IDljY2Q5ZTE0NDdlNjYuLjkyZjk4MWY5Nzc0MGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZQpAQCAtNjYsMyAmIzQzOzY2LDQgQEAgbWVyZ2UKIHByY3RsX3RocF9kaXNhYmxlCiBybWFwCiBmb2xpb19zcGxpdF9yYWNlX3Rlc3QKJiM0MztwYWdld2Fsa19yYWNlX3Rlc3QKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKaW5kZXggZTZkZjk2OGYwOTcxYy4uY2RlOWIyMmYxMjFkNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKQEAgLTEwNSw2ICYjNDM7MTA1LDcgQEAgVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGd1YXJkLXJlZ2lvbnMKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBtZXJnZQogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IHJtYXAKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBmb2xpb19zcGxpdF9yYWNlX3Rlc3QKJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gcGFnZXdhbGtfcmFjZV90ZXN0CiAKIGlmbmVxICgkKEFSQ0gpLGFybTY0KQogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IHNvZnQtZGlydHkKQEAgLTE2Myw2ICYjNDM7MTY0LDcgQEAgVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9tbG9jay5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9tbWFwLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X21yZW1hcC5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wYWdlbWFwLnNoCiYjNDM7VEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wYWdld2Fsay5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wZm5tYXAuc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfcGtleS5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wcm9jZXNzX21hZHYuc2gKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfcGFnZXdhbGsuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X3BhZ2V3YWxrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAuLjZmNmMzZWUxYzEzZWYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X3BhZ2V3YWxrLnNoCkBAIC0wLDAgJiM0MzsxLDQgQEAKJiM0MzsjIS9iaW4vc2ggLWUKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7Li9ydW5fdm10ZXN0cy5zaCAtdCBwYWdld2FsawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZXdhbGtfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdld2Fsa19yYWNlX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi40MmZkNmU3NWU4MjFlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZXdhbGtfcmFjZV90ZXN0LmMKQEAgLTAsMCAmIzQzOzEsMTM4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBzdGFsZSB3YWxrLSZndDthY3Rpb24gZXNjYXBpbmcgd2Fsa19wbWRfcmFuZ2UoKSBhbmQKJiM0MzsgKiBtYWtpbmcgd2Fsa19wdWRfcmFuZ2UoKSB3YWxrIHRoZSBzYW1lIHJhbmdlIHR3aWNlLgomIzQzOyAqCiYjNDM7ICogVGhlIG1hcHBpbmcgaXMgdHdvIFBNRHMgaW5zaWRlIG9uZSBQVUQuIFBNRCAwIGlzIHBvcHVsYXRlZCBvbmNlIGFuZCBsZWZ0CiYjNDM7ICogYWxvbmUsIFBNRCAxIGlzIGZhdWx0ZWQgaW4gYW5kIGRyb3BwZWQgYWdhaW4gYnkgYSBzZWNvbmQgdGhyZWFkLiBDbGVhcmluZwomIzQzOyAqIFBNRCAxIHVuZGVyIHNtYXBzX3B0ZV9yYW5nZSgpIG1ha2VzIGl0IHJhaXNlIEFDVElPTl9BR0FJTiwgYW5kIHNpbmNlIGl0IGlzCiYjNDM7ICogdGhlIGxhc3QgZW50cnkgdGhlIHN0YWxlIHZhbHVlIGxlYXZlcyB3YWxrX3BtZF9yYW5nZSgpLCBzbyBzbWFwcyBhY2NvdW50cwomIzQzOyAqIFBNRCAwIHR3aWNlLiBBIGtlcm5lbCB0aGF0IGRvZXMgbm90IHJlY2xhaW0gdGhlIGVtcHRpZWQgcGFnZSB0YWJsZSBuZXZlcgomIzQzOyAqIGNsZWFycyBQTUQgMSBhbmQgc28gbmV2ZXIgaGl0cyB0aGUgcmFjZS4KJiM0MzsgKgomIzQzOyAqIEEgaGl0IGNhbiBvbmx5IGNvbWUgZnJvbSB0aGUga2VybmVsIGNvdW50aW5nIHRoZSBzYW1lIHBhZ2UgdHdpY2UsIHNvIHRoZQomIzQzOyAqIHRlc3QgY2Fubm90IGZhaWwgc3B1cmlvdXNseS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3B0aHJlYWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYXRvbWljLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlJfUE1EUwkJMgomIzQzOyNkZWZpbmUgTlJfUk9VTkRTCTIwMDAwCiYjNDM7LyogQ2FwIG9uIGhvdyBtdWNoIG9mIFBNRCAwIHRvIGZhdWx0IGluLCBzbyB0aGF0IGEgbGFyZ2UgUE1EIHN0YXlzIGNoZWFwLiAqLwomIzQzOyNkZWZpbmUgUE9QX01BWAkJKDIgKiAxMDI0ICogMTAyNCkKJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqYXJlYTsKJiM0MztzdGF0aWMgc2l6ZV90IHBtZF9zaXplOwomIzQzO3N0YXRpYyBhdG9taWNfaW50IHN0b3A7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnJhY2VyKHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CWNoYXIgKnBtZDEgPSBhcmVhICYjNDM7IHBtZF9zaXplOwomIzQzOwomIzQzOwl3aGlsZSAoYXRvbWljX2xvYWRfZXhwbGljaXQoJmFtcDtzdG9wLCBtZW1vcnlfb3JkZXJfYWNxdWlyZSkgPT0gMCkgewomIzQzOwkJLyogbWFkdmlzZSgpIGJlbG93IGtlZXBzIHRoZSBjb21waWxlciBmcm9tIGxpZnRpbmcgdGhpcyBvdXQuICovCiYjNDM7CQkqcG1kMSA9IDE7CiYjNDM7CQltYWR2aXNlKHBtZDEsIHBtZF9zaXplLCBNQURWX0RPTlRORUVEKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc21hcHNfcnNzX2tiKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlsxMDI0XTsKJiM0MzsJY2hhciAqZW50cnk7CiYjNDM7CiYjNDM7CWVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhcmVhLCAmIzM0O1JzczomIzM0OywgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CWlmICghZW50cnkpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtubyBSc3M6IGVudHJ5IGZvciB0aGUgdGVzdCBtYXBwaW5nXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiBzdHJ0b3VsKGVudHJ5LCBOVUxMLCAxMCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKHZvaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIG1heF9yc3Nfa2IsIHJzc19rYiA9IDA7CiYjNDM7CXNpemVfdCBzaXplLCBwb3Bfc2l6ZSwgaTsKJiM0MzsJcHRocmVhZF90IHRocmVhZDsKJiM0MzsJY2hhciAqcmF3OwomIzQzOwomIzQzOwlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwomIzQzOwlwbWRfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CWlmICghcG1kX3NpemUpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O0Nhbm5vdCBkZXRlcm1pbmUgUE1EIHNpemVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pICZsdDsgMikKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7TmVlZCBhdCBsZWFzdCAyIENQVXMgdG8gcmFjZVxuJiMzNDspOwomIzQzOwomIzQzOwlzaXplID0gTlJfUE1EUyAqIHBtZF9zaXplOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBbGlnbiB0byB0aGUgbWFwcGluZyBzaXplIHRvIHN0YXkgaW5zaWRlIG9uZSBQVUQsIHRoZW4gdHJpbSB0aGUKJiM0MzsJICogc2xhY2sgc28gdGhhdCBzbWFwcyBoYXMgZXhhY3RseSBvbmUgVk1BIHRvIHJlcG9ydC4KJiM0MzsJICovCiYjNDM7CXJhdyA9IG1tYXAoTlVMTCwgMiAqIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFLCAtMSwgMCk7CiYjNDM7CWlmIChyYXcgPT0gTUFQX0ZBSUxFRCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O21tYXAgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWFyZWEgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpcmF3ICYjNDM7IHNpemUgLSAxKSAmYW1wOyB+KHNpemUgLSAxKSk7CiYjNDM7CWlmIChhcmVhICE9IHJhdykKJiM0MzsJCW11bm1hcChyYXcsIGFyZWEgLSByYXcpOwomIzQzOwlpZiAocmF3ICYjNDM7IDIgKiBzaXplICE9IGFyZWEgJiM0Mzsgc2l6ZSkKJiM0MzsJCW11bm1hcChhcmVhICYjNDM7IHNpemUsIHJhdyAmIzQzOyAyICogc2l6ZSAtIChhcmVhICYjNDM7IHNpemUpKTsKJiM0MzsKJiM0MzsJLyogQSBodWdlIFBNRCBuZXZlciByZWFjaGVzIHB0ZV9vZmZzZXRfbWFwX2xvY2soKSwgc28ga2VlcCB0aGVtIG91dC4gKi8KJiM0MzsJaWYgKG1hZHZpc2UoYXJlYSwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKSkKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7TUFEVl9OT0hVR0VQQUdFIGZhaWxlZFxuJiMzNDspOwomIzQzOwomIzQzOwlwb3Bfc2l6ZSA9IHBtZF9zaXplICZsdDsgUE9QX01BWCA/IHBtZF9zaXplIDogUE9QX01BWDsKJiM0MzsJbWVtc2V0KGFyZWEsIDEsIHBvcF9zaXplKTsKJiM0MzsKJiM0MzsJbWF4X3Jzc19rYiA9IChwb3Bfc2l6ZSAmZ3Q7Jmd0OyAxMCkgJiM0MzsgMjU2OwomIzQzOwomIzQzOwkvKiBPdmVyIHRoZSBsaW1pdCBiZWZvcmUgcmFjaW5nIG1lYW5zIHRoaXMgaXMgbm90IG91ciBvd24gbWFwcGluZy4gKi8KJiM0MzsJcnNzX2tiID0gc21hcHNfcnNzX2tiKCk7CiYjNDM7CWlmIChyc3Nfa2IgJmd0OyBtYXhfcnNzX2tiKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7UnNzIGlzICVsdSBrQiBiZWZvcmUgcmFjaW5nLCBleHBlY3RlZCBhdCBtb3N0ICVsdSBrQlxuJiMzNDssCiYjNDM7CQkJCSAgIHJzc19rYiwgbWF4X3Jzc19rYik7CiYjNDM7CiYjNDM7CWtzZnRfc2V0X3BsYW4oMSk7CiYjNDM7CWtzZnRfcHJpbnRfbXNnKCYjMzQ7cmFjaW5nIHNtYXBzIGFnYWluc3QgTUFEVl9ET05UTkVFRCwgJWQgcm91bmRzXG4mIzM0OywKJiM0MzsJCSAgICAgICBOUl9ST1VORFMpOwomIzQzOwomIzQzOwlpZiAocHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWQsIE5VTEwsIHJhY2VyLCBOVUxMKSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3B0aHJlYWRfY3JlYXRlIGZhaWxlZFxuJiMzNDspOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTlJfUk9VTkRTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcnNzX2tiID0gc21hcHNfcnNzX2tiKCk7CiYjNDM7CQlpZiAocnNzX2tiICZndDsgbWF4X3Jzc19rYikKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlhdG9taWNfc3RvcmVfZXhwbGljaXQoJmFtcDtzdG9wLCAxLCBtZW1vcnlfb3JkZXJfcmVsZWFzZSk7CiYjNDM7CXB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpOwomIzQzOwomIzQzOwlpZiAoaSAmbHQ7IE5SX1JPVU5EUykgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDt3YWxrIHJhbiB0d2ljZSBvdmVyIHRoZSBzYW1lIHJhbmdlXG4mIzM0Oyk7CiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoJiMzNDtSc3MgJWx1IGtCIGV4Y2VlZHMgJWx1IGtCLCByb3VuZCAlenVcbiYjMzQ7LAomIzQzOwkJCQkgICAgICByc3Nfa2IsIG1heF9yc3Nfa2IsIGkpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCYjMzQ7UnNzIHdpdGhpbiAlbHUga0Igb3ZlciAlZCByb3VuZHNcbiYjMzQ7LAomIzQzOwkJCQkgICAgICBtYXhfcnNzX2tiLCBOUl9ST1VORFMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtzZnRfZXhpdChpID09IE5SX1JPVU5EUyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKaW5kZXggOGMyOTZkZWRmMDQ3NC4uZDkwYzYzNzA4MTRmNyAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKQEAgLTM5OCw2ICYjNDM7Mzk4LDggQEAgZmkKIAogQ0FURUdPUlk9JiMzNDtwYWdlbWFwJiMzNDsgcnVuX3Rlc3QgLi9wYWdlbWFwX2lvY3RsCiAKJiM0MztDQVRFR09SWT0mIzM0O3BhZ2V3YWxrJiMzNDsgcnVuX3Rlc3QgLi9wYWdld2Fsa19yYWNlX3Rlc3QKJiM0MzsKIENBVEVHT1JZPSYjMzQ7cGZubWFwJiMzNDsgcnVuX3Rlc3QgLi9wZm5tYXAKIAogIyBDT1cgdGVzdHMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAppbmRleCBlYThmYzhmZGYwZWIwLi42MjI5MmUyNDE3ZDE2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCkBAIC04OCw2ICYjNDM7ODgsNyBAQCBib29sIHBhZ2VtYXBfaXNfcG9wdWxhdGVkKGludCBmZCwgY2hhciAqc3RhcnQpOwogdW5zaWduZWQgbG9uZyBwYWdlbWFwX2dldF9wZm4oaW50IGZkLCBjaGFyICpzdGFydCk7CiB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTsKIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CiYjNDM7Y2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pOwogdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7CiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpOwogYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwODgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGluIGBtbS9wYWdld2Fsay5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHNvbWV0aGluZyBmdW5kYW1lbnRhbCB3aXRoaW4gYG1tL3BhZ2V3YWxrLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlJiMzOTtzIG1vZGlmeWluZyB0aGUgbG9jYXRpb24gb2YgYHdhbGstJmd0O2FjdGlvbiA9IEFDVElPTl9TVUJUUkVFO2Agd2l0aGluIGB3YWxrX3BtZF9yYW5nZWAgYW5kIGB3YWxrX3B1ZF9yYW5nZWAuIE1vdmluZyBpdCAqaW5zaWRlKiB0aGUgYGRvIHsgYWdhaW46IC4uLiB9YCBsb29wIGlzIHByZXR0eSB0ZWxsaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBpbnRlbmRlZCB0byBhZGRyZXNzIHNvbWUga2luZCBvZiByYWNlIGNvbmRpdGlvbiwgd2hlcmUgdGhlIGB3YWxrLSZndDthY3Rpb25gIHZhcmlhYmxlIG1pZ2h0IGJlIGhvbGRpbmcgb250byBhIHN0YWxlIHZhbHVl4oCUcGVyaGFwcyBgQUNUSU9OX0FHQUlOYOKAlGFuZCBlc2NhcGluZyB0aGUgZnVuY3Rpb24sIHVsdGltYXRlbHkgbGVhZGluZyB0byBhIHJlZHVuZGFudCB3YWxrIG9mIHRoZSBzYW1lIG1lbW9yeSByYW5nZSBieSB0aGUgY2FsbGVyLiBDbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlLgoKSSYjMzk7bGwgZG91YmxlLWNoZWNrIGV4YWN0bHkgd2hpY2ggZnVuY3Rpb25zIGFyZSBhZmZlY3RlZC4gTG9va3MgbGlrZSB0aGUgY29yZSBjaGFuZ2VzIGFyZSBpbiB0aGUgYHdhbGtfcG1kX3JhbmdlYCBhbmQgYHdhbGtfcHVkX3JhbmdlYCBmdW5jdGlvbnMsIGJvdGggb2Ygd2hpY2ggSSBrbm93IGFyZSBzdGF0aWMgd2l0aGluIHRoYXQgZmlsZS4gUmlnaHQsIGFuZCB0aGUgb3RoZXIgZW50cnkgcG9pbnRzIHRvIHRoaXMgY29kZSBhcmUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGxpa2UgYHdhbGtfcGFnZV9yYW5nZWAsIGB3YWxrX3BhZ2VfcmFuZ2Vfbm92bWFgLCBgd2Fsa19wYWdlX3ZtYWAsIGFuZCBgd2Fsa19wYWdlX21hcHBpbmdgLiBJIHNob3VsZCBwcm9iYWJseSBmYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aG9zZSBhcyB3ZWxsLCBzbyBJIGNhbiBzZWUgd2hhdCB0aGV5JiMzOTtyZSBjYWxsaW5nLiBMZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIGdldCBhIGxpc3Qgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCB3aG8mIzM5O3MgY2FsbGluZyB0aGVtLiBUaGlzJiMzOTtsbCBoZWxwIG1lIHB1dCB0aGlzIGZpeCBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgYW5kIHRydWx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkKS4qd2Fsa19wYWdlXy4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZXdhbGsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdld2Fsay5jPTQ0ND1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc192bWFfd2Fsa19sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3BhZ2V3YWxrLmMtNDcxLSAqL1xubW0vcGFnZXdhbGsuYzo0NzI6aW50IHdhbGtfcGFnZV9yYW5nZV9tbV91bnNhZmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9wYWdld2Fsay5jLTQ3My1cdFx0dW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLFxuLS1cbm1tL3BhZ2V3YWxrLmM9NTQxPXN0YXRpYyBib29sIGNoZWNrX29wc19zYWZlKGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzKVxuLS1cbm1tL3BhZ2V3YWxrLmMtNTk0LSAqL1xubW0vcGFnZXdhbGsuYzo1OTU6aW50IHdhbGtfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL3BhZ2V3YWxrLmMtNTk2LVx0XHR1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG4tLVxubW0vcGFnZXdhbGsuYz02NDY9aW50IHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2VfbG9ja2xlc3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vcGFnZXdhbGsuYy02ODEtICovXG5tbS9wYWdld2Fsay5jOjY4MjppbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vcGFnZXdhbGsuYy02ODMtXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG4tLVxubW0vcGFnZXdhbGsuYy03MTktXG5tbS9wYWdld2Fsay5jOjcyMDppbnQgd2Fsa19wYWdlX3JhbmdlX3ZtYV91bnNhZmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9wYWdld2Fsay5jLTcyMS1cdFx0dW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLCB2b2lkICpwcml2YXRlKVxuLS1cbm1tL3BhZ2V3YWxrLmMtNzM5LVxubW0vcGFnZXdhbGsuYzo3NDA6aW50IHdhbGtfcGFnZV9yYW5nZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9wYWdld2Fsay5jLTc0MS1cdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG4tLVxubW0vcGFnZXdhbGsuYy03NDktXG5tbS9wYWdld2Fsay5jOjc1MDppbnQgd2Fsa19wYWdlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG5tbS9wYWdld2Fsay5jLTc1MS1cdFx0dm9pZCAqcHJpdmF0ZSlcbi0tXG5tbS9wYWdld2Fsay5jLTc5OS0gKi9cbm1tL3BhZ2V3YWxrLmM6ODAwOmludCB3YWxrX3BhZ2VfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBmaXJzdF9pbmRleCxcbm1tL3BhZ2V3YWxrLmMtODAxLVx0XHQgICAgICBwZ29mZl90IG5yLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzI2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uICZhbXA7IFBhdGNoIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCB3YWxrIGZ1bmN0aW9uczogYHdhbGtfcGFnZV9yYW5nZWAsIGB3YWxrX3BhZ2VfcmFuZ2VfbW1fdW5zYWZlYCwgYHdhbGtfcGFnZV9yYW5nZV92bWFgLCBgd2Fsa19wYWdlX3JhbmdlX3ZtYV91bnNhZmVgLCBgd2Fsa19wYWdlX3ZtYWAsIGFuZCBgd2Fsa19wYWdlX21hcHBpbmdgLiBUaGV5IHNlZW0gbGlrZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGVpciByb2xlcyBpbiBwYWdlIHRhYmxlIHRyYXZlcnNhbC4gVGhleSYjMzk7cmUgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHJlcHJlc2VudCBjcnVjaWFsIGFyZWFzIG9mIHRoZSBrZXJuZWwgTU0gc3Vic3lzdGVtLgoKVGhpcyBwYXRjaCwgYXBwYXJlbnRseSwgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHN0YWxlIHZhbHVlIGlzc3VlIHdpdGggYHdhbGstJmd0O2FjdGlvbmAuIFNwZWNpZmljYWxseSwgaWYgSSB1bmRlcnN0YW5kIGl0IGNvcnJlY3RseSwgdGhlcmUgd2FzIGEgYnVnIHdoZXJlIHRoZSBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkIGR1cmluZyB0aGUgd2FsayBjb3VsZCBiZSBsZWZ0IHdpdGggaW5jb3JyZWN0IGRhdGEsIHdoaWNoIHdvdWxkIHRoZW4gY2F1c2UgdGhlIHdhbGsgdG8gcmVwZWF0LCBjYXVzaW5nIGFuIGluZGVmaW5pdGUgbG9vcCBvciBkYXRhIGNvcnJ1cHRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGJ1ZyBmaXguIFRoaXMgbmVlZHMgdGhvcm91Z2ggdGVzdGluZy4KCk5vdywgYmVmb3JlIEkgZGlnIGluIHRvbyBkZWVwLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgZnVuY3Rpb25zLCBvciB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGVtLCByZXF1aXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMuIE15IHJlY29sbGVjdGlvbiBpcyB0aGF0IGBtbS9wYWdld2Fsay5jYCBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIGJ1dCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSBxdWljayBjaGVjayB0byBydWxlIG91dCBhbnkgYnVpbGQtdGltZSBjb25kaXRpb25hbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2V3YWxrLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0zNz1tbXUtJChDT05GSUdfTU1VKVx0Oj0gaGlnaG1lbS5vIG1lbW9yeS5vIG1pbmNvcmUubyBcXFxubW0vTWFrZWZpbGUtMzgtXHRcdFx0ICAgbWxvY2subyBtbWFwLm8gbW11X2dhdGhlci5vIG1wcm90ZWN0Lm8gbXJlbWFwLm8gXFxcbm1tL01ha2VmaWxlOjM5Olx0XHRcdCAgIG1zeW5jLm8gcGFnZV92bWFfbWFwcGVkLm8gcGFnZXdhbGsubyBcXFxubW0vTWFrZWZpbGUtNDAtXHRcdFx0ICAgcGd0YWJsZS1nZW5lcmljLm8gcm1hcC5vIHZtYWxsb2MubyB2bWEubyB2bWFfZXhlYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg5NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqUGFnZSBUYWJsZSBXYWxrZXIgU3RyYXRlZ3kgUmV2aWV3KioKCkFscmlnaHQsIHNvIHRoZSBzdGFuZGFyZCBrZXJuZWwgY29uZmlndXJhdGlvbiwgd2l0aCBgQ09ORklHX01NVWAgc2V0LCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY29tcGlsZWQgZW52aXJvbm1lbnQgd2hlcmUgdGhlIHBhZ2UgdGFibGUgd2Fsa2VycyBhcmUgYWN0aXZlLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGFzc3VtcHRpb24gSSB3b3JrIGZyb20uIE5vdywgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgbWVjaGFuaXNtcy4KCk15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzLiBJJiMzOTttIHRoaW5raW5nOiBgd2Fsa19wYWdlX3JhbmdlYCwgYHdhbGtfcGFnZV92bWFgLCBhbmQgYHdhbGtfcGFnZV9tYXBwaW5nYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyDigJMgdGhlIHN0YXJ0aW5nIHBvaW50cyBmb3IgdHJhdmVyc2luZyB0aGUgcGFnZSB0YWJsZXMgdW5kZXIgdmFyaW91cyBjb25kaXRpb25zLiBUaGV5JiMzOTtyZSB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0aGUgZ2VuZXJhbCBjb250cm9sIGZsb3cgdG8gYmVnaW4uCgpCZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvIHRob3NlIHRocmVlLCBpdCBtYWtlcyBzZW5zZSB0byBnbyBvdmVyIHRoZSBgd2Fsa19wYWdlX3JhbmdlX3ZtYWAgYW5kIGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hX3Vuc2FmZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1YnRsZSBpbnRlcmFjdGlvbnMgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZWRnZSBjYXNlcyBpbiB0aGUgcmFuZ2UtYmFzZWQgd2Fsa2Vycy4gVGhlc2Ugc2hvdWxkIHBsYXkgdGhlIHJvbGUgSSBhc3N1bWUgYW5kIEkgc2hvdWxkIGJlIGF3YXJlIGlmIHRoZSBgX3Vuc2FmZWAgZnVuY3Rpb24gcmVxdWlyZXMgZnVydGhlciBhbmFseXNpcyBkdWUgdG8gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwod2Fsa19wYWdlXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2V3YWxrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE3OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyODkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgRVhQT1JUX1NZTUJPTGAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byBzaW1wbHkgKmNoZWNrKiBgRVhQT1JUX1NZTUJPTGAuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZ1bmN0aW9ucy4gV2hhdCBhcmUgaXRzIGltcGxpY2F0aW9ucyBmb3Igc3ltYm9sIHZpc2liaWxpdHk/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gSXMgdGhpcyByZWxhdGVkIHRvIGtlcm5lbCBtb2R1bGUgZGV2ZWxvcG1lbnQsIG9yIGFyZSB3ZSBsb29raW5nIGF0IHNvbWV0aGluZyBlbHNlPyBJIG5lZWQgdG8gY2xhcmlmeSB3aGF0IHByb2JsZW0gb3Igc3BlY2lmaWMgYXNwZWN0IHJlcXVpcmVzIGF0dGVudGlvbiB3aXRoaW4gdGhlIHJlYWxtIG9mIHRoZSBgRVhQT1JUX1NZTUJPTGAgbWFjcm8uIElzIHRoZXJlIGEgc3VzcGVjdGVkIGlzc3VlIG9yIGlzIHRoaXMgc2ltcGx5IGZvciBnZW5lcmFsIGFuYWx5c2lzPyBUaW1lIHRvIGFzc2VzcyB3aGF0IGV4YWN0bHkgbmVlZHMgY2hlY2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qXFwod2Fsa19wYWdlXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2V3YWxrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDk1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEJlZm9yZSBJIHN0YXJ0IGRvd24gYSBwb3RlbnRpYWxseSByYWJiaXQgaG9sZSwgbGV0JiMzOTtzIHRha2UgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIHdpdGhpbiBgbW0vcGFnZXdhbGsuY2AgZm9yIGBFWFBPUlRfU1lNQk9MYC4gVGhhdCBtYWNybyBpcyBhIGtleSBpbmRpY2F0b3IsIHJpZ2h0PyBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCYjMzk7cyBzeW1ib2wgZXhwb3J0IG1lY2hhbmlzbS4gRmluZGluZyB3aGVyZSBpdCYjMzk7cyB1c2VkIGluIHRoYXQgc3BlY2lmaWMgZmlsZeKAlHJlbGF0ZWQgdG8gcGFnZSB0YWJsZSB3YWxraW5nLCB3aGljaCBpcyBteSBpbW1lZGlhdGUgYXJlYSBvZiBpbnRlcmVzdOKAlGNvdWxkIGJlIHRoZSBxdWlja2VzdCB3YXkgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZSwgdGhlIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBiZWluZyBleHBvc2VkLCBvciB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gcGFnZXdhbGsgdGhhdCBhcmUgYmVpbmcgbWFkZSBhdmFpbGFibGUgZm9yIHVzZSBieSBrZXJuZWwgbW9kdWxlcy4gSXQmIzM5O2xsIGdpdmUgbWUgYSBkaXJlY3QgbGluZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIEkgbmVlZCwgd2l0aG91dCB1bm5lY2Vzc2FyeSBicm9hZGVyIGV4cGxvcmF0aW9uIG9mIHBvdGVudGlhbGx5IGlycmVsZXZhbnQgY29kZSBwYXRocy4gVGhpcyBkaXJlY3Qgc2VhcmNoIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gYSB2YWd1ZSBrZXl3b3JkIHNlYXJjaCwgb3IganVzdCByYW5kb21seSBsb29raW5nIGF0IHRoZSBmaWxlcy4gSXQmIzM5O3MgdGhlIG1vc3QgcHJhZ21hdGljIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2V3YWxrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzY5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW50ZXJuYWwgS2VybmVsIERhdGEgU3RydWN0dXJlczogTXkgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGNvbnNpZGVyaW5nIHRoZXNlICYjMzQ7dGhpbmdzLCYjMzQ7IGFuZCB3aGlsZSB0aGV5IG1pZ2h0IG5vdCBiZSBkaXJlY3RseSBleHBvcnRlZCBmb3IgZXh0ZXJuYWwgdXNlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhleSYjMzk7cmUgKmFic29sdXRlbHkqIGZ1bmRhbWVudGFsIGFuZCB1c2VkIGludGVybmFsbHkgYnkgYSB2YXN0IG51bWJlciBvZiBrZXJuZWwgc3Vic3lzdGVtcy4gVGhpbmsgcHJvY2ZzLCBgbWFkdmlzZWAsIGFsbCB0aG9zZSBjb3JlIGNvbXBvbmVudHMg4oCTIHRoZXkgcmVseSBvbiB0aGlzLgoKUmlnaHQsIHRpbWUgdG8gY2hlY2sgaWYgdGhleSYjMzk7cmUgc3RhdGljLiBJZiB0aGV5IGFyZSwgdGhhdCB3b3VsZCBsaW1pdCB0aGVpciBzY29wZSBzaWduaWZpY2FudGx5LiBMZXQmIzM5O3Mgc2VlLi4uIHllcCwgZGVmaW5pdGVseSBub24tc3RhdGljLiBHb29kLiBUaGF0IGV4cGFuZHMgdGhlIHBvc3NpYmlsaXRpZXMgYW5kIGhvdyB0aGV5IG1pZ2h0IGJlIG1hbmFnZWQgd2l0aGluIHRoZSBrZXJuZWwuCgpOZXh0LCBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGB3YWxrX3BhZ2VfcmFuZ2VgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgdGhpbmdzIGFyZSBhY3R1YWxseSAqdXNlZCogYW5kIGludGVyYWN0ZWQgd2l0aCBvbiBhIGdyYW51bGFyIGxldmVsLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGRlZXBlciB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHdhbGtfcGFnZV9yYW5nZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2V3YWxrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZXdhbGsuYz01NDE9c3RhdGljIGJvb2wgY2hlY2tfb3BzX3NhZmUoY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMpXG4tLVxubW0vcGFnZXdhbGsuYy01OTQtICovXG5tbS9wYWdld2Fsay5jOjU5NTppbnQgd2Fsa19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vcGFnZXdhbGsuYy01OTYtXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTc6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE1MwoJCQkJCQkJb3V0cHV0OiAxMzAKCQkJCQkJCXRob3VnaHRzOiAyNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGNsZWFybHkgYWRkcmVzc2VzIHNvbWV0aGluZyBub24tc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0JiMzOTtzIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgY29yZSBNTSBwYWdlIHdhbGtpbmcgZnVuY3Rpb25zIOKAkyBzcGVjaWZpY2FsbHksIGB3YWxrX3BtZF9yYW5nZWAgYW5kIGB3YWxrX3B1ZF9yYW5nZWAuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhLCBwb3RlbnRpYWxseSBhZmZlY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYWNyb3NzIHRoZSBib2FyZC4gVGhlIHRlc3QgY2FzZSBpbnZvbHZpbmcgYC9wcm9jL3BpZC9zbWFwc2AgdGVsbHMgbWUgdGhhdCB0aGlzIGZpeCBsaWtlbHkgdG91Y2hlcyBgc21hcHNfcHRlX3JhbmdlYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgdGhyb3VnaCBlaXRoZXIgYHdhbGtfcGFnZV92bWFgIG9yIGB3YWxrX3BhZ2VfcmFuZ2VgLgoKTXkgZm9jdXMgaXMgc2hhcnBlbmluZyBvbiB0aG9zZSBrZXkgc3ltYm9sczogYHdhbGtfcGFnZV9yYW5nZWAsIGB3YWxrX3BhZ2Vfdm1hYCwgYW5kIGB3YWxrX3BhZ2VfbWFwcGluZ2AuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBleGFtaW5lLgoKTm8gc3BlY2lhbCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLCB0aGFua2Z1bGx5IOKAkyBqdXN0IGEgc3RhbmRhcmQgTU1VLCBtZWFuaW5nIHRoaXMgaXMgYnJvYWRseSBhcHBsaWNhYmxlLgoKU28sIHN1bW1pbmcgdGhpcyB1cCBmb3IgbXlzZWxmLCBJJiMzOTtkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgJiMzNDtXb3J0aEZ1enppbmcuJiMzNDsgVGhlIGZvY3VzIHN5bWJvbHMgYXJlIGB3YWxrX3BhZ2VfcmFuZ2VgLCBgd2Fsa19wYWdlX3ZtYWAsIGFuZCBgd2Fsa19wYWdlX21hcHBpbmdgLiBUaGVyZSBhcmUgbm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgbmVlZGVkLCBhIHdpbiBmb3IgbWUuIFRoZSByZWFzb25pbmc/IFRoZSBwYXRjaCBwcmV2ZW50cyBhIHJhY2UgY29uZGl0aW9uIGluIGZ1bmRhbWVudGFsIHBhZ2Ugd2Fsa2luZyBsb2dpYy4gQSBzdGFsZSBgd2Fsay0mZ3Q7YWN0aW9uYCB2YXJpYWJsZSBjb3VsZCBsZWFkIHRvIGRvdWJsZS13YWxraW5nIHRoZSBzYW1lIG1lbW9yeSByYW5nZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGJ5IHRoaW5ncyBsaWtlIGAvcHJvYy9waWQvc21hcHNgIG9yIHN5c3RlbSBjYWxscyBsaWtlIGBtYWR2aXNlYC4gVGhpcyBjb21iaW5hdGlvbiBzY3JlYW1zICYjMzQ7dnVsbmVyYWJpbGl0eSBwb3RlbnRpYWwmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dhbGtfcGFnZV9yYW5nZSYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2Vfdm1hJiMzNDssCiAgICAmIzM0O3dhbGtfcGFnZV9tYXBwaW5nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gY29yZSBNTSBwYWdlIHdhbGtpbmcgbG9naWMgKHdhbGtfcG1kX3JhbmdlLCB3YWxrX3B1ZF9yYW5nZSkgd2hlcmUgYSBzdGFsZSB3YWxrLVx1MDAzZWFjdGlvbiBjb3VsZCBjYXVzZSB0aGUgc2FtZSByYW5nZSB0byBiZSB3YWxrZWQgdHdpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAoZS5nLiwgdmlhIC9wcm9jL3BpZC9zbWFwcyBvciBtYWR2aXNlKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3YWxrX3BhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX3ZtYSYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2VfbWFwcGluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvcmUgTU0gcGFnZSB3YWxraW5nIGxvZ2ljICh3YWxrX3BtZF9yYW5nZSwgd2Fsa19wdWRfcmFuZ2UpIHdoZXJlIGEgc3RhbGUgd2Fsay1cdTAwM2VhY3Rpb24gY291bGQgY2F1c2UgdGhlIHNhbWUgcmFuZ2UgdG8gYmUgd2Fsa2VkIHR3aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgKGUuZy4sIHZpYSAvcHJvYy9waWQvc21hcHMgb3IgbWFkdmlzZSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE3OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTc6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIHBhZ2UgdGFibGUgd2Fsa2VyIChgbW0vcGFnZXdhbGsuY2ApIHdoZXJlIGEgc3RhbGUgYHdhbGstXHUwMDNlYWN0aW9uYCAoZS5nLiwgYEFDVElPTl9BR0FJTmApIGNvdWxkIGVzY2FwZSBhIGxvd2VyLWxldmVsIHdhbGsgZnVuY3Rpb24gYW5kIGNhdXNlIHRoZSBoaWdoZXItbGV2ZWwgd2FsayBmdW5jdGlvbiB0byBpbmNvcnJlY3RseSByZXBlYXQgdGhlIHdhbGsgb3ZlciB0aGUgc2FtZSByYW5nZS4gVGhlIGZpeCBzaW1wbHkgbW92ZXMgdGhlIGFzc2lnbm1lbnQgYHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7YCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjcwMGQ2OTljZjM0N2Q0ZDA5MzEyZjhiZTM3MjY1YTZiNzMxNzA4ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDE3OjEwOjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmMKaW5kZXggNWQ4N2M2MzJhMjU1MC4uZDNiZmVjZTMxOTMzNiAxMDA2NDQKLS0tIGEvbW0vcGFnZXdhbGsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jCkBAIC0xMjYsNiAmIzQzOzEyNiw3IEBAIHN0YXRpYyBpbnQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CiAJZG8gewogYWdhaW46CiYjNDM7CQl3YWxrLSZndDthY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTsKIAkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocG1kX25vbmUoKnBtZCkpIHsKIAkJCWlmIChoYXNfaW5zdGFsbCkKQEAgLTEzOCw4ICYjNDM7MTM5LDYgQEAgc3RhdGljIGludCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCWNvbnRpbnVlOwogCQl9CiAKLQkJd2Fsay0mZ3Q7YWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7Ci0KIAkJLyoKIAkJICogVGhpcyBpbXBsaWVzIHRoYXQgZWFjaCAtJmd0O3BtZF9lbnRyeSgpIGhhbmRsZXIKIAkJICogbmVlZHMgdG8ga25vdyBhYm91dCBwbWRfdHJhbnNfaHVnZSgpIHBtZHMKQEAgLTE5Niw2ICYjNDM7MTk1LDcgQEAgc3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXB1ZCA9IHB1ZF9vZmZzZXQocDRkLCBhZGRyKTsKIAlkbyB7CiAgYWdhaW46CiYjNDM7CQl3YWxrLSZndDthY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTsKIAkJbmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocHVkX25vbmUoKnB1ZCkpIHsKIAkJCWlmIChoYXNfaW5zdGFsbCkKQEAgLTIwOCw4ICYjNDM7MjA4LDYgQEAgc3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCWNvbnRpbnVlOwogCQl9CiAKLQkJd2Fsay0mZ3Q7YWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7Ci0KIAkJaWYgKG9wcy0mZ3Q7cHVkX2VudHJ5KQogCQkJZXJyID0gb3BzLSZndDtwdWRfZW50cnkocHVkLCBhZGRyLCBuZXh0LCB3YWxrKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlCmluZGV4IDljY2Q5ZTE0NDdlNjYuLjkyZjk4MWY5Nzc0MGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZQpAQCAtNjYsMyAmIzQzOzY2LDQgQEAgbWVyZ2UKIHByY3RsX3RocF9kaXNhYmxlCiBybWFwCiBmb2xpb19zcGxpdF9yYWNlX3Rlc3QKJiM0MztwYWdld2Fsa19yYWNlX3Rlc3QKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKaW5kZXggZTZkZjk2OGYwOTcxYy4uY2RlOWIyMmYxMjFkNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKQEAgLTEwNSw2ICYjNDM7MTA1LDcgQEAgVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGd1YXJkLXJlZ2lvbnMKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBtZXJnZQogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IHJtYXAKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBmb2xpb19zcGxpdF9yYWNlX3Rlc3QKJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gcGFnZXdhbGtfcmFjZV90ZXN0CiAKIGlmbmVxICgkKEFSQ0gpLGFybTY0KQogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IHNvZnQtZGlydHkKQEAgLTE2Myw2ICYjNDM7MTY0LDcgQEAgVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9tbG9jay5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9tbWFwLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X21yZW1hcC5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wYWdlbWFwLnNoCiYjNDM7VEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wYWdld2Fsay5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wZm5tYXAuc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfcGtleS5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wcm9jZXNzX21hZHYuc2gKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfcGFnZXdhbGsuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X3BhZ2V3YWxrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAuLjZmNmMzZWUxYzEzZWYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X3BhZ2V3YWxrLnNoCkBAIC0wLDAgJiM0MzsxLDQgQEAKJiM0MzsjIS9iaW4vc2ggLWUKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7Li9ydW5fdm10ZXN0cy5zaCAtdCBwYWdld2FsawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZXdhbGtfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdld2Fsa19yYWNlX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi40MmZkNmU3NWU4MjFlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZXdhbGtfcmFjZV90ZXN0LmMKQEAgLTAsMCAmIzQzOzEsMTM4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBzdGFsZSB3YWxrLSZndDthY3Rpb24gZXNjYXBpbmcgd2Fsa19wbWRfcmFuZ2UoKSBhbmQKJiM0MzsgKiBtYWtpbmcgd2Fsa19wdWRfcmFuZ2UoKSB3YWxrIHRoZSBzYW1lIHJhbmdlIHR3aWNlLgomIzQzOyAqCiYjNDM7ICogVGhlIG1hcHBpbmcgaXMgdHdvIFBNRHMgaW5zaWRlIG9uZSBQVUQuIFBNRCAwIGlzIHBvcHVsYXRlZCBvbmNlIGFuZCBsZWZ0CiYjNDM7ICogYWxvbmUsIFBNRCAxIGlzIGZhdWx0ZWQgaW4gYW5kIGRyb3BwZWQgYWdhaW4gYnkgYSBzZWNvbmQgdGhyZWFkLiBDbGVhcmluZwomIzQzOyAqIFBNRCAxIHVuZGVyIHNtYXBzX3B0ZV9yYW5nZSgpIG1ha2VzIGl0IHJhaXNlIEFDVElPTl9BR0FJTiwgYW5kIHNpbmNlIGl0IGlzCiYjNDM7ICogdGhlIGxhc3QgZW50cnkgdGhlIHN0YWxlIHZhbHVlIGxlYXZlcyB3YWxrX3BtZF9yYW5nZSgpLCBzbyBzbWFwcyBhY2NvdW50cwomIzQzOyAqIFBNRCAwIHR3aWNlLiBBIGtlcm5lbCB0aGF0IGRvZXMgbm90IHJlY2xhaW0gdGhlIGVtcHRpZWQgcGFnZSB0YWJsZSBuZXZlcgomIzQzOyAqIGNsZWFycyBQTUQgMSBhbmQgc28gbmV2ZXIgaGl0cyB0aGUgcmFjZS4KJiM0MzsgKgomIzQzOyAqIEEgaGl0IGNhbiBvbmx5IGNvbWUgZnJvbSB0aGUga2VybmVsIGNvdW50aW5nIHRoZSBzYW1lIHBhZ2UgdHdpY2UsIHNvIHRoZQomIzQzOyAqIHRlc3QgY2Fubm90IGZhaWwgc3B1cmlvdXNseS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3B0aHJlYWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYXRvbWljLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlJfUE1EUwkJMgomIzQzOyNkZWZpbmUgTlJfUk9VTkRTCTIwMDAwCiYjNDM7LyogQ2FwIG9uIGhvdyBtdWNoIG9mIFBNRCAwIHRvIGZhdWx0IGluLCBzbyB0aGF0IGEgbGFyZ2UgUE1EIHN0YXlzIGNoZWFwLiAqLwomIzQzOyNkZWZpbmUgUE9QX01BWAkJKDIgKiAxMDI0ICogMTAyNCkKJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqYXJlYTsKJiM0MztzdGF0aWMgc2l6ZV90IHBtZF9zaXplOwomIzQzO3N0YXRpYyBhdG9taWNfaW50IHN0b3A7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnJhY2VyKHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CWNoYXIgKnBtZDEgPSBhcmVhICYjNDM7IHBtZF9zaXplOwomIzQzOwomIzQzOwl3aGlsZSAoYXRvbWljX2xvYWRfZXhwbGljaXQoJmFtcDtzdG9wLCBtZW1vcnlfb3JkZXJfYWNxdWlyZSkgPT0gMCkgewomIzQzOwkJLyogbWFkdmlzZSgpIGJlbG93IGtlZXBzIHRoZSBjb21waWxlciBmcm9tIGxpZnRpbmcgdGhpcyBvdXQuICovCiYjNDM7CQkqcG1kMSA9IDE7CiYjNDM7CQltYWR2aXNlKHBtZDEsIHBtZF9zaXplLCBNQURWX0RPTlRORUVEKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc21hcHNfcnNzX2tiKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlsxMDI0XTsKJiM0MzsJY2hhciAqZW50cnk7CiYjNDM7CiYjNDM7CWVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhcmVhLCAmIzM0O1JzczomIzM0OywgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CWlmICghZW50cnkpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtubyBSc3M6IGVudHJ5IGZvciB0aGUgdGVzdCBtYXBwaW5nXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiBzdHJ0b3VsKGVudHJ5LCBOVUxMLCAxMCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKHZvaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIG1heF9yc3Nfa2IsIHJzc19rYiA9IDA7CiYjNDM7CXNpemVfdCBzaXplLCBwb3Bfc2l6ZSwgaTsKJiM0MzsJcHRocmVhZF90IHRocmVhZDsKJiM0MzsJY2hhciAqcmF3OwomIzQzOwomIzQzOwlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwomIzQzOwlwbWRfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CWlmICghcG1kX3NpemUpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O0Nhbm5vdCBkZXRlcm1pbmUgUE1EIHNpemVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pICZsdDsgMikKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7TmVlZCBhdCBsZWFzdCAyIENQVXMgdG8gcmFjZVxuJiMzNDspOwomIzQzOwomIzQzOwlzaXplID0gTlJfUE1EUyAqIHBtZF9zaXplOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBbGlnbiB0byB0aGUgbWFwcGluZyBzaXplIHRvIHN0YXkgaW5zaWRlIG9uZSBQVUQsIHRoZW4gdHJpbSB0aGUKJiM0MzsJICogc2xhY2sgc28gdGhhdCBzbWFwcyBoYXMgZXhhY3RseSBvbmUgVk1BIHRvIHJlcG9ydC4KJiM0MzsJICovCiYjNDM7CXJhdyA9IG1tYXAoTlVMTCwgMiAqIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFLCAtMSwgMCk7CiYjNDM7CWlmIChyYXcgPT0gTUFQX0ZBSUxFRCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O21tYXAgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWFyZWEgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpcmF3ICYjNDM7IHNpemUgLSAxKSAmYW1wOyB+KHNpemUgLSAxKSk7CiYjNDM7CWlmIChhcmVhICE9IHJhdykKJiM0MzsJCW11bm1hcChyYXcsIGFyZWEgLSByYXcpOwomIzQzOwlpZiAocmF3ICYjNDM7IDIgKiBzaXplICE9IGFyZWEgJiM0Mzsgc2l6ZSkKJiM0MzsJCW11bm1hcChhcmVhICYjNDM7IHNpemUsIHJhdyAmIzQzOyAyICogc2l6ZSAtIChhcmVhICYjNDM7IHNpemUpKTsKJiM0MzsKJiM0MzsJLyogQSBodWdlIFBNRCBuZXZlciByZWFjaGVzIHB0ZV9vZmZzZXRfbWFwX2xvY2soKSwgc28ga2VlcCB0aGVtIG91dC4gKi8KJiM0MzsJaWYgKG1hZHZpc2UoYXJlYSwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKSkKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7TUFEVl9OT0hVR0VQQUdFIGZhaWxlZFxuJiMzNDspOwomIzQzOwomIzQzOwlwb3Bfc2l6ZSA9IHBtZF9zaXplICZsdDsgUE9QX01BWCA/IHBtZF9zaXplIDogUE9QX01BWDsKJiM0MzsJbWVtc2V0KGFyZWEsIDEsIHBvcF9zaXplKTsKJiM0MzsKJiM0MzsJbWF4X3Jzc19rYiA9IChwb3Bfc2l6ZSAmZ3Q7Jmd0OyAxMCkgJiM0MzsgMjU2OwomIzQzOwomIzQzOwkvKiBPdmVyIHRoZSBsaW1pdCBiZWZvcmUgcmFjaW5nIG1lYW5zIHRoaXMgaXMgbm90IG91ciBvd24gbWFwcGluZy4gKi8KJiM0MzsJcnNzX2tiID0gc21hcHNfcnNzX2tiKCk7CiYjNDM7CWlmIChyc3Nfa2IgJmd0OyBtYXhfcnNzX2tiKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7UnNzIGlzICVsdSBrQiBiZWZvcmUgcmFjaW5nLCBleHBlY3RlZCBhdCBtb3N0ICVsdSBrQlxuJiMzNDssCiYjNDM7CQkJCSAgIHJzc19rYiwgbWF4X3Jzc19rYik7CiYjNDM7CiYjNDM7CWtzZnRfc2V0X3BsYW4oMSk7CiYjNDM7CWtzZnRfcHJpbnRfbXNnKCYjMzQ7cmFjaW5nIHNtYXBzIGFnYWluc3QgTUFEVl9ET05UTkVFRCwgJWQgcm91bmRzXG4mIzM0OywKJiM0MzsJCSAgICAgICBOUl9ST1VORFMpOwomIzQzOwomIzQzOwlpZiAocHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWQsIE5VTEwsIHJhY2VyLCBOVUxMKSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3B0aHJlYWRfY3JlYXRlIGZhaWxlZFxuJiMzNDspOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTlJfUk9VTkRTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcnNzX2tiID0gc21hcHNfcnNzX2tiKCk7CiYjNDM7CQlpZiAocnNzX2tiICZndDsgbWF4X3Jzc19rYikKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlhdG9taWNfc3RvcmVfZXhwbGljaXQoJmFtcDtzdG9wLCAxLCBtZW1vcnlfb3JkZXJfcmVsZWFzZSk7CiYjNDM7CXB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpOwomIzQzOwomIzQzOwlpZiAoaSAmbHQ7IE5SX1JPVU5EUykgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDt3YWxrIHJhbiB0d2ljZSBvdmVyIHRoZSBzYW1lIHJhbmdlXG4mIzM0Oyk7CiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoJiMzNDtSc3MgJWx1IGtCIGV4Y2VlZHMgJWx1IGtCLCByb3VuZCAlenVcbiYjMzQ7LAomIzQzOwkJCQkgICAgICByc3Nfa2IsIG1heF9yc3Nfa2IsIGkpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCYjMzQ7UnNzIHdpdGhpbiAlbHUga0Igb3ZlciAlZCByb3VuZHNcbiYjMzQ7LAomIzQzOwkJCQkgICAgICBtYXhfcnNzX2tiLCBOUl9ST1VORFMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtzZnRfZXhpdChpID09IE5SX1JPVU5EUyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKaW5kZXggOGMyOTZkZWRmMDQ3NC4uZDkwYzYzNzA4MTRmNyAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKQEAgLTM5OCw2ICYjNDM7Mzk4LDggQEAgZmkKIAogQ0FURUdPUlk9JiMzNDtwYWdlbWFwJiMzNDsgcnVuX3Rlc3QgLi9wYWdlbWFwX2lvY3RsCiAKJiM0MztDQVRFR09SWT0mIzM0O3BhZ2V3YWxrJiMzNDsgcnVuX3Rlc3QgLi9wYWdld2Fsa19yYWNlX3Rlc3QKJiM0MzsKIENBVEVHT1JZPSYjMzQ7cGZubWFwJiMzNDsgcnVuX3Rlc3QgLi9wZm5tYXAKIAogIyBDT1cgdGVzdHMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAppbmRleCBlYThmYzhmZGYwZWIwLi42MjI5MmUyNDE3ZDE2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCkBAIC04OCw2ICYjNDM7ODgsNyBAQCBib29sIHBhZ2VtYXBfaXNfcG9wdWxhdGVkKGludCBmZCwgY2hhciAqc3RhcnQpOwogdW5zaWduZWQgbG9uZyBwYWdlbWFwX2dldF9wZm4oaW50IGZkLCBjaGFyICpzdGFydCk7CiB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTsKIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CiYjNDM7Y2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pOwogdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7CiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpOwogYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDg1CgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDY4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYWdlIFRhYmxlIFdhbGtlciBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYWZ0ZXIgYSBxdWljayByZXZpZXcsIEkgc2VlIGl0IG1vZGlmaWVzIGBtbS9wYWdld2Fsay5jYCBhbmQgYWRkcyBhIG5ldyB0ZXN0LiBNeSBtYWluIGNvbmNlcm4gaXMsIG9mIGNvdXJzZSwgdGhlIGxvZ2ljIGFyb3VuZCB0aGUgcGFnZSB0YWJsZSB3YWxraW5nLiBUaGUgZ2lzdCBvZiBpdCBpcyB0aGUgbW92ZW1lbnQgb2YgYHdhbGstJmd0O2FjdGlvbiA9IEFDVElPTl9TVUJUUkVFO2AgaW5zaWRlIHRoZSBsb29wIGluIGB3YWxrX3BtZF9yYW5nZWAgYW5kIGB3YWxrX3B1ZF9yYW5nZWAuIFRoaXMgaXMgZGVzaWduZWQgdG8gYWRkcmVzcyBhIGZsYXcgd2hlcmUgYSBzdGFsZSBgd2Fsay0mZ3Q7YWN0aW9uYCB2YWx1ZSAobGlrZSBgQUNUSU9OX0FHQUlOYCkgY291bGQsIGluIGNlcnRhaW4gc2l0dWF0aW9ucywgY2F1c2UgdGhlIHNhbWUgbWVtb3J5IHJhbmdlIHRvIGJlIHdhbGtlZCB0d2ljZSwgd2hpY2ggaXMgb2J2aW91c2x5IG5vdCB3aGF0IHdlIHdhbnQuCgpJJiMzOTt2ZSBleGFtaW5lZCB0aGUgY29kZSBjbG9zZWx5LCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYG1tL3BhZ2V3YWxrLmNgLiBJdCYjMzk7cyBjbGVhciB0aGlzIGlzIGEgcHVyZSBjb250cm9sIGZsb3cgYnVnLiBUaGUgb3JpZ2luYWwgcGxhY2VtZW50IGNvdWxkIGxlYWQgdG8gYSBzaXR1YXRpb24gd2hlcmUgdGhlIGFjdGlvbiBmbGFnIGlzbiYjMzk7dCBwcm9wZXJseSByZXNldCB3aXRoaW4gdGhlIGxvb3AsIGxlYWRpbmcgdG8gdGhlIHJhbmdlIGJlaW5nIHJlLXdhbGtlZC4gTW92aW5nIHRoZSBhc3NpZ25tZW50IGVuc3VyZXMgdGhhdCBgQUNUSU9OX1NVQlRSRUVgIGlzIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggaXRlcmF0aW9uLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGlzbiYjMzk7dCBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuIEFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBJIGNhbiBjb25maXJtIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnZvbHZlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBXZSYjMzk7cmUgc2ltcGx5IHJlc2V0dGluZyBhIHN0YXRlIHZhcmlhYmxlIGZvciBjb3JyZWN0IGNvbnRyb2wgZmxvdy4gVGhlIGB3YWxrLSZndDthY3Rpb25gIHZhcmlhYmxlLCBhIGZpZWxkIHdpdGhpbiB0aGUgYHN0cnVjdCBtbV93YWxrYCwgaXMgYmVpbmcgcmVzZXQgdG8gYEFDVElPTl9TVUJUUkVFYCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbG9vcC4KCkdpdmVuIHRoYXQgdGhpcyBmaXggaXMgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnktcmVsYXRlZCBvcGVyYXRpb25zIG9yIHBvdGVudGlhbCBpbmZvLWxlYWtzLCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgTmVlZHNLTVNBTiB0byBmYWxzZS4gVGhlIHN0YW5kYXJkIHRlc3RzLCBhbG9uZ3NpZGUgS0FTQU4sIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIHZhbGlkYXRlIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGlzIGZpeC4gSXQmIzM5O3MgYSBjbGVhbiwgdGFyZ2V0ZWQgcGF0Y2ggdGhhdCBhZGRyZXNzZXMgYSBzcGVjaWZpYyBsb2dpYyBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIHBhZ2UgdGFibGUgd2Fsa2VyIChgbW0vcGFnZXdhbGsuY2ApIHdoZXJlIGEgc3RhbGUgYHdhbGstXHUwMDNlYWN0aW9uYCAoZS5nLiwgYEFDVElPTl9BR0FJTmApIGNvdWxkIGVzY2FwZSBhIGxvd2VyLWxldmVsIHdhbGsgZnVuY3Rpb24gYW5kIGNhdXNlIHRoZSBoaWdoZXItbGV2ZWwgd2FsayBmdW5jdGlvbiB0byBpbmNvcnJlY3RseSByZXBlYXQgdGhlIHdhbGsgb3ZlciB0aGUgc2FtZSByYW5nZS4gVGhlIGZpeCBzaW1wbHkgbW92ZXMgdGhlIGFzc2lnbm1lbnQgYHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7YCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSBwYWdlIHRhYmxlIHdhbGtlciAoYG1tL3BhZ2V3YWxrLmNgKSB3aGVyZSBhIHN0YWxlIGB3YWxrLVx1MDAzZWFjdGlvbmAgKGUuZy4sIGBBQ1RJT05fQUdBSU5gKSBjb3VsZCBlc2NhcGUgYSBsb3dlci1sZXZlbCB3YWxrIGZ1bmN0aW9uIGFuZCBjYXVzZSB0aGUgaGlnaGVyLWxldmVsIHdhbGsgZnVuY3Rpb24gdG8gaW5jb3JyZWN0bHkgcmVwZWF0IHRoZSB3YWxrIG92ZXIgdGhlIHNhbWUgcmFuZ2UuIFRoZSBmaXggc2ltcGx5IG1vdmVzIHRoZSBhc3NpZ25tZW50IGB3YWxrLVx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO2AgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcC4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGNvbnRyb2wgZmxvdyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MsIGFuZCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjEwOjQ3Ljg2MjQxODYxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDcxNjE3MTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIndhbGtfcGFnZV9yYW5nZVwiLFxuICAgIFwid2Fsa19wYWdlX3ZtYVwiLFxuICAgIFwid2Fsa19wYWdlX21hcHBpbmdcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSBwYWdlIHRhYmxlIHdhbGtlciAoYG1tL3BhZ2V3YWxrLmNgKSB3aGVyZSBhIHN0YWxlIGB3YWxrLVxcdTAwM2VhY3Rpb25gIChlLmcuLCBgQUNUSU9OX0FHQUlOYCkgY291bGQgZXNjYXBlIGEgbG93ZXItbGV2ZWwgd2FsayBmdW5jdGlvbiBhbmQgY2F1c2UgdGhlIGhpZ2hlci1sZXZlbCB3YWxrIGZ1bmN0aW9uIHRvIGluY29ycmVjdGx5IHJlcGVhdCB0aGUgd2FsayBvdmVyIHRoZSBzYW1lIHJhbmdlLiBUaGUgZml4IHNpbXBseSBtb3ZlcyB0aGUgYXNzaWdubWVudCBgd2Fsay1cXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7YCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvcmUgTU0gcGFnZSB3YWxraW5nIGxvZ2ljICh3YWxrX3BtZF9yYW5nZSwgd2Fsa19wdWRfcmFuZ2UpIHdoZXJlIGEgc3RhbGUgd2Fsay1cXHUwMDNlYWN0aW9uIGNvdWxkIGNhdXNlIHRoZSBzYW1lIHJhbmdlIHRvIGJlIHdhbGtlZCB0d2ljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIChlLmcuLCB2aWEgL3Byb2MvcGlkL3NtYXBzIG9yIG1hZHZpc2UpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNzoxMDo0Ny44NjI0MjM0NTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDAyMDg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY3MDBkNjk5Y2YzNDdkNGQwOTMxMmY4YmUzNzI2NWE2YjczMTcwOGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTc6MTA6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcXG5pbmRleCA1ZDg3YzYzMmEyNTUwLi5kM2JmZWNlMzE5MzM2IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2V3YWxrLmNcXG4rKysgYi9tbS9wYWdld2Fsay5jXFxuQEAgLTEyNiw2ICsxMjYsNyBAQCBzdGF0aWMgaW50IHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdHBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTtcXG4gXFx0ZG8ge1xcbiBhZ2FpbjpcXG4rXFx0XFx0d2Fsay1cXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7XFxuIFxcdFxcdG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcXG4gXFx0XFx0aWYgKHBtZF9ub25lKCpwbWQpKSB7XFxuIFxcdFxcdFxcdGlmIChoYXNfaW5zdGFsbClcXG5AQCAtMTM4LDggKzEzOSw2IEBAIHN0YXRpYyBpbnQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHdhbGstXFx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO1xcbi1cXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhpcyBpbXBsaWVzIHRoYXQgZWFjaCAtXFx1MDAzZXBtZF9lbnRyeSgpIGhhbmRsZXJcXG4gXFx0XFx0ICogbmVlZHMgdG8ga25vdyBhYm91dCBwbWRfdHJhbnNfaHVnZSgpIHBtZHNcXG5AQCAtMTk2LDYgKzE5NSw3IEBAIHN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0cHVkID0gcHVkX29mZnNldChwNGQsIGFkZHIpO1xcbiBcXHRkbyB7XFxuICBhZ2FpbjpcXG4rXFx0XFx0d2Fsay1cXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7XFxuIFxcdFxcdG5leHQgPSBwdWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcXG4gXFx0XFx0aWYgKHB1ZF9ub25lKCpwdWQpKSB7XFxuIFxcdFxcdFxcdGlmIChoYXNfaW5zdGFsbClcXG5AQCAtMjA4LDggKzIwOCw2IEBAIHN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHdhbGstXFx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO1xcbi1cXG4gXFx0XFx0aWYgKG9wcy1cXHUwMDNlcHVkX2VudHJ5KVxcbiBcXHRcXHRcXHRlcnIgPSBvcHMtXFx1MDAzZXB1ZF9lbnRyeShwdWQsIGFkZHIsIG5leHQsIHdhbGspO1xcbiBcXHRcXHRpZiAoZXJyKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZVxcbmluZGV4IDljY2Q5ZTE0NDdlNjYuLjkyZjk4MWY5Nzc0MGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmVcXG5AQCAtNjYsMyArNjYsNCBAQCBtZXJnZVxcbiBwcmN0bF90aHBfZGlzYWJsZVxcbiBybWFwXFxuIGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxcbitwYWdld2Fsa19yYWNlX3Rlc3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbmluZGV4IGU2ZGY5NjhmMDk3MWMuLmNkZTliMjJmMTIxZDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbkBAIC0xMDUsNiArMTA1LDcgQEAgVEVTVF9HRU5fRklMRVMgKz0gZ3VhcmQtcmVnaW9uc1xcbiBURVNUX0dFTl9GSUxFUyArPSBtZXJnZVxcbiBURVNUX0dFTl9GSUxFUyArPSBybWFwXFxuIFRFU1RfR0VOX0ZJTEVTICs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxcbitURVNUX0dFTl9GSUxFUyArPSBwYWdld2Fsa19yYWNlX3Rlc3RcXG4gXFxuIGlmbmVxICgkKEFSQ0gpLGFybTY0KVxcbiBURVNUX0dFTl9GSUxFUyArPSBzb2Z0LWRpcnR5XFxuQEAgLTE2Myw2ICsxNjQsNyBAQCBURVNUX1BST0dTICs9IGtzZnRfbWxvY2suc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X21tYXAuc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X21yZW1hcC5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfcGFnZW1hcC5zaFxcbitURVNUX1BST0dTICs9IGtzZnRfcGFnZXdhbGsuc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X3Bmbm1hcC5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfcGtleS5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfcHJvY2Vzc19tYWR2LnNoXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfcGFnZXdhbGsuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X3BhZ2V3YWxrLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi42ZjZjM2VlMWMxM2VmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfcGFnZXdhbGsuc2hcXG5AQCAtMCwwICsxLDQgQEBcXG4rIyEvYmluL3NoIC1lXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKy4vcnVuX3ZtdGVzdHMuc2ggLXQgcGFnZXdhbGtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZXdhbGtfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdld2Fsa19yYWNlX3Rlc3QuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDJmZDZlNzVlODIxZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdld2Fsa19yYWNlX3Rlc3QuY1xcbkBAIC0wLDAgKzEsMTM4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBzdGFsZSB3YWxrLVxcdTAwM2VhY3Rpb24gZXNjYXBpbmcgd2Fsa19wbWRfcmFuZ2UoKSBhbmRcXG4rICogbWFraW5nIHdhbGtfcHVkX3JhbmdlKCkgd2FsayB0aGUgc2FtZSByYW5nZSB0d2ljZS5cXG4rICpcXG4rICogVGhlIG1hcHBpbmcgaXMgdHdvIFBNRHMgaW5zaWRlIG9uZSBQVUQuIFBNRCAwIGlzIHBvcHVsYXRlZCBvbmNlIGFuZCBsZWZ0XFxuKyAqIGFsb25lLCBQTUQgMSBpcyBmYXVsdGVkIGluIGFuZCBkcm9wcGVkIGFnYWluIGJ5IGEgc2Vjb25kIHRocmVhZC4gQ2xlYXJpbmdcXG4rICogUE1EIDEgdW5kZXIgc21hcHNfcHRlX3JhbmdlKCkgbWFrZXMgaXQgcmFpc2UgQUNUSU9OX0FHQUlOLCBhbmQgc2luY2UgaXQgaXNcXG4rICogdGhlIGxhc3QgZW50cnkgdGhlIHN0YWxlIHZhbHVlIGxlYXZlcyB3YWxrX3BtZF9yYW5nZSgpLCBzbyBzbWFwcyBhY2NvdW50c1xcbisgKiBQTUQgMCB0d2ljZS4gQSBrZXJuZWwgdGhhdCBkb2VzIG5vdCByZWNsYWltIHRoZSBlbXB0aWVkIHBhZ2UgdGFibGUgbmV2ZXJcXG4rICogY2xlYXJzIFBNRCAxIGFuZCBzbyBuZXZlciBoaXRzIHRoZSByYWNlLlxcbisgKlxcbisgKiBBIGhpdCBjYW4gb25seSBjb21lIGZyb20gdGhlIGtlcm5lbCBjb3VudGluZyB0aGUgc2FtZSBwYWdlIHR3aWNlLCBzbyB0aGVcXG4rICogdGVzdCBjYW5ub3QgZmFpbCBzcHVyaW91c2x5LlxcbisgKi9cXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3B0aHJlYWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGF0b21pYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuK1xcbisjZGVmaW5lIE5SX1BNRFNcXHRcXHQyXFxuKyNkZWZpbmUgTlJfUk9VTkRTXFx0MjAwMDBcXG4rLyogQ2FwIG9uIGhvdyBtdWNoIG9mIFBNRCAwIHRvIGZhdWx0IGluLCBzbyB0aGF0IGEgbGFyZ2UgUE1EIHN0YXlzIGNoZWFwLiAqL1xcbisjZGVmaW5lIFBPUF9NQVhcXHRcXHQoMiAqIDEwMjQgKiAxMDI0KVxcbitcXG4rc3RhdGljIGNoYXIgKmFyZWE7XFxuK3N0YXRpYyBzaXplX3QgcG1kX3NpemU7XFxuK3N0YXRpYyBhdG9taWNfaW50IHN0b3A7XFxuK1xcbitzdGF0aWMgdm9pZCAqcmFjZXIodm9pZCAqYXJnKVxcbit7XFxuK1xcdGNoYXIgKnBtZDEgPSBhcmVhICsgcG1kX3NpemU7XFxuK1xcbitcXHR3aGlsZSAoYXRvbWljX2xvYWRfZXhwbGljaXQoXFx1MDAyNnN0b3AsIG1lbW9yeV9vcmRlcl9hY3F1aXJlKSA9PSAwKSB7XFxuK1xcdFxcdC8qIG1hZHZpc2UoKSBiZWxvdyBrZWVwcyB0aGUgY29tcGlsZXIgZnJvbSBsaWZ0aW5nIHRoaXMgb3V0LiAqL1xcbitcXHRcXHQqcG1kMSA9IDE7XFxuK1xcdFxcdG1hZHZpc2UocG1kMSwgcG1kX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xcbitcXHR9XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzbWFwc19yc3Nfa2Iodm9pZClcXG4re1xcbitcXHRjaGFyIGJ1ZlsxMDI0XTtcXG4rXFx0Y2hhciAqZW50cnk7XFxuK1xcbitcXHRlbnRyeSA9IF9fZ2V0X3NtYXBfZW50cnkoYXJlYSwgXFxcIlJzczpcXFwiLCBidWYsIHNpemVvZihidWYpKTtcXG4rXFx0aWYgKCFlbnRyeSlcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJubyBSc3M6IGVudHJ5IGZvciB0aGUgdGVzdCBtYXBwaW5nXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiBzdHJ0b3VsKGVudHJ5LCBOVUxMLCAxMCk7XFxuK31cXG4rXFxuK2ludCBtYWluKHZvaWQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXhfcnNzX2tiLCByc3Nfa2IgPSAwO1xcbitcXHRzaXplX3Qgc2l6ZSwgcG9wX3NpemUsIGk7XFxuK1xcdHB0aHJlYWRfdCB0aHJlYWQ7XFxuK1xcdGNoYXIgKnJhdztcXG4rXFxuK1xcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcbitcXHRwbWRfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdGlmICghcG1kX3NpemUpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJDYW5ub3QgZGV0ZXJtaW5lIFBNRCBzaXplXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGlmIChzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKSBcXHUwMDNjIDIpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJOZWVkIGF0IGxlYXN0IDIgQ1BVcyB0byByYWNlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHNpemUgPSBOUl9QTURTICogcG1kX3NpemU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBbGlnbiB0byB0aGUgbWFwcGluZyBzaXplIHRvIHN0YXkgaW5zaWRlIG9uZSBQVUQsIHRoZW4gdHJpbSB0aGVcXG4rXFx0ICogc2xhY2sgc28gdGhhdCBzbWFwcyBoYXMgZXhhY3RseSBvbmUgVk1BIHRvIHJlcG9ydC5cXG4rXFx0ICovXFxuK1xcdHJhdyA9IG1tYXAoTlVMTCwgMiAqIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdFxcdCAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkUsIC0xLCAwKTtcXG4rXFx0aWYgKHJhdyA9PSBNQVBfRkFJTEVEKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIm1tYXAgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGFyZWEgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpcmF3ICsgc2l6ZSAtIDEpIFxcdTAwMjYgfihzaXplIC0gMSkpO1xcbitcXHRpZiAoYXJlYSAhPSByYXcpXFxuK1xcdFxcdG11bm1hcChyYXcsIGFyZWEgLSByYXcpO1xcbitcXHRpZiAocmF3ICsgMiAqIHNpemUgIT0gYXJlYSArIHNpemUpXFxuK1xcdFxcdG11bm1hcChhcmVhICsgc2l6ZSwgcmF3ICsgMiAqIHNpemUgLSAoYXJlYSArIHNpemUpKTtcXG4rXFxuK1xcdC8qIEEgaHVnZSBQTUQgbmV2ZXIgcmVhY2hlcyBwdGVfb2Zmc2V0X21hcF9sb2NrKCksIHNvIGtlZXAgdGhlbSBvdXQuICovXFxuK1xcdGlmIChtYWR2aXNlKGFyZWEsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSkpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJNQURWX05PSFVHRVBBR0UgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHBvcF9zaXplID0gcG1kX3NpemUgXFx1MDAzYyBQT1BfTUFYID8gcG1kX3NpemUgOiBQT1BfTUFYO1xcbitcXHRtZW1zZXQoYXJlYSwgMSwgcG9wX3NpemUpO1xcbitcXG4rXFx0bWF4X3Jzc19rYiA9IChwb3Bfc2l6ZSBcXHUwMDNlXFx1MDAzZSAxMCkgKyAyNTY7XFxuK1xcbitcXHQvKiBPdmVyIHRoZSBsaW1pdCBiZWZvcmUgcmFjaW5nIG1lYW5zIHRoaXMgaXMgbm90IG91ciBvd24gbWFwcGluZy4gKi9cXG4rXFx0cnNzX2tiID0gc21hcHNfcnNzX2tiKCk7XFxuK1xcdGlmIChyc3Nfa2IgXFx1MDAzZSBtYXhfcnNzX2tiKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlJzcyBpcyAlbHUga0IgYmVmb3JlIHJhY2luZywgZXhwZWN0ZWQgYXQgbW9zdCAlbHUga0JcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHJzc19rYiwgbWF4X3Jzc19rYik7XFxuK1xcbitcXHRrc2Z0X3NldF9wbGFuKDEpO1xcbitcXHRrc2Z0X3ByaW50X21zZyhcXFwicmFjaW5nIHNtYXBzIGFnYWluc3QgTUFEVl9ET05UTkVFRCwgJWQgcm91bmRzXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgTlJfUk9VTkRTKTtcXG4rXFxuK1xcdGlmIChwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkLCBOVUxMLCByYWNlciwgTlVMTCkpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicHRocmVhZF9jcmVhdGUgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9ST1VORFM7IGkrKykge1xcbitcXHRcXHRyc3Nfa2IgPSBzbWFwc19yc3Nfa2IoKTtcXG4rXFx0XFx0aWYgKHJzc19rYiBcXHUwMDNlIG1heF9yc3Nfa2IpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRhdG9taWNfc3RvcmVfZXhwbGljaXQoXFx1MDAyNnN0b3AsIDEsIG1lbW9yeV9vcmRlcl9yZWxlYXNlKTtcXG4rXFx0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XFxuK1xcbitcXHRpZiAoaSBcXHUwMDNjIE5SX1JPVU5EUykge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwid2FsayByYW4gdHdpY2Ugb3ZlciB0aGUgc2FtZSByYW5nZVxcXFxuXFxcIik7XFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcXFwiUnNzICVsdSBrQiBleGNlZWRzICVsdSBrQiwgcm91bmQgJXp1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICByc3Nfa2IsIG1heF9yc3Nfa2IsIGkpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXFxcIlJzcyB3aXRoaW4gJWx1IGtCIG92ZXIgJWQgcm91bmRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICBtYXhfcnNzX2tiLCBOUl9ST1VORFMpO1xcbitcXHR9XFxuK1xcbitcXHRrc2Z0X2V4aXQoaSA9PSBOUl9ST1VORFMpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbmluZGV4IDhjMjk2ZGVkZjA0NzQuLmQ5MGM2MzcwODE0ZjcgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbkBAIC0zOTgsNiArMzk4LDggQEAgZmlcXG4gXFxuIENBVEVHT1JZPVxcXCJwYWdlbWFwXFxcIiBydW5fdGVzdCAuL3BhZ2VtYXBfaW9jdGxcXG4gXFxuK0NBVEVHT1JZPVxcXCJwYWdld2Fsa1xcXCIgcnVuX3Rlc3QgLi9wYWdld2Fsa19yYWNlX3Rlc3RcXG4rXFxuIENBVEVHT1JZPVxcXCJwZm5tYXBcXFwiIHJ1bl90ZXN0IC4vcGZubWFwXFxuIFxcbiAjIENPVyB0ZXN0c1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG5pbmRleCBlYThmYzhmZGYwZWIwLi42MjI5MmUyNDE3ZDE2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbkBAIC04OCw2ICs4OCw3IEBAIGJvb2wgcGFnZW1hcF9pc19wb3B1bGF0ZWQoaW50IGZkLCBjaGFyICpzdGFydCk7XFxuIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9nZXRfcGZuKGludCBmZCwgY2hhciAqc3RhcnQpO1xcbiB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTtcXG4gYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcXG4rY2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xcbiB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKTtcXG4gdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKTtcXG4gYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjEwOjQ4LjM2MzI5NDEyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMyMDQ5NjQ4NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIndhbGtfcGFnZV9yYW5nZVwiLFxuICAgIFwid2Fsa19wYWdlX3ZtYVwiLFxuICAgIFwid2Fsa19wYWdlX21hcHBpbmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvcmUgTU0gcGFnZSB3YWxraW5nIGxvZ2ljICh3YWxrX3BtZF9yYW5nZSwgd2Fsa19wdWRfcmFuZ2UpIHdoZXJlIGEgc3RhbGUgd2Fsay1cXHUwMDNlYWN0aW9uIGNvdWxkIGNhdXNlIHRoZSBzYW1lIHJhbmdlIHRvIGJlIHdhbGtlZCB0d2ljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIChlLmcuLCB2aWEgL3Byb2MvcGlkL3NtYXBzIG9yIG1hZHZpc2UpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NzAwZDY5OWNmMzQ3ZDRkMDkzMTJmOGJlMzcyNjVhNmI3MzE3MDhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTc6MTA6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdld2Fsay5jIGIvbW0vcGFnZXdhbGsuY1xuaW5kZXggNWQ4N2M2MzJhMjU1MC4uZDNiZmVjZTMxOTMzNiAxMDA2NDRcbi0tLSBhL21tL3BhZ2V3YWxrLmNcbisrKyBiL21tL3BhZ2V3YWxrLmNcbkBAIC0xMjYsNiArMTI2LDcgQEAgc3RhdGljIGludCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0cG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpO1xuIFx0ZG8ge1xuIGFnYWluOlxuK1x0XHR3YWxrLVx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO1xuIFx0XHRuZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4gXHRcdGlmIChwbWRfbm9uZSgqcG1kKSkge1xuIFx0XHRcdGlmIChoYXNfaW5zdGFsbClcbkBAIC0xMzgsOCArMTM5LDYgQEAgc3RhdGljIGludCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0d2Fsay1cdTAwM2VhY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTtcbi1cbiBcdFx0LypcbiBcdFx0ICogVGhpcyBpbXBsaWVzIHRoYXQgZWFjaCAtXHUwMDNlcG1kX2VudHJ5KCkgaGFuZGxlclxuIFx0XHQgKiBuZWVkcyB0byBrbm93IGFib3V0IHBtZF90cmFuc19odWdlKCkgcG1kc1xuQEAgLTE5Niw2ICsxOTUsNyBAQCBzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcik7XG4gXHRkbyB7XG4gIGFnYWluOlxuK1x0XHR3YWxrLVx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO1xuIFx0XHRuZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4gXHRcdGlmIChwdWRfbm9uZSgqcHVkKSkge1xuIFx0XHRcdGlmIChoYXNfaW5zdGFsbClcbkBAIC0yMDgsOCArMjA4LDYgQEAgc3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0d2Fsay1cdTAwM2VhY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTtcbi1cbiBcdFx0aWYgKG9wcy1cdTAwM2VwdWRfZW50cnkpXG4gXHRcdFx0ZXJyID0gb3BzLVx1MDAzZXB1ZF9lbnRyeShwdWQsIGFkZHIsIG5leHQsIHdhbGspO1xuIFx0XHRpZiAoZXJyKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlXG5pbmRleCA5Y2NkOWUxNDQ3ZTY2Li45MmY5ODFmOTc3NDBmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZVxuQEAgLTY2LDMgKzY2LDQgQEAgbWVyZ2VcbiBwcmN0bF90aHBfZGlzYWJsZVxuIHJtYXBcbiBmb2xpb19zcGxpdF9yYWNlX3Rlc3RcbitwYWdld2Fsa19yYWNlX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCBlNmRmOTY4ZjA5NzFjLi5jZGU5YjIyZjEyMWQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMTA1LDYgKzEwNSw3IEBAIFRFU1RfR0VOX0ZJTEVTICs9IGd1YXJkLXJlZ2lvbnNcbiBURVNUX0dFTl9GSUxFUyArPSBtZXJnZVxuIFRFU1RfR0VOX0ZJTEVTICs9IHJtYXBcbiBURVNUX0dFTl9GSUxFUyArPSBmb2xpb19zcGxpdF9yYWNlX3Rlc3RcbitURVNUX0dFTl9GSUxFUyArPSBwYWdld2Fsa19yYWNlX3Rlc3RcbiBcbiBpZm5lcSAoJChBUkNIKSxhcm02NClcbiBURVNUX0dFTl9GSUxFUyArPSBzb2Z0LWRpcnR5XG5AQCAtMTYzLDYgKzE2NCw3IEBAIFRFU1RfUFJPR1MgKz0ga3NmdF9tbG9jay5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9tbWFwLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X21yZW1hcC5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9wYWdlbWFwLnNoXG4rVEVTVF9QUk9HUyArPSBrc2Z0X3BhZ2V3YWxrLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X3Bmbm1hcC5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9wa2V5LnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X3Byb2Nlc3NfbWFkdi5zaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfcGFnZXdhbGsuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X3BhZ2V3YWxrLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNmY2YzNlZTFjMTNlZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9wYWdld2Fsay5zaFxuQEAgLTAsMCArMSw0IEBAXG4rIyEvYmluL3NoIC1lXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKy4vcnVuX3ZtdGVzdHMuc2ggLXQgcGFnZXdhbGtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdld2Fsa19yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2V3YWxrX3JhY2VfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDJmZDZlNzVlODIxZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZXdhbGtfcmFjZV90ZXN0LmNcbkBAIC0wLDAgKzEsMTM4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBzdGFsZSB3YWxrLVx1MDAzZWFjdGlvbiBlc2NhcGluZyB3YWxrX3BtZF9yYW5nZSgpIGFuZFxuKyAqIG1ha2luZyB3YWxrX3B1ZF9yYW5nZSgpIHdhbGsgdGhlIHNhbWUgcmFuZ2UgdHdpY2UuXG4rICpcbisgKiBUaGUgbWFwcGluZyBpcyB0d28gUE1EcyBpbnNpZGUgb25lIFBVRC4gUE1EIDAgaXMgcG9wdWxhdGVkIG9uY2UgYW5kIGxlZnRcbisgKiBhbG9uZSwgUE1EIDEgaXMgZmF1bHRlZCBpbiBhbmQgZHJvcHBlZCBhZ2FpbiBieSBhIHNlY29uZCB0aHJlYWQuIENsZWFyaW5nXG4rICogUE1EIDEgdW5kZXIgc21hcHNfcHRlX3JhbmdlKCkgbWFrZXMgaXQgcmFpc2UgQUNUSU9OX0FHQUlOLCBhbmQgc2luY2UgaXQgaXNcbisgKiB0aGUgbGFzdCBlbnRyeSB0aGUgc3RhbGUgdmFsdWUgbGVhdmVzIHdhbGtfcG1kX3JhbmdlKCksIHNvIHNtYXBzIGFjY291bnRzXG4rICogUE1EIDAgdHdpY2UuIEEga2VybmVsIHRoYXQgZG9lcyBub3QgcmVjbGFpbSB0aGUgZW1wdGllZCBwYWdlIHRhYmxlIG5ldmVyXG4rICogY2xlYXJzIFBNRCAxIGFuZCBzbyBuZXZlciBoaXRzIHRoZSByYWNlLlxuKyAqXG4rICogQSBoaXQgY2FuIG9ubHkgY29tZSBmcm9tIHRoZSBrZXJuZWwgY291bnRpbmcgdGhlIHNhbWUgcGFnZSB0d2ljZSwgc28gdGhlXG4rICogdGVzdCBjYW5ub3QgZmFpbCBzcHVyaW91c2x5LlxuKyAqL1xuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbitcbisjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRhdG9taWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuK1xuKyNkZWZpbmUgTlJfUE1EU1x0XHQyXG4rI2RlZmluZSBOUl9ST1VORFNcdDIwMDAwXG4rLyogQ2FwIG9uIGhvdyBtdWNoIG9mIFBNRCAwIHRvIGZhdWx0IGluLCBzbyB0aGF0IGEgbGFyZ2UgUE1EIHN0YXlzIGNoZWFwLiAqL1xuKyNkZWZpbmUgUE9QX01BWFx0XHQoMiAqIDEwMjQgKiAxMDI0KVxuK1xuK3N0YXRpYyBjaGFyICphcmVhO1xuK3N0YXRpYyBzaXplX3QgcG1kX3NpemU7XG4rc3RhdGljIGF0b21pY19pbnQgc3RvcDtcbitcbitzdGF0aWMgdm9pZCAqcmFjZXIodm9pZCAqYXJnKVxuK3tcbitcdGNoYXIgKnBtZDEgPSBhcmVhICsgcG1kX3NpemU7XG4rXG4rXHR3aGlsZSAoYXRvbWljX2xvYWRfZXhwbGljaXQoXHUwMDI2c3RvcCwgbWVtb3J5X29yZGVyX2FjcXVpcmUpID09IDApIHtcbitcdFx0LyogbWFkdmlzZSgpIGJlbG93IGtlZXBzIHRoZSBjb21waWxlciBmcm9tIGxpZnRpbmcgdGhpcyBvdXQuICovXG4rXHRcdCpwbWQxID0gMTtcbitcdFx0bWFkdmlzZShwbWQxLCBwbWRfc2l6ZSwgTUFEVl9ET05UTkVFRCk7XG4rXHR9XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgc21hcHNfcnNzX2tiKHZvaWQpXG4re1xuK1x0Y2hhciBidWZbMTAyNF07XG4rXHRjaGFyICplbnRyeTtcbitcbitcdGVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhcmVhLCBcIlJzczpcIiwgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRpZiAoIWVudHJ5KVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJubyBSc3M6IGVudHJ5IGZvciB0aGUgdGVzdCBtYXBwaW5nXFxuXCIpO1xuK1xuK1x0cmV0dXJuIHN0cnRvdWwoZW50cnksIE5VTEwsIDEwKTtcbit9XG4rXG4raW50IG1haW4odm9pZClcbit7XG4rXHR1bnNpZ25lZCBsb25nIG1heF9yc3Nfa2IsIHJzc19rYiA9IDA7XG4rXHRzaXplX3Qgc2l6ZSwgcG9wX3NpemUsIGk7XG4rXHRwdGhyZWFkX3QgdGhyZWFkO1xuK1x0Y2hhciAqcmF3O1xuK1xuK1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbitcbitcdHBtZF9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdGlmICghcG1kX3NpemUpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwiQ2Fubm90IGRldGVybWluZSBQTUQgc2l6ZVxcblwiKTtcbitcbitcdGlmIChzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKSBcdTAwM2MgMilcbitcdFx0a3NmdF9leGl0X3NraXAoXCJOZWVkIGF0IGxlYXN0IDIgQ1BVcyB0byByYWNlXFxuXCIpO1xuK1xuK1x0c2l6ZSA9IE5SX1BNRFMgKiBwbWRfc2l6ZTtcbitcbitcdC8qXG4rXHQgKiBBbGlnbiB0byB0aGUgbWFwcGluZyBzaXplIHRvIHN0YXkgaW5zaWRlIG9uZSBQVUQsIHRoZW4gdHJpbSB0aGVcbitcdCAqIHNsYWNrIHNvIHRoYXQgc21hcHMgaGFzIGV4YWN0bHkgb25lIFZNQSB0byByZXBvcnQuXG4rXHQgKi9cbitcdHJhdyA9IG1tYXAoTlVMTCwgMiAqIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdCAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkUsIC0xLCAwKTtcbitcdGlmIChyYXcgPT0gTUFQX0ZBSUxFRClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwibW1hcCBmYWlsZWRcXG5cIik7XG4rXG4rXHRhcmVhID0gKGNoYXIgKikoKCh1bnNpZ25lZCBsb25nKXJhdyArIHNpemUgLSAxKSBcdTAwMjYgfihzaXplIC0gMSkpO1xuK1x0aWYgKGFyZWEgIT0gcmF3KVxuK1x0XHRtdW5tYXAocmF3LCBhcmVhIC0gcmF3KTtcbitcdGlmIChyYXcgKyAyICogc2l6ZSAhPSBhcmVhICsgc2l6ZSlcbitcdFx0bXVubWFwKGFyZWEgKyBzaXplLCByYXcgKyAyICogc2l6ZSAtIChhcmVhICsgc2l6ZSkpO1xuK1xuK1x0LyogQSBodWdlIFBNRCBuZXZlciByZWFjaGVzIHB0ZV9vZmZzZXRfbWFwX2xvY2soKSwgc28ga2VlcCB0aGVtIG91dC4gKi9cbitcdGlmIChtYWR2aXNlKGFyZWEsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSkpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwiTUFEVl9OT0hVR0VQQUdFIGZhaWxlZFxcblwiKTtcbitcbitcdHBvcF9zaXplID0gcG1kX3NpemUgXHUwMDNjIFBPUF9NQVggPyBwbWRfc2l6ZSA6IFBPUF9NQVg7XG4rXHRtZW1zZXQoYXJlYSwgMSwgcG9wX3NpemUpO1xuK1xuK1x0bWF4X3Jzc19rYiA9IChwb3Bfc2l6ZSBcdTAwM2VcdTAwM2UgMTApICsgMjU2O1xuK1xuK1x0LyogT3ZlciB0aGUgbGltaXQgYmVmb3JlIHJhY2luZyBtZWFucyB0aGlzIGlzIG5vdCBvdXIgb3duIG1hcHBpbmcuICovXG4rXHRyc3Nfa2IgPSBzbWFwc19yc3Nfa2IoKTtcbitcdGlmIChyc3Nfa2IgXHUwMDNlIG1heF9yc3Nfa2IpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIlJzcyBpcyAlbHUga0IgYmVmb3JlIHJhY2luZywgZXhwZWN0ZWQgYXQgbW9zdCAlbHUga0JcXG5cIixcbitcdFx0XHRcdCAgIHJzc19rYiwgbWF4X3Jzc19rYik7XG4rXG4rXHRrc2Z0X3NldF9wbGFuKDEpO1xuK1x0a3NmdF9wcmludF9tc2coXCJyYWNpbmcgc21hcHMgYWdhaW5zdCBNQURWX0RPTlRORUVELCAlZCByb3VuZHNcXG5cIixcbitcdFx0ICAgICAgIE5SX1JPVU5EUyk7XG4rXG4rXHRpZiAocHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCByYWNlciwgTlVMTCkpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInB0aHJlYWRfY3JlYXRlIGZhaWxlZFxcblwiKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX1JPVU5EUzsgaSsrKSB7XG4rXHRcdHJzc19rYiA9IHNtYXBzX3Jzc19rYigpO1xuK1x0XHRpZiAocnNzX2tiIFx1MDAzZSBtYXhfcnNzX2tiKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0YXRvbWljX3N0b3JlX2V4cGxpY2l0KFx1MDAyNnN0b3AsIDEsIG1lbW9yeV9vcmRlcl9yZWxlYXNlKTtcbitcdHB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpO1xuK1xuK1x0aWYgKGkgXHUwMDNjIE5SX1JPVU5EUykge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIndhbGsgcmFuIHR3aWNlIG92ZXIgdGhlIHNhbWUgcmFuZ2VcXG5cIik7XG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcIlJzcyAlbHUga0IgZXhjZWVkcyAlbHUga0IsIHJvdW5kICV6dVxcblwiLFxuK1x0XHRcdFx0ICAgICAgcnNzX2tiLCBtYXhfcnNzX2tiLCBpKTtcbitcdH0gZWxzZSB7XG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcIlJzcyB3aXRoaW4gJWx1IGtCIG92ZXIgJWQgcm91bmRzXFxuXCIsXG4rXHRcdFx0XHQgICAgICBtYXhfcnNzX2tiLCBOUl9ST1VORFMpO1xuK1x0fVxuK1xuK1x0a3NmdF9leGl0KGkgPT0gTlJfUk9VTkRTKTtcbitcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCA4YzI5NmRlZGYwNDc0Li5kOTBjNjM3MDgxNGY3IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5AQCAtMzk4LDYgKzM5OCw4IEBAIGZpXG4gXG4gQ0FURUdPUlk9XCJwYWdlbWFwXCIgcnVuX3Rlc3QgLi9wYWdlbWFwX2lvY3RsXG4gXG4rQ0FURUdPUlk9XCJwYWdld2Fsa1wiIHJ1bl90ZXN0IC4vcGFnZXdhbGtfcmFjZV90ZXN0XG4rXG4gQ0FURUdPUlk9XCJwZm5tYXBcIiBydW5fdGVzdCAuL3Bmbm1hcFxuIFxuICMgQ09XIHRlc3RzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCBlYThmYzhmZGYwZWIwLi42MjI5MmUyNDE3ZDE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC04OCw2ICs4OCw3IEBAIGJvb2wgcGFnZW1hcF9pc19wb3B1bGF0ZWQoaW50IGZkLCBjaGFyICpzdGFydCk7XG4gdW5zaWduZWQgbG9uZyBwYWdlbWFwX2dldF9wZm4oaW50IGZkLCBjaGFyICpzdGFydCk7XG4gdm9pZCBjbGVhcl9zb2Z0ZGlydHkodm9pZCk7XG4gYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbitjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4gdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7XG4gdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKTtcbiBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjEwOjQ4LjM2MzI5NTgwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NTk5NjAwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGluIGBtbS9wYWdld2Fsay5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyBzb21ldGhpbmcgZnVuZGFtZW50YWwgd2l0aGluIGBtbS9wYWdld2Fsay5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSdzIG1vZGlmeWluZyB0aGUgbG9jYXRpb24gb2YgYHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7YCB3aXRoaW4gYHdhbGtfcG1kX3JhbmdlYCBhbmQgYHdhbGtfcHVkX3JhbmdlYC4gTW92aW5nIGl0ICppbnNpZGUqIHRoZSBgZG8geyBhZ2FpbjogLi4uIH1gIGxvb3AgaXMgcHJldHR5IHRlbGxpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGludGVuZGVkIHRvIGFkZHJlc3Mgc29tZSBraW5kIG9mIHJhY2UgY29uZGl0aW9uLCB3aGVyZSB0aGUgYHdhbGstXHUwMDNlYWN0aW9uYCB2YXJpYWJsZSBtaWdodCBiZSBob2xkaW5nIG9udG8gYSBzdGFsZSB2YWx1ZeKAlHBlcmhhcHMgYEFDVElPTl9BR0FJTmDigJRhbmQgZXNjYXBpbmcgdGhlIGZ1bmN0aW9uLCB1bHRpbWF0ZWx5IGxlYWRpbmcgdG8gYSByZWR1bmRhbnQgd2FsayBvZiB0aGUgc2FtZSBtZW1vcnkgcmFuZ2UgYnkgdGhlIGNhbGxlci4gQ2xhc3NpYyBjb25jdXJyZW5jeSBpc3N1ZS5cblxuSSdsbCBkb3VibGUtY2hlY2sgZXhhY3RseSB3aGljaCBmdW5jdGlvbnMgYXJlIGFmZmVjdGVkLiBMb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGluIHRoZSBgd2Fsa19wbWRfcmFuZ2VgIGFuZCBgd2Fsa19wdWRfcmFuZ2VgIGZ1bmN0aW9ucywgYm90aCBvZiB3aGljaCBJIGtub3cgYXJlIHN0YXRpYyB3aXRoaW4gdGhhdCBmaWxlLiBSaWdodCwgYW5kIHRoZSBvdGhlciBlbnRyeSBwb2ludHMgdG8gdGhpcyBjb2RlIGFyZSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgd2Fsa19wYWdlX3JhbmdlYCwgYHdhbGtfcGFnZV9yYW5nZV9ub3ZtYWAsIGB3YWxrX3BhZ2Vfdm1hYCwgYW5kIGB3YWxrX3BhZ2VfbWFwcGluZ2AuIEkgc2hvdWxkIHByb2JhYmx5IGZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRob3NlIGFzIHdlbGwsIHNvIEkgY2FuIHNlZSB3aGF0IHRoZXkncmUgY2FsbGluZy4gTGV0J3MgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIGdldCBhIGxpc3Qgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCB3aG8ncyBjYWxsaW5nIHRoZW0uIFRoaXMnbGwgaGVscCBtZSBwdXQgdGhpcyBmaXggaW4gdGhlIGxhcmdlciBjb250ZXh0IGFuZCB0cnVseSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwODgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNzoxMDo1NC4xMjMyNTg1NjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc3ODgwNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZCkuKndhbGtfcGFnZV8uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2V3YWxrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZXdhbGsuYz00NDQ9c3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3Nfdm1hX3dhbGtfbG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3BhZ2V3YWxrLmMtNDcxLSAqL1xcbm1tL3BhZ2V3YWxrLmM6NDcyOmludCB3YWxrX3BhZ2VfcmFuZ2VfbW1fdW5zYWZlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL3BhZ2V3YWxrLmMtNDczLVxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcXG4tLVxcbm1tL3BhZ2V3YWxrLmM9NTQxPXN0YXRpYyBib29sIGNoZWNrX29wc19zYWZlKGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzKVxcbi0tXFxubW0vcGFnZXdhbGsuYy01OTQtICovXFxubW0vcGFnZXdhbGsuYzo1OTU6aW50IHdhbGtfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9wYWdld2Fsay5jLTU5Ni1cXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXFxuLS1cXG5tbS9wYWdld2Fsay5jPTY0Nj1pbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3BhZ2V3YWxrLmMtNjgxLSAqL1xcbm1tL3BhZ2V3YWxrLmM6NjgyOmludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vcGFnZXdhbGsuYy02ODMtXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTcxOS1cXG5tbS9wYWdld2Fsay5jOjcyMDppbnQgd2Fsa19wYWdlX3JhbmdlX3ZtYV91bnNhZmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vcGFnZXdhbGsuYy03MjEtXFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLCB2b2lkICpwcml2YXRlKVxcbi0tXFxubW0vcGFnZXdhbGsuYy03MzktXFxubW0vcGFnZXdhbGsuYzo3NDA6aW50IHdhbGtfcGFnZV9yYW5nZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vcGFnZXdhbGsuYy03NDEtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLFxcbi0tXFxubW0vcGFnZXdhbGsuYy03NDktXFxubW0vcGFnZXdhbGsuYzo3NTA6aW50IHdhbGtfcGFnZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLFxcbm1tL3BhZ2V3YWxrLmMtNzUxLVxcdFxcdHZvaWQgKnByaXZhdGUpXFxuLS1cXG5tbS9wYWdld2Fsay5jLTc5OS0gKi9cXG5tbS9wYWdld2Fsay5jOjgwMDppbnQgd2Fsa19wYWdlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgZmlyc3RfaW5kZXgsXFxubW0vcGFnZXdhbGsuYy04MDEtXFx0XFx0ICAgICAgcGdvZmZfdCBuciwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjEwOjU0LjIyMTA1NTY1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTkxMjMwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24gXHUwMDI2IFBhdGNoIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGlkZW50aWZpZWQgdGhlc2UgbWVtb3J5IG1hbmFnZW1lbnQgd2FsayBmdW5jdGlvbnM6IGB3YWxrX3BhZ2VfcmFuZ2VgLCBgd2Fsa19wYWdlX3JhbmdlX21tX3Vuc2FmZWAsIGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hYCwgYHdhbGtfcGFnZV9yYW5nZV92bWFfdW5zYWZlYCwgYHdhbGtfcGFnZV92bWFgLCBhbmQgYHdhbGtfcGFnZV9tYXBwaW5nYC4gVGhleSBzZWVtIGxpa2UgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZywgZ2l2ZW4gdGhlaXIgcm9sZXMgaW4gcGFnZSB0YWJsZSB0cmF2ZXJzYWwuIFRoZXkncmUgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHJlcHJlc2VudCBjcnVjaWFsIGFyZWFzIG9mIHRoZSBrZXJuZWwgTU0gc3Vic3lzdGVtLlxuXG5UaGlzIHBhdGNoLCBhcHBhcmVudGx5LCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3Igc3RhbGUgdmFsdWUgaXNzdWUgd2l0aCBgd2Fsay1cdTAwM2VhY3Rpb25gLiBTcGVjaWZpY2FsbHksIGlmIEkgdW5kZXJzdGFuZCBpdCBjb3JyZWN0bHksIHRoZXJlIHdhcyBhIGJ1ZyB3aGVyZSB0aGUgYWN0aW9uIHRvIGJlIHBlcmZvcm1lZCBkdXJpbmcgdGhlIHdhbGsgY291bGQgYmUgbGVmdCB3aXRoIGluY29ycmVjdCBkYXRhLCB3aGljaCB3b3VsZCB0aGVuIGNhdXNlIHRoZSB3YWxrIHRvIHJlcGVhdCwgY2F1c2luZyBhbiBpbmRlZmluaXRlIGxvb3Agb3IgZGF0YSBjb3JydXB0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBidWcgZml4LiBUaGlzIG5lZWRzIHRob3JvdWdoIHRlc3RpbmcuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGluIHRvbyBkZWVwLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgZnVuY3Rpb25zLCBvciB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGVtLCByZXF1aXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMuIE15IHJlY29sbGVjdGlvbiBpcyB0aGF0IGBtbS9wYWdld2Fsay5jYCBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIGJ1dCBpdCdzIGFsd2F5cyB3b3J0aCBhIHF1aWNrIGNoZWNrIHRvIHJ1bGUgb3V0IGFueSBidWlsZC10aW1lIGNvbmRpdGlvbmFsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMjYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTA6NTguNjIwMTgyMDExWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTcxNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2V3YWxrLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXFxcXG5tbS9NYWtlZmlsZS0zOC1cXHRcXHRcXHQgICBtbG9jay5vIG1tYXAubyBtbXVfZ2F0aGVyLm8gbXByb3RlY3QubyBtcmVtYXAubyBcXFxcXFxubW0vTWFrZWZpbGU6Mzk6XFx0XFx0XFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXFxcXG5tbS9NYWtlZmlsZS00MC1cXHRcXHRcXHQgICBwZ3RhYmxlLWdlbmVyaWMubyBybWFwLm8gdm1hbGxvYy5vIHZtYS5vIHZtYV9leGVjLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTA6NTguNjgwNzY0ODQ5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxNjcxNTgwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipQYWdlIFRhYmxlIFdhbGtlciBTdHJhdGVneSBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24sIHdpdGggYENPTkZJR19NTVVgIHNldCwgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGEgY29tcGlsZWQgZW52aXJvbm1lbnQgd2hlcmUgdGhlIHBhZ2UgdGFibGUgd2Fsa2VycyBhcmUgYWN0aXZlLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgYXNzdW1wdGlvbiBJIHdvcmsgZnJvbS4gTm93LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgY29yZSBtZWNoYW5pc21zLlxuXG5NeSBpbml0aWFsIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cy4gSSdtIHRoaW5raW5nOiBgd2Fsa19wYWdlX3JhbmdlYCwgYHdhbGtfcGFnZV92bWFgLCBhbmQgYHdhbGtfcGFnZV9tYXBwaW5nYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyDigJMgdGhlIHN0YXJ0aW5nIHBvaW50cyBmb3IgdHJhdmVyc2luZyB0aGUgcGFnZSB0YWJsZXMgdW5kZXIgdmFyaW91cyBjb25kaXRpb25zLiBUaGV5J3JlIHdoZXJlIEknZCBleHBlY3QgdGhlIGdlbmVyYWwgY29udHJvbCBmbG93IHRvIGJlZ2luLlxuXG5CZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvIHRob3NlIHRocmVlLCBpdCBtYWtlcyBzZW5zZSB0byBnbyBvdmVyIHRoZSBgd2Fsa19wYWdlX3JhbmdlX3ZtYWAgYW5kIGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hX3Vuc2FmZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1YnRsZSBpbnRlcmFjdGlvbnMgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZWRnZSBjYXNlcyBpbiB0aGUgcmFuZ2UtYmFzZWQgd2Fsa2Vycy4gVGhlc2Ugc2hvdWxkIHBsYXkgdGhlIHJvbGUgSSBhc3N1bWUgYW5kIEkgc2hvdWxkIGJlIGF3YXJlIGlmIHRoZSBgX3Vuc2FmZWAgZnVuY3Rpb24gcmVxdWlyZXMgZnVydGhlciBhbmFseXNpcyBkdWUgdG8gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg5NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjExOjAzLjE5NzQ4NDY3NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODE4MjU1OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKHdhbGtfcGFnZV9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZXdhbGsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTE6MDMuMjQ1NjczOTE1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4MzcxNjU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYEVYUE9SVF9TWU1CT0xgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byBzaW1wbHkgKmNoZWNrKiBgRVhQT1JUX1NZTUJPTGAuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZnVuY3Rpb25zLiBXaGF0IGFyZSBpdHMgaW1wbGljYXRpb25zIGZvciBzeW1ib2wgdmlzaWJpbGl0eT8gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IElzIHRoaXMgcmVsYXRlZCB0byBrZXJuZWwgbW9kdWxlIGRldmVsb3BtZW50LCBvciBhcmUgd2UgbG9va2luZyBhdCBzb21ldGhpbmcgZWxzZT8gSSBuZWVkIHRvIGNsYXJpZnkgd2hhdCBwcm9ibGVtIG9yIHNwZWNpZmljIGFzcGVjdCByZXF1aXJlcyBhdHRlbnRpb24gd2l0aGluIHRoZSByZWFsbSBvZiB0aGUgYEVYUE9SVF9TWU1CT0xgIG1hY3JvLiBJcyB0aGVyZSBhIHN1c3BlY3RlZCBpc3N1ZSBvciBpcyB0aGlzIHNpbXBseSBmb3IgZ2VuZXJhbCBhbmFseXNpcz8gVGltZSB0byBhc3Nlc3Mgd2hhdCBleGFjdGx5IG5lZWRzIGNoZWNraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjg5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNzoxMTowNi43MjkzOTQ5NjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTgzOTE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipcXFxcKHdhbGtfcGFnZV9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZXdhbGsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTE6MDYuNzc2Mzg4NTUyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTc0NzI4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEJlZm9yZSBJIHN0YXJ0IGRvd24gYSBwb3RlbnRpYWxseSByYWJiaXQgaG9sZSwgbGV0J3MgdGFrZSBhIG1vcmUgdGFyZ2V0ZWQgYXBwcm9hY2guIEknbSBnb2luZyB0byBxdWlja2x5IHNlYXJjaCB3aXRoaW4gYG1tL3BhZ2V3YWxrLmNgIGZvciBgRVhQT1JUX1NZTUJPTGAuIFRoYXQgbWFjcm8gaXMgYSBrZXkgaW5kaWNhdG9yLCByaWdodD8gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCdzIHN5bWJvbCBleHBvcnQgbWVjaGFuaXNtLiBGaW5kaW5nIHdoZXJlIGl0J3MgdXNlZCBpbiB0aGF0IHNwZWNpZmljIGZpbGXigJRyZWxhdGVkIHRvIHBhZ2UgdGFibGUgd2Fsa2luZywgd2hpY2ggaXMgbXkgaW1tZWRpYXRlIGFyZWEgb2YgaW50ZXJlc3TigJRjb3VsZCBiZSB0aGUgcXVpY2tlc3Qgd2F5IHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUsIHRoZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgZXhwb3NlZCwgb3IgdGhlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBhZ2V3YWxrIHRoYXQgYXJlIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGZvciB1c2UgYnkga2VybmVsIG1vZHVsZXMuIEl0J2xsIGdpdmUgbWUgYSBkaXJlY3QgbGluZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIEkgbmVlZCwgd2l0aG91dCB1bm5lY2Vzc2FyeSBicm9hZGVyIGV4cGxvcmF0aW9uIG9mIHBvdGVudGlhbGx5IGlycmVsZXZhbnQgY29kZSBwYXRocy4gVGhpcyBkaXJlY3Qgc2VhcmNoIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gYSB2YWd1ZSBrZXl3b3JkIHNlYXJjaCwgb3IganVzdCByYW5kb21seSBsb29raW5nIGF0IHRoZSBmaWxlcy4gSXQncyB0aGUgbW9zdCBwcmFnbWF0aWMgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ5NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjExOjA5LjkzMzg2NDM3OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1Nzc1MzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZXdhbGsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTE6MDkuOTc4NDU2MjY4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjMzMjg0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW50ZXJuYWwgS2VybmVsIERhdGEgU3RydWN0dXJlczogTXkgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSBjb25zaWRlcmluZyB0aGVzZSBcInRoaW5ncyxcIiBhbmQgd2hpbGUgdGhleSBtaWdodCBub3QgYmUgZGlyZWN0bHkgZXhwb3J0ZWQgZm9yIGV4dGVybmFsIHVzZSwgaXQncyBwcmV0dHkgY2xlYXIgdGhleSdyZSAqYWJzb2x1dGVseSogZnVuZGFtZW50YWwgYW5kIHVzZWQgaW50ZXJuYWxseSBieSBhIHZhc3QgbnVtYmVyIG9mIGtlcm5lbCBzdWJzeXN0ZW1zLiBUaGluayBwcm9jZnMsIGBtYWR2aXNlYCwgYWxsIHRob3NlIGNvcmUgY29tcG9uZW50cyDigJMgdGhleSByZWx5IG9uIHRoaXMuXG5cblJpZ2h0LCB0aW1lIHRvIGNoZWNrIGlmIHRoZXkncmUgc3RhdGljLiBJZiB0aGV5IGFyZSwgdGhhdCB3b3VsZCBsaW1pdCB0aGVpciBzY29wZSBzaWduaWZpY2FudGx5LiBMZXQncyBzZWUuLi4geWVwLCBkZWZpbml0ZWx5IG5vbi1zdGF0aWMuIEdvb2QuIFRoYXQgZXhwYW5kcyB0aGUgcG9zc2liaWxpdGllcyBhbmQgaG93IHRoZXkgbWlnaHQgYmUgbWFuYWdlZCB3aXRoaW4gdGhlIGtlcm5lbC5cblxuTmV4dCwgSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgd2Fsa19wYWdlX3JhbmdlYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHRoaW5ncyBhcmUgYWN0dWFsbHkgKnVzZWQqIGFuZCBpbnRlcmFjdGVkIHdpdGggb24gYSBncmFudWxhciBsZXZlbC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBkZWVwZXIgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc2OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjExOjEzLjkwMTc5MDkzM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5ODcwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCB3YWxrX3BhZ2VfcmFuZ2VcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdld2Fsay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2V3YWxrLmM9NTQxPXN0YXRpYyBib29sIGNoZWNrX29wc19zYWZlKGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzKVxcbi0tXFxubW0vcGFnZXdhbGsuYy01OTQtICovXFxubW0vcGFnZXdhbGsuYzo1OTU6aW50IHdhbGtfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9wYWdld2Fsay5jLTU5Ni1cXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjExOjEzLjk1MTc4MzgyMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDYxMTA2NDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggY2xlYXJseSBhZGRyZXNzZXMgc29tZXRoaW5nIG5vbi1zdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQncyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIGNvcmUgTU0gcGFnZSB3YWxraW5nIGZ1bmN0aW9ucyDigJMgc3BlY2lmaWNhbGx5LCBgd2Fsa19wbWRfcmFuZ2VgIGFuZCBgd2Fsa19wdWRfcmFuZ2VgLiBUaGF0J3MgYSBjcml0aWNhbCBhcmVhLCBwb3RlbnRpYWxseSBhZmZlY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYWNyb3NzIHRoZSBib2FyZC4gVGhlIHRlc3QgY2FzZSBpbnZvbHZpbmcgYC9wcm9jL3BpZC9zbWFwc2AgdGVsbHMgbWUgdGhhdCB0aGlzIGZpeCBsaWtlbHkgdG91Y2hlcyBgc21hcHNfcHRlX3JhbmdlYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgdGhyb3VnaCBlaXRoZXIgYHdhbGtfcGFnZV92bWFgIG9yIGB3YWxrX3BhZ2VfcmFuZ2VgLlxuXG5NeSBmb2N1cyBpcyBzaGFycGVuaW5nIG9uIHRob3NlIGtleSBzeW1ib2xzOiBgd2Fsa19wYWdlX3JhbmdlYCwgYHdhbGtfcGFnZV92bWFgLCBhbmQgYHdhbGtfcGFnZV9tYXBwaW5nYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgSSdtIGdvaW5nIHRvIHdhbnQgdG8gZXhhbWluZS5cblxuTm8gc3BlY2lhbCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLCB0aGFua2Z1bGx5IOKAkyBqdXN0IGEgc3RhbmRhcmQgTU1VLCBtZWFuaW5nIHRoaXMgaXMgYnJvYWRseSBhcHBsaWNhYmxlLlxuXG5Tbywgc3VtbWluZyB0aGlzIHVwIGZvciBteXNlbGYsIEknZCBzYXkgdGhpcyBpcyBkZWZpbml0ZWx5IFwiV29ydGhGdXp6aW5nLlwiIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBgd2Fsa19wYWdlX3JhbmdlYCwgYHdhbGtfcGFnZV92bWFgLCBhbmQgYHdhbGtfcGFnZV9tYXBwaW5nYC4gVGhlcmUgYXJlIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCwgYSB3aW4gZm9yIG1lLiBUaGUgcmVhc29uaW5nPyBUaGUgcGF0Y2ggcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiBpbiBmdW5kYW1lbnRhbCBwYWdlIHdhbGtpbmcgbG9naWMuIEEgc3RhbGUgYHdhbGstXHUwMDNlYWN0aW9uYCB2YXJpYWJsZSBjb3VsZCBsZWFkIHRvIGRvdWJsZS13YWxraW5nIHRoZSBzYW1lIG1lbW9yeSByYW5nZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGJ5IHRoaW5ncyBsaWtlIGAvcHJvYy9waWQvc21hcHNgIG9yIHN5c3RlbSBjYWxscyBsaWtlIGBtYWR2aXNlYC4gVGhpcyBjb21iaW5hdGlvbiBzY3JlYW1zIFwidnVsbmVyYWJpbGl0eSBwb3RlbnRpYWxcIi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE1MywiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTE6MjAuNDEyODk0NTEzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VcIixcbiAgICBcIndhbGtfcGFnZV92bWFcIixcbiAgICBcIndhbGtfcGFnZV9tYXBwaW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBjb3JlIE1NIHBhZ2Ugd2Fsa2luZyBsb2dpYyAod2Fsa19wbWRfcmFuZ2UsIHdhbGtfcHVkX3JhbmdlKSB3aGVyZSBhIHN0YWxlIHdhbGstXFx1MDAzZWFjdGlvbiBjb3VsZCBjYXVzZSB0aGUgc2FtZSByYW5nZSB0byBiZSB3YWxrZWQgdHdpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAoZS5nLiwgdmlhIC9wcm9jL3BpZC9zbWFwcyBvciBtYWR2aXNlKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VcIixcbiAgICBcIndhbGtfcGFnZV92bWFcIixcbiAgICBcIndhbGtfcGFnZV9tYXBwaW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBjb3JlIE1NIHBhZ2Ugd2Fsa2luZyBsb2dpYyAod2Fsa19wbWRfcmFuZ2UsIHdhbGtfcHVkX3JhbmdlKSB3aGVyZSBhIHN0YWxlIHdhbGstXFx1MDAzZWFjdGlvbiBjb3VsZCBjYXVzZSB0aGUgc2FtZSByYW5nZSB0byBiZSB3YWxrZWQgdHdpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAoZS5nLiwgdmlhIC9wcm9jL3BpZC9zbWFwcyBvciBtYWR2aXNlKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTE6MjAuNDEyOTQ1NTIzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUyMTA3MzgxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjExOjIwLjQxMzY0Mjc3M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDUyMDM3MTk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIHBhZ2UgdGFibGUgd2Fsa2VyIChgbW0vcGFnZXdhbGsuY2ApIHdoZXJlIGEgc3RhbGUgYHdhbGstXFx1MDAzZWFjdGlvbmAgKGUuZy4sIGBBQ1RJT05fQUdBSU5gKSBjb3VsZCBlc2NhcGUgYSBsb3dlci1sZXZlbCB3YWxrIGZ1bmN0aW9uIGFuZCBjYXVzZSB0aGUgaGlnaGVyLWxldmVsIHdhbGsgZnVuY3Rpb24gdG8gaW5jb3JyZWN0bHkgcmVwZWF0IHRoZSB3YWxrIG92ZXIgdGhlIHNhbWUgcmFuZ2UuIFRoZSBmaXggc2ltcGx5IG1vdmVzIHRoZSBhc3NpZ25tZW50IGB3YWxrLVxcdTAwM2VhY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTtgIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBjb250cm9sIGZsb3cgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLCBhbmQgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY3MDBkNjk5Y2YzNDdkNGQwOTMxMmY4YmUzNzI2NWE2YjczMTcwOGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxNzoxMDo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXG5pbmRleCA1ZDg3YzYzMmEyNTUwLi5kM2JmZWNlMzE5MzM2IDEwMDY0NFxuLS0tIGEvbW0vcGFnZXdhbGsuY1xuKysrIGIvbW0vcGFnZXdhbGsuY1xuQEAgLTEyNiw2ICsxMjYsNyBAQCBzdGF0aWMgaW50IHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7XG4gXHRkbyB7XG4gYWdhaW46XG4rXHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7XG4gXHRcdG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiBcdFx0aWYgKHBtZF9ub25lKCpwbWQpKSB7XG4gXHRcdFx0aWYgKGhhc19pbnN0YWxsKVxuQEAgLTEzOCw4ICsxMzksNiBAQCBzdGF0aWMgaW50IHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHR3YWxrLVx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO1xuLVxuIFx0XHQvKlxuIFx0XHQgKiBUaGlzIGltcGxpZXMgdGhhdCBlYWNoIC1cdTAwM2VwbWRfZW50cnkoKSBoYW5kbGVyXG4gXHRcdCAqIG5lZWRzIHRvIGtub3cgYWJvdXQgcG1kX3RyYW5zX2h1Z2UoKSBwbWRzXG5AQCAtMTk2LDYgKzE5NSw3IEBAIHN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdHB1ZCA9IHB1ZF9vZmZzZXQocDRkLCBhZGRyKTtcbiBcdGRvIHtcbiAgYWdhaW46XG4rXHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7XG4gXHRcdG5leHQgPSBwdWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiBcdFx0aWYgKHB1ZF9ub25lKCpwdWQpKSB7XG4gXHRcdFx0aWYgKGhhc19pbnN0YWxsKVxuQEAgLTIwOCw4ICsyMDgsNiBAQCBzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHR3YWxrLVx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO1xuLVxuIFx0XHRpZiAob3BzLVx1MDAzZXB1ZF9lbnRyeSlcbiBcdFx0XHRlcnIgPSBvcHMtXHUwMDNlcHVkX2VudHJ5KHB1ZCwgYWRkciwgbmV4dCwgd2Fsayk7XG4gXHRcdGlmIChlcnIpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmVcbmluZGV4IDljY2Q5ZTE0NDdlNjYuLjkyZjk4MWY5Nzc0MGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlXG5AQCAtNjYsMyArNjYsNCBAQCBtZXJnZVxuIHByY3RsX3RocF9kaXNhYmxlXG4gcm1hcFxuIGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxuK3BhZ2V3YWxrX3JhY2VfdGVzdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IGU2ZGY5NjhmMDk3MWMuLmNkZTliMjJmMTIxZDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbkBAIC0xMDUsNiArMTA1LDcgQEAgVEVTVF9HRU5fRklMRVMgKz0gZ3VhcmQtcmVnaW9uc1xuIFRFU1RfR0VOX0ZJTEVTICs9IG1lcmdlXG4gVEVTVF9HRU5fRklMRVMgKz0gcm1hcFxuIFRFU1RfR0VOX0ZJTEVTICs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxuK1RFU1RfR0VOX0ZJTEVTICs9IHBhZ2V3YWxrX3JhY2VfdGVzdFxuIFxuIGlmbmVxICgkKEFSQ0gpLGFybTY0KVxuIFRFU1RfR0VOX0ZJTEVTICs9IHNvZnQtZGlydHlcbkBAIC0xNjMsNiArMTY0LDcgQEAgVEVTVF9QUk9HUyArPSBrc2Z0X21sb2NrLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X21tYXAuc2hcbiBURVNUX1BST0dTICs9IGtzZnRfbXJlbWFwLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X3BhZ2VtYXAuc2hcbitURVNUX1BST0dTICs9IGtzZnRfcGFnZXdhbGsuc2hcbiBURVNUX1BST0dTICs9IGtzZnRfcGZubWFwLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X3BrZXkuc2hcbiBURVNUX1BST0dTICs9IGtzZnRfcHJvY2Vzc19tYWR2LnNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9wYWdld2Fsay5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfcGFnZXdhbGsuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi42ZjZjM2VlMWMxM2VmXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X3BhZ2V3YWxrLnNoXG5AQCAtMCwwICsxLDQgQEBcbisjIS9iaW4vc2ggLWVcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rLi9ydW5fdm10ZXN0cy5zaCAtdCBwYWdld2Fsa1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2V3YWxrX3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZXdhbGtfcmFjZV90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40MmZkNmU3NWU4MjFlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdld2Fsa19yYWNlX3Rlc3QuY1xuQEAgLTAsMCArMSwxMzggQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogUmVncmVzc2lvbiB0ZXN0IGZvciBhIHN0YWxlIHdhbGstXHUwMDNlYWN0aW9uIGVzY2FwaW5nIHdhbGtfcG1kX3JhbmdlKCkgYW5kXG4rICogbWFraW5nIHdhbGtfcHVkX3JhbmdlKCkgd2FsayB0aGUgc2FtZSByYW5nZSB0d2ljZS5cbisgKlxuKyAqIFRoZSBtYXBwaW5nIGlzIHR3byBQTURzIGluc2lkZSBvbmUgUFVELiBQTUQgMCBpcyBwb3B1bGF0ZWQgb25jZSBhbmQgbGVmdFxuKyAqIGFsb25lLCBQTUQgMSBpcyBmYXVsdGVkIGluIGFuZCBkcm9wcGVkIGFnYWluIGJ5IGEgc2Vjb25kIHRocmVhZC4gQ2xlYXJpbmdcbisgKiBQTUQgMSB1bmRlciBzbWFwc19wdGVfcmFuZ2UoKSBtYWtlcyBpdCByYWlzZSBBQ1RJT05fQUdBSU4sIGFuZCBzaW5jZSBpdCBpc1xuKyAqIHRoZSBsYXN0IGVudHJ5IHRoZSBzdGFsZSB2YWx1ZSBsZWF2ZXMgd2Fsa19wbWRfcmFuZ2UoKSwgc28gc21hcHMgYWNjb3VudHNcbisgKiBQTUQgMCB0d2ljZS4gQSBrZXJuZWwgdGhhdCBkb2VzIG5vdCByZWNsYWltIHRoZSBlbXB0aWVkIHBhZ2UgdGFibGUgbmV2ZXJcbisgKiBjbGVhcnMgUE1EIDEgYW5kIHNvIG5ldmVyIGhpdHMgdGhlIHJhY2UuXG4rICpcbisgKiBBIGhpdCBjYW4gb25seSBjb21lIGZyb20gdGhlIGtlcm5lbCBjb3VudGluZyB0aGUgc2FtZSBwYWdlIHR3aWNlLCBzbyB0aGVcbisgKiB0ZXN0IGNhbm5vdCBmYWlsIHNwdXJpb3VzbHkuXG4rICovXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuK1xuKyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGF0b21pYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4rXG4rI2RlZmluZSBOUl9QTURTXHRcdDJcbisjZGVmaW5lIE5SX1JPVU5EU1x0MjAwMDBcbisvKiBDYXAgb24gaG93IG11Y2ggb2YgUE1EIDAgdG8gZmF1bHQgaW4sIHNvIHRoYXQgYSBsYXJnZSBQTUQgc3RheXMgY2hlYXAuICovXG4rI2RlZmluZSBQT1BfTUFYXHRcdCgyICogMTAyNCAqIDEwMjQpXG4rXG4rc3RhdGljIGNoYXIgKmFyZWE7XG4rc3RhdGljIHNpemVfdCBwbWRfc2l6ZTtcbitzdGF0aWMgYXRvbWljX2ludCBzdG9wO1xuK1xuK3N0YXRpYyB2b2lkICpyYWNlcih2b2lkICphcmcpXG4re1xuK1x0Y2hhciAqcG1kMSA9IGFyZWEgKyBwbWRfc2l6ZTtcbitcbitcdHdoaWxlIChhdG9taWNfbG9hZF9leHBsaWNpdChcdTAwMjZzdG9wLCBtZW1vcnlfb3JkZXJfYWNxdWlyZSkgPT0gMCkge1xuK1x0XHQvKiBtYWR2aXNlKCkgYmVsb3cga2VlcHMgdGhlIGNvbXBpbGVyIGZyb20gbGlmdGluZyB0aGlzIG91dC4gKi9cbitcdFx0KnBtZDEgPSAxO1xuK1x0XHRtYWR2aXNlKHBtZDEsIHBtZF9zaXplLCBNQURWX0RPTlRORUVEKTtcbitcdH1cbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzbWFwc19yc3Nfa2Iodm9pZClcbit7XG4rXHRjaGFyIGJ1ZlsxMDI0XTtcbitcdGNoYXIgKmVudHJ5O1xuK1xuK1x0ZW50cnkgPSBfX2dldF9zbWFwX2VudHJ5KGFyZWEsIFwiUnNzOlwiLCBidWYsIHNpemVvZihidWYpKTtcbitcdGlmICghZW50cnkpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm5vIFJzczogZW50cnkgZm9yIHRoZSB0ZXN0IG1hcHBpbmdcXG5cIik7XG4rXG4rXHRyZXR1cm4gc3RydG91bChlbnRyeSwgTlVMTCwgMTApO1xuK31cbitcbitpbnQgbWFpbih2b2lkKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbWF4X3Jzc19rYiwgcnNzX2tiID0gMDtcbitcdHNpemVfdCBzaXplLCBwb3Bfc2l6ZSwgaTtcbitcdHB0aHJlYWRfdCB0aHJlYWQ7XG4rXHRjaGFyICpyYXc7XG4rXG4rXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1xuK1x0cG1kX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0aWYgKCFwbWRfc2l6ZSlcbitcdFx0a3NmdF9leGl0X3NraXAoXCJDYW5ub3QgZGV0ZXJtaW5lIFBNRCBzaXplXFxuXCIpO1xuK1xuK1x0aWYgKHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pIFx1MDAzYyAyKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcIk5lZWQgYXQgbGVhc3QgMiBDUFVzIHRvIHJhY2VcXG5cIik7XG4rXG4rXHRzaXplID0gTlJfUE1EUyAqIHBtZF9zaXplO1xuK1xuK1x0LypcbitcdCAqIEFsaWduIHRvIHRoZSBtYXBwaW5nIHNpemUgdG8gc3RheSBpbnNpZGUgb25lIFBVRCwgdGhlbiB0cmltIHRoZVxuK1x0ICogc2xhY2sgc28gdGhhdCBzbWFwcyBoYXMgZXhhY3RseSBvbmUgVk1BIHRvIHJlcG9ydC5cbitcdCAqL1xuK1x0cmF3ID0gbW1hcChOVUxMLCAyICogc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSwgLTEsIDApO1xuK1x0aWYgKHJhdyA9PSBNQVBfRkFJTEVEKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJtbWFwIGZhaWxlZFxcblwiKTtcbitcbitcdGFyZWEgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpcmF3ICsgc2l6ZSAtIDEpIFx1MDAyNiB+KHNpemUgLSAxKSk7XG4rXHRpZiAoYXJlYSAhPSByYXcpXG4rXHRcdG11bm1hcChyYXcsIGFyZWEgLSByYXcpO1xuK1x0aWYgKHJhdyArIDIgKiBzaXplICE9IGFyZWEgKyBzaXplKVxuK1x0XHRtdW5tYXAoYXJlYSArIHNpemUsIHJhdyArIDIgKiBzaXplIC0gKGFyZWEgKyBzaXplKSk7XG4rXG4rXHQvKiBBIGh1Z2UgUE1EIG5ldmVyIHJlYWNoZXMgcHRlX29mZnNldF9tYXBfbG9jaygpLCBzbyBrZWVwIHRoZW0gb3V0LiAqL1xuK1x0aWYgKG1hZHZpc2UoYXJlYSwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKSlcbitcdFx0a3NmdF9leGl0X3NraXAoXCJNQURWX05PSFVHRVBBR0UgZmFpbGVkXFxuXCIpO1xuK1xuK1x0cG9wX3NpemUgPSBwbWRfc2l6ZSBcdTAwM2MgUE9QX01BWCA/IHBtZF9zaXplIDogUE9QX01BWDtcbitcdG1lbXNldChhcmVhLCAxLCBwb3Bfc2l6ZSk7XG4rXG4rXHRtYXhfcnNzX2tiID0gKHBvcF9zaXplIFx1MDAzZVx1MDAzZSAxMCkgKyAyNTY7XG4rXG4rXHQvKiBPdmVyIHRoZSBsaW1pdCBiZWZvcmUgcmFjaW5nIG1lYW5zIHRoaXMgaXMgbm90IG91ciBvd24gbWFwcGluZy4gKi9cbitcdHJzc19rYiA9IHNtYXBzX3Jzc19rYigpO1xuK1x0aWYgKHJzc19rYiBcdTAwM2UgbWF4X3Jzc19rYilcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiUnNzIGlzICVsdSBrQiBiZWZvcmUgcmFjaW5nLCBleHBlY3RlZCBhdCBtb3N0ICVsdSBrQlxcblwiLFxuK1x0XHRcdFx0ICAgcnNzX2tiLCBtYXhfcnNzX2tiKTtcbitcbitcdGtzZnRfc2V0X3BsYW4oMSk7XG4rXHRrc2Z0X3ByaW50X21zZyhcInJhY2luZyBzbWFwcyBhZ2FpbnN0IE1BRFZfRE9OVE5FRUQsICVkIHJvdW5kc1xcblwiLFxuK1x0XHQgICAgICAgTlJfUk9VTkRTKTtcbitcbitcdGlmIChwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIHJhY2VyLCBOVUxMKSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicHRocmVhZF9jcmVhdGUgZmFpbGVkXFxuXCIpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfUk9VTkRTOyBpKyspIHtcbitcdFx0cnNzX2tiID0gc21hcHNfcnNzX2tiKCk7XG4rXHRcdGlmIChyc3Nfa2IgXHUwMDNlIG1heF9yc3Nfa2IpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRhdG9taWNfc3RvcmVfZXhwbGljaXQoXHUwMDI2c3RvcCwgMSwgbWVtb3J5X29yZGVyX3JlbGVhc2UpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XG4rXG4rXHRpZiAoaSBcdTAwM2MgTlJfUk9VTkRTKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwid2FsayByYW4gdHdpY2Ugb3ZlciB0aGUgc2FtZSByYW5nZVxcblwiKTtcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFwiUnNzICVsdSBrQiBleGNlZWRzICVsdSBrQiwgcm91bmQgJXp1XFxuXCIsXG4rXHRcdFx0XHQgICAgICByc3Nfa2IsIG1heF9yc3Nfa2IsIGkpO1xuK1x0fSBlbHNlIHtcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFwiUnNzIHdpdGhpbiAlbHUga0Igb3ZlciAlZCByb3VuZHNcXG5cIixcbitcdFx0XHRcdCAgICAgIG1heF9yc3Nfa2IsIE5SX1JPVU5EUyk7XG4rXHR9XG4rXG4rXHRrc2Z0X2V4aXQoaSA9PSBOUl9ST1VORFMpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbmluZGV4IDhjMjk2ZGVkZjA0NzQuLmQ5MGM2MzcwODE0ZjcgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0zOTgsNiArMzk4LDggQEAgZmlcbiBcbiBDQVRFR09SWT1cInBhZ2VtYXBcIiBydW5fdGVzdCAuL3BhZ2VtYXBfaW9jdGxcbiBcbitDQVRFR09SWT1cInBhZ2V3YWxrXCIgcnVuX3Rlc3QgLi9wYWdld2Fsa19yYWNlX3Rlc3RcbitcbiBDQVRFR09SWT1cInBmbm1hcFwiIHJ1bl90ZXN0IC4vcGZubWFwXG4gXG4gIyBDT1cgdGVzdHNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbmluZGV4IGVhOGZjOGZkZjBlYjAuLjYyMjkyZTI0MTdkMTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuQEAgLTg4LDYgKzg4LDcgQEAgYm9vbCBwYWdlbWFwX2lzX3BvcHVsYXRlZChpbnQgZmQsIGNoYXIgKnN0YXJ0KTtcbiB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfZ2V0X3BmbihpbnQgZmQsIGNoYXIgKnN0YXJ0KTtcbiB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTtcbiBib29sIGNoZWNrX2Zvcl9wYXR0ZXJuKEZJTEUgKmZwLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xuK2NoYXIgKl9fZ2V0X3NtYXBfZW50cnkodm9pZCAqYWRkciwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbiB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKTtcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpO1xuIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTE6MjAuNDEzNjQzNTAzWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTIwMzQ4ODEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhZ2UgVGFibGUgV2Fsa2VyIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYWZ0ZXIgYSBxdWljayByZXZpZXcsIEkgc2VlIGl0IG1vZGlmaWVzIGBtbS9wYWdld2Fsay5jYCBhbmQgYWRkcyBhIG5ldyB0ZXN0LiBNeSBtYWluIGNvbmNlcm4gaXMsIG9mIGNvdXJzZSwgdGhlIGxvZ2ljIGFyb3VuZCB0aGUgcGFnZSB0YWJsZSB3YWxraW5nLiBUaGUgZ2lzdCBvZiBpdCBpcyB0aGUgbW92ZW1lbnQgb2YgYHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7YCBpbnNpZGUgdGhlIGxvb3AgaW4gYHdhbGtfcG1kX3JhbmdlYCBhbmQgYHdhbGtfcHVkX3JhbmdlYC4gVGhpcyBpcyBkZXNpZ25lZCB0byBhZGRyZXNzIGEgZmxhdyB3aGVyZSBhIHN0YWxlIGB3YWxrLVx1MDAzZWFjdGlvbmAgdmFsdWUgKGxpa2UgYEFDVElPTl9BR0FJTmApIGNvdWxkLCBpbiBjZXJ0YWluIHNpdHVhdGlvbnMsIGNhdXNlIHRoZSBzYW1lIG1lbW9yeSByYW5nZSB0byBiZSB3YWxrZWQgdHdpY2UsIHdoaWNoIGlzIG9idmlvdXNseSBub3Qgd2hhdCB3ZSB3YW50LlxuXG5JJ3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGNsb3NlbHksIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyBpbiBgbW0vcGFnZXdhbGsuY2AuIEl0J3MgY2xlYXIgdGhpcyBpcyBhIHB1cmUgY29udHJvbCBmbG93IGJ1Zy4gVGhlIG9yaWdpbmFsIHBsYWNlbWVudCBjb3VsZCBsZWFkIHRvIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBhY3Rpb24gZmxhZyBpc24ndCBwcm9wZXJseSByZXNldCB3aXRoaW4gdGhlIGxvb3AsIGxlYWRpbmcgdG8gdGhlIHJhbmdlIGJlaW5nIHJlLXdhbGtlZC4gTW92aW5nIHRoZSBhc3NpZ25tZW50IGVuc3VyZXMgdGhhdCBgQUNUSU9OX1NVQlRSRUVgIGlzIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggaXRlcmF0aW9uLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcy4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGlzbid0IGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvcm1hdGlvbiBsZWFrcy4gQWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW52b2x2ZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gV2UncmUgc2ltcGx5IHJlc2V0dGluZyBhIHN0YXRlIHZhcmlhYmxlIGZvciBjb3JyZWN0IGNvbnRyb2wgZmxvdy4gVGhlIGB3YWxrLVx1MDAzZWFjdGlvbmAgdmFyaWFibGUsIGEgZmllbGQgd2l0aGluIHRoZSBgc3RydWN0IG1tX3dhbGtgLCBpcyBiZWluZyByZXNldCB0byBgQUNUSU9OX1NVQlRSRUVgIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsb29wLlxuXG5HaXZlbiB0aGF0IHRoaXMgZml4IGlzIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnktcmVsYXRlZCBvcGVyYXRpb25zIG9yIHBvdGVudGlhbCBpbmZvLWxlYWtzLCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyBOZWVkc0tNU0FOIHRvIGZhbHNlLiBUaGUgc3RhbmRhcmQgdGVzdHMsIGFsb25nc2lkZSBLQVNBTiwgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoaXMgZml4LiBJdCdzIGEgY2xlYW4sIHRhcmdldGVkIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgc3BlY2lmaWMgbG9naWMgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwODUsIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTE6MzAuOTMzOTk1NDQ2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgcGFnZSB0YWJsZSB3YWxrZXIgKGBtbS9wYWdld2Fsay5jYCkgd2hlcmUgYSBzdGFsZSBgd2Fsay1cXHUwMDNlYWN0aW9uYCAoZS5nLiwgYEFDVElPTl9BR0FJTmApIGNvdWxkIGVzY2FwZSBhIGxvd2VyLWxldmVsIHdhbGsgZnVuY3Rpb24gYW5kIGNhdXNlIHRoZSBoaWdoZXItbGV2ZWwgd2FsayBmdW5jdGlvbiB0byBpbmNvcnJlY3RseSByZXBlYXQgdGhlIHdhbGsgb3ZlciB0aGUgc2FtZSByYW5nZS4gVGhlIGZpeCBzaW1wbHkgbW92ZXMgdGhlIGFzc2lnbm1lbnQgYHdhbGstXFx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO2AgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcC4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGNvbnRyb2wgZmxvdyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MsIGFuZCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIHBhZ2UgdGFibGUgd2Fsa2VyIChgbW0vcGFnZXdhbGsuY2ApIHdoZXJlIGEgc3RhbGUgYHdhbGstXFx1MDAzZWFjdGlvbmAgKGUuZy4sIGBBQ1RJT05fQUdBSU5gKSBjb3VsZCBlc2NhcGUgYSBsb3dlci1sZXZlbCB3YWxrIGZ1bmN0aW9uIGFuZCBjYXVzZSB0aGUgaGlnaGVyLWxldmVsIHdhbGsgZnVuY3Rpb24gdG8gaW5jb3JyZWN0bHkgcmVwZWF0IHRoZSB3YWxrIG92ZXIgdGhlIHNhbWUgcmFuZ2UuIFRoZSBmaXggc2ltcGx5IG1vdmVzIHRoZSBhc3NpZ25tZW50IGB3YWxrLVxcdTAwM2VhY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTtgIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBjb250cm9sIGZsb3cgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLCBhbmQgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowf6svk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 16:49:15 +0000 UTC FinishedAt: 2026-08-11 17:11:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "511c7a2c5acf478c7d4be3386455a66d114ba929", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "511c7a2c5acf478c7d4be3386455a66d114ba929", "config_name": "upstream-apparmor-kasan.config", "series_id": "54878d3b-dfb0-4dcf-932b-a28823bad38e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "walk_page_range", "walk_page_vma", "walk_page_mapping" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDE3OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O3dhbGtfcGFnZV92bWEmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX21hcHBpbmcmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgcGFnZSB0YWJsZSB3YWxrZXIgKGBtbS9wYWdld2Fsay5jYCkgd2hlcmUgYSBzdGFsZSBgd2Fsay1cdTAwM2VhY3Rpb25gIChlLmcuLCBgQUNUSU9OX0FHQUlOYCkgY291bGQgZXNjYXBlIGEgbG93ZXItbGV2ZWwgd2FsayBmdW5jdGlvbiBhbmQgY2F1c2UgdGhlIGhpZ2hlci1sZXZlbCB3YWxrIGZ1bmN0aW9uIHRvIGluY29ycmVjdGx5IHJlcGVhdCB0aGUgd2FsayBvdmVyIHRoZSBzYW1lIHJhbmdlLiBUaGUgZml4IHNpbXBseSBtb3ZlcyB0aGUgYXNzaWdubWVudCBgd2Fsay1cdTAwM2VhY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTtgIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBjb250cm9sIGZsb3cgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLCBhbmQgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvcmUgTU0gcGFnZSB3YWxraW5nIGxvZ2ljICh3YWxrX3BtZF9yYW5nZSwgd2Fsa19wdWRfcmFuZ2UpIHdoZXJlIGEgc3RhbGUgd2Fsay1cdTAwM2VhY3Rpb24gY291bGQgY2F1c2UgdGhlIHNhbWUgcmFuZ2UgdG8gYmUgd2Fsa2VkIHR3aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgKGUuZy4sIHZpYSAvcHJvYy9waWQvc21hcHMgb3IgbWFkdmlzZSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTc6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NzAwZDY5OWNmMzQ3ZDRkMDkzMTJmOGJlMzcyNjVhNmI3MzE3MDhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTc6MTA6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcbmluZGV4IDVkODdjNjMyYTI1NTAuLmQzYmZlY2UzMTkzMzYgMTAwNjQ0XG4tLS0gYS9tbS9wYWdld2Fsay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jXG5AQCAtMTI2LDYgJiM0MzsxMjYsNyBAQCBzdGF0aWMgaW50IHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7XG4gXHRkbyB7XG4gYWdhaW46XG4mIzQzO1x0XHR3YWxrLVx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO1xuIFx0XHRuZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4gXHRcdGlmIChwbWRfbm9uZSgqcG1kKSkge1xuIFx0XHRcdGlmIChoYXNfaW5zdGFsbClcbkBAIC0xMzgsOCAmIzQzOzEzOSw2IEBAIHN0YXRpYyBpbnQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4tXHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7XG4tXG4gXHRcdC8qXG4gXHRcdCAqIFRoaXMgaW1wbGllcyB0aGF0IGVhY2ggLVx1MDAzZXBtZF9lbnRyeSgpIGhhbmRsZXJcbiBcdFx0ICogbmVlZHMgdG8ga25vdyBhYm91dCBwbWRfdHJhbnNfaHVnZSgpIHBtZHNcbkBAIC0xOTYsNiAmIzQzOzE5NSw3IEBAIHN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdHB1ZCA9IHB1ZF9vZmZzZXQocDRkLCBhZGRyKTtcbiBcdGRvIHtcbiAgYWdhaW46XG4mIzQzO1x0XHR3YWxrLVx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO1xuIFx0XHRuZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4gXHRcdGlmIChwdWRfbm9uZSgqcHVkKSkge1xuIFx0XHRcdGlmIChoYXNfaW5zdGFsbClcbkBAIC0yMDgsOCAmIzQzOzIwOCw2IEBAIHN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4tXHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7XG4tXG4gXHRcdGlmIChvcHMtXHUwMDNlcHVkX2VudHJ5KVxuIFx0XHRcdGVyciA9IG9wcy1cdTAwM2VwdWRfZW50cnkocHVkLCBhZGRyLCBuZXh0LCB3YWxrKTtcbiBcdFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZVxuaW5kZXggOWNjZDllMTQ0N2U2Ni4uOTJmOTgxZjk3NzQwZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmVcbkBAIC02NiwzICYjNDM7NjYsNCBAQCBtZXJnZVxuIHByY3RsX3RocF9kaXNhYmxlXG4gcm1hcFxuIGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxuJiM0MztwYWdld2Fsa19yYWNlX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCBlNmRmOTY4ZjA5NzFjLi5jZGU5YjIyZjEyMWQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMTA1LDYgJiM0MzsxMDUsNyBAQCBURVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VhcmQtcmVnaW9uc1xuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBtZXJnZVxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBybWFwXG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxuJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gcGFnZXdhbGtfcmFjZV90ZXN0XG4gXG4gaWZuZXEgKCQoQVJDSCksYXJtNjQpXG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IHNvZnQtZGlydHlcbkBAIC0xNjMsNiAmIzQzOzE2NCw3IEBAIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfbWxvY2suc2hcbiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X21tYXAuc2hcbiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X21yZW1hcC5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfcGFnZW1hcC5zaFxuJiM0MztURVNUX1BST0dTICYjNDM7PSBrc2Z0X3BhZ2V3YWxrLnNoXG4gVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wZm5tYXAuc2hcbiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X3BrZXkuc2hcbiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X3Byb2Nlc3NfbWFkdi5zaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfcGFnZXdhbGsuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X3BhZ2V3YWxrLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNmY2YzNlZTFjMTNlZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9wYWdld2Fsay5zaFxuQEAgLTAsMCAmIzQzOzEsNCBAQFxuJiM0MzsjIS9iaW4vc2ggLWVcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7Li9ydW5fdm10ZXN0cy5zaCAtdCBwYWdld2Fsa1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2V3YWxrX3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZXdhbGtfcmFjZV90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40MmZkNmU3NWU4MjFlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdld2Fsa19yYWNlX3Rlc3QuY1xuQEAgLTAsMCAmIzQzOzEsMTM4IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBzdGFsZSB3YWxrLVx1MDAzZWFjdGlvbiBlc2NhcGluZyB3YWxrX3BtZF9yYW5nZSgpIGFuZFxuJiM0MzsgKiBtYWtpbmcgd2Fsa19wdWRfcmFuZ2UoKSB3YWxrIHRoZSBzYW1lIHJhbmdlIHR3aWNlLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgbWFwcGluZyBpcyB0d28gUE1EcyBpbnNpZGUgb25lIFBVRC4gUE1EIDAgaXMgcG9wdWxhdGVkIG9uY2UgYW5kIGxlZnRcbiYjNDM7ICogYWxvbmUsIFBNRCAxIGlzIGZhdWx0ZWQgaW4gYW5kIGRyb3BwZWQgYWdhaW4gYnkgYSBzZWNvbmQgdGhyZWFkLiBDbGVhcmluZ1xuJiM0MzsgKiBQTUQgMSB1bmRlciBzbWFwc19wdGVfcmFuZ2UoKSBtYWtlcyBpdCByYWlzZSBBQ1RJT05fQUdBSU4sIGFuZCBzaW5jZSBpdCBpc1xuJiM0MzsgKiB0aGUgbGFzdCBlbnRyeSB0aGUgc3RhbGUgdmFsdWUgbGVhdmVzIHdhbGtfcG1kX3JhbmdlKCksIHNvIHNtYXBzIGFjY291bnRzXG4mIzQzOyAqIFBNRCAwIHR3aWNlLiBBIGtlcm5lbCB0aGF0IGRvZXMgbm90IHJlY2xhaW0gdGhlIGVtcHRpZWQgcGFnZSB0YWJsZSBuZXZlclxuJiM0MzsgKiBjbGVhcnMgUE1EIDEgYW5kIHNvIG5ldmVyIGhpdHMgdGhlIHJhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIEEgaGl0IGNhbiBvbmx5IGNvbWUgZnJvbSB0aGUga2VybmVsIGNvdW50aW5nIHRoZSBzYW1lIHBhZ2UgdHdpY2UsIHNvIHRoZVxuJiM0MzsgKiB0ZXN0IGNhbm5vdCBmYWlsIHNwdXJpb3VzbHkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYXRvbWljLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTlJfUE1EU1x0XHQyXG4mIzQzOyNkZWZpbmUgTlJfUk9VTkRTXHQyMDAwMFxuJiM0MzsvKiBDYXAgb24gaG93IG11Y2ggb2YgUE1EIDAgdG8gZmF1bHQgaW4sIHNvIHRoYXQgYSBsYXJnZSBQTUQgc3RheXMgY2hlYXAuICovXG4mIzQzOyNkZWZpbmUgUE9QX01BWFx0XHQoMiAqIDEwMjQgKiAxMDI0KVxuJiM0MztcbiYjNDM7c3RhdGljIGNoYXIgKmFyZWE7XG4mIzQzO3N0YXRpYyBzaXplX3QgcG1kX3NpemU7XG4mIzQzO3N0YXRpYyBhdG9taWNfaW50IHN0b3A7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqcmFjZXIodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqcG1kMSA9IGFyZWEgJiM0MzsgcG1kX3NpemU7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChhdG9taWNfbG9hZF9leHBsaWNpdChcdTAwMjZzdG9wLCBtZW1vcnlfb3JkZXJfYWNxdWlyZSkgPT0gMCkge1xuJiM0MztcdFx0LyogbWFkdmlzZSgpIGJlbG93IGtlZXBzIHRoZSBjb21waWxlciBmcm9tIGxpZnRpbmcgdGhpcyBvdXQuICovXG4mIzQzO1x0XHQqcG1kMSA9IDE7XG4mIzQzO1x0XHRtYWR2aXNlKHBtZDEsIHBtZF9zaXplLCBNQURWX0RPTlRORUVEKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHNtYXBzX3Jzc19rYih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMTAyNF07XG4mIzQzO1x0Y2hhciAqZW50cnk7XG4mIzQzO1xuJiM0MztcdGVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhcmVhLCBcJiMzNDtSc3M6XCYjMzQ7LCBidWYsIHNpemVvZihidWYpKTtcbiYjNDM7XHRpZiAoIWVudHJ5KVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O25vIFJzczogZW50cnkgZm9yIHRoZSB0ZXN0IG1hcHBpbmdcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3RydG91bChlbnRyeSwgTlVMTCwgMTApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtYXhfcnNzX2tiLCByc3Nfa2IgPSAwO1xuJiM0MztcdHNpemVfdCBzaXplLCBwb3Bfc2l6ZSwgaTtcbiYjNDM7XHRwdGhyZWFkX3QgdGhyZWFkO1xuJiM0MztcdGNoYXIgKnJhdztcbiYjNDM7XG4mIzQzO1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XG4mIzQzO1x0cG1kX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcdGlmICghcG1kX3NpemUpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtDYW5ub3QgZGV0ZXJtaW5lIFBNRCBzaXplXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pIFx1MDAzYyAyKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7TmVlZCBhdCBsZWFzdCAyIENQVXMgdG8gcmFjZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHNpemUgPSBOUl9QTURTICogcG1kX3NpemU7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWxpZ24gdG8gdGhlIG1hcHBpbmcgc2l6ZSB0byBzdGF5IGluc2lkZSBvbmUgUFVELCB0aGVuIHRyaW0gdGhlXG4mIzQzO1x0ICogc2xhY2sgc28gdGhhdCBzbWFwcyBoYXMgZXhhY3RseSBvbmUgVk1BIHRvIHJlcG9ydC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyYXcgPSBtbWFwKE5VTEwsIDIgKiBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0ICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSwgLTEsIDApO1xuJiM0MztcdGlmIChyYXcgPT0gTUFQX0ZBSUxFRClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDttbWFwIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGFyZWEgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpcmF3ICYjNDM7IHNpemUgLSAxKSBcdTAwMjYgfihzaXplIC0gMSkpO1xuJiM0MztcdGlmIChhcmVhICE9IHJhdylcbiYjNDM7XHRcdG11bm1hcChyYXcsIGFyZWEgLSByYXcpO1xuJiM0MztcdGlmIChyYXcgJiM0MzsgMiAqIHNpemUgIT0gYXJlYSAmIzQzOyBzaXplKVxuJiM0MztcdFx0bXVubWFwKGFyZWEgJiM0Mzsgc2l6ZSwgcmF3ICYjNDM7IDIgKiBzaXplIC0gKGFyZWEgJiM0Mzsgc2l6ZSkpO1xuJiM0MztcbiYjNDM7XHQvKiBBIGh1Z2UgUE1EIG5ldmVyIHJlYWNoZXMgcHRlX29mZnNldF9tYXBfbG9jaygpLCBzbyBrZWVwIHRoZW0gb3V0LiAqL1xuJiM0MztcdGlmIChtYWR2aXNlKGFyZWEsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSkpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtNQURWX05PSFVHRVBBR0UgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cG9wX3NpemUgPSBwbWRfc2l6ZSBcdTAwM2MgUE9QX01BWCA/IHBtZF9zaXplIDogUE9QX01BWDtcbiYjNDM7XHRtZW1zZXQoYXJlYSwgMSwgcG9wX3NpemUpO1xuJiM0MztcbiYjNDM7XHRtYXhfcnNzX2tiID0gKHBvcF9zaXplIFx1MDAzZVx1MDAzZSAxMCkgJiM0MzsgMjU2O1xuJiM0MztcbiYjNDM7XHQvKiBPdmVyIHRoZSBsaW1pdCBiZWZvcmUgcmFjaW5nIG1lYW5zIHRoaXMgaXMgbm90IG91ciBvd24gbWFwcGluZy4gKi9cbiYjNDM7XHRyc3Nfa2IgPSBzbWFwc19yc3Nfa2IoKTtcbiYjNDM7XHRpZiAocnNzX2tiIFx1MDAzZSBtYXhfcnNzX2tiKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1JzcyBpcyAlbHUga0IgYmVmb3JlIHJhY2luZywgZXhwZWN0ZWQgYXQgbW9zdCAlbHUga0JcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgcnNzX2tiLCBtYXhfcnNzX2tiKTtcbiYjNDM7XG4mIzQzO1x0a3NmdF9zZXRfcGxhbigxKTtcbiYjNDM7XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtyYWNpbmcgc21hcHMgYWdhaW5zdCBNQURWX0RPTlRORUVELCAlZCByb3VuZHNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgTlJfUk9VTkRTKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgcmFjZXIsIE5VTEwpKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O3B0aHJlYWRfY3JlYXRlIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX1JPVU5EUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJzc19rYiA9IHNtYXBzX3Jzc19rYigpO1xuJiM0MztcdFx0aWYgKHJzc19rYiBcdTAwM2UgbWF4X3Jzc19rYilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhdG9taWNfc3RvcmVfZXhwbGljaXQoXHUwMDI2c3RvcCwgMSwgbWVtb3J5X29yZGVyX3JlbGVhc2UpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRpZiAoaSBcdTAwM2MgTlJfUk9VTkRTKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDt3YWxrIHJhbiB0d2ljZSBvdmVyIHRoZSBzYW1lIHJhbmdlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcJiMzNDtSc3MgJWx1IGtCIGV4Y2VlZHMgJWx1IGtCLCByb3VuZCAlenVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgcnNzX2tiLCBtYXhfcnNzX2tiLCBpKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFwmIzM0O1JzcyB3aXRoaW4gJWx1IGtCIG92ZXIgJWQgcm91bmRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgIG1heF9yc3Nfa2IsIE5SX1JPVU5EUyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrc2Z0X2V4aXQoaSA9PSBOUl9ST1VORFMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbmluZGV4IDhjMjk2ZGVkZjA0NzQuLmQ5MGM2MzcwODE0ZjcgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0zOTgsNiAmIzQzOzM5OCw4IEBAIGZpXG4gXG4gQ0FURUdPUlk9XCYjMzQ7cGFnZW1hcFwmIzM0OyBydW5fdGVzdCAuL3BhZ2VtYXBfaW9jdGxcbiBcbiYjNDM7Q0FURUdPUlk9XCYjMzQ7cGFnZXdhbGtcJiMzNDsgcnVuX3Rlc3QgLi9wYWdld2Fsa19yYWNlX3Rlc3RcbiYjNDM7XG4gQ0FURUdPUlk9XCYjMzQ7cGZubWFwXCYjMzQ7IHJ1bl90ZXN0IC4vcGZubWFwXG4gXG4gIyBDT1cgdGVzdHNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbmluZGV4IGVhOGZjOGZkZjBlYjAuLjYyMjkyZTI0MTdkMTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuQEAgLTg4LDYgJiM0Mzs4OCw3IEBAIGJvb2wgcGFnZW1hcF9pc19wb3B1bGF0ZWQoaW50IGZkLCBjaGFyICpzdGFydCk7XG4gdW5zaWduZWQgbG9uZyBwYWdlbWFwX2dldF9wZm4oaW50IGZkLCBjaGFyICpzdGFydCk7XG4gdm9pZCBjbGVhcl9zb2Z0ZGlydHkodm9pZCk7XG4gYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbiYjNDM7Y2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xuIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpO1xuIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZCk7XG4gYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTc6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O3dhbGtfcGFnZV92bWEmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX21hcHBpbmcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBjb3JlIE1NIHBhZ2Ugd2Fsa2luZyBsb2dpYyAod2Fsa19wbWRfcmFuZ2UsIHdhbGtfcHVkX3JhbmdlKSB3aGVyZSBhIHN0YWxlIHdhbGstXHUwMDNlYWN0aW9uIGNvdWxkIGNhdXNlIHRoZSBzYW1lIHJhbmdlIHRvIGJlIHdhbGtlZCB0d2ljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIChlLmcuLCB2aWEgL3Byb2MvcGlkL3NtYXBzIG9yIG1hZHZpc2UpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjcwMGQ2OTljZjM0N2Q0ZDA5MzEyZjhiZTM3MjY1YTZiNzMxNzA4ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDE3OjEwOjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmMKaW5kZXggNWQ4N2M2MzJhMjU1MC4uZDNiZmVjZTMxOTMzNiAxMDA2NDQKLS0tIGEvbW0vcGFnZXdhbGsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jCkBAIC0xMjYsNiAmIzQzOzEyNiw3IEBAIHN0YXRpYyBpbnQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CiAJZG8gewogYWdhaW46CiYjNDM7CQl3YWxrLSZndDthY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTsKIAkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocG1kX25vbmUoKnBtZCkpIHsKIAkJCWlmIChoYXNfaW5zdGFsbCkKQEAgLTEzOCw4ICYjNDM7MTM5LDYgQEAgc3RhdGljIGludCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCWNvbnRpbnVlOwogCQl9CiAKLQkJd2Fsay0mZ3Q7YWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7Ci0KIAkJLyoKIAkJICogVGhpcyBpbXBsaWVzIHRoYXQgZWFjaCAtJmd0O3BtZF9lbnRyeSgpIGhhbmRsZXIKIAkJICogbmVlZHMgdG8ga25vdyBhYm91dCBwbWRfdHJhbnNfaHVnZSgpIHBtZHMKQEAgLTE5Niw2ICYjNDM7MTk1LDcgQEAgc3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXB1ZCA9IHB1ZF9vZmZzZXQocDRkLCBhZGRyKTsKIAlkbyB7CiAgYWdhaW46CiYjNDM7CQl3YWxrLSZndDthY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTsKIAkJbmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocHVkX25vbmUoKnB1ZCkpIHsKIAkJCWlmIChoYXNfaW5zdGFsbCkKQEAgLTIwOCw4ICYjNDM7MjA4LDYgQEAgc3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCWNvbnRpbnVlOwogCQl9CiAKLQkJd2Fsay0mZ3Q7YWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7Ci0KIAkJaWYgKG9wcy0mZ3Q7cHVkX2VudHJ5KQogCQkJZXJyID0gb3BzLSZndDtwdWRfZW50cnkocHVkLCBhZGRyLCBuZXh0LCB3YWxrKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlCmluZGV4IDljY2Q5ZTE0NDdlNjYuLjkyZjk4MWY5Nzc0MGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZQpAQCAtNjYsMyAmIzQzOzY2LDQgQEAgbWVyZ2UKIHByY3RsX3RocF9kaXNhYmxlCiBybWFwCiBmb2xpb19zcGxpdF9yYWNlX3Rlc3QKJiM0MztwYWdld2Fsa19yYWNlX3Rlc3QKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKaW5kZXggZTZkZjk2OGYwOTcxYy4uY2RlOWIyMmYxMjFkNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKQEAgLTEwNSw2ICYjNDM7MTA1LDcgQEAgVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGd1YXJkLXJlZ2lvbnMKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBtZXJnZQogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IHJtYXAKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBmb2xpb19zcGxpdF9yYWNlX3Rlc3QKJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gcGFnZXdhbGtfcmFjZV90ZXN0CiAKIGlmbmVxICgkKEFSQ0gpLGFybTY0KQogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IHNvZnQtZGlydHkKQEAgLTE2Myw2ICYjNDM7MTY0LDcgQEAgVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9tbG9jay5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9tbWFwLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X21yZW1hcC5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wYWdlbWFwLnNoCiYjNDM7VEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wYWdld2Fsay5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wZm5tYXAuc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfcGtleS5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wcm9jZXNzX21hZHYuc2gKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfcGFnZXdhbGsuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X3BhZ2V3YWxrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAuLjZmNmMzZWUxYzEzZWYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X3BhZ2V3YWxrLnNoCkBAIC0wLDAgJiM0MzsxLDQgQEAKJiM0MzsjIS9iaW4vc2ggLWUKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7Li9ydW5fdm10ZXN0cy5zaCAtdCBwYWdld2FsawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZXdhbGtfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdld2Fsa19yYWNlX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi40MmZkNmU3NWU4MjFlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZXdhbGtfcmFjZV90ZXN0LmMKQEAgLTAsMCAmIzQzOzEsMTM4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBzdGFsZSB3YWxrLSZndDthY3Rpb24gZXNjYXBpbmcgd2Fsa19wbWRfcmFuZ2UoKSBhbmQKJiM0MzsgKiBtYWtpbmcgd2Fsa19wdWRfcmFuZ2UoKSB3YWxrIHRoZSBzYW1lIHJhbmdlIHR3aWNlLgomIzQzOyAqCiYjNDM7ICogVGhlIG1hcHBpbmcgaXMgdHdvIFBNRHMgaW5zaWRlIG9uZSBQVUQuIFBNRCAwIGlzIHBvcHVsYXRlZCBvbmNlIGFuZCBsZWZ0CiYjNDM7ICogYWxvbmUsIFBNRCAxIGlzIGZhdWx0ZWQgaW4gYW5kIGRyb3BwZWQgYWdhaW4gYnkgYSBzZWNvbmQgdGhyZWFkLiBDbGVhcmluZwomIzQzOyAqIFBNRCAxIHVuZGVyIHNtYXBzX3B0ZV9yYW5nZSgpIG1ha2VzIGl0IHJhaXNlIEFDVElPTl9BR0FJTiwgYW5kIHNpbmNlIGl0IGlzCiYjNDM7ICogdGhlIGxhc3QgZW50cnkgdGhlIHN0YWxlIHZhbHVlIGxlYXZlcyB3YWxrX3BtZF9yYW5nZSgpLCBzbyBzbWFwcyBhY2NvdW50cwomIzQzOyAqIFBNRCAwIHR3aWNlLiBBIGtlcm5lbCB0aGF0IGRvZXMgbm90IHJlY2xhaW0gdGhlIGVtcHRpZWQgcGFnZSB0YWJsZSBuZXZlcgomIzQzOyAqIGNsZWFycyBQTUQgMSBhbmQgc28gbmV2ZXIgaGl0cyB0aGUgcmFjZS4KJiM0MzsgKgomIzQzOyAqIEEgaGl0IGNhbiBvbmx5IGNvbWUgZnJvbSB0aGUga2VybmVsIGNvdW50aW5nIHRoZSBzYW1lIHBhZ2UgdHdpY2UsIHNvIHRoZQomIzQzOyAqIHRlc3QgY2Fubm90IGZhaWwgc3B1cmlvdXNseS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3B0aHJlYWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYXRvbWljLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlJfUE1EUwkJMgomIzQzOyNkZWZpbmUgTlJfUk9VTkRTCTIwMDAwCiYjNDM7LyogQ2FwIG9uIGhvdyBtdWNoIG9mIFBNRCAwIHRvIGZhdWx0IGluLCBzbyB0aGF0IGEgbGFyZ2UgUE1EIHN0YXlzIGNoZWFwLiAqLwomIzQzOyNkZWZpbmUgUE9QX01BWAkJKDIgKiAxMDI0ICogMTAyNCkKJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqYXJlYTsKJiM0MztzdGF0aWMgc2l6ZV90IHBtZF9zaXplOwomIzQzO3N0YXRpYyBhdG9taWNfaW50IHN0b3A7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnJhY2VyKHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CWNoYXIgKnBtZDEgPSBhcmVhICYjNDM7IHBtZF9zaXplOwomIzQzOwomIzQzOwl3aGlsZSAoYXRvbWljX2xvYWRfZXhwbGljaXQoJmFtcDtzdG9wLCBtZW1vcnlfb3JkZXJfYWNxdWlyZSkgPT0gMCkgewomIzQzOwkJLyogbWFkdmlzZSgpIGJlbG93IGtlZXBzIHRoZSBjb21waWxlciBmcm9tIGxpZnRpbmcgdGhpcyBvdXQuICovCiYjNDM7CQkqcG1kMSA9IDE7CiYjNDM7CQltYWR2aXNlKHBtZDEsIHBtZF9zaXplLCBNQURWX0RPTlRORUVEKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc21hcHNfcnNzX2tiKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlsxMDI0XTsKJiM0MzsJY2hhciAqZW50cnk7CiYjNDM7CiYjNDM7CWVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhcmVhLCAmIzM0O1JzczomIzM0OywgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CWlmICghZW50cnkpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtubyBSc3M6IGVudHJ5IGZvciB0aGUgdGVzdCBtYXBwaW5nXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiBzdHJ0b3VsKGVudHJ5LCBOVUxMLCAxMCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKHZvaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIG1heF9yc3Nfa2IsIHJzc19rYiA9IDA7CiYjNDM7CXNpemVfdCBzaXplLCBwb3Bfc2l6ZSwgaTsKJiM0MzsJcHRocmVhZF90IHRocmVhZDsKJiM0MzsJY2hhciAqcmF3OwomIzQzOwomIzQzOwlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwomIzQzOwlwbWRfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CWlmICghcG1kX3NpemUpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O0Nhbm5vdCBkZXRlcm1pbmUgUE1EIHNpemVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pICZsdDsgMikKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7TmVlZCBhdCBsZWFzdCAyIENQVXMgdG8gcmFjZVxuJiMzNDspOwomIzQzOwomIzQzOwlzaXplID0gTlJfUE1EUyAqIHBtZF9zaXplOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBbGlnbiB0byB0aGUgbWFwcGluZyBzaXplIHRvIHN0YXkgaW5zaWRlIG9uZSBQVUQsIHRoZW4gdHJpbSB0aGUKJiM0MzsJICogc2xhY2sgc28gdGhhdCBzbWFwcyBoYXMgZXhhY3RseSBvbmUgVk1BIHRvIHJlcG9ydC4KJiM0MzsJICovCiYjNDM7CXJhdyA9IG1tYXAoTlVMTCwgMiAqIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFLCAtMSwgMCk7CiYjNDM7CWlmIChyYXcgPT0gTUFQX0ZBSUxFRCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O21tYXAgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWFyZWEgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpcmF3ICYjNDM7IHNpemUgLSAxKSAmYW1wOyB+KHNpemUgLSAxKSk7CiYjNDM7CWlmIChhcmVhICE9IHJhdykKJiM0MzsJCW11bm1hcChyYXcsIGFyZWEgLSByYXcpOwomIzQzOwlpZiAocmF3ICYjNDM7IDIgKiBzaXplICE9IGFyZWEgJiM0Mzsgc2l6ZSkKJiM0MzsJCW11bm1hcChhcmVhICYjNDM7IHNpemUsIHJhdyAmIzQzOyAyICogc2l6ZSAtIChhcmVhICYjNDM7IHNpemUpKTsKJiM0MzsKJiM0MzsJLyogQSBodWdlIFBNRCBuZXZlciByZWFjaGVzIHB0ZV9vZmZzZXRfbWFwX2xvY2soKSwgc28ga2VlcCB0aGVtIG91dC4gKi8KJiM0MzsJaWYgKG1hZHZpc2UoYXJlYSwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKSkKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7TUFEVl9OT0hVR0VQQUdFIGZhaWxlZFxuJiMzNDspOwomIzQzOwomIzQzOwlwb3Bfc2l6ZSA9IHBtZF9zaXplICZsdDsgUE9QX01BWCA/IHBtZF9zaXplIDogUE9QX01BWDsKJiM0MzsJbWVtc2V0KGFyZWEsIDEsIHBvcF9zaXplKTsKJiM0MzsKJiM0MzsJbWF4X3Jzc19rYiA9IChwb3Bfc2l6ZSAmZ3Q7Jmd0OyAxMCkgJiM0MzsgMjU2OwomIzQzOwomIzQzOwkvKiBPdmVyIHRoZSBsaW1pdCBiZWZvcmUgcmFjaW5nIG1lYW5zIHRoaXMgaXMgbm90IG91ciBvd24gbWFwcGluZy4gKi8KJiM0MzsJcnNzX2tiID0gc21hcHNfcnNzX2tiKCk7CiYjNDM7CWlmIChyc3Nfa2IgJmd0OyBtYXhfcnNzX2tiKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7UnNzIGlzICVsdSBrQiBiZWZvcmUgcmFjaW5nLCBleHBlY3RlZCBhdCBtb3N0ICVsdSBrQlxuJiMzNDssCiYjNDM7CQkJCSAgIHJzc19rYiwgbWF4X3Jzc19rYik7CiYjNDM7CiYjNDM7CWtzZnRfc2V0X3BsYW4oMSk7CiYjNDM7CWtzZnRfcHJpbnRfbXNnKCYjMzQ7cmFjaW5nIHNtYXBzIGFnYWluc3QgTUFEVl9ET05UTkVFRCwgJWQgcm91bmRzXG4mIzM0OywKJiM0MzsJCSAgICAgICBOUl9ST1VORFMpOwomIzQzOwomIzQzOwlpZiAocHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWQsIE5VTEwsIHJhY2VyLCBOVUxMKSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3B0aHJlYWRfY3JlYXRlIGZhaWxlZFxuJiMzNDspOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTlJfUk9VTkRTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcnNzX2tiID0gc21hcHNfcnNzX2tiKCk7CiYjNDM7CQlpZiAocnNzX2tiICZndDsgbWF4X3Jzc19rYikKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlhdG9taWNfc3RvcmVfZXhwbGljaXQoJmFtcDtzdG9wLCAxLCBtZW1vcnlfb3JkZXJfcmVsZWFzZSk7CiYjNDM7CXB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpOwomIzQzOwomIzQzOwlpZiAoaSAmbHQ7IE5SX1JPVU5EUykgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDt3YWxrIHJhbiB0d2ljZSBvdmVyIHRoZSBzYW1lIHJhbmdlXG4mIzM0Oyk7CiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoJiMzNDtSc3MgJWx1IGtCIGV4Y2VlZHMgJWx1IGtCLCByb3VuZCAlenVcbiYjMzQ7LAomIzQzOwkJCQkgICAgICByc3Nfa2IsIG1heF9yc3Nfa2IsIGkpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCYjMzQ7UnNzIHdpdGhpbiAlbHUga0Igb3ZlciAlZCByb3VuZHNcbiYjMzQ7LAomIzQzOwkJCQkgICAgICBtYXhfcnNzX2tiLCBOUl9ST1VORFMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtzZnRfZXhpdChpID09IE5SX1JPVU5EUyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKaW5kZXggOGMyOTZkZWRmMDQ3NC4uZDkwYzYzNzA4MTRmNyAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKQEAgLTM5OCw2ICYjNDM7Mzk4LDggQEAgZmkKIAogQ0FURUdPUlk9JiMzNDtwYWdlbWFwJiMzNDsgcnVuX3Rlc3QgLi9wYWdlbWFwX2lvY3RsCiAKJiM0MztDQVRFR09SWT0mIzM0O3BhZ2V3YWxrJiMzNDsgcnVuX3Rlc3QgLi9wYWdld2Fsa19yYWNlX3Rlc3QKJiM0MzsKIENBVEVHT1JZPSYjMzQ7cGZubWFwJiMzNDsgcnVuX3Rlc3QgLi9wZm5tYXAKIAogIyBDT1cgdGVzdHMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAppbmRleCBlYThmYzhmZGYwZWIwLi42MjI5MmUyNDE3ZDE2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCkBAIC04OCw2ICYjNDM7ODgsNyBAQCBib29sIHBhZ2VtYXBfaXNfcG9wdWxhdGVkKGludCBmZCwgY2hhciAqc3RhcnQpOwogdW5zaWduZWQgbG9uZyBwYWdlbWFwX2dldF9wZm4oaW50IGZkLCBjaGFyICpzdGFydCk7CiB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTsKIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CiYjNDM7Y2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pOwogdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7CiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpOwogYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwODgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGluIGBtbS9wYWdld2Fsay5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHNvbWV0aGluZyBmdW5kYW1lbnRhbCB3aXRoaW4gYG1tL3BhZ2V3YWxrLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlJiMzOTtzIG1vZGlmeWluZyB0aGUgbG9jYXRpb24gb2YgYHdhbGstJmd0O2FjdGlvbiA9IEFDVElPTl9TVUJUUkVFO2Agd2l0aGluIGB3YWxrX3BtZF9yYW5nZWAgYW5kIGB3YWxrX3B1ZF9yYW5nZWAuIE1vdmluZyBpdCAqaW5zaWRlKiB0aGUgYGRvIHsgYWdhaW46IC4uLiB9YCBsb29wIGlzIHByZXR0eSB0ZWxsaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBpbnRlbmRlZCB0byBhZGRyZXNzIHNvbWUga2luZCBvZiByYWNlIGNvbmRpdGlvbiwgd2hlcmUgdGhlIGB3YWxrLSZndDthY3Rpb25gIHZhcmlhYmxlIG1pZ2h0IGJlIGhvbGRpbmcgb250byBhIHN0YWxlIHZhbHVl4oCUcGVyaGFwcyBgQUNUSU9OX0FHQUlOYOKAlGFuZCBlc2NhcGluZyB0aGUgZnVuY3Rpb24sIHVsdGltYXRlbHkgbGVhZGluZyB0byBhIHJlZHVuZGFudCB3YWxrIG9mIHRoZSBzYW1lIG1lbW9yeSByYW5nZSBieSB0aGUgY2FsbGVyLiBDbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlLgoKSSYjMzk7bGwgZG91YmxlLWNoZWNrIGV4YWN0bHkgd2hpY2ggZnVuY3Rpb25zIGFyZSBhZmZlY3RlZC4gTG9va3MgbGlrZSB0aGUgY29yZSBjaGFuZ2VzIGFyZSBpbiB0aGUgYHdhbGtfcG1kX3JhbmdlYCBhbmQgYHdhbGtfcHVkX3JhbmdlYCBmdW5jdGlvbnMsIGJvdGggb2Ygd2hpY2ggSSBrbm93IGFyZSBzdGF0aWMgd2l0aGluIHRoYXQgZmlsZS4gUmlnaHQsIGFuZCB0aGUgb3RoZXIgZW50cnkgcG9pbnRzIHRvIHRoaXMgY29kZSBhcmUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGxpa2UgYHdhbGtfcGFnZV9yYW5nZWAsIGB3YWxrX3BhZ2VfcmFuZ2Vfbm92bWFgLCBgd2Fsa19wYWdlX3ZtYWAsIGFuZCBgd2Fsa19wYWdlX21hcHBpbmdgLiBJIHNob3VsZCBwcm9iYWJseSBmYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aG9zZSBhcyB3ZWxsLCBzbyBJIGNhbiBzZWUgd2hhdCB0aGV5JiMzOTtyZSBjYWxsaW5nLiBMZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIGdldCBhIGxpc3Qgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCB3aG8mIzM5O3MgY2FsbGluZyB0aGVtLiBUaGlzJiMzOTtsbCBoZWxwIG1lIHB1dCB0aGlzIGZpeCBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgYW5kIHRydWx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkKS4qd2Fsa19wYWdlXy4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZXdhbGsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdld2Fsay5jPTQ0ND1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc192bWFfd2Fsa19sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3BhZ2V3YWxrLmMtNDcxLSAqL1xubW0vcGFnZXdhbGsuYzo0NzI6aW50IHdhbGtfcGFnZV9yYW5nZV9tbV91bnNhZmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9wYWdld2Fsay5jLTQ3My1cdFx0dW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLFxuLS1cbm1tL3BhZ2V3YWxrLmM9NTQxPXN0YXRpYyBib29sIGNoZWNrX29wc19zYWZlKGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzKVxuLS1cbm1tL3BhZ2V3YWxrLmMtNTk0LSAqL1xubW0vcGFnZXdhbGsuYzo1OTU6aW50IHdhbGtfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL3BhZ2V3YWxrLmMtNTk2LVx0XHR1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG4tLVxubW0vcGFnZXdhbGsuYz02NDY9aW50IHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2VfbG9ja2xlc3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vcGFnZXdhbGsuYy02ODEtICovXG5tbS9wYWdld2Fsay5jOjY4MjppbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vcGFnZXdhbGsuYy02ODMtXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG4tLVxubW0vcGFnZXdhbGsuYy03MTktXG5tbS9wYWdld2Fsay5jOjcyMDppbnQgd2Fsa19wYWdlX3JhbmdlX3ZtYV91bnNhZmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9wYWdld2Fsay5jLTcyMS1cdFx0dW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLCB2b2lkICpwcml2YXRlKVxuLS1cbm1tL3BhZ2V3YWxrLmMtNzM5LVxubW0vcGFnZXdhbGsuYzo3NDA6aW50IHdhbGtfcGFnZV9yYW5nZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9wYWdld2Fsay5jLTc0MS1cdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG4tLVxubW0vcGFnZXdhbGsuYy03NDktXG5tbS9wYWdld2Fsay5jOjc1MDppbnQgd2Fsa19wYWdlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG5tbS9wYWdld2Fsay5jLTc1MS1cdFx0dm9pZCAqcHJpdmF0ZSlcbi0tXG5tbS9wYWdld2Fsay5jLTc5OS0gKi9cbm1tL3BhZ2V3YWxrLmM6ODAwOmludCB3YWxrX3BhZ2VfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBmaXJzdF9pbmRleCxcbm1tL3BhZ2V3YWxrLmMtODAxLVx0XHQgICAgICBwZ29mZl90IG5yLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzI2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uICZhbXA7IFBhdGNoIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCB3YWxrIGZ1bmN0aW9uczogYHdhbGtfcGFnZV9yYW5nZWAsIGB3YWxrX3BhZ2VfcmFuZ2VfbW1fdW5zYWZlYCwgYHdhbGtfcGFnZV9yYW5nZV92bWFgLCBgd2Fsa19wYWdlX3JhbmdlX3ZtYV91bnNhZmVgLCBgd2Fsa19wYWdlX3ZtYWAsIGFuZCBgd2Fsa19wYWdlX21hcHBpbmdgLiBUaGV5IHNlZW0gbGlrZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGVpciByb2xlcyBpbiBwYWdlIHRhYmxlIHRyYXZlcnNhbC4gVGhleSYjMzk7cmUgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHJlcHJlc2VudCBjcnVjaWFsIGFyZWFzIG9mIHRoZSBrZXJuZWwgTU0gc3Vic3lzdGVtLgoKVGhpcyBwYXRjaCwgYXBwYXJlbnRseSwgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHN0YWxlIHZhbHVlIGlzc3VlIHdpdGggYHdhbGstJmd0O2FjdGlvbmAuIFNwZWNpZmljYWxseSwgaWYgSSB1bmRlcnN0YW5kIGl0IGNvcnJlY3RseSwgdGhlcmUgd2FzIGEgYnVnIHdoZXJlIHRoZSBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkIGR1cmluZyB0aGUgd2FsayBjb3VsZCBiZSBsZWZ0IHdpdGggaW5jb3JyZWN0IGRhdGEsIHdoaWNoIHdvdWxkIHRoZW4gY2F1c2UgdGhlIHdhbGsgdG8gcmVwZWF0LCBjYXVzaW5nIGFuIGluZGVmaW5pdGUgbG9vcCBvciBkYXRhIGNvcnJ1cHRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGJ1ZyBmaXguIFRoaXMgbmVlZHMgdGhvcm91Z2ggdGVzdGluZy4KCk5vdywgYmVmb3JlIEkgZGlnIGluIHRvbyBkZWVwLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgZnVuY3Rpb25zLCBvciB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGVtLCByZXF1aXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMuIE15IHJlY29sbGVjdGlvbiBpcyB0aGF0IGBtbS9wYWdld2Fsay5jYCBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIGJ1dCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSBxdWljayBjaGVjayB0byBydWxlIG91dCBhbnkgYnVpbGQtdGltZSBjb25kaXRpb25hbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2V3YWxrLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0zNz1tbXUtJChDT05GSUdfTU1VKVx0Oj0gaGlnaG1lbS5vIG1lbW9yeS5vIG1pbmNvcmUubyBcXFxubW0vTWFrZWZpbGUtMzgtXHRcdFx0ICAgbWxvY2subyBtbWFwLm8gbW11X2dhdGhlci5vIG1wcm90ZWN0Lm8gbXJlbWFwLm8gXFxcbm1tL01ha2VmaWxlOjM5Olx0XHRcdCAgIG1zeW5jLm8gcGFnZV92bWFfbWFwcGVkLm8gcGFnZXdhbGsubyBcXFxubW0vTWFrZWZpbGUtNDAtXHRcdFx0ICAgcGd0YWJsZS1nZW5lcmljLm8gcm1hcC5vIHZtYWxsb2MubyB2bWEubyB2bWFfZXhlYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg5NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqUGFnZSBUYWJsZSBXYWxrZXIgU3RyYXRlZ3kgUmV2aWV3KioKCkFscmlnaHQsIHNvIHRoZSBzdGFuZGFyZCBrZXJuZWwgY29uZmlndXJhdGlvbiwgd2l0aCBgQ09ORklHX01NVWAgc2V0LCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY29tcGlsZWQgZW52aXJvbm1lbnQgd2hlcmUgdGhlIHBhZ2UgdGFibGUgd2Fsa2VycyBhcmUgYWN0aXZlLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGFzc3VtcHRpb24gSSB3b3JrIGZyb20uIE5vdywgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgbWVjaGFuaXNtcy4KCk15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzLiBJJiMzOTttIHRoaW5raW5nOiBgd2Fsa19wYWdlX3JhbmdlYCwgYHdhbGtfcGFnZV92bWFgLCBhbmQgYHdhbGtfcGFnZV9tYXBwaW5nYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyDigJMgdGhlIHN0YXJ0aW5nIHBvaW50cyBmb3IgdHJhdmVyc2luZyB0aGUgcGFnZSB0YWJsZXMgdW5kZXIgdmFyaW91cyBjb25kaXRpb25zLiBUaGV5JiMzOTtyZSB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0aGUgZ2VuZXJhbCBjb250cm9sIGZsb3cgdG8gYmVnaW4uCgpCZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvIHRob3NlIHRocmVlLCBpdCBtYWtlcyBzZW5zZSB0byBnbyBvdmVyIHRoZSBgd2Fsa19wYWdlX3JhbmdlX3ZtYWAgYW5kIGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hX3Vuc2FmZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1YnRsZSBpbnRlcmFjdGlvbnMgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZWRnZSBjYXNlcyBpbiB0aGUgcmFuZ2UtYmFzZWQgd2Fsa2Vycy4gVGhlc2Ugc2hvdWxkIHBsYXkgdGhlIHJvbGUgSSBhc3N1bWUgYW5kIEkgc2hvdWxkIGJlIGF3YXJlIGlmIHRoZSBgX3Vuc2FmZWAgZnVuY3Rpb24gcmVxdWlyZXMgZnVydGhlciBhbmFseXNpcyBkdWUgdG8gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwod2Fsa19wYWdlXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2V3YWxrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE3OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyODkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgRVhQT1JUX1NZTUJPTGAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byBzaW1wbHkgKmNoZWNrKiBgRVhQT1JUX1NZTUJPTGAuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZ1bmN0aW9ucy4gV2hhdCBhcmUgaXRzIGltcGxpY2F0aW9ucyBmb3Igc3ltYm9sIHZpc2liaWxpdHk/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gSXMgdGhpcyByZWxhdGVkIHRvIGtlcm5lbCBtb2R1bGUgZGV2ZWxvcG1lbnQsIG9yIGFyZSB3ZSBsb29raW5nIGF0IHNvbWV0aGluZyBlbHNlPyBJIG5lZWQgdG8gY2xhcmlmeSB3aGF0IHByb2JsZW0gb3Igc3BlY2lmaWMgYXNwZWN0IHJlcXVpcmVzIGF0dGVudGlvbiB3aXRoaW4gdGhlIHJlYWxtIG9mIHRoZSBgRVhQT1JUX1NZTUJPTGAgbWFjcm8uIElzIHRoZXJlIGEgc3VzcGVjdGVkIGlzc3VlIG9yIGlzIHRoaXMgc2ltcGx5IGZvciBnZW5lcmFsIGFuYWx5c2lzPyBUaW1lIHRvIGFzc2VzcyB3aGF0IGV4YWN0bHkgbmVlZHMgY2hlY2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qXFwod2Fsa19wYWdlXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2V3YWxrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDk1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEJlZm9yZSBJIHN0YXJ0IGRvd24gYSBwb3RlbnRpYWxseSByYWJiaXQgaG9sZSwgbGV0JiMzOTtzIHRha2UgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIHdpdGhpbiBgbW0vcGFnZXdhbGsuY2AgZm9yIGBFWFBPUlRfU1lNQk9MYC4gVGhhdCBtYWNybyBpcyBhIGtleSBpbmRpY2F0b3IsIHJpZ2h0PyBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCYjMzk7cyBzeW1ib2wgZXhwb3J0IG1lY2hhbmlzbS4gRmluZGluZyB3aGVyZSBpdCYjMzk7cyB1c2VkIGluIHRoYXQgc3BlY2lmaWMgZmlsZeKAlHJlbGF0ZWQgdG8gcGFnZSB0YWJsZSB3YWxraW5nLCB3aGljaCBpcyBteSBpbW1lZGlhdGUgYXJlYSBvZiBpbnRlcmVzdOKAlGNvdWxkIGJlIHRoZSBxdWlja2VzdCB3YXkgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZSwgdGhlIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBiZWluZyBleHBvc2VkLCBvciB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gcGFnZXdhbGsgdGhhdCBhcmUgYmVpbmcgbWFkZSBhdmFpbGFibGUgZm9yIHVzZSBieSBrZXJuZWwgbW9kdWxlcy4gSXQmIzM5O2xsIGdpdmUgbWUgYSBkaXJlY3QgbGluZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIEkgbmVlZCwgd2l0aG91dCB1bm5lY2Vzc2FyeSBicm9hZGVyIGV4cGxvcmF0aW9uIG9mIHBvdGVudGlhbGx5IGlycmVsZXZhbnQgY29kZSBwYXRocy4gVGhpcyBkaXJlY3Qgc2VhcmNoIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gYSB2YWd1ZSBrZXl3b3JkIHNlYXJjaCwgb3IganVzdCByYW5kb21seSBsb29raW5nIGF0IHRoZSBmaWxlcy4gSXQmIzM5O3MgdGhlIG1vc3QgcHJhZ21hdGljIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2V3YWxrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzY5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW50ZXJuYWwgS2VybmVsIERhdGEgU3RydWN0dXJlczogTXkgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGNvbnNpZGVyaW5nIHRoZXNlICYjMzQ7dGhpbmdzLCYjMzQ7IGFuZCB3aGlsZSB0aGV5IG1pZ2h0IG5vdCBiZSBkaXJlY3RseSBleHBvcnRlZCBmb3IgZXh0ZXJuYWwgdXNlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhleSYjMzk7cmUgKmFic29sdXRlbHkqIGZ1bmRhbWVudGFsIGFuZCB1c2VkIGludGVybmFsbHkgYnkgYSB2YXN0IG51bWJlciBvZiBrZXJuZWwgc3Vic3lzdGVtcy4gVGhpbmsgcHJvY2ZzLCBgbWFkdmlzZWAsIGFsbCB0aG9zZSBjb3JlIGNvbXBvbmVudHMg4oCTIHRoZXkgcmVseSBvbiB0aGlzLgoKUmlnaHQsIHRpbWUgdG8gY2hlY2sgaWYgdGhleSYjMzk7cmUgc3RhdGljLiBJZiB0aGV5IGFyZSwgdGhhdCB3b3VsZCBsaW1pdCB0aGVpciBzY29wZSBzaWduaWZpY2FudGx5LiBMZXQmIzM5O3Mgc2VlLi4uIHllcCwgZGVmaW5pdGVseSBub24tc3RhdGljLiBHb29kLiBUaGF0IGV4cGFuZHMgdGhlIHBvc3NpYmlsaXRpZXMgYW5kIGhvdyB0aGV5IG1pZ2h0IGJlIG1hbmFnZWQgd2l0aGluIHRoZSBrZXJuZWwuCgpOZXh0LCBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGB3YWxrX3BhZ2VfcmFuZ2VgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgdGhpbmdzIGFyZSBhY3R1YWxseSAqdXNlZCogYW5kIGludGVyYWN0ZWQgd2l0aCBvbiBhIGdyYW51bGFyIGxldmVsLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGRlZXBlciB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHdhbGtfcGFnZV9yYW5nZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2V3YWxrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZXdhbGsuYz01NDE9c3RhdGljIGJvb2wgY2hlY2tfb3BzX3NhZmUoY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMpXG4tLVxubW0vcGFnZXdhbGsuYy01OTQtICovXG5tbS9wYWdld2Fsay5jOjU5NTppbnQgd2Fsa19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vcGFnZXdhbGsuYy01OTYtXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTc6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE1MwoJCQkJCQkJb3V0cHV0OiAxMzAKCQkJCQkJCXRob3VnaHRzOiAyNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGNsZWFybHkgYWRkcmVzc2VzIHNvbWV0aGluZyBub24tc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0JiMzOTtzIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgY29yZSBNTSBwYWdlIHdhbGtpbmcgZnVuY3Rpb25zIOKAkyBzcGVjaWZpY2FsbHksIGB3YWxrX3BtZF9yYW5nZWAgYW5kIGB3YWxrX3B1ZF9yYW5nZWAuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhLCBwb3RlbnRpYWxseSBhZmZlY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYWNyb3NzIHRoZSBib2FyZC4gVGhlIHRlc3QgY2FzZSBpbnZvbHZpbmcgYC9wcm9jL3BpZC9zbWFwc2AgdGVsbHMgbWUgdGhhdCB0aGlzIGZpeCBsaWtlbHkgdG91Y2hlcyBgc21hcHNfcHRlX3JhbmdlYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgdGhyb3VnaCBlaXRoZXIgYHdhbGtfcGFnZV92bWFgIG9yIGB3YWxrX3BhZ2VfcmFuZ2VgLgoKTXkgZm9jdXMgaXMgc2hhcnBlbmluZyBvbiB0aG9zZSBrZXkgc3ltYm9sczogYHdhbGtfcGFnZV9yYW5nZWAsIGB3YWxrX3BhZ2Vfdm1hYCwgYW5kIGB3YWxrX3BhZ2VfbWFwcGluZ2AuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBleGFtaW5lLgoKTm8gc3BlY2lhbCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLCB0aGFua2Z1bGx5IOKAkyBqdXN0IGEgc3RhbmRhcmQgTU1VLCBtZWFuaW5nIHRoaXMgaXMgYnJvYWRseSBhcHBsaWNhYmxlLgoKU28sIHN1bW1pbmcgdGhpcyB1cCBmb3IgbXlzZWxmLCBJJiMzOTtkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgJiMzNDtXb3J0aEZ1enppbmcuJiMzNDsgVGhlIGZvY3VzIHN5bWJvbHMgYXJlIGB3YWxrX3BhZ2VfcmFuZ2VgLCBgd2Fsa19wYWdlX3ZtYWAsIGFuZCBgd2Fsa19wYWdlX21hcHBpbmdgLiBUaGVyZSBhcmUgbm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgbmVlZGVkLCBhIHdpbiBmb3IgbWUuIFRoZSByZWFzb25pbmc/IFRoZSBwYXRjaCBwcmV2ZW50cyBhIHJhY2UgY29uZGl0aW9uIGluIGZ1bmRhbWVudGFsIHBhZ2Ugd2Fsa2luZyBsb2dpYy4gQSBzdGFsZSBgd2Fsay0mZ3Q7YWN0aW9uYCB2YXJpYWJsZSBjb3VsZCBsZWFkIHRvIGRvdWJsZS13YWxraW5nIHRoZSBzYW1lIG1lbW9yeSByYW5nZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGJ5IHRoaW5ncyBsaWtlIGAvcHJvYy9waWQvc21hcHNgIG9yIHN5c3RlbSBjYWxscyBsaWtlIGBtYWR2aXNlYC4gVGhpcyBjb21iaW5hdGlvbiBzY3JlYW1zICYjMzQ7dnVsbmVyYWJpbGl0eSBwb3RlbnRpYWwmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dhbGtfcGFnZV9yYW5nZSYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2Vfdm1hJiMzNDssCiAgICAmIzM0O3dhbGtfcGFnZV9tYXBwaW5nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gY29yZSBNTSBwYWdlIHdhbGtpbmcgbG9naWMgKHdhbGtfcG1kX3JhbmdlLCB3YWxrX3B1ZF9yYW5nZSkgd2hlcmUgYSBzdGFsZSB3YWxrLVx1MDAzZWFjdGlvbiBjb3VsZCBjYXVzZSB0aGUgc2FtZSByYW5nZSB0byBiZSB3YWxrZWQgdHdpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAoZS5nLiwgdmlhIC9wcm9jL3BpZC9zbWFwcyBvciBtYWR2aXNlKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3YWxrX3BhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX3ZtYSYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2VfbWFwcGluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvcmUgTU0gcGFnZSB3YWxraW5nIGxvZ2ljICh3YWxrX3BtZF9yYW5nZSwgd2Fsa19wdWRfcmFuZ2UpIHdoZXJlIGEgc3RhbGUgd2Fsay1cdTAwM2VhY3Rpb24gY291bGQgY2F1c2UgdGhlIHNhbWUgcmFuZ2UgdG8gYmUgd2Fsa2VkIHR3aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgKGUuZy4sIHZpYSAvcHJvYy9waWQvc21hcHMgb3IgbWFkdmlzZSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE3OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTc6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIHBhZ2UgdGFibGUgd2Fsa2VyIChgbW0vcGFnZXdhbGsuY2ApIHdoZXJlIGEgc3RhbGUgYHdhbGstXHUwMDNlYWN0aW9uYCAoZS5nLiwgYEFDVElPTl9BR0FJTmApIGNvdWxkIGVzY2FwZSBhIGxvd2VyLWxldmVsIHdhbGsgZnVuY3Rpb24gYW5kIGNhdXNlIHRoZSBoaWdoZXItbGV2ZWwgd2FsayBmdW5jdGlvbiB0byBpbmNvcnJlY3RseSByZXBlYXQgdGhlIHdhbGsgb3ZlciB0aGUgc2FtZSByYW5nZS4gVGhlIGZpeCBzaW1wbHkgbW92ZXMgdGhlIGFzc2lnbm1lbnQgYHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7YCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjcwMGQ2OTljZjM0N2Q0ZDA5MzEyZjhiZTM3MjY1YTZiNzMxNzA4ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDE3OjEwOjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmMKaW5kZXggNWQ4N2M2MzJhMjU1MC4uZDNiZmVjZTMxOTMzNiAxMDA2NDQKLS0tIGEvbW0vcGFnZXdhbGsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jCkBAIC0xMjYsNiAmIzQzOzEyNiw3IEBAIHN0YXRpYyBpbnQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CiAJZG8gewogYWdhaW46CiYjNDM7CQl3YWxrLSZndDthY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTsKIAkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocG1kX25vbmUoKnBtZCkpIHsKIAkJCWlmIChoYXNfaW5zdGFsbCkKQEAgLTEzOCw4ICYjNDM7MTM5LDYgQEAgc3RhdGljIGludCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCWNvbnRpbnVlOwogCQl9CiAKLQkJd2Fsay0mZ3Q7YWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7Ci0KIAkJLyoKIAkJICogVGhpcyBpbXBsaWVzIHRoYXQgZWFjaCAtJmd0O3BtZF9lbnRyeSgpIGhhbmRsZXIKIAkJICogbmVlZHMgdG8ga25vdyBhYm91dCBwbWRfdHJhbnNfaHVnZSgpIHBtZHMKQEAgLTE5Niw2ICYjNDM7MTk1LDcgQEAgc3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXB1ZCA9IHB1ZF9vZmZzZXQocDRkLCBhZGRyKTsKIAlkbyB7CiAgYWdhaW46CiYjNDM7CQl3YWxrLSZndDthY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTsKIAkJbmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocHVkX25vbmUoKnB1ZCkpIHsKIAkJCWlmIChoYXNfaW5zdGFsbCkKQEAgLTIwOCw4ICYjNDM7MjA4LDYgQEAgc3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCWNvbnRpbnVlOwogCQl9CiAKLQkJd2Fsay0mZ3Q7YWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7Ci0KIAkJaWYgKG9wcy0mZ3Q7cHVkX2VudHJ5KQogCQkJZXJyID0gb3BzLSZndDtwdWRfZW50cnkocHVkLCBhZGRyLCBuZXh0LCB3YWxrKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlCmluZGV4IDljY2Q5ZTE0NDdlNjYuLjkyZjk4MWY5Nzc0MGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZQpAQCAtNjYsMyAmIzQzOzY2LDQgQEAgbWVyZ2UKIHByY3RsX3RocF9kaXNhYmxlCiBybWFwCiBmb2xpb19zcGxpdF9yYWNlX3Rlc3QKJiM0MztwYWdld2Fsa19yYWNlX3Rlc3QKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKaW5kZXggZTZkZjk2OGYwOTcxYy4uY2RlOWIyMmYxMjFkNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKQEAgLTEwNSw2ICYjNDM7MTA1LDcgQEAgVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGd1YXJkLXJlZ2lvbnMKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBtZXJnZQogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IHJtYXAKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBmb2xpb19zcGxpdF9yYWNlX3Rlc3QKJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gcGFnZXdhbGtfcmFjZV90ZXN0CiAKIGlmbmVxICgkKEFSQ0gpLGFybTY0KQogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IHNvZnQtZGlydHkKQEAgLTE2Myw2ICYjNDM7MTY0LDcgQEAgVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9tbG9jay5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9tbWFwLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X21yZW1hcC5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wYWdlbWFwLnNoCiYjNDM7VEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wYWdld2Fsay5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wZm5tYXAuc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfcGtleS5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF9wcm9jZXNzX21hZHYuc2gKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfcGFnZXdhbGsuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X3BhZ2V3YWxrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAuLjZmNmMzZWUxYzEzZWYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X3BhZ2V3YWxrLnNoCkBAIC0wLDAgJiM0MzsxLDQgQEAKJiM0MzsjIS9iaW4vc2ggLWUKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7Li9ydW5fdm10ZXN0cy5zaCAtdCBwYWdld2FsawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZXdhbGtfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdld2Fsa19yYWNlX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi40MmZkNmU3NWU4MjFlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZXdhbGtfcmFjZV90ZXN0LmMKQEAgLTAsMCAmIzQzOzEsMTM4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBzdGFsZSB3YWxrLSZndDthY3Rpb24gZXNjYXBpbmcgd2Fsa19wbWRfcmFuZ2UoKSBhbmQKJiM0MzsgKiBtYWtpbmcgd2Fsa19wdWRfcmFuZ2UoKSB3YWxrIHRoZSBzYW1lIHJhbmdlIHR3aWNlLgomIzQzOyAqCiYjNDM7ICogVGhlIG1hcHBpbmcgaXMgdHdvIFBNRHMgaW5zaWRlIG9uZSBQVUQuIFBNRCAwIGlzIHBvcHVsYXRlZCBvbmNlIGFuZCBsZWZ0CiYjNDM7ICogYWxvbmUsIFBNRCAxIGlzIGZhdWx0ZWQgaW4gYW5kIGRyb3BwZWQgYWdhaW4gYnkgYSBzZWNvbmQgdGhyZWFkLiBDbGVhcmluZwomIzQzOyAqIFBNRCAxIHVuZGVyIHNtYXBzX3B0ZV9yYW5nZSgpIG1ha2VzIGl0IHJhaXNlIEFDVElPTl9BR0FJTiwgYW5kIHNpbmNlIGl0IGlzCiYjNDM7ICogdGhlIGxhc3QgZW50cnkgdGhlIHN0YWxlIHZhbHVlIGxlYXZlcyB3YWxrX3BtZF9yYW5nZSgpLCBzbyBzbWFwcyBhY2NvdW50cwomIzQzOyAqIFBNRCAwIHR3aWNlLiBBIGtlcm5lbCB0aGF0IGRvZXMgbm90IHJlY2xhaW0gdGhlIGVtcHRpZWQgcGFnZSB0YWJsZSBuZXZlcgomIzQzOyAqIGNsZWFycyBQTUQgMSBhbmQgc28gbmV2ZXIgaGl0cyB0aGUgcmFjZS4KJiM0MzsgKgomIzQzOyAqIEEgaGl0IGNhbiBvbmx5IGNvbWUgZnJvbSB0aGUga2VybmVsIGNvdW50aW5nIHRoZSBzYW1lIHBhZ2UgdHdpY2UsIHNvIHRoZQomIzQzOyAqIHRlc3QgY2Fubm90IGZhaWwgc3B1cmlvdXNseS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3B0aHJlYWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYXRvbWljLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlJfUE1EUwkJMgomIzQzOyNkZWZpbmUgTlJfUk9VTkRTCTIwMDAwCiYjNDM7LyogQ2FwIG9uIGhvdyBtdWNoIG9mIFBNRCAwIHRvIGZhdWx0IGluLCBzbyB0aGF0IGEgbGFyZ2UgUE1EIHN0YXlzIGNoZWFwLiAqLwomIzQzOyNkZWZpbmUgUE9QX01BWAkJKDIgKiAxMDI0ICogMTAyNCkKJiM0MzsKJiM0MztzdGF0aWMgY2hhciAqYXJlYTsKJiM0MztzdGF0aWMgc2l6ZV90IHBtZF9zaXplOwomIzQzO3N0YXRpYyBhdG9taWNfaW50IHN0b3A7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnJhY2VyKHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CWNoYXIgKnBtZDEgPSBhcmVhICYjNDM7IHBtZF9zaXplOwomIzQzOwomIzQzOwl3aGlsZSAoYXRvbWljX2xvYWRfZXhwbGljaXQoJmFtcDtzdG9wLCBtZW1vcnlfb3JkZXJfYWNxdWlyZSkgPT0gMCkgewomIzQzOwkJLyogbWFkdmlzZSgpIGJlbG93IGtlZXBzIHRoZSBjb21waWxlciBmcm9tIGxpZnRpbmcgdGhpcyBvdXQuICovCiYjNDM7CQkqcG1kMSA9IDE7CiYjNDM7CQltYWR2aXNlKHBtZDEsIHBtZF9zaXplLCBNQURWX0RPTlRORUVEKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc21hcHNfcnNzX2tiKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlsxMDI0XTsKJiM0MzsJY2hhciAqZW50cnk7CiYjNDM7CiYjNDM7CWVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhcmVhLCAmIzM0O1JzczomIzM0OywgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CWlmICghZW50cnkpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtubyBSc3M6IGVudHJ5IGZvciB0aGUgdGVzdCBtYXBwaW5nXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiBzdHJ0b3VsKGVudHJ5LCBOVUxMLCAxMCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKHZvaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIG1heF9yc3Nfa2IsIHJzc19rYiA9IDA7CiYjNDM7CXNpemVfdCBzaXplLCBwb3Bfc2l6ZSwgaTsKJiM0MzsJcHRocmVhZF90IHRocmVhZDsKJiM0MzsJY2hhciAqcmF3OwomIzQzOwomIzQzOwlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwomIzQzOwlwbWRfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CWlmICghcG1kX3NpemUpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O0Nhbm5vdCBkZXRlcm1pbmUgUE1EIHNpemVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pICZsdDsgMikKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7TmVlZCBhdCBsZWFzdCAyIENQVXMgdG8gcmFjZVxuJiMzNDspOwomIzQzOwomIzQzOwlzaXplID0gTlJfUE1EUyAqIHBtZF9zaXplOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBbGlnbiB0byB0aGUgbWFwcGluZyBzaXplIHRvIHN0YXkgaW5zaWRlIG9uZSBQVUQsIHRoZW4gdHJpbSB0aGUKJiM0MzsJICogc2xhY2sgc28gdGhhdCBzbWFwcyBoYXMgZXhhY3RseSBvbmUgVk1BIHRvIHJlcG9ydC4KJiM0MzsJICovCiYjNDM7CXJhdyA9IG1tYXAoTlVMTCwgMiAqIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFLCAtMSwgMCk7CiYjNDM7CWlmIChyYXcgPT0gTUFQX0ZBSUxFRCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O21tYXAgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWFyZWEgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpcmF3ICYjNDM7IHNpemUgLSAxKSAmYW1wOyB+KHNpemUgLSAxKSk7CiYjNDM7CWlmIChhcmVhICE9IHJhdykKJiM0MzsJCW11bm1hcChyYXcsIGFyZWEgLSByYXcpOwomIzQzOwlpZiAocmF3ICYjNDM7IDIgKiBzaXplICE9IGFyZWEgJiM0Mzsgc2l6ZSkKJiM0MzsJCW11bm1hcChhcmVhICYjNDM7IHNpemUsIHJhdyAmIzQzOyAyICogc2l6ZSAtIChhcmVhICYjNDM7IHNpemUpKTsKJiM0MzsKJiM0MzsJLyogQSBodWdlIFBNRCBuZXZlciByZWFjaGVzIHB0ZV9vZmZzZXRfbWFwX2xvY2soKSwgc28ga2VlcCB0aGVtIG91dC4gKi8KJiM0MzsJaWYgKG1hZHZpc2UoYXJlYSwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKSkKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7TUFEVl9OT0hVR0VQQUdFIGZhaWxlZFxuJiMzNDspOwomIzQzOwomIzQzOwlwb3Bfc2l6ZSA9IHBtZF9zaXplICZsdDsgUE9QX01BWCA/IHBtZF9zaXplIDogUE9QX01BWDsKJiM0MzsJbWVtc2V0KGFyZWEsIDEsIHBvcF9zaXplKTsKJiM0MzsKJiM0MzsJbWF4X3Jzc19rYiA9IChwb3Bfc2l6ZSAmZ3Q7Jmd0OyAxMCkgJiM0MzsgMjU2OwomIzQzOwomIzQzOwkvKiBPdmVyIHRoZSBsaW1pdCBiZWZvcmUgcmFjaW5nIG1lYW5zIHRoaXMgaXMgbm90IG91ciBvd24gbWFwcGluZy4gKi8KJiM0MzsJcnNzX2tiID0gc21hcHNfcnNzX2tiKCk7CiYjNDM7CWlmIChyc3Nfa2IgJmd0OyBtYXhfcnNzX2tiKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7UnNzIGlzICVsdSBrQiBiZWZvcmUgcmFjaW5nLCBleHBlY3RlZCBhdCBtb3N0ICVsdSBrQlxuJiMzNDssCiYjNDM7CQkJCSAgIHJzc19rYiwgbWF4X3Jzc19rYik7CiYjNDM7CiYjNDM7CWtzZnRfc2V0X3BsYW4oMSk7CiYjNDM7CWtzZnRfcHJpbnRfbXNnKCYjMzQ7cmFjaW5nIHNtYXBzIGFnYWluc3QgTUFEVl9ET05UTkVFRCwgJWQgcm91bmRzXG4mIzM0OywKJiM0MzsJCSAgICAgICBOUl9ST1VORFMpOwomIzQzOwomIzQzOwlpZiAocHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWQsIE5VTEwsIHJhY2VyLCBOVUxMKSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3B0aHJlYWRfY3JlYXRlIGZhaWxlZFxuJiMzNDspOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTlJfUk9VTkRTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcnNzX2tiID0gc21hcHNfcnNzX2tiKCk7CiYjNDM7CQlpZiAocnNzX2tiICZndDsgbWF4X3Jzc19rYikKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlhdG9taWNfc3RvcmVfZXhwbGljaXQoJmFtcDtzdG9wLCAxLCBtZW1vcnlfb3JkZXJfcmVsZWFzZSk7CiYjNDM7CXB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpOwomIzQzOwomIzQzOwlpZiAoaSAmbHQ7IE5SX1JPVU5EUykgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDt3YWxrIHJhbiB0d2ljZSBvdmVyIHRoZSBzYW1lIHJhbmdlXG4mIzM0Oyk7CiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoJiMzNDtSc3MgJWx1IGtCIGV4Y2VlZHMgJWx1IGtCLCByb3VuZCAlenVcbiYjMzQ7LAomIzQzOwkJCQkgICAgICByc3Nfa2IsIG1heF9yc3Nfa2IsIGkpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCYjMzQ7UnNzIHdpdGhpbiAlbHUga0Igb3ZlciAlZCByb3VuZHNcbiYjMzQ7LAomIzQzOwkJCQkgICAgICBtYXhfcnNzX2tiLCBOUl9ST1VORFMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtzZnRfZXhpdChpID09IE5SX1JPVU5EUyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKaW5kZXggOGMyOTZkZWRmMDQ3NC4uZDkwYzYzNzA4MTRmNyAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKQEAgLTM5OCw2ICYjNDM7Mzk4LDggQEAgZmkKIAogQ0FURUdPUlk9JiMzNDtwYWdlbWFwJiMzNDsgcnVuX3Rlc3QgLi9wYWdlbWFwX2lvY3RsCiAKJiM0MztDQVRFR09SWT0mIzM0O3BhZ2V3YWxrJiMzNDsgcnVuX3Rlc3QgLi9wYWdld2Fsa19yYWNlX3Rlc3QKJiM0MzsKIENBVEVHT1JZPSYjMzQ7cGZubWFwJiMzNDsgcnVuX3Rlc3QgLi9wZm5tYXAKIAogIyBDT1cgdGVzdHMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAppbmRleCBlYThmYzhmZGYwZWIwLi42MjI5MmUyNDE3ZDE2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCkBAIC04OCw2ICYjNDM7ODgsNyBAQCBib29sIHBhZ2VtYXBfaXNfcG9wdWxhdGVkKGludCBmZCwgY2hhciAqc3RhcnQpOwogdW5zaWduZWQgbG9uZyBwYWdlbWFwX2dldF9wZm4oaW50IGZkLCBjaGFyICpzdGFydCk7CiB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTsKIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CiYjNDM7Y2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pOwogdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7CiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpOwogYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDg1CgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDY4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYWdlIFRhYmxlIFdhbGtlciBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYWZ0ZXIgYSBxdWljayByZXZpZXcsIEkgc2VlIGl0IG1vZGlmaWVzIGBtbS9wYWdld2Fsay5jYCBhbmQgYWRkcyBhIG5ldyB0ZXN0LiBNeSBtYWluIGNvbmNlcm4gaXMsIG9mIGNvdXJzZSwgdGhlIGxvZ2ljIGFyb3VuZCB0aGUgcGFnZSB0YWJsZSB3YWxraW5nLiBUaGUgZ2lzdCBvZiBpdCBpcyB0aGUgbW92ZW1lbnQgb2YgYHdhbGstJmd0O2FjdGlvbiA9IEFDVElPTl9TVUJUUkVFO2AgaW5zaWRlIHRoZSBsb29wIGluIGB3YWxrX3BtZF9yYW5nZWAgYW5kIGB3YWxrX3B1ZF9yYW5nZWAuIFRoaXMgaXMgZGVzaWduZWQgdG8gYWRkcmVzcyBhIGZsYXcgd2hlcmUgYSBzdGFsZSBgd2Fsay0mZ3Q7YWN0aW9uYCB2YWx1ZSAobGlrZSBgQUNUSU9OX0FHQUlOYCkgY291bGQsIGluIGNlcnRhaW4gc2l0dWF0aW9ucywgY2F1c2UgdGhlIHNhbWUgbWVtb3J5IHJhbmdlIHRvIGJlIHdhbGtlZCB0d2ljZSwgd2hpY2ggaXMgb2J2aW91c2x5IG5vdCB3aGF0IHdlIHdhbnQuCgpJJiMzOTt2ZSBleGFtaW5lZCB0aGUgY29kZSBjbG9zZWx5LCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYG1tL3BhZ2V3YWxrLmNgLiBJdCYjMzk7cyBjbGVhciB0aGlzIGlzIGEgcHVyZSBjb250cm9sIGZsb3cgYnVnLiBUaGUgb3JpZ2luYWwgcGxhY2VtZW50IGNvdWxkIGxlYWQgdG8gYSBzaXR1YXRpb24gd2hlcmUgdGhlIGFjdGlvbiBmbGFnIGlzbiYjMzk7dCBwcm9wZXJseSByZXNldCB3aXRoaW4gdGhlIGxvb3AsIGxlYWRpbmcgdG8gdGhlIHJhbmdlIGJlaW5nIHJlLXdhbGtlZC4gTW92aW5nIHRoZSBhc3NpZ25tZW50IGVuc3VyZXMgdGhhdCBgQUNUSU9OX1NVQlRSRUVgIGlzIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggaXRlcmF0aW9uLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGlzbiYjMzk7dCBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuIEFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBJIGNhbiBjb25maXJtIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnZvbHZlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBXZSYjMzk7cmUgc2ltcGx5IHJlc2V0dGluZyBhIHN0YXRlIHZhcmlhYmxlIGZvciBjb3JyZWN0IGNvbnRyb2wgZmxvdy4gVGhlIGB3YWxrLSZndDthY3Rpb25gIHZhcmlhYmxlLCBhIGZpZWxkIHdpdGhpbiB0aGUgYHN0cnVjdCBtbV93YWxrYCwgaXMgYmVpbmcgcmVzZXQgdG8gYEFDVElPTl9TVUJUUkVFYCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbG9vcC4KCkdpdmVuIHRoYXQgdGhpcyBmaXggaXMgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnktcmVsYXRlZCBvcGVyYXRpb25zIG9yIHBvdGVudGlhbCBpbmZvLWxlYWtzLCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgTmVlZHNLTVNBTiB0byBmYWxzZS4gVGhlIHN0YW5kYXJkIHRlc3RzLCBhbG9uZ3NpZGUgS0FTQU4sIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIHZhbGlkYXRlIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGlzIGZpeC4gSXQmIzM5O3MgYSBjbGVhbiwgdGFyZ2V0ZWQgcGF0Y2ggdGhhdCBhZGRyZXNzZXMgYSBzcGVjaWZpYyBsb2dpYyBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIHBhZ2UgdGFibGUgd2Fsa2VyIChgbW0vcGFnZXdhbGsuY2ApIHdoZXJlIGEgc3RhbGUgYHdhbGstXHUwMDNlYWN0aW9uYCAoZS5nLiwgYEFDVElPTl9BR0FJTmApIGNvdWxkIGVzY2FwZSBhIGxvd2VyLWxldmVsIHdhbGsgZnVuY3Rpb24gYW5kIGNhdXNlIHRoZSBoaWdoZXItbGV2ZWwgd2FsayBmdW5jdGlvbiB0byBpbmNvcnJlY3RseSByZXBlYXQgdGhlIHdhbGsgb3ZlciB0aGUgc2FtZSByYW5nZS4gVGhlIGZpeCBzaW1wbHkgbW92ZXMgdGhlIGFzc2lnbm1lbnQgYHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7YCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSBwYWdlIHRhYmxlIHdhbGtlciAoYG1tL3BhZ2V3YWxrLmNgKSB3aGVyZSBhIHN0YWxlIGB3YWxrLVx1MDAzZWFjdGlvbmAgKGUuZy4sIGBBQ1RJT05fQUdBSU5gKSBjb3VsZCBlc2NhcGUgYSBsb3dlci1sZXZlbCB3YWxrIGZ1bmN0aW9uIGFuZCBjYXVzZSB0aGUgaGlnaGVyLWxldmVsIHdhbGsgZnVuY3Rpb24gdG8gaW5jb3JyZWN0bHkgcmVwZWF0IHRoZSB3YWxrIG92ZXIgdGhlIHNhbWUgcmFuZ2UuIFRoZSBmaXggc2ltcGx5IG1vdmVzIHRoZSBhc3NpZ25tZW50IGB3YWxrLVx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO2AgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcC4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGNvbnRyb2wgZmxvdyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MsIGFuZCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjEwOjQ3Ljg2MjQxODYxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDcxNjE3MTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIndhbGtfcGFnZV9yYW5nZVwiLFxuICAgIFwid2Fsa19wYWdlX3ZtYVwiLFxuICAgIFwid2Fsa19wYWdlX21hcHBpbmdcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSBwYWdlIHRhYmxlIHdhbGtlciAoYG1tL3BhZ2V3YWxrLmNgKSB3aGVyZSBhIHN0YWxlIGB3YWxrLVxcdTAwM2VhY3Rpb25gIChlLmcuLCBgQUNUSU9OX0FHQUlOYCkgY291bGQgZXNjYXBlIGEgbG93ZXItbGV2ZWwgd2FsayBmdW5jdGlvbiBhbmQgY2F1c2UgdGhlIGhpZ2hlci1sZXZlbCB3YWxrIGZ1bmN0aW9uIHRvIGluY29ycmVjdGx5IHJlcGVhdCB0aGUgd2FsayBvdmVyIHRoZSBzYW1lIHJhbmdlLiBUaGUgZml4IHNpbXBseSBtb3ZlcyB0aGUgYXNzaWdubWVudCBgd2Fsay1cXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7YCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcywgYW5kIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvcmUgTU0gcGFnZSB3YWxraW5nIGxvZ2ljICh3YWxrX3BtZF9yYW5nZSwgd2Fsa19wdWRfcmFuZ2UpIHdoZXJlIGEgc3RhbGUgd2Fsay1cXHUwMDNlYWN0aW9uIGNvdWxkIGNhdXNlIHRoZSBzYW1lIHJhbmdlIHRvIGJlIHdhbGtlZCB0d2ljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIChlLmcuLCB2aWEgL3Byb2MvcGlkL3NtYXBzIG9yIG1hZHZpc2UpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNzoxMDo0Ny44NjI0MjM0NTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDAyMDg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY3MDBkNjk5Y2YzNDdkNGQwOTMxMmY4YmUzNzI2NWE2YjczMTcwOGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTc6MTA6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcXG5pbmRleCA1ZDg3YzYzMmEyNTUwLi5kM2JmZWNlMzE5MzM2IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2V3YWxrLmNcXG4rKysgYi9tbS9wYWdld2Fsay5jXFxuQEAgLTEyNiw2ICsxMjYsNyBAQCBzdGF0aWMgaW50IHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdHBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTtcXG4gXFx0ZG8ge1xcbiBhZ2FpbjpcXG4rXFx0XFx0d2Fsay1cXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7XFxuIFxcdFxcdG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcXG4gXFx0XFx0aWYgKHBtZF9ub25lKCpwbWQpKSB7XFxuIFxcdFxcdFxcdGlmIChoYXNfaW5zdGFsbClcXG5AQCAtMTM4LDggKzEzOSw2IEBAIHN0YXRpYyBpbnQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHdhbGstXFx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO1xcbi1cXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhpcyBpbXBsaWVzIHRoYXQgZWFjaCAtXFx1MDAzZXBtZF9lbnRyeSgpIGhhbmRsZXJcXG4gXFx0XFx0ICogbmVlZHMgdG8ga25vdyBhYm91dCBwbWRfdHJhbnNfaHVnZSgpIHBtZHNcXG5AQCAtMTk2LDYgKzE5NSw3IEBAIHN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0cHVkID0gcHVkX29mZnNldChwNGQsIGFkZHIpO1xcbiBcXHRkbyB7XFxuICBhZ2FpbjpcXG4rXFx0XFx0d2Fsay1cXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7XFxuIFxcdFxcdG5leHQgPSBwdWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcXG4gXFx0XFx0aWYgKHB1ZF9ub25lKCpwdWQpKSB7XFxuIFxcdFxcdFxcdGlmIChoYXNfaW5zdGFsbClcXG5AQCAtMjA4LDggKzIwOCw2IEBAIHN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHdhbGstXFx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO1xcbi1cXG4gXFx0XFx0aWYgKG9wcy1cXHUwMDNlcHVkX2VudHJ5KVxcbiBcXHRcXHRcXHRlcnIgPSBvcHMtXFx1MDAzZXB1ZF9lbnRyeShwdWQsIGFkZHIsIG5leHQsIHdhbGspO1xcbiBcXHRcXHRpZiAoZXJyKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZVxcbmluZGV4IDljY2Q5ZTE0NDdlNjYuLjkyZjk4MWY5Nzc0MGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmVcXG5AQCAtNjYsMyArNjYsNCBAQCBtZXJnZVxcbiBwcmN0bF90aHBfZGlzYWJsZVxcbiBybWFwXFxuIGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxcbitwYWdld2Fsa19yYWNlX3Rlc3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbmluZGV4IGU2ZGY5NjhmMDk3MWMuLmNkZTliMjJmMTIxZDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbkBAIC0xMDUsNiArMTA1LDcgQEAgVEVTVF9HRU5fRklMRVMgKz0gZ3VhcmQtcmVnaW9uc1xcbiBURVNUX0dFTl9GSUxFUyArPSBtZXJnZVxcbiBURVNUX0dFTl9GSUxFUyArPSBybWFwXFxuIFRFU1RfR0VOX0ZJTEVTICs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxcbitURVNUX0dFTl9GSUxFUyArPSBwYWdld2Fsa19yYWNlX3Rlc3RcXG4gXFxuIGlmbmVxICgkKEFSQ0gpLGFybTY0KVxcbiBURVNUX0dFTl9GSUxFUyArPSBzb2Z0LWRpcnR5XFxuQEAgLTE2Myw2ICsxNjQsNyBAQCBURVNUX1BST0dTICs9IGtzZnRfbWxvY2suc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X21tYXAuc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X21yZW1hcC5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfcGFnZW1hcC5zaFxcbitURVNUX1BST0dTICs9IGtzZnRfcGFnZXdhbGsuc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X3Bmbm1hcC5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfcGtleS5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfcHJvY2Vzc19tYWR2LnNoXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfcGFnZXdhbGsuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X3BhZ2V3YWxrLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi42ZjZjM2VlMWMxM2VmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfcGFnZXdhbGsuc2hcXG5AQCAtMCwwICsxLDQgQEBcXG4rIyEvYmluL3NoIC1lXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKy4vcnVuX3ZtdGVzdHMuc2ggLXQgcGFnZXdhbGtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZXdhbGtfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdld2Fsa19yYWNlX3Rlc3QuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDJmZDZlNzVlODIxZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdld2Fsa19yYWNlX3Rlc3QuY1xcbkBAIC0wLDAgKzEsMTM4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBzdGFsZSB3YWxrLVxcdTAwM2VhY3Rpb24gZXNjYXBpbmcgd2Fsa19wbWRfcmFuZ2UoKSBhbmRcXG4rICogbWFraW5nIHdhbGtfcHVkX3JhbmdlKCkgd2FsayB0aGUgc2FtZSByYW5nZSB0d2ljZS5cXG4rICpcXG4rICogVGhlIG1hcHBpbmcgaXMgdHdvIFBNRHMgaW5zaWRlIG9uZSBQVUQuIFBNRCAwIGlzIHBvcHVsYXRlZCBvbmNlIGFuZCBsZWZ0XFxuKyAqIGFsb25lLCBQTUQgMSBpcyBmYXVsdGVkIGluIGFuZCBkcm9wcGVkIGFnYWluIGJ5IGEgc2Vjb25kIHRocmVhZC4gQ2xlYXJpbmdcXG4rICogUE1EIDEgdW5kZXIgc21hcHNfcHRlX3JhbmdlKCkgbWFrZXMgaXQgcmFpc2UgQUNUSU9OX0FHQUlOLCBhbmQgc2luY2UgaXQgaXNcXG4rICogdGhlIGxhc3QgZW50cnkgdGhlIHN0YWxlIHZhbHVlIGxlYXZlcyB3YWxrX3BtZF9yYW5nZSgpLCBzbyBzbWFwcyBhY2NvdW50c1xcbisgKiBQTUQgMCB0d2ljZS4gQSBrZXJuZWwgdGhhdCBkb2VzIG5vdCByZWNsYWltIHRoZSBlbXB0aWVkIHBhZ2UgdGFibGUgbmV2ZXJcXG4rICogY2xlYXJzIFBNRCAxIGFuZCBzbyBuZXZlciBoaXRzIHRoZSByYWNlLlxcbisgKlxcbisgKiBBIGhpdCBjYW4gb25seSBjb21lIGZyb20gdGhlIGtlcm5lbCBjb3VudGluZyB0aGUgc2FtZSBwYWdlIHR3aWNlLCBzbyB0aGVcXG4rICogdGVzdCBjYW5ub3QgZmFpbCBzcHVyaW91c2x5LlxcbisgKi9cXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3B0aHJlYWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGF0b21pYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuK1xcbisjZGVmaW5lIE5SX1BNRFNcXHRcXHQyXFxuKyNkZWZpbmUgTlJfUk9VTkRTXFx0MjAwMDBcXG4rLyogQ2FwIG9uIGhvdyBtdWNoIG9mIFBNRCAwIHRvIGZhdWx0IGluLCBzbyB0aGF0IGEgbGFyZ2UgUE1EIHN0YXlzIGNoZWFwLiAqL1xcbisjZGVmaW5lIFBPUF9NQVhcXHRcXHQoMiAqIDEwMjQgKiAxMDI0KVxcbitcXG4rc3RhdGljIGNoYXIgKmFyZWE7XFxuK3N0YXRpYyBzaXplX3QgcG1kX3NpemU7XFxuK3N0YXRpYyBhdG9taWNfaW50IHN0b3A7XFxuK1xcbitzdGF0aWMgdm9pZCAqcmFjZXIodm9pZCAqYXJnKVxcbit7XFxuK1xcdGNoYXIgKnBtZDEgPSBhcmVhICsgcG1kX3NpemU7XFxuK1xcbitcXHR3aGlsZSAoYXRvbWljX2xvYWRfZXhwbGljaXQoXFx1MDAyNnN0b3AsIG1lbW9yeV9vcmRlcl9hY3F1aXJlKSA9PSAwKSB7XFxuK1xcdFxcdC8qIG1hZHZpc2UoKSBiZWxvdyBrZWVwcyB0aGUgY29tcGlsZXIgZnJvbSBsaWZ0aW5nIHRoaXMgb3V0LiAqL1xcbitcXHRcXHQqcG1kMSA9IDE7XFxuK1xcdFxcdG1hZHZpc2UocG1kMSwgcG1kX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xcbitcXHR9XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzbWFwc19yc3Nfa2Iodm9pZClcXG4re1xcbitcXHRjaGFyIGJ1ZlsxMDI0XTtcXG4rXFx0Y2hhciAqZW50cnk7XFxuK1xcbitcXHRlbnRyeSA9IF9fZ2V0X3NtYXBfZW50cnkoYXJlYSwgXFxcIlJzczpcXFwiLCBidWYsIHNpemVvZihidWYpKTtcXG4rXFx0aWYgKCFlbnRyeSlcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJubyBSc3M6IGVudHJ5IGZvciB0aGUgdGVzdCBtYXBwaW5nXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiBzdHJ0b3VsKGVudHJ5LCBOVUxMLCAxMCk7XFxuK31cXG4rXFxuK2ludCBtYWluKHZvaWQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXhfcnNzX2tiLCByc3Nfa2IgPSAwO1xcbitcXHRzaXplX3Qgc2l6ZSwgcG9wX3NpemUsIGk7XFxuK1xcdHB0aHJlYWRfdCB0aHJlYWQ7XFxuK1xcdGNoYXIgKnJhdztcXG4rXFxuK1xcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcbitcXHRwbWRfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdGlmICghcG1kX3NpemUpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJDYW5ub3QgZGV0ZXJtaW5lIFBNRCBzaXplXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGlmIChzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKSBcXHUwMDNjIDIpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJOZWVkIGF0IGxlYXN0IDIgQ1BVcyB0byByYWNlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHNpemUgPSBOUl9QTURTICogcG1kX3NpemU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBbGlnbiB0byB0aGUgbWFwcGluZyBzaXplIHRvIHN0YXkgaW5zaWRlIG9uZSBQVUQsIHRoZW4gdHJpbSB0aGVcXG4rXFx0ICogc2xhY2sgc28gdGhhdCBzbWFwcyBoYXMgZXhhY3RseSBvbmUgVk1BIHRvIHJlcG9ydC5cXG4rXFx0ICovXFxuK1xcdHJhdyA9IG1tYXAoTlVMTCwgMiAqIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdFxcdCAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkUsIC0xLCAwKTtcXG4rXFx0aWYgKHJhdyA9PSBNQVBfRkFJTEVEKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIm1tYXAgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGFyZWEgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpcmF3ICsgc2l6ZSAtIDEpIFxcdTAwMjYgfihzaXplIC0gMSkpO1xcbitcXHRpZiAoYXJlYSAhPSByYXcpXFxuK1xcdFxcdG11bm1hcChyYXcsIGFyZWEgLSByYXcpO1xcbitcXHRpZiAocmF3ICsgMiAqIHNpemUgIT0gYXJlYSArIHNpemUpXFxuK1xcdFxcdG11bm1hcChhcmVhICsgc2l6ZSwgcmF3ICsgMiAqIHNpemUgLSAoYXJlYSArIHNpemUpKTtcXG4rXFxuK1xcdC8qIEEgaHVnZSBQTUQgbmV2ZXIgcmVhY2hlcyBwdGVfb2Zmc2V0X21hcF9sb2NrKCksIHNvIGtlZXAgdGhlbSBvdXQuICovXFxuK1xcdGlmIChtYWR2aXNlKGFyZWEsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSkpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJNQURWX05PSFVHRVBBR0UgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHBvcF9zaXplID0gcG1kX3NpemUgXFx1MDAzYyBQT1BfTUFYID8gcG1kX3NpemUgOiBQT1BfTUFYO1xcbitcXHRtZW1zZXQoYXJlYSwgMSwgcG9wX3NpemUpO1xcbitcXG4rXFx0bWF4X3Jzc19rYiA9IChwb3Bfc2l6ZSBcXHUwMDNlXFx1MDAzZSAxMCkgKyAyNTY7XFxuK1xcbitcXHQvKiBPdmVyIHRoZSBsaW1pdCBiZWZvcmUgcmFjaW5nIG1lYW5zIHRoaXMgaXMgbm90IG91ciBvd24gbWFwcGluZy4gKi9cXG4rXFx0cnNzX2tiID0gc21hcHNfcnNzX2tiKCk7XFxuK1xcdGlmIChyc3Nfa2IgXFx1MDAzZSBtYXhfcnNzX2tiKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlJzcyBpcyAlbHUga0IgYmVmb3JlIHJhY2luZywgZXhwZWN0ZWQgYXQgbW9zdCAlbHUga0JcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHJzc19rYiwgbWF4X3Jzc19rYik7XFxuK1xcbitcXHRrc2Z0X3NldF9wbGFuKDEpO1xcbitcXHRrc2Z0X3ByaW50X21zZyhcXFwicmFjaW5nIHNtYXBzIGFnYWluc3QgTUFEVl9ET05UTkVFRCwgJWQgcm91bmRzXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgTlJfUk9VTkRTKTtcXG4rXFxuK1xcdGlmIChwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkLCBOVUxMLCByYWNlciwgTlVMTCkpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicHRocmVhZF9jcmVhdGUgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9ST1VORFM7IGkrKykge1xcbitcXHRcXHRyc3Nfa2IgPSBzbWFwc19yc3Nfa2IoKTtcXG4rXFx0XFx0aWYgKHJzc19rYiBcXHUwMDNlIG1heF9yc3Nfa2IpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRhdG9taWNfc3RvcmVfZXhwbGljaXQoXFx1MDAyNnN0b3AsIDEsIG1lbW9yeV9vcmRlcl9yZWxlYXNlKTtcXG4rXFx0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XFxuK1xcbitcXHRpZiAoaSBcXHUwMDNjIE5SX1JPVU5EUykge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwid2FsayByYW4gdHdpY2Ugb3ZlciB0aGUgc2FtZSByYW5nZVxcXFxuXFxcIik7XFxuK1xcdFxcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcXFwiUnNzICVsdSBrQiBleGNlZWRzICVsdSBrQiwgcm91bmQgJXp1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICByc3Nfa2IsIG1heF9yc3Nfa2IsIGkpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXFxcIlJzcyB3aXRoaW4gJWx1IGtCIG92ZXIgJWQgcm91bmRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICBtYXhfcnNzX2tiLCBOUl9ST1VORFMpO1xcbitcXHR9XFxuK1xcbitcXHRrc2Z0X2V4aXQoaSA9PSBOUl9ST1VORFMpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbmluZGV4IDhjMjk2ZGVkZjA0NzQuLmQ5MGM2MzcwODE0ZjcgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbkBAIC0zOTgsNiArMzk4LDggQEAgZmlcXG4gXFxuIENBVEVHT1JZPVxcXCJwYWdlbWFwXFxcIiBydW5fdGVzdCAuL3BhZ2VtYXBfaW9jdGxcXG4gXFxuK0NBVEVHT1JZPVxcXCJwYWdld2Fsa1xcXCIgcnVuX3Rlc3QgLi9wYWdld2Fsa19yYWNlX3Rlc3RcXG4rXFxuIENBVEVHT1JZPVxcXCJwZm5tYXBcXFwiIHJ1bl90ZXN0IC4vcGZubWFwXFxuIFxcbiAjIENPVyB0ZXN0c1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG5pbmRleCBlYThmYzhmZGYwZWIwLi42MjI5MmUyNDE3ZDE2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbkBAIC04OCw2ICs4OCw3IEBAIGJvb2wgcGFnZW1hcF9pc19wb3B1bGF0ZWQoaW50IGZkLCBjaGFyICpzdGFydCk7XFxuIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9nZXRfcGZuKGludCBmZCwgY2hhciAqc3RhcnQpO1xcbiB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTtcXG4gYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcXG4rY2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xcbiB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKTtcXG4gdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKTtcXG4gYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjEwOjQ4LjM2MzI5NDEyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMyMDQ5NjQ4NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIndhbGtfcGFnZV9yYW5nZVwiLFxuICAgIFwid2Fsa19wYWdlX3ZtYVwiLFxuICAgIFwid2Fsa19wYWdlX21hcHBpbmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGNvcmUgTU0gcGFnZSB3YWxraW5nIGxvZ2ljICh3YWxrX3BtZF9yYW5nZSwgd2Fsa19wdWRfcmFuZ2UpIHdoZXJlIGEgc3RhbGUgd2Fsay1cXHUwMDNlYWN0aW9uIGNvdWxkIGNhdXNlIHRoZSBzYW1lIHJhbmdlIHRvIGJlIHdhbGtlZCB0d2ljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIChlLmcuLCB2aWEgL3Byb2MvcGlkL3NtYXBzIG9yIG1hZHZpc2UpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NzAwZDY5OWNmMzQ3ZDRkMDkzMTJmOGJlMzcyNjVhNmI3MzE3MDhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTc6MTA6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdld2Fsay5jIGIvbW0vcGFnZXdhbGsuY1xuaW5kZXggNWQ4N2M2MzJhMjU1MC4uZDNiZmVjZTMxOTMzNiAxMDA2NDRcbi0tLSBhL21tL3BhZ2V3YWxrLmNcbisrKyBiL21tL3BhZ2V3YWxrLmNcbkBAIC0xMjYsNiArMTI2LDcgQEAgc3RhdGljIGludCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0cG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpO1xuIFx0ZG8ge1xuIGFnYWluOlxuK1x0XHR3YWxrLVx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO1xuIFx0XHRuZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4gXHRcdGlmIChwbWRfbm9uZSgqcG1kKSkge1xuIFx0XHRcdGlmIChoYXNfaW5zdGFsbClcbkBAIC0xMzgsOCArMTM5LDYgQEAgc3RhdGljIGludCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0d2Fsay1cdTAwM2VhY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTtcbi1cbiBcdFx0LypcbiBcdFx0ICogVGhpcyBpbXBsaWVzIHRoYXQgZWFjaCAtXHUwMDNlcG1kX2VudHJ5KCkgaGFuZGxlclxuIFx0XHQgKiBuZWVkcyB0byBrbm93IGFib3V0IHBtZF90cmFuc19odWdlKCkgcG1kc1xuQEAgLTE5Niw2ICsxOTUsNyBAQCBzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcik7XG4gXHRkbyB7XG4gIGFnYWluOlxuK1x0XHR3YWxrLVx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO1xuIFx0XHRuZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4gXHRcdGlmIChwdWRfbm9uZSgqcHVkKSkge1xuIFx0XHRcdGlmIChoYXNfaW5zdGFsbClcbkBAIC0yMDgsOCArMjA4LDYgQEAgc3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0d2Fsay1cdTAwM2VhY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTtcbi1cbiBcdFx0aWYgKG9wcy1cdTAwM2VwdWRfZW50cnkpXG4gXHRcdFx0ZXJyID0gb3BzLVx1MDAzZXB1ZF9lbnRyeShwdWQsIGFkZHIsIG5leHQsIHdhbGspO1xuIFx0XHRpZiAoZXJyKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlXG5pbmRleCA5Y2NkOWUxNDQ3ZTY2Li45MmY5ODFmOTc3NDBmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZVxuQEAgLTY2LDMgKzY2LDQgQEAgbWVyZ2VcbiBwcmN0bF90aHBfZGlzYWJsZVxuIHJtYXBcbiBmb2xpb19zcGxpdF9yYWNlX3Rlc3RcbitwYWdld2Fsa19yYWNlX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCBlNmRmOTY4ZjA5NzFjLi5jZGU5YjIyZjEyMWQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMTA1LDYgKzEwNSw3IEBAIFRFU1RfR0VOX0ZJTEVTICs9IGd1YXJkLXJlZ2lvbnNcbiBURVNUX0dFTl9GSUxFUyArPSBtZXJnZVxuIFRFU1RfR0VOX0ZJTEVTICs9IHJtYXBcbiBURVNUX0dFTl9GSUxFUyArPSBmb2xpb19zcGxpdF9yYWNlX3Rlc3RcbitURVNUX0dFTl9GSUxFUyArPSBwYWdld2Fsa19yYWNlX3Rlc3RcbiBcbiBpZm5lcSAoJChBUkNIKSxhcm02NClcbiBURVNUX0dFTl9GSUxFUyArPSBzb2Z0LWRpcnR5XG5AQCAtMTYzLDYgKzE2NCw3IEBAIFRFU1RfUFJPR1MgKz0ga3NmdF9tbG9jay5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9tbWFwLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X21yZW1hcC5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9wYWdlbWFwLnNoXG4rVEVTVF9QUk9HUyArPSBrc2Z0X3BhZ2V3YWxrLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X3Bmbm1hcC5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF9wa2V5LnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X3Byb2Nlc3NfbWFkdi5zaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfcGFnZXdhbGsuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X3BhZ2V3YWxrLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNmY2YzNlZTFjMTNlZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9wYWdld2Fsay5zaFxuQEAgLTAsMCArMSw0IEBAXG4rIyEvYmluL3NoIC1lXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKy4vcnVuX3ZtdGVzdHMuc2ggLXQgcGFnZXdhbGtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdld2Fsa19yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2V3YWxrX3JhY2VfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDJmZDZlNzVlODIxZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZXdhbGtfcmFjZV90ZXN0LmNcbkBAIC0wLDAgKzEsMTM4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBzdGFsZSB3YWxrLVx1MDAzZWFjdGlvbiBlc2NhcGluZyB3YWxrX3BtZF9yYW5nZSgpIGFuZFxuKyAqIG1ha2luZyB3YWxrX3B1ZF9yYW5nZSgpIHdhbGsgdGhlIHNhbWUgcmFuZ2UgdHdpY2UuXG4rICpcbisgKiBUaGUgbWFwcGluZyBpcyB0d28gUE1EcyBpbnNpZGUgb25lIFBVRC4gUE1EIDAgaXMgcG9wdWxhdGVkIG9uY2UgYW5kIGxlZnRcbisgKiBhbG9uZSwgUE1EIDEgaXMgZmF1bHRlZCBpbiBhbmQgZHJvcHBlZCBhZ2FpbiBieSBhIHNlY29uZCB0aHJlYWQuIENsZWFyaW5nXG4rICogUE1EIDEgdW5kZXIgc21hcHNfcHRlX3JhbmdlKCkgbWFrZXMgaXQgcmFpc2UgQUNUSU9OX0FHQUlOLCBhbmQgc2luY2UgaXQgaXNcbisgKiB0aGUgbGFzdCBlbnRyeSB0aGUgc3RhbGUgdmFsdWUgbGVhdmVzIHdhbGtfcG1kX3JhbmdlKCksIHNvIHNtYXBzIGFjY291bnRzXG4rICogUE1EIDAgdHdpY2UuIEEga2VybmVsIHRoYXQgZG9lcyBub3QgcmVjbGFpbSB0aGUgZW1wdGllZCBwYWdlIHRhYmxlIG5ldmVyXG4rICogY2xlYXJzIFBNRCAxIGFuZCBzbyBuZXZlciBoaXRzIHRoZSByYWNlLlxuKyAqXG4rICogQSBoaXQgY2FuIG9ubHkgY29tZSBmcm9tIHRoZSBrZXJuZWwgY291bnRpbmcgdGhlIHNhbWUgcGFnZSB0d2ljZSwgc28gdGhlXG4rICogdGVzdCBjYW5ub3QgZmFpbCBzcHVyaW91c2x5LlxuKyAqL1xuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbitcbisjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRhdG9taWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuK1xuKyNkZWZpbmUgTlJfUE1EU1x0XHQyXG4rI2RlZmluZSBOUl9ST1VORFNcdDIwMDAwXG4rLyogQ2FwIG9uIGhvdyBtdWNoIG9mIFBNRCAwIHRvIGZhdWx0IGluLCBzbyB0aGF0IGEgbGFyZ2UgUE1EIHN0YXlzIGNoZWFwLiAqL1xuKyNkZWZpbmUgUE9QX01BWFx0XHQoMiAqIDEwMjQgKiAxMDI0KVxuK1xuK3N0YXRpYyBjaGFyICphcmVhO1xuK3N0YXRpYyBzaXplX3QgcG1kX3NpemU7XG4rc3RhdGljIGF0b21pY19pbnQgc3RvcDtcbitcbitzdGF0aWMgdm9pZCAqcmFjZXIodm9pZCAqYXJnKVxuK3tcbitcdGNoYXIgKnBtZDEgPSBhcmVhICsgcG1kX3NpemU7XG4rXG4rXHR3aGlsZSAoYXRvbWljX2xvYWRfZXhwbGljaXQoXHUwMDI2c3RvcCwgbWVtb3J5X29yZGVyX2FjcXVpcmUpID09IDApIHtcbitcdFx0LyogbWFkdmlzZSgpIGJlbG93IGtlZXBzIHRoZSBjb21waWxlciBmcm9tIGxpZnRpbmcgdGhpcyBvdXQuICovXG4rXHRcdCpwbWQxID0gMTtcbitcdFx0bWFkdmlzZShwbWQxLCBwbWRfc2l6ZSwgTUFEVl9ET05UTkVFRCk7XG4rXHR9XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgc21hcHNfcnNzX2tiKHZvaWQpXG4re1xuK1x0Y2hhciBidWZbMTAyNF07XG4rXHRjaGFyICplbnRyeTtcbitcbitcdGVudHJ5ID0gX19nZXRfc21hcF9lbnRyeShhcmVhLCBcIlJzczpcIiwgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRpZiAoIWVudHJ5KVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJubyBSc3M6IGVudHJ5IGZvciB0aGUgdGVzdCBtYXBwaW5nXFxuXCIpO1xuK1xuK1x0cmV0dXJuIHN0cnRvdWwoZW50cnksIE5VTEwsIDEwKTtcbit9XG4rXG4raW50IG1haW4odm9pZClcbit7XG4rXHR1bnNpZ25lZCBsb25nIG1heF9yc3Nfa2IsIHJzc19rYiA9IDA7XG4rXHRzaXplX3Qgc2l6ZSwgcG9wX3NpemUsIGk7XG4rXHRwdGhyZWFkX3QgdGhyZWFkO1xuK1x0Y2hhciAqcmF3O1xuK1xuK1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbitcbitcdHBtZF9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdGlmICghcG1kX3NpemUpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwiQ2Fubm90IGRldGVybWluZSBQTUQgc2l6ZVxcblwiKTtcbitcbitcdGlmIChzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKSBcdTAwM2MgMilcbitcdFx0a3NmdF9leGl0X3NraXAoXCJOZWVkIGF0IGxlYXN0IDIgQ1BVcyB0byByYWNlXFxuXCIpO1xuK1xuK1x0c2l6ZSA9IE5SX1BNRFMgKiBwbWRfc2l6ZTtcbitcbitcdC8qXG4rXHQgKiBBbGlnbiB0byB0aGUgbWFwcGluZyBzaXplIHRvIHN0YXkgaW5zaWRlIG9uZSBQVUQsIHRoZW4gdHJpbSB0aGVcbitcdCAqIHNsYWNrIHNvIHRoYXQgc21hcHMgaGFzIGV4YWN0bHkgb25lIFZNQSB0byByZXBvcnQuXG4rXHQgKi9cbitcdHJhdyA9IG1tYXAoTlVMTCwgMiAqIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdCAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkUsIC0xLCAwKTtcbitcdGlmIChyYXcgPT0gTUFQX0ZBSUxFRClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwibW1hcCBmYWlsZWRcXG5cIik7XG4rXG4rXHRhcmVhID0gKGNoYXIgKikoKCh1bnNpZ25lZCBsb25nKXJhdyArIHNpemUgLSAxKSBcdTAwMjYgfihzaXplIC0gMSkpO1xuK1x0aWYgKGFyZWEgIT0gcmF3KVxuK1x0XHRtdW5tYXAocmF3LCBhcmVhIC0gcmF3KTtcbitcdGlmIChyYXcgKyAyICogc2l6ZSAhPSBhcmVhICsgc2l6ZSlcbitcdFx0bXVubWFwKGFyZWEgKyBzaXplLCByYXcgKyAyICogc2l6ZSAtIChhcmVhICsgc2l6ZSkpO1xuK1xuK1x0LyogQSBodWdlIFBNRCBuZXZlciByZWFjaGVzIHB0ZV9vZmZzZXRfbWFwX2xvY2soKSwgc28ga2VlcCB0aGVtIG91dC4gKi9cbitcdGlmIChtYWR2aXNlKGFyZWEsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSkpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwiTUFEVl9OT0hVR0VQQUdFIGZhaWxlZFxcblwiKTtcbitcbitcdHBvcF9zaXplID0gcG1kX3NpemUgXHUwMDNjIFBPUF9NQVggPyBwbWRfc2l6ZSA6IFBPUF9NQVg7XG4rXHRtZW1zZXQoYXJlYSwgMSwgcG9wX3NpemUpO1xuK1xuK1x0bWF4X3Jzc19rYiA9IChwb3Bfc2l6ZSBcdTAwM2VcdTAwM2UgMTApICsgMjU2O1xuK1xuK1x0LyogT3ZlciB0aGUgbGltaXQgYmVmb3JlIHJhY2luZyBtZWFucyB0aGlzIGlzIG5vdCBvdXIgb3duIG1hcHBpbmcuICovXG4rXHRyc3Nfa2IgPSBzbWFwc19yc3Nfa2IoKTtcbitcdGlmIChyc3Nfa2IgXHUwMDNlIG1heF9yc3Nfa2IpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIlJzcyBpcyAlbHUga0IgYmVmb3JlIHJhY2luZywgZXhwZWN0ZWQgYXQgbW9zdCAlbHUga0JcXG5cIixcbitcdFx0XHRcdCAgIHJzc19rYiwgbWF4X3Jzc19rYik7XG4rXG4rXHRrc2Z0X3NldF9wbGFuKDEpO1xuK1x0a3NmdF9wcmludF9tc2coXCJyYWNpbmcgc21hcHMgYWdhaW5zdCBNQURWX0RPTlRORUVELCAlZCByb3VuZHNcXG5cIixcbitcdFx0ICAgICAgIE5SX1JPVU5EUyk7XG4rXG4rXHRpZiAocHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCByYWNlciwgTlVMTCkpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInB0aHJlYWRfY3JlYXRlIGZhaWxlZFxcblwiKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX1JPVU5EUzsgaSsrKSB7XG4rXHRcdHJzc19rYiA9IHNtYXBzX3Jzc19rYigpO1xuK1x0XHRpZiAocnNzX2tiIFx1MDAzZSBtYXhfcnNzX2tiKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0YXRvbWljX3N0b3JlX2V4cGxpY2l0KFx1MDAyNnN0b3AsIDEsIG1lbW9yeV9vcmRlcl9yZWxlYXNlKTtcbitcdHB0aHJlYWRfam9pbih0aHJlYWQsIE5VTEwpO1xuK1xuK1x0aWYgKGkgXHUwMDNjIE5SX1JPVU5EUykge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIndhbGsgcmFuIHR3aWNlIG92ZXIgdGhlIHNhbWUgcmFuZ2VcXG5cIik7XG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcIlJzcyAlbHUga0IgZXhjZWVkcyAlbHUga0IsIHJvdW5kICV6dVxcblwiLFxuK1x0XHRcdFx0ICAgICAgcnNzX2tiLCBtYXhfcnNzX2tiLCBpKTtcbitcdH0gZWxzZSB7XG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcIlJzcyB3aXRoaW4gJWx1IGtCIG92ZXIgJWQgcm91bmRzXFxuXCIsXG4rXHRcdFx0XHQgICAgICBtYXhfcnNzX2tiLCBOUl9ST1VORFMpO1xuK1x0fVxuK1xuK1x0a3NmdF9leGl0KGkgPT0gTlJfUk9VTkRTKTtcbitcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCA4YzI5NmRlZGYwNDc0Li5kOTBjNjM3MDgxNGY3IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5AQCAtMzk4LDYgKzM5OCw4IEBAIGZpXG4gXG4gQ0FURUdPUlk9XCJwYWdlbWFwXCIgcnVuX3Rlc3QgLi9wYWdlbWFwX2lvY3RsXG4gXG4rQ0FURUdPUlk9XCJwYWdld2Fsa1wiIHJ1bl90ZXN0IC4vcGFnZXdhbGtfcmFjZV90ZXN0XG4rXG4gQ0FURUdPUlk9XCJwZm5tYXBcIiBydW5fdGVzdCAuL3Bmbm1hcFxuIFxuICMgQ09XIHRlc3RzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCBlYThmYzhmZGYwZWIwLi42MjI5MmUyNDE3ZDE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC04OCw2ICs4OCw3IEBAIGJvb2wgcGFnZW1hcF9pc19wb3B1bGF0ZWQoaW50IGZkLCBjaGFyICpzdGFydCk7XG4gdW5zaWduZWQgbG9uZyBwYWdlbWFwX2dldF9wZm4oaW50IGZkLCBjaGFyICpzdGFydCk7XG4gdm9pZCBjbGVhcl9zb2Z0ZGlydHkodm9pZCk7XG4gYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbitjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4gdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7XG4gdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKTtcbiBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjEwOjQ4LjM2MzI5NTgwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NTk5NjAwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGluIGBtbS9wYWdld2Fsay5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyBzb21ldGhpbmcgZnVuZGFtZW50YWwgd2l0aGluIGBtbS9wYWdld2Fsay5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSdzIG1vZGlmeWluZyB0aGUgbG9jYXRpb24gb2YgYHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7YCB3aXRoaW4gYHdhbGtfcG1kX3JhbmdlYCBhbmQgYHdhbGtfcHVkX3JhbmdlYC4gTW92aW5nIGl0ICppbnNpZGUqIHRoZSBgZG8geyBhZ2FpbjogLi4uIH1gIGxvb3AgaXMgcHJldHR5IHRlbGxpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGludGVuZGVkIHRvIGFkZHJlc3Mgc29tZSBraW5kIG9mIHJhY2UgY29uZGl0aW9uLCB3aGVyZSB0aGUgYHdhbGstXHUwMDNlYWN0aW9uYCB2YXJpYWJsZSBtaWdodCBiZSBob2xkaW5nIG9udG8gYSBzdGFsZSB2YWx1ZeKAlHBlcmhhcHMgYEFDVElPTl9BR0FJTmDigJRhbmQgZXNjYXBpbmcgdGhlIGZ1bmN0aW9uLCB1bHRpbWF0ZWx5IGxlYWRpbmcgdG8gYSByZWR1bmRhbnQgd2FsayBvZiB0aGUgc2FtZSBtZW1vcnkgcmFuZ2UgYnkgdGhlIGNhbGxlci4gQ2xhc3NpYyBjb25jdXJyZW5jeSBpc3N1ZS5cblxuSSdsbCBkb3VibGUtY2hlY2sgZXhhY3RseSB3aGljaCBmdW5jdGlvbnMgYXJlIGFmZmVjdGVkLiBMb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGluIHRoZSBgd2Fsa19wbWRfcmFuZ2VgIGFuZCBgd2Fsa19wdWRfcmFuZ2VgIGZ1bmN0aW9ucywgYm90aCBvZiB3aGljaCBJIGtub3cgYXJlIHN0YXRpYyB3aXRoaW4gdGhhdCBmaWxlLiBSaWdodCwgYW5kIHRoZSBvdGhlciBlbnRyeSBwb2ludHMgdG8gdGhpcyBjb2RlIGFyZSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgd2Fsa19wYWdlX3JhbmdlYCwgYHdhbGtfcGFnZV9yYW5nZV9ub3ZtYWAsIGB3YWxrX3BhZ2Vfdm1hYCwgYW5kIGB3YWxrX3BhZ2VfbWFwcGluZ2AuIEkgc2hvdWxkIHByb2JhYmx5IGZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRob3NlIGFzIHdlbGwsIHNvIEkgY2FuIHNlZSB3aGF0IHRoZXkncmUgY2FsbGluZy4gTGV0J3MgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIGdldCBhIGxpc3Qgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCB3aG8ncyBjYWxsaW5nIHRoZW0uIFRoaXMnbGwgaGVscCBtZSBwdXQgdGhpcyBmaXggaW4gdGhlIGxhcmdlciBjb250ZXh0IGFuZCB0cnVseSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwODgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNzoxMDo1NC4xMjMyNTg1NjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc3ODgwNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZCkuKndhbGtfcGFnZV8uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2V3YWxrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZXdhbGsuYz00NDQ9c3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3Nfdm1hX3dhbGtfbG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3BhZ2V3YWxrLmMtNDcxLSAqL1xcbm1tL3BhZ2V3YWxrLmM6NDcyOmludCB3YWxrX3BhZ2VfcmFuZ2VfbW1fdW5zYWZlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL3BhZ2V3YWxrLmMtNDczLVxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcXG4tLVxcbm1tL3BhZ2V3YWxrLmM9NTQxPXN0YXRpYyBib29sIGNoZWNrX29wc19zYWZlKGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzKVxcbi0tXFxubW0vcGFnZXdhbGsuYy01OTQtICovXFxubW0vcGFnZXdhbGsuYzo1OTU6aW50IHdhbGtfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9wYWdld2Fsay5jLTU5Ni1cXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXFxuLS1cXG5tbS9wYWdld2Fsay5jPTY0Nj1pbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3BhZ2V3YWxrLmMtNjgxLSAqL1xcbm1tL3BhZ2V3YWxrLmM6NjgyOmludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vcGFnZXdhbGsuYy02ODMtXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTcxOS1cXG5tbS9wYWdld2Fsay5jOjcyMDppbnQgd2Fsa19wYWdlX3JhbmdlX3ZtYV91bnNhZmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vcGFnZXdhbGsuYy03MjEtXFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLCB2b2lkICpwcml2YXRlKVxcbi0tXFxubW0vcGFnZXdhbGsuYy03MzktXFxubW0vcGFnZXdhbGsuYzo3NDA6aW50IHdhbGtfcGFnZV9yYW5nZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vcGFnZXdhbGsuYy03NDEtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLFxcbi0tXFxubW0vcGFnZXdhbGsuYy03NDktXFxubW0vcGFnZXdhbGsuYzo3NTA6aW50IHdhbGtfcGFnZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLFxcbm1tL3BhZ2V3YWxrLmMtNzUxLVxcdFxcdHZvaWQgKnByaXZhdGUpXFxuLS1cXG5tbS9wYWdld2Fsay5jLTc5OS0gKi9cXG5tbS9wYWdld2Fsay5jOjgwMDppbnQgd2Fsa19wYWdlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgZmlyc3RfaW5kZXgsXFxubW0vcGFnZXdhbGsuYy04MDEtXFx0XFx0ICAgICAgcGdvZmZfdCBuciwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjEwOjU0LjIyMTA1NTY1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTkxMjMwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24gXHUwMDI2IFBhdGNoIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGlkZW50aWZpZWQgdGhlc2UgbWVtb3J5IG1hbmFnZW1lbnQgd2FsayBmdW5jdGlvbnM6IGB3YWxrX3BhZ2VfcmFuZ2VgLCBgd2Fsa19wYWdlX3JhbmdlX21tX3Vuc2FmZWAsIGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hYCwgYHdhbGtfcGFnZV9yYW5nZV92bWFfdW5zYWZlYCwgYHdhbGtfcGFnZV92bWFgLCBhbmQgYHdhbGtfcGFnZV9tYXBwaW5nYC4gVGhleSBzZWVtIGxpa2UgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZywgZ2l2ZW4gdGhlaXIgcm9sZXMgaW4gcGFnZSB0YWJsZSB0cmF2ZXJzYWwuIFRoZXkncmUgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHJlcHJlc2VudCBjcnVjaWFsIGFyZWFzIG9mIHRoZSBrZXJuZWwgTU0gc3Vic3lzdGVtLlxuXG5UaGlzIHBhdGNoLCBhcHBhcmVudGx5LCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3Igc3RhbGUgdmFsdWUgaXNzdWUgd2l0aCBgd2Fsay1cdTAwM2VhY3Rpb25gLiBTcGVjaWZpY2FsbHksIGlmIEkgdW5kZXJzdGFuZCBpdCBjb3JyZWN0bHksIHRoZXJlIHdhcyBhIGJ1ZyB3aGVyZSB0aGUgYWN0aW9uIHRvIGJlIHBlcmZvcm1lZCBkdXJpbmcgdGhlIHdhbGsgY291bGQgYmUgbGVmdCB3aXRoIGluY29ycmVjdCBkYXRhLCB3aGljaCB3b3VsZCB0aGVuIGNhdXNlIHRoZSB3YWxrIHRvIHJlcGVhdCwgY2F1c2luZyBhbiBpbmRlZmluaXRlIGxvb3Agb3IgZGF0YSBjb3JydXB0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBidWcgZml4LiBUaGlzIG5lZWRzIHRob3JvdWdoIHRlc3RpbmcuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGluIHRvbyBkZWVwLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgZnVuY3Rpb25zLCBvciB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGVtLCByZXF1aXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMuIE15IHJlY29sbGVjdGlvbiBpcyB0aGF0IGBtbS9wYWdld2Fsay5jYCBpcyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHksIGJ1dCBpdCdzIGFsd2F5cyB3b3J0aCBhIHF1aWNrIGNoZWNrIHRvIHJ1bGUgb3V0IGFueSBidWlsZC10aW1lIGNvbmRpdGlvbmFsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMjYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTA6NTguNjIwMTgyMDExWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTcxNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2V3YWxrLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXFxcXG5tbS9NYWtlZmlsZS0zOC1cXHRcXHRcXHQgICBtbG9jay5vIG1tYXAubyBtbXVfZ2F0aGVyLm8gbXByb3RlY3QubyBtcmVtYXAubyBcXFxcXFxubW0vTWFrZWZpbGU6Mzk6XFx0XFx0XFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXFxcXG5tbS9NYWtlZmlsZS00MC1cXHRcXHRcXHQgICBwZ3RhYmxlLWdlbmVyaWMubyBybWFwLm8gdm1hbGxvYy5vIHZtYS5vIHZtYV9leGVjLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTA6NTguNjgwNzY0ODQ5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxNjcxNTgwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipQYWdlIFRhYmxlIFdhbGtlciBTdHJhdGVneSBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24sIHdpdGggYENPTkZJR19NTVVgIHNldCwgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGEgY29tcGlsZWQgZW52aXJvbm1lbnQgd2hlcmUgdGhlIHBhZ2UgdGFibGUgd2Fsa2VycyBhcmUgYWN0aXZlLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgYXNzdW1wdGlvbiBJIHdvcmsgZnJvbS4gTm93LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgY29yZSBtZWNoYW5pc21zLlxuXG5NeSBpbml0aWFsIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cy4gSSdtIHRoaW5raW5nOiBgd2Fsa19wYWdlX3JhbmdlYCwgYHdhbGtfcGFnZV92bWFgLCBhbmQgYHdhbGtfcGFnZV9tYXBwaW5nYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyDigJMgdGhlIHN0YXJ0aW5nIHBvaW50cyBmb3IgdHJhdmVyc2luZyB0aGUgcGFnZSB0YWJsZXMgdW5kZXIgdmFyaW91cyBjb25kaXRpb25zLiBUaGV5J3JlIHdoZXJlIEknZCBleHBlY3QgdGhlIGdlbmVyYWwgY29udHJvbCBmbG93IHRvIGJlZ2luLlxuXG5CZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvIHRob3NlIHRocmVlLCBpdCBtYWtlcyBzZW5zZSB0byBnbyBvdmVyIHRoZSBgd2Fsa19wYWdlX3JhbmdlX3ZtYWAgYW5kIGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hX3Vuc2FmZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1YnRsZSBpbnRlcmFjdGlvbnMgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZWRnZSBjYXNlcyBpbiB0aGUgcmFuZ2UtYmFzZWQgd2Fsa2Vycy4gVGhlc2Ugc2hvdWxkIHBsYXkgdGhlIHJvbGUgSSBhc3N1bWUgYW5kIEkgc2hvdWxkIGJlIGF3YXJlIGlmIHRoZSBgX3Vuc2FmZWAgZnVuY3Rpb24gcmVxdWlyZXMgZnVydGhlciBhbmFseXNpcyBkdWUgdG8gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg5NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjExOjAzLjE5NzQ4NDY3NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODE4MjU1OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKHdhbGtfcGFnZV9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZXdhbGsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTE6MDMuMjQ1NjczOTE1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4MzcxNjU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYEVYUE9SVF9TWU1CT0xgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byBzaW1wbHkgKmNoZWNrKiBgRVhQT1JUX1NZTUJPTGAuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZnVuY3Rpb25zLiBXaGF0IGFyZSBpdHMgaW1wbGljYXRpb25zIGZvciBzeW1ib2wgdmlzaWJpbGl0eT8gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IElzIHRoaXMgcmVsYXRlZCB0byBrZXJuZWwgbW9kdWxlIGRldmVsb3BtZW50LCBvciBhcmUgd2UgbG9va2luZyBhdCBzb21ldGhpbmcgZWxzZT8gSSBuZWVkIHRvIGNsYXJpZnkgd2hhdCBwcm9ibGVtIG9yIHNwZWNpZmljIGFzcGVjdCByZXF1aXJlcyBhdHRlbnRpb24gd2l0aGluIHRoZSByZWFsbSBvZiB0aGUgYEVYUE9SVF9TWU1CT0xgIG1hY3JvLiBJcyB0aGVyZSBhIHN1c3BlY3RlZCBpc3N1ZSBvciBpcyB0aGlzIHNpbXBseSBmb3IgZ2VuZXJhbCBhbmFseXNpcz8gVGltZSB0byBhc3Nlc3Mgd2hhdCBleGFjdGx5IG5lZWRzIGNoZWNraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjg5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNzoxMTowNi43MjkzOTQ5NjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTgzOTE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipcXFxcKHdhbGtfcGFnZV9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZXdhbGsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTE6MDYuNzc2Mzg4NTUyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTc0NzI4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEJlZm9yZSBJIHN0YXJ0IGRvd24gYSBwb3RlbnRpYWxseSByYWJiaXQgaG9sZSwgbGV0J3MgdGFrZSBhIG1vcmUgdGFyZ2V0ZWQgYXBwcm9hY2guIEknbSBnb2luZyB0byBxdWlja2x5IHNlYXJjaCB3aXRoaW4gYG1tL3BhZ2V3YWxrLmNgIGZvciBgRVhQT1JUX1NZTUJPTGAuIFRoYXQgbWFjcm8gaXMgYSBrZXkgaW5kaWNhdG9yLCByaWdodD8gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCdzIHN5bWJvbCBleHBvcnQgbWVjaGFuaXNtLiBGaW5kaW5nIHdoZXJlIGl0J3MgdXNlZCBpbiB0aGF0IHNwZWNpZmljIGZpbGXigJRyZWxhdGVkIHRvIHBhZ2UgdGFibGUgd2Fsa2luZywgd2hpY2ggaXMgbXkgaW1tZWRpYXRlIGFyZWEgb2YgaW50ZXJlc3TigJRjb3VsZCBiZSB0aGUgcXVpY2tlc3Qgd2F5IHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUsIHRoZSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgZXhwb3NlZCwgb3IgdGhlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBhZ2V3YWxrIHRoYXQgYXJlIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGZvciB1c2UgYnkga2VybmVsIG1vZHVsZXMuIEl0J2xsIGdpdmUgbWUgYSBkaXJlY3QgbGluZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIEkgbmVlZCwgd2l0aG91dCB1bm5lY2Vzc2FyeSBicm9hZGVyIGV4cGxvcmF0aW9uIG9mIHBvdGVudGlhbGx5IGlycmVsZXZhbnQgY29kZSBwYXRocy4gVGhpcyBkaXJlY3Qgc2VhcmNoIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gYSB2YWd1ZSBrZXl3b3JkIHNlYXJjaCwgb3IganVzdCByYW5kb21seSBsb29raW5nIGF0IHRoZSBmaWxlcy4gSXQncyB0aGUgbW9zdCBwcmFnbWF0aWMgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ5NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjExOjA5LjkzMzg2NDM3OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1Nzc1MzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZXdhbGsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTE6MDkuOTc4NDU2MjY4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjMzMjg0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW50ZXJuYWwgS2VybmVsIERhdGEgU3RydWN0dXJlczogTXkgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSBjb25zaWRlcmluZyB0aGVzZSBcInRoaW5ncyxcIiBhbmQgd2hpbGUgdGhleSBtaWdodCBub3QgYmUgZGlyZWN0bHkgZXhwb3J0ZWQgZm9yIGV4dGVybmFsIHVzZSwgaXQncyBwcmV0dHkgY2xlYXIgdGhleSdyZSAqYWJzb2x1dGVseSogZnVuZGFtZW50YWwgYW5kIHVzZWQgaW50ZXJuYWxseSBieSBhIHZhc3QgbnVtYmVyIG9mIGtlcm5lbCBzdWJzeXN0ZW1zLiBUaGluayBwcm9jZnMsIGBtYWR2aXNlYCwgYWxsIHRob3NlIGNvcmUgY29tcG9uZW50cyDigJMgdGhleSByZWx5IG9uIHRoaXMuXG5cblJpZ2h0LCB0aW1lIHRvIGNoZWNrIGlmIHRoZXkncmUgc3RhdGljLiBJZiB0aGV5IGFyZSwgdGhhdCB3b3VsZCBsaW1pdCB0aGVpciBzY29wZSBzaWduaWZpY2FudGx5LiBMZXQncyBzZWUuLi4geWVwLCBkZWZpbml0ZWx5IG5vbi1zdGF0aWMuIEdvb2QuIFRoYXQgZXhwYW5kcyB0aGUgcG9zc2liaWxpdGllcyBhbmQgaG93IHRoZXkgbWlnaHQgYmUgbWFuYWdlZCB3aXRoaW4gdGhlIGtlcm5lbC5cblxuTmV4dCwgSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgd2Fsa19wYWdlX3JhbmdlYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHRoaW5ncyBhcmUgYWN0dWFsbHkgKnVzZWQqIGFuZCBpbnRlcmFjdGVkIHdpdGggb24gYSBncmFudWxhciBsZXZlbC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBkZWVwZXIgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc2OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjExOjEzLjkwMTc5MDkzM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5ODcwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCB3YWxrX3BhZ2VfcmFuZ2VcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdld2Fsay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2V3YWxrLmM9NTQxPXN0YXRpYyBib29sIGNoZWNrX29wc19zYWZlKGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzKVxcbi0tXFxubW0vcGFnZXdhbGsuYy01OTQtICovXFxubW0vcGFnZXdhbGsuYzo1OTU6aW50IHdhbGtfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9wYWdld2Fsay5jLTU5Ni1cXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjExOjEzLjk1MTc4MzgyMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDYxMTA2NDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggY2xlYXJseSBhZGRyZXNzZXMgc29tZXRoaW5nIG5vbi1zdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQncyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIGNvcmUgTU0gcGFnZSB3YWxraW5nIGZ1bmN0aW9ucyDigJMgc3BlY2lmaWNhbGx5LCBgd2Fsa19wbWRfcmFuZ2VgIGFuZCBgd2Fsa19wdWRfcmFuZ2VgLiBUaGF0J3MgYSBjcml0aWNhbCBhcmVhLCBwb3RlbnRpYWxseSBhZmZlY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYWNyb3NzIHRoZSBib2FyZC4gVGhlIHRlc3QgY2FzZSBpbnZvbHZpbmcgYC9wcm9jL3BpZC9zbWFwc2AgdGVsbHMgbWUgdGhhdCB0aGlzIGZpeCBsaWtlbHkgdG91Y2hlcyBgc21hcHNfcHRlX3JhbmdlYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgdGhyb3VnaCBlaXRoZXIgYHdhbGtfcGFnZV92bWFgIG9yIGB3YWxrX3BhZ2VfcmFuZ2VgLlxuXG5NeSBmb2N1cyBpcyBzaGFycGVuaW5nIG9uIHRob3NlIGtleSBzeW1ib2xzOiBgd2Fsa19wYWdlX3JhbmdlYCwgYHdhbGtfcGFnZV92bWFgLCBhbmQgYHdhbGtfcGFnZV9tYXBwaW5nYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgSSdtIGdvaW5nIHRvIHdhbnQgdG8gZXhhbWluZS5cblxuTm8gc3BlY2lhbCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLCB0aGFua2Z1bGx5IOKAkyBqdXN0IGEgc3RhbmRhcmQgTU1VLCBtZWFuaW5nIHRoaXMgaXMgYnJvYWRseSBhcHBsaWNhYmxlLlxuXG5Tbywgc3VtbWluZyB0aGlzIHVwIGZvciBteXNlbGYsIEknZCBzYXkgdGhpcyBpcyBkZWZpbml0ZWx5IFwiV29ydGhGdXp6aW5nLlwiIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBgd2Fsa19wYWdlX3JhbmdlYCwgYHdhbGtfcGFnZV92bWFgLCBhbmQgYHdhbGtfcGFnZV9tYXBwaW5nYC4gVGhlcmUgYXJlIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCwgYSB3aW4gZm9yIG1lLiBUaGUgcmVhc29uaW5nPyBUaGUgcGF0Y2ggcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbiBpbiBmdW5kYW1lbnRhbCBwYWdlIHdhbGtpbmcgbG9naWMuIEEgc3RhbGUgYHdhbGstXHUwMDNlYWN0aW9uYCB2YXJpYWJsZSBjb3VsZCBsZWFkIHRvIGRvdWJsZS13YWxraW5nIHRoZSBzYW1lIG1lbW9yeSByYW5nZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGJ5IHRoaW5ncyBsaWtlIGAvcHJvYy9waWQvc21hcHNgIG9yIHN5c3RlbSBjYWxscyBsaWtlIGBtYWR2aXNlYC4gVGhpcyBjb21iaW5hdGlvbiBzY3JlYW1zIFwidnVsbmVyYWJpbGl0eSBwb3RlbnRpYWxcIi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE1MywiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTE6MjAuNDEyODk0NTEzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VcIixcbiAgICBcIndhbGtfcGFnZV92bWFcIixcbiAgICBcIndhbGtfcGFnZV9tYXBwaW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBjb3JlIE1NIHBhZ2Ugd2Fsa2luZyBsb2dpYyAod2Fsa19wbWRfcmFuZ2UsIHdhbGtfcHVkX3JhbmdlKSB3aGVyZSBhIHN0YWxlIHdhbGstXFx1MDAzZWFjdGlvbiBjb3VsZCBjYXVzZSB0aGUgc2FtZSByYW5nZSB0byBiZSB3YWxrZWQgdHdpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAoZS5nLiwgdmlhIC9wcm9jL3BpZC9zbWFwcyBvciBtYWR2aXNlKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VcIixcbiAgICBcIndhbGtfcGFnZV92bWFcIixcbiAgICBcIndhbGtfcGFnZV9tYXBwaW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBjb3JlIE1NIHBhZ2Ugd2Fsa2luZyBsb2dpYyAod2Fsa19wbWRfcmFuZ2UsIHdhbGtfcHVkX3JhbmdlKSB3aGVyZSBhIHN0YWxlIHdhbGstXFx1MDAzZWFjdGlvbiBjb3VsZCBjYXVzZSB0aGUgc2FtZSByYW5nZSB0byBiZSB3YWxrZWQgdHdpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAoZS5nLiwgdmlhIC9wcm9jL3BpZC9zbWFwcyBvciBtYWR2aXNlKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTE6MjAuNDEyOTQ1NTIzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUyMTA3MzgxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE3OjExOjIwLjQxMzY0Mjc3M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDUyMDM3MTk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIHBhZ2UgdGFibGUgd2Fsa2VyIChgbW0vcGFnZXdhbGsuY2ApIHdoZXJlIGEgc3RhbGUgYHdhbGstXFx1MDAzZWFjdGlvbmAgKGUuZy4sIGBBQ1RJT05fQUdBSU5gKSBjb3VsZCBlc2NhcGUgYSBsb3dlci1sZXZlbCB3YWxrIGZ1bmN0aW9uIGFuZCBjYXVzZSB0aGUgaGlnaGVyLWxldmVsIHdhbGsgZnVuY3Rpb24gdG8gaW5jb3JyZWN0bHkgcmVwZWF0IHRoZSB3YWxrIG92ZXIgdGhlIHNhbWUgcmFuZ2UuIFRoZSBmaXggc2ltcGx5IG1vdmVzIHRoZSBhc3NpZ25tZW50IGB3YWxrLVxcdTAwM2VhY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTtgIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBjb250cm9sIGZsb3cgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLCBhbmQgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY3MDBkNjk5Y2YzNDdkNGQwOTMxMmY4YmUzNzI2NWE2YjczMTcwOGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxNzoxMDo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXG5pbmRleCA1ZDg3YzYzMmEyNTUwLi5kM2JmZWNlMzE5MzM2IDEwMDY0NFxuLS0tIGEvbW0vcGFnZXdhbGsuY1xuKysrIGIvbW0vcGFnZXdhbGsuY1xuQEAgLTEyNiw2ICsxMjYsNyBAQCBzdGF0aWMgaW50IHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7XG4gXHRkbyB7XG4gYWdhaW46XG4rXHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7XG4gXHRcdG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiBcdFx0aWYgKHBtZF9ub25lKCpwbWQpKSB7XG4gXHRcdFx0aWYgKGhhc19pbnN0YWxsKVxuQEAgLTEzOCw4ICsxMzksNiBAQCBzdGF0aWMgaW50IHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHR3YWxrLVx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO1xuLVxuIFx0XHQvKlxuIFx0XHQgKiBUaGlzIGltcGxpZXMgdGhhdCBlYWNoIC1cdTAwM2VwbWRfZW50cnkoKSBoYW5kbGVyXG4gXHRcdCAqIG5lZWRzIHRvIGtub3cgYWJvdXQgcG1kX3RyYW5zX2h1Z2UoKSBwbWRzXG5AQCAtMTk2LDYgKzE5NSw3IEBAIHN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdHB1ZCA9IHB1ZF9vZmZzZXQocDRkLCBhZGRyKTtcbiBcdGRvIHtcbiAgYWdhaW46XG4rXHRcdHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7XG4gXHRcdG5leHQgPSBwdWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiBcdFx0aWYgKHB1ZF9ub25lKCpwdWQpKSB7XG4gXHRcdFx0aWYgKGhhc19pbnN0YWxsKVxuQEAgLTIwOCw4ICsyMDgsNiBAQCBzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHR3YWxrLVx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO1xuLVxuIFx0XHRpZiAob3BzLVx1MDAzZXB1ZF9lbnRyeSlcbiBcdFx0XHRlcnIgPSBvcHMtXHUwMDNlcHVkX2VudHJ5KHB1ZCwgYWRkciwgbmV4dCwgd2Fsayk7XG4gXHRcdGlmIChlcnIpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmVcbmluZGV4IDljY2Q5ZTE0NDdlNjYuLjkyZjk4MWY5Nzc0MGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlXG5AQCAtNjYsMyArNjYsNCBAQCBtZXJnZVxuIHByY3RsX3RocF9kaXNhYmxlXG4gcm1hcFxuIGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxuK3BhZ2V3YWxrX3JhY2VfdGVzdFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IGU2ZGY5NjhmMDk3MWMuLmNkZTliMjJmMTIxZDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbkBAIC0xMDUsNiArMTA1LDcgQEAgVEVTVF9HRU5fRklMRVMgKz0gZ3VhcmQtcmVnaW9uc1xuIFRFU1RfR0VOX0ZJTEVTICs9IG1lcmdlXG4gVEVTVF9HRU5fRklMRVMgKz0gcm1hcFxuIFRFU1RfR0VOX0ZJTEVTICs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxuK1RFU1RfR0VOX0ZJTEVTICs9IHBhZ2V3YWxrX3JhY2VfdGVzdFxuIFxuIGlmbmVxICgkKEFSQ0gpLGFybTY0KVxuIFRFU1RfR0VOX0ZJTEVTICs9IHNvZnQtZGlydHlcbkBAIC0xNjMsNiArMTY0LDcgQEAgVEVTVF9QUk9HUyArPSBrc2Z0X21sb2NrLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X21tYXAuc2hcbiBURVNUX1BST0dTICs9IGtzZnRfbXJlbWFwLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X3BhZ2VtYXAuc2hcbitURVNUX1BST0dTICs9IGtzZnRfcGFnZXdhbGsuc2hcbiBURVNUX1BST0dTICs9IGtzZnRfcGZubWFwLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X3BrZXkuc2hcbiBURVNUX1BST0dTICs9IGtzZnRfcHJvY2Vzc19tYWR2LnNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NmdF9wYWdld2Fsay5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzZnRfcGFnZXdhbGsuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi42ZjZjM2VlMWMxM2VmXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc2Z0X3BhZ2V3YWxrLnNoXG5AQCAtMCwwICsxLDQgQEBcbisjIS9iaW4vc2ggLWVcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rLi9ydW5fdm10ZXN0cy5zaCAtdCBwYWdld2Fsa1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2V3YWxrX3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZXdhbGtfcmFjZV90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40MmZkNmU3NWU4MjFlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdld2Fsa19yYWNlX3Rlc3QuY1xuQEAgLTAsMCArMSwxMzggQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogUmVncmVzc2lvbiB0ZXN0IGZvciBhIHN0YWxlIHdhbGstXHUwMDNlYWN0aW9uIGVzY2FwaW5nIHdhbGtfcG1kX3JhbmdlKCkgYW5kXG4rICogbWFraW5nIHdhbGtfcHVkX3JhbmdlKCkgd2FsayB0aGUgc2FtZSByYW5nZSB0d2ljZS5cbisgKlxuKyAqIFRoZSBtYXBwaW5nIGlzIHR3byBQTURzIGluc2lkZSBvbmUgUFVELiBQTUQgMCBpcyBwb3B1bGF0ZWQgb25jZSBhbmQgbGVmdFxuKyAqIGFsb25lLCBQTUQgMSBpcyBmYXVsdGVkIGluIGFuZCBkcm9wcGVkIGFnYWluIGJ5IGEgc2Vjb25kIHRocmVhZC4gQ2xlYXJpbmdcbisgKiBQTUQgMSB1bmRlciBzbWFwc19wdGVfcmFuZ2UoKSBtYWtlcyBpdCByYWlzZSBBQ1RJT05fQUdBSU4sIGFuZCBzaW5jZSBpdCBpc1xuKyAqIHRoZSBsYXN0IGVudHJ5IHRoZSBzdGFsZSB2YWx1ZSBsZWF2ZXMgd2Fsa19wbWRfcmFuZ2UoKSwgc28gc21hcHMgYWNjb3VudHNcbisgKiBQTUQgMCB0d2ljZS4gQSBrZXJuZWwgdGhhdCBkb2VzIG5vdCByZWNsYWltIHRoZSBlbXB0aWVkIHBhZ2UgdGFibGUgbmV2ZXJcbisgKiBjbGVhcnMgUE1EIDEgYW5kIHNvIG5ldmVyIGhpdHMgdGhlIHJhY2UuXG4rICpcbisgKiBBIGhpdCBjYW4gb25seSBjb21lIGZyb20gdGhlIGtlcm5lbCBjb3VudGluZyB0aGUgc2FtZSBwYWdlIHR3aWNlLCBzbyB0aGVcbisgKiB0ZXN0IGNhbm5vdCBmYWlsIHNwdXJpb3VzbHkuXG4rICovXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuK1xuKyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGF0b21pYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4rXG4rI2RlZmluZSBOUl9QTURTXHRcdDJcbisjZGVmaW5lIE5SX1JPVU5EU1x0MjAwMDBcbisvKiBDYXAgb24gaG93IG11Y2ggb2YgUE1EIDAgdG8gZmF1bHQgaW4sIHNvIHRoYXQgYSBsYXJnZSBQTUQgc3RheXMgY2hlYXAuICovXG4rI2RlZmluZSBQT1BfTUFYXHRcdCgyICogMTAyNCAqIDEwMjQpXG4rXG4rc3RhdGljIGNoYXIgKmFyZWE7XG4rc3RhdGljIHNpemVfdCBwbWRfc2l6ZTtcbitzdGF0aWMgYXRvbWljX2ludCBzdG9wO1xuK1xuK3N0YXRpYyB2b2lkICpyYWNlcih2b2lkICphcmcpXG4re1xuK1x0Y2hhciAqcG1kMSA9IGFyZWEgKyBwbWRfc2l6ZTtcbitcbitcdHdoaWxlIChhdG9taWNfbG9hZF9leHBsaWNpdChcdTAwMjZzdG9wLCBtZW1vcnlfb3JkZXJfYWNxdWlyZSkgPT0gMCkge1xuK1x0XHQvKiBtYWR2aXNlKCkgYmVsb3cga2VlcHMgdGhlIGNvbXBpbGVyIGZyb20gbGlmdGluZyB0aGlzIG91dC4gKi9cbitcdFx0KnBtZDEgPSAxO1xuK1x0XHRtYWR2aXNlKHBtZDEsIHBtZF9zaXplLCBNQURWX0RPTlRORUVEKTtcbitcdH1cbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzbWFwc19yc3Nfa2Iodm9pZClcbit7XG4rXHRjaGFyIGJ1ZlsxMDI0XTtcbitcdGNoYXIgKmVudHJ5O1xuK1xuK1x0ZW50cnkgPSBfX2dldF9zbWFwX2VudHJ5KGFyZWEsIFwiUnNzOlwiLCBidWYsIHNpemVvZihidWYpKTtcbitcdGlmICghZW50cnkpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm5vIFJzczogZW50cnkgZm9yIHRoZSB0ZXN0IG1hcHBpbmdcXG5cIik7XG4rXG4rXHRyZXR1cm4gc3RydG91bChlbnRyeSwgTlVMTCwgMTApO1xuK31cbitcbitpbnQgbWFpbih2b2lkKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbWF4X3Jzc19rYiwgcnNzX2tiID0gMDtcbitcdHNpemVfdCBzaXplLCBwb3Bfc2l6ZSwgaTtcbitcdHB0aHJlYWRfdCB0aHJlYWQ7XG4rXHRjaGFyICpyYXc7XG4rXG4rXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1xuK1x0cG1kX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0aWYgKCFwbWRfc2l6ZSlcbitcdFx0a3NmdF9leGl0X3NraXAoXCJDYW5ub3QgZGV0ZXJtaW5lIFBNRCBzaXplXFxuXCIpO1xuK1xuK1x0aWYgKHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pIFx1MDAzYyAyKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcIk5lZWQgYXQgbGVhc3QgMiBDUFVzIHRvIHJhY2VcXG5cIik7XG4rXG4rXHRzaXplID0gTlJfUE1EUyAqIHBtZF9zaXplO1xuK1xuK1x0LypcbitcdCAqIEFsaWduIHRvIHRoZSBtYXBwaW5nIHNpemUgdG8gc3RheSBpbnNpZGUgb25lIFBVRCwgdGhlbiB0cmltIHRoZVxuK1x0ICogc2xhY2sgc28gdGhhdCBzbWFwcyBoYXMgZXhhY3RseSBvbmUgVk1BIHRvIHJlcG9ydC5cbitcdCAqL1xuK1x0cmF3ID0gbW1hcChOVUxMLCAyICogc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSwgLTEsIDApO1xuK1x0aWYgKHJhdyA9PSBNQVBfRkFJTEVEKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJtbWFwIGZhaWxlZFxcblwiKTtcbitcbitcdGFyZWEgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpcmF3ICsgc2l6ZSAtIDEpIFx1MDAyNiB+KHNpemUgLSAxKSk7XG4rXHRpZiAoYXJlYSAhPSByYXcpXG4rXHRcdG11bm1hcChyYXcsIGFyZWEgLSByYXcpO1xuK1x0aWYgKHJhdyArIDIgKiBzaXplICE9IGFyZWEgKyBzaXplKVxuK1x0XHRtdW5tYXAoYXJlYSArIHNpemUsIHJhdyArIDIgKiBzaXplIC0gKGFyZWEgKyBzaXplKSk7XG4rXG4rXHQvKiBBIGh1Z2UgUE1EIG5ldmVyIHJlYWNoZXMgcHRlX29mZnNldF9tYXBfbG9jaygpLCBzbyBrZWVwIHRoZW0gb3V0LiAqL1xuK1x0aWYgKG1hZHZpc2UoYXJlYSwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKSlcbitcdFx0a3NmdF9leGl0X3NraXAoXCJNQURWX05PSFVHRVBBR0UgZmFpbGVkXFxuXCIpO1xuK1xuK1x0cG9wX3NpemUgPSBwbWRfc2l6ZSBcdTAwM2MgUE9QX01BWCA/IHBtZF9zaXplIDogUE9QX01BWDtcbitcdG1lbXNldChhcmVhLCAxLCBwb3Bfc2l6ZSk7XG4rXG4rXHRtYXhfcnNzX2tiID0gKHBvcF9zaXplIFx1MDAzZVx1MDAzZSAxMCkgKyAyNTY7XG4rXG4rXHQvKiBPdmVyIHRoZSBsaW1pdCBiZWZvcmUgcmFjaW5nIG1lYW5zIHRoaXMgaXMgbm90IG91ciBvd24gbWFwcGluZy4gKi9cbitcdHJzc19rYiA9IHNtYXBzX3Jzc19rYigpO1xuK1x0aWYgKHJzc19rYiBcdTAwM2UgbWF4X3Jzc19rYilcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiUnNzIGlzICVsdSBrQiBiZWZvcmUgcmFjaW5nLCBleHBlY3RlZCBhdCBtb3N0ICVsdSBrQlxcblwiLFxuK1x0XHRcdFx0ICAgcnNzX2tiLCBtYXhfcnNzX2tiKTtcbitcbitcdGtzZnRfc2V0X3BsYW4oMSk7XG4rXHRrc2Z0X3ByaW50X21zZyhcInJhY2luZyBzbWFwcyBhZ2FpbnN0IE1BRFZfRE9OVE5FRUQsICVkIHJvdW5kc1xcblwiLFxuK1x0XHQgICAgICAgTlJfUk9VTkRTKTtcbitcbitcdGlmIChwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIHJhY2VyLCBOVUxMKSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicHRocmVhZF9jcmVhdGUgZmFpbGVkXFxuXCIpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfUk9VTkRTOyBpKyspIHtcbitcdFx0cnNzX2tiID0gc21hcHNfcnNzX2tiKCk7XG4rXHRcdGlmIChyc3Nfa2IgXHUwMDNlIG1heF9yc3Nfa2IpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRhdG9taWNfc3RvcmVfZXhwbGljaXQoXHUwMDI2c3RvcCwgMSwgbWVtb3J5X29yZGVyX3JlbGVhc2UpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XG4rXG4rXHRpZiAoaSBcdTAwM2MgTlJfUk9VTkRTKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwid2FsayByYW4gdHdpY2Ugb3ZlciB0aGUgc2FtZSByYW5nZVxcblwiKTtcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFwiUnNzICVsdSBrQiBleGNlZWRzICVsdSBrQiwgcm91bmQgJXp1XFxuXCIsXG4rXHRcdFx0XHQgICAgICByc3Nfa2IsIG1heF9yc3Nfa2IsIGkpO1xuK1x0fSBlbHNlIHtcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFwiUnNzIHdpdGhpbiAlbHUga0Igb3ZlciAlZCByb3VuZHNcXG5cIixcbitcdFx0XHRcdCAgICAgIG1heF9yc3Nfa2IsIE5SX1JPVU5EUyk7XG4rXHR9XG4rXG4rXHRrc2Z0X2V4aXQoaSA9PSBOUl9ST1VORFMpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbmluZGV4IDhjMjk2ZGVkZjA0NzQuLmQ5MGM2MzcwODE0ZjcgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0zOTgsNiArMzk4LDggQEAgZmlcbiBcbiBDQVRFR09SWT1cInBhZ2VtYXBcIiBydW5fdGVzdCAuL3BhZ2VtYXBfaW9jdGxcbiBcbitDQVRFR09SWT1cInBhZ2V3YWxrXCIgcnVuX3Rlc3QgLi9wYWdld2Fsa19yYWNlX3Rlc3RcbitcbiBDQVRFR09SWT1cInBmbm1hcFwiIHJ1bl90ZXN0IC4vcGZubWFwXG4gXG4gIyBDT1cgdGVzdHNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbmluZGV4IGVhOGZjOGZkZjBlYjAuLjYyMjkyZTI0MTdkMTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuQEAgLTg4LDYgKzg4LDcgQEAgYm9vbCBwYWdlbWFwX2lzX3BvcHVsYXRlZChpbnQgZmQsIGNoYXIgKnN0YXJ0KTtcbiB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfZ2V0X3BmbihpbnQgZmQsIGNoYXIgKnN0YXJ0KTtcbiB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTtcbiBib29sIGNoZWNrX2Zvcl9wYXR0ZXJuKEZJTEUgKmZwLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xuK2NoYXIgKl9fZ2V0X3NtYXBfZW50cnkodm9pZCAqYWRkciwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbiB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKTtcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpO1xuIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTE6MjAuNDEzNjQzNTAzWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTIwMzQ4ODEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhZ2UgVGFibGUgV2Fsa2VyIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYWZ0ZXIgYSBxdWljayByZXZpZXcsIEkgc2VlIGl0IG1vZGlmaWVzIGBtbS9wYWdld2Fsay5jYCBhbmQgYWRkcyBhIG5ldyB0ZXN0LiBNeSBtYWluIGNvbmNlcm4gaXMsIG9mIGNvdXJzZSwgdGhlIGxvZ2ljIGFyb3VuZCB0aGUgcGFnZSB0YWJsZSB3YWxraW5nLiBUaGUgZ2lzdCBvZiBpdCBpcyB0aGUgbW92ZW1lbnQgb2YgYHdhbGstXHUwMDNlYWN0aW9uID0gQUNUSU9OX1NVQlRSRUU7YCBpbnNpZGUgdGhlIGxvb3AgaW4gYHdhbGtfcG1kX3JhbmdlYCBhbmQgYHdhbGtfcHVkX3JhbmdlYC4gVGhpcyBpcyBkZXNpZ25lZCB0byBhZGRyZXNzIGEgZmxhdyB3aGVyZSBhIHN0YWxlIGB3YWxrLVx1MDAzZWFjdGlvbmAgdmFsdWUgKGxpa2UgYEFDVElPTl9BR0FJTmApIGNvdWxkLCBpbiBjZXJ0YWluIHNpdHVhdGlvbnMsIGNhdXNlIHRoZSBzYW1lIG1lbW9yeSByYW5nZSB0byBiZSB3YWxrZWQgdHdpY2UsIHdoaWNoIGlzIG9idmlvdXNseSBub3Qgd2hhdCB3ZSB3YW50LlxuXG5JJ3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGNsb3NlbHksIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyBpbiBgbW0vcGFnZXdhbGsuY2AuIEl0J3MgY2xlYXIgdGhpcyBpcyBhIHB1cmUgY29udHJvbCBmbG93IGJ1Zy4gVGhlIG9yaWdpbmFsIHBsYWNlbWVudCBjb3VsZCBsZWFkIHRvIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBhY3Rpb24gZmxhZyBpc24ndCBwcm9wZXJseSByZXNldCB3aXRoaW4gdGhlIGxvb3AsIGxlYWRpbmcgdG8gdGhlIHJhbmdlIGJlaW5nIHJlLXdhbGtlZC4gTW92aW5nIHRoZSBhc3NpZ25tZW50IGVuc3VyZXMgdGhhdCBgQUNUSU9OX1NVQlRSRUVgIGlzIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggaXRlcmF0aW9uLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcy4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGlzbid0IGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvcm1hdGlvbiBsZWFrcy4gQWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW52b2x2ZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gV2UncmUgc2ltcGx5IHJlc2V0dGluZyBhIHN0YXRlIHZhcmlhYmxlIGZvciBjb3JyZWN0IGNvbnRyb2wgZmxvdy4gVGhlIGB3YWxrLVx1MDAzZWFjdGlvbmAgdmFyaWFibGUsIGEgZmllbGQgd2l0aGluIHRoZSBgc3RydWN0IG1tX3dhbGtgLCBpcyBiZWluZyByZXNldCB0byBgQUNUSU9OX1NVQlRSRUVgIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsb29wLlxuXG5HaXZlbiB0aGF0IHRoaXMgZml4IGlzIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnktcmVsYXRlZCBvcGVyYXRpb25zIG9yIHBvdGVudGlhbCBpbmZvLWxlYWtzLCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyBOZWVkc0tNU0FOIHRvIGZhbHNlLiBUaGUgc3RhbmRhcmQgdGVzdHMsIGFsb25nc2lkZSBLQVNBTiwgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoaXMgZml4LiBJdCdzIGEgY2xlYW4sIHRhcmdldGVkIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgc3BlY2lmaWMgbG9naWMgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwODUsIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTc6MTE6MzAuOTMzOTk1NDQ2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgcGFnZSB0YWJsZSB3YWxrZXIgKGBtbS9wYWdld2Fsay5jYCkgd2hlcmUgYSBzdGFsZSBgd2Fsay1cXHUwMDNlYWN0aW9uYCAoZS5nLiwgYEFDVElPTl9BR0FJTmApIGNvdWxkIGVzY2FwZSBhIGxvd2VyLWxldmVsIHdhbGsgZnVuY3Rpb24gYW5kIGNhdXNlIHRoZSBoaWdoZXItbGV2ZWwgd2FsayBmdW5jdGlvbiB0byBpbmNvcnJlY3RseSByZXBlYXQgdGhlIHdhbGsgb3ZlciB0aGUgc2FtZSByYW5nZS4gVGhlIGZpeCBzaW1wbHkgbW92ZXMgdGhlIGFzc2lnbm1lbnQgYHdhbGstXFx1MDAzZWFjdGlvbiA9IEFDVElPTl9TVUJUUkVFO2AgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcC4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGNvbnRyb2wgZmxvdyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MsIGFuZCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIHBhZ2UgdGFibGUgd2Fsa2VyIChgbW0vcGFnZXdhbGsuY2ApIHdoZXJlIGEgc3RhbGUgYHdhbGstXFx1MDAzZWFjdGlvbmAgKGUuZy4sIGBBQ1RJT05fQUdBSU5gKSBjb3VsZCBlc2NhcGUgYSBsb3dlci1sZXZlbCB3YWxrIGZ1bmN0aW9uIGFuZCBjYXVzZSB0aGUgaGlnaGVyLWxldmVsIHdhbGsgZnVuY3Rpb24gdG8gaW5jb3JyZWN0bHkgcmVwZWF0IHRoZSB3YWxrIG92ZXIgdGhlIHNhbWUgcmFuZ2UuIFRoZSBmaXggc2ltcGx5IG1vdmVzIHRoZSBhc3NpZ25tZW50IGB3YWxrLVxcdTAwM2VhY3Rpb24gPSBBQ1RJT05fU1VCVFJFRTtgIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBjb250cm9sIGZsb3cgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLCBhbmQgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowf6svk[1] Phase: Succeeded StartedAt: 2026-08-11 17:11:41 +0000 UTC FinishedAt: 2026-08-11 17:11:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 17:11:41 +0000 UTC FinishedAt: 2026-08-11 17:11:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2] Phase: Succeeded StartedAt: 2026-08-11 17:11:41 +0000 UTC FinishedAt: 2026-08-11 20:53:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 17:11:41 +0000 UTC FinishedAt: 2026-08-11 20:53:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 17:11:41 +0000 UTC FinishedAt: 2026-08-11 17:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 17:11:41 +0000 UTC FinishedAt: 2026-08-11 17:11:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowf6svk/series-workflowf6svk-convert-artifact-3990046587/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 17:11:51 +0000 UTC FinishedAt: 2026-08-11 17:30:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 17:11:51 +0000 UTC FinishedAt: 2026-08-11 17:30: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:*fc2f9a3b-6eae-4403-a8b8-56b6333ec4e9,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-workflowf6svk/series-workflowf6svk-convert-artifact-3990046587/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": "7214a87d-57d9-4c16-a5ba-c99be793ebfe", "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-workflowf6svk/series-workflowf6svk-build-action-30799545/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 17:11:51 +0000 UTC FinishedAt: 2026-08-11 17:29: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:*fc2f9a3b-6eae-4403-a8b8-56b6333ec4e9,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-workflowf6svk/series-workflowf6svk-convert-artifact-3990046587/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": "7214a87d-57d9-4c16-a5ba-c99be793ebfe", "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-workflowf6svk/series-workflowf6svk-build-action-30799545/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 17:30:00 +0000 UTC FinishedAt: 2026-08-11 17:30:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 17:30:00 +0000 UTC FinishedAt: 2026-08-11 17:30:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 17:30:00 +0000 UTC FinishedAt: 2026-08-11 17:30:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 17:30:00 +0000 UTC FinishedAt: 2026-08-11 17:30:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowf6svk/series-workflowf6svk-convert-artifact-3934360786/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 17:30:10 +0000 UTC FinishedAt: 2026-08-11 17:32:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 17:30:10 +0000 UTC FinishedAt: 2026-08-11 17:32:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7214a87d-57d9-4c16-a5ba-c99be793ebfe,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-workflowf6svk/series-workflowf6svk-build-action-30799545/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-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 17:32:11 +0000 UTC FinishedAt: 2026-08-11 17:32:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 17:32:11 +0000 UTC FinishedAt: 2026-08-11 17:32:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 17:32:11 +0000 UTC FinishedAt: 2026-08-11 17:49:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 17:32:11 +0000 UTC FinishedAt: 2026-08-11 17:49:06 +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:*fc2f9a3b-6eae-4403-a8b8-56b6333ec4e9,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-workflowf6svk/series-workflowf6svk-convert-artifact-3934360786/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": "fc98a6f9-1077-4b13-976a-8552de4595f5", "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-workflowf6svk/series-workflowf6svk-build-action-786436966/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 17:32:11 +0000 UTC FinishedAt: 2026-08-11 17:48:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*fc2f9a3b-6eae-4403-a8b8-56b6333ec4e9,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-workflowf6svk/series-workflowf6svk-convert-artifact-3934360786/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": "fc98a6f9-1077-4b13-976a-8552de4595f5", "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-workflowf6svk/series-workflowf6svk-build-action-786436966/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 17:49:06 +0000 UTC FinishedAt: 2026-08-11 17:49:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 17:49:06 +0000 UTC FinishedAt: 2026-08-11 17:49:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 17:49:06 +0000 UTC FinishedAt: 2026-08-11 17:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 17:49:06 +0000 UTC FinishedAt: 2026-08-11 17:50:56 +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:*fc98a6f9-1077-4b13-976a-8552de4595f5,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-workflowf6svk/series-workflowf6svk-build-action-786436966/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-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 17:51:06 +0000 UTC FinishedAt: 2026-08-11 20:53:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 17:51:06 +0000 UTC FinishedAt: 2026-08-11 20:53:50 +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":["walk_page_range","walk_page_vma","walk_page_mapping"],"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:*7214a87d-57d9-4c16-a5ba-c99be793ebfe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc98a6f9-1077-4b13-976a-8552de4595f5,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-workflowf6svk/series-workflowf6svk-build-action-30799545/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-workflowf6svk/series-workflowf6svk-build-action-786436966/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 17:51:06 +0000 UTC FinishedAt: 2026-08-11 17:51:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 17:51:06 +0000 UTC FinishedAt: 2026-08-11 17:51:11 +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":["walk_page_range","walk_page_vma","walk_page_mapping"],"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-workflowf6svk/series-workflowf6svk-convert-artifact-3004506151/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 17:51:06 +0000 UTC FinishedAt: 2026-08-11 17:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 17:51:06 +0000 UTC FinishedAt: 2026-08-11 17:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 17:51:06 +0000 UTC FinishedAt: 2026-08-11 17:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 17:51:16 +0000 UTC FinishedAt: 2026-08-11 20:53:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf6svk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["walk_page_range","walk_page_vma","walk_page_mapping"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"511c7a2c5acf478c7d4be3386455a66d114ba929","config_name":"upstream-apparmor-kasan.config","series_id":"54878d3b-dfb0-4dcf-932b-a28823bad38e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 17:51:16 +0000 UTC FinishedAt: 2026-08-11 20:53:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7214a87d-57d9-4c16-a5ba-c99be793ebfe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc98a6f9-1077-4b13-976a-8552de4595f5,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-workflowf6svk/series-workflowf6svk-build-action-30799545/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-workflowf6svk/series-workflowf6svk-build-action-786436966/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-workflowf6svk/series-workflowf6svk-convert-artifact-3004506151/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,}