Name: series-workflowwjk4h Phase: Succeeded StartedAt: 2026-09-04 04:14:23 +0000 UTC FinishedAt: 2026-09-04 07:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[0] Phase: Succeeded StartedAt: 2026-09-04 04:14:23 +0000 UTC FinishedAt: 2026-09-04 04:17:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 04:14:23 +0000 UTC FinishedAt: 2026-09-04 04:17:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "89a312991dc6e638a36adc43ccb91dbc25504c04", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROVE_LOCKING", "NFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "89a312991dc6e638a36adc43ccb91dbc25504c04", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROVE_LOCKING", "NFS_FS" ], "series_id": "f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "d_duplicate", "d_alloc_parallel", "d_alloc_trylock", "d_splice_alias", "d_splice_alias_ops", "d_wait_lookup", "lookup_slow", "lookup_slow_killable", "lookup_open", "nfs_async_unlink_release", "nfs_call_unlink" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST1ZFX0xPQ0tJTkcmIzM0OywKICAgICYjMzQ7TkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZF9kdXBsaWNhdGUmIzM0OywKICAgICYjMzQ7ZF9hbGxvY19wYXJhbGxlbCYjMzQ7LAogICAgJiMzNDtkX2FsbG9jX3RyeWxvY2smIzM0OywKICAgICYjMzQ7ZF9zcGxpY2VfYWxpYXMmIzM0OywKICAgICYjMzQ7ZF9zcGxpY2VfYWxpYXNfb3BzJiMzNDssCiAgICAmIzM0O2Rfd2FpdF9sb29rdXAmIzM0OywKICAgICYjMzQ7bG9va3VwX3Nsb3cmIzM0OywKICAgICYjMzQ7bG9va3VwX3Nsb3dfa2lsbGFibGUmIzM0OywKICAgICYjMzQ7bG9va3VwX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2FzeW5jX3VubGlua19yZWxlYXNlJiMzNDssCiAgICAmIzM0O25mc19jYWxsX3VubGluayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIExvY2tkZXAgdHJhY2tpbmcgZm9yIHBhcmFsbGVsIGRlbnRyeSBsb29rdXBzIChEQ0FDSEVfUEFSX0xPT0tVUCB2aWEgc3RydWN0IGxvY2tkZXBfbWFwIGluIHN0cnVjdCBkZW50cnkpLCBhZGRzIHRoZSBkX2R1cGxpY2F0ZSBhbmQgZF9hbGxvY190cnlsb2NrIGhlbHBlcnMsIHVwZGF0ZXMgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gVkZTIGxvb2t1cCByb3V0aW5lcyAobG9va3VwX3Nsb3csIGxvb2t1cF9vcGVuKSwgYW5kIGZpeGVzIGZpbGVzeXN0ZW0gZG9jdW1lbnRhdGlvbi5cblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgYm91bmRhcmllcywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIHRyYW5zZmVycy4gQWxsIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IGRlbnRyeSBpbiBfX2RfYWxsb2MpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24uIEFueSBjb25jdXJyZW5jeSwgZGVhZGxvY2ssIG9yIHJlZmNvdW50aW5nIGlzc3VlcyByZXN1bHRpbmcgZnJvbSB0aGVzZSBWRlMgbG9ja2luZy9sb29rdXAgcmVmYWN0b3JpbmdzIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIFZGUyBkY2FjaGUgYW5kIG5hbWVpIGxvZ2ljLCBpbmNsdWRpbmcgcGFyYWxsZWwgbG9va3VwIGxvY2tpbmcsIHNoYXJlZCBkaXJlY3RvcnkgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gbG9va3VwX3Nsb3cgYW5kIGxvb2t1cF9vcGVuLCBsb2NrZGVwIG1hcCB0cmFja2luZyBmb3IgaW4tbG9va3VwIGRlbnRyaWVzLCB1cGRhdGVkIGFzc2VydGlvbnMgaW4gZF9zcGxpY2VfYWxpYXNfb3BzLCBuZXcgZGNhY2hlIGhlbHBlcnMgKGRfZHVwbGljYXRlLCBkX2FsbG9jX3RyeWxvY2spLCBhbmQgTkZTIGFzeW5jaHJvbm91cyB1bmxpbmsgbG9jayB0cmFja2luZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSByZWFjaGFibGUga2VybmVsIHN1YnN5c3RlbXMgYW5kIGRpcmVjdGx5IGFmZmVjdCBjb25jdXJyZW5jeSBhbmQgaW52YXJpYW50IGVuZm9yY2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDlhMTJlYzFlNWZlM2YzZTU3N2QzYjYxODM2ZDg2ZTY2OTk0MzBlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDQ6MTU6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcbmluZGV4IDYwODgwZWIwYzQ5ZDEuLjRlMDE1ZjFiZjFmODQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0XG5AQCAtMTIwMywxNiAmIzQzOzEyMDMsMTYgQEAgd2lsbCBmYWlsLXNhZmUuXG4gXG4gLS0tXG4gXG4tKiogbWFuZGF0b3J5KipcbiYjNDM7KiptYW5kYXRvcnkqKlxuIFxuIGxvb2t1cF9vbmUoKSwgbG9va3VwX29uZV91bmxvY2tlZCgpLCBsb29rdXBfb25lX3Bvc2l0aXZlX3VubG9ja2VkKCkgbm93XG4gdGFrZSBhIHFzdHIgaW5zdGVhZCBvZiBhIG5hbWUgYW5kIGxlbi4gIFRoZXNlLCBub3QgdGhlIFwmIzM0O29uZV9sZW5cJiMzNDtcbiB2ZXJzaW9ucywgc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgYWNjZXNzaW5nIGEgZmlsZXN5c3RlbSBmcm9tIG91dHNpZGVcbi10aGF0IGZpbGVzeXNtdGVtLCB0aHJvdWdoIGEgbW91bnQgcG9pbnQgLSB3aGljaCB3aWxsIGhhdmUgYSBtbnRfaWRtYXAuXG4mIzQzO3RoYXQgZmlsZXN5c3RlbSwgdGhyb3VnaCBhIG1vdW50IHBvaW50IC0gd2hpY2ggd2lsbCBoYXZlIGEgbW50X2lkbWFwLlxuIFxuIC0tLVxuIFxuLSoqIG1hbmRhdG9yeSoqXG4mIzQzOyoqbWFuZGF0b3J5KipcbiBcbiBGdW5jdGlvbnMgdHJ5X2xvb2t1cF9vbmVfbGVuKCksIGxvb2t1cF9vbmVfbGVuKCksXG4gbG9va3VwX29uZV9sZW5fdW5sb2NrZWQoKSBhbmQgbG9va3VwX3Bvc2l0aXZlX3VubG9ja2VkKCkgaGF2ZSBiZWVuXG5AQCAtMTIyOSw3ICYjNDM7MTIyOSw3IEBAIGFscmVhZHkgYmVlbiBwZXJmb3JtZWQgc3VjaCBhcyBhZnRlciB2ZnNfcGF0aF9wYXJlbnRfbG9va3VwKClcbiBcbiAtLS1cbiBcbi0qKiBtYW5kYXRvcnkqKlxuJiM0MzsqKm1hbmRhdG9yeSoqXG4gXG4gZF9oYXNoX2FuZF9sb29rdXAoKSBpcyBubyBsb25nZXIgZXhwb3J0ZWQgb3IgYXZhaWxhYmxlIG91dHNpZGUgdGhlIFZGUy5cbiBVc2UgdHJ5X2xvb2t1cF9ub3Blcm0oKSBpbnN0ZWFkLiAgVGhpcyBhZGRzIG5hbWUgdmFsaWRhdGlvbiBhbmQgdGFrZXNcbkBAIC0xMzcwLDcgJiM0MzsxMzcwLDcgQEAgc2ltaWxhci5cbiBcbiAtLS1cbiBcbi0qKiBtYW5kYXRvcnkqKlxuJiM0MzsqKm1hbmRhdG9yeSoqXG4gXG4gbG9ja19yZW5hbWUoKSwgbG9ja19yZW5hbWVfY2hpbGQoKSwgdW5sb2NrX3JlbmFtZSgpIGFyZSBub1xuIGxvbmdlciBhdmFpbGFibGUuICBVc2Ugc3RhcnRfcmVuYW1pbmcoKSBvciBzaW1pbGFyLlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuaW5kZXggZDNhOTNlZWMzOTQ1Zi4uZGU4Zjg1MDIwNTZlOCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG5AQCAtNTA3LDggJiM0Mzs1MDcsOCBAQCBvdGhlcndpc2Ugbm90ZWQuXG4gXHRkZW50cnkgYmVmb3JlIHRoZSBmaXJzdCBta2RpciByZXR1cm5zLlxuIFxuIFx0SWYgdGhlcmUgaXMgYW55IGNoYW5jZSB0aGlzIGNvdWxkIGhhcHBlbiwgdGhlbiB0aGUgbmV3IGlub2RlXG4tXHRzaG91bGQgYmUgZF9kcm9wKCllZCBhbmQgYXR0YWNoZWQgd2l0aCBkX3NwbGljZV9hbGlhcygpLiAgVGhlXG4tXHRyZXR1cm5lZCBkZW50cnkgKGlmIGFueSkgc2hvdWxkIGJlIHJldHVybmVkIGJ5IC1cdTAwM2Vta2RpcigpLlxuJiM0MztcdHNob3VsZCBiZSBhdHRhY2hlZCB3aXRoIGRfc3BsaWNlX2FsaWFzKCkuICBUaGUgcmV0dXJuZWRcbiYjNDM7XHRkZW50cnkgKGlmIGFueSkgc2hvdWxkIGJlIHJldHVybmVkIGJ5IC1cdTAwM2Vta2RpcigpLlxuIFxuIGBgcm1kaXJgYFxuIFx0Y2FsbGVkIGJ5IHRoZSBybWRpcigyKSBzeXN0ZW0gY2FsbC4gIE9ubHkgcmVxdWlyZWQgaWYgeW91IHdhbnRcbmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jXG5pbmRleCAxYjFhODFmMTBkYTY3Li4zYWY4YjJhYzY5OWY5IDEwMDY0NFxuLS0tIGEvZnMvZGNhY2hlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RjYWNoZS5jXG5AQCAtMzIsNiAmIzQzOzMyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRfc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3RfYmwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmFtZWkuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDttb3VudC5oXCYjMzQ7XG4gXG5AQCAtMTkwMCw2ICYjNDM7MTkwMSw3IEBAIEVYUE9SVF9TWU1CT0woZF9pbnZhbGlkYXRlKTtcbiAgXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbiB7XG4mIzQzO1x0c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2xvb2t1cF9rZXk7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4gXHRjaGFyICpkbmFtZTtcbiBcdGludCBlcnI7XG5AQCAtMTk1Nyw2ICYjNDM7MTk1OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4gXHRkZW50cnktXHUwMDNld2FpdGVycyA9IE5VTEw7XG4gXHRJTklUX0hMSVNUX05PREUoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfc2liKTtcbiBcbiYjNDM7XHRsb2NrZGVwX2luaXRfbWFwKFx1MDAyNmRlbnRyeS1cdTAwM2Vsb29rdXBfbWFwLCBcJiMzNDtEQ0FDSEVfUEFSX0xPT0tVUFwmIzM0OywgXHUwMDI2X19sb29rdXBfa2V5LCAwKTtcbiYjNDM7XG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfb3AgXHUwMDI2XHUwMDI2IGRlbnRyeS1cdTAwM2VkX29wLVx1MDAzZWRfaW5pdCkge1xuIFx0XHRlcnIgPSBkZW50cnktXHUwMDNlZF9vcC1cdTAwM2VkX2luaXQoZGVudHJ5KTtcbiBcdFx0aWYgKGVycikge1xuQEAgLTE5OTksNiAmIzQzOzIwMDMsNTggQEAgc3RydWN0IGRlbnRyeSAqZF9hbGxvYyhzdHJ1Y3QgZGVudHJ5ICogcGFyZW50LCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbiB9XG4gRVhQT1JUX1NZTUJPTChkX2FsbG9jKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGRfZHVwbGljYXRlIC0gZHVwbGljYXRlIGEgZGVudHJ5IGZvciBjb21iaW5lZCBhdG9taWMgb3BlcmF0aW9uXG4mIzQzOyAqIEBkZW50cnk6IHRoZSBkZW50cnkgdG8gZHVwbGljYXRlXG4mIzQzOyAqXG4mIzQzOyAqIFNvbWUgcmVuYW1lIG9wZXJhdGlvbnMgbmVlZCB0byBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgb3BlcmF0aW9uXG4mIzQzOyAqIGluc2lkZSB0aGUgZmlsZXN5c3RlbS5cbiYjNDM7ICogMS8gQSBjbHVzdGVyIGZpbGVzeXN0ZW0gd2hlbiByZW5hbWluZyB0byBhbiBpbi11c2UgZmlsZSBtaWdodCBuZWVkIHRvXG4mIzQzOyAqICAgZmlyc3QgXCYjMzQ7c2lsbHktcmVuYW1lXCYjMzQ7IHRoYXQgdGFyZ2V0IG91dCBvZiB0aGUgd2F5IGJlZm9yZSB0aGUgbWFpbiByZW5hbWVcbiYjNDM7ICogMi8gQSBmaWxlc3lzdGVtIHRoYXQgc3VwcG9ydHMgd2hpdGUtb3V0IG1pZ2h0IHdhbnQgdG8gY3JlYXRlIGEgd2hpdGVvdXRcbiYjNDM7ICogICBpbiBwbGFjZSBvZiB0aGUgZmlsZSBiZWluZyBtb3ZlZC5cbiYjNDM7ICpcbiYjNDM7ICogRm9yIHRoaXMgdGhleSBuZWVkIHR3byBkZW50cmllcyB3aGljaCB0ZW1wb3JhcmlseSBoYXZlIHRoZSBzYW1lIG5hbWUsXG4mIzQzOyAqIGJlZm9yZSBvbmUgaXMgcmVuYW1lZC4gIGRfZHVwbGljYXRlKCkgcHJvdmlkZXMgZm9yIHRoaXMuICBHaXZlbiBhXG4mIzQzOyAqIHBvc2l0aXZlIGhhc2hlZCBkZW50cnksIGl0IGNyZWF0ZXMgYSBzZWNvbmQgaW4tbG9va3VwIGRlbnRyeS5cbiYjNDM7ICogQmVjYXVzZSB0aGUgb3JpZ2luYWwgZGVudHJ5IGV4aXN0cywgbm8gb3RoZXIgdGhyZWFkIHdpbGwgdHJ5IHRvXG4mIzQzOyAqIGNyZWF0ZSBhbiBpbi1sb29rdXAgZGVudHJ5LCBzbyB0aGVyZSBjYW4gYmUgbm8gcmFjZSBpbiB0aGlzIGNyZWF0ZS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGNhbGxlciBzaG91bGQgZF9tb3ZlKCkgdGhlIG9yaWdpbmFsIHRvIGEgbmV3IG5hbWUsIG9mdGVuIHZpYSBhXG4mIzQzOyAqIHJlbmFtZSByZXF1ZXN0LCBhbmQgc2hvdWxkIGNhbGwgZF9sb29rdXBfZG9uZSgpIG9uIHRoZSBuZXdseSBjcmVhdGVkXG4mIzQzOyAqIGRlbnRyeS4gIElmIHRoZSBuZXcgaXMgaW5zdGFudGlhdGVkIHRoZW4gdGhlIG9sZCBNVVNUIGVpdGhlciBiZSBtb3ZlZFxuJiM0MzsgKiBvciBkcm9wcGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBQYXJlbnQgbXVzdCBiZSBsb2NrZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IGFuIGluLWxvb2t1cCBkZW50cnksIG9yIC1FTk9NRU0uXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgZGVudHJ5ICpkX2R1cGxpY2F0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaGFzaCA9IGRlbnRyeS1cdTAwM2VkX25hbWUuaGFzaDtcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQ7XG4mIzQzO1x0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmIgPSBpbl9sb29rdXBfaGFzaChwYXJlbnQsIGhhc2gpO1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKm5ldyA9IF9fZF9hbGxvYyhwYXJlbnQtXHUwMDNlZF9zYiwgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbmFtZSk7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghbmV3KSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcbiYjNDM7XHRuZXctXHUwMDNlZF9mbGFncyB8PSBEQ0FDSEVfUEFSX0xPT0tVUDtcbiYjNDM7XHRsb2NrX21hcF9hY3F1aXJlX3RyeShcdTAwMjZuZXctXHUwMDNlbG9va3VwX21hcCk7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNnBhcmVudC1cdTAwM2VkX2xvY2spO1xuJiM0MztcdG5ldy1cdTAwM2VkX3BhcmVudCA9IGRnZXRfZGxvY2socGFyZW50KTtcbiYjNDM7XHRobGlzdF9hZGRfaGVhZChcdTAwMjZuZXctXHUwMDNlZF9zaWIsIFx1MDAyNnBhcmVudC1cdTAwM2VkX2NoaWxkcmVuKTtcbiYjNDM7XHRpZiAocGFyZW50LVx1MDAzZWRfZmxhZ3MgXHUwMDI2IERDQUNIRV9ESVNDT05ORUNURUQpXG4mIzQzO1x0XHRuZXctXHUwMDNlZF9mbGFncyB8PSBEQ0FDSEVfRElTQ09OTkVDVEVEO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnBhcmVudC1cdTAwM2VkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRobGlzdF9ibF9sb2NrKGIpO1xuJiM0MztcdGhsaXN0X2JsX2FkZF9oZWFkKFx1MDAyNm5ldy1cdTAwM2VkX2luX2xvb2t1cF9oYXNoLCBiKTtcbiYjNDM7XHRobGlzdF9ibF91bmxvY2soYik7XG4mIzQzO1x0cmV0dXJuIG5ldztcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGRfZHVwbGljYXRlKTtcbiYjNDM7XG4gc3RydWN0IGRlbnRyeSAqZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuIFx0cmV0dXJuIF9fZF9hbGxvYyhzYiwgTlVMTCk7XG5AQCAtMjE2OCw3ICYjNDM7MjIyNCw2IEBAIHN0YXRpYyB2b2lkIF9fZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gICogKG9yIG90aGVyd2lzZSBzZXQpIGJ5IHRoZSBjYWxsZXIgdG8gaW5kaWNhdGUgdGhhdCBpdCBpcyBub3dcbiAgKiBpbiB1c2UgYnkgdGhlIGRjYWNoZS5cbiAgKi9cbi0gXG4gdm9pZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiB7XG4gXHRCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZW50cnkpKTtcbkBAIC0yNzUwLDYgJiM0MzsyODA1LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBlbmRfZGlyX2FkZChzdHJ1Y3QgaW5vZGUgKmRpciwgdW5zaWduZWQgaW50IG4pXG4gc3RhdGljIHZvaWQgZF93YWl0X2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4ge1xuIFx0aWYgKGxpa2VseShkX2luX2xvb2t1cChkZW50cnkpKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRlbGwgbG9ja2RlcCB3ZSB3aWxsIHdhaXQgZm9yIHRoZSBsb29rdXAgbG9jaywgYWZ0ZXJcbiYjNDM7XHRcdCAqIGRyb3BwaW5nIC1cdTAwM2VkX2xvY2ssIGJ1dCB3b24mIzM5O3QgYWN0dWFsbHkgdGFrZSBpdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c3Bpbl9yZWxlYXNlKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xvY2suZGVwX21hcCwgMCk7XG4mIzQzO1x0XHRsb2NrX21hcF9zeW5jKFx1MDAyNmRlbnRyeS1cdTAwM2Vsb29rdXBfbWFwKTtcbiYjNDM7XHRcdHNwaW5fYWNxdWlyZShcdTAwMjZkZW50cnktXHUwMDNlZF9sb2NrLmRlcF9tYXAsIDAsIDEsIF9USElTX0lQXyk7XG4mIzQzO1xuIFx0XHRkZW50cnktXHUwMDNlZF9mbGFncyB8PSBEQ0FDSEVfTE9PS1VQX1dBSVRFUlM7XG4gXHRcdHdhaXRfdmFyX2V2ZW50X3NwaW5sb2NrKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2ZsYWdzLFxuIFx0XHRcdFx0XHQhZF9pbl9sb29rdXAoZGVudHJ5KSxcbkBAIC0yNzU3LDggJiM0MzsyODIwLDE2IEBAIHN0YXRpYyB2b2lkIGRfd2FpdF9sb29rdXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0fVxuIH1cbiBcbi1zdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCxcbi1cdFx0XHRcdGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuJiM0MzsvKiBXaGF0IHRvIGRvIHdoZW4gX19kX2FsbG9jX3BhcmFsbGVsIGZpbmRzIGEgZF9pbl9sb29rdXAgZGVudHJ5ICovXG4mIzQzO2VudW0gYWxsb2NfcGFyYSB7XG4mIzQzO1x0QUxMT0NfUEFSQV9XQUlULFxuJiM0MztcdEFMTE9DX1BBUkFfRkFJTCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7c3RydWN0IGRlbnRyeSAqX19kX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCxcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuJiM0MztcdFx0XHRcdCAgZW51bSBhbGxvY19wYXJhIGhvdylcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaGFzaCA9IG5hbWUtXHUwMDNlaGFzaDtcbiBcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpiID0gaW5fbG9va3VwX2hhc2gocGFyZW50LCBoYXNoKTtcbkBAIC0yODMxLDYgJiM0MzsyOTAyLDEyIEBAIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuIFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xvY2spO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG4gXHRcdH1cbiYjNDM7XHRcdGlmICh1bmxpa2VseShob3cgPT0gQUxMT0NfUEFSQV9GQUlMKSkge1xuJiM0MztcdFx0XHQvKiBtdXN0biYjMzk7dCB3YWl0IGZvciBjb25jdXJyZW50IGxvb2t1cCB0byBjb21wbGV0ZSAqL1xuJiM0MztcdFx0XHRzcGluX3VubG9jayhcdTAwMjZkZW50cnktXHUwMDNlZF9sb2NrKTtcbiYjNDM7XHRcdFx0ZHB1dChuZXcpO1xuJiM0MztcdFx0XHRyZXR1cm4gRVJSX1BUUigtRVdPVUxEQkxPQ0spO1xuJiM0MztcdFx0fVxuIFx0XHQvKlxuIFx0XHQgKiBzb21lYm9keSBpcyBsaWtlbHkgdG8gYmUgc3RpbGwgZG9pbmcgbG9va3VwIGZvciBpdDtcbiBcdFx0ICogcGluIGl0IGFuZCB3YWl0IGZvciB0aGVtIHRvIGZpbmlzaFxuQEAgLTI4NTgsMTQgJiM0MzsyOTM1LDc3IEBAIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuIFx0fVxuIFx0aGxpc3RfYmxfYWRkX2hlYWQoXHUwMDI2bmV3LVx1MDAzZWRfaW5fbG9va3VwX2hhc2gsIGIpO1xuIFx0aGxpc3RfYmxfdW5sb2NrKGIpO1xuJiM0MztcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFx1MDAyNm5ldy1cdTAwM2Vsb29rdXBfbWFwKTtcbiBcdHJldHVybiBuZXc7XG4gbWlzbWF0Y2g6XG4gXHRzcGluX3VubG9jayhcdTAwMjZkZW50cnktXHUwMDNlZF9sb2NrKTtcbiBcdGRwdXQoZGVudHJ5KTtcbiBcdGdvdG8gcmV0cnk7XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRfYWxsb2NfcGFyYWxsZWwoKSAtIGFsbG9jYXRlIGEgbmV3IGRlbnRyeSBhbmQgZW5zdXJlIHVuaXF1ZW5lc3NcbiYjNDM7ICogQHBhcmVudDogZGVudHJ5IG9mIHRoZSBwYXJlbnRcbiYjNDM7ICogQG5hbWU6ICAgbmFtZSBvZiB0aGUgZGVudHJ5IHdpdGhpbiB0aGF0IHBhcmVudC5cbiYjNDM7ICpcbiYjNDM7ICogQSBuZXcgZGVudHJ5IGlzIGFsbG9jYXRlZCBhbmQsIHByb3ZpZGluZyBpdCBpcyB1bmlxdWUsIGFkZGVkIHRvIHRoZVxuJiM0MzsgKiByZWxldmFudCBpbmRleC5cbiYjNDM7ICogSWYgYW4gZXhpc3RpbmcgZGVudHJ5IGlzIGZvdW5kIHdpdGggdGhlIHNhbWUgcGFyZW50L25hbWUgdGhhdCBpc1xuJiM0MzsgKiBub3QgZF9pbl9sb29rdXAoKSwgdGhlbiB0aGF0IGlzIHJldHVybmVkIGluc3RlYWQuXG4mIzQzOyAqIElmIHRoZSBleGlzdGluZyBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSwgZF9hbGxvY19wYXJhbGxlbCgpIHdhaXRzIGZvclxuJiM0MzsgKiB0aGF0IGxvb2t1cCB0byBjb21wbGV0ZSBiZWZvcmUgcmV0dXJuaW5nIHRoZSBkZW50cnkgYW5kIHRoZW4gZW5zdXJlcyB0aGVcbiYjNDM7ICogbWF0Y2ggaXMgc3RpbGwgdmFsaWQuXG4mIzQzOyAqIFRodXMgaWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBkX2luX2xvb2t1cCgpIHRoZW4gdGhlIGNhbGxlciBoYXNcbiYjNDM7ICogZXhjbHVzaXZlIGFjY2VzcyB1bnRpbCBpdCBjb21wbGV0ZXMgdGhlIGxvb2t1cC5cbiYjNDM7ICogSWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBub3QgZF9pbl9sb29rdXAoKSB0aGVuIGEgbG9va3VwIGhhc1xuJiM0MzsgKiBhbHJlYWR5IGNvbXBsZXRlZC5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIEBuYW1lIG11c3QgYWxyZWFkeSBoYXZlIC1cdTAwM2VoYXNoIHNldCwgYXMgY2FuIGJlIGFjaGlldmVkXG4mIzQzOyAqIGJ5IGUuZy4gdHJ5X2xvb2t1cF9ub3Blcm0oKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogdGhlIGRlbnRyeSwgd2hldGhlciBmb3VuZCBvciBhbGxvY2F0ZWQsIG9yIGFuIGVycm9yICUtRU5PTUVNLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGRlbnRyeSAqZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4mIzQzO1x0XHRcdFx0Y29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19kX2FsbG9jX3BhcmFsbGVsKHBhcmVudCwgbmFtZSwgQUxMT0NfUEFSQV9XQUlUKTtcbiYjNDM7fVxuIEVYUE9SVF9TWU1CT0woZF9hbGxvY19wYXJhbGxlbCk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBkX2FsbG9jX3RyeWxvY2soKSAtIGZpbmQgb3IgYWxsb2NhdGUgYSBuZXcgZGVudHJ5XG4mIzQzOyAqIEBwYXJlbnQ6IGRlbnRyeSBvZiB0aGUgcGFyZW50XG4mIzQzOyAqIEBuYW1lOiAgIG5hbWUgb2YgdGhlIGRlbnRyeSB3aXRoaW4gdGhhdCBwYXJlbnQuXG4mIzQzOyAqXG4mIzQzOyAqIEEgbmV3IGRlbnRyeSBpcyBhbGxvY2F0ZWQgYW5kLCBwcm92aWRpbmcgaXQgaXMgdW5pcXVlLCBhZGRlZCB0byB0aGVcbiYjNDM7ICogcmVsZXZhbnQgaW5kZXguXG4mIzQzOyAqIElmIGFuIGV4aXN0aW5nIGRlbnRyeSBpcyBmb3VuZCB3aXRoIHRoZSBzYW1lIHBhcmVudC9uYW1lIHRoYXQgaXNcbiYjNDM7ICogbm90IGRfaW5fbG9va3VwKCkgdGhlbiB0aGF0IGlzIHJldHVybmVkIGluc3RlYWQuXG4mIzQzOyAqIElmIHRoZSBleGlzdGluZyBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSwgZF9hbGxvY190cnlsb2NrKClcbiYjNDM7ICogcmV0dXJucyB3aXRoIGVycm9yICUtRVdPVUxEQkxPQ0suXG4mIzQzOyAqIFRodXMgaWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBkX2luX2xvb2t1cCgpIHRoZW4gdGhlIGNhbGxlciBoYXNcbiYjNDM7ICogZXhjbHVzaXZlIGFjY2VzcyB1bnRpbCBpdCBjb21wbGV0ZXMgdGhlIGxvb2t1cC5cbiYjNDM7ICogSWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBub3QgZF9pbl9sb29rdXAoKSB0aGVuIGEgbG9va3VwIGhhc1xuJiM0MzsgKiBhbHJlYWR5IGNvbXBsZXRlZC5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIEBuYW1lIG5lZWQgbm90IGFscmVhZHkgaGF2ZSAtXHUwMDNlaGFzaCBzZXQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IHRoZSBkZW50cnksIHdoZXRoZXIgZm91bmQgb3IgYWxsb2NhdGVkLCBvciBhbiBlcnJvclxuJiM0MzsgKiAgICAlLUVOT01FTSwgJS1FV09VTERCTE9DSywgJS1FQUNDRVMgKGZvciBhIGJhZCBuYW1lKSBvclxuJiM0MzsgKiAgICBhbnl0aGluZyByZXR1cm5lZCBieSAtXHUwMDNlZF9oYXNoKCkuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3RyeWxvY2soc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IHFzdHIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpkZTtcbiYjNDM7XG4mIzQzO1x0ZGUgPSB0cnlfbG9va3VwX25vcGVybShuYW1lLCBwYXJlbnQpO1xuJiM0MztcdGlmICghZGUpXG4mIzQzO1x0XHRkZSA9IF9fZF9hbGxvY19wYXJhbGxlbChwYXJlbnQsIG5hbWUsIEFMTE9DX1BBUkFfRkFJTCk7XG4mIzQzO1x0cmV0dXJuIGRlO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woZF9hbGxvY190cnlsb2NrKTtcbiYjNDM7XG4gLypcbiAgKiBNb3ZlIGRlbnRyeSBmcm9tIGluLWxvb2t1cCBzdGF0ZSB0byBidXN5LW5lZ2F0aXZlIG9uZS5cbiAgKlxuQEAgLTI4OTQsNiAmIzQzOzMwMzQsNyBAQCBzdGF0aWMgdm9pZCBfX2RfbG9va3VwX3VuaGFzaChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRiID0gaW5fbG9va3VwX2hhc2goZGVudHJ5LVx1MDAzZWRfcGFyZW50LCBkZW50cnktXHUwMDNlZF9uYW1lLmhhc2gpO1xuIFx0aGxpc3RfYmxfbG9jayhiKTtcbiBcdGRlbnRyeS1cdTAwM2VkX2ZsYWdzIFx1MDAyNj0gfkRDQUNIRV9QQVJfTE9PS1VQO1xuJiM0MztcdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2ZGVudHJ5LVx1MDAzZWxvb2t1cF9tYXApO1xuIFx0X19obGlzdF9ibF9kZWwoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfaW5fbG9va3VwX2hhc2gpO1xuIFx0aGxpc3RfYmxfdW5sb2NrKGIpO1xuIFx0ZGVudHJ5LVx1MDAzZXdhaXRlcnMgPSBOVUxMO1xuQEAgLTI5MzEsMTUgJiM0MzszMDcyLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RfYWRkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdH1cbiBcdGlmICh1bmxpa2VseShvcHMpKVxuIFx0XHRkX3NldF9kX29wKGRlbnRyeSwgb3BzKTtcbi1cdGlmIChpbm9kZSkge1xuLVx0XHR1bnNpZ25lZCBhZGRfZmxhZ3MgPSBkX2ZsYWdzX2Zvcl9pbm9kZShpbm9kZSk7XG4tXHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2FsaWFzLCBcdTAwMjZpbm9kZS1cdTAwM2VpX2RlbnRyeSk7XG4tXHRcdHJhd193cml0ZV9zZXFjb3VudF9iZWdpbihcdTAwMjZkZW50cnktXHUwMDNlZF9zZXEpO1xuLVx0XHRfX2Rfc2V0X2lub2RlX2FuZF90eXBlKGRlbnRyeSwgaW5vZGUsIGFkZF9mbGFncyk7XG4tXHRcdHJhd193cml0ZV9zZXFjb3VudF9lbmQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfc2VxKTtcbi1cdFx0ZnNub3RpZnlfdXBkYXRlX2ZsYWdzKGRlbnRyeSk7XG4tXHR9XG4tXHRfX2RfcmVoYXNoKGRlbnRyeSk7XG4mIzQzO1x0aWYgKGlub2RlKVxuJiM0MztcdFx0X19kX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpO1xuJiM0MztcdGlmIChkX3VuaGFzaGVkKGRlbnRyeSkpXG4mIzQzO1x0XHRfX2RfcmVoYXNoKGRlbnRyeSk7XG4gXHRpZiAoZGlyKSB7XG4gXHRcdGVuZF9kaXJfYWRkKGRpciwgbik7XG4gXHRcdF9fZF93YWtlX2luX2xvb2t1cF93YWl0ZXJzKGRlbnRyeSk7XG5AQCAtMzI0MSw3ICYjNDM7MzM3Nyw3IEBAIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRpZiAoSVNfRVJSKGlub2RlKSlcbiBcdFx0cmV0dXJuIEVSUl9DQVNUKGlub2RlKTtcbiBcbi1cdEJVR19PTighZF91bmhhc2hlZChkZW50cnkpKTtcbiYjNDM7XHRCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSk7XG4gXG4gXHRpZiAoIWlub2RlKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0zMjk3LDYgJiM0MzszNDMzLDggQEAgc3RydWN0IGRlbnRyeSAqZF9zcGxpY2VfYWxpYXNfb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiAgKiBAaW5vZGU6ICB0aGUgaW5vZGUgd2hpY2ggbWF5IGhhdmUgYSBkaXNjb25uZWN0ZWQgZGVudHJ5XG4gICogQGRlbnRyeTogYSBuZWdhdGl2ZSBkZW50cnkgd2hpY2ggd2Ugd2FudCB0byBwb2ludCB0byB0aGUgaW5vZGUuXG4gICpcbiYjNDM7ICogQGRlbnRyeSBtdXN0IGJlIG5lZ2F0aXZlIGFuZCBtYXkgYmUgaW4tbG9va3VwIG9yIHVuaGFzaGVkIG9yIGhhc2hlZC5cbiYjNDM7ICpcbiAgKiBJZiBpbm9kZSBpcyBhIGRpcmVjdG9yeSBhbmQgaGFzIGFuIElTX1JPT1QgYWxpYXMsIHRoZW4gZF9tb3ZlIHRoYXQgaW5cbiAgKiBwbGFjZSBvZiB0aGUgZ2l2ZW4gZGVudHJ5IGFuZCByZXR1cm4gaXQsIGVsc2Ugc2ltcGx5IGRfYWRkIHRoZSBpbm9kZVxuICAqIHRvIHRoZSBkZW50cnkgYW5kIHJldHVybiBOVUxMLlxuQEAgLTMzMDQsMTYgJiM0MzszNDQyLDE0IEBAIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gICogSWYgYSBub24tSVNfUk9PVCBkaXJlY3RvcnkgaXMgZm91bmQsIHRoZSBmaWxlc3lzdGVtIGlzIGNvcnJ1cHQsIGFuZFxuICAqIHdlIHNob3VsZCBlcnJvciBvdXQ6IGRpcmVjdG9yaWVzIGNhbiYjMzk7dCBoYXZlIG11bHRpcGxlIGFsaWFzZXMuXG4gICpcbi0gKiBUaGlzIGlzIG5lZWRlZCBpbiB0aGUgbG9va3VwIHJvdXRpbmUgb2YgYW55IGZpbGVzeXN0ZW0gdGhhdCBpcyBleHBvcnRhYmxlXG4tICogKHZpYSBrbmZzZCkgc28gdGhhdCB3ZSBjYW4gYnVpbGQgZGNhY2hlIHBhdGhzIHRvIGRpcmVjdG9yaWVzIGVmZmVjdGl2ZWx5LlxuJiM0MzsgKiBUaGlzIHNob3VsZCBiZSB1c2VkIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIC1cdTAwM2Vsb29rdXAoKSBhbmQgdG9cbiYjNDM7ICogaW5zdGFudGlhdGUgdGhlIHJlc3VsdCBvZiAtXHUwMDNlbWtkaXIoKSwgaXMgb2Z0ZW4gdXNlZnVsIGZvclxuJiM0MzsgKiAtXHUwMDNlYXRvbWljX29wZW4sIGFuZCBtYXkgYmUgdXNlZCB0byBpbnN0YW50aWF0ZSBvdGhlciBvYmplY3RzLlxuICAqXG4gICogSWYgYSBkZW50cnkgd2FzIGZvdW5kIGFuZCBtb3ZlZCwgdGhlbiBpdCBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSBOVUxMXG4tICogaXMgcmV0dXJuZWQuICBUaGlzIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHJldHVybiB2YWx1ZSBvZiAtXHUwMDNlbG9va3VwLlxuJiM0MzsgKiBpcyByZXR1cm5lZC4gIFRoaXMgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIG9mIC1cdTAwM2Vsb29rdXAgYW5kXG4mIzQzOyAqIC1cdTAwM2Vta2Rpci5cbiAgKlxuLSAqIENsdXN0ZXIgZmlsZXN5c3RlbXMgbWF5IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGEgbmVnYXRpdmUsIGhhc2hlZCBkZW50cnkuXG4tICogSW4gdGhhdCBjYXNlLCB3ZSBrbm93IHRoYXQgdGhlIGlub2RlIHdpbGwgYmUgYSByZWd1bGFyIGZpbGUsIGFuZCBhbHNvIHRoaXNcbi0gKiB3aWxsIG9ubHkgb2NjdXIgZHVyaW5nIGF0b21pY19vcGVuLiBTbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgZGVudHJ5XG4tICogYmVpbmcgYWxyZWFkeSBoYXNoZWQgb25seSBpbiB0aGUgZmluYWwgY2FzZS5cbiAgKi9cbiBzdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4ge1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi5lOTc4YTc1ZWI4YTE0IDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmFtZWkuY1xuQEAgLTE5MzMsNyAmIzQzOzE5MzMsNyBAQCBzdGF0aWMgbm9pbmxpbmUgc3RydWN0IGRlbnRyeSAqbG9va3VwX3Nsb3coY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGlyLVx1MDAzZWRfaW5vZGU7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpyZXM7XG4gXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4tXHRyZXMgPSBfX2xvb2t1cF9zbG93KG5hbWUsIGRpciwgZmxhZ3MpO1xuJiM0MztcdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyB8IExPT0tVUF9TSEFSRUQpO1xuIFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XG4gXHRyZXR1cm4gcmVzO1xuIH1cbkBAIC0xOTQ3LDcgJiM0MzsxOTQ3LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9zbG93X2tpbGxhYmxlKGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFxuIFx0aWYgKGlub2RlX2xvY2tfc2hhcmVkX2tpbGxhYmxlKGlub2RlKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlRSKTtcbi1cdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyk7XG4mIzQzO1x0cmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzIHwgTE9PS1VQX1NIQVJFRCk7XG4gXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbiBcdHJldHVybiByZXM7XG4gfVxuQEAgLTI5NDYsOCAmIzQzOzI5NDYsOCBAQCBzdHJ1Y3QgZGVudHJ5ICpzdGFydF9kaXJvcChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBxc3RyICpuYW1lLFxuICAqIGVuZF9kaXJvcCAtIHNpZ25hbCBjb21wbGV0aW9uIG9mIGEgZGlyb3BcbiAgKiBAZGU6IHRoZSBkZW50cnkgd2hpY2ggd2FzIHJldHVybmVkIGJ5IHN0YXJ0X2Rpcm9wIG9yIHNpbWlsYXIuXG4gICpcbi0gKiBJZiB0aGUgZGUgaXMgYW4gZXJyb3IsIG5vdGhpbmcgaGFwcGVucy4gT3RoZXJ3aXNlIGFueSBsb2NrIHRha2VuIHRvXG4tICogcHJvdGVjdCB0aGUgZGVudHJ5IGlzIGRyb3BwZWQgYW5kIHRoZSBkZW50cnkgaXRzZWxmIGlzIHJlbGVhc2UgKGRwdXQoKSkuXG4mIzQzOyAqIElmIHRoZSBAZGUgaXMgYW4gZXJyb3IsIG5vdGhpbmcgaGFwcGVucy4gT3RoZXJ3aXNlIGFueSBsb2NrIHRha2VuIHRvXG4mIzQzOyAqIHByb3RlY3QgdGhlIGRlbnRyeSBpcyBkcm9wcGVkIGFuZCB0aGUgZGVudHJ5IGl0c2VsZiBpcyByZWxlYXNlZCAoZHB1dCgpKS5cbiAgKi9cbiB2b2lkIGVuZF9kaXJvcChzdHJ1Y3QgZGVudHJ5ICpkZSlcbiB7XG5AQCAtMzIxMCw3ICYjNDM7MzIxMCw3IEBAIEVYUE9SVF9TWU1CT0wobG9va3VwX29uZSk7XG4gLyoqXG4gICogbG9va3VwX29uZV91bmxvY2tlZCAtIGxvb2t1cCBzaW5nbGUgcGF0aG5hbWUgY29tcG9uZW50XG4gICogQGlkbWFwOlx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBsb29rdXAgaXMgcGVyZm9ybWVkIGZyb21cbi0gKiBAbmFtZTpcdHFzdHIgb2xkaW5nIHBhdGhuYW1lIGNvbXBvbmVudCB0byBsb29rdXBcbiYjNDM7ICogQG5hbWU6XHRxc3RyIGhvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cFxuICAqIEBiYXNlOlx0YmFzZSBkaXJlY3RvcnkgdG8gbG9va3VwIGZyb21cbiAgKlxuICAqIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGluLWtlcm5lbCBmaWxlc3lzdGVtIGNsaWVudHMgc3VjaCBhcyBmaWxlIHNlcnZlcnMuXG5AQCAtMzI0Myw3ICYjNDM7MzI0Myw3IEBAIEVYUE9SVF9TWU1CT0wobG9va3VwX29uZV91bmxvY2tlZCk7XG4gLyoqXG4gICogbG9va3VwX29uZV9wb3NpdGl2ZV9raWxsYWJsZSAtIGxvb2t1cCBzaW5nbGUgcGF0aG5hbWUgY29tcG9uZW50XG4gICogQGlkbWFwOlx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBsb29rdXAgaXMgcGVyZm9ybWVkIGZyb21cbi0gKiBAbmFtZTpcdHFzdHIgb2xkaW5nIHBhdGhuYW1lIGNvbXBvbmVudCB0byBsb29rdXBcbiYjNDM7ICogQG5hbWU6XHRxc3RyIGhvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cFxuICAqIEBiYXNlOlx0YmFzZSBkaXJlY3RvcnkgdG8gbG9va3VwIGZyb21cbiAgKlxuICAqIFRoaXMgaGVscGVyIHdpbGwgeWllbGQgRVJSX1BUUigtRU5PRU5UKSBvbiBuZWdhdGl2ZXMuIFRoZSBoZWxwZXIgcmV0dXJuc1xuQEAgLTMyNTksNyAmIzQzOzMyNTksNyBAQCBFWFBPUlRfU1lNQk9MKGxvb2t1cF9vbmVfdW5sb2NrZWQpO1xuICAqIHRoZSBpX3J3c2VtIGl0c2VsZiBpZiBuZWNlc3NhcnkuICBJZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIG9yXG4gICogZGVsaXZlcmVkLCBpdCB3aWxsIHJldHVybiAlLUVJTlRSIGlmIHRoZSBsb2NrIGlzIG5lZWRlZC5cbiAgKlxuLSAqIFJldHVybnM6IEEgZGVudHJ5LCBwb3NzaWJseSBuZWdhdGl2ZSwgb3JcbiYjNDM7ICogUmV0dXJuczogQSBwb3NpdGl2ZSBkZW50cnksIG9yXG4gICpcdCAgIC0gc2FtZSBlcnJvcnMgYXMgbG9va3VwX29uZV91bmxvY2tlZCgpIG9yXG4gICpcdCAgIC0gRVJSX1BUUigtRUlOVFIpIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuXG4gICovXG5AQCAtMzM4MSw3ICYjNDM7MzM4MSw3IEBAIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9ub3Blcm1fcG9zaXRpdmVfdW5sb2NrZWQoc3RydWN0IHFzdHIgKm5hbWUsXG4gRVhQT1JUX1NZTUJPTChsb29rdXBfbm9wZXJtX3Bvc2l0aXZlX3VubG9ja2VkKTtcbiBcbiAvKipcbi0gKiBzdGFydF9jcmVhdGluZyAtIHByZXBhcmUgdG8gY3JlYXRlIGEgZ2l2ZW4gbmFtZSB3aXRoIHBlcm1pc3Npb24gY2hlY2tpbmdcbiYjNDM7ICogc3RhcnRfY3JlYXRpbmcgLSBwcmVwYXJlIHRvIGFjY2VzcyBvciBjcmVhdGUgYSBnaXZlbiBuYW1lIHdpdGggcGVybWlzc2lvbiBjaGVja2luZ1xuICAqIEBpZG1hcDogIGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBwcmVwYXJlIHRvIGNyZWF0ZSB0aGUgbmFtZVxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWRcbkBAIC0zNDEzLDggJiM0MzszNDEzLDggQEAgRVhQT1JUX1NZTUJPTChzdGFydF9jcmVhdGluZyk7XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIGZpbmQgdGhlIG5hbWVcbiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSByZW1vdmVkXG4gICpcbi0gKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGluIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xuLSAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LiAgUGVybWlzc2lvbiBjaGVja2luZyAoTUFZX0VYRUMpIGlzIHBlcmZvcm1lZFxuJiM0MzsgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZyBhbiBvYmplY3RcbiYjNDM7ICogZnJvbSBhIGRpcmVjdG9yeS4gIFBlcm1pc3Npb24gY2hlY2tpbmcgKE1BWV9FWEVDKSBpcyBwZXJmb3JtZWRcbiAgKiBhZ2FpbnN0IEBpZG1hcC5cbiAgKlxuICAqIElmIHRoZSBuYW1lIGRvZXNuJiMzOTt0IGV4aXN0LCBhbiBlcnJvciBpcyByZXR1cm5lZC5cbkBAIC0zNDQwLDcgJiM0MzszNDQwLDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZyk7XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIHByZXBhcmUgdG8gY3JlYXRlIHRoZSBuYW1lXG4gICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgY3JlYXRlZFxuICAqXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcbiYjNDM7ICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcbiAgKiBhbiBvYmplY3QgaW4gYSBkaXJlY3RvcnkuICBQZXJtaXNzaW9uIGNoZWNraW5nIChNQVlfRVhFQykgaXMgcGVyZm9ybWVkXG4gICogYWdhaW5zdCBAaWRtYXAuXG4gICpcbkBAIC0zNDY5LDcgJiM0MzszNDY5LDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9jcmVhdGluZ19raWxsYWJsZSk7XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIGZpbmQgdGhlIG5hbWVcbiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSByZW1vdmVkXG4gICpcbi0gKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGluIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xuJiM0MzsgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xuICAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LiAgUGVybWlzc2lvbiBjaGVja2luZyAoTUFZX0VYRUMpIGlzIHBlcmZvcm1lZFxuICAqIGFnYWluc3QgQGlkbWFwLlxuICAqXG5AQCAtMzQ5OSw3ICYjNDM7MzQ5OSw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfcmVtb3Zpbmdfa2lsbGFibGUpO1xuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBwcmVwYXJlIHRvIGNyZWF0ZSB0aGUgbmFtZVxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWRcbiAgKlxuLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIGNyZWF0aW5nXG4mIzQzOyAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaXMgcGVyZm9ybWVkIHByaW9yIHRvIGNyZWF0aW5nXG4gICogYW4gb2JqZWN0IGluIGEgZGlyZWN0b3J5LlxuICAqXG4gICogSWYgdGhlIG5hbWUgYWxyZWFkeSBleGlzdHMsIGEgcG9zaXRpdmUgZGVudHJ5IGlzIHJldHVybmVkLlxuQEAgLTM1MjIsNyAmIzQzOzM1MjIsNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX25vcGVybSk7XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIGZpbmQgdGhlIG5hbWVcbiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSByZW1vdmVkXG4gICpcbi0gKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGluIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xuJiM0MzsgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xuICAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LlxuICAqXG4gICogSWYgdGhlIG5hbWUgZG9lc24mIzM5O3QgZXhpc3QsIGFuIGVycm9yIGlzIHJldHVybmVkLlxuQEAgLTM1NDMsMTEgJiM0MzszNTQzLDExIEBAIHN0cnVjdCBkZW50cnkgKnN0YXJ0X3JlbW92aW5nX25vcGVybShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4gRVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZ19ub3Blcm0pO1xuIFxuIC8qKlxuLSAqIHN0YXJ0X2NyZWF0aW5nX2RlbnRyeSAtIHByZXBhcmUgdG8gY3JlYXRlIGEgZ2l2ZW4gZGVudHJ5XG4tICogQHBhcmVudDogZGlyZWN0b3J5IGZyb20gd2hpY2ggZGVudHJ5IHNob3VsZCBiZSByZW1vdmVkXG4tICogQGNoaWxkOiAgdGhlIGRlbnRyeSB0byBiZSByZW1vdmVkXG4mIzQzOyAqIHN0YXJ0X2NyZWF0aW5nX2RlbnRyeSAtIHByZXBhcmUgdG8gYWNjZXNzIG9yIGNyZWF0ZSBhIGdpdmVuIGRlbnRyeVxuJiM0MzsgKiBAcGFyZW50OiBkaXJlY3Rvcnkgb2YgZGVudHJ5XG4mIzQzOyAqIEBjaGlsZDogIHRoZSBkZW50cnkgdG8gYmUgcHJlcGFyZWRcbiAgKlxuLSAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW4gb3RoZXIgZGlyb3BzIGFuZFxuJiM0MzsgKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluc3Qgb3RoZXIgZGlyb3BzIGFuZFxuICAqIHRoZSB2YWxpZGl0eSBvZiB0aGUgZGVudHJ5IGlzIGNoZWNrZWQ6IGNvcnJlY3QgcGFyZW50IGFuZCBzdGlsbCBoYXNoZWQuXG4gICpcbiAgKiBJZiB0aGUgZGVudHJ5IGlzIHZhbGlkIGFuZCBuZWdhdGl2ZSBhIHJlZmVyZW5jZSBpcyB0YWtlbiBhbmRcbkBAIC0zNTgwLDcgJiM0MzszNTgwLDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9jcmVhdGluZ19kZW50cnkpO1xuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRlbnRyeSBzaG91bGQgYmUgcmVtb3ZlZFxuICAqIEBjaGlsZDogIHRoZSBkZW50cnkgdG8gYmUgcmVtb3ZlZFxuICAqXG4tICogQSBsb2NrIGlzIHRha2VuIHRvIHByb3RlY3QgdGhlIGRlbnRyeSBhZ2FpbiBvdGhlciBkaXJvcHMgYW5kXG4mIzQzOyAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW5zdCBvdGhlciBkaXJvcHMgYW5kXG4gICogdGhlIHZhbGlkaXR5IG9mIHRoZSBkZW50cnkgaXMgY2hlY2tlZDogY29ycmVjdCBwYXJlbnQgYW5kIHN0aWxsIGhhc2hlZC5cbiAgKlxuICAqIElmIHRoZSBkZW50cnkgaXMgdmFsaWQgYW5kIHBvc2l0aXZlLCBhIHJlZmVyZW5jZSBpcyB0YWtlbiBhbmRcbkBAIC00NDQwLDEyICYjNDM7NDQ0MCwxNCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0aW50IGVycm9yLCBjcmVhdGVfZXJyb3I7XG4gXHR1bW9kZV90IG1vZGU7XG4gXHRib29sIGdvdF93cml0ZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc2hhcmVkX2ZsYWc7XG4gXG4gcmV0cnk6XG4gXHRvcGVuX2ZsYWcgPSBvcC1cdTAwM2VvcGVuX2ZsYWc7XG4gXHRnb3Rfd3JpdGUgPSBmYWxzZTtcbiBcdG1vZGUgPSBvcC1cdTAwM2Vtb2RlO1xuIFx0Y3JlYXRlX2Vycm9yID0gMDtcbiYjNDM7XHRzaGFyZWRfZmxhZyA9IChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpID8gMCA6IExPT0tVUF9TSEFSRUQ7XG4gXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiAoT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSB8IE9fUkRXUikpIHtcbiBcdFx0Z290X3dyaXRlID0gIW1udF93YW50X3dyaXRlKG5kLVx1MDAzZXBhdGgubW50KTtcbkBAIC00NDU0LDEwICYjNDM7NDQ1NiwxMCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHQgKiBhIGRpZmZlcmVudCBlcnJvcjsgd2UmIzM5O2xsIGJlIGRyb3BwaW5nIHRoaXMgb25lIGFueXdheS5cbiBcdFx0ICovXG4gXHR9XG4tXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKVxuLVx0XHRpbm9kZV9sb2NrKGRpcl9pbm9kZSk7XG4tXHRlbHNlXG4mIzQzO1x0aWYgKHNoYXJlZF9mbGFnKVxuIFx0XHRpbm9kZV9sb2NrX3NoYXJlZChkaXJfaW5vZGUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGlub2RlX2xvY2soZGlyX2lub2RlKTtcbiBcbiBcdGlmICh1bmxpa2VseShJU19ERUFERElSKGRpcl9pbm9kZSkpKSB7XG4gXHRcdGRlbnRyeSA9IEVSUl9QVFIoLUVOT0VOVCk7XG5AQCAtNDUyNiw3ICYjNDM7NDUyOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSBkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2Vsb29rdXAoZGlyX2lub2RlLCBkZW50cnksXG4tXHRcdFx0XHRcdFx0XHQgICAgIG5kLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgIG5kLVx1MDAzZWZsYWdzIHwgc2hhcmVkX2ZsYWcpO1xuIFx0XHRkX2xvb2t1cF9kb25lKGRlbnRyeSk7XG4gXHRcdGlmICh1bmxpa2VseShyZXMpKSB7XG4gXHRcdFx0aWYgKElTX0VSUihyZXMpKSB7XG5AQCAtNDU3NCwxMCAmIzQzOzQ1NzYsMTAgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpXG4gXHRcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbiBcdH1cbi1cdGlmICgob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB8fCBjcmVhdGVfZXJyb3IpXG4tXHRcdGlub2RlX3VubG9jayhkaXJfaW5vZGUpO1xuLVx0ZWxzZVxuJiM0MztcdGlmIChzaGFyZWRfZmxhZylcbiBcdFx0aW5vZGVfdW5sb2NrX3NoYXJlZChkaXJfaW5vZGUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGlub2RlX3VubG9jayhkaXJfaW5vZGUpO1xuIFxuIFx0aWYgKGdvdF93cml0ZSlcbiBcdFx0bW50X2Ryb3Bfd3JpdGUobmQtXHUwMDNlcGF0aC5tbnQpO1xuZGlmZiAtLWdpdCBhL2ZzL25mcy91bmxpbmsuYyBiL2ZzL25mcy91bmxpbmsuY1xuaW5kZXggYjU3Y2ZhYTRkNTE2Zi4uYzhkNzEyMjA0ZTY0OSAxMDA2NDRcbi0tLSBhL2ZzL25mcy91bmxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmZzL3VubGluay5jXG5AQCAtNjcsNiAmIzQzOzY3LDcgQEAgc3RhdGljIHZvaWQgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlKHZvaWQgKmNhbGxkYXRhKVxuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS1cdTAwM2VkX3NiO1xuIFxuIFx0dXBfcmVhZF9ub25fb3duZXIoXHUwMDI2TkZTX0koZF9pbm9kZShkZW50cnktXHUwMDNlZF9wYXJlbnQpKS1cdTAwM2VybWRpcl9zZW0pO1xuJiM0MztcdGRfbG9va3VwX2FjcXVpcmUoZGVudHJ5KTtcbiBcdGRfbG9va3VwX2RvbmUoZGVudHJ5KTtcbiBcdG5mc19mcmVlX3VubGlua2RhdGEoZGF0YSk7XG4gXHRkcHV0KGRlbnRyeSk7XG5AQCAtMTU5LDYgJiM0MzsxNjAsOCBAQCBzdGF0aWMgaW50IG5mc19jYWxsX3VubGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZlxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFx0ZGF0YS1cdTAwM2VkZW50cnkgPSBhbGlhcztcbiYjNDM7XHRkX2xvb2t1cF9yZWxlYXNlKGFsaWFzKTtcbiYjNDM7XG4gXHRuZnNfZG9fY2FsbF91bmxpbmsoaW5vZGUsIGRhdGEpO1xuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oXG5pbmRleCA0YjFmZjk5NjA4ZTAxLi5lN2UzZWYwNTMxM2I4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaFxuQEAgLTExNiw2ICYjNDM7MTE2LDggQEAgc3RydWN0IGRlbnRyeSB7XG4gXHRcdFx0XHRcdCAqIHBvc3NpYmxlIVxuIFx0XHRcdFx0XHQgKi9cbiBcbiYjNDM7XHQvKiBsb2NrZGVwIHRyYWNraW5nIG9mIERDQUNIRV9QQVJfTE9PS1VQIGxvY2tzICovXG4mIzQzO1x0c3RydWN0IGxvY2tkZXBfbWFwXHRcdGxvb2t1cF9tYXA7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGRfbHJ1O1x0XHQvKiBMUlUgbGlzdCAqL1xuIFx0c3RydWN0IGhsaXN0X25vZGUgZF9zaWI7XHQvKiBjaGlsZCBvZiBwYXJlbnQgbGlzdCAqL1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgZF9jaGlsZHJlbjtcdC8qIG91ciBjaGlsZHJlbiAqL1xuQEAgLTI1Nyw3ICYjNDM7MjU5LDkgQEAgZXh0ZXJuIHZvaWQgZF9kZWxldGUoc3RydWN0IGRlbnRyeSAqKTtcbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2Moc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTtcbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfYW5vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG4gZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY190cnlsb2NrKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7XG4gZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX3NwbGljZV9hbGlhcyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTtcbiYjNDM7c3RydWN0IGRlbnRyeSAqZF9kdXBsaWNhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiAvKiB3ZWlyZCBwcm9jZnMgbWVzczsgKk5PVCogZXhwb3J0ZWQgKi9cbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqKTtcbkBAIC01NTIsNiAmIzQzOzU1NiwzNiBAQCBzdGF0aWMgaW5saW5lIGludCBzaW1wbGVfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIHVuc2lnbmVkIGxvbmcgdmZzX3ByZXNzdXJlX3JhdGlvKHVuc2lnbmVkIGxvbmcgdmFsKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGRfbG9va3VwX3JlbGVhc2UgLSByZWxlYXNlIG93bmVyc2hpcCBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrXG4mIzQzOyAqIEBkZW50cnk6IGRlbnRyeSB0aGF0IGlzIGxvY2tlZFxuJiM0MzsgKlxuJiM0MzsgKiBJZiBhbiBpbi1sb29rdXAgZGVudHJ5IGlzIHRvIGJlIHBhc3NlZCB0byBhbm90aGVyIHRocmVhZCB3aGljaFxuJiM0MzsgKiB3aWxsIGRyb3AgdGhlIGluLWxvb2t1cCBsb2NrLCB0aGVuIGRfbG9va3VwX3JlbGVhc2UoKSBtdXN0IGJlIGNhbGxlZFxuJiM0MzsgKiB0byB0ZWxsIGxvY2tkZXAgdGhhdCB0aGlzIHRocmVhZCBubyBsb2NrIGhvbGRzIHRoZSBsb2NrLiAgVGhlXG4mIzQzOyAqIHRocmVhZCB0aGF0IHJlY2VpdmVzIHRoZSBsb2NrIG11c3QgY2FsbCBkX2xvb2t1cF9hY3F1aXJlKCkgdG9cbiYjNDM7ICogYWNxdWlyZSB0aGUgbG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkX2xvb2t1cF9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiYjNDM7e1xuJiM0MztcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKVxuJiM0MztcdFx0bG9ja19tYXBfcmVsZWFzZShcdTAwMjZkZW50cnktXHUwMDNlbG9va3VwX21hcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBkX2xvb2t1cF9hY3F1aXJlIC0gYWNxdWlyZSBvd25lcnNoaXAgb2YgRENBQ0hFX1BBUl9MT09LVVAgbG9ja1xuJiM0MzsgKiBAZGVudHJ5OiBkZW50cnkgdGhhdCBpcyBsb2NrZWRcbiYjNDM7ICpcbiYjNDM7ICogSWYgYW4gaW4tbG9va3VwIGRlbnRyeSB3YXMgcGFzc2VkIHRvIHRoaXMgdGhyZWFkLCB0aGVcbiYjNDM7ICogZF9sb29rdXBfYWNxdWlyZSgpIG11c3QgYmUgY2FsbGVkIHRvIHRlbGwgbG9ja2RlcCB0aGF0IHRoaXNcbiYjNDM7ICogdGhyZWFkIG5vdyBvd25zIHRoZSBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGRfbG9va3VwX2FjcXVpcmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpXG4mIzQzO1x0XHRsb2NrX21hcF9hY3F1aXJlX3RyeShcdTAwMjZkZW50cnktXHUwMDNlbG9va3VwX21hcCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZF9pbm9kZSAtIEdldCB0aGUgYWN0dWFsIGlub2RlIG9mIHRoaXMgZGVudHJ5XG4gICogQGRlbnRyeTogVGhlIGRlbnRyeSB0byBxdWVyeVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmFtZWkuaCBiL2luY2x1ZGUvbGludXgvbmFtZWkuaFxuaW5kZXggODZkNjU3YjI0ZmM2YS4uNjVmMGY1NzEyODg1YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmFtZWkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uYW1laS5oXG5AQCAtMzIsOCAmIzQzOzMyLDkgQEAgZW51bSB7IE1BWF9ORVNURURfTElOS1MgPSA4IH07XG4gI2RlZmluZSBMT09LVVBfQ1JFQVRFXHRcdEJJVCgxNylcdC8qIC4uLiBpbiBvYmplY3QgY3JlYXRpb24gKi9cbiAjZGVmaW5lIExPT0tVUF9FWENMXHRcdEJJVCgxOClcdC8qIC4uLiBpbiB0YXJnZXQgbXVzdCBub3QgZXhpc3QgKi9cbiAjZGVmaW5lIExPT0tVUF9SRU5BTUVfVEFSR0VUXHRCSVQoMTkpXHQvKiAuLi4gaW4gZGVzdGluYXRpb24gb2YgcmVuYW1lKCkgKi9cbiYjNDM7I2RlZmluZSBMT09LVVBfU0hBUkVEXHRcdEJJVCgyMCkgLyogUGFyZW50IGxvY2sgaXMgaGVsZCBzaGFyZWQgKi9cbiBcbi0vKiA0IHNwYXJlIGJpdHMgZm9yIGludGVudCAqL1xuJiM0MzsvKiAzIHNwYXJlIGJpdHMgZm9yIGludGVudCAqL1xuIFxuIC8qIFNjb3BpbmcgZmxhZ3MgZm9yIGxvb2t1cC4gKi9cbiAjZGVmaW5lIExPT0tVUF9OT19TWU1MSU5LU1x0QklUKDI0KSAvKiBObyBzeW1saW5rIGNyb3NzaW5nLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST1ZFX0xPQ0tJTkcmIzM0OywKICAgICYjMzQ7TkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZF9kdXBsaWNhdGUmIzM0OywKICAgICYjMzQ7ZF9hbGxvY19wYXJhbGxlbCYjMzQ7LAogICAgJiMzNDtkX2FsbG9jX3RyeWxvY2smIzM0OywKICAgICYjMzQ7ZF9zcGxpY2VfYWxpYXMmIzM0OywKICAgICYjMzQ7ZF9zcGxpY2VfYWxpYXNfb3BzJiMzNDssCiAgICAmIzM0O2Rfd2FpdF9sb29rdXAmIzM0OywKICAgICYjMzQ7bG9va3VwX3Nsb3cmIzM0OywKICAgICYjMzQ7bG9va3VwX3Nsb3dfa2lsbGFibGUmIzM0OywKICAgICYjMzQ7bG9va3VwX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2FzeW5jX3VubGlua19yZWxlYXNlJiMzNDssCiAgICAmIzM0O25mc19jYWxsX3VubGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgY29yZSBWRlMgZGNhY2hlIGFuZCBuYW1laSBsb2dpYywgaW5jbHVkaW5nIHBhcmFsbGVsIGxvb2t1cCBsb2NraW5nLCBzaGFyZWQgZGlyZWN0b3J5IGxvY2tpbmcgZmxhZ3MgKExPT0tVUF9TSEFSRUQpIGluIGxvb2t1cF9zbG93IGFuZCBsb29rdXBfb3BlbiwgbG9ja2RlcCBtYXAgdHJhY2tpbmcgZm9yIGluLWxvb2t1cCBkZW50cmllcywgdXBkYXRlZCBhc3NlcnRpb25zIGluIGRfc3BsaWNlX2FsaWFzX29wcywgbmV3IGRjYWNoZSBoZWxwZXJzIChkX2R1cGxpY2F0ZSwgZF9hbGxvY190cnlsb2NrKSwgYW5kIE5GUyBhc3luY2hyb25vdXMgdW5saW5rIGxvY2sgdHJhY2tpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGNvcmUgcmVhY2hhYmxlIGtlcm5lbCBzdWJzeXN0ZW1zIGFuZCBkaXJlY3RseSBhZmZlY3QgY29uY3VycmVuY3kgYW5kIGludmFyaWFudCBlbmZvcmNlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ5YTEyZWMxZTVmZTNmM2U1NzdkM2I2MTgzNmQ4NmU2Njk5NDMwZWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDA0OjE1OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QKaW5kZXggNjA4ODBlYjBjNDlkMS4uNGUwMTVmMWJmMWY4NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0CkBAIC0xMjAzLDE2ICYjNDM7MTIwMywxNiBAQCB3aWxsIGZhaWwtc2FmZS4KIAogLS0tCiAKLSoqIG1hbmRhdG9yeSoqCiYjNDM7KiptYW5kYXRvcnkqKgogCiBsb29rdXBfb25lKCksIGxvb2t1cF9vbmVfdW5sb2NrZWQoKSwgbG9va3VwX29uZV9wb3NpdGl2ZV91bmxvY2tlZCgpIG5vdwogdGFrZSBhIHFzdHIgaW5zdGVhZCBvZiBhIG5hbWUgYW5kIGxlbi4gIFRoZXNlLCBub3QgdGhlICYjMzQ7b25lX2xlbiYjMzQ7CiB2ZXJzaW9ucywgc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgYWNjZXNzaW5nIGEgZmlsZXN5c3RlbSBmcm9tIG91dHNpZGUKLXRoYXQgZmlsZXN5c210ZW0sIHRocm91Z2ggYSBtb3VudCBwb2ludCAtIHdoaWNoIHdpbGwgaGF2ZSBhIG1udF9pZG1hcC4KJiM0Mzt0aGF0IGZpbGVzeXN0ZW0sIHRocm91Z2ggYSBtb3VudCBwb2ludCAtIHdoaWNoIHdpbGwgaGF2ZSBhIG1udF9pZG1hcC4KIAogLS0tCiAKLSoqIG1hbmRhdG9yeSoqCiYjNDM7KiptYW5kYXRvcnkqKgogCiBGdW5jdGlvbnMgdHJ5X2xvb2t1cF9vbmVfbGVuKCksIGxvb2t1cF9vbmVfbGVuKCksCiBsb29rdXBfb25lX2xlbl91bmxvY2tlZCgpIGFuZCBsb29rdXBfcG9zaXRpdmVfdW5sb2NrZWQoKSBoYXZlIGJlZW4KQEAgLTEyMjksNyAmIzQzOzEyMjksNyBAQCBhbHJlYWR5IGJlZW4gcGVyZm9ybWVkIHN1Y2ggYXMgYWZ0ZXIgdmZzX3BhdGhfcGFyZW50X2xvb2t1cCgpCiAKIC0tLQogCi0qKiBtYW5kYXRvcnkqKgomIzQzOyoqbWFuZGF0b3J5KioKIAogZF9oYXNoX2FuZF9sb29rdXAoKSBpcyBubyBsb25nZXIgZXhwb3J0ZWQgb3IgYXZhaWxhYmxlIG91dHNpZGUgdGhlIFZGUy4KIFVzZSB0cnlfbG9va3VwX25vcGVybSgpIGluc3RlYWQuICBUaGlzIGFkZHMgbmFtZSB2YWxpZGF0aW9uIGFuZCB0YWtlcwpAQCAtMTM3MCw3ICYjNDM7MTM3MCw3IEBAIHNpbWlsYXIuCiAKIC0tLQogCi0qKiBtYW5kYXRvcnkqKgomIzQzOyoqbWFuZGF0b3J5KioKIAogbG9ja19yZW5hbWUoKSwgbG9ja19yZW5hbWVfY2hpbGQoKSwgdW5sb2NrX3JlbmFtZSgpIGFyZSBubwogbG9uZ2VyIGF2YWlsYWJsZS4gIFVzZSBzdGFydF9yZW5hbWluZygpIG9yIHNpbWlsYXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QKaW5kZXggZDNhOTNlZWMzOTQ1Zi4uZGU4Zjg1MDIwNTZlOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdApAQCAtNTA3LDggJiM0Mzs1MDcsOCBAQCBvdGhlcndpc2Ugbm90ZWQuCiAJZGVudHJ5IGJlZm9yZSB0aGUgZmlyc3QgbWtkaXIgcmV0dXJucy4KIAogCUlmIHRoZXJlIGlzIGFueSBjaGFuY2UgdGhpcyBjb3VsZCBoYXBwZW4sIHRoZW4gdGhlIG5ldyBpbm9kZQotCXNob3VsZCBiZSBkX2Ryb3AoKWVkIGFuZCBhdHRhY2hlZCB3aXRoIGRfc3BsaWNlX2FsaWFzKCkuICBUaGUKLQlyZXR1cm5lZCBkZW50cnkgKGlmIGFueSkgc2hvdWxkIGJlIHJldHVybmVkIGJ5IC0mZ3Q7bWtkaXIoKS4KJiM0MzsJc2hvdWxkIGJlIGF0dGFjaGVkIHdpdGggZF9zcGxpY2VfYWxpYXMoKS4gIFRoZSByZXR1cm5lZAomIzQzOwlkZW50cnkgKGlmIGFueSkgc2hvdWxkIGJlIHJldHVybmVkIGJ5IC0mZ3Q7bWtkaXIoKS4KIAogYGBybWRpcmBgCiAJY2FsbGVkIGJ5IHRoZSBybWRpcigyKSBzeXN0ZW0gY2FsbC4gIE9ubHkgcmVxdWlyZWQgaWYgeW91IHdhbnQKZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggMWIxYTgxZjEwZGE2Ny4uM2FmOGIyYWM2OTlmOSAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZGNhY2hlLmMKQEAgLTMyLDYgJiM0MzszMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYml0X3NwaW5sb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1bGlzdF9ibC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3RfbHJ1LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25hbWVpLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDttb3VudC5oJiMzNDsKIApAQCAtMTkwMCw2ICYjNDM7MTkwMSw3IEBAIEVYUE9SVF9TWU1CT0woZF9pbnZhbGlkYXRlKTsKICAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCiB7CiYjNDM7CXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19sb29rdXBfa2V5OwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAljaGFyICpkbmFtZTsKIAlpbnQgZXJyOwpAQCAtMTk1Nyw2ICYjNDM7MTk1OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCiAJZGVudHJ5LSZndDt3YWl0ZXJzID0gTlVMTDsKIAlJTklUX0hMSVNUX05PREUoJmFtcDtkZW50cnktJmd0O2Rfc2liKTsKIAomIzQzOwlsb2NrZGVwX2luaXRfbWFwKCZhbXA7ZGVudHJ5LSZndDtsb29rdXBfbWFwLCAmIzM0O0RDQUNIRV9QQVJfTE9PS1VQJiMzNDssICZhbXA7X19sb29rdXBfa2V5LCAwKTsKJiM0MzsKIAlpZiAoZGVudHJ5LSZndDtkX29wICZhbXA7JmFtcDsgZGVudHJ5LSZndDtkX29wLSZndDtkX2luaXQpIHsKIAkJZXJyID0gZGVudHJ5LSZndDtkX29wLSZndDtkX2luaXQoZGVudHJ5KTsKIAkJaWYgKGVycikgewpAQCAtMTk5OSw2ICYjNDM7MjAwMyw1OCBAQCBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiBwYXJlbnQsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogfQogRVhQT1JUX1NZTUJPTChkX2FsbG9jKTsKIAomIzQzOy8qKgomIzQzOyAqIGRfZHVwbGljYXRlIC0gZHVwbGljYXRlIGEgZGVudHJ5IGZvciBjb21iaW5lZCBhdG9taWMgb3BlcmF0aW9uCiYjNDM7ICogQGRlbnRyeTogdGhlIGRlbnRyeSB0byBkdXBsaWNhdGUKJiM0MzsgKgomIzQzOyAqIFNvbWUgcmVuYW1lIG9wZXJhdGlvbnMgbmVlZCB0byBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgb3BlcmF0aW9uCiYjNDM7ICogaW5zaWRlIHRoZSBmaWxlc3lzdGVtLgomIzQzOyAqIDEvIEEgY2x1c3RlciBmaWxlc3lzdGVtIHdoZW4gcmVuYW1pbmcgdG8gYW4gaW4tdXNlIGZpbGUgbWlnaHQgbmVlZCB0bwomIzQzOyAqICAgZmlyc3QgJiMzNDtzaWxseS1yZW5hbWUmIzM0OyB0aGF0IHRhcmdldCBvdXQgb2YgdGhlIHdheSBiZWZvcmUgdGhlIG1haW4gcmVuYW1lCiYjNDM7ICogMi8gQSBmaWxlc3lzdGVtIHRoYXQgc3VwcG9ydHMgd2hpdGUtb3V0IG1pZ2h0IHdhbnQgdG8gY3JlYXRlIGEgd2hpdGVvdXQKJiM0MzsgKiAgIGluIHBsYWNlIG9mIHRoZSBmaWxlIGJlaW5nIG1vdmVkLgomIzQzOyAqCiYjNDM7ICogRm9yIHRoaXMgdGhleSBuZWVkIHR3byBkZW50cmllcyB3aGljaCB0ZW1wb3JhcmlseSBoYXZlIHRoZSBzYW1lIG5hbWUsCiYjNDM7ICogYmVmb3JlIG9uZSBpcyByZW5hbWVkLiAgZF9kdXBsaWNhdGUoKSBwcm92aWRlcyBmb3IgdGhpcy4gIEdpdmVuIGEKJiM0MzsgKiBwb3NpdGl2ZSBoYXNoZWQgZGVudHJ5LCBpdCBjcmVhdGVzIGEgc2Vjb25kIGluLWxvb2t1cCBkZW50cnkuCiYjNDM7ICogQmVjYXVzZSB0aGUgb3JpZ2luYWwgZGVudHJ5IGV4aXN0cywgbm8gb3RoZXIgdGhyZWFkIHdpbGwgdHJ5IHRvCiYjNDM7ICogY3JlYXRlIGFuIGluLWxvb2t1cCBkZW50cnksIHNvIHRoZXJlIGNhbiBiZSBubyByYWNlIGluIHRoaXMgY3JlYXRlLgomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBzaG91bGQgZF9tb3ZlKCkgdGhlIG9yaWdpbmFsIHRvIGEgbmV3IG5hbWUsIG9mdGVuIHZpYSBhCiYjNDM7ICogcmVuYW1lIHJlcXVlc3QsIGFuZCBzaG91bGQgY2FsbCBkX2xvb2t1cF9kb25lKCkgb24gdGhlIG5ld2x5IGNyZWF0ZWQKJiM0MzsgKiBkZW50cnkuICBJZiB0aGUgbmV3IGlzIGluc3RhbnRpYXRlZCB0aGVuIHRoZSBvbGQgTVVTVCBlaXRoZXIgYmUgbW92ZWQKJiM0MzsgKiBvciBkcm9wcGVkLgomIzQzOyAqCiYjNDM7ICogUGFyZW50IG11c3QgYmUgbG9ja2VkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogYW4gaW4tbG9va3VwIGRlbnRyeSwgb3IgLUVOT01FTS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgZGVudHJ5ICpkX2R1cGxpY2F0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgaGFzaCA9IGRlbnRyeS0mZ3Q7ZF9uYW1lLmhhc2g7CiYjNDM7CXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRlbnRyeS0mZ3Q7ZF9wYXJlbnQ7CiYjNDM7CXN0cnVjdCBobGlzdF9ibF9oZWFkICpiID0gaW5fbG9va3VwX2hhc2gocGFyZW50LCBoYXNoKTsKJiM0MzsJc3RydWN0IGRlbnRyeSAqbmV3ID0gX19kX2FsbG9jKHBhcmVudC0mZ3Q7ZF9zYiwgJmFtcDtkZW50cnktJmd0O2RfbmFtZSk7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghbmV3KSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwluZXctJmd0O2RfZmxhZ3MgfD0gRENBQ0hFX1BBUl9MT09LVVA7CiYjNDM7CWxvY2tfbWFwX2FjcXVpcmVfdHJ5KCZhbXA7bmV3LSZndDtsb29rdXBfbWFwKTsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cGFyZW50LSZndDtkX2xvY2spOwomIzQzOwluZXctJmd0O2RfcGFyZW50ID0gZGdldF9kbG9jayhwYXJlbnQpOwomIzQzOwlobGlzdF9hZGRfaGVhZCgmYW1wO25ldy0mZ3Q7ZF9zaWIsICZhbXA7cGFyZW50LSZndDtkX2NoaWxkcmVuKTsKJiM0MzsJaWYgKHBhcmVudC0mZ3Q7ZF9mbGFncyAmYW1wOyBEQ0FDSEVfRElTQ09OTkVDVEVEKQomIzQzOwkJbmV3LSZndDtkX2ZsYWdzIHw9IERDQUNIRV9ESVNDT05ORUNURUQ7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7cGFyZW50LSZndDtkX2xvY2spOwomIzQzOwomIzQzOwlobGlzdF9ibF9sb2NrKGIpOwomIzQzOwlobGlzdF9ibF9hZGRfaGVhZCgmYW1wO25ldy0mZ3Q7ZF9pbl9sb29rdXBfaGFzaCwgYik7CiYjNDM7CWhsaXN0X2JsX3VubG9jayhiKTsKJiM0MzsJcmV0dXJuIG5ldzsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChkX2R1cGxpY2F0ZSk7CiYjNDM7CiBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX2Fub24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlyZXR1cm4gX19kX2FsbG9jKHNiLCBOVUxMKTsKQEAgLTIxNjgsNyAmIzQzOzIyMjQsNiBAQCBzdGF0aWMgdm9pZCBfX2RfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogICogKG9yIG90aGVyd2lzZSBzZXQpIGJ5IHRoZSBjYWxsZXIgdG8gaW5kaWNhdGUgdGhhdCBpdCBpcyBub3cKICAqIGluIHVzZSBieSB0aGUgZGNhY2hlLgogICovCi0gCiB2b2lkIGRfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqZW50cnksIHN0cnVjdCBpbm9kZSAqIGlub2RlKQogewogCUJVR19PTihkX3JlYWxseV9pc19wb3NpdGl2ZShlbnRyeSkpOwpAQCAtMjc1MCw2ICYjNDM7MjgwNSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZW5kX2Rpcl9hZGQoc3RydWN0IGlub2RlICpkaXIsIHVuc2lnbmVkIGludCBuKQogc3RhdGljIHZvaWQgZF93YWl0X2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJaWYgKGxpa2VseShkX2luX2xvb2t1cChkZW50cnkpKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFRlbGwgbG9ja2RlcCB3ZSB3aWxsIHdhaXQgZm9yIHRoZSBsb29rdXAgbG9jaywgYWZ0ZXIKJiM0MzsJCSAqIGRyb3BwaW5nIC0mZ3Q7ZF9sb2NrLCBidXQgd29uJiMzOTt0IGFjdHVhbGx5IHRha2UgaXQuCiYjNDM7CQkgKi8KJiM0MzsJCXNwaW5fcmVsZWFzZSgmYW1wO2RlbnRyeS0mZ3Q7ZF9sb2NrLmRlcF9tYXAsIDApOwomIzQzOwkJbG9ja19tYXBfc3luYygmYW1wO2RlbnRyeS0mZ3Q7bG9va3VwX21hcCk7CiYjNDM7CQlzcGluX2FjcXVpcmUoJmFtcDtkZW50cnktJmd0O2RfbG9jay5kZXBfbWFwLCAwLCAxLCBfVEhJU19JUF8pOwomIzQzOwogCQlkZW50cnktJmd0O2RfZmxhZ3MgfD0gRENBQ0hFX0xPT0tVUF9XQUlURVJTOwogCQl3YWl0X3Zhcl9ldmVudF9zcGlubG9jaygmYW1wO2RlbnRyeS0mZ3Q7ZF9mbGFncywKIAkJCQkJIWRfaW5fbG9va3VwKGRlbnRyeSksCkBAIC0yNzU3LDggJiM0MzsyODIwLDE2IEBAIHN0YXRpYyB2b2lkIGRfd2FpdF9sb29rdXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCX0KIH0KIAotc3RydWN0IGRlbnRyeSAqZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCi0JCQkJY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCiYjNDM7LyogV2hhdCB0byBkbyB3aGVuIF9fZF9hbGxvY19wYXJhbGxlbCBmaW5kcyBhIGRfaW5fbG9va3VwIGRlbnRyeSAqLwomIzQzO2VudW0gYWxsb2NfcGFyYSB7CiYjNDM7CUFMTE9DX1BBUkFfV0FJVCwKJiM0MzsJQUxMT0NfUEFSQV9GQUlMLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZQomIzQzO3N0cnVjdCBkZW50cnkgKl9fZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCiYjNDM7CQkJCSAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiYjNDM7CQkJCSAgZW51bSBhbGxvY19wYXJhIGhvdykKIHsKIAl1bnNpZ25lZCBpbnQgaGFzaCA9IG5hbWUtJmd0O2hhc2g7CiAJc3RydWN0IGhsaXN0X2JsX2hlYWQgKmIgPSBpbl9sb29rdXBfaGFzaChwYXJlbnQsIGhhc2gpOwpAQCAtMjgzMSw2ICYjNDM7MjkwMiwxMiBAQCBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCwKIAkJCXNwaW5fdW5sb2NrKCZhbXA7ZGVudHJ5LSZndDtkX2xvY2spOwogCQkJZ290byByZXRyeTsKIAkJfQomIzQzOwkJaWYgKHVubGlrZWx5KGhvdyA9PSBBTExPQ19QQVJBX0ZBSUwpKSB7CiYjNDM7CQkJLyogbXVzdG4mIzM5O3Qgd2FpdCBmb3IgY29uY3VycmVudCBsb29rdXAgdG8gY29tcGxldGUgKi8KJiM0MzsJCQlzcGluX3VubG9jaygmYW1wO2RlbnRyeS0mZ3Q7ZF9sb2NrKTsKJiM0MzsJCQlkcHV0KG5ldyk7CiYjNDM7CQkJcmV0dXJuIEVSUl9QVFIoLUVXT1VMREJMT0NLKTsKJiM0MzsJCX0KIAkJLyoKIAkJICogc29tZWJvZHkgaXMgbGlrZWx5IHRvIGJlIHN0aWxsIGRvaW5nIGxvb2t1cCBmb3IgaXQ7CiAJCSAqIHBpbiBpdCBhbmQgd2FpdCBmb3IgdGhlbSB0byBmaW5pc2gKQEAgLTI4NTgsMTQgJiM0MzsyOTM1LDc3IEBAIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LAogCX0KIAlobGlzdF9ibF9hZGRfaGVhZCgmYW1wO25ldy0mZ3Q7ZF9pbl9sb29rdXBfaGFzaCwgYik7CiAJaGxpc3RfYmxfdW5sb2NrKGIpOwomIzQzOwlsb2NrX21hcF9hY3F1aXJlX3RyeSgmYW1wO25ldy0mZ3Q7bG9va3VwX21hcCk7CiAJcmV0dXJuIG5ldzsKIG1pc21hdGNoOgogCXNwaW5fdW5sb2NrKCZhbXA7ZGVudHJ5LSZndDtkX2xvY2spOwogCWRwdXQoZGVudHJ5KTsKIAlnb3RvIHJldHJ5OwogfQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRfYWxsb2NfcGFyYWxsZWwoKSAtIGFsbG9jYXRlIGEgbmV3IGRlbnRyeSBhbmQgZW5zdXJlIHVuaXF1ZW5lc3MKJiM0MzsgKiBAcGFyZW50OiBkZW50cnkgb2YgdGhlIHBhcmVudAomIzQzOyAqIEBuYW1lOiAgIG5hbWUgb2YgdGhlIGRlbnRyeSB3aXRoaW4gdGhhdCBwYXJlbnQuCiYjNDM7ICoKJiM0MzsgKiBBIG5ldyBkZW50cnkgaXMgYWxsb2NhdGVkIGFuZCwgcHJvdmlkaW5nIGl0IGlzIHVuaXF1ZSwgYWRkZWQgdG8gdGhlCiYjNDM7ICogcmVsZXZhbnQgaW5kZXguCiYjNDM7ICogSWYgYW4gZXhpc3RpbmcgZGVudHJ5IGlzIGZvdW5kIHdpdGggdGhlIHNhbWUgcGFyZW50L25hbWUgdGhhdCBpcwomIzQzOyAqIG5vdCBkX2luX2xvb2t1cCgpLCB0aGVuIHRoYXQgaXMgcmV0dXJuZWQgaW5zdGVhZC4KJiM0MzsgKiBJZiB0aGUgZXhpc3RpbmcgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCksIGRfYWxsb2NfcGFyYWxsZWwoKSB3YWl0cyBmb3IKJiM0MzsgKiB0aGF0IGxvb2t1cCB0byBjb21wbGV0ZSBiZWZvcmUgcmV0dXJuaW5nIHRoZSBkZW50cnkgYW5kIHRoZW4gZW5zdXJlcyB0aGUKJiM0MzsgKiBtYXRjaCBpcyBzdGlsbCB2YWxpZC4KJiM0MzsgKiBUaHVzIGlmIHRoZSByZXR1cm5lZCBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSB0aGVuIHRoZSBjYWxsZXIgaGFzCiYjNDM7ICogZXhjbHVzaXZlIGFjY2VzcyB1bnRpbCBpdCBjb21wbGV0ZXMgdGhlIGxvb2t1cC4KJiM0MzsgKiBJZiB0aGUgcmV0dXJuZWQgZGVudHJ5IGlzIG5vdCBkX2luX2xvb2t1cCgpIHRoZW4gYSBsb29rdXAgaGFzCiYjNDM7ICogYWxyZWFkeSBjb21wbGV0ZWQuCiYjNDM7ICoKJiM0MzsgKiBUaGUgQG5hbWUgbXVzdCBhbHJlYWR5IGhhdmUgLSZndDtoYXNoIHNldCwgYXMgY2FuIGJlIGFjaGlldmVkCiYjNDM7ICogYnkgZS5nLiB0cnlfbG9va3VwX25vcGVybSgpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogdGhlIGRlbnRyeSwgd2hldGhlciBmb3VuZCBvciBhbGxvY2F0ZWQsIG9yIGFuIGVycm9yICUtRU5PTUVNLgomIzQzOyAqLwomIzQzO3N0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LAomIzQzOwkJCQljb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2RfYWxsb2NfcGFyYWxsZWwocGFyZW50LCBuYW1lLCBBTExPQ19QQVJBX1dBSVQpOwomIzQzO30KIEVYUE9SVF9TWU1CT0woZF9hbGxvY19wYXJhbGxlbCk7CiAKJiM0MzsvKioKJiM0MzsgKiBkX2FsbG9jX3RyeWxvY2soKSAtIGZpbmQgb3IgYWxsb2NhdGUgYSBuZXcgZGVudHJ5CiYjNDM7ICogQHBhcmVudDogZGVudHJ5IG9mIHRoZSBwYXJlbnQKJiM0MzsgKiBAbmFtZTogICBuYW1lIG9mIHRoZSBkZW50cnkgd2l0aGluIHRoYXQgcGFyZW50LgomIzQzOyAqCiYjNDM7ICogQSBuZXcgZGVudHJ5IGlzIGFsbG9jYXRlZCBhbmQsIHByb3ZpZGluZyBpdCBpcyB1bmlxdWUsIGFkZGVkIHRvIHRoZQomIzQzOyAqIHJlbGV2YW50IGluZGV4LgomIzQzOyAqIElmIGFuIGV4aXN0aW5nIGRlbnRyeSBpcyBmb3VuZCB3aXRoIHRoZSBzYW1lIHBhcmVudC9uYW1lIHRoYXQgaXMKJiM0MzsgKiBub3QgZF9pbl9sb29rdXAoKSB0aGVuIHRoYXQgaXMgcmV0dXJuZWQgaW5zdGVhZC4KJiM0MzsgKiBJZiB0aGUgZXhpc3RpbmcgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCksIGRfYWxsb2NfdHJ5bG9jaygpCiYjNDM7ICogcmV0dXJucyB3aXRoIGVycm9yICUtRVdPVUxEQkxPQ0suCiYjNDM7ICogVGh1cyBpZiB0aGUgcmV0dXJuZWQgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCkgdGhlbiB0aGUgY2FsbGVyIGhhcwomIzQzOyAqIGV4Y2x1c2l2ZSBhY2Nlc3MgdW50aWwgaXQgY29tcGxldGVzIHRoZSBsb29rdXAuCiYjNDM7ICogSWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBub3QgZF9pbl9sb29rdXAoKSB0aGVuIGEgbG9va3VwIGhhcwomIzQzOyAqIGFscmVhZHkgY29tcGxldGVkLgomIzQzOyAqCiYjNDM7ICogVGhlIEBuYW1lIG5lZWQgbm90IGFscmVhZHkgaGF2ZSAtJmd0O2hhc2ggc2V0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogdGhlIGRlbnRyeSwgd2hldGhlciBmb3VuZCBvciBhbGxvY2F0ZWQsIG9yIGFuIGVycm9yCiYjNDM7ICogICAgJS1FTk9NRU0sICUtRVdPVUxEQkxPQ0ssICUtRUFDQ0VTIChmb3IgYSBiYWQgbmFtZSkgb3IKJiM0MzsgKiAgICBhbnl0aGluZyByZXR1cm5lZCBieSAtJmd0O2RfaGFzaCgpLgomIzQzOyAqLwomIzQzO3N0cnVjdCBkZW50cnkgKmRfYWxsb2NfdHJ5bG9jayhzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBxc3RyICpuYW1lKQomIzQzO3sKJiM0MzsJc3RydWN0IGRlbnRyeSAqZGU7CiYjNDM7CiYjNDM7CWRlID0gdHJ5X2xvb2t1cF9ub3Blcm0obmFtZSwgcGFyZW50KTsKJiM0MzsJaWYgKCFkZSkKJiM0MzsJCWRlID0gX19kX2FsbG9jX3BhcmFsbGVsKHBhcmVudCwgbmFtZSwgQUxMT0NfUEFSQV9GQUlMKTsKJiM0MzsJcmV0dXJuIGRlOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGRfYWxsb2NfdHJ5bG9jayk7CiYjNDM7CiAvKgogICogTW92ZSBkZW50cnkgZnJvbSBpbi1sb29rdXAgc3RhdGUgdG8gYnVzeS1uZWdhdGl2ZSBvbmUuCiAgKgpAQCAtMjg5NCw2ICYjNDM7MzAzNCw3IEBAIHN0YXRpYyB2b2lkIF9fZF9sb29rdXBfdW5oYXNoKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAliID0gaW5fbG9va3VwX2hhc2goZGVudHJ5LSZndDtkX3BhcmVudCwgZGVudHJ5LSZndDtkX25hbWUuaGFzaCk7CiAJaGxpc3RfYmxfbG9jayhiKTsKIAlkZW50cnktJmd0O2RfZmxhZ3MgJmFtcDs9IH5EQ0FDSEVfUEFSX0xPT0tVUDsKJiM0MzsJbG9ja19tYXBfcmVsZWFzZSgmYW1wO2RlbnRyeS0mZ3Q7bG9va3VwX21hcCk7CiAJX19obGlzdF9ibF9kZWwoJmFtcDtkZW50cnktJmd0O2RfaW5fbG9va3VwX2hhc2gpOwogCWhsaXN0X2JsX3VubG9jayhiKTsKIAlkZW50cnktJmd0O3dhaXRlcnMgPSBOVUxMOwpAQCAtMjkzMSwxNSAmIzQzOzMwNzIsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fZF9hZGQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCX0KIAlpZiAodW5saWtlbHkob3BzKSkKIAkJZF9zZXRfZF9vcChkZW50cnksIG9wcyk7Ci0JaWYgKGlub2RlKSB7Ci0JCXVuc2lnbmVkIGFkZF9mbGFncyA9IGRfZmxhZ3NfZm9yX2lub2RlKGlub2RlKTsKLQkJaGxpc3RfYWRkX2hlYWQoJmFtcDtkZW50cnktJmd0O2RfYWxpYXMsICZhbXA7aW5vZGUtJmd0O2lfZGVudHJ5KTsKLQkJcmF3X3dyaXRlX3NlcWNvdW50X2JlZ2luKCZhbXA7ZGVudHJ5LSZndDtkX3NlcSk7Ci0JCV9fZF9zZXRfaW5vZGVfYW5kX3R5cGUoZGVudHJ5LCBpbm9kZSwgYWRkX2ZsYWdzKTsKLQkJcmF3X3dyaXRlX3NlcWNvdW50X2VuZCgmYW1wO2RlbnRyeS0mZ3Q7ZF9zZXEpOwotCQlmc25vdGlmeV91cGRhdGVfZmxhZ3MoZGVudHJ5KTsKLQl9Ci0JX19kX3JlaGFzaChkZW50cnkpOwomIzQzOwlpZiAoaW5vZGUpCiYjNDM7CQlfX2RfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiYjNDM7CWlmIChkX3VuaGFzaGVkKGRlbnRyeSkpCiYjNDM7CQlfX2RfcmVoYXNoKGRlbnRyeSk7CiAJaWYgKGRpcikgewogCQllbmRfZGlyX2FkZChkaXIsIG4pOwogCQlfX2Rfd2FrZV9pbl9sb29rdXBfd2FpdGVycyhkZW50cnkpOwpAQCAtMzI0MSw3ICYjNDM7MzM3Nyw3IEBAIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJaWYgKElTX0VSUihpbm9kZSkpCiAJCXJldHVybiBFUlJfQ0FTVChpbm9kZSk7CiAKLQlCVUdfT04oIWRfdW5oYXNoZWQoZGVudHJ5KSk7CiYjNDM7CUJVR19PTihkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKTsKIAogCWlmICghaW5vZGUpCiAJCWdvdG8gb3V0OwpAQCAtMzI5Nyw2ICYjNDM7MzQzMyw4IEBAIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAgKiBAaW5vZGU6ICB0aGUgaW5vZGUgd2hpY2ggbWF5IGhhdmUgYSBkaXNjb25uZWN0ZWQgZGVudHJ5CiAgKiBAZGVudHJ5OiBhIG5lZ2F0aXZlIGRlbnRyeSB3aGljaCB3ZSB3YW50IHRvIHBvaW50IHRvIHRoZSBpbm9kZS4KICAqCiYjNDM7ICogQGRlbnRyeSBtdXN0IGJlIG5lZ2F0aXZlIGFuZCBtYXkgYmUgaW4tbG9va3VwIG9yIHVuaGFzaGVkIG9yIGhhc2hlZC4KJiM0MzsgKgogICogSWYgaW5vZGUgaXMgYSBkaXJlY3RvcnkgYW5kIGhhcyBhbiBJU19ST09UIGFsaWFzLCB0aGVuIGRfbW92ZSB0aGF0IGluCiAgKiBwbGFjZSBvZiB0aGUgZ2l2ZW4gZGVudHJ5IGFuZCByZXR1cm4gaXQsIGVsc2Ugc2ltcGx5IGRfYWRkIHRoZSBpbm9kZQogICogdG8gdGhlIGRlbnRyeSBhbmQgcmV0dXJuIE5VTEwuCkBAIC0zMzA0LDE2ICYjNDM7MzQ0MiwxNCBAQCBzdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhc19vcHMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogICogSWYgYSBub24tSVNfUk9PVCBkaXJlY3RvcnkgaXMgZm91bmQsIHRoZSBmaWxlc3lzdGVtIGlzIGNvcnJ1cHQsIGFuZAogICogd2Ugc2hvdWxkIGVycm9yIG91dDogZGlyZWN0b3JpZXMgY2FuJiMzOTt0IGhhdmUgbXVsdGlwbGUgYWxpYXNlcy4KICAqCi0gKiBUaGlzIGlzIG5lZWRlZCBpbiB0aGUgbG9va3VwIHJvdXRpbmUgb2YgYW55IGZpbGVzeXN0ZW0gdGhhdCBpcyBleHBvcnRhYmxlCi0gKiAodmlhIGtuZnNkKSBzbyB0aGF0IHdlIGNhbiBidWlsZCBkY2FjaGUgcGF0aHMgdG8gZGlyZWN0b3JpZXMgZWZmZWN0aXZlbHkuCiYjNDM7ICogVGhpcyBzaG91bGQgYmUgdXNlZCB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiAtJmd0O2xvb2t1cCgpIGFuZCB0bwomIzQzOyAqIGluc3RhbnRpYXRlIHRoZSByZXN1bHQgb2YgLSZndDtta2RpcigpLCBpcyBvZnRlbiB1c2VmdWwgZm9yCiYjNDM7ICogLSZndDthdG9taWNfb3BlbiwgYW5kIG1heSBiZSB1c2VkIHRvIGluc3RhbnRpYXRlIG90aGVyIG9iamVjdHMuCiAgKgogICogSWYgYSBkZW50cnkgd2FzIGZvdW5kIGFuZCBtb3ZlZCwgdGhlbiBpdCBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSBOVUxMCi0gKiBpcyByZXR1cm5lZC4gIFRoaXMgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIG9mIC0mZ3Q7bG9va3VwLgomIzQzOyAqIGlzIHJldHVybmVkLiAgVGhpcyBtYXRjaGVzIHRoZSBleHBlY3RlZCByZXR1cm4gdmFsdWUgb2YgLSZndDtsb29rdXAgYW5kCiYjNDM7ICogLSZndDtta2Rpci4KICAqCi0gKiBDbHVzdGVyIGZpbGVzeXN0ZW1zIG1heSBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBhIG5lZ2F0aXZlLCBoYXNoZWQgZGVudHJ5LgotICogSW4gdGhhdCBjYXNlLCB3ZSBrbm93IHRoYXQgdGhlIGlub2RlIHdpbGwgYmUgYSByZWd1bGFyIGZpbGUsIGFuZCBhbHNvIHRoaXMKLSAqIHdpbGwgb25seSBvY2N1ciBkdXJpbmcgYXRvbWljX29wZW4uIFNvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSBkZW50cnkKLSAqIGJlaW5nIGFscmVhZHkgaGFzaGVkIG9ubHkgaW4gdGhlIGZpbmFsIGNhc2UuCiAgKi8KIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDIwYTY1MzRlYTNlZmYuLmU5NzhhNzVlYjhhMTQgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmFtZWkuYwpAQCAtMTkzMyw3ICYjNDM7MTkzMyw3IEBAIHN0YXRpYyBub2lubGluZSBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfc2xvdyhjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGlyLSZndDtkX2lub2RlOwogCXN0cnVjdCBkZW50cnkgKnJlczsKIAlpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7Ci0JcmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzKTsKJiM0MzsJcmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzIHwgTE9PS1VQX1NIQVJFRCk7CiAJaW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7CiAJcmV0dXJuIHJlczsKIH0KQEAgLTE5NDcsNyAmIzQzOzE5NDcsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX3Nsb3dfa2lsbGFibGUoY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAKIAlpZiAoaW5vZGVfbG9ja19zaGFyZWRfa2lsbGFibGUoaW5vZGUpKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVFIpOwotCXJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyk7CiYjNDM7CXJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyB8IExPT0tVUF9TSEFSRUQpOwogCWlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpOwogCXJldHVybiByZXM7CiB9CkBAIC0yOTQ2LDggJiM0MzsyOTQ2LDggQEAgc3RydWN0IGRlbnRyeSAqc3RhcnRfZGlyb3Aoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqbmFtZSwKICAqIGVuZF9kaXJvcCAtIHNpZ25hbCBjb21wbGV0aW9uIG9mIGEgZGlyb3AKICAqIEBkZTogdGhlIGRlbnRyeSB3aGljaCB3YXMgcmV0dXJuZWQgYnkgc3RhcnRfZGlyb3Agb3Igc2ltaWxhci4KICAqCi0gKiBJZiB0aGUgZGUgaXMgYW4gZXJyb3IsIG5vdGhpbmcgaGFwcGVucy4gT3RoZXJ3aXNlIGFueSBsb2NrIHRha2VuIHRvCi0gKiBwcm90ZWN0IHRoZSBkZW50cnkgaXMgZHJvcHBlZCBhbmQgdGhlIGRlbnRyeSBpdHNlbGYgaXMgcmVsZWFzZSAoZHB1dCgpKS4KJiM0MzsgKiBJZiB0aGUgQGRlIGlzIGFuIGVycm9yLCBub3RoaW5nIGhhcHBlbnMuIE90aGVyd2lzZSBhbnkgbG9jayB0YWtlbiB0bwomIzQzOyAqIHByb3RlY3QgdGhlIGRlbnRyeSBpcyBkcm9wcGVkIGFuZCB0aGUgZGVudHJ5IGl0c2VsZiBpcyByZWxlYXNlZCAoZHB1dCgpKS4KICAqLwogdm9pZCBlbmRfZGlyb3Aoc3RydWN0IGRlbnRyeSAqZGUpCiB7CkBAIC0zMjEwLDcgJiM0MzszMjEwLDcgQEAgRVhQT1JUX1NZTUJPTChsb29rdXBfb25lKTsKIC8qKgogICogbG9va3VwX29uZV91bmxvY2tlZCAtIGxvb2t1cCBzaW5nbGUgcGF0aG5hbWUgY29tcG9uZW50CiAgKiBAaWRtYXA6CWlkbWFwIG9mIHRoZSBtb3VudCB0aGUgbG9va3VwIGlzIHBlcmZvcm1lZCBmcm9tCi0gKiBAbmFtZToJcXN0ciBvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cAomIzQzOyAqIEBuYW1lOglxc3RyIGhvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cAogICogQGJhc2U6CWJhc2UgZGlyZWN0b3J5IHRvIGxvb2t1cCBmcm9tCiAgKgogICogVGhpcyBjYW4gYmUgdXNlZCBmb3IgaW4ta2VybmVsIGZpbGVzeXN0ZW0gY2xpZW50cyBzdWNoIGFzIGZpbGUgc2VydmVycy4KQEAgLTMyNDMsNyAmIzQzOzMyNDMsNyBAQCBFWFBPUlRfU1lNQk9MKGxvb2t1cF9vbmVfdW5sb2NrZWQpOwogLyoqCiAgKiBsb29rdXBfb25lX3Bvc2l0aXZlX2tpbGxhYmxlIC0gbG9va3VwIHNpbmdsZSBwYXRobmFtZSBjb21wb25lbnQKICAqIEBpZG1hcDoJaWRtYXAgb2YgdGhlIG1vdW50IHRoZSBsb29rdXAgaXMgcGVyZm9ybWVkIGZyb20KLSAqIEBuYW1lOglxc3RyIG9sZGluZyBwYXRobmFtZSBjb21wb25lbnQgdG8gbG9va3VwCiYjNDM7ICogQG5hbWU6CXFzdHIgaG9sZGluZyBwYXRobmFtZSBjb21wb25lbnQgdG8gbG9va3VwCiAgKiBAYmFzZToJYmFzZSBkaXJlY3RvcnkgdG8gbG9va3VwIGZyb20KICAqCiAgKiBUaGlzIGhlbHBlciB3aWxsIHlpZWxkIEVSUl9QVFIoLUVOT0VOVCkgb24gbmVnYXRpdmVzLiBUaGUgaGVscGVyIHJldHVybnMKQEAgLTMyNTksNyAmIzQzOzMyNTksNyBAQCBFWFBPUlRfU1lNQk9MKGxvb2t1cF9vbmVfdW5sb2NrZWQpOwogICogdGhlIGlfcndzZW0gaXRzZWxmIGlmIG5lY2Vzc2FyeS4gIElmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgb3IKICAqIGRlbGl2ZXJlZCwgaXQgd2lsbCByZXR1cm4gJS1FSU5UUiBpZiB0aGUgbG9jayBpcyBuZWVkZWQuCiAgKgotICogUmV0dXJuczogQSBkZW50cnksIHBvc3NpYmx5IG5lZ2F0aXZlLCBvcgomIzQzOyAqIFJldHVybnM6IEEgcG9zaXRpdmUgZGVudHJ5LCBvcgogICoJICAgLSBzYW1lIGVycm9ycyBhcyBsb29rdXBfb25lX3VubG9ja2VkKCkgb3IKICAqCSAgIC0gRVJSX1BUUigtRUlOVFIpIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuCiAgKi8KQEAgLTMzODEsNyAmIzQzOzMzODEsNyBAQCBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfbm9wZXJtX3Bvc2l0aXZlX3VubG9ja2VkKHN0cnVjdCBxc3RyICpuYW1lLAogRVhQT1JUX1NZTUJPTChsb29rdXBfbm9wZXJtX3Bvc2l0aXZlX3VubG9ja2VkKTsKIAogLyoqCi0gKiBzdGFydF9jcmVhdGluZyAtIHByZXBhcmUgdG8gY3JlYXRlIGEgZ2l2ZW4gbmFtZSB3aXRoIHBlcm1pc3Npb24gY2hlY2tpbmcKJiM0MzsgKiBzdGFydF9jcmVhdGluZyAtIHByZXBhcmUgdG8gYWNjZXNzIG9yIGNyZWF0ZSBhIGdpdmVuIG5hbWUgd2l0aCBwZXJtaXNzaW9uIGNoZWNraW5nCiAgKiBAaWRtYXA6ICBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBwcmVwYXJlIHRvIGNyZWF0ZSB0aGUgbmFtZQogICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgY3JlYXRlZApAQCAtMzQxMyw4ICYjNDM7MzQxMyw4IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmcpOwogICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIGZpbmQgdGhlIG5hbWUKICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIHJlbW92ZWQKICAqCi0gKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGluIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZwotICogYW4gb2JqZWN0IGZyb20gYSBkaXJlY3RvcnkuICBQZXJtaXNzaW9uIGNoZWNraW5nIChNQVlfRVhFQykgaXMgcGVyZm9ybWVkCiYjNDM7ICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmcgYW4gb2JqZWN0CiYjNDM7ICogZnJvbSBhIGRpcmVjdG9yeS4gIFBlcm1pc3Npb24gY2hlY2tpbmcgKE1BWV9FWEVDKSBpcyBwZXJmb3JtZWQKICAqIGFnYWluc3QgQGlkbWFwLgogICoKICAqIElmIHRoZSBuYW1lIGRvZXNuJiMzOTt0IGV4aXN0LCBhbiBlcnJvciBpcyByZXR1cm5lZC4KQEAgLTM0NDAsNyAmIzQzOzM0NDAsNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X3JlbW92aW5nKTsKICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBwcmVwYXJlIHRvIGNyZWF0ZSB0aGUgbmFtZQogICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgY3JlYXRlZAogICoKLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIGNyZWF0aW5nCiYjNDM7ICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmcKICAqIGFuIG9iamVjdCBpbiBhIGRpcmVjdG9yeS4gIFBlcm1pc3Npb24gY2hlY2tpbmcgKE1BWV9FWEVDKSBpcyBwZXJmb3JtZWQKICAqIGFnYWluc3QgQGlkbWFwLgogICoKQEAgLTM0NjksNyAmIzQzOzM0NjksNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX2tpbGxhYmxlKTsKICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBmaW5kIHRoZSBuYW1lCiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSByZW1vdmVkCiAgKgotICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmcKJiM0MzsgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZwogICogYW4gb2JqZWN0IGZyb20gYSBkaXJlY3RvcnkuICBQZXJtaXNzaW9uIGNoZWNraW5nIChNQVlfRVhFQykgaXMgcGVyZm9ybWVkCiAgKiBhZ2FpbnN0IEBpZG1hcC4KICAqCkBAIC0zNDk5LDcgJiM0MzszNDk5LDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZ19raWxsYWJsZSk7CiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gcHJlcGFyZSB0byBjcmVhdGUgdGhlIG5hbWUKICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWQKICAqCi0gKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGluIHBlcmZvcm1lZCBwcmlvciB0byBjcmVhdGluZwomIzQzOyAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaXMgcGVyZm9ybWVkIHByaW9yIHRvIGNyZWF0aW5nCiAgKiBhbiBvYmplY3QgaW4gYSBkaXJlY3RvcnkuCiAgKgogICogSWYgdGhlIG5hbWUgYWxyZWFkeSBleGlzdHMsIGEgcG9zaXRpdmUgZGVudHJ5IGlzIHJldHVybmVkLgpAQCAtMzUyMiw3ICYjNDM7MzUyMiw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmdfbm9wZXJtKTsKICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBmaW5kIHRoZSBuYW1lCiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSByZW1vdmVkCiAgKgotICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmcKJiM0MzsgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZwogICogYW4gb2JqZWN0IGZyb20gYSBkaXJlY3RvcnkuCiAgKgogICogSWYgdGhlIG5hbWUgZG9lc24mIzM5O3QgZXhpc3QsIGFuIGVycm9yIGlzIHJldHVybmVkLgpAQCAtMzU0MywxMSAmIzQzOzM1NDMsMTEgQEAgc3RydWN0IGRlbnRyeSAqc3RhcnRfcmVtb3Zpbmdfbm9wZXJtKHN0cnVjdCBkZW50cnkgKnBhcmVudCwKIEVYUE9SVF9TWU1CT0woc3RhcnRfcmVtb3Zpbmdfbm9wZXJtKTsKIAogLyoqCi0gKiBzdGFydF9jcmVhdGluZ19kZW50cnkgLSBwcmVwYXJlIHRvIGNyZWF0ZSBhIGdpdmVuIGRlbnRyeQotICogQHBhcmVudDogZGlyZWN0b3J5IGZyb20gd2hpY2ggZGVudHJ5IHNob3VsZCBiZSByZW1vdmVkCi0gKiBAY2hpbGQ6ICB0aGUgZGVudHJ5IHRvIGJlIHJlbW92ZWQKJiM0MzsgKiBzdGFydF9jcmVhdGluZ19kZW50cnkgLSBwcmVwYXJlIHRvIGFjY2VzcyBvciBjcmVhdGUgYSBnaXZlbiBkZW50cnkKJiM0MzsgKiBAcGFyZW50OiBkaXJlY3Rvcnkgb2YgZGVudHJ5CiYjNDM7ICogQGNoaWxkOiAgdGhlIGRlbnRyeSB0byBiZSBwcmVwYXJlZAogICoKLSAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW4gb3RoZXIgZGlyb3BzIGFuZAomIzQzOyAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW5zdCBvdGhlciBkaXJvcHMgYW5kCiAgKiB0aGUgdmFsaWRpdHkgb2YgdGhlIGRlbnRyeSBpcyBjaGVja2VkOiBjb3JyZWN0IHBhcmVudCBhbmQgc3RpbGwgaGFzaGVkLgogICoKICAqIElmIHRoZSBkZW50cnkgaXMgdmFsaWQgYW5kIG5lZ2F0aXZlIGEgcmVmZXJlbmNlIGlzIHRha2VuIGFuZApAQCAtMzU4MCw3ICYjNDM7MzU4MCw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmdfZGVudHJ5KTsKICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRlbnRyeSBzaG91bGQgYmUgcmVtb3ZlZAogICogQGNoaWxkOiAgdGhlIGRlbnRyeSB0byBiZSByZW1vdmVkCiAgKgotICogQSBsb2NrIGlzIHRha2VuIHRvIHByb3RlY3QgdGhlIGRlbnRyeSBhZ2FpbiBvdGhlciBkaXJvcHMgYW5kCiYjNDM7ICogQSBsb2NrIGlzIHRha2VuIHRvIHByb3RlY3QgdGhlIGRlbnRyeSBhZ2FpbnN0IG90aGVyIGRpcm9wcyBhbmQKICAqIHRoZSB2YWxpZGl0eSBvZiB0aGUgZGVudHJ5IGlzIGNoZWNrZWQ6IGNvcnJlY3QgcGFyZW50IGFuZCBzdGlsbCBoYXNoZWQuCiAgKgogICogSWYgdGhlIGRlbnRyeSBpcyB2YWxpZCBhbmQgcG9zaXRpdmUsIGEgcmVmZXJlbmNlIGlzIHRha2VuIGFuZApAQCAtNDQ0MCwxMiAmIzQzOzQ0NDAsMTQgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvcjsKIAl1bW9kZV90IG1vZGU7CiAJYm9vbCBnb3Rfd3JpdGU7CiYjNDM7CXVuc2lnbmVkIGludCBzaGFyZWRfZmxhZzsKIAogcmV0cnk6CiAJb3Blbl9mbGFnID0gb3AtJmd0O29wZW5fZmxhZzsKIAlnb3Rfd3JpdGUgPSBmYWxzZTsKIAltb2RlID0gb3AtJmd0O21vZGU7CiAJY3JlYXRlX2Vycm9yID0gMDsKJiM0MzsJc2hhcmVkX2ZsYWcgPSAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpID8gMCA6IExPT0tVUF9TSEFSRUQ7CiAKIAlpZiAob3Blbl9mbGFnICZhbXA7IChPX0NSRUFUIHwgT19UUlVOQyB8IE9fV1JPTkxZIHwgT19SRFdSKSkgewogCQlnb3Rfd3JpdGUgPSAhbW50X3dhbnRfd3JpdGUobmQtJmd0O3BhdGgubW50KTsKQEAgLTQ0NTQsMTAgJiM0Mzs0NDU2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAqIGEgZGlmZmVyZW50IGVycm9yOyB3ZSYjMzk7bGwgYmUgZHJvcHBpbmcgdGhpcyBvbmUgYW55d2F5LgogCQkgKi8KIAl9Ci0JaWYgKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKQotCQlpbm9kZV9sb2NrKGRpcl9pbm9kZSk7Ci0JZWxzZQomIzQzOwlpZiAoc2hhcmVkX2ZsYWcpCiAJCWlub2RlX2xvY2tfc2hhcmVkKGRpcl9pbm9kZSk7CiYjNDM7CWVsc2UKJiM0MzsJCWlub2RlX2xvY2soZGlyX2lub2RlKTsKIAogCWlmICh1bmxpa2VseShJU19ERUFERElSKGRpcl9pbm9kZSkpKSB7CiAJCWRlbnRyeSA9IEVSUl9QVFIoLUVOT0VOVCk7CkBAIC00NTI2LDcgJiM0Mzs0NTI4LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAogCWlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7CiAJCXN0cnVjdCBkZW50cnkgKnJlcyA9IGRpcl9pbm9kZS0mZ3Q7aV9vcC0mZ3Q7bG9va3VwKGRpcl9pbm9kZSwgZGVudHJ5LAotCQkJCQkJCSAgICAgbmQtJmd0O2ZsYWdzKTsKJiM0MzsJCQkJCQkJICAgICBuZC0mZ3Q7ZmxhZ3MgfCBzaGFyZWRfZmxhZyk7CiAJCWRfbG9va3VwX2RvbmUoZGVudHJ5KTsKIAkJaWYgKHVubGlrZWx5KHJlcykpIHsKIAkJCWlmIChJU19FUlIocmVzKSkgewpAQCAtNDU3NCwxMCAmIzQzOzQ1NzYsMTAgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9PUEVORUQpCiAJCQlmc25vdGlmeV9vcGVuKGZpbGUpOwogCX0KLQlpZiAoKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSB8fCBjcmVhdGVfZXJyb3IpCi0JCWlub2RlX3VubG9jayhkaXJfaW5vZGUpOwotCWVsc2UKJiM0MzsJaWYgKHNoYXJlZF9mbGFnKQogCQlpbm9kZV91bmxvY2tfc2hhcmVkKGRpcl9pbm9kZSk7CiYjNDM7CWVsc2UKJiM0MzsJCWlub2RlX3VubG9jayhkaXJfaW5vZGUpOwogCiAJaWYgKGdvdF93cml0ZSkKIAkJbW50X2Ryb3Bfd3JpdGUobmQtJmd0O3BhdGgubW50KTsKZGlmZiAtLWdpdCBhL2ZzL25mcy91bmxpbmsuYyBiL2ZzL25mcy91bmxpbmsuYwppbmRleCBiNTdjZmFhNGQ1MTZmLi5jOGQ3MTIyMDRlNjQ5IDEwMDY0NAotLS0gYS9mcy9uZnMvdW5saW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmZzL3VubGluay5jCkBAIC02Nyw2ICYjNDM7NjcsNyBAQCBzdGF0aWMgdm9pZCBuZnNfYXN5bmNfdW5saW5rX3JlbGVhc2Uodm9pZCAqY2FsbGRhdGEpCiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0mZ3Q7ZF9zYjsKIAogCXVwX3JlYWRfbm9uX293bmVyKCZhbXA7TkZTX0koZF9pbm9kZShkZW50cnktJmd0O2RfcGFyZW50KSktJmd0O3JtZGlyX3NlbSk7CiYjNDM7CWRfbG9va3VwX2FjcXVpcmUoZGVudHJ5KTsKIAlkX2xvb2t1cF9kb25lKGRlbnRyeSk7CiAJbmZzX2ZyZWVfdW5saW5rZGF0YShkYXRhKTsKIAlkcHV0KGRlbnRyeSk7CkBAIC0xNTksNiAmIzQzOzE2MCw4IEBAIHN0YXRpYyBpbnQgbmZzX2NhbGxfdW5saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mCiAJCXJldHVybiByZXQ7CiAJfQogCWRhdGEtJmd0O2RlbnRyeSA9IGFsaWFzOwomIzQzOwlkX2xvb2t1cF9yZWxlYXNlKGFsaWFzKTsKJiM0MzsKIAluZnNfZG9fY2FsbF91bmxpbmsoaW5vZGUsIGRhdGEpOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKaW5kZXggNGIxZmY5OTYwOGUwMS4uZTdlM2VmMDUzMTNiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCkBAIC0xMTYsNiAmIzQzOzExNiw4IEBAIHN0cnVjdCBkZW50cnkgewogCQkJCQkgKiBwb3NzaWJsZSEKIAkJCQkJICovCiAKJiM0MzsJLyogbG9ja2RlcCB0cmFja2luZyBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrcyAqLwomIzQzOwlzdHJ1Y3QgbG9ja2RlcF9tYXAJCWxvb2t1cF9tYXA7CiAJc3RydWN0IGxpc3RfaGVhZCBkX2xydTsJCS8qIExSVSBsaXN0ICovCiAJc3RydWN0IGhsaXN0X25vZGUgZF9zaWI7CS8qIGNoaWxkIG9mIHBhcmVudCBsaXN0ICovCiAJc3RydWN0IGhsaXN0X2hlYWQgZF9jaGlsZHJlbjsJLyogb3VyIGNoaWxkcmVuICovCkBAIC0yNTcsNyAmIzQzOzI1OSw5IEBAIGV4dGVybiB2b2lkIGRfZGVsZXRlKHN0cnVjdCBkZW50cnkgKik7CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2Moc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTsKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IHN0cnVjdCBxc3RyICopOwomIzQzO2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY190cnlsb2NrKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfc3BsaWNlX2FsaWFzKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwomIzQzO3N0cnVjdCBkZW50cnkgKmRfZHVwbGljYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiAvKiB3ZWlyZCBwcm9jZnMgbWVzczsgKk5PVCogZXhwb3J0ZWQgKi8KIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9zcGxpY2VfYWxpYXNfb3BzKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosCiAJCQkJCSAgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICopOwpAQCAtNTUyLDYgJiM0Mzs1NTYsMzYgQEAgc3RhdGljIGlubGluZSBpbnQgc2ltcGxlX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAogdW5zaWduZWQgbG9uZyB2ZnNfcHJlc3N1cmVfcmF0aW8odW5zaWduZWQgbG9uZyB2YWwpOwogCiYjNDM7LyoqCiYjNDM7ICogZF9sb29rdXBfcmVsZWFzZSAtIHJlbGVhc2Ugb3duZXJzaGlwIG9mIERDQUNIRV9QQVJfTE9PS1VQIGxvY2sKJiM0MzsgKiBAZGVudHJ5OiBkZW50cnkgdGhhdCBpcyBsb2NrZWQKJiM0MzsgKgomIzQzOyAqIElmIGFuIGluLWxvb2t1cCBkZW50cnkgaXMgdG8gYmUgcGFzc2VkIHRvIGFub3RoZXIgdGhyZWFkIHdoaWNoCiYjNDM7ICogd2lsbCBkcm9wIHRoZSBpbi1sb29rdXAgbG9jaywgdGhlbiBkX2xvb2t1cF9yZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWQKJiM0MzsgKiB0byB0ZWxsIGxvY2tkZXAgdGhhdCB0aGlzIHRocmVhZCBubyBsb2NrIGhvbGRzIHRoZSBsb2NrLiAgVGhlCiYjNDM7ICogdGhyZWFkIHRoYXQgcmVjZWl2ZXMgdGhlIGxvY2sgbXVzdCBjYWxsIGRfbG9va3VwX2FjcXVpcmUoKSB0bwomIzQzOyAqIGFjcXVpcmUgdGhlIGxvY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGRfbG9va3VwX3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQomIzQzO3sKJiM0MzsJaWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpCiYjNDM7CQlsb2NrX21hcF9yZWxlYXNlKCZhbXA7ZGVudHJ5LSZndDtsb29rdXBfbWFwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZF9sb29rdXBfYWNxdWlyZSAtIGFjcXVpcmUgb3duZXJzaGlwIG9mIERDQUNIRV9QQVJfTE9PS1VQIGxvY2sKJiM0MzsgKiBAZGVudHJ5OiBkZW50cnkgdGhhdCBpcyBsb2NrZWQKJiM0MzsgKgomIzQzOyAqIElmIGFuIGluLWxvb2t1cCBkZW50cnkgd2FzIHBhc3NlZCB0byB0aGlzIHRocmVhZCwgdGhlCiYjNDM7ICogZF9sb29rdXBfYWNxdWlyZSgpIG11c3QgYmUgY2FsbGVkIHRvIHRlbGwgbG9ja2RlcCB0aGF0IHRoaXMKJiM0MzsgKiB0aHJlYWQgbm93IG93bnMgdGhlIERDQUNIRV9QQVJfTE9PS1VQIGxvY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGRfbG9va3VwX2FjcXVpcmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQomIzQzO3sKJiM0MzsJaWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpCiYjNDM7CQlsb2NrX21hcF9hY3F1aXJlX3RyeSgmYW1wO2RlbnRyeS0mZ3Q7bG9va3VwX21hcCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBkX2lub2RlIC0gR2V0IHRoZSBhY3R1YWwgaW5vZGUgb2YgdGhpcyBkZW50cnkKICAqIEBkZW50cnk6IFRoZSBkZW50cnkgdG8gcXVlcnkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmFtZWkuaCBiL2luY2x1ZGUvbGludXgvbmFtZWkuaAppbmRleCA4NmQ2NTdiMjRmYzZhLi42NWYwZjU3MTI4ODVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25hbWVpLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uYW1laS5oCkBAIC0zMiw4ICYjNDM7MzIsOSBAQCBlbnVtIHsgTUFYX05FU1RFRF9MSU5LUyA9IDggfTsKICNkZWZpbmUgTE9PS1VQX0NSRUFURQkJQklUKDE3KQkvKiAuLi4gaW4gb2JqZWN0IGNyZWF0aW9uICovCiAjZGVmaW5lIExPT0tVUF9FWENMCQlCSVQoMTgpCS8qIC4uLiBpbiB0YXJnZXQgbXVzdCBub3QgZXhpc3QgKi8KICNkZWZpbmUgTE9PS1VQX1JFTkFNRV9UQVJHRVQJQklUKDE5KQkvKiAuLi4gaW4gZGVzdGluYXRpb24gb2YgcmVuYW1lKCkgKi8KJiM0MzsjZGVmaW5lIExPT0tVUF9TSEFSRUQJCUJJVCgyMCkgLyogUGFyZW50IGxvY2sgaXMgaGVsZCBzaGFyZWQgKi8KIAotLyogNCBzcGFyZSBiaXRzIGZvciBpbnRlbnQgKi8KJiM0MzsvKiAzIHNwYXJlIGJpdHMgZm9yIGludGVudCAqLwogCiAvKiBTY29waW5nIGZsYWdzIGZvciBsb29rdXAuICovCiAjZGVmaW5lIExPT0tVUF9OT19TWU1MSU5LUwlCSVQoMjQpIC8qIE5vIHN5bWxpbmsgY3Jvc3NpbmcuICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDg1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRXZhbHVhdGlvbjogZGNhY2hlIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGxvb2sgb3ZlciB0aGlzIHBhdGNoIHNlcmllcyBmb3IgZnV6emluZyBwb3RlbnRpYWwgd2l0aCBzeXprYWxsZXIuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgpGaXJzdCwgdGhlIGRpZmYuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpLCBzcGVjaWZpY2FsbHkgdGhlIGRjYWNoZSBhbmQgbmFtZWkgc3Vic3lzdGVtcywgd2l0aCBhIGxpdHRsZSB0b3VjaCBvZiBORlMuIFRoaXMgaXMgKmNyaXRpY2FsKiBpbmZyYXN0cnVjdHVyZTsgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcGF0aCBsb29rdXAsIGRlbnRyeSBhbGxvY2F0aW9uLCBsb2NraW5nLCBhbmQgc29tZSBpbXBvcnRhbnQgYXNzZXJ0aW9ucy4gVGhpcyBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdGhlIGZpbGVzeXN0ZW0sIHNvIGl0JiMzOTtzIGludGVyZXN0aW5nLgoKVGhlIGBEb2N1bWVudGF0aW9uL2AgY2hhbmdlcyBhcmUgdXN1YWxseSBhIGdvb2Qgc2lnbiB0aGF0IHRoZXkgd2VyZSB0aGlua2luZyBhYm91dCBmdXp6aW5nIGFuZCB0cnlpbmcgdG8ga2VlcCB0aGluZ3MgZWFzaWx5IGF2YWlsYWJsZSBmb3IgdGhvc2UgdGhhdCB3YW50IHRvIGNvbnRyaWJ1dGUuCgpBIGRlZXBlciBkaXZlIGludG8gdGhlIGRpZmYgc2hvd3Mgc3Vic3RhbnRpYWwgY2hhbmdlczogd2UgaGF2ZSBhIG5ldyBgbG9va3VwX21hcGAgdW5kZXIgbG9ja2RlcCwgbmV3IGZ1bmN0aW9ucyBsaWtlIGBkX2R1cGxpY2F0ZWAsIGBkX2FsbG9jX3RyeWxvY2tgLCBhbmQgYGRfbG9va3VwX2FjcXVpcmUvcmVsZWFzZWAgYXJlIGludHJvZHVjZWQsIGBfX2RfYWRkYCBsb2dpYyBpcyByZWZhY3RvcmVkLCBhbmQgbG9jayBoYW5kbGluZyBpbiBgbG9va3VwX29wZW5gIGNoYW5nZXMgYmFzZWQgb24gc2hhcmVkIGZsYWdzLiBUaGVyZSBpcyBldmVuIGEgY2hhbmdlIGZyb20gYEJVR19PTighZF91bmhhc2hlZChkZW50cnkpKWAgdG8gYEJVR19PTihkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKWAsIHdoaWNoIGlzIGFsd2F5cyB3b3J0aCBhIGxvb2suIFRoZSBvdmVyYWxsIGdvYWwgc2VlbXMgdG8gYmUgZW5oYW5jaW5nIGNvbmN1cnJlbmN5IGFuZCBoYW5kbGluZyBzb21lIG5ldyBjbHVzdGVyL292ZXJsYXkgc2NlbmFyaW9zLgoKVGhlIG1vZGlmaWNhdGlvbiBvZiBgX19kX2FsbG9jYCwgYF9fZF9hZGRgLCBgbG9va3VwX29wZW5gIGFuZCBgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlYCByZWFsbHkgY2F1Z2h0IG15IGV5ZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgZmlsZXN5c3RlbSBjYWxscyBsaWtlIGBvcGVuYCwgYGxvb2t1cGAsIGB1bmxpbmtgLCBhbmQgYG1rZGlyYCwgc28sIHRoYXQmIzM5O3MgYWxyZWFkeSBhIHNpZ25pZmljYW50IHBvaW50IGluIGl0cyBmYXZvci4KCioqTXkgYXNzZXNzbWVudDogVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuKiogVGhpcyBoYXMgYWxsIHRoZSBoYWxsbWFya3Mgb2YgYSBwYXRjaCBzZXJpZXMgcmlwZSBmb3IgZnV6emluZzogY29yZSBzdWJzeXN0ZW0gbW9kaWZpY2F0aW9ucyAoVkZTL2RjYWNoZSksIG5ldyBsb2NraW5nIGludmFyaWFudHMgaW50cm9kdWNlZCB3aXRoIGxvY2tkZXAsIHRoZSBhZGRpdGlvbiBvZiBhIGxvY2tkZXAgbWFwLCBtb2RpZmllZCBhc3NlcnRpb25zLCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGBfX2RfYWRkYCBsb2dpYywgYW5kIHRoZSBgbG9va3VwX29wZW5gIHNoYXJlZCBsb2NraW5nIGNoYW5nZSBpcyBwYXJ0aWN1bGFybHkgaW50cmlndWluZy4gVGhlcmUmIzM5O3MgYSBoaWdoIHByb2JhYmlsaXR5IG9mIGZpbmRpbmcgaW50ZXJlc3Rpbmcga2VybmVsIHN0YXRlcyBvciByYWNlIGNvbmRpdGlvbnMgaGVyZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHVzdWFsIHN1c3BlY3RzLiBJIHNob3VsZCBjaGVjayBgV29ydGhGdXp6aW5nYCwgYEZvY3VzU3ltYm9sc2AsIGFuZCBgRW5hYmxlQ29uZmlnc2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgb3IgcHJlLWV4aXN0aW5nIHNldHVwIHRvIG1ha2UgdGhpcyBlYXNpZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnkgb2J2aW91cyBlbnRyeSBwb2ludHMgYW5kIHRoYXQgSSBoYXZlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIGVuYWJsZWQuIEFsc28sIGEgcXVpY2sgYGdyZXBwZXJgIHJ1biBmb3IgdGhlIG5ldyBmdW5jdGlvbnMgbGlrZSBgZF9hbGxvY190cnlsb2NrYCwgYW5kIGBkX2R1cGxpY2F0ZWAgaXMgY3J1Y2lhbCB0byBnZXQgYSBob2xpc3RpYyB2aWV3IG9mIHRoZSBjYWxsZXJzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhbiBpZGVhIGFib3V0IHRoZSBvdmVyYWxsIHNjb3BlIGFuZCBpZiB0aGlzIGlzIGEgcGFydCBvZiBhIGxhcmdlciBwYXRjaCBzZXJpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZF9hbGxvY190cnlsb2NrfGRfZHVwbGljYXRlfExPT0tVUF9TSEFSRUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnM9MjU9cHViKGNyYXRlKSBzdHJ1Y3QgRnJlZXplTGlzdGVuZXIge1xuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzLTQyLSAgICAvLy8gTnVtYmVyIG9mIGNsZWFyZWQgZHVwbGljYXRlcyB0aGF0IGNhbiBiZSBkZWxldGVkLlxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnM6NDM6ICAgIG51bV9jbGVhcmVkX2R1cGxpY2F0ZXM6IHU2NCxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzLTQ0LX1cbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycz04Nj0gICAgZm4gZG9fd29yayhcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycy05Ny1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzOjk4OiAgICAgICAgaWYgZnJlZXplLm51bV9jbGVhcmVkX2R1cGxpY2F0ZXMgXHUwMDNlIDAge1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnM6OTk6ICAgICAgICAgICAgZnJlZXplLm51bV9jbGVhcmVkX2R1cGxpY2F0ZXMgLT0gMTtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzLTEwMC0gICAgICAgICAgICBkcm9wKG5vZGVfcmVmcyk7XG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtMTA5LSAgICAgICAgaWYgZnJlZXplLmlzX2NsZWFyaW5nIHtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzOjExMDogICAgICAgICAgICBrZXJuZWw6Ondhcm5fb24hKGZyZWV6ZS5udW1fY2xlYXJlZF9kdXBsaWNhdGVzICE9IDApO1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtMTExLSAgICAgICAgICAgIGlmIGZyZWV6ZS5udW1fcGVuZGluZ19kdXBsaWNhdGVzIFx1MDAzZSAwIHtcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycz0xODA9ICAgIHB1YihjcmF0ZSkgZm4gcmVxdWVzdF9mcmVlemVfbm90aWYoXG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtMjQ5LSAgICAgICAgICAgICAgICAgICAgICAgIG51bV9wZW5kaW5nX2R1cGxpY2F0ZXM6IDAsXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5yczoyNTA6ICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2NsZWFyZWRfZHVwbGljYXRlczogMCxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzLTI1MS0gICAgICAgICAgICAgICAgICAgIH0sXG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtMjU5LSAgICAgICAgICAgICAgICB9IGVsc2Uge1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnM6MjYwOiAgICAgICAgICAgICAgICAgICAgZHVwZS5udW1fY2xlYXJlZF9kdXBsaWNhdGVzICYjNDM7PSAxO1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtMjYxLSAgICAgICAgICAgICAgICB9XG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnM9Mjc1PSAgICBwdWIoY3JhdGUpIGZuIGZyZWV6ZV9ub3RpZl9kb25lKHNlbGY6IFx1MDAyNkFyY1x1MDAzY1NlbGZcdTAwM2UsIHJlYWRlcjogXHUwMDI2bXV0IFVzZXJTbGljZVJlYWRlcikgLVx1MDAzZSBSZXN1bHRcdTAwM2MoKVx1MDAzZSB7XG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtMjkxLSAgICAgICAgICAgIGZyZWV6ZS5udW1fcGVuZGluZ19kdXBsaWNhdGVzIC09IDE7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5yczoyOTI6ICAgICAgICAgICAgZnJlZXplLm51bV9jbGVhcmVkX2R1cGxpY2F0ZXMgJiM0Mzs9IDE7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycy0yOTMtICAgICAgICB9IGVsc2Uge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYz00Mzk1PXN0cnVjdCBlZGlkICpkcm1fZHBfbXN0X2dldF9lZGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF90b3BvbG9neS5jLTQ0MDMtXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmM6NDQwNDpcdGVkaWQgPSBkcm1fZWRpZF9kdXBsaWNhdGUoZHJtX2VkaWRfcmF3KGRybV9lZGlkKSk7XG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMtNDQwNS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYz0yOTUwPUVYUE9SVF9TWU1CT0woZHJtX2VkaWRfcmVhZF9zd2l0Y2hlcm9vKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYy0yOTUyLS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmM6Mjk1MzogKiBkcm1fZWRpZF9kdXBsaWNhdGUgLSBkdXBsaWNhdGUgYW4gRURJRCBhbmQgdGhlIGV4dGVuc2lvbnNcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jLTI5NTQtICogQGVkaWQ6IEVESUQgdG8gZHVwbGljYXRlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMtMjk1Ny0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jOjI5NTg6c3RydWN0IGVkaWQgKmRybV9lZGlkX2R1cGxpY2F0ZShjb25zdCBzdHJ1Y3QgZWRpZCAqZWRpZClcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jLTI5NTkte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jLTI5NjQtfVxuZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmM6Mjk2NTpFWFBPUlRfU1lNQk9MKGRybV9lZGlkX2R1cGxpY2F0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYy0yOTY2LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcG1kZW1hbmQuYz01Nj1zdGF0aWMgc3RydWN0IGludGVsX2dsb2JhbF9zdGF0ZSAqXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3BtZGVtYW5kLmM6NTc6aW50ZWxfcG1kZW1hbmRfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBpbnRlbF9nbG9iYWxfb2JqICpvYmopXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3BtZGVtYW5kLmMtNTgte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcG1kZW1hbmQuYz03ND1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2dsb2JhbF9zdGF0ZV9mdW5jcyBpbnRlbF9wbWRlbWFuZF9mdW5jcyA9IHtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcG1kZW1hbmQuYzo3NTpcdC5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfcG1kZW1hbmRfZHVwbGljYXRlX3N0YXRlLFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wbWRlbWFuZC5jLTc2LVx0LmF0b21pY19kZXN0cm95X3N0YXRlID0gaW50ZWxfcG1kZW1hbmRfZGVzdHJveV9zdGF0ZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5oPTkxPXN0YXRpYyBjb25zdCB1MzIgYTZ4eF9obHNxX2R1cGxpY2F0ZV9jbHVzdGVyW10gPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHVfc3RhdGUuaC05NC1cbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmg6OTU6c3RhdGljIGNvbnN0IHUzMiBhNnh4X2hsc3FfMmRfZHVwbGljYXRlX2NsdXN0ZXJbXSA9IHtcbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmgtOTYtXHQweGJkODAsIDB4YmQ4MCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5oPTEzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGE2eHhfZGJnYWhiX2NsdXN0ZXIge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmgtMTQ2LVx0Q0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9WUywgMHgwMDAyZTAwMCwgMHg0MSwgYTZ4eF9obHNxX2R1cGxpY2F0ZV9jbHVzdGVyKSxcbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmg6MTQ3Olx0Q0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9WUywgMHgwMDAyZjAwMCwgMHg0NSwgYTZ4eF9obHNxXzJkX2R1cGxpY2F0ZV9jbHVzdGVyKSxcbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmgtMTQ4LVx0Q0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9WUywgMHgwMDAyYTAwMCwgMHgyMSwgYTZ4eF9zcF9kdXBsaWNhdGVfY2x1c3RlciksXG4tLVxuZHJpdmVycy9tZC9kbS5jPTEyNzQ9c3RhdGljIHNpemVfdCBkbV9kYXhfcmVjb3Zlcnlfd3JpdGUoc3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHBnb2ZmX3QgcGdvZmYsXG4tLVxuZHJpdmVycy9tZC9kbS5jLTEyOTctICogd2l0aCB3cml0ZSBCSU9zIGZsYWdnZWQgd2l0aCBCSU9fRU1VTEFURVNfWk9ORV9BUFBFTkQpIGFuZCBhbnkgYmlvIHNlcnZpY2VkXG5kcml2ZXJzL21kL2RtLmM6MTI5ODogKiBieSBfX3NlbmRfZHVwbGljYXRlX2Jpb3MoKS5cbmRyaXZlcnMvbWQvZG0uYy0xMjk5LSAqXG4tLVxuZHJpdmVycy9tZC9kbS5jPTE0Nzg9c3RhdGljIHZvaWQgYWxsb2NfbXVsdGlwbGVfYmlvcyhzdHJ1Y3QgYmlvX2xpc3QgKmJsaXN0LCBzdHJ1Y3QgY2xvbmVfaW5mbyAqY2ksXG4tLVxuZHJpdmVycy9tZC9kbS5jLTE1MDctXG5kcml2ZXJzL21kL2RtLmM6MTUwODpzdGF0aWMgdW5zaWduZWQgaW50IF9fc2VuZF9kdXBsaWNhdGVfYmlvcyhzdHJ1Y3QgY2xvbmVfaW5mbyAqY2ksIHN0cnVjdCBkbV90YXJnZXQgKnRpLFxuZHJpdmVycy9tZC9kbS5jLTE1MDktXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IG51bV9iaW9zLCB1bnNpZ25lZCBpbnQgKmxlbilcbi0tXG5kcml2ZXJzL21kL2RtLmM9MTUzNz1zdGF0aWMgdm9pZCBfX3NlbmRfZW1wdHlfZmx1c2goc3RydWN0IGNsb25lX2luZm8gKmNpKVxuLS1cbmRyaXZlcnMvbWQvZG0uYy0xNTY2LVx0XHRcdGF0b21pY19hZGQodGktXHUwMDNlbnVtX2ZsdXNoX2Jpb3MsIFx1MDAyNmNpLVx1MDAzZWlvLVx1MDAzZWlvX2NvdW50KTtcbmRyaXZlcnMvbWQvZG0uYzoxNTY3Olx0XHRcdGJpb3MgPSBfX3NlbmRfZHVwbGljYXRlX2Jpb3MoY2ksIHRpLCB0aS1cdTAwM2VudW1fZmx1c2hfYmlvcyxcbmRyaXZlcnMvbWQvZG0uYy0xNTY4LVx0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4tLVxuZHJpdmVycy9tZC9kbS5jPTE2MDY9c3RhdGljIHZvaWQgX19zZW5kX2Fibm9ybWFsX2lvKHN0cnVjdCBjbG9uZV9pbmZvICpjaSwgc3RydWN0IGRtX3RhcmdldCAqdGksXG4tLVxuZHJpdmVycy9tZC9kbS5jLTE2MTUtXHRhdG9taWNfYWRkKG51bV9iaW9zLCBcdTAwMjZjaS1cdTAwM2Vpby1cdTAwM2Vpb19jb3VudCk7XG5kcml2ZXJzL21kL2RtLmM6MTYxNjpcdGJpb3MgPSBfX3NlbmRfZHVwbGljYXRlX2Jpb3MoY2ksIHRpLCBudW1fYmlvcywgXHUwMDI2bGVuKTtcbmRyaXZlcnMvbWQvZG0uYy0xNjE3LVx0Lypcbi0tXG5kcml2ZXJzL21kL2RtLmM9MTkwMj1zdGF0aWMgdm9pZCBfX3NlbmRfem9uZV9yZXNldF9hbGxfbmF0aXZlKHN0cnVjdCBjbG9uZV9pbmZvICpjaSxcbi0tXG5kcml2ZXJzL21kL2RtLmMtMTkwNy1cdGF0b21pY19hZGQoMSwgXHUwMDI2Y2ktXHUwMDNlaW8tXHUwMDNlaW9fY291bnQpO1xuZHJpdmVycy9tZC9kbS5jOjE5MDg6XHRiaW9zID0gX19zZW5kX2R1cGxpY2F0ZV9iaW9zKGNpLCB0aSwgMSwgTlVMTCk7XG5kcml2ZXJzL21kL2RtLmMtMTkwOS1cdGF0b21pY19zdWIoMSAtIGJpb3MsIFx1MDAyNmNpLVx1MDAzZWlvLVx1MDAzZWlvX2NvdW50KTtcbi0tXG5kcml2ZXJzL3VzYi90eXBlYy9jbGFzcy5jPTQ0OD1zdGF0aWMgaW50IGluY3JlbWVudF9kdXBsaWNhdGVkX3ByaW9yaXR5KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3VzYi90eXBlYy9jbGFzcy5jLTQ2Mi1cbmRyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmM6NDYzOnN0YXRpYyBpbnQgZmluZF9kdXBsaWNhdGVkX3ByaW9yaXR5KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbmRyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmMtNDY0LXtcbi0tXG5kcml2ZXJzL3VzYi90eXBlYy9jbGFzcy5jPTQ3NT1zdGF0aWMgaW50IHR5cGVjX21vZGVfc2V0X3ByaW9yaXR5KHN0cnVjdCB0eXBlY19hbHRtb2RlICphbHQsIGNvbnN0IHU4IHByaW9yaXR5KVxuLS1cbmRyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmMtNDgyLVx0d2hpbGUgKHJlcykge1xuZHJpdmVycy91c2IvdHlwZWMvY2xhc3MuYzo0ODM6XHRcdHJlcyA9IGRldmljZV9mb3JfZWFjaF9jaGlsZChcdTAwMjZwb3J0LVx1MDAzZWRldiwgXHUwMDI2YWx0LCBmaW5kX2R1cGxpY2F0ZWRfcHJpb3JpdHkpO1xuZHJpdmVycy91c2IvdHlwZWMvY2xhc3MuYy00ODQtXHRcdGlmIChyZXMpIHtcbi0tXG5mcy9kY2FjaGUuYz0yMDA0PUVYUE9SVF9TWU1CT0woZF9hbGxvYyk7XG4tLVxuZnMvZGNhY2hlLmMtMjAwNi0vKipcbmZzL2RjYWNoZS5jOjIwMDc6ICogZF9kdXBsaWNhdGUgLSBkdXBsaWNhdGUgYSBkZW50cnkgZm9yIGNvbWJpbmVkIGF0b21pYyBvcGVyYXRpb25cbmZzL2RjYWNoZS5jLTIwMDgtICogQGRlbnRyeTogdGhlIGRlbnRyeSB0byBkdXBsaWNhdGVcbi0tXG5mcy9kY2FjaGUuYy0yMDE3LSAqIEZvciB0aGlzIHRoZXkgbmVlZCB0d28gZGVudHJpZXMgd2hpY2ggdGVtcG9yYXJpbHkgaGF2ZSB0aGUgc2FtZSBuYW1lLFxuZnMvZGNhY2hlLmM6MjAxODogKiBiZWZvcmUgb25lIGlzIHJlbmFtZWQuICBkX2R1cGxpY2F0ZSgpIHByb3ZpZGVzIGZvciB0aGlzLiAgR2l2ZW4gYVxuZnMvZGNhY2hlLmMtMjAxOS0gKiBwb3NpdGl2ZSBoYXNoZWQgZGVudHJ5LCBpdCBjcmVhdGVzIGEgc2Vjb25kIGluLWxvb2t1cCBkZW50cnkuXG4tLVxuZnMvZGNhY2hlLmMtMjAzMS0gKi9cbmZzL2RjYWNoZS5jOjIwMzI6c3RydWN0IGRlbnRyeSAqZF9kdXBsaWNhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvZGNhY2hlLmMtMjAzMy17XG4tLVxuZnMvZGNhY2hlLmMtMjA1NS19XG5mcy9kY2FjaGUuYzoyMDU2OkVYUE9SVF9TWU1CT0woZF9kdXBsaWNhdGUpO1xuZnMvZGNhY2hlLmMtMjA1Ny1cbi0tXG5mcy9kY2FjaGUuYz0yOTczPUVYUE9SVF9TWU1CT0woZF9hbGxvY19wYXJhbGxlbCk7XG4tLVxuZnMvZGNhY2hlLmMtMjk3NS0vKipcbmZzL2RjYWNoZS5jOjI5NzY6ICogZF9hbGxvY190cnlsb2NrKCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgbmV3IGRlbnRyeVxuZnMvZGNhY2hlLmMtMjk3Ny0gKiBAcGFyZW50OiBkZW50cnkgb2YgdGhlIHBhcmVudFxuLS1cbmZzL2RjYWNoZS5jLTI5ODMtICogbm90IGRfaW5fbG9va3VwKCkgdGhlbiB0aGF0IGlzIHJldHVybmVkIGluc3RlYWQuXG5mcy9kY2FjaGUuYzoyOTg0OiAqIElmIHRoZSBleGlzdGluZyBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSwgZF9hbGxvY190cnlsb2NrKClcbmZzL2RjYWNoZS5jLTI5ODUtICogcmV0dXJucyB3aXRoIGVycm9yICUtRVdPVUxEQkxPQ0suXG4tLVxuZnMvZGNhY2hlLmMtMjk5Ni0gKi9cbmZzL2RjYWNoZS5jOjI5OTc6c3RydWN0IGRlbnRyeSAqZF9hbGxvY190cnlsb2NrKHN0cnVjdCBkZW50cnkgKnBhcmVudCxcbmZzL2RjYWNoZS5jLTI5OTgtXHRcdFx0ICAgICAgIHN0cnVjdCBxc3RyICpuYW1lKVxuLS1cbmZzL2RjYWNoZS5jLTMwMDYtfVxuZnMvZGNhY2hlLmM6MzAwNzpFWFBPUlRfU1lNQk9MKGRfYWxsb2NfdHJ5bG9jayk7XG5mcy9kY2FjaGUuYy0zMDA4LVxuLS1cbmZzL25hbWVpLmM9MTkyOT1zdGF0aWMgbm9pbmxpbmUgc3RydWN0IGRlbnRyeSAqbG9va3VwX3Nsb3coY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4tLVxuZnMvbmFtZWkuYy0xOTM1LVx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuZnMvbmFtZWkuYzoxOTM2Olx0cmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzIHwgTE9PS1VQX1NIQVJFRCk7XG5mcy9uYW1laS5jLTE5MzctXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbi0tXG5mcy9uYW1laS5jPTE5NDE9c3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9zbG93X2tpbGxhYmxlKGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuLS1cbmZzL25hbWVpLmMtMTk0OS1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlRSKTtcbmZzL25hbWVpLmM6MTk1MDpcdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyB8IExPT0tVUF9TSEFSRUQpO1xuZnMvbmFtZWkuYy0xOTUxLVx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XG4tLVxuZnMvbmFtZWkuYz00NDMxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvbmFtZWkuYy00NDQ5LVx0Y3JlYXRlX2Vycm9yID0gMDtcbmZzL25hbWVpLmM6NDQ1MDpcdHNoYXJlZF9mbGFnID0gKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkgPyAwIDogTE9PS1VQX1NIQVJFRDtcbmZzL25hbWVpLmMtNDQ1MS1cbi0tXG5pbmNsdWRlL2RybS9kcm1fZWRpZC5oPTQ0MT1zdHJ1Y3QgZWRpZCAqZHJtX2dldF9lZGlkX3N3aXRjaGVyb28oc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcixcbmluY2x1ZGUvZHJtL2RybV9lZGlkLmgtNDQyLVx0XHRcdFx0ICAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuaW5jbHVkZS9kcm0vZHJtX2VkaWQuaDo0NDM6c3RydWN0IGVkaWQgKmRybV9lZGlkX2R1cGxpY2F0ZShjb25zdCBzdHJ1Y3QgZWRpZCAqZWRpZCk7XG5pbmNsdWRlL2RybS9kcm1fZWRpZC5oLTQ0NC1pbnQgZHJtX2FkZF9lZGlkX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBlZGlkICplZGlkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oPTI2MT1leHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTtcbmluY2x1ZGUvbGludXgvZGNhY2hlLmg6MjYyOmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY190cnlsb2NrKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7XG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTI2My1leHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfc3BsaWNlX2FsaWFzKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopO1xuaW5jbHVkZS9saW51eC9kY2FjaGUuaDoyNjQ6c3RydWN0IGRlbnRyeSAqZF9kdXBsaWNhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbmluY2x1ZGUvbGludXgvZGNhY2hlLmgtMjY1LS8qIHdlaXJkIHByb2NmcyBtZXNzOyAqTk9UKiBleHBvcnRlZCAqL1xuLS1cbmluY2x1ZGUvbGludXgvbmFtZWkuaD0xMj1lbnVtIHsgTUFYX05FU1RFRF9MSU5LUyA9IDggfTtcbi0tXG5pbmNsdWRlL2xpbnV4L25hbWVpLmgtMzQtI2RlZmluZSBMT09LVVBfUkVOQU1FX1RBUkdFVFx0QklUKDE5KVx0LyogLi4uIGluIGRlc3RpbmF0aW9uIG9mIHJlbmFtZSgpICovXG5pbmNsdWRlL2xpbnV4L25hbWVpLmg6MzU6I2RlZmluZSBMT09LVVBfU0hBUkVEXHRcdEJJVCgyMCkgLyogUGFyZW50IGxvY2sgaXMgaGVsZCBzaGFyZWQgKi9cbmluY2x1ZGUvbGludXgvbmFtZWkuaC0zNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI1MAoJCQkJCQkJb3V0cHV0OiAyMzMKCQkJCQkJCXRob3VnaHRzOiA5NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiAgSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBjb2RlIGNoYW5nZXMgYW5kIHRoZSByZWxldmFudCBmdW5jdGlvbnMgYXJlOiBgZF9kdXBsaWNhdGVgLCBgZF93YWl0X2xvb2t1cGAsIGBkX2FsbG9jX3BhcmFsbGVsYCwgYGRfYWxsb2NfdHJ5bG9ja2AsIGBfX2RfbG9va3VwX3VuaGFzaGAsIGBfX2RfYWRkYCwgYGRfc3BsaWNlX2FsaWFzX29wc2AsIGBkX3NwbGljZV9hbGlhc2AsIGBfX2RfYWxsb2NgIGZyb20gYGZzL2RjYWNoZS5jYDsgYGxvb2t1cF9zbG93YCwgYGxvb2t1cF9zbG93X2tpbGxhYmxlYCwgYW5kIGBsb29rdXBfb3BlbmAgZnJvbSBgZnMvbmFtZWkuY2A7IGFuZCBgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlYCBhbmQgYG5mc19jYWxsX3VubGlua2AgZnJvbSBgZnMvbmZzL3VubGluay5jYC4gSSBhbHNvIHNlZSBjaGFuZ2VzIGluIGBpbmNsdWRlL2xpbnV4L2RjYWNoZS5oYCBpbnZvbHZpbmcgYGRfbG9va3VwX3JlbGVhc2VgIGFuZCBgZF9sb29rdXBfYWNxdWlyZWAuCgpOb3csIEkgbmVlZCB0byBmaWx0ZXIgdGhlc2UgZG93biB0byB0aGUgbW9zdCByZWxldmFudCB0YXJnZXRzIGZvciBmdXp6aW5nLiBGdW5jdGlvbnMgbGlrZSBgZF9hbGxvY2AgYXJlIHBvdGVudGlhbGx5IHRvbyB1YmlxdWl0b3VzLCBidXQgIGBkX2FsbG9jX3BhcmFsbGVsYCwgYGRfYWxsb2NfdHJ5bG9ja2AsIGBkX3NwbGljZV9hbGlhc2AsIGBkX2R1cGxpY2F0ZWAsIGBsb29rdXBfc2xvd2AsIGBsb29rdXBfc2xvd19raWxsYWJsZWAsIGBsb29rdXBfb3BlbmAsIGBuZnNfY2FsbF91bmxpbmtgIGFuZCBgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlYCBzZWVtIG1vcmUgdGFyZ2V0ZWQsIGFuZCB0aGF0IGBsb29rdXBfb3BlbmAmIzM5O3Mgc3BlY2lmaWMgdXNlIGluIGBPX0NSRUFUYCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlLiBUaGUgYWltIGlzIHRvIGVuc3VyZSB0aGUgZnV6emluZyBlZmZvcnQgaXMgZm9jdXNlZCBvbiB0aGUgbW9zdCBpbnRlcmVzdGluZyBhbmQgaW1wYWN0ZnVsIGNvZGUgY2hhbmdlcy4KCkkmIzM5O20gYWxzbyBjb25zaWRlcmluZyBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFZGUyBhbmQgZGNhY2hlIGFyZSBjb3JlIGZlYXR1cmVzOyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIHN0cmljdGx5IHJlcXVpcmVkLCBhbHRob3VnaCBgQ09ORklHX0xPQ0tERVBgIGlzIHVzZWQgaWYgbG9ja2RlcCBpcyBlbmFibGVkLCBhbmQgdGhlIE5GUyBjbGllbnQgdXNlcyBgQ09ORklHX05GU19GU2AuICBGb3Igb3B0aW1hbCBmdXp6aW5nLCBJJiMzOTtsbCByZWNvbW1lbmQgZW5hYmxpbmcgYFBST1ZFX0xPQ0tJTkdgIGFuZCBgTE9DS0RFUGAgdG8gZXhlcmNpc2UgdGhlIGxvY2tkZXAgaW50ZWdyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGBkZW50cnktJmd0O2xvb2t1cF9tYXBgLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIGBDT05GSUdfTkZTX0ZTYCBpcyBzZXQsIHNpbmNlIHRoZSBjaGFuZ2VzIHRvdWNoIE5GUy4KCkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcyDigJMgY29yZSBWRlMgcGF0aCBsb29rdXAsIHBhcmFsbGVsIGRlbnRyeSBhbGxvY2F0aW9uLCBzaGFyZWQgZGlyZWN0b3J5IGxvY2tpbmcgZHVyaW5nIGxvb2t1cCBhbmQgb3BlbiBvcGVyYXRpb25zLCBsb2NrZGVwIGFubm90YXRpb24gZm9yIHBhcmFsbGVsIGxvb2t1cHMsIGRfc3BsaWNlX2FsaWFzIGFzc2VydGlvbnMsIGFuZCB0aGUgZGVudHJ5IGhlbHBlcnMgLSAgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIGNyaXRpY2FsIGluZnJhc3RydWN0dXJlIGFuZCBwb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBhcmVhcyBjb3VsZCBiZSBxdWl0ZSBpbXBhY3RmdWwuIFRoZSBmdXp6aW5nIHNob3VsZCB0YXJnZXQgdGhlIGZvbGxvd2luZzogYGRfZHVwbGljYXRlYCwgYGRfYWxsb2NfcGFyYWxsZWxgLCBgZF9hbGxvY190cnlsb2NrYCwgYGRfc3BsaWNlX2FsaWFzYCwgYGRfc3BsaWNlX2FsaWFzX29wc2AsIGBkX3dhaXRfbG9va3VwYCwgYGxvb2t1cF9zbG93YCwgYGxvb2t1cF9zbG93X2tpbGxhYmxlYCwgYGxvb2t1cF9vcGVuYCwgYG5mc19hc3luY191bmxpbmtfcmVsZWFzZWAsIGFuZCBgbmZzX2NhbGxfdW5saW5rYC4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byBkZWZpbmUgdGhlIHBhcmFtZXRlcnMgZm9yIHNldHRpbmcgdGhlIHJlc3VsdHMsIGNvbmZpcm1pbmcgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAsIHdpdGggY2xlYXIgcmVhc29uaW5nIGFib3V0IHdoeSBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIC0gdGhlIGNoYW5nZXMgaW4gcGFyYWxsZWwgbG9va3VwcywgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcywgc2hhcmVkIGRpcmVjdG9yeSBsb2NraW5nIGluIGBsb29rdXBfc2xvd2AgYW5kIGBsb29rdXBfb3BlbmAsIHRoZSBuZXcgZGVudHJ5IGhlbHBlcnMgc3VjaCBhcyBgZF9kdXBsaWNhdGVgIGFuZCBgZF9hbGxvY190cnlsb2NrYCwgZGVudHJ5IGxvY2tkZXAgdHJhY2tpbmcsIGFuZCBhc3NlcnRpb24gY2hhbmdlcyBpbiBgZF9zcGxpY2VfYWxpYXNfb3BzYC4gSSYjMzk7bGwgaW5jbHVkZSB0aGUgaWRlbnRpZmllZCBmb2N1cyBzeW1ib2xzIGFuZCB0aGUgc3VnZ2VzdGVkIGNvbmZpZ3VyYXRpb25zOiBgUFJPVkVfTE9DS0lOR2AsIGFuZCBgTkZTX0ZTYC4gIEZpbmFsbHksIEkgd2lsbCBkb3VibGUtY2hlY2sgYWxsIHRoZSBwYXJhbWV0ZXJzIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST1ZFX0xPQ0tJTkcmIzM0OywKICAgICYjMzQ7TkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZF9kdXBsaWNhdGUmIzM0OywKICAgICYjMzQ7ZF9hbGxvY19wYXJhbGxlbCYjMzQ7LAogICAgJiMzNDtkX2FsbG9jX3RyeWxvY2smIzM0OywKICAgICYjMzQ7ZF9zcGxpY2VfYWxpYXMmIzM0OywKICAgICYjMzQ7ZF9zcGxpY2VfYWxpYXNfb3BzJiMzNDssCiAgICAmIzM0O2Rfd2FpdF9sb29rdXAmIzM0OywKICAgICYjMzQ7bG9va3VwX3Nsb3cmIzM0OywKICAgICYjMzQ7bG9va3VwX3Nsb3dfa2lsbGFibGUmIzM0OywKICAgICYjMzQ7bG9va3VwX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2FzeW5jX3VubGlua19yZWxlYXNlJiMzNDssCiAgICAmIzM0O25mc19jYWxsX3VubGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgY29yZSBWRlMgZGNhY2hlIGFuZCBuYW1laSBsb2dpYywgaW5jbHVkaW5nIHBhcmFsbGVsIGxvb2t1cCBsb2NraW5nLCBzaGFyZWQgZGlyZWN0b3J5IGxvY2tpbmcgZmxhZ3MgKExPT0tVUF9TSEFSRUQpIGluIGxvb2t1cF9zbG93IGFuZCBsb29rdXBfb3BlbiwgbG9ja2RlcCBtYXAgdHJhY2tpbmcgZm9yIGluLWxvb2t1cCBkZW50cmllcywgdXBkYXRlZCBhc3NlcnRpb25zIGluIGRfc3BsaWNlX2FsaWFzX29wcywgbmV3IGRjYWNoZSBoZWxwZXJzIChkX2R1cGxpY2F0ZSwgZF9hbGxvY190cnlsb2NrKSwgYW5kIE5GUyBhc3luY2hyb25vdXMgdW5saW5rIGxvY2sgdHJhY2tpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGNvcmUgcmVhY2hhYmxlIGtlcm5lbCBzdWJzeXN0ZW1zIGFuZCBkaXJlY3RseSBhZmZlY3QgY29uY3VycmVuY3kgYW5kIGludmFyaWFudCBlbmZvcmNlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtORlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkX2R1cGxpY2F0ZSYjMzQ7LAogICAgJiMzNDtkX2FsbG9jX3BhcmFsbGVsJiMzNDssCiAgICAmIzM0O2RfYWxsb2NfdHJ5bG9jayYjMzQ7LAogICAgJiMzNDtkX3NwbGljZV9hbGlhcyYjMzQ7LAogICAgJiMzNDtkX3NwbGljZV9hbGlhc19vcHMmIzM0OywKICAgICYjMzQ7ZF93YWl0X2xvb2t1cCYjMzQ7LAogICAgJiMzNDtsb29rdXBfc2xvdyYjMzQ7LAogICAgJiMzNDtsb29rdXBfc2xvd19raWxsYWJsZSYjMzQ7LAogICAgJiMzNDtsb29rdXBfb3BlbiYjMzQ7LAogICAgJiMzNDtuZnNfYXN5bmNfdW5saW5rX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bmZzX2NhbGxfdW5saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIFZGUyBkY2FjaGUgYW5kIG5hbWVpIGxvZ2ljLCBpbmNsdWRpbmcgcGFyYWxsZWwgbG9va3VwIGxvY2tpbmcsIHNoYXJlZCBkaXJlY3RvcnkgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gbG9va3VwX3Nsb3cgYW5kIGxvb2t1cF9vcGVuLCBsb2NrZGVwIG1hcCB0cmFja2luZyBmb3IgaW4tbG9va3VwIGRlbnRyaWVzLCB1cGRhdGVkIGFzc2VydGlvbnMgaW4gZF9zcGxpY2VfYWxpYXNfb3BzLCBuZXcgZGNhY2hlIGhlbHBlcnMgKGRfZHVwbGljYXRlLCBkX2FsbG9jX3RyeWxvY2spLCBhbmQgTkZTIGFzeW5jaHJvbm91cyB1bmxpbmsgbG9jayB0cmFja2luZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSByZWFjaGFibGUga2VybmVsIHN1YnN5c3RlbXMgYW5kIGRpcmVjdGx5IGFmZmVjdCBjb25jdXJyZW5jeSBhbmQgaW52YXJpYW50IGVuZm9yY2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIExvY2tkZXAgdHJhY2tpbmcgZm9yIHBhcmFsbGVsIGRlbnRyeSBsb29rdXBzIChEQ0FDSEVfUEFSX0xPT0tVUCB2aWEgc3RydWN0IGxvY2tkZXBfbWFwIGluIHN0cnVjdCBkZW50cnkpLCBhZGRzIHRoZSBkX2R1cGxpY2F0ZSBhbmQgZF9hbGxvY190cnlsb2NrIGhlbHBlcnMsIHVwZGF0ZXMgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gVkZTIGxvb2t1cCByb3V0aW5lcyAobG9va3VwX3Nsb3csIGxvb2t1cF9vcGVuKSwgYW5kIGZpeGVzIGZpbGVzeXN0ZW0gZG9jdW1lbnRhdGlvbi5cblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgYm91bmRhcmllcywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIHRyYW5zZmVycy4gQWxsIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IGRlbnRyeSBpbiBfX2RfYWxsb2MpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24uIEFueSBjb25jdXJyZW5jeSwgZGVhZGxvY2ssIG9yIHJlZmNvdW50aW5nIGlzc3VlcyByZXN1bHRpbmcgZnJvbSB0aGVzZSBWRlMgbG9ja2luZy9sb29rdXAgcmVmYWN0b3JpbmdzIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkOWExMmVjMWU1ZmUzZjNlNTc3ZDNiNjE4MzZkODZlNjY5OTQzMGVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwNDoxNTo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0CmluZGV4IDYwODgwZWIwYzQ5ZDEuLjRlMDE1ZjFiZjFmODQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdApAQCAtMTIwMywxNiAmIzQzOzEyMDMsMTYgQEAgd2lsbCBmYWlsLXNhZmUuCiAKIC0tLQogCi0qKiBtYW5kYXRvcnkqKgomIzQzOyoqbWFuZGF0b3J5KioKIAogbG9va3VwX29uZSgpLCBsb29rdXBfb25lX3VubG9ja2VkKCksIGxvb2t1cF9vbmVfcG9zaXRpdmVfdW5sb2NrZWQoKSBub3cKIHRha2UgYSBxc3RyIGluc3RlYWQgb2YgYSBuYW1lIGFuZCBsZW4uICBUaGVzZSwgbm90IHRoZSAmIzM0O29uZV9sZW4mIzM0OwogdmVyc2lvbnMsIHNob3VsZCBiZSB1c2VkIHdoZW5ldmVyIGFjY2Vzc2luZyBhIGZpbGVzeXN0ZW0gZnJvbSBvdXRzaWRlCi10aGF0IGZpbGVzeXNtdGVtLCB0aHJvdWdoIGEgbW91bnQgcG9pbnQgLSB3aGljaCB3aWxsIGhhdmUgYSBtbnRfaWRtYXAuCiYjNDM7dGhhdCBmaWxlc3lzdGVtLCB0aHJvdWdoIGEgbW91bnQgcG9pbnQgLSB3aGljaCB3aWxsIGhhdmUgYSBtbnRfaWRtYXAuCiAKIC0tLQogCi0qKiBtYW5kYXRvcnkqKgomIzQzOyoqbWFuZGF0b3J5KioKIAogRnVuY3Rpb25zIHRyeV9sb29rdXBfb25lX2xlbigpLCBsb29rdXBfb25lX2xlbigpLAogbG9va3VwX29uZV9sZW5fdW5sb2NrZWQoKSBhbmQgbG9va3VwX3Bvc2l0aXZlX3VubG9ja2VkKCkgaGF2ZSBiZWVuCkBAIC0xMjI5LDcgJiM0MzsxMjI5LDcgQEAgYWxyZWFkeSBiZWVuIHBlcmZvcm1lZCBzdWNoIGFzIGFmdGVyIHZmc19wYXRoX3BhcmVudF9sb29rdXAoKQogCiAtLS0KIAotKiogbWFuZGF0b3J5KioKJiM0MzsqKm1hbmRhdG9yeSoqCiAKIGRfaGFzaF9hbmRfbG9va3VwKCkgaXMgbm8gbG9uZ2VyIGV4cG9ydGVkIG9yIGF2YWlsYWJsZSBvdXRzaWRlIHRoZSBWRlMuCiBVc2UgdHJ5X2xvb2t1cF9ub3Blcm0oKSBpbnN0ZWFkLiAgVGhpcyBhZGRzIG5hbWUgdmFsaWRhdGlvbiBhbmQgdGFrZXMKQEAgLTEzNzAsNyAmIzQzOzEzNzAsNyBAQCBzaW1pbGFyLgogCiAtLS0KIAotKiogbWFuZGF0b3J5KioKJiM0MzsqKm1hbmRhdG9yeSoqCiAKIGxvY2tfcmVuYW1lKCksIGxvY2tfcmVuYW1lX2NoaWxkKCksIHVubG9ja19yZW5hbWUoKSBhcmUgbm8KIGxvbmdlciBhdmFpbGFibGUuICBVc2Ugc3RhcnRfcmVuYW1pbmcoKSBvciBzaW1pbGFyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0CmluZGV4IGQzYTkzZWVjMzk0NWYuLmRlOGY4NTAyMDU2ZTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QKQEAgLTUwNyw4ICYjNDM7NTA3LDggQEAgb3RoZXJ3aXNlIG5vdGVkLgogCWRlbnRyeSBiZWZvcmUgdGhlIGZpcnN0IG1rZGlyIHJldHVybnMuCiAKIAlJZiB0aGVyZSBpcyBhbnkgY2hhbmNlIHRoaXMgY291bGQgaGFwcGVuLCB0aGVuIHRoZSBuZXcgaW5vZGUKLQlzaG91bGQgYmUgZF9kcm9wKCllZCBhbmQgYXR0YWNoZWQgd2l0aCBkX3NwbGljZV9hbGlhcygpLiAgVGhlCi0JcmV0dXJuZWQgZGVudHJ5IChpZiBhbnkpIHNob3VsZCBiZSByZXR1cm5lZCBieSAtJmd0O21rZGlyKCkuCiYjNDM7CXNob3VsZCBiZSBhdHRhY2hlZCB3aXRoIGRfc3BsaWNlX2FsaWFzKCkuICBUaGUgcmV0dXJuZWQKJiM0MzsJZGVudHJ5IChpZiBhbnkpIHNob3VsZCBiZSByZXR1cm5lZCBieSAtJmd0O21rZGlyKCkuCiAKIGBgcm1kaXJgYAogCWNhbGxlZCBieSB0aGUgcm1kaXIoMikgc3lzdGVtIGNhbGwuICBPbmx5IHJlcXVpcmVkIGlmIHlvdSB3YW50CmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDFiMWE4MWYxMGRhNjcuLjNhZjhiMmFjNjk5ZjkgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RjYWNoZS5jCkBAIC0zMiw2ICYjNDM7MzIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdF9zcGlubG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdWxpc3RfYmwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0X2xydS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uYW1laS5oJmd0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bW91bnQuaCYjMzQ7CiAKQEAgLTE5MDAsNiAmIzQzOzE5MDEsNyBAQCBFWFBPUlRfU1lNQk9MKGRfaW52YWxpZGF0ZSk7CiAgCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogewomIzQzOwlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fbG9va3VwX2tleTsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJY2hhciAqZG5hbWU7CiAJaW50IGVycjsKQEAgLTE5NTcsNiAmIzQzOzE5NTksOCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogCWRlbnRyeS0mZ3Q7d2FpdGVycyA9IE5VTEw7CiAJSU5JVF9ITElTVF9OT0RFKCZhbXA7ZGVudHJ5LSZndDtkX3NpYik7CiAKJiM0MzsJbG9ja2RlcF9pbml0X21hcCgmYW1wO2RlbnRyeS0mZ3Q7bG9va3VwX21hcCwgJiMzNDtEQ0FDSEVfUEFSX0xPT0tVUCYjMzQ7LCAmYW1wO19fbG9va3VwX2tleSwgMCk7CiYjNDM7CiAJaWYgKGRlbnRyeS0mZ3Q7ZF9vcCAmYW1wOyZhbXA7IGRlbnRyeS0mZ3Q7ZF9vcC0mZ3Q7ZF9pbml0KSB7CiAJCWVyciA9IGRlbnRyeS0mZ3Q7ZF9vcC0mZ3Q7ZF9pbml0KGRlbnRyeSk7CiAJCWlmIChlcnIpIHsKQEAgLTE5OTksNiAmIzQzOzIwMDMsNTggQEAgc3RydWN0IGRlbnRyeSAqZF9hbGxvYyhzdHJ1Y3QgZGVudHJ5ICogcGFyZW50LCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSkKIH0KIEVYUE9SVF9TWU1CT0woZF9hbGxvYyk7CiAKJiM0MzsvKioKJiM0MzsgKiBkX2R1cGxpY2F0ZSAtIGR1cGxpY2F0ZSBhIGRlbnRyeSBmb3IgY29tYmluZWQgYXRvbWljIG9wZXJhdGlvbgomIzQzOyAqIEBkZW50cnk6IHRoZSBkZW50cnkgdG8gZHVwbGljYXRlCiYjNDM7ICoKJiM0MzsgKiBTb21lIHJlbmFtZSBvcGVyYXRpb25zIG5lZWQgdG8gYmUgY29tYmluZWQgd2l0aCBhbm90aGVyIG9wZXJhdGlvbgomIzQzOyAqIGluc2lkZSB0aGUgZmlsZXN5c3RlbS4KJiM0MzsgKiAxLyBBIGNsdXN0ZXIgZmlsZXN5c3RlbSB3aGVuIHJlbmFtaW5nIHRvIGFuIGluLXVzZSBmaWxlIG1pZ2h0IG5lZWQgdG8KJiM0MzsgKiAgIGZpcnN0ICYjMzQ7c2lsbHktcmVuYW1lJiMzNDsgdGhhdCB0YXJnZXQgb3V0IG9mIHRoZSB3YXkgYmVmb3JlIHRoZSBtYWluIHJlbmFtZQomIzQzOyAqIDIvIEEgZmlsZXN5c3RlbSB0aGF0IHN1cHBvcnRzIHdoaXRlLW91dCBtaWdodCB3YW50IHRvIGNyZWF0ZSBhIHdoaXRlb3V0CiYjNDM7ICogICBpbiBwbGFjZSBvZiB0aGUgZmlsZSBiZWluZyBtb3ZlZC4KJiM0MzsgKgomIzQzOyAqIEZvciB0aGlzIHRoZXkgbmVlZCB0d28gZGVudHJpZXMgd2hpY2ggdGVtcG9yYXJpbHkgaGF2ZSB0aGUgc2FtZSBuYW1lLAomIzQzOyAqIGJlZm9yZSBvbmUgaXMgcmVuYW1lZC4gIGRfZHVwbGljYXRlKCkgcHJvdmlkZXMgZm9yIHRoaXMuICBHaXZlbiBhCiYjNDM7ICogcG9zaXRpdmUgaGFzaGVkIGRlbnRyeSwgaXQgY3JlYXRlcyBhIHNlY29uZCBpbi1sb29rdXAgZGVudHJ5LgomIzQzOyAqIEJlY2F1c2UgdGhlIG9yaWdpbmFsIGRlbnRyeSBleGlzdHMsIG5vIG90aGVyIHRocmVhZCB3aWxsIHRyeSB0bwomIzQzOyAqIGNyZWF0ZSBhbiBpbi1sb29rdXAgZGVudHJ5LCBzbyB0aGVyZSBjYW4gYmUgbm8gcmFjZSBpbiB0aGlzIGNyZWF0ZS4KJiM0MzsgKgomIzQzOyAqIFRoZSBjYWxsZXIgc2hvdWxkIGRfbW92ZSgpIHRoZSBvcmlnaW5hbCB0byBhIG5ldyBuYW1lLCBvZnRlbiB2aWEgYQomIzQzOyAqIHJlbmFtZSByZXF1ZXN0LCBhbmQgc2hvdWxkIGNhbGwgZF9sb29rdXBfZG9uZSgpIG9uIHRoZSBuZXdseSBjcmVhdGVkCiYjNDM7ICogZGVudHJ5LiAgSWYgdGhlIG5ldyBpcyBpbnN0YW50aWF0ZWQgdGhlbiB0aGUgb2xkIE1VU1QgZWl0aGVyIGJlIG1vdmVkCiYjNDM7ICogb3IgZHJvcHBlZC4KJiM0MzsgKgomIzQzOyAqIFBhcmVudCBtdXN0IGJlIGxvY2tlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IGFuIGluLWxvb2t1cCBkZW50cnksIG9yIC1FTk9NRU0uCiYjNDM7ICovCiYjNDM7c3RydWN0IGRlbnRyeSAqZF9kdXBsaWNhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGhhc2ggPSBkZW50cnktJmd0O2RfbmFtZS5oYXNoOwomIzQzOwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZW50cnktJmd0O2RfcGFyZW50OwomIzQzOwlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYiA9IGluX2xvb2t1cF9oYXNoKHBhcmVudCwgaGFzaCk7CiYjNDM7CXN0cnVjdCBkZW50cnkgKm5ldyA9IF9fZF9hbGxvYyhwYXJlbnQtJmd0O2Rfc2IsICZhbXA7ZGVudHJ5LSZndDtkX25hbWUpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIW5ldykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsKJiM0MzsJbmV3LSZndDtkX2ZsYWdzIHw9IERDQUNIRV9QQVJfTE9PS1VQOwomIzQzOwlsb2NrX21hcF9hY3F1aXJlX3RyeSgmYW1wO25ldy0mZ3Q7bG9va3VwX21hcCk7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3BhcmVudC0mZ3Q7ZF9sb2NrKTsKJiM0MzsJbmV3LSZndDtkX3BhcmVudCA9IGRnZXRfZGxvY2socGFyZW50KTsKJiM0MzsJaGxpc3RfYWRkX2hlYWQoJmFtcDtuZXctJmd0O2Rfc2liLCAmYW1wO3BhcmVudC0mZ3Q7ZF9jaGlsZHJlbik7CiYjNDM7CWlmIChwYXJlbnQtJmd0O2RfZmxhZ3MgJmFtcDsgRENBQ0hFX0RJU0NPTk5FQ1RFRCkKJiM0MzsJCW5ldy0mZ3Q7ZF9mbGFncyB8PSBEQ0FDSEVfRElTQ09OTkVDVEVEOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3BhcmVudC0mZ3Q7ZF9sb2NrKTsKJiM0MzsKJiM0MzsJaGxpc3RfYmxfbG9jayhiKTsKJiM0MzsJaGxpc3RfYmxfYWRkX2hlYWQoJmFtcDtuZXctJmd0O2RfaW5fbG9va3VwX2hhc2gsIGIpOwomIzQzOwlobGlzdF9ibF91bmxvY2soYik7CiYjNDM7CXJldHVybiBuZXc7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woZF9kdXBsaWNhdGUpOwomIzQzOwogc3RydWN0IGRlbnRyeSAqZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJcmV0dXJuIF9fZF9hbGxvYyhzYiwgTlVMTCk7CkBAIC0yMTY4LDcgJiM0MzsyMjI0LDYgQEAgc3RhdGljIHZvaWQgX19kX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKICAqIChvciBvdGhlcndpc2Ugc2V0KSBieSB0aGUgY2FsbGVyIHRvIGluZGljYXRlIHRoYXQgaXQgaXMgbm93CiAgKiBpbiB1c2UgYnkgdGhlIGRjYWNoZS4KICAqLwotIAogdm9pZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIHsKIAlCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZW50cnkpKTsKQEAgLTI3NTAsNiAmIzQzOzI4MDUsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGVuZF9kaXJfYWRkKHN0cnVjdCBpbm9kZSAqZGlyLCB1bnNpZ25lZCBpbnQgbikKIHN0YXRpYyB2b2lkIGRfd2FpdF9sb29rdXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCWlmIChsaWtlbHkoZF9pbl9sb29rdXAoZGVudHJ5KSkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUZWxsIGxvY2tkZXAgd2Ugd2lsbCB3YWl0IGZvciB0aGUgbG9va3VwIGxvY2ssIGFmdGVyCiYjNDM7CQkgKiBkcm9wcGluZyAtJmd0O2RfbG9jaywgYnV0IHdvbiYjMzk7dCBhY3R1YWxseSB0YWtlIGl0LgomIzQzOwkJICovCiYjNDM7CQlzcGluX3JlbGVhc2UoJmFtcDtkZW50cnktJmd0O2RfbG9jay5kZXBfbWFwLCAwKTsKJiM0MzsJCWxvY2tfbWFwX3N5bmMoJmFtcDtkZW50cnktJmd0O2xvb2t1cF9tYXApOwomIzQzOwkJc3Bpbl9hY3F1aXJlKCZhbXA7ZGVudHJ5LSZndDtkX2xvY2suZGVwX21hcCwgMCwgMSwgX1RISVNfSVBfKTsKJiM0MzsKIAkJZGVudHJ5LSZndDtkX2ZsYWdzIHw9IERDQUNIRV9MT09LVVBfV0FJVEVSUzsKIAkJd2FpdF92YXJfZXZlbnRfc3BpbmxvY2soJmFtcDtkZW50cnktJmd0O2RfZmxhZ3MsCiAJCQkJCSFkX2luX2xvb2t1cChkZW50cnkpLApAQCAtMjc1Nyw4ICYjNDM7MjgyMCwxNiBAQCBzdGF0aWMgdm9pZCBkX3dhaXRfbG9va3VwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAl9CiB9CiAKLXN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LAotCQkJCWNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQomIzQzOy8qIFdoYXQgdG8gZG8gd2hlbiBfX2RfYWxsb2NfcGFyYWxsZWwgZmluZHMgYSBkX2luX2xvb2t1cCBkZW50cnkgKi8KJiM0MztlbnVtIGFsbG9jX3BhcmEgewomIzQzOwlBTExPQ19QQVJBX1dBSVQsCiYjNDM7CUFMTE9DX1BBUkFfRkFJTCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUKJiM0MztzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LAomIzQzOwkJCQkgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAomIzQzOwkJCQkgIGVudW0gYWxsb2NfcGFyYSBob3cpCiB7CiAJdW5zaWduZWQgaW50IGhhc2ggPSBuYW1lLSZndDtoYXNoOwogCXN0cnVjdCBobGlzdF9ibF9oZWFkICpiID0gaW5fbG9va3VwX2hhc2gocGFyZW50LCBoYXNoKTsKQEAgLTI4MzEsNiAmIzQzOzI5MDIsMTIgQEAgc3RydWN0IGRlbnRyeSAqZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCiAJCQlzcGluX3VubG9jaygmYW1wO2RlbnRyeS0mZ3Q7ZF9sb2NrKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KJiM0MzsJCWlmICh1bmxpa2VseShob3cgPT0gQUxMT0NfUEFSQV9GQUlMKSkgewomIzQzOwkJCS8qIG11c3RuJiMzOTt0IHdhaXQgZm9yIGNvbmN1cnJlbnQgbG9va3VwIHRvIGNvbXBsZXRlICovCiYjNDM7CQkJc3Bpbl91bmxvY2soJmFtcDtkZW50cnktJmd0O2RfbG9jayk7CiYjNDM7CQkJZHB1dChuZXcpOwomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FV09VTERCTE9DSyk7CiYjNDM7CQl9CiAJCS8qCiAJCSAqIHNvbWVib2R5IGlzIGxpa2VseSB0byBiZSBzdGlsbCBkb2luZyBsb29rdXAgZm9yIGl0OwogCQkgKiBwaW4gaXQgYW5kIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNoCkBAIC0yODU4LDE0ICYjNDM7MjkzNSw3NyBAQCBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCwKIAl9CiAJaGxpc3RfYmxfYWRkX2hlYWQoJmFtcDtuZXctJmd0O2RfaW5fbG9va3VwX2hhc2gsIGIpOwogCWhsaXN0X2JsX3VubG9jayhiKTsKJiM0MzsJbG9ja19tYXBfYWNxdWlyZV90cnkoJmFtcDtuZXctJmd0O2xvb2t1cF9tYXApOwogCXJldHVybiBuZXc7CiBtaXNtYXRjaDoKIAlzcGluX3VubG9jaygmYW1wO2RlbnRyeS0mZ3Q7ZF9sb2NrKTsKIAlkcHV0KGRlbnRyeSk7CiAJZ290byByZXRyeTsKIH0KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkX2FsbG9jX3BhcmFsbGVsKCkgLSBhbGxvY2F0ZSBhIG5ldyBkZW50cnkgYW5kIGVuc3VyZSB1bmlxdWVuZXNzCiYjNDM7ICogQHBhcmVudDogZGVudHJ5IG9mIHRoZSBwYXJlbnQKJiM0MzsgKiBAbmFtZTogICBuYW1lIG9mIHRoZSBkZW50cnkgd2l0aGluIHRoYXQgcGFyZW50LgomIzQzOyAqCiYjNDM7ICogQSBuZXcgZGVudHJ5IGlzIGFsbG9jYXRlZCBhbmQsIHByb3ZpZGluZyBpdCBpcyB1bmlxdWUsIGFkZGVkIHRvIHRoZQomIzQzOyAqIHJlbGV2YW50IGluZGV4LgomIzQzOyAqIElmIGFuIGV4aXN0aW5nIGRlbnRyeSBpcyBmb3VuZCB3aXRoIHRoZSBzYW1lIHBhcmVudC9uYW1lIHRoYXQgaXMKJiM0MzsgKiBub3QgZF9pbl9sb29rdXAoKSwgdGhlbiB0aGF0IGlzIHJldHVybmVkIGluc3RlYWQuCiYjNDM7ICogSWYgdGhlIGV4aXN0aW5nIGRlbnRyeSBpcyBkX2luX2xvb2t1cCgpLCBkX2FsbG9jX3BhcmFsbGVsKCkgd2FpdHMgZm9yCiYjNDM7ICogdGhhdCBsb29rdXAgdG8gY29tcGxldGUgYmVmb3JlIHJldHVybmluZyB0aGUgZGVudHJ5IGFuZCB0aGVuIGVuc3VyZXMgdGhlCiYjNDM7ICogbWF0Y2ggaXMgc3RpbGwgdmFsaWQuCiYjNDM7ICogVGh1cyBpZiB0aGUgcmV0dXJuZWQgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCkgdGhlbiB0aGUgY2FsbGVyIGhhcwomIzQzOyAqIGV4Y2x1c2l2ZSBhY2Nlc3MgdW50aWwgaXQgY29tcGxldGVzIHRoZSBsb29rdXAuCiYjNDM7ICogSWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBub3QgZF9pbl9sb29rdXAoKSB0aGVuIGEgbG9va3VwIGhhcwomIzQzOyAqIGFscmVhZHkgY29tcGxldGVkLgomIzQzOyAqCiYjNDM7ICogVGhlIEBuYW1lIG11c3QgYWxyZWFkeSBoYXZlIC0mZ3Q7aGFzaCBzZXQsIGFzIGNhbiBiZSBhY2hpZXZlZAomIzQzOyAqIGJ5IGUuZy4gdHJ5X2xvb2t1cF9ub3Blcm0oKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IHRoZSBkZW50cnksIHdoZXRoZXIgZm91bmQgb3IgYWxsb2NhdGVkLCBvciBhbiBlcnJvciAlLUVOT01FTS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCwKJiM0MzsJCQkJY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19kX2FsbG9jX3BhcmFsbGVsKHBhcmVudCwgbmFtZSwgQUxMT0NfUEFSQV9XQUlUKTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MKGRfYWxsb2NfcGFyYWxsZWwpOwogCiYjNDM7LyoqCiYjNDM7ICogZF9hbGxvY190cnlsb2NrKCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgbmV3IGRlbnRyeQomIzQzOyAqIEBwYXJlbnQ6IGRlbnRyeSBvZiB0aGUgcGFyZW50CiYjNDM7ICogQG5hbWU6ICAgbmFtZSBvZiB0aGUgZGVudHJ5IHdpdGhpbiB0aGF0IHBhcmVudC4KJiM0MzsgKgomIzQzOyAqIEEgbmV3IGRlbnRyeSBpcyBhbGxvY2F0ZWQgYW5kLCBwcm92aWRpbmcgaXQgaXMgdW5pcXVlLCBhZGRlZCB0byB0aGUKJiM0MzsgKiByZWxldmFudCBpbmRleC4KJiM0MzsgKiBJZiBhbiBleGlzdGluZyBkZW50cnkgaXMgZm91bmQgd2l0aCB0aGUgc2FtZSBwYXJlbnQvbmFtZSB0aGF0IGlzCiYjNDM7ICogbm90IGRfaW5fbG9va3VwKCkgdGhlbiB0aGF0IGlzIHJldHVybmVkIGluc3RlYWQuCiYjNDM7ICogSWYgdGhlIGV4aXN0aW5nIGRlbnRyeSBpcyBkX2luX2xvb2t1cCgpLCBkX2FsbG9jX3RyeWxvY2soKQomIzQzOyAqIHJldHVybnMgd2l0aCBlcnJvciAlLUVXT1VMREJMT0NLLgomIzQzOyAqIFRodXMgaWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBkX2luX2xvb2t1cCgpIHRoZW4gdGhlIGNhbGxlciBoYXMKJiM0MzsgKiBleGNsdXNpdmUgYWNjZXNzIHVudGlsIGl0IGNvbXBsZXRlcyB0aGUgbG9va3VwLgomIzQzOyAqIElmIHRoZSByZXR1cm5lZCBkZW50cnkgaXMgbm90IGRfaW5fbG9va3VwKCkgdGhlbiBhIGxvb2t1cCBoYXMKJiM0MzsgKiBhbHJlYWR5IGNvbXBsZXRlZC4KJiM0MzsgKgomIzQzOyAqIFRoZSBAbmFtZSBuZWVkIG5vdCBhbHJlYWR5IGhhdmUgLSZndDtoYXNoIHNldC4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IHRoZSBkZW50cnksIHdoZXRoZXIgZm91bmQgb3IgYWxsb2NhdGVkLCBvciBhbiBlcnJvcgomIzQzOyAqICAgICUtRU5PTUVNLCAlLUVXT1VMREJMT0NLLCAlLUVBQ0NFUyAoZm9yIGEgYmFkIG5hbWUpIG9yCiYjNDM7ICogICAgYW55dGhpbmcgcmV0dXJuZWQgYnkgLSZndDtkX2hhc2goKS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3RyeWxvY2soc3RydWN0IGRlbnRyeSAqcGFyZW50LAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcXN0ciAqbmFtZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZW50cnkgKmRlOwomIzQzOwomIzQzOwlkZSA9IHRyeV9sb29rdXBfbm9wZXJtKG5hbWUsIHBhcmVudCk7CiYjNDM7CWlmICghZGUpCiYjNDM7CQlkZSA9IF9fZF9hbGxvY19wYXJhbGxlbChwYXJlbnQsIG5hbWUsIEFMTE9DX1BBUkFfRkFJTCk7CiYjNDM7CXJldHVybiBkZTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChkX2FsbG9jX3RyeWxvY2spOwomIzQzOwogLyoKICAqIE1vdmUgZGVudHJ5IGZyb20gaW4tbG9va3VwIHN0YXRlIHRvIGJ1c3ktbmVnYXRpdmUgb25lLgogICoKQEAgLTI4OTQsNiAmIzQzOzMwMzQsNyBAQCBzdGF0aWMgdm9pZCBfX2RfbG9va3VwX3VuaGFzaChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJYiA9IGluX2xvb2t1cF9oYXNoKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQsIGRlbnRyeS0mZ3Q7ZF9uYW1lLmhhc2gpOwogCWhsaXN0X2JsX2xvY2soYik7CiAJZGVudHJ5LSZndDtkX2ZsYWdzICZhbXA7PSB+RENBQ0hFX1BBUl9MT09LVVA7CiYjNDM7CWxvY2tfbWFwX3JlbGVhc2UoJmFtcDtkZW50cnktJmd0O2xvb2t1cF9tYXApOwogCV9faGxpc3RfYmxfZGVsKCZhbXA7ZGVudHJ5LSZndDtkX2luX2xvb2t1cF9oYXNoKTsKIAlobGlzdF9ibF91bmxvY2soYik7CiAJZGVudHJ5LSZndDt3YWl0ZXJzID0gTlVMTDsKQEAgLTI5MzEsMTUgJiM0MzszMDcyLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RfYWRkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKIAl9CiAJaWYgKHVubGlrZWx5KG9wcykpCiAJCWRfc2V0X2Rfb3AoZGVudHJ5LCBvcHMpOwotCWlmIChpbm9kZSkgewotCQl1bnNpZ25lZCBhZGRfZmxhZ3MgPSBkX2ZsYWdzX2Zvcl9pbm9kZShpbm9kZSk7Ci0JCWhsaXN0X2FkZF9oZWFkKCZhbXA7ZGVudHJ5LSZndDtkX2FsaWFzLCAmYW1wO2lub2RlLSZndDtpX2RlbnRyeSk7Ci0JCXJhd193cml0ZV9zZXFjb3VudF9iZWdpbigmYW1wO2RlbnRyeS0mZ3Q7ZF9zZXEpOwotCQlfX2Rfc2V0X2lub2RlX2FuZF90eXBlKGRlbnRyeSwgaW5vZGUsIGFkZF9mbGFncyk7Ci0JCXJhd193cml0ZV9zZXFjb3VudF9lbmQoJmFtcDtkZW50cnktJmd0O2Rfc2VxKTsKLQkJZnNub3RpZnlfdXBkYXRlX2ZsYWdzKGRlbnRyeSk7Ci0JfQotCV9fZF9yZWhhc2goZGVudHJ5KTsKJiM0MzsJaWYgKGlub2RlKQomIzQzOwkJX19kX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwomIzQzOwlpZiAoZF91bmhhc2hlZChkZW50cnkpKQomIzQzOwkJX19kX3JlaGFzaChkZW50cnkpOwogCWlmIChkaXIpIHsKIAkJZW5kX2Rpcl9hZGQoZGlyLCBuKTsKIAkJX19kX3dha2VfaW5fbG9va3VwX3dhaXRlcnMoZGVudHJ5KTsKQEAgLTMyNDEsNyAmIzQzOzMzNzcsNyBAQCBzdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhc19vcHMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCWlmIChJU19FUlIoaW5vZGUpKQogCQlyZXR1cm4gRVJSX0NBU1QoaW5vZGUpOwogCi0JQlVHX09OKCFkX3VuaGFzaGVkKGRlbnRyeSkpOwomIzQzOwlCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSk7CiAKIAlpZiAoIWlub2RlKQogCQlnb3RvIG91dDsKQEAgLTMyOTcsNiAmIzQzOzM0MzMsOCBAQCBzdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhc19vcHMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogICogQGlub2RlOiAgdGhlIGlub2RlIHdoaWNoIG1heSBoYXZlIGEgZGlzY29ubmVjdGVkIGRlbnRyeQogICogQGRlbnRyeTogYSBuZWdhdGl2ZSBkZW50cnkgd2hpY2ggd2Ugd2FudCB0byBwb2ludCB0byB0aGUgaW5vZGUuCiAgKgomIzQzOyAqIEBkZW50cnkgbXVzdCBiZSBuZWdhdGl2ZSBhbmQgbWF5IGJlIGluLWxvb2t1cCBvciB1bmhhc2hlZCBvciBoYXNoZWQuCiYjNDM7ICoKICAqIElmIGlub2RlIGlzIGEgZGlyZWN0b3J5IGFuZCBoYXMgYW4gSVNfUk9PVCBhbGlhcywgdGhlbiBkX21vdmUgdGhhdCBpbgogICogcGxhY2Ugb2YgdGhlIGdpdmVuIGRlbnRyeSBhbmQgcmV0dXJuIGl0LCBlbHNlIHNpbXBseSBkX2FkZCB0aGUgaW5vZGUKICAqIHRvIHRoZSBkZW50cnkgYW5kIHJldHVybiBOVUxMLgpAQCAtMzMwNCwxNiAmIzQzOzM0NDIsMTQgQEAgc3RydWN0IGRlbnRyeSAqZF9zcGxpY2VfYWxpYXNfb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKICAqIElmIGEgbm9uLUlTX1JPT1QgZGlyZWN0b3J5IGlzIGZvdW5kLCB0aGUgZmlsZXN5c3RlbSBpcyBjb3JydXB0LCBhbmQKICAqIHdlIHNob3VsZCBlcnJvciBvdXQ6IGRpcmVjdG9yaWVzIGNhbiYjMzk7dCBoYXZlIG11bHRpcGxlIGFsaWFzZXMuCiAgKgotICogVGhpcyBpcyBuZWVkZWQgaW4gdGhlIGxvb2t1cCByb3V0aW5lIG9mIGFueSBmaWxlc3lzdGVtIHRoYXQgaXMgZXhwb3J0YWJsZQotICogKHZpYSBrbmZzZCkgc28gdGhhdCB3ZSBjYW4gYnVpbGQgZGNhY2hlIHBhdGhzIHRvIGRpcmVjdG9yaWVzIGVmZmVjdGl2ZWx5LgomIzQzOyAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgLSZndDtsb29rdXAoKSBhbmQgdG8KJiM0MzsgKiBpbnN0YW50aWF0ZSB0aGUgcmVzdWx0IG9mIC0mZ3Q7bWtkaXIoKSwgaXMgb2Z0ZW4gdXNlZnVsIGZvcgomIzQzOyAqIC0mZ3Q7YXRvbWljX29wZW4sIGFuZCBtYXkgYmUgdXNlZCB0byBpbnN0YW50aWF0ZSBvdGhlciBvYmplY3RzLgogICoKICAqIElmIGEgZGVudHJ5IHdhcyBmb3VuZCBhbmQgbW92ZWQsIHRoZW4gaXQgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UgTlVMTAotICogaXMgcmV0dXJuZWQuICBUaGlzIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHJldHVybiB2YWx1ZSBvZiAtJmd0O2xvb2t1cC4KJiM0MzsgKiBpcyByZXR1cm5lZC4gIFRoaXMgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIG9mIC0mZ3Q7bG9va3VwIGFuZAomIzQzOyAqIC0mZ3Q7bWtkaXIuCiAgKgotICogQ2x1c3RlciBmaWxlc3lzdGVtcyBtYXkgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggYSBuZWdhdGl2ZSwgaGFzaGVkIGRlbnRyeS4KLSAqIEluIHRoYXQgY2FzZSwgd2Uga25vdyB0aGF0IHRoZSBpbm9kZSB3aWxsIGJlIGEgcmVndWxhciBmaWxlLCBhbmQgYWxzbyB0aGlzCi0gKiB3aWxsIG9ubHkgb2NjdXIgZHVyaW5nIGF0b21pY19vcGVuLiBTbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgZGVudHJ5Ci0gKiBiZWluZyBhbHJlYWR5IGhhc2hlZCBvbmx5IGluIHRoZSBmaW5hbCBjYXNlLgogICovCiBzdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAyMGE2NTM0ZWEzZWZmLi5lOTc4YTc1ZWI4YTE0IDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTE5MzMsNyAmIzQzOzE5MzMsNyBAQCBzdGF0aWMgbm9pbmxpbmUgc3RydWN0IGRlbnRyeSAqbG9va3VwX3Nsb3coY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRpci0mZ3Q7ZF9pbm9kZTsKIAlzdHJ1Y3QgZGVudHJ5ICpyZXM7CiAJaW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpOwotCXJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyk7CiYjNDM7CXJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyB8IExPT0tVUF9TSEFSRUQpOwogCWlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpOwogCXJldHVybiByZXM7CiB9CkBAIC0xOTQ3LDcgJiM0MzsxOTQ3LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9zbG93X2tpbGxhYmxlKGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogCiAJaWYgKGlub2RlX2xvY2tfc2hhcmVkX2tpbGxhYmxlKGlub2RlKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlRSKTsKLQlyZXMgPSBfX2xvb2t1cF9zbG93KG5hbWUsIGRpciwgZmxhZ3MpOwomIzQzOwlyZXMgPSBfX2xvb2t1cF9zbG93KG5hbWUsIGRpciwgZmxhZ3MgfCBMT09LVVBfU0hBUkVEKTsKIAlpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTsKIAlyZXR1cm4gcmVzOwogfQpAQCAtMjk0Niw4ICYjNDM7Mjk0Niw4IEBAIHN0cnVjdCBkZW50cnkgKnN0YXJ0X2Rpcm9wKHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IHFzdHIgKm5hbWUsCiAgKiBlbmRfZGlyb3AgLSBzaWduYWwgY29tcGxldGlvbiBvZiBhIGRpcm9wCiAgKiBAZGU6IHRoZSBkZW50cnkgd2hpY2ggd2FzIHJldHVybmVkIGJ5IHN0YXJ0X2Rpcm9wIG9yIHNpbWlsYXIuCiAgKgotICogSWYgdGhlIGRlIGlzIGFuIGVycm9yLCBub3RoaW5nIGhhcHBlbnMuIE90aGVyd2lzZSBhbnkgbG9jayB0YWtlbiB0bwotICogcHJvdGVjdCB0aGUgZGVudHJ5IGlzIGRyb3BwZWQgYW5kIHRoZSBkZW50cnkgaXRzZWxmIGlzIHJlbGVhc2UgKGRwdXQoKSkuCiYjNDM7ICogSWYgdGhlIEBkZSBpcyBhbiBlcnJvciwgbm90aGluZyBoYXBwZW5zLiBPdGhlcndpc2UgYW55IGxvY2sgdGFrZW4gdG8KJiM0MzsgKiBwcm90ZWN0IHRoZSBkZW50cnkgaXMgZHJvcHBlZCBhbmQgdGhlIGRlbnRyeSBpdHNlbGYgaXMgcmVsZWFzZWQgKGRwdXQoKSkuCiAgKi8KIHZvaWQgZW5kX2Rpcm9wKHN0cnVjdCBkZW50cnkgKmRlKQogewpAQCAtMzIxMCw3ICYjNDM7MzIxMCw3IEBAIEVYUE9SVF9TWU1CT0wobG9va3VwX29uZSk7CiAvKioKICAqIGxvb2t1cF9vbmVfdW5sb2NrZWQgLSBsb29rdXAgc2luZ2xlIHBhdGhuYW1lIGNvbXBvbmVudAogICogQGlkbWFwOglpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGxvb2t1cCBpcyBwZXJmb3JtZWQgZnJvbQotICogQG5hbWU6CXFzdHIgb2xkaW5nIHBhdGhuYW1lIGNvbXBvbmVudCB0byBsb29rdXAKJiM0MzsgKiBAbmFtZToJcXN0ciBob2xkaW5nIHBhdGhuYW1lIGNvbXBvbmVudCB0byBsb29rdXAKICAqIEBiYXNlOgliYXNlIGRpcmVjdG9yeSB0byBsb29rdXAgZnJvbQogICoKICAqIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGluLWtlcm5lbCBmaWxlc3lzdGVtIGNsaWVudHMgc3VjaCBhcyBmaWxlIHNlcnZlcnMuCkBAIC0zMjQzLDcgJiM0MzszMjQzLDcgQEAgRVhQT1JUX1NZTUJPTChsb29rdXBfb25lX3VubG9ja2VkKTsKIC8qKgogICogbG9va3VwX29uZV9wb3NpdGl2ZV9raWxsYWJsZSAtIGxvb2t1cCBzaW5nbGUgcGF0aG5hbWUgY29tcG9uZW50CiAgKiBAaWRtYXA6CWlkbWFwIG9mIHRoZSBtb3VudCB0aGUgbG9va3VwIGlzIHBlcmZvcm1lZCBmcm9tCi0gKiBAbmFtZToJcXN0ciBvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cAomIzQzOyAqIEBuYW1lOglxc3RyIGhvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cAogICogQGJhc2U6CWJhc2UgZGlyZWN0b3J5IHRvIGxvb2t1cCBmcm9tCiAgKgogICogVGhpcyBoZWxwZXIgd2lsbCB5aWVsZCBFUlJfUFRSKC1FTk9FTlQpIG9uIG5lZ2F0aXZlcy4gVGhlIGhlbHBlciByZXR1cm5zCkBAIC0zMjU5LDcgJiM0MzszMjU5LDcgQEAgRVhQT1JUX1NZTUJPTChsb29rdXBfb25lX3VubG9ja2VkKTsKICAqIHRoZSBpX3J3c2VtIGl0c2VsZiBpZiBuZWNlc3NhcnkuICBJZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIG9yCiAgKiBkZWxpdmVyZWQsIGl0IHdpbGwgcmV0dXJuICUtRUlOVFIgaWYgdGhlIGxvY2sgaXMgbmVlZGVkLgogICoKLSAqIFJldHVybnM6IEEgZGVudHJ5LCBwb3NzaWJseSBuZWdhdGl2ZSwgb3IKJiM0MzsgKiBSZXR1cm5zOiBBIHBvc2l0aXZlIGRlbnRyeSwgb3IKICAqCSAgIC0gc2FtZSBlcnJvcnMgYXMgbG9va3VwX29uZV91bmxvY2tlZCgpIG9yCiAgKgkgICAtIEVSUl9QVFIoLUVJTlRSKSBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLgogICovCkBAIC0zMzgxLDcgJiM0MzszMzgxLDcgQEAgc3RydWN0IGRlbnRyeSAqbG9va3VwX25vcGVybV9wb3NpdGl2ZV91bmxvY2tlZChzdHJ1Y3QgcXN0ciAqbmFtZSwKIEVYUE9SVF9TWU1CT0wobG9va3VwX25vcGVybV9wb3NpdGl2ZV91bmxvY2tlZCk7CiAKIC8qKgotICogc3RhcnRfY3JlYXRpbmcgLSBwcmVwYXJlIHRvIGNyZWF0ZSBhIGdpdmVuIG5hbWUgd2l0aCBwZXJtaXNzaW9uIGNoZWNraW5nCiYjNDM7ICogc3RhcnRfY3JlYXRpbmcgLSBwcmVwYXJlIHRvIGFjY2VzcyBvciBjcmVhdGUgYSBnaXZlbiBuYW1lIHdpdGggcGVybWlzc2lvbiBjaGVja2luZwogICogQGlkbWFwOiAgaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gcHJlcGFyZSB0byBjcmVhdGUgdGhlIG5hbWUKICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWQKQEAgLTM0MTMsOCAmIzQzOzM0MTMsOCBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nKTsKICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBmaW5kIHRoZSBuYW1lCiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSByZW1vdmVkCiAgKgotICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmcKLSAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LiAgUGVybWlzc2lvbiBjaGVja2luZyAoTUFZX0VYRUMpIGlzIHBlcmZvcm1lZAomIzQzOyAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaXMgcGVyZm9ybWVkIHByaW9yIHRvIHJlbW92aW5nIGFuIG9iamVjdAomIzQzOyAqIGZyb20gYSBkaXJlY3RvcnkuICBQZXJtaXNzaW9uIGNoZWNraW5nIChNQVlfRVhFQykgaXMgcGVyZm9ybWVkCiAgKiBhZ2FpbnN0IEBpZG1hcC4KICAqCiAgKiBJZiB0aGUgbmFtZSBkb2VzbiYjMzk7dCBleGlzdCwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuCkBAIC0zNDQwLDcgJiM0MzszNDQwLDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZyk7CiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gcHJlcGFyZSB0byBjcmVhdGUgdGhlIG5hbWUKICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWQKICAqCi0gKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGluIHBlcmZvcm1lZCBwcmlvciB0byBjcmVhdGluZwomIzQzOyAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaXMgcGVyZm9ybWVkIHByaW9yIHRvIGNyZWF0aW5nCiAgKiBhbiBvYmplY3QgaW4gYSBkaXJlY3RvcnkuICBQZXJtaXNzaW9uIGNoZWNraW5nIChNQVlfRVhFQykgaXMgcGVyZm9ybWVkCiAgKiBhZ2FpbnN0IEBpZG1hcC4KICAqCkBAIC0zNDY5LDcgJiM0MzszNDY5LDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9jcmVhdGluZ19raWxsYWJsZSk7CiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gZmluZCB0aGUgbmFtZQogICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgcmVtb3ZlZAogICoKLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIHJlbW92aW5nCiYjNDM7ICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmcKICAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LiAgUGVybWlzc2lvbiBjaGVja2luZyAoTUFZX0VYRUMpIGlzIHBlcmZvcm1lZAogICogYWdhaW5zdCBAaWRtYXAuCiAgKgpAQCAtMzQ5OSw3ICYjNDM7MzQ5OSw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfcmVtb3Zpbmdfa2lsbGFibGUpOwogICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIHByZXBhcmUgdG8gY3JlYXRlIHRoZSBuYW1lCiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSBjcmVhdGVkCiAgKgotICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmcKJiM0MzsgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byBjcmVhdGluZwogICogYW4gb2JqZWN0IGluIGEgZGlyZWN0b3J5LgogICoKICAqIElmIHRoZSBuYW1lIGFscmVhZHkgZXhpc3RzLCBhIHBvc2l0aXZlIGRlbnRyeSBpcyByZXR1cm5lZC4KQEAgLTM1MjIsNyAmIzQzOzM1MjIsNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX25vcGVybSk7CiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gZmluZCB0aGUgbmFtZQogICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgcmVtb3ZlZAogICoKLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIHJlbW92aW5nCiYjNDM7ICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmcKICAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LgogICoKICAqIElmIHRoZSBuYW1lIGRvZXNuJiMzOTt0IGV4aXN0LCBhbiBlcnJvciBpcyByZXR1cm5lZC4KQEAgLTM1NDMsMTEgJiM0MzszNTQzLDExIEBAIHN0cnVjdCBkZW50cnkgKnN0YXJ0X3JlbW92aW5nX25vcGVybShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCiBFWFBPUlRfU1lNQk9MKHN0YXJ0X3JlbW92aW5nX25vcGVybSk7CiAKIC8qKgotICogc3RhcnRfY3JlYXRpbmdfZGVudHJ5IC0gcHJlcGFyZSB0byBjcmVhdGUgYSBnaXZlbiBkZW50cnkKLSAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRlbnRyeSBzaG91bGQgYmUgcmVtb3ZlZAotICogQGNoaWxkOiAgdGhlIGRlbnRyeSB0byBiZSByZW1vdmVkCiYjNDM7ICogc3RhcnRfY3JlYXRpbmdfZGVudHJ5IC0gcHJlcGFyZSB0byBhY2Nlc3Mgb3IgY3JlYXRlIGEgZ2l2ZW4gZGVudHJ5CiYjNDM7ICogQHBhcmVudDogZGlyZWN0b3J5IG9mIGRlbnRyeQomIzQzOyAqIEBjaGlsZDogIHRoZSBkZW50cnkgdG8gYmUgcHJlcGFyZWQKICAqCi0gKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluIG90aGVyIGRpcm9wcyBhbmQKJiM0MzsgKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluc3Qgb3RoZXIgZGlyb3BzIGFuZAogICogdGhlIHZhbGlkaXR5IG9mIHRoZSBkZW50cnkgaXMgY2hlY2tlZDogY29ycmVjdCBwYXJlbnQgYW5kIHN0aWxsIGhhc2hlZC4KICAqCiAgKiBJZiB0aGUgZGVudHJ5IGlzIHZhbGlkIGFuZCBuZWdhdGl2ZSBhIHJlZmVyZW5jZSBpcyB0YWtlbiBhbmQKQEAgLTM1ODAsNyAmIzQzOzM1ODAsNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX2RlbnRyeSk7CiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgZnJvbSB3aGljaCBkZW50cnkgc2hvdWxkIGJlIHJlbW92ZWQKICAqIEBjaGlsZDogIHRoZSBkZW50cnkgdG8gYmUgcmVtb3ZlZAogICoKLSAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW4gb3RoZXIgZGlyb3BzIGFuZAomIzQzOyAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW5zdCBvdGhlciBkaXJvcHMgYW5kCiAgKiB0aGUgdmFsaWRpdHkgb2YgdGhlIGRlbnRyeSBpcyBjaGVja2VkOiBjb3JyZWN0IHBhcmVudCBhbmQgc3RpbGwgaGFzaGVkLgogICoKICAqIElmIHRoZSBkZW50cnkgaXMgdmFsaWQgYW5kIHBvc2l0aXZlLCBhIHJlZmVyZW5jZSBpcyB0YWtlbiBhbmQKQEAgLTQ0NDAsMTIgJiM0Mzs0NDQwLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsCiAJaW50IGVycm9yLCBjcmVhdGVfZXJyb3I7CiAJdW1vZGVfdCBtb2RlOwogCWJvb2wgZ290X3dyaXRlOwomIzQzOwl1bnNpZ25lZCBpbnQgc2hhcmVkX2ZsYWc7CiAKIHJldHJ5OgogCW9wZW5fZmxhZyA9IG9wLSZndDtvcGVuX2ZsYWc7CiAJZ290X3dyaXRlID0gZmFsc2U7CiAJbW9kZSA9IG9wLSZndDttb2RlOwogCWNyZWF0ZV9lcnJvciA9IDA7CiYjNDM7CXNoYXJlZF9mbGFnID0gKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSA/IDAgOiBMT09LVVBfU0hBUkVEOwogCiAJaWYgKG9wZW5fZmxhZyAmYW1wOyAoT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSB8IE9fUkRXUikpIHsKIAkJZ290X3dyaXRlID0gIW1udF93YW50X3dyaXRlKG5kLSZndDtwYXRoLm1udCk7CkBAIC00NDU0LDEwICYjNDM7NDQ1NiwxMCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkgKiBhIGRpZmZlcmVudCBlcnJvcjsgd2UmIzM5O2xsIGJlIGRyb3BwaW5nIHRoaXMgb25lIGFueXdheS4KIAkJICovCiAJfQotCWlmIChvcGVuX2ZsYWcgJmFtcDsgT19DUkVBVCkKLQkJaW5vZGVfbG9jayhkaXJfaW5vZGUpOwotCWVsc2UKJiM0MzsJaWYgKHNoYXJlZF9mbGFnKQogCQlpbm9kZV9sb2NrX3NoYXJlZChkaXJfaW5vZGUpOwomIzQzOwllbHNlCiYjNDM7CQlpbm9kZV9sb2NrKGRpcl9pbm9kZSk7CiAKIAlpZiAodW5saWtlbHkoSVNfREVBRERJUihkaXJfaW5vZGUpKSkgewogCQlkZW50cnkgPSBFUlJfUFRSKC1FTk9FTlQpOwpAQCAtNDUyNiw3ICYjNDM7NDUyOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsCiAKIAlpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpyZXMgPSBkaXJfaW5vZGUtJmd0O2lfb3AtJmd0O2xvb2t1cChkaXJfaW5vZGUsIGRlbnRyeSwKLQkJCQkJCQkgICAgIG5kLSZndDtmbGFncyk7CiYjNDM7CQkJCQkJCSAgICAgbmQtJmd0O2ZsYWdzIHwgc2hhcmVkX2ZsYWcpOwogCQlkX2xvb2t1cF9kb25lKGRlbnRyeSk7CiAJCWlmICh1bmxpa2VseShyZXMpKSB7CiAJCQlpZiAoSVNfRVJSKHJlcykpIHsKQEAgLTQ1NzQsMTAgJiM0Mzs0NTc2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCWlmIChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfT1BFTkVEKQogCQkJZnNub3RpZnlfb3BlbihmaWxlKTsKIAl9Ci0JaWYgKChvcGVuX2ZsYWcgJmFtcDsgT19DUkVBVCkgfHwgY3JlYXRlX2Vycm9yKQotCQlpbm9kZV91bmxvY2soZGlyX2lub2RlKTsKLQllbHNlCiYjNDM7CWlmIChzaGFyZWRfZmxhZykKIAkJaW5vZGVfdW5sb2NrX3NoYXJlZChkaXJfaW5vZGUpOwomIzQzOwllbHNlCiYjNDM7CQlpbm9kZV91bmxvY2soZGlyX2lub2RlKTsKIAogCWlmIChnb3Rfd3JpdGUpCiAJCW1udF9kcm9wX3dyaXRlKG5kLSZndDtwYXRoLm1udCk7CmRpZmYgLS1naXQgYS9mcy9uZnMvdW5saW5rLmMgYi9mcy9uZnMvdW5saW5rLmMKaW5kZXggYjU3Y2ZhYTRkNTE2Zi4uYzhkNzEyMjA0ZTY0OSAxMDA2NDQKLS0tIGEvZnMvbmZzL3VubGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25mcy91bmxpbmsuYwpAQCAtNjcsNiAmIzQzOzY3LDcgQEAgc3RhdGljIHZvaWQgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlKHZvaWQgKmNhbGxkYXRhKQogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktJmd0O2Rfc2I7CiAKIAl1cF9yZWFkX25vbl9vd25lcigmYW1wO05GU19JKGRfaW5vZGUoZGVudHJ5LSZndDtkX3BhcmVudCkpLSZndDtybWRpcl9zZW0pOwomIzQzOwlkX2xvb2t1cF9hY3F1aXJlKGRlbnRyeSk7CiAJZF9sb29rdXBfZG9uZShkZW50cnkpOwogCW5mc19mcmVlX3VubGlua2RhdGEoZGF0YSk7CiAJZHB1dChkZW50cnkpOwpAQCAtMTU5LDYgJiM0MzsxNjAsOCBAQCBzdGF0aWMgaW50IG5mc19jYWxsX3VubGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZgogCQlyZXR1cm4gcmV0OwogCX0KIAlkYXRhLSZndDtkZW50cnkgPSBhbGlhczsKJiM0MzsJZF9sb29rdXBfcmVsZWFzZShhbGlhcyk7CiYjNDM7CiAJbmZzX2RvX2NhbGxfdW5saW5rKGlub2RlLCBkYXRhKTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCmluZGV4IDRiMWZmOTk2MDhlMDEuLmU3ZTNlZjA1MzEzYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaApAQCAtMTE2LDYgJiM0MzsxMTYsOCBAQCBzdHJ1Y3QgZGVudHJ5IHsKIAkJCQkJICogcG9zc2libGUhCiAJCQkJCSAqLwogCiYjNDM7CS8qIGxvY2tkZXAgdHJhY2tpbmcgb2YgRENBQ0hFX1BBUl9MT09LVVAgbG9ja3MgKi8KJiM0MzsJc3RydWN0IGxvY2tkZXBfbWFwCQlsb29rdXBfbWFwOwogCXN0cnVjdCBsaXN0X2hlYWQgZF9scnU7CQkvKiBMUlUgbGlzdCAqLwogCXN0cnVjdCBobGlzdF9ub2RlIGRfc2liOwkvKiBjaGlsZCBvZiBwYXJlbnQgbGlzdCAqLwogCXN0cnVjdCBobGlzdF9oZWFkIGRfY2hpbGRyZW47CS8qIG91ciBjaGlsZHJlbiAqLwpAQCAtMjU3LDcgJiM0MzsyNTksOSBAQCBleHRlcm4gdm9pZCBkX2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfYW5vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTsKJiM0MztleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfdHJ5bG9jayhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX3NwbGljZV9hbGlhcyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKJiM0MztzdHJ1Y3QgZGVudHJ5ICpkX2R1cGxpY2F0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogLyogd2VpcmQgcHJvY2ZzIG1lc3M7ICpOT1QqIGV4cG9ydGVkICovCiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLAogCQkJCQkgIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqKTsKQEAgLTU1Miw2ICYjNDM7NTU2LDM2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNpbXBsZV9wb3NpdGl2ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAKIHVuc2lnbmVkIGxvbmcgdmZzX3ByZXNzdXJlX3JhdGlvKHVuc2lnbmVkIGxvbmcgdmFsKTsKIAomIzQzOy8qKgomIzQzOyAqIGRfbG9va3VwX3JlbGVhc2UgLSByZWxlYXNlIG93bmVyc2hpcCBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrCiYjNDM7ICogQGRlbnRyeTogZGVudHJ5IHRoYXQgaXMgbG9ja2VkCiYjNDM7ICoKJiM0MzsgKiBJZiBhbiBpbi1sb29rdXAgZGVudHJ5IGlzIHRvIGJlIHBhc3NlZCB0byBhbm90aGVyIHRocmVhZCB3aGljaAomIzQzOyAqIHdpbGwgZHJvcCB0aGUgaW4tbG9va3VwIGxvY2ssIHRoZW4gZF9sb29rdXBfcmVsZWFzZSgpIG11c3QgYmUgY2FsbGVkCiYjNDM7ICogdG8gdGVsbCBsb2NrZGVwIHRoYXQgdGhpcyB0aHJlYWQgbm8gbG9jayBob2xkcyB0aGUgbG9jay4gIFRoZQomIzQzOyAqIHRocmVhZCB0aGF0IHJlY2VpdmVzIHRoZSBsb2NrIG11c3QgY2FsbCBkX2xvb2t1cF9hY3F1aXJlKCkgdG8KJiM0MzsgKiBhY3F1aXJlIHRoZSBsb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkX2xvb2t1cF9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKJiM0Mzt7CiYjNDM7CWlmIChkX2luX2xvb2t1cChkZW50cnkpKQomIzQzOwkJbG9ja19tYXBfcmVsZWFzZSgmYW1wO2RlbnRyeS0mZ3Q7bG9va3VwX21hcCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRfbG9va3VwX2FjcXVpcmUgLSBhY3F1aXJlIG93bmVyc2hpcCBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrCiYjNDM7ICogQGRlbnRyeTogZGVudHJ5IHRoYXQgaXMgbG9ja2VkCiYjNDM7ICoKJiM0MzsgKiBJZiBhbiBpbi1sb29rdXAgZGVudHJ5IHdhcyBwYXNzZWQgdG8gdGhpcyB0aHJlYWQsIHRoZQomIzQzOyAqIGRfbG9va3VwX2FjcXVpcmUoKSBtdXN0IGJlIGNhbGxlZCB0byB0ZWxsIGxvY2tkZXAgdGhhdCB0aGlzCiYjNDM7ICogdGhyZWFkIG5vdyBvd25zIHRoZSBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkX2xvb2t1cF9hY3F1aXJlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKJiM0Mzt7CiYjNDM7CWlmIChkX2luX2xvb2t1cChkZW50cnkpKQomIzQzOwkJbG9ja19tYXBfYWNxdWlyZV90cnkoJmFtcDtkZW50cnktJmd0O2xvb2t1cF9tYXApOwomIzQzO30KJiM0MzsKIC8qKgogICogZF9pbm9kZSAtIEdldCB0aGUgYWN0dWFsIGlub2RlIG9mIHRoaXMgZGVudHJ5CiAgKiBAZGVudHJ5OiBUaGUgZGVudHJ5IHRvIHF1ZXJ5CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25hbWVpLmggYi9pbmNsdWRlL2xpbnV4L25hbWVpLmgKaW5kZXggODZkNjU3YjI0ZmM2YS4uNjVmMGY1NzEyODg1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmFtZWkuaApAQCAtMzIsOCAmIzQzOzMyLDkgQEAgZW51bSB7IE1BWF9ORVNURURfTElOS1MgPSA4IH07CiAjZGVmaW5lIExPT0tVUF9DUkVBVEUJCUJJVCgxNykJLyogLi4uIGluIG9iamVjdCBjcmVhdGlvbiAqLwogI2RlZmluZSBMT09LVVBfRVhDTAkJQklUKDE4KQkvKiAuLi4gaW4gdGFyZ2V0IG11c3Qgbm90IGV4aXN0ICovCiAjZGVmaW5lIExPT0tVUF9SRU5BTUVfVEFSR0VUCUJJVCgxOSkJLyogLi4uIGluIGRlc3RpbmF0aW9uIG9mIHJlbmFtZSgpICovCiYjNDM7I2RlZmluZSBMT09LVVBfU0hBUkVECQlCSVQoMjApIC8qIFBhcmVudCBsb2NrIGlzIGhlbGQgc2hhcmVkICovCiAKLS8qIDQgc3BhcmUgYml0cyBmb3IgaW50ZW50ICovCiYjNDM7LyogMyBzcGFyZSBiaXRzIGZvciBpbnRlbnQgKi8KIAogLyogU2NvcGluZyBmbGFncyBmb3IgbG9va3VwLiAqLwogI2RlZmluZSBMT09LVVBfTk9fU1lNTElOS1MJQklUKDI0KSAvKiBObyBzeW1saW5rIGNyb3NzaW5nLiAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI5NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lIGlmIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHdhcnJhbnRlZC4gTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCBlc3BlY2lhbGx5IHRvIHVzZXJzcGFjZSwgYmVjYXVzZSBmcmFua2x5LCBLTVNBTiBzZXNzaW9ucyBhcmUgcmVzb3VyY2UgaG9ncyBhbmQgSSYjMzk7ZCBwcmVmZXIgdG8gYXZvaWQgdGhlbSBpZiBwb3NzaWJsZS4gVGhlIHJ1bGUgaXMgc2ltcGxlOiBpZiBLQVNBTiwgTE9DS0RFUCwgb3IgYW55IG90aGVyIHN0YW5kYXJkIGRldGVjdG9yIGNhbiBjYXRjaCB0aGUgYnVnLCB3ZSAqZG9uJiMzOTt0KiBuZWVkIEtNU0FOLiBXZSBvbmx5IGludm9rZSB0aGUgYmlnIGd1bnMgd2hlbiBLTVNBTiBpcyB0aGUgb25seSB0b29sIHRoYXQgY2FuIGRvIHRoZSBqb2IuCgpTbywgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZSBjaGFuZ2VzIG9uZSBieSBvbmU6CgoxLiAgKipEb2N1bWVudGF0aW9uIFVwZGF0ZXM6KiogVHlwbyBmaXhlcyBpbiBgcG9ydGluZy5yc3RgIGFuZCBgdmZzLnJzdGAgLSBubyBjb25jZXJucyBoZXJlLiBTdHJhaWdodGZvcndhcmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBubyBjb2RlIGNoYW5nZXMuIFNhZmUuCjIuICAqKmBmcy9kY2FjaGUuY2AgTW9kaWZpY2F0aW9uczoqKiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdlJiMzOTt2ZSBnb3QgYSBsb3Qgb2YgY2hhbmdlcyBpbiBgZnMvZGNhY2hlLmNgOgoKICAgICogICBJbnRyb2R1Y3Rpb24gb2YgYGxvb2t1cF9tYXBgIGFuZCBpdHMgaW5pdGlhbGl6YXRpb24gd2l0aGluIGBfX2RfYWxsb2NgLiBUaGUgYGxvb2t1cF9tYXBgIGlzIGluaXRpYWxpemVkIHdpdGggYGxvY2tkZXBfaW5pdF9tYXBgLCB3aGljaCBzaG91bGQgc2V0IHRoZSBpbml0aWFsIHN0YXRlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBgX19kX2FsbG9jYCBpbml0aWFsaXplcyBldmVyeXRoaW5nLCB0aGUgYGxvb2t1cF9tYXBgIHNob3VsZCBhbHNvIGJlIGluaXRpYWxpemVkLCBhbmQgdGhpcyBkb2VzIG5vdCB3YXJyYW50IEtNU0FOIGZ1enppbmcuIEJ1dCBJIHNob3VsZCBjaGVjayBgX19kX2FsbG9jYCB0byB2ZXJpZnkgdGhhdCBga21lbV9jYWNoZV9hbGxvY19scnVgIGNvcnJlY3RseSBpbml0aWFsaXplcyB0aGUgZmllbGRzLgogICAgKiAgIEEgbmV3IGBkX2R1cGxpY2F0ZSgpYCBoZWxwZXIsIHNvbWUgbG9ja2RlcCBhbm5vdGF0aW9ucywgYW5kIGEgYGRfYWxsb2NfdHJ5bG9jaygpYCBmdW5jdGlvbi4gVGhlc2Ugc2VlbSBmb2N1c2VkIG9uIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nLCBidXQgZG9uJiMzOTt0IGltbWVkaWF0ZWx5IHNjcmVhbSAmIzM0O3VuaW5pdGlhbGl6ZWQgbWVtb3J5LiYjMzQ7CiAgICAqICAgQ2hhbmdlcyB0byBgX19kX2xvb2t1cF91bmhhc2hgLCBgX19kX2FkZGAsIGFuZCBgZF9zcGxpY2VfYWxpYXNfb3BzYC4gVGhlc2UgYXBwZWFyIHRvIGJlIHJlZmFjdG9yaW5ncyBhbmQgaW1wcm92ZW1lbnRzIGFyb3VuZCBkZW50cnkgbWFuYWdlbWVudCwgd2l0aCBzb21lIGxvY2tkZXAtcmVsYXRlZCBjaGFuZ2VzLiBBZ2FpbiwgdGhlc2UgYXJlbiYjMzk7dCBkaXJlY3RseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KMy4gICoqYGZzL25hbWVpLmNgIFVwZGF0ZXM6KiogUHJpbWFyaWx5IGxvY2svdW5sb2NrIGNoYW5nZXMgd2l0aCBhIGJpdCBvZiByZWZhY3RvcmluZyBmb3IgYmV0dGVyIGBMT09LVVBfU0hBUkVEYCB1c2FnZS4gTm8gcmVkIGZsYWdzIGhlcmUgZWl0aGVyLgo0LiAgKipgZnMvbmZzL3VubGluay5jYCBUd2Vha3M6KiogU29tZSBsb2NraW5nLXJlbGF0ZWQgY2hhbmdlcyB3aXRoIGBkX2xvb2t1cF9hY3F1aXJlYCBhbmQgYGRfbG9va3VwX3JlbGVhc2VgLiBUaGlzIGlzIGxpa2VseSBjb3JyZWN0LW5lc3MgcmVsYXRlZCBhbmQgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBuZXcgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrcy4KNS4gICoqSGVhZGVyIGZpbGUgYWRkaXRpb25zOioqIEFkZGluZyBgbG9va3VwX21hcGAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBpbmNsdWRlL2xpbnV4L2RjYWNoZS5oYCBhbmQgYGluY2x1ZGUvbGludXgvbmFtZWkuaGAuIFRoZXNlIGFyZSBqdXN0IGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMgYW5kLCBieSB0aGVtc2VsdmVzLCBkb24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3MuCgpOb3csIGxldCYjMzk7cyByZXR1cm4gdG8gdGhlIGBsb29rdXBfbWFwYCBpbml0aWFsaXphdGlvbiBpbiBgX19kX2FsbG9jYC4gU2luY2UgdGhlIHN0cnVjdHVyZSBoYXMgYmVlbiBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV9hbGxvY19scnVgLCB0aGlzIHNob3VsZCBpbml0aWFsaXplIHRoZSBzdHJ1Y3R1cmUuIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBfX2RfYWxsb2NgIHRvIGJlIDEwMCUgc3VyZS4gQmFzZWQgb24gYW4gaW5pdGlhbCByZXZpZXcgb2YgdGhpcyBwYXRjaCwgSSB0aGluayB0aGUgY2hhbmdlcyBhcmUgZ2VuZXJhbGx5IHNhZmUgYW5kIGRvbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBvYnZpb3VzIG5ldyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0aGF0IHdvdWxkICpyZXF1aXJlKiBLTVNBTiBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgX19kX2FsbG9jYCB0cnVseSBpbml0aWFsaXplcyBhbGwgbWVtYmVycywgaW5jbHVkaW5nIGBsb29rdXBfbWFwYC4gSWYgdGhhdCBwYW5zIG91dCwgdGhlbiBJIHdpbGwgY29uc2lkZXIgdGhpcyBwYXRjaCBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWVtX2NhY2hlX2FsbG9jLipkZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kY2FjaGUuYz0xOTAyPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4tLVxuZnMvZGNhY2hlLmMtMTkwOC1cbmZzL2RjYWNoZS5jOjE5MDk6XHRkZW50cnkgPSBrbWVtX2NhY2hlX2FsbG9jX2xydShkZW50cnlfY2FjaGUsIFx1MDAyNnNiLVx1MDAzZXNfZGVudHJ5X2xydSxcbmZzL2RjYWNoZS5jLTE5MTAtXHRcdFx0XHQgICAgICBHRlBfS0VSTkVMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYF9fZF9hbGxvY2AqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gem9vbSBpbiBvbiB0aGUgYF9fZF9hbGxvY2AgZnVuY3Rpb24uIEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAxOTAwLTE5NzAuIFRoaXMgYXJlYSBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhlIGlzc3VlIEkmIzM5O20gaW52ZXN0aWdhdGluZy4gSSYjMzk7bGwgdXNlIHRoZSAmIzM0O3JlYWQtZmlsZSYjMzQ7IHRvb2wgb3IgZnVuY3Rpb24gdG8gcXVpY2tseSBwdWxsIHVwIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZSBhbmQgZ2V0IGEgZGlyZWN0IGxvb2suIEkgY2FuIHRoZW4gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGxvZ2ljLCB2YXJpYWJsZSB1c2FnZSwgYW5kIHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBjb25jZXJucyB3aXRoaW4gdGhhdCBzcGVjaWZpYyByYW5nZS4gRm9jdXNpbmcgb24gYSBkZWZpbmVkIHNlY3Rpb24gaGVscHMgc3RyZWFtbGluZSB0aGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkwMDpcdCAqL1xuMTkwMTpcdCBcbjE5MDI6XHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuMTkwMzpcdHtcbjE5MDQ6XHRcdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19sb29rdXBfa2V5O1xuMTkwNTpcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuMTkwNjpcdFx0Y2hhciAqZG5hbWU7XG4xOTA3Olx0XHRpbnQgZXJyO1xuMTkwODpcdFxuMTkwOTpcdFx0ZGVudHJ5ID0ga21lbV9jYWNoZV9hbGxvY19scnUoZGVudHJ5X2NhY2hlLCBcdTAwMjZzYi1cdTAwM2VzX2RlbnRyeV9scnUsXG4xOTEwOlx0XHRcdFx0XHQgICAgICBHRlBfS0VSTkVMKTtcbjE5MTE6XHRcdGlmICghZGVudHJ5KVxuMTkxMjpcdFx0XHRyZXR1cm4gTlVMTDtcbjE5MTM6XHRcbjE5MTQ6XHRcdC8qXG4xOTE1Olx0XHQgKiBXZSBndWFyYW50ZWUgdGhhdCB0aGUgaW5saW5lIG5hbWUgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLlxuMTkxNjpcdFx0ICogVGhpcyB3YXkgdGhlIG1lbWNweSgpIGRvbmUgYnkgdGhlIG5hbWUgc3dpdGNoaW5nIGluIHJlbmFtZVxuMTkxNzpcdFx0ICogd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLCBldmVuIGlmIHdlIG1pZ2h0XG4xOTE4Olx0XHQgKiBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyXG4xOTE5Olx0XHQgKi9cbjE5MjA6XHRcdGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7XG4xOTIxOlx0XHRpZiAodW5saWtlbHkoIW5hbWUpKSB7XG4xOTIyOlx0XHRcdG5hbWUgPSBcdTAwMjZzbGFzaF9uYW1lO1xuMTkyMzpcdFx0XHRkbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4xOTI0Olx0XHR9IGVsc2UgaWYgKG5hbWUtXHUwMDNlbGVuIFx1MDAzZSBETkFNRV9JTkxJTkVfTEVOLTEpIHtcbjE5MjU6XHRcdFx0c3RydWN0IGV4dGVybmFsX25hbWUgKnA7XG4xOTI2Olx0XG4xOTI3Olx0XHRcdHAgPSBrbWFsbG9jX2ZsZXgoKnAsIG5hbWUsIG5hbWUtXHUwMDNlbGVuICYjNDM7IDEsXG4xOTI4Olx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfUkVDTEFJTUFCTEUpO1xuMTkyOTpcdFx0XHRpZiAoIXApIHtcbjE5MzA6XHRcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50cnkpOyBcbjE5MzE6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbjE5MzI6XHRcdFx0fVxuMTkzMzpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNnAtXHUwMDNlY291bnQsIDEpO1xuMTkzNDpcdFx0XHRkbmFtZSA9IHAtXHUwMDNlbmFtZTtcbjE5MzU6XHRcdH0gZWxzZSAge1xuMTkzNjpcdFx0XHRkbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4xOTM3Olx0XHR9XHRcbjE5Mzg6XHRcbjE5Mzk6XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5sZW4gPSBuYW1lLVx1MDAzZWxlbjtcbjE5NDA6XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5oYXNoID0gbmFtZS1cdTAwM2VoYXNoO1xuMTk0MTpcdFx0bWVtY3B5KGRuYW1lLCBuYW1lLVx1MDAzZW5hbWUsIG5hbWUtXHUwMDNlbGVuKTtcbjE5NDI6XHRcdGRuYW1lW25hbWUtXHUwMDNlbGVuXSA9IDA7XG4xOTQzOlx0XG4xOTQ0Olx0XHQvKiBNYWtlIHN1cmUgd2UgYWx3YXlzIHNlZSB0aGUgdGVybWluYXRpbmcgTlVMIGNoYXJhY3RlciAqL1xuMTk0NTpcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2ZGVudHJ5LVx1MDAzZV9fZF9uYW1lLm5hbWUsIGRuYW1lKTsgLyogXl5eICovXG4xOTQ2Olx0XG4xOTQ3Olx0XHRkZW50cnktXHUwMDNlZF9mbGFncyA9IDA7XG4xOTQ4Olx0XHRsb2NrcmVmX2luaXQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9ja3JlZik7XG4xOTQ5Olx0XHRzZXFjb3VudF9zcGlubG9ja19pbml0KFx1MDAyNmRlbnRyeS1cdTAwM2VkX3NlcSwgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4xOTUwOlx0XHRkZW50cnktXHUwMDNlZF9pbm9kZSA9IE5VTEw7XG4xOTUxOlx0XHRkZW50cnktXHUwMDNlZF9wYXJlbnQgPSBkZW50cnk7XG4xOTUyOlx0XHRkZW50cnktXHUwMDNlZF9zYiA9IHNiO1xuMTk1MzpcdFx0ZGVudHJ5LVx1MDAzZWRfb3AgPSBzYi1cdTAwM2VfX3NfZF9vcDtcbjE5NTQ6XHRcdGRlbnRyeS1cdTAwM2VkX2ZsYWdzID0gc2ItXHUwMDNlc19kX2ZsYWdzO1xuMTk1NTpcdFx0ZGVudHJ5LVx1MDAzZWRfZnNkYXRhID0gTlVMTDtcbjE5NTY6XHRcdElOSVRfSExJU1RfQkxfTk9ERShcdTAwMjZkZW50cnktXHUwMDNlZF9oYXNoKTtcbjE5NTc6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xydSk7XG4xOTU4Olx0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfY2hpbGRyZW4pO1xuMTk1OTpcdFx0ZGVudHJ5LVx1MDAzZXdhaXRlcnMgPSBOVUxMO1xuMTk2MDpcdFx0SU5JVF9ITElTVF9OT0RFKFx1MDAyNmRlbnRyeS1cdTAwM2VkX3NpYik7XG4xOTYxOlx0XG4xOTYyOlx0XHRsb2NrZGVwX2luaXRfbWFwKFx1MDAyNmRlbnRyeS1cdTAwM2Vsb29rdXBfbWFwLCBcJiMzNDtEQ0FDSEVfUEFSX0xPT0tVUFwmIzM0OywgXHUwMDI2X19sb29rdXBfa2V5LCAwKTtcbjE5NjM6XHRcbjE5NjQ6XHRcdGlmIChkZW50cnktXHUwMDNlZF9vcCBcdTAwMjZcdTAwMjYgZGVudHJ5LVx1MDAzZWRfb3AtXHUwMDNlZF9pbml0KSB7XG4xOTY1Olx0XHRcdGVyciA9IGRlbnRyeS1cdTAwM2VkX29wLVx1MDAzZWRfaW5pdChkZW50cnkpO1xuMTk2NjpcdFx0XHRpZiAoZXJyKSB7XG4xOTY3Olx0XHRcdFx0aWYgKGRuYW1lX2V4dGVybmFsKGRlbnRyeSkpXG4xOTY4Olx0XHRcdFx0XHRrZnJlZShleHRlcm5hbF9uYW1lKGRlbnRyeSkpO1xuMTk2OTpcdFx0XHRcdGttZW1fY2FjaGVfZnJlZShkZW50cnlfY2FjaGUsIGRlbnRyeSk7XG4xOTcwOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4xOTcxOlx0XHRcdH1cbjE5NzI6XHRcdH1cbjE5NzM6XHRcbjE5NzQ6XHRcdHRoaXNfY3B1X2luYyhucl9kZW50cnkpO1xuMTk3NTpcdFxuMTk3NjpcdFx0cmV0dXJuIGRlbnRyeTtcbjE5Nzc6XHR9XG4xOTc4Olx0XG4xOTc5Olx0LyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjU0CgkJCQkJCQlvdXRwdXQ6IDE5NwoJCQkJCQkJdGhvdWdodHM6IDcwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBQYXJhbGxlbCBEZW50cnkgTG9va3VwIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gZmxhZyB0aGlzIHBhdGNoIGZvciBLTVNBTiBzY3J1dGlueS4gSSBrbm93IHRoZSBkcmlsbDogd2UgaGF2ZSB0byBiZSAqcmVhbGx5KiBzdXJlIGFib3V0IGRhdGEgbGVha3MgdG8gdXNlcnNwYWNlIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UuIExldCYjMzk7cyBydW4gdGhyb3VnaCB0aGF0IGNoZWNrbGlzdDoKCiogICAqKkZpcnN0LCBhcmUgdGhlcmUgYW55IHVzZXItc3BhY2UgZXhwb3N1cmVzPyoqIE5vLiBUaGlzIHBhdGNoIHRvdWNoZXMgZG9jdW1lbnRhdGlvbiBhbmQgZmlsZSBzeXN0ZW0gaW50ZXJuYWxzOiBgZGNhY2hlLmNgLCBgbmFtZWkuY2AsIGBuZnMvdW5saW5rLmNgIGFuZCBhIGZldyBoZWFkZXJzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2UuIFdlJiMzOTtyZSBhZGRpbmcgYGxvb2t1cF9tYXBgIHRvIGBzdHJ1Y3QgZGVudHJ5YCBmb3IgbG9ja2RlcCBhbmQgc29tZSBoZWxwZXIgZnVuY3Rpb25zLCBidXQgbm90IGZvciBkaXJlY3QgY29tbXVuaWNhdGlvbiB3aXRoIHVzZXItc3BhY2UuCgoqICAgKipOZXh0LCBhcmUgdGhlcmUgY29uZGl0aW9uYWxzIG9yIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE/KiogRG9lc24mIzM5O3Qgc2VlbSBzby4gVGhlIHBhdGNoIGludHJvZHVjZXMgYERDQUNIRV9QQVJfTE9PS1VQYCB0byBhbGxvdyBwYXJhbGxlbCBsb29rdXBzLiBXZSYjMzk7cmUgYWRkaW5nIG5ldyBhbGxvY2F0aW9uIGhlbHBlcnMgZm9yIG5vbi1ibG9ja2luZyBsb29rdXAgKGBBTExPQ19QQVJBX0ZBSUxgLCBgZF9hbGxvY190cnlsb2NrYCkgYW5kIGFkZGluZyBhIGBMT09LVVBfU0hBUkVEYCBmbGFnIGZvciBsb2NraW5nIHVwZGF0ZXMuIEJ1dCB0aGVyZSYjMzk7cyBub3RoaW5nIGluIHRoZSBjaGFuZ2VzIHRoYXQgaGluZ2VzIG9uIHJlYWRpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyB0byBkZXRlcm1pbmUgcHJvZ3JhbSBmbG93LgoKKiAgICoqSG93IGFib3V0IGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXM/KiogV2UmIzM5O3JlIGludHJvZHVjaW5nIGEgbmV3IGZpZWxkIGBsb29rdXBfbWFwYCBpbiBgc3RydWN0IGRlbnRyeWAgYW5kIHVzaW5nIGl0IGZvciBsb2NrZGVwIGluc3RydW1lbnRhdGlvbiBpbiBwYXJhbGxlbCBsb29rdXBzLiBJIHNlZSBzb21lIG5ldyBkZW50cnkgYWxsb2NhdGlvbnMgYW5kIHJlZmFjdG9yaW5nIG9mIGBfX2RfYWRkYCB0byBjYWxsIGBfX2RfaW5zdGFudGlhdGVgIGZvciBwYXJhbGxlbCBsb29rdXBzLiBIb3dldmVyLCBjcnVjaWFsbHksIHRoZSBuZXcgYWxsb2NhdGlvbnMgdmlhIGBfX2RfYWxsb2NgIGZ1bGx5IGluaXRpYWxpemUgZXZlcnl0aGluZywgaW5jbHVkaW5nIGBsb2NrZGVwX2luaXRfbWFwKCZhbXA7ZGVudHJ5LSZndDtsb29rdXBfbWFwLCAuLi4pYC4KCiogICAqKkZpbmFsbHksIGlzIHRoZXJlIGEgY2hhbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyB2aWEgYm91bmRzIGNoZWNrcywgbGVuZ3RocywgZXRjLj8qKiBObywgSSBkb24mIzM5O3Qgc2VlIGFueSBjaGFuZ2VzIHRvIGJ1ZmZlciBzaXppbmcsIGJvdW5kcyBjaGVja3MsIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpCYXNlZCBvbiB0aGlzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucy4gQWxsIG9mIHRoZSBuZXcgYWxsb2NhdGlvbnMgaW5pdGlhbGl6ZSB0aGVpciBmaWVsZHMgcHJvcGVybHkuIFRoaXMgaXMgbWFpbmx5IGFib3V0IGxvY2tpbmcsIHBhcmFsbGVsaXNtLCBhbmQgZGVudHJ5IG1hbmFnZW1lbnQuIEFueSBjb25jdXJyZW50IHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3VlcyB0aGF0IEkgY2FuIHNlZSBzaG91bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAsIEtBU0FOLCBvciBrZXJuZWwgYXNzZXJ0cyAoYEJVR19PTmApLgoKU28sIHRoZSBjb25jbHVzaW9uIGlzOiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UmIzM5O3JlIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIExvY2tkZXAgdHJhY2tpbmcgZm9yIHBhcmFsbGVsIGRlbnRyeSBsb29rdXBzIChEQ0FDSEVfUEFSX0xPT0tVUCB2aWEgc3RydWN0IGxvY2tkZXBfbWFwIGluIHN0cnVjdCBkZW50cnkpLCBhZGRzIHRoZSBkX2R1cGxpY2F0ZSBhbmQgZF9hbGxvY190cnlsb2NrIGhlbHBlcnMsIHVwZGF0ZXMgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gVkZTIGxvb2t1cCByb3V0aW5lcyAobG9va3VwX3Nsb3csIGxvb2t1cF9vcGVuKSwgYW5kIGZpeGVzIGZpbGVzeXN0ZW0gZG9jdW1lbnRhdGlvbi5cblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgYm91bmRhcmllcywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIHRyYW5zZmVycy4gQWxsIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IGRlbnRyeSBpbiBfX2RfYWxsb2MpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24uIEFueSBjb25jdXJyZW5jeSwgZGVhZGxvY2ssIG9yIHJlZmNvdW50aW5nIGlzc3VlcyByZXN1bHRpbmcgZnJvbSB0aGVzZSBWRlMgbG9ja2luZy9sb29rdXAgcmVmYWN0b3JpbmdzIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBMb2NrZGVwIHRyYWNraW5nIGZvciBwYXJhbGxlbCBkZW50cnkgbG9va3VwcyAoRENBQ0hFX1BBUl9MT09LVVAgdmlhIHN0cnVjdCBsb2NrZGVwX21hcCBpbiBzdHJ1Y3QgZGVudHJ5KSwgYWRkcyB0aGUgZF9kdXBsaWNhdGUgYW5kIGRfYWxsb2NfdHJ5bG9jayBoZWxwZXJzLCB1cGRhdGVzIGxvY2tpbmcgZmxhZ3MgKExPT0tVUF9TSEFSRUQpIGluIFZGUyBsb29rdXAgcm91dGluZXMgKGxvb2t1cF9zbG93LCBsb29rdXBfb3BlbiksIGFuZCBmaXhlcyBmaWxlc3lzdGVtIGRvY3VtZW50YXRpb24uXG5cbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGtlcm5lbC10by11c2Vyc3BhY2UgZGF0YSB0cmFuc2ZlcnMuIEFsbCBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBkZW50cnkgaW4gX19kX2FsbG9jKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBBbnkgY29uY3VycmVuY3ksIGRlYWRsb2NrLCBvciByZWZjb3VudGluZyBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gdGhlc2UgVkZTIGxvY2tpbmcvbG9va3VwIHJlZmFjdG9yaW5ncyBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIHN1Y2ggYXMgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxNTo1Ny4yODEwOTAxNThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjEwMTYwOTE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJORlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkX2R1cGxpY2F0ZVwiLFxuICAgIFwiZF9hbGxvY19wYXJhbGxlbFwiLFxuICAgIFwiZF9hbGxvY190cnlsb2NrXCIsXG4gICAgXCJkX3NwbGljZV9hbGlhc1wiLFxuICAgIFwiZF9zcGxpY2VfYWxpYXNfb3BzXCIsXG4gICAgXCJkX3dhaXRfbG9va3VwXCIsXG4gICAgXCJsb29rdXBfc2xvd1wiLFxuICAgIFwibG9va3VwX3Nsb3dfa2lsbGFibGVcIixcbiAgICBcImxvb2t1cF9vcGVuXCIsXG4gICAgXCJuZnNfYXN5bmNfdW5saW5rX3JlbGVhc2VcIixcbiAgICBcIm5mc19jYWxsX3VubGlua1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgTG9ja2RlcCB0cmFja2luZyBmb3IgcGFyYWxsZWwgZGVudHJ5IGxvb2t1cHMgKERDQUNIRV9QQVJfTE9PS1VQIHZpYSBzdHJ1Y3QgbG9ja2RlcF9tYXAgaW4gc3RydWN0IGRlbnRyeSksIGFkZHMgdGhlIGRfZHVwbGljYXRlIGFuZCBkX2FsbG9jX3RyeWxvY2sgaGVscGVycywgdXBkYXRlcyBsb2NraW5nIGZsYWdzIChMT09LVVBfU0hBUkVEKSBpbiBWRlMgbG9va3VwIHJvdXRpbmVzIChsb29rdXBfc2xvdywgbG9va3VwX29wZW4pLCBhbmQgZml4ZXMgZmlsZXN5c3RlbSBkb2N1bWVudGF0aW9uLlxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGtlcm5lbC10by11c2Vyc3BhY2UgZGF0YSB0cmFuc2ZlcnMuIEFsbCBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBkZW50cnkgaW4gX19kX2FsbG9jKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBBbnkgY29uY3VycmVuY3ksIGRlYWRsb2NrLCBvciByZWZjb3VudGluZyBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gdGhlc2UgVkZTIGxvY2tpbmcvbG9va3VwIHJlZmFjdG9yaW5ncyBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIHN1Y2ggYXMgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIFZGUyBkY2FjaGUgYW5kIG5hbWVpIGxvZ2ljLCBpbmNsdWRpbmcgcGFyYWxsZWwgbG9va3VwIGxvY2tpbmcsIHNoYXJlZCBkaXJlY3RvcnkgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gbG9va3VwX3Nsb3cgYW5kIGxvb2t1cF9vcGVuLCBsb2NrZGVwIG1hcCB0cmFja2luZyBmb3IgaW4tbG9va3VwIGRlbnRyaWVzLCB1cGRhdGVkIGFzc2VydGlvbnMgaW4gZF9zcGxpY2VfYWxpYXNfb3BzLCBuZXcgZGNhY2hlIGhlbHBlcnMgKGRfZHVwbGljYXRlLCBkX2FsbG9jX3RyeWxvY2spLCBhbmQgTkZTIGFzeW5jaHJvbm91cyB1bmxpbmsgbG9jayB0cmFja2luZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSByZWFjaGFibGUga2VybmVsIHN1YnN5c3RlbXMgYW5kIGRpcmVjdGx5IGFmZmVjdCBjb25jdXJyZW5jeSBhbmQgaW52YXJpYW50IGVuZm9yY2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxNTo1Ny4yODEwOTYzMThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNTc0NjE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ5YTEyZWMxZTVmZTNmM2U1NzdkM2I2MTgzNmQ4NmU2Njk5NDMwZWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAwNDoxNTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxcbmluZGV4IDYwODgwZWIwYzQ5ZDEuLjRlMDE1ZjFiZjFmODQgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcXG5AQCAtMTIwMywxNiArMTIwMywxNiBAQCB3aWxsIGZhaWwtc2FmZS5cXG4gXFxuIC0tLVxcbiBcXG4tKiogbWFuZGF0b3J5KipcXG4rKiptYW5kYXRvcnkqKlxcbiBcXG4gbG9va3VwX29uZSgpLCBsb29rdXBfb25lX3VubG9ja2VkKCksIGxvb2t1cF9vbmVfcG9zaXRpdmVfdW5sb2NrZWQoKSBub3dcXG4gdGFrZSBhIHFzdHIgaW5zdGVhZCBvZiBhIG5hbWUgYW5kIGxlbi4gIFRoZXNlLCBub3QgdGhlIFxcXCJvbmVfbGVuXFxcIlxcbiB2ZXJzaW9ucywgc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgYWNjZXNzaW5nIGEgZmlsZXN5c3RlbSBmcm9tIG91dHNpZGVcXG4tdGhhdCBmaWxlc3lzbXRlbSwgdGhyb3VnaCBhIG1vdW50IHBvaW50IC0gd2hpY2ggd2lsbCBoYXZlIGEgbW50X2lkbWFwLlxcbit0aGF0IGZpbGVzeXN0ZW0sIHRocm91Z2ggYSBtb3VudCBwb2ludCAtIHdoaWNoIHdpbGwgaGF2ZSBhIG1udF9pZG1hcC5cXG4gXFxuIC0tLVxcbiBcXG4tKiogbWFuZGF0b3J5KipcXG4rKiptYW5kYXRvcnkqKlxcbiBcXG4gRnVuY3Rpb25zIHRyeV9sb29rdXBfb25lX2xlbigpLCBsb29rdXBfb25lX2xlbigpLFxcbiBsb29rdXBfb25lX2xlbl91bmxvY2tlZCgpIGFuZCBsb29rdXBfcG9zaXRpdmVfdW5sb2NrZWQoKSBoYXZlIGJlZW5cXG5AQCAtMTIyOSw3ICsxMjI5LDcgQEAgYWxyZWFkeSBiZWVuIHBlcmZvcm1lZCBzdWNoIGFzIGFmdGVyIHZmc19wYXRoX3BhcmVudF9sb29rdXAoKVxcbiBcXG4gLS0tXFxuIFxcbi0qKiBtYW5kYXRvcnkqKlxcbisqKm1hbmRhdG9yeSoqXFxuIFxcbiBkX2hhc2hfYW5kX2xvb2t1cCgpIGlzIG5vIGxvbmdlciBleHBvcnRlZCBvciBhdmFpbGFibGUgb3V0c2lkZSB0aGUgVkZTLlxcbiBVc2UgdHJ5X2xvb2t1cF9ub3Blcm0oKSBpbnN0ZWFkLiAgVGhpcyBhZGRzIG5hbWUgdmFsaWRhdGlvbiBhbmQgdGFrZXNcXG5AQCAtMTM3MCw3ICsxMzcwLDcgQEAgc2ltaWxhci5cXG4gXFxuIC0tLVxcbiBcXG4tKiogbWFuZGF0b3J5KipcXG4rKiptYW5kYXRvcnkqKlxcbiBcXG4gbG9ja19yZW5hbWUoKSwgbG9ja19yZW5hbWVfY2hpbGQoKSwgdW5sb2NrX3JlbmFtZSgpIGFyZSBub1xcbiBsb25nZXIgYXZhaWxhYmxlLiAgVXNlIHN0YXJ0X3JlbmFtaW5nKCkgb3Igc2ltaWxhci5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XFxuaW5kZXggZDNhOTNlZWMzOTQ1Zi4uZGU4Zjg1MDIwNTZlOCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcXG5AQCAtNTA3LDggKzUwNyw4IEBAIG90aGVyd2lzZSBub3RlZC5cXG4gXFx0ZGVudHJ5IGJlZm9yZSB0aGUgZmlyc3QgbWtkaXIgcmV0dXJucy5cXG4gXFxuIFxcdElmIHRoZXJlIGlzIGFueSBjaGFuY2UgdGhpcyBjb3VsZCBoYXBwZW4sIHRoZW4gdGhlIG5ldyBpbm9kZVxcbi1cXHRzaG91bGQgYmUgZF9kcm9wKCllZCBhbmQgYXR0YWNoZWQgd2l0aCBkX3NwbGljZV9hbGlhcygpLiAgVGhlXFxuLVxcdHJldHVybmVkIGRlbnRyeSAoaWYgYW55KSBzaG91bGQgYmUgcmV0dXJuZWQgYnkgLVxcdTAwM2Vta2RpcigpLlxcbitcXHRzaG91bGQgYmUgYXR0YWNoZWQgd2l0aCBkX3NwbGljZV9hbGlhcygpLiAgVGhlIHJldHVybmVkXFxuK1xcdGRlbnRyeSAoaWYgYW55KSBzaG91bGQgYmUgcmV0dXJuZWQgYnkgLVxcdTAwM2Vta2RpcigpLlxcbiBcXG4gYGBybWRpcmBgXFxuIFxcdGNhbGxlZCBieSB0aGUgcm1kaXIoMikgc3lzdGVtIGNhbGwuICBPbmx5IHJlcXVpcmVkIGlmIHlvdSB3YW50XFxuZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmNcXG5pbmRleCAxYjFhODFmMTBkYTY3Li4zYWY4YjJhYzY5OWY5IDEwMDY0NFxcbi0tLSBhL2ZzL2RjYWNoZS5jXFxuKysrIGIvZnMvZGNhY2hlLmNcXG5AQCAtMzIsNiArMzIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0X3NwaW5sb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VsaXN0X2JsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0X2xydS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmFtZWkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJtb3VudC5oXFxcIlxcbiBcXG5AQCAtMTkwMCw2ICsxOTAxLDcgQEAgRVhQT1JUX1NZTUJPTChkX2ludmFsaWRhdGUpO1xcbiAgXFxuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuIHtcXG4rXFx0c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2xvb2t1cF9rZXk7XFxuIFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcXG4gXFx0Y2hhciAqZG5hbWU7XFxuIFxcdGludCBlcnI7XFxuQEAgLTE5NTcsNiArMTk1OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuIFxcdGRlbnRyeS1cXHUwMDNld2FpdGVycyA9IE5VTEw7XFxuIFxcdElOSVRfSExJU1RfTk9ERShcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX3NpYik7XFxuIFxcbitcXHRsb2NrZGVwX2luaXRfbWFwKFxcdTAwMjZkZW50cnktXFx1MDAzZWxvb2t1cF9tYXAsIFxcXCJEQ0FDSEVfUEFSX0xPT0tVUFxcXCIsIFxcdTAwMjZfX2xvb2t1cF9rZXksIDApO1xcbitcXG4gXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9vcCBcXHUwMDI2XFx1MDAyNiBkZW50cnktXFx1MDAzZWRfb3AtXFx1MDAzZWRfaW5pdCkge1xcbiBcXHRcXHRlcnIgPSBkZW50cnktXFx1MDAzZWRfb3AtXFx1MDAzZWRfaW5pdChkZW50cnkpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuQEAgLTE5OTksNiArMjAwMyw1OCBAQCBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiBwYXJlbnQsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woZF9hbGxvYyk7XFxuIFxcbisvKipcXG4rICogZF9kdXBsaWNhdGUgLSBkdXBsaWNhdGUgYSBkZW50cnkgZm9yIGNvbWJpbmVkIGF0b21pYyBvcGVyYXRpb25cXG4rICogQGRlbnRyeTogdGhlIGRlbnRyeSB0byBkdXBsaWNhdGVcXG4rICpcXG4rICogU29tZSByZW5hbWUgb3BlcmF0aW9ucyBuZWVkIHRvIGJlIGNvbWJpbmVkIHdpdGggYW5vdGhlciBvcGVyYXRpb25cXG4rICogaW5zaWRlIHRoZSBmaWxlc3lzdGVtLlxcbisgKiAxLyBBIGNsdXN0ZXIgZmlsZXN5c3RlbSB3aGVuIHJlbmFtaW5nIHRvIGFuIGluLXVzZSBmaWxlIG1pZ2h0IG5lZWQgdG9cXG4rICogICBmaXJzdCBcXFwic2lsbHktcmVuYW1lXFxcIiB0aGF0IHRhcmdldCBvdXQgb2YgdGhlIHdheSBiZWZvcmUgdGhlIG1haW4gcmVuYW1lXFxuKyAqIDIvIEEgZmlsZXN5c3RlbSB0aGF0IHN1cHBvcnRzIHdoaXRlLW91dCBtaWdodCB3YW50IHRvIGNyZWF0ZSBhIHdoaXRlb3V0XFxuKyAqICAgaW4gcGxhY2Ugb2YgdGhlIGZpbGUgYmVpbmcgbW92ZWQuXFxuKyAqXFxuKyAqIEZvciB0aGlzIHRoZXkgbmVlZCB0d28gZGVudHJpZXMgd2hpY2ggdGVtcG9yYXJpbHkgaGF2ZSB0aGUgc2FtZSBuYW1lLFxcbisgKiBiZWZvcmUgb25lIGlzIHJlbmFtZWQuICBkX2R1cGxpY2F0ZSgpIHByb3ZpZGVzIGZvciB0aGlzLiAgR2l2ZW4gYVxcbisgKiBwb3NpdGl2ZSBoYXNoZWQgZGVudHJ5LCBpdCBjcmVhdGVzIGEgc2Vjb25kIGluLWxvb2t1cCBkZW50cnkuXFxuKyAqIEJlY2F1c2UgdGhlIG9yaWdpbmFsIGRlbnRyeSBleGlzdHMsIG5vIG90aGVyIHRocmVhZCB3aWxsIHRyeSB0b1xcbisgKiBjcmVhdGUgYW4gaW4tbG9va3VwIGRlbnRyeSwgc28gdGhlcmUgY2FuIGJlIG5vIHJhY2UgaW4gdGhpcyBjcmVhdGUuXFxuKyAqXFxuKyAqIFRoZSBjYWxsZXIgc2hvdWxkIGRfbW92ZSgpIHRoZSBvcmlnaW5hbCB0byBhIG5ldyBuYW1lLCBvZnRlbiB2aWEgYVxcbisgKiByZW5hbWUgcmVxdWVzdCwgYW5kIHNob3VsZCBjYWxsIGRfbG9va3VwX2RvbmUoKSBvbiB0aGUgbmV3bHkgY3JlYXRlZFxcbisgKiBkZW50cnkuICBJZiB0aGUgbmV3IGlzIGluc3RhbnRpYXRlZCB0aGVuIHRoZSBvbGQgTVVTVCBlaXRoZXIgYmUgbW92ZWRcXG4rICogb3IgZHJvcHBlZC5cXG4rICpcXG4rICogUGFyZW50IG11c3QgYmUgbG9ja2VkLlxcbisgKlxcbisgKiBSZXR1cm5zOiBhbiBpbi1sb29rdXAgZGVudHJ5LCBvciAtRU5PTUVNLlxcbisgKi9cXG4rc3RydWN0IGRlbnRyeSAqZF9kdXBsaWNhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBoYXNoID0gZGVudHJ5LVxcdTAwM2VkX25hbWUuaGFzaDtcXG4rXFx0c3RydWN0IGRlbnRyeSAqcGFyZW50ID0gZGVudHJ5LVxcdTAwM2VkX3BhcmVudDtcXG4rXFx0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmIgPSBpbl9sb29rdXBfaGFzaChwYXJlbnQsIGhhc2gpO1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICpuZXcgPSBfX2RfYWxsb2MocGFyZW50LVxcdTAwM2VkX3NiLCBcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX25hbWUpO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFuZXcpKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdG5ldy1cXHUwMDNlZF9mbGFncyB8PSBEQ0FDSEVfUEFSX0xPT0tVUDtcXG4rXFx0bG9ja19tYXBfYWNxdWlyZV90cnkoXFx1MDAyNm5ldy1cXHUwMDNlbG9va3VwX21hcCk7XFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2cGFyZW50LVxcdTAwM2VkX2xvY2spO1xcbitcXHRuZXctXFx1MDAzZWRfcGFyZW50ID0gZGdldF9kbG9jayhwYXJlbnQpO1xcbitcXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2bmV3LVxcdTAwM2VkX3NpYiwgXFx1MDAyNnBhcmVudC1cXHUwMDNlZF9jaGlsZHJlbik7XFxuK1xcdGlmIChwYXJlbnQtXFx1MDAzZWRfZmxhZ3MgXFx1MDAyNiBEQ0FDSEVfRElTQ09OTkVDVEVEKVxcbitcXHRcXHRuZXctXFx1MDAzZWRfZmxhZ3MgfD0gRENBQ0hFX0RJU0NPTk5FQ1RFRDtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnBhcmVudC1cXHUwMDNlZF9sb2NrKTtcXG4rXFxuK1xcdGhsaXN0X2JsX2xvY2soYik7XFxuK1xcdGhsaXN0X2JsX2FkZF9oZWFkKFxcdTAwMjZuZXctXFx1MDAzZWRfaW5fbG9va3VwX2hhc2gsIGIpO1xcbitcXHRobGlzdF9ibF91bmxvY2soYik7XFxuK1xcdHJldHVybiBuZXc7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChkX2R1cGxpY2F0ZSk7XFxuK1xcbiBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX2Fub24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4ge1xcbiBcXHRyZXR1cm4gX19kX2FsbG9jKHNiLCBOVUxMKTtcXG5AQCAtMjE2OCw3ICsyMjI0LDYgQEAgc3RhdGljIHZvaWQgX19kX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4gICogKG9yIG90aGVyd2lzZSBzZXQpIGJ5IHRoZSBjYWxsZXIgdG8gaW5kaWNhdGUgdGhhdCBpdCBpcyBub3dcXG4gICogaW4gdXNlIGJ5IHRoZSBkY2FjaGUuXFxuICAqL1xcbi0gXFxuIHZvaWQgZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgc3RydWN0IGlub2RlICogaW5vZGUpXFxuIHtcXG4gXFx0QlVHX09OKGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGVudHJ5KSk7XFxuQEAgLTI3NTAsNiArMjgwNSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZW5kX2Rpcl9hZGQoc3RydWN0IGlub2RlICpkaXIsIHVuc2lnbmVkIGludCBuKVxcbiBzdGF0aWMgdm9pZCBkX3dhaXRfbG9va3VwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4ge1xcbiBcXHRpZiAobGlrZWx5KGRfaW5fbG9va3VwKGRlbnRyeSkpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRlbGwgbG9ja2RlcCB3ZSB3aWxsIHdhaXQgZm9yIHRoZSBsb29rdXAgbG9jaywgYWZ0ZXJcXG4rXFx0XFx0ICogZHJvcHBpbmcgLVxcdTAwM2VkX2xvY2ssIGJ1dCB3b24ndCBhY3R1YWxseSB0YWtlIGl0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c3Bpbl9yZWxlYXNlKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbG9jay5kZXBfbWFwLCAwKTtcXG4rXFx0XFx0bG9ja19tYXBfc3luYyhcXHUwMDI2ZGVudHJ5LVxcdTAwM2Vsb29rdXBfbWFwKTtcXG4rXFx0XFx0c3Bpbl9hY3F1aXJlKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbG9jay5kZXBfbWFwLCAwLCAxLCBfVEhJU19JUF8pO1xcbitcXG4gXFx0XFx0ZGVudHJ5LVxcdTAwM2VkX2ZsYWdzIHw9IERDQUNIRV9MT09LVVBfV0FJVEVSUztcXG4gXFx0XFx0d2FpdF92YXJfZXZlbnRfc3BpbmxvY2soXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9mbGFncyxcXG4gXFx0XFx0XFx0XFx0XFx0IWRfaW5fbG9va3VwKGRlbnRyeSksXFxuQEAgLTI3NTcsOCArMjgyMCwxNiBAQCBzdGF0aWMgdm9pZCBkX3dhaXRfbG9va3VwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCxcXG4tXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuKy8qIFdoYXQgdG8gZG8gd2hlbiBfX2RfYWxsb2NfcGFyYWxsZWwgZmluZHMgYSBkX2luX2xvb2t1cCBkZW50cnkgKi9cXG4rZW51bSBhbGxvY19wYXJhIHtcXG4rXFx0QUxMT0NfUEFSQV9XQUlULFxcbitcXHRBTExPQ19QQVJBX0ZBSUwsXFxuK307XFxuK1xcbitzdGF0aWMgaW5saW5lXFxuK3N0cnVjdCBkZW50cnkgKl9fZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXFxuK1xcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuK1xcdFxcdFxcdFxcdCAgZW51bSBhbGxvY19wYXJhIGhvdylcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgaGFzaCA9IG5hbWUtXFx1MDAzZWhhc2g7XFxuIFxcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpiID0gaW5fbG9va3VwX2hhc2gocGFyZW50LCBoYXNoKTtcXG5AQCAtMjgzMSw2ICsyOTAyLDEyIEBAIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxcbiBcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX2xvY2spO1xcbiBcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbiBcXHRcXHR9XFxuK1xcdFxcdGlmICh1bmxpa2VseShob3cgPT0gQUxMT0NfUEFSQV9GQUlMKSkge1xcbitcXHRcXHRcXHQvKiBtdXN0bid0IHdhaXQgZm9yIGNvbmN1cnJlbnQgbG9va3VwIHRvIGNvbXBsZXRlICovXFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbG9jayk7XFxuK1xcdFxcdFxcdGRwdXQobmV3KTtcXG4rXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVXT1VMREJMT0NLKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBzb21lYm9keSBpcyBsaWtlbHkgdG8gYmUgc3RpbGwgZG9pbmcgbG9va3VwIGZvciBpdDtcXG4gXFx0XFx0ICogcGluIGl0IGFuZCB3YWl0IGZvciB0aGVtIHRvIGZpbmlzaFxcbkBAIC0yODU4LDE0ICsyOTM1LDc3IEBAIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxcbiBcXHR9XFxuIFxcdGhsaXN0X2JsX2FkZF9oZWFkKFxcdTAwMjZuZXctXFx1MDAzZWRfaW5fbG9va3VwX2hhc2gsIGIpO1xcbiBcXHRobGlzdF9ibF91bmxvY2soYik7XFxuK1xcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFxcdTAwMjZuZXctXFx1MDAzZWxvb2t1cF9tYXApO1xcbiBcXHRyZXR1cm4gbmV3O1xcbiBtaXNtYXRjaDpcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9sb2NrKTtcXG4gXFx0ZHB1dChkZW50cnkpO1xcbiBcXHRnb3RvIHJldHJ5O1xcbiB9XFxuK1xcbisvKipcXG4rICogZF9hbGxvY19wYXJhbGxlbCgpIC0gYWxsb2NhdGUgYSBuZXcgZGVudHJ5IGFuZCBlbnN1cmUgdW5pcXVlbmVzc1xcbisgKiBAcGFyZW50OiBkZW50cnkgb2YgdGhlIHBhcmVudFxcbisgKiBAbmFtZTogICBuYW1lIG9mIHRoZSBkZW50cnkgd2l0aGluIHRoYXQgcGFyZW50LlxcbisgKlxcbisgKiBBIG5ldyBkZW50cnkgaXMgYWxsb2NhdGVkIGFuZCwgcHJvdmlkaW5nIGl0IGlzIHVuaXF1ZSwgYWRkZWQgdG8gdGhlXFxuKyAqIHJlbGV2YW50IGluZGV4LlxcbisgKiBJZiBhbiBleGlzdGluZyBkZW50cnkgaXMgZm91bmQgd2l0aCB0aGUgc2FtZSBwYXJlbnQvbmFtZSB0aGF0IGlzXFxuKyAqIG5vdCBkX2luX2xvb2t1cCgpLCB0aGVuIHRoYXQgaXMgcmV0dXJuZWQgaW5zdGVhZC5cXG4rICogSWYgdGhlIGV4aXN0aW5nIGRlbnRyeSBpcyBkX2luX2xvb2t1cCgpLCBkX2FsbG9jX3BhcmFsbGVsKCkgd2FpdHMgZm9yXFxuKyAqIHRoYXQgbG9va3VwIHRvIGNvbXBsZXRlIGJlZm9yZSByZXR1cm5pbmcgdGhlIGRlbnRyeSBhbmQgdGhlbiBlbnN1cmVzIHRoZVxcbisgKiBtYXRjaCBpcyBzdGlsbCB2YWxpZC5cXG4rICogVGh1cyBpZiB0aGUgcmV0dXJuZWQgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCkgdGhlbiB0aGUgY2FsbGVyIGhhc1xcbisgKiBleGNsdXNpdmUgYWNjZXNzIHVudGlsIGl0IGNvbXBsZXRlcyB0aGUgbG9va3VwLlxcbisgKiBJZiB0aGUgcmV0dXJuZWQgZGVudHJ5IGlzIG5vdCBkX2luX2xvb2t1cCgpIHRoZW4gYSBsb29rdXAgaGFzXFxuKyAqIGFscmVhZHkgY29tcGxldGVkLlxcbisgKlxcbisgKiBUaGUgQG5hbWUgbXVzdCBhbHJlYWR5IGhhdmUgLVxcdTAwM2VoYXNoIHNldCwgYXMgY2FuIGJlIGFjaGlldmVkXFxuKyAqIGJ5IGUuZy4gdHJ5X2xvb2t1cF9ub3Blcm0oKS5cXG4rICpcXG4rICogUmV0dXJuczogdGhlIGRlbnRyeSwgd2hldGhlciBmb3VuZCBvciBhbGxvY2F0ZWQsIG9yIGFuIGVycm9yICUtRU5PTUVNLlxcbisgKi9cXG4rc3RydWN0IGRlbnRyeSAqZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbit7XFxuK1xcdHJldHVybiBfX2RfYWxsb2NfcGFyYWxsZWwocGFyZW50LCBuYW1lLCBBTExPQ19QQVJBX1dBSVQpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0woZF9hbGxvY19wYXJhbGxlbCk7XFxuIFxcbisvKipcXG4rICogZF9hbGxvY190cnlsb2NrKCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgbmV3IGRlbnRyeVxcbisgKiBAcGFyZW50OiBkZW50cnkgb2YgdGhlIHBhcmVudFxcbisgKiBAbmFtZTogICBuYW1lIG9mIHRoZSBkZW50cnkgd2l0aGluIHRoYXQgcGFyZW50LlxcbisgKlxcbisgKiBBIG5ldyBkZW50cnkgaXMgYWxsb2NhdGVkIGFuZCwgcHJvdmlkaW5nIGl0IGlzIHVuaXF1ZSwgYWRkZWQgdG8gdGhlXFxuKyAqIHJlbGV2YW50IGluZGV4LlxcbisgKiBJZiBhbiBleGlzdGluZyBkZW50cnkgaXMgZm91bmQgd2l0aCB0aGUgc2FtZSBwYXJlbnQvbmFtZSB0aGF0IGlzXFxuKyAqIG5vdCBkX2luX2xvb2t1cCgpIHRoZW4gdGhhdCBpcyByZXR1cm5lZCBpbnN0ZWFkLlxcbisgKiBJZiB0aGUgZXhpc3RpbmcgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCksIGRfYWxsb2NfdHJ5bG9jaygpXFxuKyAqIHJldHVybnMgd2l0aCBlcnJvciAlLUVXT1VMREJMT0NLLlxcbisgKiBUaHVzIGlmIHRoZSByZXR1cm5lZCBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSB0aGVuIHRoZSBjYWxsZXIgaGFzXFxuKyAqIGV4Y2x1c2l2ZSBhY2Nlc3MgdW50aWwgaXQgY29tcGxldGVzIHRoZSBsb29rdXAuXFxuKyAqIElmIHRoZSByZXR1cm5lZCBkZW50cnkgaXMgbm90IGRfaW5fbG9va3VwKCkgdGhlbiBhIGxvb2t1cCBoYXNcXG4rICogYWxyZWFkeSBjb21wbGV0ZWQuXFxuKyAqXFxuKyAqIFRoZSBAbmFtZSBuZWVkIG5vdCBhbHJlYWR5IGhhdmUgLVxcdTAwM2VoYXNoIHNldC5cXG4rICpcXG4rICogUmV0dXJuczogdGhlIGRlbnRyeSwgd2hldGhlciBmb3VuZCBvciBhbGxvY2F0ZWQsIG9yIGFuIGVycm9yXFxuKyAqICAgICUtRU5PTUVNLCAlLUVXT1VMREJMT0NLLCAlLUVBQ0NFUyAoZm9yIGEgYmFkIG5hbWUpIG9yXFxuKyAqICAgIGFueXRoaW5nIHJldHVybmVkIGJ5IC1cXHUwMDNlZF9oYXNoKCkuXFxuKyAqL1xcbitzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3RyeWxvY2soc3RydWN0IGRlbnRyeSAqcGFyZW50LFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IHFzdHIgKm5hbWUpXFxuK3tcXG4rXFx0c3RydWN0IGRlbnRyeSAqZGU7XFxuK1xcbitcXHRkZSA9IHRyeV9sb29rdXBfbm9wZXJtKG5hbWUsIHBhcmVudCk7XFxuK1xcdGlmICghZGUpXFxuK1xcdFxcdGRlID0gX19kX2FsbG9jX3BhcmFsbGVsKHBhcmVudCwgbmFtZSwgQUxMT0NfUEFSQV9GQUlMKTtcXG4rXFx0cmV0dXJuIGRlO1xcbit9XFxuK0VYUE9SVF9TWU1CT0woZF9hbGxvY190cnlsb2NrKTtcXG4rXFxuIC8qXFxuICAqIE1vdmUgZGVudHJ5IGZyb20gaW4tbG9va3VwIHN0YXRlIHRvIGJ1c3ktbmVnYXRpdmUgb25lLlxcbiAgKlxcbkBAIC0yODk0LDYgKzMwMzQsNyBAQCBzdGF0aWMgdm9pZCBfX2RfbG9va3VwX3VuaGFzaChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcdGIgPSBpbl9sb29rdXBfaGFzaChkZW50cnktXFx1MDAzZWRfcGFyZW50LCBkZW50cnktXFx1MDAzZWRfbmFtZS5oYXNoKTtcXG4gXFx0aGxpc3RfYmxfbG9jayhiKTtcXG4gXFx0ZGVudHJ5LVxcdTAwM2VkX2ZsYWdzIFxcdTAwMjY9IH5EQ0FDSEVfUEFSX0xPT0tVUDtcXG4rXFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2ZGVudHJ5LVxcdTAwM2Vsb29rdXBfbWFwKTtcXG4gXFx0X19obGlzdF9ibF9kZWwoXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9pbl9sb29rdXBfaGFzaCk7XFxuIFxcdGhsaXN0X2JsX3VubG9jayhiKTtcXG4gXFx0ZGVudHJ5LVxcdTAwM2V3YWl0ZXJzID0gTlVMTDtcXG5AQCAtMjkzMSwxNSArMzA3MiwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19kX2FkZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdH1cXG4gXFx0aWYgKHVubGlrZWx5KG9wcykpXFxuIFxcdFxcdGRfc2V0X2Rfb3AoZGVudHJ5LCBvcHMpO1xcbi1cXHRpZiAoaW5vZGUpIHtcXG4tXFx0XFx0dW5zaWduZWQgYWRkX2ZsYWdzID0gZF9mbGFnc19mb3JfaW5vZGUoaW5vZGUpO1xcbi1cXHRcXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX2FsaWFzLCBcXHUwMDI2aW5vZGUtXFx1MDAzZWlfZGVudHJ5KTtcXG4tXFx0XFx0cmF3X3dyaXRlX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfc2VxKTtcXG4tXFx0XFx0X19kX3NldF9pbm9kZV9hbmRfdHlwZShkZW50cnksIGlub2RlLCBhZGRfZmxhZ3MpO1xcbi1cXHRcXHRyYXdfd3JpdGVfc2VxY291bnRfZW5kKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfc2VxKTtcXG4tXFx0XFx0ZnNub3RpZnlfdXBkYXRlX2ZsYWdzKGRlbnRyeSk7XFxuLVxcdH1cXG4tXFx0X19kX3JlaGFzaChkZW50cnkpO1xcbitcXHRpZiAoaW5vZGUpXFxuK1xcdFxcdF9fZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTtcXG4rXFx0aWYgKGRfdW5oYXNoZWQoZGVudHJ5KSlcXG4rXFx0XFx0X19kX3JlaGFzaChkZW50cnkpO1xcbiBcXHRpZiAoZGlyKSB7XFxuIFxcdFxcdGVuZF9kaXJfYWRkKGRpciwgbik7XFxuIFxcdFxcdF9fZF93YWtlX2luX2xvb2t1cF93YWl0ZXJzKGRlbnRyeSk7XFxuQEAgLTMyNDEsNyArMzM3Nyw3IEBAIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdGlmIChJU19FUlIoaW5vZGUpKVxcbiBcXHRcXHRyZXR1cm4gRVJSX0NBU1QoaW5vZGUpO1xcbiBcXG4tXFx0QlVHX09OKCFkX3VuaGFzaGVkKGRlbnRyeSkpO1xcbitcXHRCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSk7XFxuIFxcbiBcXHRpZiAoIWlub2RlKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMzI5Nyw2ICszNDMzLDggQEAgc3RydWN0IGRlbnRyeSAqZF9zcGxpY2VfYWxpYXNfb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gICogQGlub2RlOiAgdGhlIGlub2RlIHdoaWNoIG1heSBoYXZlIGEgZGlzY29ubmVjdGVkIGRlbnRyeVxcbiAgKiBAZGVudHJ5OiBhIG5lZ2F0aXZlIGRlbnRyeSB3aGljaCB3ZSB3YW50IHRvIHBvaW50IHRvIHRoZSBpbm9kZS5cXG4gICpcXG4rICogQGRlbnRyeSBtdXN0IGJlIG5lZ2F0aXZlIGFuZCBtYXkgYmUgaW4tbG9va3VwIG9yIHVuaGFzaGVkIG9yIGhhc2hlZC5cXG4rICpcXG4gICogSWYgaW5vZGUgaXMgYSBkaXJlY3RvcnkgYW5kIGhhcyBhbiBJU19ST09UIGFsaWFzLCB0aGVuIGRfbW92ZSB0aGF0IGluXFxuICAqIHBsYWNlIG9mIHRoZSBnaXZlbiBkZW50cnkgYW5kIHJldHVybiBpdCwgZWxzZSBzaW1wbHkgZF9hZGQgdGhlIGlub2RlXFxuICAqIHRvIHRoZSBkZW50cnkgYW5kIHJldHVybiBOVUxMLlxcbkBAIC0zMzA0LDE2ICszNDQyLDE0IEBAIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuICAqIElmIGEgbm9uLUlTX1JPT1QgZGlyZWN0b3J5IGlzIGZvdW5kLCB0aGUgZmlsZXN5c3RlbSBpcyBjb3JydXB0LCBhbmRcXG4gICogd2Ugc2hvdWxkIGVycm9yIG91dDogZGlyZWN0b3JpZXMgY2FuJ3QgaGF2ZSBtdWx0aXBsZSBhbGlhc2VzLlxcbiAgKlxcbi0gKiBUaGlzIGlzIG5lZWRlZCBpbiB0aGUgbG9va3VwIHJvdXRpbmUgb2YgYW55IGZpbGVzeXN0ZW0gdGhhdCBpcyBleHBvcnRhYmxlXFxuLSAqICh2aWEga25mc2QpIHNvIHRoYXQgd2UgY2FuIGJ1aWxkIGRjYWNoZSBwYXRocyB0byBkaXJlY3RvcmllcyBlZmZlY3RpdmVseS5cXG4rICogVGhpcyBzaG91bGQgYmUgdXNlZCB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiAtXFx1MDAzZWxvb2t1cCgpIGFuZCB0b1xcbisgKiBpbnN0YW50aWF0ZSB0aGUgcmVzdWx0IG9mIC1cXHUwMDNlbWtkaXIoKSwgaXMgb2Z0ZW4gdXNlZnVsIGZvclxcbisgKiAtXFx1MDAzZWF0b21pY19vcGVuLCBhbmQgbWF5IGJlIHVzZWQgdG8gaW5zdGFudGlhdGUgb3RoZXIgb2JqZWN0cy5cXG4gICpcXG4gICogSWYgYSBkZW50cnkgd2FzIGZvdW5kIGFuZCBtb3ZlZCwgdGhlbiBpdCBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSBOVUxMXFxuLSAqIGlzIHJldHVybmVkLiAgVGhpcyBtYXRjaGVzIHRoZSBleHBlY3RlZCByZXR1cm4gdmFsdWUgb2YgLVxcdTAwM2Vsb29rdXAuXFxuKyAqIGlzIHJldHVybmVkLiAgVGhpcyBtYXRjaGVzIHRoZSBleHBlY3RlZCByZXR1cm4gdmFsdWUgb2YgLVxcdTAwM2Vsb29rdXAgYW5kXFxuKyAqIC1cXHUwMDNlbWtkaXIuXFxuICAqXFxuLSAqIENsdXN0ZXIgZmlsZXN5c3RlbXMgbWF5IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGEgbmVnYXRpdmUsIGhhc2hlZCBkZW50cnkuXFxuLSAqIEluIHRoYXQgY2FzZSwgd2Uga25vdyB0aGF0IHRoZSBpbm9kZSB3aWxsIGJlIGEgcmVndWxhciBmaWxlLCBhbmQgYWxzbyB0aGlzXFxuLSAqIHdpbGwgb25seSBvY2N1ciBkdXJpbmcgYXRvbWljX29wZW4uIFNvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSBkZW50cnlcXG4tICogYmVpbmcgYWxyZWFkeSBoYXNoZWQgb25seSBpbiB0aGUgZmluYWwgY2FzZS5cXG4gICovXFxuIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4ge1xcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xcbmluZGV4IDIwYTY1MzRlYTNlZmYuLmU5NzhhNzVlYjhhMTQgMTAwNjQ0XFxuLS0tIGEvZnMvbmFtZWkuY1xcbisrKyBiL2ZzL25hbWVpLmNcXG5AQCAtMTkzMyw3ICsxOTMzLDcgQEAgc3RhdGljIG5vaW5saW5lIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9zbG93KGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGlyLVxcdTAwM2VkX2lub2RlO1xcbiBcXHRzdHJ1Y3QgZGVudHJ5ICpyZXM7XFxuIFxcdGlub2RlX2xvY2tfc2hhcmVkKGlub2RlKTtcXG4tXFx0cmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzKTtcXG4rXFx0cmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzIHwgTE9PS1VQX1NIQVJFRCk7XFxuIFxcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xcbiBcXHRyZXR1cm4gcmVzO1xcbiB9XFxuQEAgLTE5NDcsNyArMTk0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfc2xvd19raWxsYWJsZShjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4gXFxuIFxcdGlmIChpbm9kZV9sb2NrX3NoYXJlZF9raWxsYWJsZShpbm9kZSkpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5UUik7XFxuLVxcdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyk7XFxuK1xcdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyB8IExPT0tVUF9TSEFSRUQpO1xcbiBcXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcXG4gXFx0cmV0dXJuIHJlcztcXG4gfVxcbkBAIC0yOTQ2LDggKzI5NDYsOCBAQCBzdHJ1Y3QgZGVudHJ5ICpzdGFydF9kaXJvcChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBxc3RyICpuYW1lLFxcbiAgKiBlbmRfZGlyb3AgLSBzaWduYWwgY29tcGxldGlvbiBvZiBhIGRpcm9wXFxuICAqIEBkZTogdGhlIGRlbnRyeSB3aGljaCB3YXMgcmV0dXJuZWQgYnkgc3RhcnRfZGlyb3Agb3Igc2ltaWxhci5cXG4gICpcXG4tICogSWYgdGhlIGRlIGlzIGFuIGVycm9yLCBub3RoaW5nIGhhcHBlbnMuIE90aGVyd2lzZSBhbnkgbG9jayB0YWtlbiB0b1xcbi0gKiBwcm90ZWN0IHRoZSBkZW50cnkgaXMgZHJvcHBlZCBhbmQgdGhlIGRlbnRyeSBpdHNlbGYgaXMgcmVsZWFzZSAoZHB1dCgpKS5cXG4rICogSWYgdGhlIEBkZSBpcyBhbiBlcnJvciwgbm90aGluZyBoYXBwZW5zLiBPdGhlcndpc2UgYW55IGxvY2sgdGFrZW4gdG9cXG4rICogcHJvdGVjdCB0aGUgZGVudHJ5IGlzIGRyb3BwZWQgYW5kIHRoZSBkZW50cnkgaXRzZWxmIGlzIHJlbGVhc2VkIChkcHV0KCkpLlxcbiAgKi9cXG4gdm9pZCBlbmRfZGlyb3Aoc3RydWN0IGRlbnRyeSAqZGUpXFxuIHtcXG5AQCAtMzIxMCw3ICszMjEwLDcgQEAgRVhQT1JUX1NZTUJPTChsb29rdXBfb25lKTtcXG4gLyoqXFxuICAqIGxvb2t1cF9vbmVfdW5sb2NrZWQgLSBsb29rdXAgc2luZ2xlIHBhdGhuYW1lIGNvbXBvbmVudFxcbiAgKiBAaWRtYXA6XFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBsb29rdXAgaXMgcGVyZm9ybWVkIGZyb21cXG4tICogQG5hbWU6XFx0cXN0ciBvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cFxcbisgKiBAbmFtZTpcXHRxc3RyIGhvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cFxcbiAgKiBAYmFzZTpcXHRiYXNlIGRpcmVjdG9yeSB0byBsb29rdXAgZnJvbVxcbiAgKlxcbiAgKiBUaGlzIGNhbiBiZSB1c2VkIGZvciBpbi1rZXJuZWwgZmlsZXN5c3RlbSBjbGllbnRzIHN1Y2ggYXMgZmlsZSBzZXJ2ZXJzLlxcbkBAIC0zMjQzLDcgKzMyNDMsNyBAQCBFWFBPUlRfU1lNQk9MKGxvb2t1cF9vbmVfdW5sb2NrZWQpO1xcbiAvKipcXG4gICogbG9va3VwX29uZV9wb3NpdGl2ZV9raWxsYWJsZSAtIGxvb2t1cCBzaW5nbGUgcGF0aG5hbWUgY29tcG9uZW50XFxuICAqIEBpZG1hcDpcXHRpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGxvb2t1cCBpcyBwZXJmb3JtZWQgZnJvbVxcbi0gKiBAbmFtZTpcXHRxc3RyIG9sZGluZyBwYXRobmFtZSBjb21wb25lbnQgdG8gbG9va3VwXFxuKyAqIEBuYW1lOlxcdHFzdHIgaG9sZGluZyBwYXRobmFtZSBjb21wb25lbnQgdG8gbG9va3VwXFxuICAqIEBiYXNlOlxcdGJhc2UgZGlyZWN0b3J5IHRvIGxvb2t1cCBmcm9tXFxuICAqXFxuICAqIFRoaXMgaGVscGVyIHdpbGwgeWllbGQgRVJSX1BUUigtRU5PRU5UKSBvbiBuZWdhdGl2ZXMuIFRoZSBoZWxwZXIgcmV0dXJuc1xcbkBAIC0zMjU5LDcgKzMyNTksNyBAQCBFWFBPUlRfU1lNQk9MKGxvb2t1cF9vbmVfdW5sb2NrZWQpO1xcbiAgKiB0aGUgaV9yd3NlbSBpdHNlbGYgaWYgbmVjZXNzYXJ5LiAgSWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZyBvclxcbiAgKiBkZWxpdmVyZWQsIGl0IHdpbGwgcmV0dXJuICUtRUlOVFIgaWYgdGhlIGxvY2sgaXMgbmVlZGVkLlxcbiAgKlxcbi0gKiBSZXR1cm5zOiBBIGRlbnRyeSwgcG9zc2libHkgbmVnYXRpdmUsIG9yXFxuKyAqIFJldHVybnM6IEEgcG9zaXRpdmUgZGVudHJ5LCBvclxcbiAgKlxcdCAgIC0gc2FtZSBlcnJvcnMgYXMgbG9va3VwX29uZV91bmxvY2tlZCgpIG9yXFxuICAqXFx0ICAgLSBFUlJfUFRSKC1FSU5UUikgaWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZy5cXG4gICovXFxuQEAgLTMzODEsNyArMzM4MSw3IEBAIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9ub3Blcm1fcG9zaXRpdmVfdW5sb2NrZWQoc3RydWN0IHFzdHIgKm5hbWUsXFxuIEVYUE9SVF9TWU1CT0wobG9va3VwX25vcGVybV9wb3NpdGl2ZV91bmxvY2tlZCk7XFxuIFxcbiAvKipcXG4tICogc3RhcnRfY3JlYXRpbmcgLSBwcmVwYXJlIHRvIGNyZWF0ZSBhIGdpdmVuIG5hbWUgd2l0aCBwZXJtaXNzaW9uIGNoZWNraW5nXFxuKyAqIHN0YXJ0X2NyZWF0aW5nIC0gcHJlcGFyZSB0byBhY2Nlc3Mgb3IgY3JlYXRlIGEgZ2l2ZW4gbmFtZSB3aXRoIHBlcm1pc3Npb24gY2hlY2tpbmdcXG4gICogQGlkbWFwOiAgaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBwcmVwYXJlIHRvIGNyZWF0ZSB0aGUgbmFtZVxcbiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSBjcmVhdGVkXFxuQEAgLTM0MTMsOCArMzQxMyw4IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmcpO1xcbiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gZmluZCB0aGUgbmFtZVxcbiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSByZW1vdmVkXFxuICAqXFxuLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIHJlbW92aW5nXFxuLSAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LiAgUGVybWlzc2lvbiBjaGVja2luZyAoTUFZX0VYRUMpIGlzIHBlcmZvcm1lZFxcbisgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZyBhbiBvYmplY3RcXG4rICogZnJvbSBhIGRpcmVjdG9yeS4gIFBlcm1pc3Npb24gY2hlY2tpbmcgKE1BWV9FWEVDKSBpcyBwZXJmb3JtZWRcXG4gICogYWdhaW5zdCBAaWRtYXAuXFxuICAqXFxuICAqIElmIHRoZSBuYW1lIGRvZXNuJ3QgZXhpc3QsIGFuIGVycm9yIGlzIHJldHVybmVkLlxcbkBAIC0zNDQwLDcgKzM0NDAsNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X3JlbW92aW5nKTtcXG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIHByZXBhcmUgdG8gY3JlYXRlIHRoZSBuYW1lXFxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWRcXG4gICpcXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcXG4rICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcXG4gICogYW4gb2JqZWN0IGluIGEgZGlyZWN0b3J5LiAgUGVybWlzc2lvbiBjaGVja2luZyAoTUFZX0VYRUMpIGlzIHBlcmZvcm1lZFxcbiAgKiBhZ2FpbnN0IEBpZG1hcC5cXG4gICpcXG5AQCAtMzQ2OSw3ICszNDY5LDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9jcmVhdGluZ19raWxsYWJsZSk7XFxuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBmaW5kIHRoZSBuYW1lXFxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIHJlbW92ZWRcXG4gICpcXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmdcXG4rICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmdcXG4gICogYW4gb2JqZWN0IGZyb20gYSBkaXJlY3RvcnkuICBQZXJtaXNzaW9uIGNoZWNraW5nIChNQVlfRVhFQykgaXMgcGVyZm9ybWVkXFxuICAqIGFnYWluc3QgQGlkbWFwLlxcbiAgKlxcbkBAIC0zNDk5LDcgKzM0OTksNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X3JlbW92aW5nX2tpbGxhYmxlKTtcXG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIHByZXBhcmUgdG8gY3JlYXRlIHRoZSBuYW1lXFxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWRcXG4gICpcXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcXG4rICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcXG4gICogYW4gb2JqZWN0IGluIGEgZGlyZWN0b3J5LlxcbiAgKlxcbiAgKiBJZiB0aGUgbmFtZSBhbHJlYWR5IGV4aXN0cywgYSBwb3NpdGl2ZSBkZW50cnkgaXMgcmV0dXJuZWQuXFxuQEAgLTM1MjIsNyArMzUyMiw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmdfbm9wZXJtKTtcXG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIGZpbmQgdGhlIG5hbWVcXG4gICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgcmVtb3ZlZFxcbiAgKlxcbi0gKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGluIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xcbisgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xcbiAgKiBhbiBvYmplY3QgZnJvbSBhIGRpcmVjdG9yeS5cXG4gICpcXG4gICogSWYgdGhlIG5hbWUgZG9lc24ndCBleGlzdCwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuXFxuQEAgLTM1NDMsMTEgKzM1NDMsMTEgQEAgc3RydWN0IGRlbnRyeSAqc3RhcnRfcmVtb3Zpbmdfbm9wZXJtKHN0cnVjdCBkZW50cnkgKnBhcmVudCxcXG4gRVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZ19ub3Blcm0pO1xcbiBcXG4gLyoqXFxuLSAqIHN0YXJ0X2NyZWF0aW5nX2RlbnRyeSAtIHByZXBhcmUgdG8gY3JlYXRlIGEgZ2l2ZW4gZGVudHJ5XFxuLSAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRlbnRyeSBzaG91bGQgYmUgcmVtb3ZlZFxcbi0gKiBAY2hpbGQ6ICB0aGUgZGVudHJ5IHRvIGJlIHJlbW92ZWRcXG4rICogc3RhcnRfY3JlYXRpbmdfZGVudHJ5IC0gcHJlcGFyZSB0byBhY2Nlc3Mgb3IgY3JlYXRlIGEgZ2l2ZW4gZGVudHJ5XFxuKyAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBvZiBkZW50cnlcXG4rICogQGNoaWxkOiAgdGhlIGRlbnRyeSB0byBiZSBwcmVwYXJlZFxcbiAgKlxcbi0gKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluIG90aGVyIGRpcm9wcyBhbmRcXG4rICogQSBsb2NrIGlzIHRha2VuIHRvIHByb3RlY3QgdGhlIGRlbnRyeSBhZ2FpbnN0IG90aGVyIGRpcm9wcyBhbmRcXG4gICogdGhlIHZhbGlkaXR5IG9mIHRoZSBkZW50cnkgaXMgY2hlY2tlZDogY29ycmVjdCBwYXJlbnQgYW5kIHN0aWxsIGhhc2hlZC5cXG4gICpcXG4gICogSWYgdGhlIGRlbnRyeSBpcyB2YWxpZCBhbmQgbmVnYXRpdmUgYSByZWZlcmVuY2UgaXMgdGFrZW4gYW5kXFxuQEAgLTM1ODAsNyArMzU4MCw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmdfZGVudHJ5KTtcXG4gICogQHBhcmVudDogZGlyZWN0b3J5IGZyb20gd2hpY2ggZGVudHJ5IHNob3VsZCBiZSByZW1vdmVkXFxuICAqIEBjaGlsZDogIHRoZSBkZW50cnkgdG8gYmUgcmVtb3ZlZFxcbiAgKlxcbi0gKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluIG90aGVyIGRpcm9wcyBhbmRcXG4rICogQSBsb2NrIGlzIHRha2VuIHRvIHByb3RlY3QgdGhlIGRlbnRyeSBhZ2FpbnN0IG90aGVyIGRpcm9wcyBhbmRcXG4gICogdGhlIHZhbGlkaXR5IG9mIHRoZSBkZW50cnkgaXMgY2hlY2tlZDogY29ycmVjdCBwYXJlbnQgYW5kIHN0aWxsIGhhc2hlZC5cXG4gICpcXG4gICogSWYgdGhlIGRlbnRyeSBpcyB2YWxpZCBhbmQgcG9zaXRpdmUsIGEgcmVmZXJlbmNlIGlzIHRha2VuIGFuZFxcbkBAIC00NDQwLDEyICs0NDQwLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdGludCBlcnJvciwgY3JlYXRlX2Vycm9yO1xcbiBcXHR1bW9kZV90IG1vZGU7XFxuIFxcdGJvb2wgZ290X3dyaXRlO1xcbitcXHR1bnNpZ25lZCBpbnQgc2hhcmVkX2ZsYWc7XFxuIFxcbiByZXRyeTpcXG4gXFx0b3Blbl9mbGFnID0gb3AtXFx1MDAzZW9wZW5fZmxhZztcXG4gXFx0Z290X3dyaXRlID0gZmFsc2U7XFxuIFxcdG1vZGUgPSBvcC1cXHUwMDNlbW9kZTtcXG4gXFx0Y3JlYXRlX2Vycm9yID0gMDtcXG4rXFx0c2hhcmVkX2ZsYWcgPSAob3Blbl9mbGFnIFxcdTAwMjYgT19DUkVBVCkgPyAwIDogTE9PS1VQX1NIQVJFRDtcXG4gXFxuIFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiAoT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSB8IE9fUkRXUikpIHtcXG4gXFx0XFx0Z290X3dyaXRlID0gIW1udF93YW50X3dyaXRlKG5kLVxcdTAwM2VwYXRoLm1udCk7XFxuQEAgLTQ0NTQsMTAgKzQ0NTYsMTAgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0ICogYSBkaWZmZXJlbnQgZXJyb3I7IHdlJ2xsIGJlIGRyb3BwaW5nIHRoaXMgb25lIGFueXdheS5cXG4gXFx0XFx0ICovXFxuIFxcdH1cXG4tXFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpXFxuLVxcdFxcdGlub2RlX2xvY2soZGlyX2lub2RlKTtcXG4tXFx0ZWxzZVxcbitcXHRpZiAoc2hhcmVkX2ZsYWcpXFxuIFxcdFxcdGlub2RlX2xvY2tfc2hhcmVkKGRpcl9pbm9kZSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0aW5vZGVfbG9jayhkaXJfaW5vZGUpO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KElTX0RFQURESVIoZGlyX2lub2RlKSkpIHtcXG4gXFx0XFx0ZGVudHJ5ID0gRVJSX1BUUigtRU5PRU5UKTtcXG5AQCAtNDUyNiw3ICs0NTI4LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFxuIFxcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XFxuIFxcdFxcdHN0cnVjdCBkZW50cnkgKnJlcyA9IGRpcl9pbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlbG9va3VwKGRpcl9pbm9kZSwgZGVudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG5kLVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgbmQtXFx1MDAzZWZsYWdzIHwgc2hhcmVkX2ZsYWcpO1xcbiBcXHRcXHRkX2xvb2t1cF9kb25lKGRlbnRyeSk7XFxuIFxcdFxcdGlmICh1bmxpa2VseShyZXMpKSB7XFxuIFxcdFxcdFxcdGlmIChJU19FUlIocmVzKSkge1xcbkBAIC00NTc0LDEwICs0NTc2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9PUEVORUQpXFxuIFxcdFxcdFxcdGZzbm90aWZ5X29wZW4oZmlsZSk7XFxuIFxcdH1cXG4tXFx0aWYgKChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSB8fCBjcmVhdGVfZXJyb3IpXFxuLVxcdFxcdGlub2RlX3VubG9jayhkaXJfaW5vZGUpO1xcbi1cXHRlbHNlXFxuK1xcdGlmIChzaGFyZWRfZmxhZylcXG4gXFx0XFx0aW5vZGVfdW5sb2NrX3NoYXJlZChkaXJfaW5vZGUpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGlub2RlX3VubG9jayhkaXJfaW5vZGUpO1xcbiBcXG4gXFx0aWYgKGdvdF93cml0ZSlcXG4gXFx0XFx0bW50X2Ryb3Bfd3JpdGUobmQtXFx1MDAzZXBhdGgubW50KTtcXG5kaWZmIC0tZ2l0IGEvZnMvbmZzL3VubGluay5jIGIvZnMvbmZzL3VubGluay5jXFxuaW5kZXggYjU3Y2ZhYTRkNTE2Zi4uYzhkNzEyMjA0ZTY0OSAxMDA2NDRcXG4tLS0gYS9mcy9uZnMvdW5saW5rLmNcXG4rKysgYi9mcy9uZnMvdW5saW5rLmNcXG5AQCAtNjcsNiArNjcsNyBAQCBzdGF0aWMgdm9pZCBuZnNfYXN5bmNfdW5saW5rX3JlbGVhc2Uodm9pZCAqY2FsbGRhdGEpXFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktXFx1MDAzZWRfc2I7XFxuIFxcbiBcXHR1cF9yZWFkX25vbl9vd25lcihcXHUwMDI2TkZTX0koZF9pbm9kZShkZW50cnktXFx1MDAzZWRfcGFyZW50KSktXFx1MDAzZXJtZGlyX3NlbSk7XFxuK1xcdGRfbG9va3VwX2FjcXVpcmUoZGVudHJ5KTtcXG4gXFx0ZF9sb29rdXBfZG9uZShkZW50cnkpO1xcbiBcXHRuZnNfZnJlZV91bmxpbmtkYXRhKGRhdGEpO1xcbiBcXHRkcHV0KGRlbnRyeSk7XFxuQEAgLTE1OSw2ICsxNjAsOCBAQCBzdGF0aWMgaW50IG5mc19jYWxsX3VubGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZlxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcdGRhdGEtXFx1MDAzZWRlbnRyeSA9IGFsaWFzO1xcbitcXHRkX2xvb2t1cF9yZWxlYXNlKGFsaWFzKTtcXG4rXFxuIFxcdG5mc19kb19jYWxsX3VubGluayhpbm9kZSwgZGF0YSk7XFxuIFxcdHJldHVybiAxO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oXFxuaW5kZXggNGIxZmY5OTYwOGUwMS4uZTdlM2VmMDUzMTNiOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaFxcbkBAIC0xMTYsNiArMTE2LDggQEAgc3RydWN0IGRlbnRyeSB7XFxuIFxcdFxcdFxcdFxcdFxcdCAqIHBvc3NpYmxlIVxcbiBcXHRcXHRcXHRcXHRcXHQgKi9cXG4gXFxuK1xcdC8qIGxvY2tkZXAgdHJhY2tpbmcgb2YgRENBQ0hFX1BBUl9MT09LVVAgbG9ja3MgKi9cXG4rXFx0c3RydWN0IGxvY2tkZXBfbWFwXFx0XFx0bG9va3VwX21hcDtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBkX2xydTtcXHRcXHQvKiBMUlUgbGlzdCAqL1xcbiBcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBkX3NpYjtcXHQvKiBjaGlsZCBvZiBwYXJlbnQgbGlzdCAqL1xcbiBcXHRzdHJ1Y3QgaGxpc3RfaGVhZCBkX2NoaWxkcmVuO1xcdC8qIG91ciBjaGlsZHJlbiAqL1xcbkBAIC0yNTcsNyArMjU5LDkgQEAgZXh0ZXJuIHZvaWQgZF9kZWxldGUoc3RydWN0IGRlbnRyeSAqKTtcXG4gZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7XFxuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcXG4gZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7XFxuK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY190cnlsb2NrKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7XFxuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9zcGxpY2VfYWxpYXMoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7XFxuK3N0cnVjdCBkZW50cnkgKmRfZHVwbGljYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuIC8qIHdlaXJkIHByb2NmcyBtZXNzOyAqTk9UKiBleHBvcnRlZCAqL1xcbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqKTtcXG5AQCAtNTUyLDYgKzU1NiwzNiBAQCBzdGF0aWMgaW5saW5lIGludCBzaW1wbGVfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBcXG4gdW5zaWduZWQgbG9uZyB2ZnNfcHJlc3N1cmVfcmF0aW8odW5zaWduZWQgbG9uZyB2YWwpO1xcbiBcXG4rLyoqXFxuKyAqIGRfbG9va3VwX3JlbGVhc2UgLSByZWxlYXNlIG93bmVyc2hpcCBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrXFxuKyAqIEBkZW50cnk6IGRlbnRyeSB0aGF0IGlzIGxvY2tlZFxcbisgKlxcbisgKiBJZiBhbiBpbi1sb29rdXAgZGVudHJ5IGlzIHRvIGJlIHBhc3NlZCB0byBhbm90aGVyIHRocmVhZCB3aGljaFxcbisgKiB3aWxsIGRyb3AgdGhlIGluLWxvb2t1cCBsb2NrLCB0aGVuIGRfbG9va3VwX3JlbGVhc2UoKSBtdXN0IGJlIGNhbGxlZFxcbisgKiB0byB0ZWxsIGxvY2tkZXAgdGhhdCB0aGlzIHRocmVhZCBubyBsb2NrIGhvbGRzIHRoZSBsb2NrLiAgVGhlXFxuKyAqIHRocmVhZCB0aGF0IHJlY2VpdmVzIHRoZSBsb2NrIG11c3QgY2FsbCBkX2xvb2t1cF9hY3F1aXJlKCkgdG9cXG4rICogYWNxdWlyZSB0aGUgbG9jay5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBkX2xvb2t1cF9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4re1xcbitcXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSlcXG4rXFx0XFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2ZGVudHJ5LVxcdTAwM2Vsb29rdXBfbWFwKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGRfbG9va3VwX2FjcXVpcmUgLSBhY3F1aXJlIG93bmVyc2hpcCBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrXFxuKyAqIEBkZW50cnk6IGRlbnRyeSB0aGF0IGlzIGxvY2tlZFxcbisgKlxcbisgKiBJZiBhbiBpbi1sb29rdXAgZGVudHJ5IHdhcyBwYXNzZWQgdG8gdGhpcyB0aHJlYWQsIHRoZVxcbisgKiBkX2xvb2t1cF9hY3F1aXJlKCkgbXVzdCBiZSBjYWxsZWQgdG8gdGVsbCBsb2NrZGVwIHRoYXQgdGhpc1xcbisgKiB0aHJlYWQgbm93IG93bnMgdGhlIERDQUNIRV9QQVJfTE9PS1VQIGxvY2suXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZF9sb29rdXBfYWNxdWlyZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuK3tcXG4rXFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpXFxuK1xcdFxcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFxcdTAwMjZkZW50cnktXFx1MDAzZWxvb2t1cF9tYXApO1xcbit9XFxuK1xcbiAvKipcXG4gICogZF9pbm9kZSAtIEdldCB0aGUgYWN0dWFsIGlub2RlIG9mIHRoaXMgZGVudHJ5XFxuICAqIEBkZW50cnk6IFRoZSBkZW50cnkgdG8gcXVlcnlcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uYW1laS5oIGIvaW5jbHVkZS9saW51eC9uYW1laS5oXFxuaW5kZXggODZkNjU3YjI0ZmM2YS4uNjVmMGY1NzEyODg1YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25hbWVpLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25hbWVpLmhcXG5AQCAtMzIsOCArMzIsOSBAQCBlbnVtIHsgTUFYX05FU1RFRF9MSU5LUyA9IDggfTtcXG4gI2RlZmluZSBMT09LVVBfQ1JFQVRFXFx0XFx0QklUKDE3KVxcdC8qIC4uLiBpbiBvYmplY3QgY3JlYXRpb24gKi9cXG4gI2RlZmluZSBMT09LVVBfRVhDTFxcdFxcdEJJVCgxOClcXHQvKiAuLi4gaW4gdGFyZ2V0IG11c3Qgbm90IGV4aXN0ICovXFxuICNkZWZpbmUgTE9PS1VQX1JFTkFNRV9UQVJHRVRcXHRCSVQoMTkpXFx0LyogLi4uIGluIGRlc3RpbmF0aW9uIG9mIHJlbmFtZSgpICovXFxuKyNkZWZpbmUgTE9PS1VQX1NIQVJFRFxcdFxcdEJJVCgyMCkgLyogUGFyZW50IGxvY2sgaXMgaGVsZCBzaGFyZWQgKi9cXG4gXFxuLS8qIDQgc3BhcmUgYml0cyBmb3IgaW50ZW50ICovXFxuKy8qIDMgc3BhcmUgYml0cyBmb3IgaW50ZW50ICovXFxuIFxcbiAvKiBTY29waW5nIGZsYWdzIGZvciBsb29rdXAuICovXFxuICNkZWZpbmUgTE9PS1VQX05PX1NZTUxJTktTXFx0QklUKDI0KSAvKiBObyBzeW1saW5rIGNyb3NzaW5nLiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxNTo1Ny45MDk5NDcxOTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxOTkwNDk4ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIk5GU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRfZHVwbGljYXRlXCIsXG4gICAgXCJkX2FsbG9jX3BhcmFsbGVsXCIsXG4gICAgXCJkX2FsbG9jX3RyeWxvY2tcIixcbiAgICBcImRfc3BsaWNlX2FsaWFzXCIsXG4gICAgXCJkX3NwbGljZV9hbGlhc19vcHNcIixcbiAgICBcImRfd2FpdF9sb29rdXBcIixcbiAgICBcImxvb2t1cF9zbG93XCIsXG4gICAgXCJsb29rdXBfc2xvd19raWxsYWJsZVwiLFxuICAgIFwibG9va3VwX29wZW5cIixcbiAgICBcIm5mc19hc3luY191bmxpbmtfcmVsZWFzZVwiLFxuICAgIFwibmZzX2NhbGxfdW5saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvcmUgVkZTIGRjYWNoZSBhbmQgbmFtZWkgbG9naWMsIGluY2x1ZGluZyBwYXJhbGxlbCBsb29rdXAgbG9ja2luZywgc2hhcmVkIGRpcmVjdG9yeSBsb2NraW5nIGZsYWdzIChMT09LVVBfU0hBUkVEKSBpbiBsb29rdXBfc2xvdyBhbmQgbG9va3VwX29wZW4sIGxvY2tkZXAgbWFwIHRyYWNraW5nIGZvciBpbi1sb29rdXAgZGVudHJpZXMsIHVwZGF0ZWQgYXNzZXJ0aW9ucyBpbiBkX3NwbGljZV9hbGlhc19vcHMsIG5ldyBkY2FjaGUgaGVscGVycyAoZF9kdXBsaWNhdGUsIGRfYWxsb2NfdHJ5bG9jayksIGFuZCBORlMgYXN5bmNocm9ub3VzIHVubGluayBsb2NrIHRyYWNraW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIHJlYWNoYWJsZSBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgZGlyZWN0bHkgYWZmZWN0IGNvbmN1cnJlbmN5IGFuZCBpbnZhcmlhbnQgZW5mb3JjZW1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDlhMTJlYzFlNWZlM2YzZTU3N2QzYjYxODM2ZDg2ZTY2OTk0MzBlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDQ6MTU6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuaW5kZXggNjA4ODBlYjBjNDlkMS4uNGUwMTVmMWJmMWY4NCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcbkBAIC0xMjAzLDE2ICsxMjAzLDE2IEBAIHdpbGwgZmFpbC1zYWZlLlxuIFxuIC0tLVxuIFxuLSoqIG1hbmRhdG9yeSoqXG4rKiptYW5kYXRvcnkqKlxuIFxuIGxvb2t1cF9vbmUoKSwgbG9va3VwX29uZV91bmxvY2tlZCgpLCBsb29rdXBfb25lX3Bvc2l0aXZlX3VubG9ja2VkKCkgbm93XG4gdGFrZSBhIHFzdHIgaW5zdGVhZCBvZiBhIG5hbWUgYW5kIGxlbi4gIFRoZXNlLCBub3QgdGhlIFwib25lX2xlblwiXG4gdmVyc2lvbnMsIHNob3VsZCBiZSB1c2VkIHdoZW5ldmVyIGFjY2Vzc2luZyBhIGZpbGVzeXN0ZW0gZnJvbSBvdXRzaWRlXG4tdGhhdCBmaWxlc3lzbXRlbSwgdGhyb3VnaCBhIG1vdW50IHBvaW50IC0gd2hpY2ggd2lsbCBoYXZlIGEgbW50X2lkbWFwLlxuK3RoYXQgZmlsZXN5c3RlbSwgdGhyb3VnaCBhIG1vdW50IHBvaW50IC0gd2hpY2ggd2lsbCBoYXZlIGEgbW50X2lkbWFwLlxuIFxuIC0tLVxuIFxuLSoqIG1hbmRhdG9yeSoqXG4rKiptYW5kYXRvcnkqKlxuIFxuIEZ1bmN0aW9ucyB0cnlfbG9va3VwX29uZV9sZW4oKSwgbG9va3VwX29uZV9sZW4oKSxcbiBsb29rdXBfb25lX2xlbl91bmxvY2tlZCgpIGFuZCBsb29rdXBfcG9zaXRpdmVfdW5sb2NrZWQoKSBoYXZlIGJlZW5cbkBAIC0xMjI5LDcgKzEyMjksNyBAQCBhbHJlYWR5IGJlZW4gcGVyZm9ybWVkIHN1Y2ggYXMgYWZ0ZXIgdmZzX3BhdGhfcGFyZW50X2xvb2t1cCgpXG4gXG4gLS0tXG4gXG4tKiogbWFuZGF0b3J5KipcbisqKm1hbmRhdG9yeSoqXG4gXG4gZF9oYXNoX2FuZF9sb29rdXAoKSBpcyBubyBsb25nZXIgZXhwb3J0ZWQgb3IgYXZhaWxhYmxlIG91dHNpZGUgdGhlIFZGUy5cbiBVc2UgdHJ5X2xvb2t1cF9ub3Blcm0oKSBpbnN0ZWFkLiAgVGhpcyBhZGRzIG5hbWUgdmFsaWRhdGlvbiBhbmQgdGFrZXNcbkBAIC0xMzcwLDcgKzEzNzAsNyBAQCBzaW1pbGFyLlxuIFxuIC0tLVxuIFxuLSoqIG1hbmRhdG9yeSoqXG4rKiptYW5kYXRvcnkqKlxuIFxuIGxvY2tfcmVuYW1lKCksIGxvY2tfcmVuYW1lX2NoaWxkKCksIHVubG9ja19yZW5hbWUoKSBhcmUgbm9cbiBsb25nZXIgYXZhaWxhYmxlLiAgVXNlIHN0YXJ0X3JlbmFtaW5nKCkgb3Igc2ltaWxhci5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbmluZGV4IGQzYTkzZWVjMzk0NWYuLmRlOGY4NTAyMDU2ZTggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuQEAgLTUwNyw4ICs1MDcsOCBAQCBvdGhlcndpc2Ugbm90ZWQuXG4gXHRkZW50cnkgYmVmb3JlIHRoZSBmaXJzdCBta2RpciByZXR1cm5zLlxuIFxuIFx0SWYgdGhlcmUgaXMgYW55IGNoYW5jZSB0aGlzIGNvdWxkIGhhcHBlbiwgdGhlbiB0aGUgbmV3IGlub2RlXG4tXHRzaG91bGQgYmUgZF9kcm9wKCllZCBhbmQgYXR0YWNoZWQgd2l0aCBkX3NwbGljZV9hbGlhcygpLiAgVGhlXG4tXHRyZXR1cm5lZCBkZW50cnkgKGlmIGFueSkgc2hvdWxkIGJlIHJldHVybmVkIGJ5IC1cdTAwM2Vta2RpcigpLlxuK1x0c2hvdWxkIGJlIGF0dGFjaGVkIHdpdGggZF9zcGxpY2VfYWxpYXMoKS4gIFRoZSByZXR1cm5lZFxuK1x0ZGVudHJ5IChpZiBhbnkpIHNob3VsZCBiZSByZXR1cm5lZCBieSAtXHUwMDNlbWtkaXIoKS5cbiBcbiBgYHJtZGlyYGBcbiBcdGNhbGxlZCBieSB0aGUgcm1kaXIoMikgc3lzdGVtIGNhbGwuICBPbmx5IHJlcXVpcmVkIGlmIHlvdSB3YW50XG5kaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuY1xuaW5kZXggMWIxYTgxZjEwZGE2Ny4uM2FmOGIyYWM2OTlmOSAxMDA2NDRcbi0tLSBhL2ZzL2RjYWNoZS5jXG4rKysgYi9mcy9kY2FjaGUuY1xuQEAgLTMyLDYgKzMyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRfc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3RfYmwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uYW1laS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbiAjaW5jbHVkZSBcIm1vdW50LmhcIlxuIFxuQEAgLTE5MDAsNiArMTkwMSw3IEBAIEVYUE9SVF9TWU1CT0woZF9pbnZhbGlkYXRlKTtcbiAgXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbiB7XG4rXHRzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fbG9va3VwX2tleTtcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiBcdGNoYXIgKmRuYW1lO1xuIFx0aW50IGVycjtcbkBAIC0xOTU3LDYgKzE5NTksOCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuIFx0ZGVudHJ5LVx1MDAzZXdhaXRlcnMgPSBOVUxMO1xuIFx0SU5JVF9ITElTVF9OT0RFKFx1MDAyNmRlbnRyeS1cdTAwM2VkX3NpYik7XG4gXG4rXHRsb2NrZGVwX2luaXRfbWFwKFx1MDAyNmRlbnRyeS1cdTAwM2Vsb29rdXBfbWFwLCBcIkRDQUNIRV9QQVJfTE9PS1VQXCIsIFx1MDAyNl9fbG9va3VwX2tleSwgMCk7XG4rXG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfb3AgXHUwMDI2XHUwMDI2IGRlbnRyeS1cdTAwM2VkX29wLVx1MDAzZWRfaW5pdCkge1xuIFx0XHRlcnIgPSBkZW50cnktXHUwMDNlZF9vcC1cdTAwM2VkX2luaXQoZGVudHJ5KTtcbiBcdFx0aWYgKGVycikge1xuQEAgLTE5OTksNiArMjAwMyw1OCBAQCBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiBwYXJlbnQsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuIH1cbiBFWFBPUlRfU1lNQk9MKGRfYWxsb2MpO1xuIFxuKy8qKlxuKyAqIGRfZHVwbGljYXRlIC0gZHVwbGljYXRlIGEgZGVudHJ5IGZvciBjb21iaW5lZCBhdG9taWMgb3BlcmF0aW9uXG4rICogQGRlbnRyeTogdGhlIGRlbnRyeSB0byBkdXBsaWNhdGVcbisgKlxuKyAqIFNvbWUgcmVuYW1lIG9wZXJhdGlvbnMgbmVlZCB0byBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgb3BlcmF0aW9uXG4rICogaW5zaWRlIHRoZSBmaWxlc3lzdGVtLlxuKyAqIDEvIEEgY2x1c3RlciBmaWxlc3lzdGVtIHdoZW4gcmVuYW1pbmcgdG8gYW4gaW4tdXNlIGZpbGUgbWlnaHQgbmVlZCB0b1xuKyAqICAgZmlyc3QgXCJzaWxseS1yZW5hbWVcIiB0aGF0IHRhcmdldCBvdXQgb2YgdGhlIHdheSBiZWZvcmUgdGhlIG1haW4gcmVuYW1lXG4rICogMi8gQSBmaWxlc3lzdGVtIHRoYXQgc3VwcG9ydHMgd2hpdGUtb3V0IG1pZ2h0IHdhbnQgdG8gY3JlYXRlIGEgd2hpdGVvdXRcbisgKiAgIGluIHBsYWNlIG9mIHRoZSBmaWxlIGJlaW5nIG1vdmVkLlxuKyAqXG4rICogRm9yIHRoaXMgdGhleSBuZWVkIHR3byBkZW50cmllcyB3aGljaCB0ZW1wb3JhcmlseSBoYXZlIHRoZSBzYW1lIG5hbWUsXG4rICogYmVmb3JlIG9uZSBpcyByZW5hbWVkLiAgZF9kdXBsaWNhdGUoKSBwcm92aWRlcyBmb3IgdGhpcy4gIEdpdmVuIGFcbisgKiBwb3NpdGl2ZSBoYXNoZWQgZGVudHJ5LCBpdCBjcmVhdGVzIGEgc2Vjb25kIGluLWxvb2t1cCBkZW50cnkuXG4rICogQmVjYXVzZSB0aGUgb3JpZ2luYWwgZGVudHJ5IGV4aXN0cywgbm8gb3RoZXIgdGhyZWFkIHdpbGwgdHJ5IHRvXG4rICogY3JlYXRlIGFuIGluLWxvb2t1cCBkZW50cnksIHNvIHRoZXJlIGNhbiBiZSBubyByYWNlIGluIHRoaXMgY3JlYXRlLlxuKyAqXG4rICogVGhlIGNhbGxlciBzaG91bGQgZF9tb3ZlKCkgdGhlIG9yaWdpbmFsIHRvIGEgbmV3IG5hbWUsIG9mdGVuIHZpYSBhXG4rICogcmVuYW1lIHJlcXVlc3QsIGFuZCBzaG91bGQgY2FsbCBkX2xvb2t1cF9kb25lKCkgb24gdGhlIG5ld2x5IGNyZWF0ZWRcbisgKiBkZW50cnkuICBJZiB0aGUgbmV3IGlzIGluc3RhbnRpYXRlZCB0aGVuIHRoZSBvbGQgTVVTVCBlaXRoZXIgYmUgbW92ZWRcbisgKiBvciBkcm9wcGVkLlxuKyAqXG4rICogUGFyZW50IG11c3QgYmUgbG9ja2VkLlxuKyAqXG4rICogUmV0dXJuczogYW4gaW4tbG9va3VwIGRlbnRyeSwgb3IgLUVOT01FTS5cbisgKi9cbitzdHJ1Y3QgZGVudHJ5ICpkX2R1cGxpY2F0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4re1xuK1x0dW5zaWduZWQgaW50IGhhc2ggPSBkZW50cnktXHUwMDNlZF9uYW1lLmhhc2g7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQ7XG4rXHRzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYiA9IGluX2xvb2t1cF9oYXNoKHBhcmVudCwgaGFzaCk7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpuZXcgPSBfX2RfYWxsb2MocGFyZW50LVx1MDAzZWRfc2IsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUpO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFuZXcpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdG5ldy1cdTAwM2VkX2ZsYWdzIHw9IERDQUNIRV9QQVJfTE9PS1VQO1xuK1x0bG9ja19tYXBfYWNxdWlyZV90cnkoXHUwMDI2bmV3LVx1MDAzZWxvb2t1cF9tYXApO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnBhcmVudC1cdTAwM2VkX2xvY2spO1xuK1x0bmV3LVx1MDAzZWRfcGFyZW50ID0gZGdldF9kbG9jayhwYXJlbnQpO1xuK1x0aGxpc3RfYWRkX2hlYWQoXHUwMDI2bmV3LVx1MDAzZWRfc2liLCBcdTAwMjZwYXJlbnQtXHUwMDNlZF9jaGlsZHJlbik7XG4rXHRpZiAocGFyZW50LVx1MDAzZWRfZmxhZ3MgXHUwMDI2IERDQUNIRV9ESVNDT05ORUNURUQpXG4rXHRcdG5ldy1cdTAwM2VkX2ZsYWdzIHw9IERDQUNIRV9ESVNDT05ORUNURUQ7XG4rXHRzcGluX3VubG9jayhcdTAwMjZwYXJlbnQtXHUwMDNlZF9sb2NrKTtcbitcbitcdGhsaXN0X2JsX2xvY2soYik7XG4rXHRobGlzdF9ibF9hZGRfaGVhZChcdTAwMjZuZXctXHUwMDNlZF9pbl9sb29rdXBfaGFzaCwgYik7XG4rXHRobGlzdF9ibF91bmxvY2soYik7XG4rXHRyZXR1cm4gbmV3O1xuK31cbitFWFBPUlRfU1lNQk9MKGRfZHVwbGljYXRlKTtcbitcbiBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX2Fub24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4gXHRyZXR1cm4gX19kX2FsbG9jKHNiLCBOVUxMKTtcbkBAIC0yMTY4LDcgKzIyMjQsNiBAQCBzdGF0aWMgdm9pZCBfX2RfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuICAqIChvciBvdGhlcndpc2Ugc2V0KSBieSB0aGUgY2FsbGVyIHRvIGluZGljYXRlIHRoYXQgaXQgaXMgbm93XG4gICogaW4gdXNlIGJ5IHRoZSBkY2FjaGUuXG4gICovXG4tIFxuIHZvaWQgZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgc3RydWN0IGlub2RlICogaW5vZGUpXG4ge1xuIFx0QlVHX09OKGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGVudHJ5KSk7XG5AQCAtMjc1MCw2ICsyODA1LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBlbmRfZGlyX2FkZChzdHJ1Y3QgaW5vZGUgKmRpciwgdW5zaWduZWQgaW50IG4pXG4gc3RhdGljIHZvaWQgZF93YWl0X2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4ge1xuIFx0aWYgKGxpa2VseShkX2luX2xvb2t1cChkZW50cnkpKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBUZWxsIGxvY2tkZXAgd2Ugd2lsbCB3YWl0IGZvciB0aGUgbG9va3VwIGxvY2ssIGFmdGVyXG4rXHRcdCAqIGRyb3BwaW5nIC1cdTAwM2VkX2xvY2ssIGJ1dCB3b24ndCBhY3R1YWxseSB0YWtlIGl0LlxuK1x0XHQgKi9cbitcdFx0c3Bpbl9yZWxlYXNlKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xvY2suZGVwX21hcCwgMCk7XG4rXHRcdGxvY2tfbWFwX3N5bmMoXHUwMDI2ZGVudHJ5LVx1MDAzZWxvb2t1cF9tYXApO1xuK1x0XHRzcGluX2FjcXVpcmUoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jay5kZXBfbWFwLCAwLCAxLCBfVEhJU19JUF8pO1xuK1xuIFx0XHRkZW50cnktXHUwMDNlZF9mbGFncyB8PSBEQ0FDSEVfTE9PS1VQX1dBSVRFUlM7XG4gXHRcdHdhaXRfdmFyX2V2ZW50X3NwaW5sb2NrKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2ZsYWdzLFxuIFx0XHRcdFx0XHQhZF9pbl9sb29rdXAoZGVudHJ5KSxcbkBAIC0yNzU3LDggKzI4MjAsMTYgQEAgc3RhdGljIHZvaWQgZF93YWl0X2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHR9XG4gfVxuIFxuLXN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuLVx0XHRcdFx0Y29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4rLyogV2hhdCB0byBkbyB3aGVuIF9fZF9hbGxvY19wYXJhbGxlbCBmaW5kcyBhIGRfaW5fbG9va3VwIGRlbnRyeSAqL1xuK2VudW0gYWxsb2NfcGFyYSB7XG4rXHRBTExPQ19QQVJBX1dBSVQsXG4rXHRBTExPQ19QQVJBX0ZBSUwsXG4rfTtcbitcbitzdGF0aWMgaW5saW5lXG4rc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCxcbitcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4rXHRcdFx0XHQgIGVudW0gYWxsb2NfcGFyYSBob3cpXG4ge1xuIFx0dW5zaWduZWQgaW50IGhhc2ggPSBuYW1lLVx1MDAzZWhhc2g7XG4gXHRzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYiA9IGluX2xvb2t1cF9oYXNoKHBhcmVudCwgaGFzaCk7XG5AQCAtMjgzMSw2ICsyOTAyLDEyIEBAIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuIFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xvY2spO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG4gXHRcdH1cbitcdFx0aWYgKHVubGlrZWx5KGhvdyA9PSBBTExPQ19QQVJBX0ZBSUwpKSB7XG4rXHRcdFx0LyogbXVzdG4ndCB3YWl0IGZvciBjb25jdXJyZW50IGxvb2t1cCB0byBjb21wbGV0ZSAqL1xuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xvY2spO1xuK1x0XHRcdGRwdXQobmV3KTtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUigtRVdPVUxEQkxPQ0spO1xuK1x0XHR9XG4gXHRcdC8qXG4gXHRcdCAqIHNvbWVib2R5IGlzIGxpa2VseSB0byBiZSBzdGlsbCBkb2luZyBsb29rdXAgZm9yIGl0O1xuIFx0XHQgKiBwaW4gaXQgYW5kIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNoXG5AQCAtMjg1OCwxNCArMjkzNSw3NyBAQCBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCxcbiBcdH1cbiBcdGhsaXN0X2JsX2FkZF9oZWFkKFx1MDAyNm5ldy1cdTAwM2VkX2luX2xvb2t1cF9oYXNoLCBiKTtcbiBcdGhsaXN0X2JsX3VubG9jayhiKTtcbitcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFx1MDAyNm5ldy1cdTAwM2Vsb29rdXBfbWFwKTtcbiBcdHJldHVybiBuZXc7XG4gbWlzbWF0Y2g6XG4gXHRzcGluX3VubG9jayhcdTAwMjZkZW50cnktXHUwMDNlZF9sb2NrKTtcbiBcdGRwdXQoZGVudHJ5KTtcbiBcdGdvdG8gcmV0cnk7XG4gfVxuK1xuKy8qKlxuKyAqIGRfYWxsb2NfcGFyYWxsZWwoKSAtIGFsbG9jYXRlIGEgbmV3IGRlbnRyeSBhbmQgZW5zdXJlIHVuaXF1ZW5lc3NcbisgKiBAcGFyZW50OiBkZW50cnkgb2YgdGhlIHBhcmVudFxuKyAqIEBuYW1lOiAgIG5hbWUgb2YgdGhlIGRlbnRyeSB3aXRoaW4gdGhhdCBwYXJlbnQuXG4rICpcbisgKiBBIG5ldyBkZW50cnkgaXMgYWxsb2NhdGVkIGFuZCwgcHJvdmlkaW5nIGl0IGlzIHVuaXF1ZSwgYWRkZWQgdG8gdGhlXG4rICogcmVsZXZhbnQgaW5kZXguXG4rICogSWYgYW4gZXhpc3RpbmcgZGVudHJ5IGlzIGZvdW5kIHdpdGggdGhlIHNhbWUgcGFyZW50L25hbWUgdGhhdCBpc1xuKyAqIG5vdCBkX2luX2xvb2t1cCgpLCB0aGVuIHRoYXQgaXMgcmV0dXJuZWQgaW5zdGVhZC5cbisgKiBJZiB0aGUgZXhpc3RpbmcgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCksIGRfYWxsb2NfcGFyYWxsZWwoKSB3YWl0cyBmb3JcbisgKiB0aGF0IGxvb2t1cCB0byBjb21wbGV0ZSBiZWZvcmUgcmV0dXJuaW5nIHRoZSBkZW50cnkgYW5kIHRoZW4gZW5zdXJlcyB0aGVcbisgKiBtYXRjaCBpcyBzdGlsbCB2YWxpZC5cbisgKiBUaHVzIGlmIHRoZSByZXR1cm5lZCBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSB0aGVuIHRoZSBjYWxsZXIgaGFzXG4rICogZXhjbHVzaXZlIGFjY2VzcyB1bnRpbCBpdCBjb21wbGV0ZXMgdGhlIGxvb2t1cC5cbisgKiBJZiB0aGUgcmV0dXJuZWQgZGVudHJ5IGlzIG5vdCBkX2luX2xvb2t1cCgpIHRoZW4gYSBsb29rdXAgaGFzXG4rICogYWxyZWFkeSBjb21wbGV0ZWQuXG4rICpcbisgKiBUaGUgQG5hbWUgbXVzdCBhbHJlYWR5IGhhdmUgLVx1MDAzZWhhc2ggc2V0LCBhcyBjYW4gYmUgYWNoaWV2ZWRcbisgKiBieSBlLmcuIHRyeV9sb29rdXBfbm9wZXJtKCkuXG4rICpcbisgKiBSZXR1cm5zOiB0aGUgZGVudHJ5LCB3aGV0aGVyIGZvdW5kIG9yIGFsbG9jYXRlZCwgb3IgYW4gZXJyb3IgJS1FTk9NRU0uXG4rICovXG4rc3RydWN0IGRlbnRyeSAqZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4rXHRcdFx0XHRjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbit7XG4rXHRyZXR1cm4gX19kX2FsbG9jX3BhcmFsbGVsKHBhcmVudCwgbmFtZSwgQUxMT0NfUEFSQV9XQUlUKTtcbit9XG4gRVhQT1JUX1NZTUJPTChkX2FsbG9jX3BhcmFsbGVsKTtcbiBcbisvKipcbisgKiBkX2FsbG9jX3RyeWxvY2soKSAtIGZpbmQgb3IgYWxsb2NhdGUgYSBuZXcgZGVudHJ5XG4rICogQHBhcmVudDogZGVudHJ5IG9mIHRoZSBwYXJlbnRcbisgKiBAbmFtZTogICBuYW1lIG9mIHRoZSBkZW50cnkgd2l0aGluIHRoYXQgcGFyZW50LlxuKyAqXG4rICogQSBuZXcgZGVudHJ5IGlzIGFsbG9jYXRlZCBhbmQsIHByb3ZpZGluZyBpdCBpcyB1bmlxdWUsIGFkZGVkIHRvIHRoZVxuKyAqIHJlbGV2YW50IGluZGV4LlxuKyAqIElmIGFuIGV4aXN0aW5nIGRlbnRyeSBpcyBmb3VuZCB3aXRoIHRoZSBzYW1lIHBhcmVudC9uYW1lIHRoYXQgaXNcbisgKiBub3QgZF9pbl9sb29rdXAoKSB0aGVuIHRoYXQgaXMgcmV0dXJuZWQgaW5zdGVhZC5cbisgKiBJZiB0aGUgZXhpc3RpbmcgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCksIGRfYWxsb2NfdHJ5bG9jaygpXG4rICogcmV0dXJucyB3aXRoIGVycm9yICUtRVdPVUxEQkxPQ0suXG4rICogVGh1cyBpZiB0aGUgcmV0dXJuZWQgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCkgdGhlbiB0aGUgY2FsbGVyIGhhc1xuKyAqIGV4Y2x1c2l2ZSBhY2Nlc3MgdW50aWwgaXQgY29tcGxldGVzIHRoZSBsb29rdXAuXG4rICogSWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBub3QgZF9pbl9sb29rdXAoKSB0aGVuIGEgbG9va3VwIGhhc1xuKyAqIGFscmVhZHkgY29tcGxldGVkLlxuKyAqXG4rICogVGhlIEBuYW1lIG5lZWQgbm90IGFscmVhZHkgaGF2ZSAtXHUwMDNlaGFzaCBzZXQuXG4rICpcbisgKiBSZXR1cm5zOiB0aGUgZGVudHJ5LCB3aGV0aGVyIGZvdW5kIG9yIGFsbG9jYXRlZCwgb3IgYW4gZXJyb3JcbisgKiAgICAlLUVOT01FTSwgJS1FV09VTERCTE9DSywgJS1FQUNDRVMgKGZvciBhIGJhZCBuYW1lKSBvclxuKyAqICAgIGFueXRoaW5nIHJldHVybmVkIGJ5IC1cdTAwM2VkX2hhc2goKS5cbisgKi9cbitzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3RyeWxvY2soc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgcXN0ciAqbmFtZSlcbit7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcbitcbitcdGRlID0gdHJ5X2xvb2t1cF9ub3Blcm0obmFtZSwgcGFyZW50KTtcbitcdGlmICghZGUpXG4rXHRcdGRlID0gX19kX2FsbG9jX3BhcmFsbGVsKHBhcmVudCwgbmFtZSwgQUxMT0NfUEFSQV9GQUlMKTtcbitcdHJldHVybiBkZTtcbit9XG4rRVhQT1JUX1NZTUJPTChkX2FsbG9jX3RyeWxvY2spO1xuK1xuIC8qXG4gICogTW92ZSBkZW50cnkgZnJvbSBpbi1sb29rdXAgc3RhdGUgdG8gYnVzeS1uZWdhdGl2ZSBvbmUuXG4gICpcbkBAIC0yODk0LDYgKzMwMzQsNyBAQCBzdGF0aWMgdm9pZCBfX2RfbG9va3VwX3VuaGFzaChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRiID0gaW5fbG9va3VwX2hhc2goZGVudHJ5LVx1MDAzZWRfcGFyZW50LCBkZW50cnktXHUwMDNlZF9uYW1lLmhhc2gpO1xuIFx0aGxpc3RfYmxfbG9jayhiKTtcbiBcdGRlbnRyeS1cdTAwM2VkX2ZsYWdzIFx1MDAyNj0gfkRDQUNIRV9QQVJfTE9PS1VQO1xuK1x0bG9ja19tYXBfcmVsZWFzZShcdTAwMjZkZW50cnktXHUwMDNlbG9va3VwX21hcCk7XG4gXHRfX2hsaXN0X2JsX2RlbChcdTAwMjZkZW50cnktXHUwMDNlZF9pbl9sb29rdXBfaGFzaCk7XG4gXHRobGlzdF9ibF91bmxvY2soYik7XG4gXHRkZW50cnktXHUwMDNld2FpdGVycyA9IE5VTEw7XG5AQCAtMjkzMSwxNSArMzA3MiwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19kX2FkZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHR9XG4gXHRpZiAodW5saWtlbHkob3BzKSlcbiBcdFx0ZF9zZXRfZF9vcChkZW50cnksIG9wcyk7XG4tXHRpZiAoaW5vZGUpIHtcbi1cdFx0dW5zaWduZWQgYWRkX2ZsYWdzID0gZF9mbGFnc19mb3JfaW5vZGUoaW5vZGUpO1xuLVx0XHRobGlzdF9hZGRfaGVhZChcdTAwMjZkZW50cnktXHUwMDNlZF9hbGlhcywgXHUwMDI2aW5vZGUtXHUwMDNlaV9kZW50cnkpO1xuLVx0XHRyYXdfd3JpdGVfc2VxY291bnRfYmVnaW4oXHUwMDI2ZGVudHJ5LVx1MDAzZWRfc2VxKTtcbi1cdFx0X19kX3NldF9pbm9kZV9hbmRfdHlwZShkZW50cnksIGlub2RlLCBhZGRfZmxhZ3MpO1xuLVx0XHRyYXdfd3JpdGVfc2VxY291bnRfZW5kKFx1MDAyNmRlbnRyeS1cdTAwM2VkX3NlcSk7XG4tXHRcdGZzbm90aWZ5X3VwZGF0ZV9mbGFncyhkZW50cnkpO1xuLVx0fVxuLVx0X19kX3JlaGFzaChkZW50cnkpO1xuK1x0aWYgKGlub2RlKVxuK1x0XHRfX2RfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7XG4rXHRpZiAoZF91bmhhc2hlZChkZW50cnkpKVxuK1x0XHRfX2RfcmVoYXNoKGRlbnRyeSk7XG4gXHRpZiAoZGlyKSB7XG4gXHRcdGVuZF9kaXJfYWRkKGRpciwgbik7XG4gXHRcdF9fZF93YWtlX2luX2xvb2t1cF93YWl0ZXJzKGRlbnRyeSk7XG5AQCAtMzI0MSw3ICszMzc3LDcgQEAgc3RydWN0IGRlbnRyeSAqZF9zcGxpY2VfYWxpYXNfb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdGlmIChJU19FUlIoaW5vZGUpKVxuIFx0XHRyZXR1cm4gRVJSX0NBU1QoaW5vZGUpO1xuIFxuLVx0QlVHX09OKCFkX3VuaGFzaGVkKGRlbnRyeSkpO1xuK1x0QlVHX09OKGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpO1xuIFxuIFx0aWYgKCFpbm9kZSlcbiBcdFx0Z290byBvdXQ7XG5AQCAtMzI5Nyw2ICszNDMzLDggQEAgc3RydWN0IGRlbnRyeSAqZF9zcGxpY2VfYWxpYXNfb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiAgKiBAaW5vZGU6ICB0aGUgaW5vZGUgd2hpY2ggbWF5IGhhdmUgYSBkaXNjb25uZWN0ZWQgZGVudHJ5XG4gICogQGRlbnRyeTogYSBuZWdhdGl2ZSBkZW50cnkgd2hpY2ggd2Ugd2FudCB0byBwb2ludCB0byB0aGUgaW5vZGUuXG4gICpcbisgKiBAZGVudHJ5IG11c3QgYmUgbmVnYXRpdmUgYW5kIG1heSBiZSBpbi1sb29rdXAgb3IgdW5oYXNoZWQgb3IgaGFzaGVkLlxuKyAqXG4gICogSWYgaW5vZGUgaXMgYSBkaXJlY3RvcnkgYW5kIGhhcyBhbiBJU19ST09UIGFsaWFzLCB0aGVuIGRfbW92ZSB0aGF0IGluXG4gICogcGxhY2Ugb2YgdGhlIGdpdmVuIGRlbnRyeSBhbmQgcmV0dXJuIGl0LCBlbHNlIHNpbXBseSBkX2FkZCB0aGUgaW5vZGVcbiAgKiB0byB0aGUgZGVudHJ5IGFuZCByZXR1cm4gTlVMTC5cbkBAIC0zMzA0LDE2ICszNDQyLDE0IEBAIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gICogSWYgYSBub24tSVNfUk9PVCBkaXJlY3RvcnkgaXMgZm91bmQsIHRoZSBmaWxlc3lzdGVtIGlzIGNvcnJ1cHQsIGFuZFxuICAqIHdlIHNob3VsZCBlcnJvciBvdXQ6IGRpcmVjdG9yaWVzIGNhbid0IGhhdmUgbXVsdGlwbGUgYWxpYXNlcy5cbiAgKlxuLSAqIFRoaXMgaXMgbmVlZGVkIGluIHRoZSBsb29rdXAgcm91dGluZSBvZiBhbnkgZmlsZXN5c3RlbSB0aGF0IGlzIGV4cG9ydGFibGVcbi0gKiAodmlhIGtuZnNkKSBzbyB0aGF0IHdlIGNhbiBidWlsZCBkY2FjaGUgcGF0aHMgdG8gZGlyZWN0b3JpZXMgZWZmZWN0aXZlbHkuXG4rICogVGhpcyBzaG91bGQgYmUgdXNlZCB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiAtXHUwMDNlbG9va3VwKCkgYW5kIHRvXG4rICogaW5zdGFudGlhdGUgdGhlIHJlc3VsdCBvZiAtXHUwMDNlbWtkaXIoKSwgaXMgb2Z0ZW4gdXNlZnVsIGZvclxuKyAqIC1cdTAwM2VhdG9taWNfb3BlbiwgYW5kIG1heSBiZSB1c2VkIHRvIGluc3RhbnRpYXRlIG90aGVyIG9iamVjdHMuXG4gICpcbiAgKiBJZiBhIGRlbnRyeSB3YXMgZm91bmQgYW5kIG1vdmVkLCB0aGVuIGl0IGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlIE5VTExcbi0gKiBpcyByZXR1cm5lZC4gIFRoaXMgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIG9mIC1cdTAwM2Vsb29rdXAuXG4rICogaXMgcmV0dXJuZWQuICBUaGlzIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHJldHVybiB2YWx1ZSBvZiAtXHUwMDNlbG9va3VwIGFuZFxuKyAqIC1cdTAwM2Vta2Rpci5cbiAgKlxuLSAqIENsdXN0ZXIgZmlsZXN5c3RlbXMgbWF5IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGEgbmVnYXRpdmUsIGhhc2hlZCBkZW50cnkuXG4tICogSW4gdGhhdCBjYXNlLCB3ZSBrbm93IHRoYXQgdGhlIGlub2RlIHdpbGwgYmUgYSByZWd1bGFyIGZpbGUsIGFuZCBhbHNvIHRoaXNcbi0gKiB3aWxsIG9ubHkgb2NjdXIgZHVyaW5nIGF0b21pY19vcGVuLiBTbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgZGVudHJ5XG4tICogYmVpbmcgYWxyZWFkeSBoYXNoZWQgb25seSBpbiB0aGUgZmluYWwgY2FzZS5cbiAgKi9cbiBzdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4ge1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi5lOTc4YTc1ZWI4YTE0IDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuKysrIGIvZnMvbmFtZWkuY1xuQEAgLTE5MzMsNyArMTkzMyw3IEBAIHN0YXRpYyBub2lubGluZSBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfc2xvdyhjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkaXItXHUwMDNlZF9pbm9kZTtcbiBcdHN0cnVjdCBkZW50cnkgKnJlcztcbiBcdGlub2RlX2xvY2tfc2hhcmVkKGlub2RlKTtcbi1cdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyk7XG4rXHRyZXMgPSBfX2xvb2t1cF9zbG93KG5hbWUsIGRpciwgZmxhZ3MgfCBMT09LVVBfU0hBUkVEKTtcbiBcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuIFx0cmV0dXJuIHJlcztcbiB9XG5AQCAtMTk0Nyw3ICsxOTQ3LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9zbG93X2tpbGxhYmxlKGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFxuIFx0aWYgKGlub2RlX2xvY2tfc2hhcmVkX2tpbGxhYmxlKGlub2RlKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlRSKTtcbi1cdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyk7XG4rXHRyZXMgPSBfX2xvb2t1cF9zbG93KG5hbWUsIGRpciwgZmxhZ3MgfCBMT09LVVBfU0hBUkVEKTtcbiBcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuIFx0cmV0dXJuIHJlcztcbiB9XG5AQCAtMjk0Niw4ICsyOTQ2LDggQEAgc3RydWN0IGRlbnRyeSAqc3RhcnRfZGlyb3Aoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiAgKiBlbmRfZGlyb3AgLSBzaWduYWwgY29tcGxldGlvbiBvZiBhIGRpcm9wXG4gICogQGRlOiB0aGUgZGVudHJ5IHdoaWNoIHdhcyByZXR1cm5lZCBieSBzdGFydF9kaXJvcCBvciBzaW1pbGFyLlxuICAqXG4tICogSWYgdGhlIGRlIGlzIGFuIGVycm9yLCBub3RoaW5nIGhhcHBlbnMuIE90aGVyd2lzZSBhbnkgbG9jayB0YWtlbiB0b1xuLSAqIHByb3RlY3QgdGhlIGRlbnRyeSBpcyBkcm9wcGVkIGFuZCB0aGUgZGVudHJ5IGl0c2VsZiBpcyByZWxlYXNlIChkcHV0KCkpLlxuKyAqIElmIHRoZSBAZGUgaXMgYW4gZXJyb3IsIG5vdGhpbmcgaGFwcGVucy4gT3RoZXJ3aXNlIGFueSBsb2NrIHRha2VuIHRvXG4rICogcHJvdGVjdCB0aGUgZGVudHJ5IGlzIGRyb3BwZWQgYW5kIHRoZSBkZW50cnkgaXRzZWxmIGlzIHJlbGVhc2VkIChkcHV0KCkpLlxuICAqL1xuIHZvaWQgZW5kX2Rpcm9wKHN0cnVjdCBkZW50cnkgKmRlKVxuIHtcbkBAIC0zMjEwLDcgKzMyMTAsNyBAQCBFWFBPUlRfU1lNQk9MKGxvb2t1cF9vbmUpO1xuIC8qKlxuICAqIGxvb2t1cF9vbmVfdW5sb2NrZWQgLSBsb29rdXAgc2luZ2xlIHBhdGhuYW1lIGNvbXBvbmVudFxuICAqIEBpZG1hcDpcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgbG9va3VwIGlzIHBlcmZvcm1lZCBmcm9tXG4tICogQG5hbWU6XHRxc3RyIG9sZGluZyBwYXRobmFtZSBjb21wb25lbnQgdG8gbG9va3VwXG4rICogQG5hbWU6XHRxc3RyIGhvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cFxuICAqIEBiYXNlOlx0YmFzZSBkaXJlY3RvcnkgdG8gbG9va3VwIGZyb21cbiAgKlxuICAqIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGluLWtlcm5lbCBmaWxlc3lzdGVtIGNsaWVudHMgc3VjaCBhcyBmaWxlIHNlcnZlcnMuXG5AQCAtMzI0Myw3ICszMjQzLDcgQEAgRVhQT1JUX1NZTUJPTChsb29rdXBfb25lX3VubG9ja2VkKTtcbiAvKipcbiAgKiBsb29rdXBfb25lX3Bvc2l0aXZlX2tpbGxhYmxlIC0gbG9va3VwIHNpbmdsZSBwYXRobmFtZSBjb21wb25lbnRcbiAgKiBAaWRtYXA6XHRpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGxvb2t1cCBpcyBwZXJmb3JtZWQgZnJvbVxuLSAqIEBuYW1lOlx0cXN0ciBvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cFxuKyAqIEBuYW1lOlx0cXN0ciBob2xkaW5nIHBhdGhuYW1lIGNvbXBvbmVudCB0byBsb29rdXBcbiAgKiBAYmFzZTpcdGJhc2UgZGlyZWN0b3J5IHRvIGxvb2t1cCBmcm9tXG4gICpcbiAgKiBUaGlzIGhlbHBlciB3aWxsIHlpZWxkIEVSUl9QVFIoLUVOT0VOVCkgb24gbmVnYXRpdmVzLiBUaGUgaGVscGVyIHJldHVybnNcbkBAIC0zMjU5LDcgKzMyNTksNyBAQCBFWFBPUlRfU1lNQk9MKGxvb2t1cF9vbmVfdW5sb2NrZWQpO1xuICAqIHRoZSBpX3J3c2VtIGl0c2VsZiBpZiBuZWNlc3NhcnkuICBJZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIG9yXG4gICogZGVsaXZlcmVkLCBpdCB3aWxsIHJldHVybiAlLUVJTlRSIGlmIHRoZSBsb2NrIGlzIG5lZWRlZC5cbiAgKlxuLSAqIFJldHVybnM6IEEgZGVudHJ5LCBwb3NzaWJseSBuZWdhdGl2ZSwgb3JcbisgKiBSZXR1cm5zOiBBIHBvc2l0aXZlIGRlbnRyeSwgb3JcbiAgKlx0ICAgLSBzYW1lIGVycm9ycyBhcyBsb29rdXBfb25lX3VubG9ja2VkKCkgb3JcbiAgKlx0ICAgLSBFUlJfUFRSKC1FSU5UUikgaWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZy5cbiAgKi9cbkBAIC0zMzgxLDcgKzMzODEsNyBAQCBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfbm9wZXJtX3Bvc2l0aXZlX3VubG9ja2VkKHN0cnVjdCBxc3RyICpuYW1lLFxuIEVYUE9SVF9TWU1CT0wobG9va3VwX25vcGVybV9wb3NpdGl2ZV91bmxvY2tlZCk7XG4gXG4gLyoqXG4tICogc3RhcnRfY3JlYXRpbmcgLSBwcmVwYXJlIHRvIGNyZWF0ZSBhIGdpdmVuIG5hbWUgd2l0aCBwZXJtaXNzaW9uIGNoZWNraW5nXG4rICogc3RhcnRfY3JlYXRpbmcgLSBwcmVwYXJlIHRvIGFjY2VzcyBvciBjcmVhdGUgYSBnaXZlbiBuYW1lIHdpdGggcGVybWlzc2lvbiBjaGVja2luZ1xuICAqIEBpZG1hcDogIGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBwcmVwYXJlIHRvIGNyZWF0ZSB0aGUgbmFtZVxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWRcbkBAIC0zNDEzLDggKzM0MTMsOCBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nKTtcbiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gZmluZCB0aGUgbmFtZVxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIHJlbW92ZWRcbiAgKlxuLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIHJlbW92aW5nXG4tICogYW4gb2JqZWN0IGZyb20gYSBkaXJlY3RvcnkuICBQZXJtaXNzaW9uIGNoZWNraW5nIChNQVlfRVhFQykgaXMgcGVyZm9ybWVkXG4rICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmcgYW4gb2JqZWN0XG4rICogZnJvbSBhIGRpcmVjdG9yeS4gIFBlcm1pc3Npb24gY2hlY2tpbmcgKE1BWV9FWEVDKSBpcyBwZXJmb3JtZWRcbiAgKiBhZ2FpbnN0IEBpZG1hcC5cbiAgKlxuICAqIElmIHRoZSBuYW1lIGRvZXNuJ3QgZXhpc3QsIGFuIGVycm9yIGlzIHJldHVybmVkLlxuQEAgLTM0NDAsNyArMzQ0MCw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfcmVtb3ZpbmcpO1xuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBwcmVwYXJlIHRvIGNyZWF0ZSB0aGUgbmFtZVxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWRcbiAgKlxuLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIGNyZWF0aW5nXG4rICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcbiAgKiBhbiBvYmplY3QgaW4gYSBkaXJlY3RvcnkuICBQZXJtaXNzaW9uIGNoZWNraW5nIChNQVlfRVhFQykgaXMgcGVyZm9ybWVkXG4gICogYWdhaW5zdCBAaWRtYXAuXG4gICpcbkBAIC0zNDY5LDcgKzM0NjksNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX2tpbGxhYmxlKTtcbiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gZmluZCB0aGUgbmFtZVxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIHJlbW92ZWRcbiAgKlxuLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIHJlbW92aW5nXG4rICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmdcbiAgKiBhbiBvYmplY3QgZnJvbSBhIGRpcmVjdG9yeS4gIFBlcm1pc3Npb24gY2hlY2tpbmcgKE1BWV9FWEVDKSBpcyBwZXJmb3JtZWRcbiAgKiBhZ2FpbnN0IEBpZG1hcC5cbiAgKlxuQEAgLTM0OTksNyArMzQ5OSw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfcmVtb3Zpbmdfa2lsbGFibGUpO1xuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBwcmVwYXJlIHRvIGNyZWF0ZSB0aGUgbmFtZVxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWRcbiAgKlxuLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIGNyZWF0aW5nXG4rICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcbiAgKiBhbiBvYmplY3QgaW4gYSBkaXJlY3RvcnkuXG4gICpcbiAgKiBJZiB0aGUgbmFtZSBhbHJlYWR5IGV4aXN0cywgYSBwb3NpdGl2ZSBkZW50cnkgaXMgcmV0dXJuZWQuXG5AQCAtMzUyMiw3ICszNTIyLDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9jcmVhdGluZ19ub3Blcm0pO1xuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBmaW5kIHRoZSBuYW1lXG4gICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgcmVtb3ZlZFxuICAqXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmdcbisgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xuICAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LlxuICAqXG4gICogSWYgdGhlIG5hbWUgZG9lc24ndCBleGlzdCwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuXG5AQCAtMzU0MywxMSArMzU0MywxMSBAQCBzdHJ1Y3QgZGVudHJ5ICpzdGFydF9yZW1vdmluZ19ub3Blcm0oc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuIEVYUE9SVF9TWU1CT0woc3RhcnRfcmVtb3Zpbmdfbm9wZXJtKTtcbiBcbiAvKipcbi0gKiBzdGFydF9jcmVhdGluZ19kZW50cnkgLSBwcmVwYXJlIHRvIGNyZWF0ZSBhIGdpdmVuIGRlbnRyeVxuLSAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRlbnRyeSBzaG91bGQgYmUgcmVtb3ZlZFxuLSAqIEBjaGlsZDogIHRoZSBkZW50cnkgdG8gYmUgcmVtb3ZlZFxuKyAqIHN0YXJ0X2NyZWF0aW5nX2RlbnRyeSAtIHByZXBhcmUgdG8gYWNjZXNzIG9yIGNyZWF0ZSBhIGdpdmVuIGRlbnRyeVxuKyAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBvZiBkZW50cnlcbisgKiBAY2hpbGQ6ICB0aGUgZGVudHJ5IHRvIGJlIHByZXBhcmVkXG4gICpcbi0gKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluIG90aGVyIGRpcm9wcyBhbmRcbisgKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluc3Qgb3RoZXIgZGlyb3BzIGFuZFxuICAqIHRoZSB2YWxpZGl0eSBvZiB0aGUgZGVudHJ5IGlzIGNoZWNrZWQ6IGNvcnJlY3QgcGFyZW50IGFuZCBzdGlsbCBoYXNoZWQuXG4gICpcbiAgKiBJZiB0aGUgZGVudHJ5IGlzIHZhbGlkIGFuZCBuZWdhdGl2ZSBhIHJlZmVyZW5jZSBpcyB0YWtlbiBhbmRcbkBAIC0zNTgwLDcgKzM1ODAsNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX2RlbnRyeSk7XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGZyb20gd2hpY2ggZGVudHJ5IHNob3VsZCBiZSByZW1vdmVkXG4gICogQGNoaWxkOiAgdGhlIGRlbnRyeSB0byBiZSByZW1vdmVkXG4gICpcbi0gKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluIG90aGVyIGRpcm9wcyBhbmRcbisgKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluc3Qgb3RoZXIgZGlyb3BzIGFuZFxuICAqIHRoZSB2YWxpZGl0eSBvZiB0aGUgZGVudHJ5IGlzIGNoZWNrZWQ6IGNvcnJlY3QgcGFyZW50IGFuZCBzdGlsbCBoYXNoZWQuXG4gICpcbiAgKiBJZiB0aGUgZGVudHJ5IGlzIHZhbGlkIGFuZCBwb3NpdGl2ZSwgYSByZWZlcmVuY2UgaXMgdGFrZW4gYW5kXG5AQCAtNDQ0MCwxMiArNDQ0MCwxNCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0aW50IGVycm9yLCBjcmVhdGVfZXJyb3I7XG4gXHR1bW9kZV90IG1vZGU7XG4gXHRib29sIGdvdF93cml0ZTtcbitcdHVuc2lnbmVkIGludCBzaGFyZWRfZmxhZztcbiBcbiByZXRyeTpcbiBcdG9wZW5fZmxhZyA9IG9wLVx1MDAzZW9wZW5fZmxhZztcbiBcdGdvdF93cml0ZSA9IGZhbHNlO1xuIFx0bW9kZSA9IG9wLVx1MDAzZW1vZGU7XG4gXHRjcmVhdGVfZXJyb3IgPSAwO1xuK1x0c2hhcmVkX2ZsYWcgPSAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSA/IDAgOiBMT09LVVBfU0hBUkVEO1xuIFxuIFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgKE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19XUk9OTFkgfCBPX1JEV1IpKSB7XG4gXHRcdGdvdF93cml0ZSA9ICFtbnRfd2FudF93cml0ZShuZC1cdTAwM2VwYXRoLm1udCk7XG5AQCAtNDQ1NCwxMCArNDQ1NiwxMCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHQgKiBhIGRpZmZlcmVudCBlcnJvcjsgd2UnbGwgYmUgZHJvcHBpbmcgdGhpcyBvbmUgYW55d2F5LlxuIFx0XHQgKi9cbiBcdH1cbi1cdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpXG4tXHRcdGlub2RlX2xvY2soZGlyX2lub2RlKTtcbi1cdGVsc2VcbitcdGlmIChzaGFyZWRfZmxhZylcbiBcdFx0aW5vZGVfbG9ja19zaGFyZWQoZGlyX2lub2RlKTtcbitcdGVsc2VcbitcdFx0aW5vZGVfbG9jayhkaXJfaW5vZGUpO1xuIFxuIFx0aWYgKHVubGlrZWx5KElTX0RFQURESVIoZGlyX2lub2RlKSkpIHtcbiBcdFx0ZGVudHJ5ID0gRVJSX1BUUigtRU5PRU5UKTtcbkBAIC00NTI2LDcgKzQ1MjgsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFxuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlbG9va3VwKGRpcl9pbm9kZSwgZGVudHJ5LFxuLVx0XHRcdFx0XHRcdFx0ICAgICBuZC1cdTAwM2VmbGFncyk7XG4rXHRcdFx0XHRcdFx0XHQgICAgIG5kLVx1MDAzZWZsYWdzIHwgc2hhcmVkX2ZsYWcpO1xuIFx0XHRkX2xvb2t1cF9kb25lKGRlbnRyeSk7XG4gXHRcdGlmICh1bmxpa2VseShyZXMpKSB7XG4gXHRcdFx0aWYgKElTX0VSUihyZXMpKSB7XG5AQCAtNDU3NCwxMCArNDU3NiwxMCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRClcbiBcdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuIFx0fVxuLVx0aWYgKChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHx8IGNyZWF0ZV9lcnJvcilcbi1cdFx0aW5vZGVfdW5sb2NrKGRpcl9pbm9kZSk7XG4tXHRlbHNlXG4rXHRpZiAoc2hhcmVkX2ZsYWcpXG4gXHRcdGlub2RlX3VubG9ja19zaGFyZWQoZGlyX2lub2RlKTtcbitcdGVsc2VcbitcdFx0aW5vZGVfdW5sb2NrKGRpcl9pbm9kZSk7XG4gXG4gXHRpZiAoZ290X3dyaXRlKVxuIFx0XHRtbnRfZHJvcF93cml0ZShuZC1cdTAwM2VwYXRoLm1udCk7XG5kaWZmIC0tZ2l0IGEvZnMvbmZzL3VubGluay5jIGIvZnMvbmZzL3VubGluay5jXG5pbmRleCBiNTdjZmFhNGQ1MTZmLi5jOGQ3MTIyMDRlNjQ5IDEwMDY0NFxuLS0tIGEvZnMvbmZzL3VubGluay5jXG4rKysgYi9mcy9uZnMvdW5saW5rLmNcbkBAIC02Nyw2ICs2Nyw3IEBAIHN0YXRpYyB2b2lkIG5mc19hc3luY191bmxpbmtfcmVsZWFzZSh2b2lkICpjYWxsZGF0YSlcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktXHUwMDNlZF9zYjtcbiBcbiBcdHVwX3JlYWRfbm9uX293bmVyKFx1MDAyNk5GU19JKGRfaW5vZGUoZGVudHJ5LVx1MDAzZWRfcGFyZW50KSktXHUwMDNlcm1kaXJfc2VtKTtcbitcdGRfbG9va3VwX2FjcXVpcmUoZGVudHJ5KTtcbiBcdGRfbG9va3VwX2RvbmUoZGVudHJ5KTtcbiBcdG5mc19mcmVlX3VubGlua2RhdGEoZGF0YSk7XG4gXHRkcHV0KGRlbnRyeSk7XG5AQCAtMTU5LDYgKzE2MCw4IEBAIHN0YXRpYyBpbnQgbmZzX2NhbGxfdW5saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mXG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXHRkYXRhLVx1MDAzZWRlbnRyeSA9IGFsaWFzO1xuK1x0ZF9sb29rdXBfcmVsZWFzZShhbGlhcyk7XG4rXG4gXHRuZnNfZG9fY2FsbF91bmxpbmsoaW5vZGUsIGRhdGEpO1xuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oXG5pbmRleCA0YjFmZjk5NjA4ZTAxLi5lN2UzZWYwNTMxM2I4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaFxuQEAgLTExNiw2ICsxMTYsOCBAQCBzdHJ1Y3QgZGVudHJ5IHtcbiBcdFx0XHRcdFx0ICogcG9zc2libGUhXG4gXHRcdFx0XHRcdCAqL1xuIFxuK1x0LyogbG9ja2RlcCB0cmFja2luZyBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrcyAqL1xuK1x0c3RydWN0IGxvY2tkZXBfbWFwXHRcdGxvb2t1cF9tYXA7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGRfbHJ1O1x0XHQvKiBMUlUgbGlzdCAqL1xuIFx0c3RydWN0IGhsaXN0X25vZGUgZF9zaWI7XHQvKiBjaGlsZCBvZiBwYXJlbnQgbGlzdCAqL1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgZF9jaGlsZHJlbjtcdC8qIG91ciBjaGlsZHJlbiAqL1xuQEAgLTI1Nyw3ICsyNTksOSBAQCBleHRlcm4gdm9pZCBkX2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICopO1xuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvYyhzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IHN0cnVjdCBxc3RyICopO1xuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTtcbitleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfdHJ5bG9jayhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopO1xuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9zcGxpY2VfYWxpYXMoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7XG4rc3RydWN0IGRlbnRyeSAqZF9kdXBsaWNhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiAvKiB3ZWlyZCBwcm9jZnMgbWVzczsgKk5PVCogZXhwb3J0ZWQgKi9cbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqKTtcbkBAIC01NTIsNiArNTU2LDM2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNpbXBsZV9wb3NpdGl2ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXG4gdW5zaWduZWQgbG9uZyB2ZnNfcHJlc3N1cmVfcmF0aW8odW5zaWduZWQgbG9uZyB2YWwpO1xuIFxuKy8qKlxuKyAqIGRfbG9va3VwX3JlbGVhc2UgLSByZWxlYXNlIG93bmVyc2hpcCBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrXG4rICogQGRlbnRyeTogZGVudHJ5IHRoYXQgaXMgbG9ja2VkXG4rICpcbisgKiBJZiBhbiBpbi1sb29rdXAgZGVudHJ5IGlzIHRvIGJlIHBhc3NlZCB0byBhbm90aGVyIHRocmVhZCB3aGljaFxuKyAqIHdpbGwgZHJvcCB0aGUgaW4tbG9va3VwIGxvY2ssIHRoZW4gZF9sb29rdXBfcmVsZWFzZSgpIG11c3QgYmUgY2FsbGVkXG4rICogdG8gdGVsbCBsb2NrZGVwIHRoYXQgdGhpcyB0aHJlYWQgbm8gbG9jayBob2xkcyB0aGUgbG9jay4gIFRoZVxuKyAqIHRocmVhZCB0aGF0IHJlY2VpdmVzIHRoZSBsb2NrIG11c3QgY2FsbCBkX2xvb2t1cF9hY3F1aXJlKCkgdG9cbisgKiBhY3F1aXJlIHRoZSBsb2NrLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBkX2xvb2t1cF9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbit7XG4rXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSlcbitcdFx0bG9ja19tYXBfcmVsZWFzZShcdTAwMjZkZW50cnktXHUwMDNlbG9va3VwX21hcCk7XG4rfVxuK1xuKy8qKlxuKyAqIGRfbG9va3VwX2FjcXVpcmUgLSBhY3F1aXJlIG93bmVyc2hpcCBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrXG4rICogQGRlbnRyeTogZGVudHJ5IHRoYXQgaXMgbG9ja2VkXG4rICpcbisgKiBJZiBhbiBpbi1sb29rdXAgZGVudHJ5IHdhcyBwYXNzZWQgdG8gdGhpcyB0aHJlYWQsIHRoZVxuKyAqIGRfbG9va3VwX2FjcXVpcmUoKSBtdXN0IGJlIGNhbGxlZCB0byB0ZWxsIGxvY2tkZXAgdGhhdCB0aGlzXG4rICogdGhyZWFkIG5vdyBvd25zIHRoZSBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBkX2xvb2t1cF9hY3F1aXJlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbit7XG4rXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSlcbitcdFx0bG9ja19tYXBfYWNxdWlyZV90cnkoXHUwMDI2ZGVudHJ5LVx1MDAzZWxvb2t1cF9tYXApO1xuK31cbitcbiAvKipcbiAgKiBkX2lub2RlIC0gR2V0IHRoZSBhY3R1YWwgaW5vZGUgb2YgdGhpcyBkZW50cnlcbiAgKiBAZGVudHJ5OiBUaGUgZGVudHJ5IHRvIHF1ZXJ5XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uYW1laS5oIGIvaW5jbHVkZS9saW51eC9uYW1laS5oXG5pbmRleCA4NmQ2NTdiMjRmYzZhLi42NWYwZjU3MTI4ODVjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25hbWVpLmhcbkBAIC0zMiw4ICszMiw5IEBAIGVudW0geyBNQVhfTkVTVEVEX0xJTktTID0gOCB9O1xuICNkZWZpbmUgTE9PS1VQX0NSRUFURVx0XHRCSVQoMTcpXHQvKiAuLi4gaW4gb2JqZWN0IGNyZWF0aW9uICovXG4gI2RlZmluZSBMT09LVVBfRVhDTFx0XHRCSVQoMTgpXHQvKiAuLi4gaW4gdGFyZ2V0IG11c3Qgbm90IGV4aXN0ICovXG4gI2RlZmluZSBMT09LVVBfUkVOQU1FX1RBUkdFVFx0QklUKDE5KVx0LyogLi4uIGluIGRlc3RpbmF0aW9uIG9mIHJlbmFtZSgpICovXG4rI2RlZmluZSBMT09LVVBfU0hBUkVEXHRcdEJJVCgyMCkgLyogUGFyZW50IGxvY2sgaXMgaGVsZCBzaGFyZWQgKi9cbiBcbi0vKiA0IHNwYXJlIGJpdHMgZm9yIGludGVudCAqL1xuKy8qIDMgc3BhcmUgYml0cyBmb3IgaW50ZW50ICovXG4gXG4gLyogU2NvcGluZyBmbGFncyBmb3IgbG9va3VwLiAqL1xuICNkZWZpbmUgTE9PS1VQX05PX1NZTUxJTktTXHRCSVQoMjQpIC8qIE5vIHN5bWxpbmsgY3Jvc3NpbmcuICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxNTo1Ny45MDk5NTAwNzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDYyMzkyNzUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEV2YWx1YXRpb246IGRjYWNoZSBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gYXNrZWQgdG8gbG9vayBvdmVyIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBmdXp6aW5nIHBvdGVudGlhbCB3aXRoIHN5emthbGxlci4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG5GaXJzdCwgdGhlIGRpZmYuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpLCBzcGVjaWZpY2FsbHkgdGhlIGRjYWNoZSBhbmQgbmFtZWkgc3Vic3lzdGVtcywgd2l0aCBhIGxpdHRsZSB0b3VjaCBvZiBORlMuIFRoaXMgaXMgKmNyaXRpY2FsKiBpbmZyYXN0cnVjdHVyZTsgd2UncmUgdGFsa2luZyBhYm91dCBwYXRoIGxvb2t1cCwgZGVudHJ5IGFsbG9jYXRpb24sIGxvY2tpbmcsIGFuZCBzb21lIGltcG9ydGFudCBhc3NlcnRpb25zLiBUaGlzIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZXN5c3RlbSwgc28gaXQncyBpbnRlcmVzdGluZy5cblxuVGhlIGBEb2N1bWVudGF0aW9uL2AgY2hhbmdlcyBhcmUgdXN1YWxseSBhIGdvb2Qgc2lnbiB0aGF0IHRoZXkgd2VyZSB0aGlua2luZyBhYm91dCBmdXp6aW5nIGFuZCB0cnlpbmcgdG8ga2VlcCB0aGluZ3MgZWFzaWx5IGF2YWlsYWJsZSBmb3IgdGhvc2UgdGhhdCB3YW50IHRvIGNvbnRyaWJ1dGUuXG5cbkEgZGVlcGVyIGRpdmUgaW50byB0aGUgZGlmZiBzaG93cyBzdWJzdGFudGlhbCBjaGFuZ2VzOiB3ZSBoYXZlIGEgbmV3IGBsb29rdXBfbWFwYCB1bmRlciBsb2NrZGVwLCBuZXcgZnVuY3Rpb25zIGxpa2UgYGRfZHVwbGljYXRlYCwgYGRfYWxsb2NfdHJ5bG9ja2AsIGFuZCBgZF9sb29rdXBfYWNxdWlyZS9yZWxlYXNlYCBhcmUgaW50cm9kdWNlZCwgYF9fZF9hZGRgIGxvZ2ljIGlzIHJlZmFjdG9yZWQsIGFuZCBsb2NrIGhhbmRsaW5nIGluIGBsb29rdXBfb3BlbmAgY2hhbmdlcyBiYXNlZCBvbiBzaGFyZWQgZmxhZ3MuIFRoZXJlIGlzIGV2ZW4gYSBjaGFuZ2UgZnJvbSBgQlVHX09OKCFkX3VuaGFzaGVkKGRlbnRyeSkpYCB0byBgQlVHX09OKGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpYCwgd2hpY2ggaXMgYWx3YXlzIHdvcnRoIGEgbG9vay4gVGhlIG92ZXJhbGwgZ29hbCBzZWVtcyB0byBiZSBlbmhhbmNpbmcgY29uY3VycmVuY3kgYW5kIGhhbmRsaW5nIHNvbWUgbmV3IGNsdXN0ZXIvb3ZlcmxheSBzY2VuYXJpb3MuXG5cblRoZSBtb2RpZmljYXRpb24gb2YgYF9fZF9hbGxvY2AsIGBfX2RfYWRkYCwgYGxvb2t1cF9vcGVuYCBhbmQgYG5mc19hc3luY191bmxpbmtfcmVsZWFzZWAgcmVhbGx5IGNhdWdodCBteSBleWUuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYWxsIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIGZpbGVzeXN0ZW0gY2FsbHMgbGlrZSBgb3BlbmAsIGBsb29rdXBgLCBgdW5saW5rYCwgYW5kIGBta2RpcmAsIHNvLCB0aGF0J3MgYWxyZWFkeSBhIHNpZ25pZmljYW50IHBvaW50IGluIGl0cyBmYXZvci5cblxuKipNeSBhc3Nlc3NtZW50OiBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4qKiBUaGlzIGhhcyBhbGwgdGhlIGhhbGxtYXJrcyBvZiBhIHBhdGNoIHNlcmllcyByaXBlIGZvciBmdXp6aW5nOiBjb3JlIHN1YnN5c3RlbSBtb2RpZmljYXRpb25zIChWRlMvZGNhY2hlKSwgbmV3IGxvY2tpbmcgaW52YXJpYW50cyBpbnRyb2R1Y2VkIHdpdGggbG9ja2RlcCwgdGhlIGFkZGl0aW9uIG9mIGEgbG9ja2RlcCBtYXAsIG1vZGlmaWVkIGFzc2VydGlvbnMsIGNoYW5nZXMgdG8gdGhlIGNvcmUgYF9fZF9hZGRgIGxvZ2ljLCBhbmQgdGhlIGBsb29rdXBfb3BlbmAgc2hhcmVkIGxvY2tpbmcgY2hhbmdlIGlzIHBhcnRpY3VsYXJseSBpbnRyaWd1aW5nLiBUaGVyZSdzIGEgaGlnaCBwcm9iYWJpbGl0eSBvZiBmaW5kaW5nIGludGVyZXN0aW5nIGtlcm5lbCBzdGF0ZXMgb3IgcmFjZSBjb25kaXRpb25zIGhlcmUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgdXN1YWwgc3VzcGVjdHMuIEkgc2hvdWxkIGNoZWNrIGBXb3J0aEZ1enppbmdgLCBgRm9jdXNTeW1ib2xzYCwgYW5kIGBFbmFibGVDb25maWdzYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cyBvciBwcmUtZXhpc3Rpbmcgc2V0dXAgdG8gbWFrZSB0aGlzIGVhc2llci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55IG9idmlvdXMgZW50cnkgcG9pbnRzIGFuZCB0aGF0IEkgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBlbmFibGVkLiBBbHNvLCBhIHF1aWNrIGBncmVwcGVyYCBydW4gZm9yIHRoZSBuZXcgZnVuY3Rpb25zIGxpa2UgYGRfYWxsb2NfdHJ5bG9ja2AsIGFuZCBgZF9kdXBsaWNhdGVgIGlzIGNydWNpYWwgdG8gZ2V0IGEgaG9saXN0aWMgdmlldyBvZiB0aGUgY2FsbGVycy4gVGhpcyB3aWxsIGdpdmUgbWUgYW4gaWRlYSBhYm91dCB0aGUgb3ZlcmFsbCBzY29wZSBhbmQgaWYgdGhpcyBpcyBhIHBhcnQgb2YgYSBsYXJnZXIgcGF0Y2ggc2VyaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA4NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjE2OjE4LjUzMzg4MDI4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk1ODI3OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRfYWxsb2NfdHJ5bG9ja3xkX2R1cGxpY2F0ZXxMT09LVVBfU0hBUkVEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzPTI1PXB1YihjcmF0ZSkgc3RydWN0IEZyZWV6ZUxpc3RlbmVyIHtcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzLTQyLSAgICAvLy8gTnVtYmVyIG9mIGNsZWFyZWQgZHVwbGljYXRlcyB0aGF0IGNhbiBiZSBkZWxldGVkLlxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzOjQzOiAgICBudW1fY2xlYXJlZF9kdXBsaWNhdGVzOiB1NjQsXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtNDQtfVxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnM9ODY9ICAgIGZuIGRvX3dvcmsoXFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycy05Ny1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5yczo5ODogICAgICAgIGlmIGZyZWV6ZS5udW1fY2xlYXJlZF9kdXBsaWNhdGVzIFxcdTAwM2UgMCB7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnM6OTk6ICAgICAgICAgICAgZnJlZXplLm51bV9jbGVhcmVkX2R1cGxpY2F0ZXMgLT0gMTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycy0xMDAtICAgICAgICAgICAgZHJvcChub2RlX3JlZnMpO1xcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtMTA5LSAgICAgICAgaWYgZnJlZXplLmlzX2NsZWFyaW5nIHtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5yczoxMTA6ICAgICAgICAgICAga2VybmVsOjp3YXJuX29uIShmcmVlemUubnVtX2NsZWFyZWRfZHVwbGljYXRlcyAhPSAwKTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycy0xMTEtICAgICAgICAgICAgaWYgZnJlZXplLm51bV9wZW5kaW5nX2R1cGxpY2F0ZXMgXFx1MDAzZSAwIHtcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzPTE4MD0gICAgcHViKGNyYXRlKSBmbiByZXF1ZXN0X2ZyZWV6ZV9ub3RpZihcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzLTI0OS0gICAgICAgICAgICAgICAgICAgICAgICBudW1fcGVuZGluZ19kdXBsaWNhdGVzOiAwLFxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzOjI1MDogICAgICAgICAgICAgICAgICAgICAgICBudW1fY2xlYXJlZF9kdXBsaWNhdGVzOiAwLFxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzLTI1MS0gICAgICAgICAgICAgICAgICAgIH0sXFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycy0yNTktICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnM6MjYwOiAgICAgICAgICAgICAgICAgICAgZHVwZS5udW1fY2xlYXJlZF9kdXBsaWNhdGVzICs9IDE7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtMjYxLSAgICAgICAgICAgICAgICB9XFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycz0yNzU9ICAgIHB1YihjcmF0ZSkgZm4gZnJlZXplX25vdGlmX2RvbmUoc2VsZjogXFx1MDAyNkFyY1xcdTAwM2NTZWxmXFx1MDAzZSwgcmVhZGVyOiBcXHUwMDI2bXV0IFVzZXJTbGljZVJlYWRlcikgLVxcdTAwM2UgUmVzdWx0XFx1MDAzYygpXFx1MDAzZSB7XFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycy0yOTEtICAgICAgICAgICAgZnJlZXplLm51bV9wZW5kaW5nX2R1cGxpY2F0ZXMgLT0gMTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5yczoyOTI6ICAgICAgICAgICAgZnJlZXplLm51bV9jbGVhcmVkX2R1cGxpY2F0ZXMgKz0gMTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycy0yOTMtICAgICAgICB9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF90b3BvbG9neS5jPTQzOTU9c3RydWN0IGVkaWQgKmRybV9kcF9tc3RfZ2V0X2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYy00NDAzLVxcbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYzo0NDA0OlxcdGVkaWQgPSBkcm1fZWRpZF9kdXBsaWNhdGUoZHJtX2VkaWRfcmF3KGRybV9lZGlkKSk7XFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF90b3BvbG9neS5jLTQ0MDUtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYz0yOTUwPUVYUE9SVF9TWU1CT0woZHJtX2VkaWRfcmVhZF9zd2l0Y2hlcm9vKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jLTI5NTItLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmM6Mjk1MzogKiBkcm1fZWRpZF9kdXBsaWNhdGUgLSBkdXBsaWNhdGUgYW4gRURJRCBhbmQgdGhlIGV4dGVuc2lvbnNcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYy0yOTU0LSAqIEBlZGlkOiBFRElEIHRvIGR1cGxpY2F0ZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMtMjk1Ny0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYzoyOTU4OnN0cnVjdCBlZGlkICpkcm1fZWRpZF9kdXBsaWNhdGUoY29uc3Qgc3RydWN0IGVkaWQgKmVkaWQpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMtMjk1OS17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYy0yOTY0LX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYzoyOTY1OkVYUE9SVF9TWU1CT0woZHJtX2VkaWRfZHVwbGljYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYy0yOTY2LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wbWRlbWFuZC5jPTU2PXN0YXRpYyBzdHJ1Y3QgaW50ZWxfZ2xvYmFsX3N0YXRlICpcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3BtZGVtYW5kLmM6NTc6aW50ZWxfcG1kZW1hbmRfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBpbnRlbF9nbG9iYWxfb2JqICpvYmopXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wbWRlbWFuZC5jLTU4LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcG1kZW1hbmQuYz03ND1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2dsb2JhbF9zdGF0ZV9mdW5jcyBpbnRlbF9wbWRlbWFuZF9mdW5jcyA9IHtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3BtZGVtYW5kLmM6NzU6XFx0LmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9wbWRlbWFuZF9kdXBsaWNhdGVfc3RhdGUsXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wbWRlbWFuZC5jLTc2LVxcdC5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX3BtZGVtYW5kX2Rlc3Ryb3lfc3RhdGUsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5oPTkxPXN0YXRpYyBjb25zdCB1MzIgYTZ4eF9obHNxX2R1cGxpY2F0ZV9jbHVzdGVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5oLTk0LVxcbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmg6OTU6c3RhdGljIGNvbnN0IHUzMiBhNnh4X2hsc3FfMmRfZHVwbGljYXRlX2NsdXN0ZXJbXSA9IHtcXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5oLTk2LVxcdDB4YmQ4MCwgMHhiZDgwLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHVfc3RhdGUuaD0xMzc9c3RhdGljIGNvbnN0IHN0cnVjdCBhNnh4X2RiZ2FoYl9jbHVzdGVyIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmgtMTQ2LVxcdENMVVNURVJfREJHQUhCKENMVVNURVJfU1BfVlMsIDB4MDAwMmUwMDAsIDB4NDEsIGE2eHhfaGxzcV9kdXBsaWNhdGVfY2x1c3RlciksXFxuZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHVfc3RhdGUuaDoxNDc6XFx0Q0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9WUywgMHgwMDAyZjAwMCwgMHg0NSwgYTZ4eF9obHNxXzJkX2R1cGxpY2F0ZV9jbHVzdGVyKSxcXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5oLTE0OC1cXHRDTFVTVEVSX0RCR0FIQihDTFVTVEVSX1NQX1ZTLCAweDAwMDJhMDAwLCAweDIxLCBhNnh4X3NwX2R1cGxpY2F0ZV9jbHVzdGVyKSxcXG4tLVxcbmRyaXZlcnMvbWQvZG0uYz0xMjc0PXN0YXRpYyBzaXplX3QgZG1fZGF4X3JlY292ZXJ5X3dyaXRlKHN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCBwZ29mZl90IHBnb2ZmLFxcbi0tXFxuZHJpdmVycy9tZC9kbS5jLTEyOTctICogd2l0aCB3cml0ZSBCSU9zIGZsYWdnZWQgd2l0aCBCSU9fRU1VTEFURVNfWk9ORV9BUFBFTkQpIGFuZCBhbnkgYmlvIHNlcnZpY2VkXFxuZHJpdmVycy9tZC9kbS5jOjEyOTg6ICogYnkgX19zZW5kX2R1cGxpY2F0ZV9iaW9zKCkuXFxuZHJpdmVycy9tZC9kbS5jLTEyOTktICpcXG4tLVxcbmRyaXZlcnMvbWQvZG0uYz0xNDc4PXN0YXRpYyB2b2lkIGFsbG9jX211bHRpcGxlX2Jpb3Moc3RydWN0IGJpb19saXN0ICpibGlzdCwgc3RydWN0IGNsb25lX2luZm8gKmNpLFxcbi0tXFxuZHJpdmVycy9tZC9kbS5jLTE1MDctXFxuZHJpdmVycy9tZC9kbS5jOjE1MDg6c3RhdGljIHVuc2lnbmVkIGludCBfX3NlbmRfZHVwbGljYXRlX2Jpb3Moc3RydWN0IGNsb25lX2luZm8gKmNpLCBzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSxcXG5kcml2ZXJzL21kL2RtLmMtMTUwOS1cXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBudW1fYmlvcywgdW5zaWduZWQgaW50ICpsZW4pXFxuLS1cXG5kcml2ZXJzL21kL2RtLmM9MTUzNz1zdGF0aWMgdm9pZCBfX3NlbmRfZW1wdHlfZmx1c2goc3RydWN0IGNsb25lX2luZm8gKmNpKVxcbi0tXFxuZHJpdmVycy9tZC9kbS5jLTE1NjYtXFx0XFx0XFx0YXRvbWljX2FkZCh0aS1cXHUwMDNlbnVtX2ZsdXNoX2Jpb3MsIFxcdTAwMjZjaS1cXHUwMDNlaW8tXFx1MDAzZWlvX2NvdW50KTtcXG5kcml2ZXJzL21kL2RtLmM6MTU2NzpcXHRcXHRcXHRiaW9zID0gX19zZW5kX2R1cGxpY2F0ZV9iaW9zKGNpLCB0aSwgdGktXFx1MDAzZW51bV9mbHVzaF9iaW9zLFxcbmRyaXZlcnMvbWQvZG0uYy0xNTY4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLmM9MTYwNj1zdGF0aWMgdm9pZCBfX3NlbmRfYWJub3JtYWxfaW8oc3RydWN0IGNsb25lX2luZm8gKmNpLCBzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSxcXG4tLVxcbmRyaXZlcnMvbWQvZG0uYy0xNjE1LVxcdGF0b21pY19hZGQobnVtX2Jpb3MsIFxcdTAwMjZjaS1cXHUwMDNlaW8tXFx1MDAzZWlvX2NvdW50KTtcXG5kcml2ZXJzL21kL2RtLmM6MTYxNjpcXHRiaW9zID0gX19zZW5kX2R1cGxpY2F0ZV9iaW9zKGNpLCB0aSwgbnVtX2Jpb3MsIFxcdTAwMjZsZW4pO1xcbmRyaXZlcnMvbWQvZG0uYy0xNjE3LVxcdC8qXFxuLS1cXG5kcml2ZXJzL21kL2RtLmM9MTkwMj1zdGF0aWMgdm9pZCBfX3NlbmRfem9uZV9yZXNldF9hbGxfbmF0aXZlKHN0cnVjdCBjbG9uZV9pbmZvICpjaSxcXG4tLVxcbmRyaXZlcnMvbWQvZG0uYy0xOTA3LVxcdGF0b21pY19hZGQoMSwgXFx1MDAyNmNpLVxcdTAwM2Vpby1cXHUwMDNlaW9fY291bnQpO1xcbmRyaXZlcnMvbWQvZG0uYzoxOTA4OlxcdGJpb3MgPSBfX3NlbmRfZHVwbGljYXRlX2Jpb3MoY2ksIHRpLCAxLCBOVUxMKTtcXG5kcml2ZXJzL21kL2RtLmMtMTkwOS1cXHRhdG9taWNfc3ViKDEgLSBiaW9zLCBcXHUwMDI2Y2ktXFx1MDAzZWlvLVxcdTAwM2Vpb19jb3VudCk7XFxuLS1cXG5kcml2ZXJzL3VzYi90eXBlYy9jbGFzcy5jPTQ0OD1zdGF0aWMgaW50IGluY3JlbWVudF9kdXBsaWNhdGVkX3ByaW9yaXR5KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmMtNDYyLVxcbmRyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmM6NDYzOnN0YXRpYyBpbnQgZmluZF9kdXBsaWNhdGVkX3ByaW9yaXR5KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL3VzYi90eXBlYy9jbGFzcy5jLTQ2NC17XFxuLS1cXG5kcml2ZXJzL3VzYi90eXBlYy9jbGFzcy5jPTQ3NT1zdGF0aWMgaW50IHR5cGVjX21vZGVfc2V0X3ByaW9yaXR5KHN0cnVjdCB0eXBlY19hbHRtb2RlICphbHQsIGNvbnN0IHU4IHByaW9yaXR5KVxcbi0tXFxuZHJpdmVycy91c2IvdHlwZWMvY2xhc3MuYy00ODItXFx0d2hpbGUgKHJlcykge1xcbmRyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmM6NDgzOlxcdFxcdHJlcyA9IGRldmljZV9mb3JfZWFjaF9jaGlsZChcXHUwMDI2cG9ydC1cXHUwMDNlZGV2LCBcXHUwMDI2YWx0LCBmaW5kX2R1cGxpY2F0ZWRfcHJpb3JpdHkpO1xcbmRyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmMtNDg0LVxcdFxcdGlmIChyZXMpIHtcXG4tLVxcbmZzL2RjYWNoZS5jPTIwMDQ9RVhQT1JUX1NZTUJPTChkX2FsbG9jKTtcXG4tLVxcbmZzL2RjYWNoZS5jLTIwMDYtLyoqXFxuZnMvZGNhY2hlLmM6MjAwNzogKiBkX2R1cGxpY2F0ZSAtIGR1cGxpY2F0ZSBhIGRlbnRyeSBmb3IgY29tYmluZWQgYXRvbWljIG9wZXJhdGlvblxcbmZzL2RjYWNoZS5jLTIwMDgtICogQGRlbnRyeTogdGhlIGRlbnRyeSB0byBkdXBsaWNhdGVcXG4tLVxcbmZzL2RjYWNoZS5jLTIwMTctICogRm9yIHRoaXMgdGhleSBuZWVkIHR3byBkZW50cmllcyB3aGljaCB0ZW1wb3JhcmlseSBoYXZlIHRoZSBzYW1lIG5hbWUsXFxuZnMvZGNhY2hlLmM6MjAxODogKiBiZWZvcmUgb25lIGlzIHJlbmFtZWQuICBkX2R1cGxpY2F0ZSgpIHByb3ZpZGVzIGZvciB0aGlzLiAgR2l2ZW4gYVxcbmZzL2RjYWNoZS5jLTIwMTktICogcG9zaXRpdmUgaGFzaGVkIGRlbnRyeSwgaXQgY3JlYXRlcyBhIHNlY29uZCBpbi1sb29rdXAgZGVudHJ5Llxcbi0tXFxuZnMvZGNhY2hlLmMtMjAzMS0gKi9cXG5mcy9kY2FjaGUuYzoyMDMyOnN0cnVjdCBkZW50cnkgKmRfZHVwbGljYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9kY2FjaGUuYy0yMDMzLXtcXG4tLVxcbmZzL2RjYWNoZS5jLTIwNTUtfVxcbmZzL2RjYWNoZS5jOjIwNTY6RVhQT1JUX1NZTUJPTChkX2R1cGxpY2F0ZSk7XFxuZnMvZGNhY2hlLmMtMjA1Ny1cXG4tLVxcbmZzL2RjYWNoZS5jPTI5NzM9RVhQT1JUX1NZTUJPTChkX2FsbG9jX3BhcmFsbGVsKTtcXG4tLVxcbmZzL2RjYWNoZS5jLTI5NzUtLyoqXFxuZnMvZGNhY2hlLmM6Mjk3NjogKiBkX2FsbG9jX3RyeWxvY2soKSAtIGZpbmQgb3IgYWxsb2NhdGUgYSBuZXcgZGVudHJ5XFxuZnMvZGNhY2hlLmMtMjk3Ny0gKiBAcGFyZW50OiBkZW50cnkgb2YgdGhlIHBhcmVudFxcbi0tXFxuZnMvZGNhY2hlLmMtMjk4My0gKiBub3QgZF9pbl9sb29rdXAoKSB0aGVuIHRoYXQgaXMgcmV0dXJuZWQgaW5zdGVhZC5cXG5mcy9kY2FjaGUuYzoyOTg0OiAqIElmIHRoZSBleGlzdGluZyBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSwgZF9hbGxvY190cnlsb2NrKClcXG5mcy9kY2FjaGUuYy0yOTg1LSAqIHJldHVybnMgd2l0aCBlcnJvciAlLUVXT1VMREJMT0NLLlxcbi0tXFxuZnMvZGNhY2hlLmMtMjk5Ni0gKi9cXG5mcy9kY2FjaGUuYzoyOTk3OnN0cnVjdCBkZW50cnkgKmRfYWxsb2NfdHJ5bG9jayhzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXFxuZnMvZGNhY2hlLmMtMjk5OC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHFzdHIgKm5hbWUpXFxuLS1cXG5mcy9kY2FjaGUuYy0zMDA2LX1cXG5mcy9kY2FjaGUuYzozMDA3OkVYUE9SVF9TWU1CT0woZF9hbGxvY190cnlsb2NrKTtcXG5mcy9kY2FjaGUuYy0zMDA4LVxcbi0tXFxuZnMvbmFtZWkuYz0xOTI5PXN0YXRpYyBub2lubGluZSBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfc2xvdyhjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4tLVxcbmZzL25hbWVpLmMtMTkzNS1cXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XFxuZnMvbmFtZWkuYzoxOTM2OlxcdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyB8IExPT0tVUF9TSEFSRUQpO1xcbmZzL25hbWVpLmMtMTkzNy1cXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcXG4tLVxcbmZzL25hbWVpLmM9MTk0MT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX3Nsb3dfa2lsbGFibGUoY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuLS1cXG5mcy9uYW1laS5jLTE5NDktXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlRSKTtcXG5mcy9uYW1laS5jOjE5NTA6XFx0cmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzIHwgTE9PS1VQX1NIQVJFRCk7XFxuZnMvbmFtZWkuYy0xOTUxLVxcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xcbi0tXFxuZnMvbmFtZWkuYz00NDMxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9uYW1laS5jLTQ0NDktXFx0Y3JlYXRlX2Vycm9yID0gMDtcXG5mcy9uYW1laS5jOjQ0NTA6XFx0c2hhcmVkX2ZsYWcgPSAob3Blbl9mbGFnIFxcdTAwMjYgT19DUkVBVCkgPyAwIDogTE9PS1VQX1NIQVJFRDtcXG5mcy9uYW1laS5jLTQ0NTEtXFxuLS1cXG5pbmNsdWRlL2RybS9kcm1fZWRpZC5oPTQ0MT1zdHJ1Y3QgZWRpZCAqZHJtX2dldF9lZGlkX3N3aXRjaGVyb28oc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcixcXG5pbmNsdWRlL2RybS9kcm1fZWRpZC5oLTQ0Mi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7XFxuaW5jbHVkZS9kcm0vZHJtX2VkaWQuaDo0NDM6c3RydWN0IGVkaWQgKmRybV9lZGlkX2R1cGxpY2F0ZShjb25zdCBzdHJ1Y3QgZWRpZCAqZWRpZCk7XFxuaW5jbHVkZS9kcm0vZHJtX2VkaWQuaC00NDQtaW50IGRybV9hZGRfZWRpZF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZWRpZCAqZWRpZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oPTI2MT1leHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTtcXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oOjI2MjpleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfdHJ5bG9jayhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopO1xcbmluY2x1ZGUvbGludXgvZGNhY2hlLmgtMjYzLWV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9zcGxpY2VfYWxpYXMoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7XFxuaW5jbHVkZS9saW51eC9kY2FjaGUuaDoyNjQ6c3RydWN0IGRlbnRyeSAqZF9kdXBsaWNhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTI2NS0vKiB3ZWlyZCBwcm9jZnMgbWVzczsgKk5PVCogZXhwb3J0ZWQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvbmFtZWkuaD0xMj1lbnVtIHsgTUFYX05FU1RFRF9MSU5LUyA9IDggfTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmFtZWkuaC0zNC0jZGVmaW5lIExPT0tVUF9SRU5BTUVfVEFSR0VUXFx0QklUKDE5KVxcdC8qIC4uLiBpbiBkZXN0aW5hdGlvbiBvZiByZW5hbWUoKSAqL1xcbmluY2x1ZGUvbGludXgvbmFtZWkuaDozNTojZGVmaW5lIExPT0tVUF9TSEFSRURcXHRcXHRCSVQoMjApIC8qIFBhcmVudCBsb2NrIGlzIGhlbGQgc2hhcmVkICovXFxuaW5jbHVkZS9saW51eC9uYW1laS5oLTM2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxNjoyMS4zMjk3MTUxNDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NDc5MzM1MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guICBJJ3ZlIGdvbmUgdGhyb3VnaCB0aGUgY29kZSBjaGFuZ2VzIGFuZCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZTogYGRfZHVwbGljYXRlYCwgYGRfd2FpdF9sb29rdXBgLCBgZF9hbGxvY19wYXJhbGxlbGAsIGBkX2FsbG9jX3RyeWxvY2tgLCBgX19kX2xvb2t1cF91bmhhc2hgLCBgX19kX2FkZGAsIGBkX3NwbGljZV9hbGlhc19vcHNgLCBgZF9zcGxpY2VfYWxpYXNgLCBgX19kX2FsbG9jYCBmcm9tIGBmcy9kY2FjaGUuY2A7IGBsb29rdXBfc2xvd2AsIGBsb29rdXBfc2xvd19raWxsYWJsZWAsIGFuZCBgbG9va3VwX29wZW5gIGZyb20gYGZzL25hbWVpLmNgOyBhbmQgYG5mc19hc3luY191bmxpbmtfcmVsZWFzZWAgYW5kIGBuZnNfY2FsbF91bmxpbmtgIGZyb20gYGZzL25mcy91bmxpbmsuY2AuIEkgYWxzbyBzZWUgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9kY2FjaGUuaGAgaW52b2x2aW5nIGBkX2xvb2t1cF9yZWxlYXNlYCBhbmQgYGRfbG9va3VwX2FjcXVpcmVgLlxuXG5Ob3csIEkgbmVlZCB0byBmaWx0ZXIgdGhlc2UgZG93biB0byB0aGUgbW9zdCByZWxldmFudCB0YXJnZXRzIGZvciBmdXp6aW5nLiBGdW5jdGlvbnMgbGlrZSBgZF9hbGxvY2AgYXJlIHBvdGVudGlhbGx5IHRvbyB1YmlxdWl0b3VzLCBidXQgIGBkX2FsbG9jX3BhcmFsbGVsYCwgYGRfYWxsb2NfdHJ5bG9ja2AsIGBkX3NwbGljZV9hbGlhc2AsIGBkX2R1cGxpY2F0ZWAsIGBsb29rdXBfc2xvd2AsIGBsb29rdXBfc2xvd19raWxsYWJsZWAsIGBsb29rdXBfb3BlbmAsIGBuZnNfY2FsbF91bmxpbmtgIGFuZCBgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlYCBzZWVtIG1vcmUgdGFyZ2V0ZWQsIGFuZCB0aGF0IGBsb29rdXBfb3BlbmAncyBzcGVjaWZpYyB1c2UgaW4gYE9fQ1JFQVRgIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUuIFRoZSBhaW0gaXMgdG8gZW5zdXJlIHRoZSBmdXp6aW5nIGVmZm9ydCBpcyBmb2N1c2VkIG9uIHRoZSBtb3N0IGludGVyZXN0aW5nIGFuZCBpbXBhY3RmdWwgY29kZSBjaGFuZ2VzLlxuXG5JJ20gYWxzbyBjb25zaWRlcmluZyBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFZGUyBhbmQgZGNhY2hlIGFyZSBjb3JlIGZlYXR1cmVzOyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIHN0cmljdGx5IHJlcXVpcmVkLCBhbHRob3VnaCBgQ09ORklHX0xPQ0tERVBgIGlzIHVzZWQgaWYgbG9ja2RlcCBpcyBlbmFibGVkLCBhbmQgdGhlIE5GUyBjbGllbnQgdXNlcyBgQ09ORklHX05GU19GU2AuICBGb3Igb3B0aW1hbCBmdXp6aW5nLCBJJ2xsIHJlY29tbWVuZCBlbmFibGluZyBgUFJPVkVfTE9DS0lOR2AgYW5kIGBMT0NLREVQYCB0byBleGVyY2lzZSB0aGUgbG9ja2RlcCBpbnRlZ3JhdGlvbnMgcmVsYXRlZCB0byB0aGUgYGRlbnRyeS1cdTAwM2Vsb29rdXBfbWFwYC4gSSdsbCBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIGBDT05GSUdfTkZTX0ZTYCBpcyBzZXQsIHNpbmNlIHRoZSBjaGFuZ2VzIHRvdWNoIE5GUy5cblxuR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIOKAkyBjb3JlIFZGUyBwYXRoIGxvb2t1cCwgcGFyYWxsZWwgZGVudHJ5IGFsbG9jYXRpb24sIHNoYXJlZCBkaXJlY3RvcnkgbG9ja2luZyBkdXJpbmcgbG9va3VwIGFuZCBvcGVuIG9wZXJhdGlvbnMsIGxvY2tkZXAgYW5ub3RhdGlvbiBmb3IgcGFyYWxsZWwgbG9va3VwcywgZF9zcGxpY2VfYWxpYXMgYXNzZXJ0aW9ucywgYW5kIHRoZSBkZW50cnkgaGVscGVycyAtICB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgY3JpdGljYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIHBvdGVudGlhbCBidWdzIGluIHRoZXNlIGFyZWFzIGNvdWxkIGJlIHF1aXRlIGltcGFjdGZ1bC4gVGhlIGZ1enppbmcgc2hvdWxkIHRhcmdldCB0aGUgZm9sbG93aW5nOiBgZF9kdXBsaWNhdGVgLCBgZF9hbGxvY19wYXJhbGxlbGAsIGBkX2FsbG9jX3RyeWxvY2tgLCBgZF9zcGxpY2VfYWxpYXNgLCBgZF9zcGxpY2VfYWxpYXNfb3BzYCwgYGRfd2FpdF9sb29rdXBgLCBgbG9va3VwX3Nsb3dgLCBgbG9va3VwX3Nsb3dfa2lsbGFibGVgLCBgbG9va3VwX29wZW5gLCBgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlYCwgYW5kIGBuZnNfY2FsbF91bmxpbmtgLlxuXG5Ob3csIEknbGwgbmVlZCB0byBkZWZpbmUgdGhlIHBhcmFtZXRlcnMgZm9yIHNldHRpbmcgdGhlIHJlc3VsdHMsIGNvbmZpcm1pbmcgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAsIHdpdGggY2xlYXIgcmVhc29uaW5nIGFib3V0IHdoeSBpdCdzIHdvcnRoIGZ1enppbmcgLSB0aGUgY2hhbmdlcyBpbiBwYXJhbGxlbCBsb29rdXBzLCB0aGUgbG9ja2luZyBtZWNoYW5pc21zLCBzaGFyZWQgZGlyZWN0b3J5IGxvY2tpbmcgaW4gYGxvb2t1cF9zbG93YCBhbmQgYGxvb2t1cF9vcGVuYCwgdGhlIG5ldyBkZW50cnkgaGVscGVycyBzdWNoIGFzIGBkX2R1cGxpY2F0ZWAgYW5kIGBkX2FsbG9jX3RyeWxvY2tgLCBkZW50cnkgbG9ja2RlcCB0cmFja2luZywgYW5kIGFzc2VydGlvbiBjaGFuZ2VzIGluIGBkX3NwbGljZV9hbGlhc19vcHNgLiBJJ2xsIGluY2x1ZGUgdGhlIGlkZW50aWZpZWQgZm9jdXMgc3ltYm9scyBhbmQgdGhlIHN1Z2dlc3RlZCBjb25maWd1cmF0aW9uczogYFBST1ZFX0xPQ0tJTkdgLCBhbmQgYE5GU19GU2AuICBGaW5hbGx5LCBJIHdpbGwgZG91YmxlLWNoZWNrIGFsbCB0aGUgcGFyYW1ldGVycyBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI1MCwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTY6MjkuODA5MDUyMzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMzg5Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJORlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkX2R1cGxpY2F0ZVwiLFxuICAgIFwiZF9hbGxvY19wYXJhbGxlbFwiLFxuICAgIFwiZF9hbGxvY190cnlsb2NrXCIsXG4gICAgXCJkX3NwbGljZV9hbGlhc1wiLFxuICAgIFwiZF9zcGxpY2VfYWxpYXNfb3BzXCIsXG4gICAgXCJkX3dhaXRfbG9va3VwXCIsXG4gICAgXCJsb29rdXBfc2xvd1wiLFxuICAgIFwibG9va3VwX3Nsb3dfa2lsbGFibGVcIixcbiAgICBcImxvb2t1cF9vcGVuXCIsXG4gICAgXCJuZnNfYXN5bmNfdW5saW5rX3JlbGVhc2VcIixcbiAgICBcIm5mc19jYWxsX3VubGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIFZGUyBkY2FjaGUgYW5kIG5hbWVpIGxvZ2ljLCBpbmNsdWRpbmcgcGFyYWxsZWwgbG9va3VwIGxvY2tpbmcsIHNoYXJlZCBkaXJlY3RvcnkgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gbG9va3VwX3Nsb3cgYW5kIGxvb2t1cF9vcGVuLCBsb2NrZGVwIG1hcCB0cmFja2luZyBmb3IgaW4tbG9va3VwIGRlbnRyaWVzLCB1cGRhdGVkIGFzc2VydGlvbnMgaW4gZF9zcGxpY2VfYWxpYXNfb3BzLCBuZXcgZGNhY2hlIGhlbHBlcnMgKGRfZHVwbGljYXRlLCBkX2FsbG9jX3RyeWxvY2spLCBhbmQgTkZTIGFzeW5jaHJvbm91cyB1bmxpbmsgbG9jayB0cmFja2luZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSByZWFjaGFibGUga2VybmVsIHN1YnN5c3RlbXMgYW5kIGRpcmVjdGx5IGFmZmVjdCBjb25jdXJyZW5jeSBhbmQgaW52YXJpYW50IGVuZm9yY2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIk5GU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRfZHVwbGljYXRlXCIsXG4gICAgXCJkX2FsbG9jX3BhcmFsbGVsXCIsXG4gICAgXCJkX2FsbG9jX3RyeWxvY2tcIixcbiAgICBcImRfc3BsaWNlX2FsaWFzXCIsXG4gICAgXCJkX3NwbGljZV9hbGlhc19vcHNcIixcbiAgICBcImRfd2FpdF9sb29rdXBcIixcbiAgICBcImxvb2t1cF9zbG93XCIsXG4gICAgXCJsb29rdXBfc2xvd19raWxsYWJsZVwiLFxuICAgIFwibG9va3VwX29wZW5cIixcbiAgICBcIm5mc19hc3luY191bmxpbmtfcmVsZWFzZVwiLFxuICAgIFwibmZzX2NhbGxfdW5saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvcmUgVkZTIGRjYWNoZSBhbmQgbmFtZWkgbG9naWMsIGluY2x1ZGluZyBwYXJhbGxlbCBsb29rdXAgbG9ja2luZywgc2hhcmVkIGRpcmVjdG9yeSBsb2NraW5nIGZsYWdzIChMT09LVVBfU0hBUkVEKSBpbiBsb29rdXBfc2xvdyBhbmQgbG9va3VwX29wZW4sIGxvY2tkZXAgbWFwIHRyYWNraW5nIGZvciBpbi1sb29rdXAgZGVudHJpZXMsIHVwZGF0ZWQgYXNzZXJ0aW9ucyBpbiBkX3NwbGljZV9hbGlhc19vcHMsIG5ldyBkY2FjaGUgaGVscGVycyAoZF9kdXBsaWNhdGUsIGRfYWxsb2NfdHJ5bG9jayksIGFuZCBORlMgYXN5bmNocm9ub3VzIHVubGluayBsb2NrIHRyYWNraW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIHJlYWNoYWJsZSBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgZGlyZWN0bHkgYWZmZWN0IGNvbmN1cnJlbmN5IGFuZCBpbnZhcmlhbnQgZW5mb3JjZW1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjE2OjI5LjkwMDQ1MDYyNloiLCJTZXEiOjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ4MjIzOTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjE2OjI5LjkwMDkxOTYyNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDk0ODE3Njc4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIExvY2tkZXAgdHJhY2tpbmcgZm9yIHBhcmFsbGVsIGRlbnRyeSBsb29rdXBzIChEQ0FDSEVfUEFSX0xPT0tVUCB2aWEgc3RydWN0IGxvY2tkZXBfbWFwIGluIHN0cnVjdCBkZW50cnkpLCBhZGRzIHRoZSBkX2R1cGxpY2F0ZSBhbmQgZF9hbGxvY190cnlsb2NrIGhlbHBlcnMsIHVwZGF0ZXMgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gVkZTIGxvb2t1cCByb3V0aW5lcyAobG9va3VwX3Nsb3csIGxvb2t1cF9vcGVuKSwgYW5kIGZpeGVzIGZpbGVzeXN0ZW0gZG9jdW1lbnRhdGlvbi5cXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgdHJhbnNmZXJzLiBBbGwgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmVzIChlLmcuLCBzdHJ1Y3QgZGVudHJ5IGluIF9fZF9hbGxvYykgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbi4gQW55IGNvbmN1cnJlbmN5LCBkZWFkbG9jaywgb3IgcmVmY291bnRpbmcgaXNzdWVzIHJlc3VsdGluZyBmcm9tIHRoZXNlIFZGUyBsb2NraW5nL2xvb2t1cCByZWZhY3RvcmluZ3MgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyBzdWNoIGFzIExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkOWExMmVjMWU1ZmUzZjNlNTc3ZDNiNjE4MzZkODZlNjY5OTQzMGVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNDoxNTo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0XG5pbmRleCA2MDg4MGViMGM0OWQxLi40ZTAxNWYxYmYxZjg0IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuQEAgLTEyMDMsMTYgKzEyMDMsMTYgQEAgd2lsbCBmYWlsLXNhZmUuXG4gXG4gLS0tXG4gXG4tKiogbWFuZGF0b3J5KipcbisqKm1hbmRhdG9yeSoqXG4gXG4gbG9va3VwX29uZSgpLCBsb29rdXBfb25lX3VubG9ja2VkKCksIGxvb2t1cF9vbmVfcG9zaXRpdmVfdW5sb2NrZWQoKSBub3dcbiB0YWtlIGEgcXN0ciBpbnN0ZWFkIG9mIGEgbmFtZSBhbmQgbGVuLiAgVGhlc2UsIG5vdCB0aGUgXCJvbmVfbGVuXCJcbiB2ZXJzaW9ucywgc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgYWNjZXNzaW5nIGEgZmlsZXN5c3RlbSBmcm9tIG91dHNpZGVcbi10aGF0IGZpbGVzeXNtdGVtLCB0aHJvdWdoIGEgbW91bnQgcG9pbnQgLSB3aGljaCB3aWxsIGhhdmUgYSBtbnRfaWRtYXAuXG4rdGhhdCBmaWxlc3lzdGVtLCB0aHJvdWdoIGEgbW91bnQgcG9pbnQgLSB3aGljaCB3aWxsIGhhdmUgYSBtbnRfaWRtYXAuXG4gXG4gLS0tXG4gXG4tKiogbWFuZGF0b3J5KipcbisqKm1hbmRhdG9yeSoqXG4gXG4gRnVuY3Rpb25zIHRyeV9sb29rdXBfb25lX2xlbigpLCBsb29rdXBfb25lX2xlbigpLFxuIGxvb2t1cF9vbmVfbGVuX3VubG9ja2VkKCkgYW5kIGxvb2t1cF9wb3NpdGl2ZV91bmxvY2tlZCgpIGhhdmUgYmVlblxuQEAgLTEyMjksNyArMTIyOSw3IEBAIGFscmVhZHkgYmVlbiBwZXJmb3JtZWQgc3VjaCBhcyBhZnRlciB2ZnNfcGF0aF9wYXJlbnRfbG9va3VwKClcbiBcbiAtLS1cbiBcbi0qKiBtYW5kYXRvcnkqKlxuKyoqbWFuZGF0b3J5KipcbiBcbiBkX2hhc2hfYW5kX2xvb2t1cCgpIGlzIG5vIGxvbmdlciBleHBvcnRlZCBvciBhdmFpbGFibGUgb3V0c2lkZSB0aGUgVkZTLlxuIFVzZSB0cnlfbG9va3VwX25vcGVybSgpIGluc3RlYWQuICBUaGlzIGFkZHMgbmFtZSB2YWxpZGF0aW9uIGFuZCB0YWtlc1xuQEAgLTEzNzAsNyArMTM3MCw3IEBAIHNpbWlsYXIuXG4gXG4gLS0tXG4gXG4tKiogbWFuZGF0b3J5KipcbisqKm1hbmRhdG9yeSoqXG4gXG4gbG9ja19yZW5hbWUoKSwgbG9ja19yZW5hbWVfY2hpbGQoKSwgdW5sb2NrX3JlbmFtZSgpIGFyZSBub1xuIGxvbmdlciBhdmFpbGFibGUuICBVc2Ugc3RhcnRfcmVuYW1pbmcoKSBvciBzaW1pbGFyLlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuaW5kZXggZDNhOTNlZWMzOTQ1Zi4uZGU4Zjg1MDIwNTZlOCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG5AQCAtNTA3LDggKzUwNyw4IEBAIG90aGVyd2lzZSBub3RlZC5cbiBcdGRlbnRyeSBiZWZvcmUgdGhlIGZpcnN0IG1rZGlyIHJldHVybnMuXG4gXG4gXHRJZiB0aGVyZSBpcyBhbnkgY2hhbmNlIHRoaXMgY291bGQgaGFwcGVuLCB0aGVuIHRoZSBuZXcgaW5vZGVcbi1cdHNob3VsZCBiZSBkX2Ryb3AoKWVkIGFuZCBhdHRhY2hlZCB3aXRoIGRfc3BsaWNlX2FsaWFzKCkuICBUaGVcbi1cdHJldHVybmVkIGRlbnRyeSAoaWYgYW55KSBzaG91bGQgYmUgcmV0dXJuZWQgYnkgLVx1MDAzZW1rZGlyKCkuXG4rXHRzaG91bGQgYmUgYXR0YWNoZWQgd2l0aCBkX3NwbGljZV9hbGlhcygpLiAgVGhlIHJldHVybmVkXG4rXHRkZW50cnkgKGlmIGFueSkgc2hvdWxkIGJlIHJldHVybmVkIGJ5IC1cdTAwM2Vta2RpcigpLlxuIFxuIGBgcm1kaXJgYFxuIFx0Y2FsbGVkIGJ5IHRoZSBybWRpcigyKSBzeXN0ZW0gY2FsbC4gIE9ubHkgcmVxdWlyZWQgaWYgeW91IHdhbnRcbmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jXG5pbmRleCAxYjFhODFmMTBkYTY3Li4zYWY4YjJhYzY5OWY5IDEwMDY0NFxuLS0tIGEvZnMvZGNhY2hlLmNcbisrKyBiL2ZzL2RjYWNoZS5jXG5AQCAtMzIsNiArMzIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdF9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdF9ibC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdF9scnUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25hbWVpLmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuICNpbmNsdWRlIFwibW91bnQuaFwiXG4gXG5AQCAtMTkwMCw2ICsxOTAxLDcgQEAgRVhQT1JUX1NZTUJPTChkX2ludmFsaWRhdGUpO1xuICBcbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuIHtcbitcdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19sb29rdXBfa2V5O1xuIFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuIFx0Y2hhciAqZG5hbWU7XG4gXHRpbnQgZXJyO1xuQEAgLTE5NTcsNiArMTk1OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4gXHRkZW50cnktXHUwMDNld2FpdGVycyA9IE5VTEw7XG4gXHRJTklUX0hMSVNUX05PREUoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfc2liKTtcbiBcbitcdGxvY2tkZXBfaW5pdF9tYXAoXHUwMDI2ZGVudHJ5LVx1MDAzZWxvb2t1cF9tYXAsIFwiRENBQ0hFX1BBUl9MT09LVVBcIiwgXHUwMDI2X19sb29rdXBfa2V5LCAwKTtcbitcbiBcdGlmIChkZW50cnktXHUwMDNlZF9vcCBcdTAwMjZcdTAwMjYgZGVudHJ5LVx1MDAzZWRfb3AtXHUwMDNlZF9pbml0KSB7XG4gXHRcdGVyciA9IGRlbnRyeS1cdTAwM2VkX29wLVx1MDAzZWRfaW5pdChkZW50cnkpO1xuIFx0XHRpZiAoZXJyKSB7XG5AQCAtMTk5OSw2ICsyMDAzLDU4IEBAIHN0cnVjdCBkZW50cnkgKmRfYWxsb2Moc3RydWN0IGRlbnRyeSAqIHBhcmVudCwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4gfVxuIEVYUE9SVF9TWU1CT0woZF9hbGxvYyk7XG4gXG4rLyoqXG4rICogZF9kdXBsaWNhdGUgLSBkdXBsaWNhdGUgYSBkZW50cnkgZm9yIGNvbWJpbmVkIGF0b21pYyBvcGVyYXRpb25cbisgKiBAZGVudHJ5OiB0aGUgZGVudHJ5IHRvIGR1cGxpY2F0ZVxuKyAqXG4rICogU29tZSByZW5hbWUgb3BlcmF0aW9ucyBuZWVkIHRvIGJlIGNvbWJpbmVkIHdpdGggYW5vdGhlciBvcGVyYXRpb25cbisgKiBpbnNpZGUgdGhlIGZpbGVzeXN0ZW0uXG4rICogMS8gQSBjbHVzdGVyIGZpbGVzeXN0ZW0gd2hlbiByZW5hbWluZyB0byBhbiBpbi11c2UgZmlsZSBtaWdodCBuZWVkIHRvXG4rICogICBmaXJzdCBcInNpbGx5LXJlbmFtZVwiIHRoYXQgdGFyZ2V0IG91dCBvZiB0aGUgd2F5IGJlZm9yZSB0aGUgbWFpbiByZW5hbWVcbisgKiAyLyBBIGZpbGVzeXN0ZW0gdGhhdCBzdXBwb3J0cyB3aGl0ZS1vdXQgbWlnaHQgd2FudCB0byBjcmVhdGUgYSB3aGl0ZW91dFxuKyAqICAgaW4gcGxhY2Ugb2YgdGhlIGZpbGUgYmVpbmcgbW92ZWQuXG4rICpcbisgKiBGb3IgdGhpcyB0aGV5IG5lZWQgdHdvIGRlbnRyaWVzIHdoaWNoIHRlbXBvcmFyaWx5IGhhdmUgdGhlIHNhbWUgbmFtZSxcbisgKiBiZWZvcmUgb25lIGlzIHJlbmFtZWQuICBkX2R1cGxpY2F0ZSgpIHByb3ZpZGVzIGZvciB0aGlzLiAgR2l2ZW4gYVxuKyAqIHBvc2l0aXZlIGhhc2hlZCBkZW50cnksIGl0IGNyZWF0ZXMgYSBzZWNvbmQgaW4tbG9va3VwIGRlbnRyeS5cbisgKiBCZWNhdXNlIHRoZSBvcmlnaW5hbCBkZW50cnkgZXhpc3RzLCBubyBvdGhlciB0aHJlYWQgd2lsbCB0cnkgdG9cbisgKiBjcmVhdGUgYW4gaW4tbG9va3VwIGRlbnRyeSwgc28gdGhlcmUgY2FuIGJlIG5vIHJhY2UgaW4gdGhpcyBjcmVhdGUuXG4rICpcbisgKiBUaGUgY2FsbGVyIHNob3VsZCBkX21vdmUoKSB0aGUgb3JpZ2luYWwgdG8gYSBuZXcgbmFtZSwgb2Z0ZW4gdmlhIGFcbisgKiByZW5hbWUgcmVxdWVzdCwgYW5kIHNob3VsZCBjYWxsIGRfbG9va3VwX2RvbmUoKSBvbiB0aGUgbmV3bHkgY3JlYXRlZFxuKyAqIGRlbnRyeS4gIElmIHRoZSBuZXcgaXMgaW5zdGFudGlhdGVkIHRoZW4gdGhlIG9sZCBNVVNUIGVpdGhlciBiZSBtb3ZlZFxuKyAqIG9yIGRyb3BwZWQuXG4rICpcbisgKiBQYXJlbnQgbXVzdCBiZSBsb2NrZWQuXG4rICpcbisgKiBSZXR1cm5zOiBhbiBpbi1sb29rdXAgZGVudHJ5LCBvciAtRU5PTUVNLlxuKyAqL1xuK3N0cnVjdCBkZW50cnkgKmRfZHVwbGljYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbit7XG4rXHR1bnNpZ25lZCBpbnQgaGFzaCA9IGRlbnRyeS1cdTAwM2VkX25hbWUuaGFzaDtcbitcdHN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRlbnRyeS1cdTAwM2VkX3BhcmVudDtcbitcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpiID0gaW5fbG9va3VwX2hhc2gocGFyZW50LCBoYXNoKTtcbitcdHN0cnVjdCBkZW50cnkgKm5ldyA9IF9fZF9hbGxvYyhwYXJlbnQtXHUwMDNlZF9zYiwgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbmFtZSk7XG4rXG4rXHRpZiAodW5saWtlbHkoIW5ldykpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1xuK1x0bmV3LVx1MDAzZWRfZmxhZ3MgfD0gRENBQ0hFX1BBUl9MT09LVVA7XG4rXHRsb2NrX21hcF9hY3F1aXJlX3RyeShcdTAwMjZuZXctXHUwMDNlbG9va3VwX21hcCk7XG4rXHRzcGluX2xvY2soXHUwMDI2cGFyZW50LVx1MDAzZWRfbG9jayk7XG4rXHRuZXctXHUwMDNlZF9wYXJlbnQgPSBkZ2V0X2Rsb2NrKHBhcmVudCk7XG4rXHRobGlzdF9hZGRfaGVhZChcdTAwMjZuZXctXHUwMDNlZF9zaWIsIFx1MDAyNnBhcmVudC1cdTAwM2VkX2NoaWxkcmVuKTtcbitcdGlmIChwYXJlbnQtXHUwMDNlZF9mbGFncyBcdTAwMjYgRENBQ0hFX0RJU0NPTk5FQ1RFRClcbitcdFx0bmV3LVx1MDAzZWRfZmxhZ3MgfD0gRENBQ0hFX0RJU0NPTk5FQ1RFRDtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhcmVudC1cdTAwM2VkX2xvY2spO1xuK1xuK1x0aGxpc3RfYmxfbG9jayhiKTtcbitcdGhsaXN0X2JsX2FkZF9oZWFkKFx1MDAyNm5ldy1cdTAwM2VkX2luX2xvb2t1cF9oYXNoLCBiKTtcbitcdGhsaXN0X2JsX3VubG9jayhiKTtcbitcdHJldHVybiBuZXc7XG4rfVxuK0VYUE9SVF9TWU1CT0woZF9kdXBsaWNhdGUpO1xuK1xuIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfYW5vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbiBcdHJldHVybiBfX2RfYWxsb2Moc2IsIE5VTEwpO1xuQEAgLTIxNjgsNyArMjIyNCw2IEBAIHN0YXRpYyB2b2lkIF9fZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gICogKG9yIG90aGVyd2lzZSBzZXQpIGJ5IHRoZSBjYWxsZXIgdG8gaW5kaWNhdGUgdGhhdCBpdCBpcyBub3dcbiAgKiBpbiB1c2UgYnkgdGhlIGRjYWNoZS5cbiAgKi9cbi0gXG4gdm9pZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiB7XG4gXHRCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZW50cnkpKTtcbkBAIC0yNzUwLDYgKzI4MDUsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGVuZF9kaXJfYWRkKHN0cnVjdCBpbm9kZSAqZGlyLCB1bnNpZ25lZCBpbnQgbilcbiBzdGF0aWMgdm9pZCBkX3dhaXRfbG9va3VwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiB7XG4gXHRpZiAobGlrZWx5KGRfaW5fbG9va3VwKGRlbnRyeSkpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRlbGwgbG9ja2RlcCB3ZSB3aWxsIHdhaXQgZm9yIHRoZSBsb29rdXAgbG9jaywgYWZ0ZXJcbitcdFx0ICogZHJvcHBpbmcgLVx1MDAzZWRfbG9jaywgYnV0IHdvbid0IGFjdHVhbGx5IHRha2UgaXQuXG4rXHRcdCAqL1xuK1x0XHRzcGluX3JlbGVhc2UoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jay5kZXBfbWFwLCAwKTtcbitcdFx0bG9ja19tYXBfc3luYyhcdTAwMjZkZW50cnktXHUwMDNlbG9va3VwX21hcCk7XG4rXHRcdHNwaW5fYWNxdWlyZShcdTAwMjZkZW50cnktXHUwMDNlZF9sb2NrLmRlcF9tYXAsIDAsIDEsIF9USElTX0lQXyk7XG4rXG4gXHRcdGRlbnRyeS1cdTAwM2VkX2ZsYWdzIHw9IERDQUNIRV9MT09LVVBfV0FJVEVSUztcbiBcdFx0d2FpdF92YXJfZXZlbnRfc3BpbmxvY2soXHUwMDI2ZGVudHJ5LVx1MDAzZWRfZmxhZ3MsXG4gXHRcdFx0XHRcdCFkX2luX2xvb2t1cChkZW50cnkpLFxuQEAgLTI3NTcsOCArMjgyMCwxNiBAQCBzdGF0aWMgdm9pZCBkX3dhaXRfbG9va3VwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdH1cbiB9XG4gXG4tc3RydWN0IGRlbnRyeSAqZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4tXHRcdFx0XHRjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbisvKiBXaGF0IHRvIGRvIHdoZW4gX19kX2FsbG9jX3BhcmFsbGVsIGZpbmRzIGEgZF9pbl9sb29rdXAgZGVudHJ5ICovXG4rZW51bSBhbGxvY19wYXJhIHtcbitcdEFMTE9DX1BBUkFfV0FJVCxcbitcdEFMTE9DX1BBUkFfRkFJTCxcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmVcbitzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuK1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbitcdFx0XHRcdCAgZW51bSBhbGxvY19wYXJhIGhvdylcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaGFzaCA9IG5hbWUtXHUwMDNlaGFzaDtcbiBcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpiID0gaW5fbG9va3VwX2hhc2gocGFyZW50LCBoYXNoKTtcbkBAIC0yODMxLDYgKzI5MDIsMTIgQEAgc3RydWN0IGRlbnRyeSAqZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4gXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4gXHRcdFx0Z290byByZXRyeTtcbiBcdFx0fVxuK1x0XHRpZiAodW5saWtlbHkoaG93ID09IEFMTE9DX1BBUkFfRkFJTCkpIHtcbitcdFx0XHQvKiBtdXN0bid0IHdhaXQgZm9yIGNvbmN1cnJlbnQgbG9va3VwIHRvIGNvbXBsZXRlICovXG4rXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4rXHRcdFx0ZHB1dChuZXcpO1xuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FV09VTERCTE9DSyk7XG4rXHRcdH1cbiBcdFx0LypcbiBcdFx0ICogc29tZWJvZHkgaXMgbGlrZWx5IHRvIGJlIHN0aWxsIGRvaW5nIGxvb2t1cCBmb3IgaXQ7XG4gXHRcdCAqIHBpbiBpdCBhbmQgd2FpdCBmb3IgdGhlbSB0byBmaW5pc2hcbkBAIC0yODU4LDE0ICsyOTM1LDc3IEBAIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuIFx0fVxuIFx0aGxpc3RfYmxfYWRkX2hlYWQoXHUwMDI2bmV3LVx1MDAzZWRfaW5fbG9va3VwX2hhc2gsIGIpO1xuIFx0aGxpc3RfYmxfdW5sb2NrKGIpO1xuK1x0bG9ja19tYXBfYWNxdWlyZV90cnkoXHUwMDI2bmV3LVx1MDAzZWxvb2t1cF9tYXApO1xuIFx0cmV0dXJuIG5ldztcbiBtaXNtYXRjaDpcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xvY2spO1xuIFx0ZHB1dChkZW50cnkpO1xuIFx0Z290byByZXRyeTtcbiB9XG4rXG4rLyoqXG4rICogZF9hbGxvY19wYXJhbGxlbCgpIC0gYWxsb2NhdGUgYSBuZXcgZGVudHJ5IGFuZCBlbnN1cmUgdW5pcXVlbmVzc1xuKyAqIEBwYXJlbnQ6IGRlbnRyeSBvZiB0aGUgcGFyZW50XG4rICogQG5hbWU6ICAgbmFtZSBvZiB0aGUgZGVudHJ5IHdpdGhpbiB0aGF0IHBhcmVudC5cbisgKlxuKyAqIEEgbmV3IGRlbnRyeSBpcyBhbGxvY2F0ZWQgYW5kLCBwcm92aWRpbmcgaXQgaXMgdW5pcXVlLCBhZGRlZCB0byB0aGVcbisgKiByZWxldmFudCBpbmRleC5cbisgKiBJZiBhbiBleGlzdGluZyBkZW50cnkgaXMgZm91bmQgd2l0aCB0aGUgc2FtZSBwYXJlbnQvbmFtZSB0aGF0IGlzXG4rICogbm90IGRfaW5fbG9va3VwKCksIHRoZW4gdGhhdCBpcyByZXR1cm5lZCBpbnN0ZWFkLlxuKyAqIElmIHRoZSBleGlzdGluZyBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSwgZF9hbGxvY19wYXJhbGxlbCgpIHdhaXRzIGZvclxuKyAqIHRoYXQgbG9va3VwIHRvIGNvbXBsZXRlIGJlZm9yZSByZXR1cm5pbmcgdGhlIGRlbnRyeSBhbmQgdGhlbiBlbnN1cmVzIHRoZVxuKyAqIG1hdGNoIGlzIHN0aWxsIHZhbGlkLlxuKyAqIFRodXMgaWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBkX2luX2xvb2t1cCgpIHRoZW4gdGhlIGNhbGxlciBoYXNcbisgKiBleGNsdXNpdmUgYWNjZXNzIHVudGlsIGl0IGNvbXBsZXRlcyB0aGUgbG9va3VwLlxuKyAqIElmIHRoZSByZXR1cm5lZCBkZW50cnkgaXMgbm90IGRfaW5fbG9va3VwKCkgdGhlbiBhIGxvb2t1cCBoYXNcbisgKiBhbHJlYWR5IGNvbXBsZXRlZC5cbisgKlxuKyAqIFRoZSBAbmFtZSBtdXN0IGFscmVhZHkgaGF2ZSAtXHUwMDNlaGFzaCBzZXQsIGFzIGNhbiBiZSBhY2hpZXZlZFxuKyAqIGJ5IGUuZy4gdHJ5X2xvb2t1cF9ub3Blcm0oKS5cbisgKlxuKyAqIFJldHVybnM6IHRoZSBkZW50cnksIHdoZXRoZXIgZm91bmQgb3IgYWxsb2NhdGVkLCBvciBhbiBlcnJvciAlLUVOT01FTS5cbisgKi9cbitzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCxcbitcdFx0XHRcdGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuK3tcbitcdHJldHVybiBfX2RfYWxsb2NfcGFyYWxsZWwocGFyZW50LCBuYW1lLCBBTExPQ19QQVJBX1dBSVQpO1xuK31cbiBFWFBPUlRfU1lNQk9MKGRfYWxsb2NfcGFyYWxsZWwpO1xuIFxuKy8qKlxuKyAqIGRfYWxsb2NfdHJ5bG9jaygpIC0gZmluZCBvciBhbGxvY2F0ZSBhIG5ldyBkZW50cnlcbisgKiBAcGFyZW50OiBkZW50cnkgb2YgdGhlIHBhcmVudFxuKyAqIEBuYW1lOiAgIG5hbWUgb2YgdGhlIGRlbnRyeSB3aXRoaW4gdGhhdCBwYXJlbnQuXG4rICpcbisgKiBBIG5ldyBkZW50cnkgaXMgYWxsb2NhdGVkIGFuZCwgcHJvdmlkaW5nIGl0IGlzIHVuaXF1ZSwgYWRkZWQgdG8gdGhlXG4rICogcmVsZXZhbnQgaW5kZXguXG4rICogSWYgYW4gZXhpc3RpbmcgZGVudHJ5IGlzIGZvdW5kIHdpdGggdGhlIHNhbWUgcGFyZW50L25hbWUgdGhhdCBpc1xuKyAqIG5vdCBkX2luX2xvb2t1cCgpIHRoZW4gdGhhdCBpcyByZXR1cm5lZCBpbnN0ZWFkLlxuKyAqIElmIHRoZSBleGlzdGluZyBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSwgZF9hbGxvY190cnlsb2NrKClcbisgKiByZXR1cm5zIHdpdGggZXJyb3IgJS1FV09VTERCTE9DSy5cbisgKiBUaHVzIGlmIHRoZSByZXR1cm5lZCBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSB0aGVuIHRoZSBjYWxsZXIgaGFzXG4rICogZXhjbHVzaXZlIGFjY2VzcyB1bnRpbCBpdCBjb21wbGV0ZXMgdGhlIGxvb2t1cC5cbisgKiBJZiB0aGUgcmV0dXJuZWQgZGVudHJ5IGlzIG5vdCBkX2luX2xvb2t1cCgpIHRoZW4gYSBsb29rdXAgaGFzXG4rICogYWxyZWFkeSBjb21wbGV0ZWQuXG4rICpcbisgKiBUaGUgQG5hbWUgbmVlZCBub3QgYWxyZWFkeSBoYXZlIC1cdTAwM2VoYXNoIHNldC5cbisgKlxuKyAqIFJldHVybnM6IHRoZSBkZW50cnksIHdoZXRoZXIgZm91bmQgb3IgYWxsb2NhdGVkLCBvciBhbiBlcnJvclxuKyAqICAgICUtRU5PTUVNLCAlLUVXT1VMREJMT0NLLCAlLUVBQ0NFUyAoZm9yIGEgYmFkIG5hbWUpIG9yXG4rICogICAgYW55dGhpbmcgcmV0dXJuZWQgYnkgLVx1MDAzZWRfaGFzaCgpLlxuKyAqL1xuK3N0cnVjdCBkZW50cnkgKmRfYWxsb2NfdHJ5bG9jayhzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBxc3RyICpuYW1lKVxuK3tcbitcdHN0cnVjdCBkZW50cnkgKmRlO1xuK1xuK1x0ZGUgPSB0cnlfbG9va3VwX25vcGVybShuYW1lLCBwYXJlbnQpO1xuK1x0aWYgKCFkZSlcbitcdFx0ZGUgPSBfX2RfYWxsb2NfcGFyYWxsZWwocGFyZW50LCBuYW1lLCBBTExPQ19QQVJBX0ZBSUwpO1xuK1x0cmV0dXJuIGRlO1xuK31cbitFWFBPUlRfU1lNQk9MKGRfYWxsb2NfdHJ5bG9jayk7XG4rXG4gLypcbiAgKiBNb3ZlIGRlbnRyeSBmcm9tIGluLWxvb2t1cCBzdGF0ZSB0byBidXN5LW5lZ2F0aXZlIG9uZS5cbiAgKlxuQEAgLTI4OTQsNiArMzAzNCw3IEBAIHN0YXRpYyB2b2lkIF9fZF9sb29rdXBfdW5oYXNoKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdGIgPSBpbl9sb29rdXBfaGFzaChkZW50cnktXHUwMDNlZF9wYXJlbnQsIGRlbnRyeS1cdTAwM2VkX25hbWUuaGFzaCk7XG4gXHRobGlzdF9ibF9sb2NrKGIpO1xuIFx0ZGVudHJ5LVx1MDAzZWRfZmxhZ3MgXHUwMDI2PSB+RENBQ0hFX1BBUl9MT09LVVA7XG4rXHRsb2NrX21hcF9yZWxlYXNlKFx1MDAyNmRlbnRyeS1cdTAwM2Vsb29rdXBfbWFwKTtcbiBcdF9faGxpc3RfYmxfZGVsKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2luX2xvb2t1cF9oYXNoKTtcbiBcdGhsaXN0X2JsX3VubG9jayhiKTtcbiBcdGRlbnRyeS1cdTAwM2V3YWl0ZXJzID0gTlVMTDtcbkBAIC0yOTMxLDE1ICszMDcyLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RfYWRkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdH1cbiBcdGlmICh1bmxpa2VseShvcHMpKVxuIFx0XHRkX3NldF9kX29wKGRlbnRyeSwgb3BzKTtcbi1cdGlmIChpbm9kZSkge1xuLVx0XHR1bnNpZ25lZCBhZGRfZmxhZ3MgPSBkX2ZsYWdzX2Zvcl9pbm9kZShpbm9kZSk7XG4tXHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2FsaWFzLCBcdTAwMjZpbm9kZS1cdTAwM2VpX2RlbnRyeSk7XG4tXHRcdHJhd193cml0ZV9zZXFjb3VudF9iZWdpbihcdTAwMjZkZW50cnktXHUwMDNlZF9zZXEpO1xuLVx0XHRfX2Rfc2V0X2lub2RlX2FuZF90eXBlKGRlbnRyeSwgaW5vZGUsIGFkZF9mbGFncyk7XG4tXHRcdHJhd193cml0ZV9zZXFjb3VudF9lbmQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfc2VxKTtcbi1cdFx0ZnNub3RpZnlfdXBkYXRlX2ZsYWdzKGRlbnRyeSk7XG4tXHR9XG4tXHRfX2RfcmVoYXNoKGRlbnRyeSk7XG4rXHRpZiAoaW5vZGUpXG4rXHRcdF9fZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTtcbitcdGlmIChkX3VuaGFzaGVkKGRlbnRyeSkpXG4rXHRcdF9fZF9yZWhhc2goZGVudHJ5KTtcbiBcdGlmIChkaXIpIHtcbiBcdFx0ZW5kX2Rpcl9hZGQoZGlyLCBuKTtcbiBcdFx0X19kX3dha2VfaW5fbG9va3VwX3dhaXRlcnMoZGVudHJ5KTtcbkBAIC0zMjQxLDcgKzMzNzcsNyBAQCBzdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhc19vcHMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0aWYgKElTX0VSUihpbm9kZSkpXG4gXHRcdHJldHVybiBFUlJfQ0FTVChpbm9kZSk7XG4gXG4tXHRCVUdfT04oIWRfdW5oYXNoZWQoZGVudHJ5KSk7XG4rXHRCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSk7XG4gXG4gXHRpZiAoIWlub2RlKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0zMjk3LDYgKzM0MzMsOCBAQCBzdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhc19vcHMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuICAqIEBpbm9kZTogIHRoZSBpbm9kZSB3aGljaCBtYXkgaGF2ZSBhIGRpc2Nvbm5lY3RlZCBkZW50cnlcbiAgKiBAZGVudHJ5OiBhIG5lZ2F0aXZlIGRlbnRyeSB3aGljaCB3ZSB3YW50IHRvIHBvaW50IHRvIHRoZSBpbm9kZS5cbiAgKlxuKyAqIEBkZW50cnkgbXVzdCBiZSBuZWdhdGl2ZSBhbmQgbWF5IGJlIGluLWxvb2t1cCBvciB1bmhhc2hlZCBvciBoYXNoZWQuXG4rICpcbiAgKiBJZiBpbm9kZSBpcyBhIGRpcmVjdG9yeSBhbmQgaGFzIGFuIElTX1JPT1QgYWxpYXMsIHRoZW4gZF9tb3ZlIHRoYXQgaW5cbiAgKiBwbGFjZSBvZiB0aGUgZ2l2ZW4gZGVudHJ5IGFuZCByZXR1cm4gaXQsIGVsc2Ugc2ltcGx5IGRfYWRkIHRoZSBpbm9kZVxuICAqIHRvIHRoZSBkZW50cnkgYW5kIHJldHVybiBOVUxMLlxuQEAgLTMzMDQsMTYgKzM0NDIsMTQgQEAgc3RydWN0IGRlbnRyeSAqZF9zcGxpY2VfYWxpYXNfb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiAgKiBJZiBhIG5vbi1JU19ST09UIGRpcmVjdG9yeSBpcyBmb3VuZCwgdGhlIGZpbGVzeXN0ZW0gaXMgY29ycnVwdCwgYW5kXG4gICogd2Ugc2hvdWxkIGVycm9yIG91dDogZGlyZWN0b3JpZXMgY2FuJ3QgaGF2ZSBtdWx0aXBsZSBhbGlhc2VzLlxuICAqXG4tICogVGhpcyBpcyBuZWVkZWQgaW4gdGhlIGxvb2t1cCByb3V0aW5lIG9mIGFueSBmaWxlc3lzdGVtIHRoYXQgaXMgZXhwb3J0YWJsZVxuLSAqICh2aWEga25mc2QpIHNvIHRoYXQgd2UgY2FuIGJ1aWxkIGRjYWNoZSBwYXRocyB0byBkaXJlY3RvcmllcyBlZmZlY3RpdmVseS5cbisgKiBUaGlzIHNob3VsZCBiZSB1c2VkIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIC1cdTAwM2Vsb29rdXAoKSBhbmQgdG9cbisgKiBpbnN0YW50aWF0ZSB0aGUgcmVzdWx0IG9mIC1cdTAwM2Vta2RpcigpLCBpcyBvZnRlbiB1c2VmdWwgZm9yXG4rICogLVx1MDAzZWF0b21pY19vcGVuLCBhbmQgbWF5IGJlIHVzZWQgdG8gaW5zdGFudGlhdGUgb3RoZXIgb2JqZWN0cy5cbiAgKlxuICAqIElmIGEgZGVudHJ5IHdhcyBmb3VuZCBhbmQgbW92ZWQsIHRoZW4gaXQgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UgTlVMTFxuLSAqIGlzIHJldHVybmVkLiAgVGhpcyBtYXRjaGVzIHRoZSBleHBlY3RlZCByZXR1cm4gdmFsdWUgb2YgLVx1MDAzZWxvb2t1cC5cbisgKiBpcyByZXR1cm5lZC4gIFRoaXMgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIG9mIC1cdTAwM2Vsb29rdXAgYW5kXG4rICogLVx1MDAzZW1rZGlyLlxuICAqXG4tICogQ2x1c3RlciBmaWxlc3lzdGVtcyBtYXkgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggYSBuZWdhdGl2ZSwgaGFzaGVkIGRlbnRyeS5cbi0gKiBJbiB0aGF0IGNhc2UsIHdlIGtub3cgdGhhdCB0aGUgaW5vZGUgd2lsbCBiZSBhIHJlZ3VsYXIgZmlsZSwgYW5kIGFsc28gdGhpc1xuLSAqIHdpbGwgb25seSBvY2N1ciBkdXJpbmcgYXRvbWljX29wZW4uIFNvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSBkZW50cnlcbi0gKiBiZWluZyBhbHJlYWR5IGhhc2hlZCBvbmx5IGluIHRoZSBmaW5hbCBjYXNlLlxuICAqL1xuIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiB7XG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDIwYTY1MzRlYTNlZmYuLmU5NzhhNzVlYjhhMTQgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4rKysgYi9mcy9uYW1laS5jXG5AQCAtMTkzMyw3ICsxOTMzLDcgQEAgc3RhdGljIG5vaW5saW5lIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9zbG93KGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRpci1cdTAwM2VkX2lub2RlO1xuIFx0c3RydWN0IGRlbnRyeSAqcmVzO1xuIFx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuLVx0cmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzKTtcbitcdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyB8IExPT0tVUF9TSEFSRUQpO1xuIFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XG4gXHRyZXR1cm4gcmVzO1xuIH1cbkBAIC0xOTQ3LDcgKzE5NDcsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX3Nsb3dfa2lsbGFibGUoY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXG4gXHRpZiAoaW5vZGVfbG9ja19zaGFyZWRfa2lsbGFibGUoaW5vZGUpKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVFIpO1xuLVx0cmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzKTtcbitcdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyB8IExPT0tVUF9TSEFSRUQpO1xuIFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XG4gXHRyZXR1cm4gcmVzO1xuIH1cbkBAIC0yOTQ2LDggKzI5NDYsOCBAQCBzdHJ1Y3QgZGVudHJ5ICpzdGFydF9kaXJvcChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBxc3RyICpuYW1lLFxuICAqIGVuZF9kaXJvcCAtIHNpZ25hbCBjb21wbGV0aW9uIG9mIGEgZGlyb3BcbiAgKiBAZGU6IHRoZSBkZW50cnkgd2hpY2ggd2FzIHJldHVybmVkIGJ5IHN0YXJ0X2Rpcm9wIG9yIHNpbWlsYXIuXG4gICpcbi0gKiBJZiB0aGUgZGUgaXMgYW4gZXJyb3IsIG5vdGhpbmcgaGFwcGVucy4gT3RoZXJ3aXNlIGFueSBsb2NrIHRha2VuIHRvXG4tICogcHJvdGVjdCB0aGUgZGVudHJ5IGlzIGRyb3BwZWQgYW5kIHRoZSBkZW50cnkgaXRzZWxmIGlzIHJlbGVhc2UgKGRwdXQoKSkuXG4rICogSWYgdGhlIEBkZSBpcyBhbiBlcnJvciwgbm90aGluZyBoYXBwZW5zLiBPdGhlcndpc2UgYW55IGxvY2sgdGFrZW4gdG9cbisgKiBwcm90ZWN0IHRoZSBkZW50cnkgaXMgZHJvcHBlZCBhbmQgdGhlIGRlbnRyeSBpdHNlbGYgaXMgcmVsZWFzZWQgKGRwdXQoKSkuXG4gICovXG4gdm9pZCBlbmRfZGlyb3Aoc3RydWN0IGRlbnRyeSAqZGUpXG4ge1xuQEAgLTMyMTAsNyArMzIxMCw3IEBAIEVYUE9SVF9TWU1CT0wobG9va3VwX29uZSk7XG4gLyoqXG4gICogbG9va3VwX29uZV91bmxvY2tlZCAtIGxvb2t1cCBzaW5nbGUgcGF0aG5hbWUgY29tcG9uZW50XG4gICogQGlkbWFwOlx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBsb29rdXAgaXMgcGVyZm9ybWVkIGZyb21cbi0gKiBAbmFtZTpcdHFzdHIgb2xkaW5nIHBhdGhuYW1lIGNvbXBvbmVudCB0byBsb29rdXBcbisgKiBAbmFtZTpcdHFzdHIgaG9sZGluZyBwYXRobmFtZSBjb21wb25lbnQgdG8gbG9va3VwXG4gICogQGJhc2U6XHRiYXNlIGRpcmVjdG9yeSB0byBsb29rdXAgZnJvbVxuICAqXG4gICogVGhpcyBjYW4gYmUgdXNlZCBmb3IgaW4ta2VybmVsIGZpbGVzeXN0ZW0gY2xpZW50cyBzdWNoIGFzIGZpbGUgc2VydmVycy5cbkBAIC0zMjQzLDcgKzMyNDMsNyBAQCBFWFBPUlRfU1lNQk9MKGxvb2t1cF9vbmVfdW5sb2NrZWQpO1xuIC8qKlxuICAqIGxvb2t1cF9vbmVfcG9zaXRpdmVfa2lsbGFibGUgLSBsb29rdXAgc2luZ2xlIHBhdGhuYW1lIGNvbXBvbmVudFxuICAqIEBpZG1hcDpcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgbG9va3VwIGlzIHBlcmZvcm1lZCBmcm9tXG4tICogQG5hbWU6XHRxc3RyIG9sZGluZyBwYXRobmFtZSBjb21wb25lbnQgdG8gbG9va3VwXG4rICogQG5hbWU6XHRxc3RyIGhvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cFxuICAqIEBiYXNlOlx0YmFzZSBkaXJlY3RvcnkgdG8gbG9va3VwIGZyb21cbiAgKlxuICAqIFRoaXMgaGVscGVyIHdpbGwgeWllbGQgRVJSX1BUUigtRU5PRU5UKSBvbiBuZWdhdGl2ZXMuIFRoZSBoZWxwZXIgcmV0dXJuc1xuQEAgLTMyNTksNyArMzI1OSw3IEBAIEVYUE9SVF9TWU1CT0wobG9va3VwX29uZV91bmxvY2tlZCk7XG4gICogdGhlIGlfcndzZW0gaXRzZWxmIGlmIG5lY2Vzc2FyeS4gIElmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgb3JcbiAgKiBkZWxpdmVyZWQsIGl0IHdpbGwgcmV0dXJuICUtRUlOVFIgaWYgdGhlIGxvY2sgaXMgbmVlZGVkLlxuICAqXG4tICogUmV0dXJuczogQSBkZW50cnksIHBvc3NpYmx5IG5lZ2F0aXZlLCBvclxuKyAqIFJldHVybnM6IEEgcG9zaXRpdmUgZGVudHJ5LCBvclxuICAqXHQgICAtIHNhbWUgZXJyb3JzIGFzIGxvb2t1cF9vbmVfdW5sb2NrZWQoKSBvclxuICAqXHQgICAtIEVSUl9QVFIoLUVJTlRSKSBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLlxuICAqL1xuQEAgLTMzODEsNyArMzM4MSw3IEBAIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9ub3Blcm1fcG9zaXRpdmVfdW5sb2NrZWQoc3RydWN0IHFzdHIgKm5hbWUsXG4gRVhQT1JUX1NZTUJPTChsb29rdXBfbm9wZXJtX3Bvc2l0aXZlX3VubG9ja2VkKTtcbiBcbiAvKipcbi0gKiBzdGFydF9jcmVhdGluZyAtIHByZXBhcmUgdG8gY3JlYXRlIGEgZ2l2ZW4gbmFtZSB3aXRoIHBlcm1pc3Npb24gY2hlY2tpbmdcbisgKiBzdGFydF9jcmVhdGluZyAtIHByZXBhcmUgdG8gYWNjZXNzIG9yIGNyZWF0ZSBhIGdpdmVuIG5hbWUgd2l0aCBwZXJtaXNzaW9uIGNoZWNraW5nXG4gICogQGlkbWFwOiAgaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIHByZXBhcmUgdG8gY3JlYXRlIHRoZSBuYW1lXG4gICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgY3JlYXRlZFxuQEAgLTM0MTMsOCArMzQxMyw4IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmcpO1xuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBmaW5kIHRoZSBuYW1lXG4gICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgcmVtb3ZlZFxuICAqXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3Zpbmdcbi0gKiBhbiBvYmplY3QgZnJvbSBhIGRpcmVjdG9yeS4gIFBlcm1pc3Npb24gY2hlY2tpbmcgKE1BWV9FWEVDKSBpcyBwZXJmb3JtZWRcbisgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZyBhbiBvYmplY3RcbisgKiBmcm9tIGEgZGlyZWN0b3J5LiAgUGVybWlzc2lvbiBjaGVja2luZyAoTUFZX0VYRUMpIGlzIHBlcmZvcm1lZFxuICAqIGFnYWluc3QgQGlkbWFwLlxuICAqXG4gICogSWYgdGhlIG5hbWUgZG9lc24ndCBleGlzdCwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuXG5AQCAtMzQ0MCw3ICszNDQwLDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZyk7XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIHByZXBhcmUgdG8gY3JlYXRlIHRoZSBuYW1lXG4gICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgY3JlYXRlZFxuICAqXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcbisgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byBjcmVhdGluZ1xuICAqIGFuIG9iamVjdCBpbiBhIGRpcmVjdG9yeS4gIFBlcm1pc3Npb24gY2hlY2tpbmcgKE1BWV9FWEVDKSBpcyBwZXJmb3JtZWRcbiAgKiBhZ2FpbnN0IEBpZG1hcC5cbiAgKlxuQEAgLTM0NjksNyArMzQ2OSw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmdfa2lsbGFibGUpO1xuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBmaW5kIHRoZSBuYW1lXG4gICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgcmVtb3ZlZFxuICAqXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmdcbisgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xuICAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LiAgUGVybWlzc2lvbiBjaGVja2luZyAoTUFZX0VYRUMpIGlzIHBlcmZvcm1lZFxuICAqIGFnYWluc3QgQGlkbWFwLlxuICAqXG5AQCAtMzQ5OSw3ICszNDk5LDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZ19raWxsYWJsZSk7XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIHByZXBhcmUgdG8gY3JlYXRlIHRoZSBuYW1lXG4gICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgY3JlYXRlZFxuICAqXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcbisgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byBjcmVhdGluZ1xuICAqIGFuIG9iamVjdCBpbiBhIGRpcmVjdG9yeS5cbiAgKlxuICAqIElmIHRoZSBuYW1lIGFscmVhZHkgZXhpc3RzLCBhIHBvc2l0aXZlIGRlbnRyeSBpcyByZXR1cm5lZC5cbkBAIC0zNTIyLDcgKzM1MjIsNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX25vcGVybSk7XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIGZpbmQgdGhlIG5hbWVcbiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSByZW1vdmVkXG4gICpcbi0gKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGluIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xuKyAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaXMgcGVyZm9ybWVkIHByaW9yIHRvIHJlbW92aW5nXG4gICogYW4gb2JqZWN0IGZyb20gYSBkaXJlY3RvcnkuXG4gICpcbiAgKiBJZiB0aGUgbmFtZSBkb2Vzbid0IGV4aXN0LCBhbiBlcnJvciBpcyByZXR1cm5lZC5cbkBAIC0zNTQzLDExICszNTQzLDExIEBAIHN0cnVjdCBkZW50cnkgKnN0YXJ0X3JlbW92aW5nX25vcGVybShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4gRVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZ19ub3Blcm0pO1xuIFxuIC8qKlxuLSAqIHN0YXJ0X2NyZWF0aW5nX2RlbnRyeSAtIHByZXBhcmUgdG8gY3JlYXRlIGEgZ2l2ZW4gZGVudHJ5XG4tICogQHBhcmVudDogZGlyZWN0b3J5IGZyb20gd2hpY2ggZGVudHJ5IHNob3VsZCBiZSByZW1vdmVkXG4tICogQGNoaWxkOiAgdGhlIGRlbnRyeSB0byBiZSByZW1vdmVkXG4rICogc3RhcnRfY3JlYXRpbmdfZGVudHJ5IC0gcHJlcGFyZSB0byBhY2Nlc3Mgb3IgY3JlYXRlIGEgZ2l2ZW4gZGVudHJ5XG4rICogQHBhcmVudDogZGlyZWN0b3J5IG9mIGRlbnRyeVxuKyAqIEBjaGlsZDogIHRoZSBkZW50cnkgdG8gYmUgcHJlcGFyZWRcbiAgKlxuLSAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW4gb3RoZXIgZGlyb3BzIGFuZFxuKyAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW5zdCBvdGhlciBkaXJvcHMgYW5kXG4gICogdGhlIHZhbGlkaXR5IG9mIHRoZSBkZW50cnkgaXMgY2hlY2tlZDogY29ycmVjdCBwYXJlbnQgYW5kIHN0aWxsIGhhc2hlZC5cbiAgKlxuICAqIElmIHRoZSBkZW50cnkgaXMgdmFsaWQgYW5kIG5lZ2F0aXZlIGEgcmVmZXJlbmNlIGlzIHRha2VuIGFuZFxuQEAgLTM1ODAsNyArMzU4MCw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmdfZGVudHJ5KTtcbiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgZnJvbSB3aGljaCBkZW50cnkgc2hvdWxkIGJlIHJlbW92ZWRcbiAgKiBAY2hpbGQ6ICB0aGUgZGVudHJ5IHRvIGJlIHJlbW92ZWRcbiAgKlxuLSAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW4gb3RoZXIgZGlyb3BzIGFuZFxuKyAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW5zdCBvdGhlciBkaXJvcHMgYW5kXG4gICogdGhlIHZhbGlkaXR5IG9mIHRoZSBkZW50cnkgaXMgY2hlY2tlZDogY29ycmVjdCBwYXJlbnQgYW5kIHN0aWxsIGhhc2hlZC5cbiAgKlxuICAqIElmIHRoZSBkZW50cnkgaXMgdmFsaWQgYW5kIHBvc2l0aXZlLCBhIHJlZmVyZW5jZSBpcyB0YWtlbiBhbmRcbkBAIC00NDQwLDEyICs0NDQwLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvcjtcbiBcdHVtb2RlX3QgbW9kZTtcbiBcdGJvb2wgZ290X3dyaXRlO1xuK1x0dW5zaWduZWQgaW50IHNoYXJlZF9mbGFnO1xuIFxuIHJldHJ5OlxuIFx0b3Blbl9mbGFnID0gb3AtXHUwMDNlb3Blbl9mbGFnO1xuIFx0Z290X3dyaXRlID0gZmFsc2U7XG4gXHRtb2RlID0gb3AtXHUwMDNlbW9kZTtcbiBcdGNyZWF0ZV9lcnJvciA9IDA7XG4rXHRzaGFyZWRfZmxhZyA9IChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpID8gMCA6IExPT0tVUF9TSEFSRUQ7XG4gXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiAoT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSB8IE9fUkRXUikpIHtcbiBcdFx0Z290X3dyaXRlID0gIW1udF93YW50X3dyaXRlKG5kLVx1MDAzZXBhdGgubW50KTtcbkBAIC00NDU0LDEwICs0NDU2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdCAqIGEgZGlmZmVyZW50IGVycm9yOyB3ZSdsbCBiZSBkcm9wcGluZyB0aGlzIG9uZSBhbnl3YXkuXG4gXHRcdCAqL1xuIFx0fVxuLVx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVClcbi1cdFx0aW5vZGVfbG9jayhkaXJfaW5vZGUpO1xuLVx0ZWxzZVxuK1x0aWYgKHNoYXJlZF9mbGFnKVxuIFx0XHRpbm9kZV9sb2NrX3NoYXJlZChkaXJfaW5vZGUpO1xuK1x0ZWxzZVxuK1x0XHRpbm9kZV9sb2NrKGRpcl9pbm9kZSk7XG4gXG4gXHRpZiAodW5saWtlbHkoSVNfREVBRERJUihkaXJfaW5vZGUpKSkge1xuIFx0XHRkZW50cnkgPSBFUlJfUFRSKC1FTk9FTlQpO1xuQEAgLTQ1MjYsNyArNDUyOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSBkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2Vsb29rdXAoZGlyX2lub2RlLCBkZW50cnksXG4tXHRcdFx0XHRcdFx0XHQgICAgIG5kLVx1MDAzZWZsYWdzKTtcbitcdFx0XHRcdFx0XHRcdCAgICAgbmQtXHUwMDNlZmxhZ3MgfCBzaGFyZWRfZmxhZyk7XG4gXHRcdGRfbG9va3VwX2RvbmUoZGVudHJ5KTtcbiBcdFx0aWYgKHVubGlrZWx5KHJlcykpIHtcbiBcdFx0XHRpZiAoSVNfRVJSKHJlcykpIHtcbkBAIC00NTc0LDEwICs0NTc2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuIFx0XHRcdGZzbm90aWZ5X29wZW4oZmlsZSk7XG4gXHR9XG4tXHRpZiAoKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkgfHwgY3JlYXRlX2Vycm9yKVxuLVx0XHRpbm9kZV91bmxvY2soZGlyX2lub2RlKTtcbi1cdGVsc2VcbitcdGlmIChzaGFyZWRfZmxhZylcbiBcdFx0aW5vZGVfdW5sb2NrX3NoYXJlZChkaXJfaW5vZGUpO1xuK1x0ZWxzZVxuK1x0XHRpbm9kZV91bmxvY2soZGlyX2lub2RlKTtcbiBcbiBcdGlmIChnb3Rfd3JpdGUpXG4gXHRcdG1udF9kcm9wX3dyaXRlKG5kLVx1MDAzZXBhdGgubW50KTtcbmRpZmYgLS1naXQgYS9mcy9uZnMvdW5saW5rLmMgYi9mcy9uZnMvdW5saW5rLmNcbmluZGV4IGI1N2NmYWE0ZDUxNmYuLmM4ZDcxMjIwNGU2NDkgMTAwNjQ0XG4tLS0gYS9mcy9uZnMvdW5saW5rLmNcbisrKyBiL2ZzL25mcy91bmxpbmsuY1xuQEAgLTY3LDYgKzY3LDcgQEAgc3RhdGljIHZvaWQgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlKHZvaWQgKmNhbGxkYXRhKVxuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS1cdTAwM2VkX3NiO1xuIFxuIFx0dXBfcmVhZF9ub25fb3duZXIoXHUwMDI2TkZTX0koZF9pbm9kZShkZW50cnktXHUwMDNlZF9wYXJlbnQpKS1cdTAwM2VybWRpcl9zZW0pO1xuK1x0ZF9sb29rdXBfYWNxdWlyZShkZW50cnkpO1xuIFx0ZF9sb29rdXBfZG9uZShkZW50cnkpO1xuIFx0bmZzX2ZyZWVfdW5saW5rZGF0YShkYXRhKTtcbiBcdGRwdXQoZGVudHJ5KTtcbkBAIC0xNTksNiArMTYwLDggQEAgc3RhdGljIGludCBuZnNfY2FsbF91bmxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcdGRhdGEtXHUwMDNlZGVudHJ5ID0gYWxpYXM7XG4rXHRkX2xvb2t1cF9yZWxlYXNlKGFsaWFzKTtcbitcbiBcdG5mc19kb19jYWxsX3VubGluayhpbm9kZSwgZGF0YSk7XG4gXHRyZXR1cm4gMTtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmhcbmluZGV4IDRiMWZmOTk2MDhlMDEuLmU3ZTNlZjA1MzEzYjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oXG5AQCAtMTE2LDYgKzExNiw4IEBAIHN0cnVjdCBkZW50cnkge1xuIFx0XHRcdFx0XHQgKiBwb3NzaWJsZSFcbiBcdFx0XHRcdFx0ICovXG4gXG4rXHQvKiBsb2NrZGVwIHRyYWNraW5nIG9mIERDQUNIRV9QQVJfTE9PS1VQIGxvY2tzICovXG4rXHRzdHJ1Y3QgbG9ja2RlcF9tYXBcdFx0bG9va3VwX21hcDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZF9scnU7XHRcdC8qIExSVSBsaXN0ICovXG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBkX3NpYjtcdC8qIGNoaWxkIG9mIHBhcmVudCBsaXN0ICovXG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZCBkX2NoaWxkcmVuO1x0Lyogb3VyIGNoaWxkcmVuICovXG5AQCAtMjU3LDcgKzI1OSw5IEBAIGV4dGVybiB2b2lkIGRfZGVsZXRlKHN0cnVjdCBkZW50cnkgKik7XG4gZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7XG4gZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jX2Fub24oc3RydWN0IHN1cGVyX2Jsb2NrICopO1xuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IHN0cnVjdCBxc3RyICopO1xuK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY190cnlsb2NrKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7XG4gZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX3NwbGljZV9hbGlhcyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTtcbitzdHJ1Y3QgZGVudHJ5ICpkX2R1cGxpY2F0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIC8qIHdlaXJkIHByb2NmcyBtZXNzOyAqTk9UKiBleHBvcnRlZCAqL1xuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9zcGxpY2VfYWxpYXNfb3BzKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICopO1xuQEAgLTU1Miw2ICs1NTYsMzYgQEAgc3RhdGljIGlubGluZSBpbnQgc2ltcGxlX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiB1bnNpZ25lZCBsb25nIHZmc19wcmVzc3VyZV9yYXRpbyh1bnNpZ25lZCBsb25nIHZhbCk7XG4gXG4rLyoqXG4rICogZF9sb29rdXBfcmVsZWFzZSAtIHJlbGVhc2Ugb3duZXJzaGlwIG9mIERDQUNIRV9QQVJfTE9PS1VQIGxvY2tcbisgKiBAZGVudHJ5OiBkZW50cnkgdGhhdCBpcyBsb2NrZWRcbisgKlxuKyAqIElmIGFuIGluLWxvb2t1cCBkZW50cnkgaXMgdG8gYmUgcGFzc2VkIHRvIGFub3RoZXIgdGhyZWFkIHdoaWNoXG4rICogd2lsbCBkcm9wIHRoZSBpbi1sb29rdXAgbG9jaywgdGhlbiBkX2xvb2t1cF9yZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWRcbisgKiB0byB0ZWxsIGxvY2tkZXAgdGhhdCB0aGlzIHRocmVhZCBubyBsb2NrIGhvbGRzIHRoZSBsb2NrLiAgVGhlXG4rICogdGhyZWFkIHRoYXQgcmVjZWl2ZXMgdGhlIGxvY2sgbXVzdCBjYWxsIGRfbG9va3VwX2FjcXVpcmUoKSB0b1xuKyAqIGFjcXVpcmUgdGhlIGxvY2suXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGRfbG9va3VwX3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKVxuK1x0XHRsb2NrX21hcF9yZWxlYXNlKFx1MDAyNmRlbnRyeS1cdTAwM2Vsb29rdXBfbWFwKTtcbit9XG4rXG4rLyoqXG4rICogZF9sb29rdXBfYWNxdWlyZSAtIGFjcXVpcmUgb3duZXJzaGlwIG9mIERDQUNIRV9QQVJfTE9PS1VQIGxvY2tcbisgKiBAZGVudHJ5OiBkZW50cnkgdGhhdCBpcyBsb2NrZWRcbisgKlxuKyAqIElmIGFuIGluLWxvb2t1cCBkZW50cnkgd2FzIHBhc3NlZCB0byB0aGlzIHRocmVhZCwgdGhlXG4rICogZF9sb29rdXBfYWNxdWlyZSgpIG11c3QgYmUgY2FsbGVkIHRvIHRlbGwgbG9ja2RlcCB0aGF0IHRoaXNcbisgKiB0aHJlYWQgbm93IG93bnMgdGhlIERDQUNIRV9QQVJfTE9PS1VQIGxvY2suXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGRfbG9va3VwX2FjcXVpcmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKVxuK1x0XHRsb2NrX21hcF9hY3F1aXJlX3RyeShcdTAwMjZkZW50cnktXHUwMDNlbG9va3VwX21hcCk7XG4rfVxuK1xuIC8qKlxuICAqIGRfaW5vZGUgLSBHZXQgdGhlIGFjdHVhbCBpbm9kZSBvZiB0aGlzIGRlbnRyeVxuICAqIEBkZW50cnk6IFRoZSBkZW50cnkgdG8gcXVlcnlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25hbWVpLmggYi9pbmNsdWRlL2xpbnV4L25hbWVpLmhcbmluZGV4IDg2ZDY1N2IyNGZjNmEuLjY1ZjBmNTcxMjg4NWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25hbWVpLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmFtZWkuaFxuQEAgLTMyLDggKzMyLDkgQEAgZW51bSB7IE1BWF9ORVNURURfTElOS1MgPSA4IH07XG4gI2RlZmluZSBMT09LVVBfQ1JFQVRFXHRcdEJJVCgxNylcdC8qIC4uLiBpbiBvYmplY3QgY3JlYXRpb24gKi9cbiAjZGVmaW5lIExPT0tVUF9FWENMXHRcdEJJVCgxOClcdC8qIC4uLiBpbiB0YXJnZXQgbXVzdCBub3QgZXhpc3QgKi9cbiAjZGVmaW5lIExPT0tVUF9SRU5BTUVfVEFSR0VUXHRCSVQoMTkpXHQvKiAuLi4gaW4gZGVzdGluYXRpb24gb2YgcmVuYW1lKCkgKi9cbisjZGVmaW5lIExPT0tVUF9TSEFSRURcdFx0QklUKDIwKSAvKiBQYXJlbnQgbG9jayBpcyBoZWxkIHNoYXJlZCAqL1xuIFxuLS8qIDQgc3BhcmUgYml0cyBmb3IgaW50ZW50ICovXG4rLyogMyBzcGFyZSBiaXRzIGZvciBpbnRlbnQgKi9cbiBcbiAvKiBTY29waW5nIGZsYWdzIGZvciBsb29rdXAuICovXG4gI2RlZmluZSBMT09LVVBfTk9fU1lNTElOS1NcdEJJVCgyNCkgLyogTm8gc3ltbGluayBjcm9zc2luZy4gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjE2OjI5LjkwMDkyMjU5NloiLCJTZXEiOjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3MDkxMDc5MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lIGlmIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHdhcnJhbnRlZC4gTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCBlc3BlY2lhbGx5IHRvIHVzZXJzcGFjZSwgYmVjYXVzZSBmcmFua2x5LCBLTVNBTiBzZXNzaW9ucyBhcmUgcmVzb3VyY2UgaG9ncyBhbmQgSSdkIHByZWZlciB0byBhdm9pZCB0aGVtIGlmIHBvc3NpYmxlLiBUaGUgcnVsZSBpcyBzaW1wbGU6IGlmIEtBU0FOLCBMT0NLREVQLCBvciBhbnkgb3RoZXIgc3RhbmRhcmQgZGV0ZWN0b3IgY2FuIGNhdGNoIHRoZSBidWcsIHdlICpkb24ndCogbmVlZCBLTVNBTi4gV2Ugb25seSBpbnZva2UgdGhlIGJpZyBndW5zIHdoZW4gS01TQU4gaXMgdGhlIG9ubHkgdG9vbCB0aGF0IGNhbiBkbyB0aGUgam9iLlxuXG5TbywgbGV0J3MgcnVuIHRocm91Z2ggdGhlIGNoYW5nZXMgb25lIGJ5IG9uZTpcblxuMS4gICoqRG9jdW1lbnRhdGlvbiBVcGRhdGVzOioqIFR5cG8gZml4ZXMgaW4gYHBvcnRpbmcucnN0YCBhbmQgYHZmcy5yc3RgIC0gbm8gY29uY2VybnMgaGVyZS4gU3RyYWlnaHRmb3J3YXJkIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgbm8gY29kZSBjaGFuZ2VzLiBTYWZlLlxuMi4gICoqYGZzL2RjYWNoZS5jYCBNb2RpZmljYXRpb25zOioqIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gV2UndmUgZ290IGEgbG90IG9mIGNoYW5nZXMgaW4gYGZzL2RjYWNoZS5jYDpcblxuICAgICogICBJbnRyb2R1Y3Rpb24gb2YgYGxvb2t1cF9tYXBgIGFuZCBpdHMgaW5pdGlhbGl6YXRpb24gd2l0aGluIGBfX2RfYWxsb2NgLiBUaGUgYGxvb2t1cF9tYXBgIGlzIGluaXRpYWxpemVkIHdpdGggYGxvY2tkZXBfaW5pdF9tYXBgLCB3aGljaCBzaG91bGQgc2V0IHRoZSBpbml0aWFsIHN0YXRlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBgX19kX2FsbG9jYCBpbml0aWFsaXplcyBldmVyeXRoaW5nLCB0aGUgYGxvb2t1cF9tYXBgIHNob3VsZCBhbHNvIGJlIGluaXRpYWxpemVkLCBhbmQgdGhpcyBkb2VzIG5vdCB3YXJyYW50IEtNU0FOIGZ1enppbmcuIEJ1dCBJIHNob3VsZCBjaGVjayBgX19kX2FsbG9jYCB0byB2ZXJpZnkgdGhhdCBga21lbV9jYWNoZV9hbGxvY19scnVgIGNvcnJlY3RseSBpbml0aWFsaXplcyB0aGUgZmllbGRzLlxuICAgICogICBBIG5ldyBgZF9kdXBsaWNhdGUoKWAgaGVscGVyLCBzb21lIGxvY2tkZXAgYW5ub3RhdGlvbnMsIGFuZCBhIGBkX2FsbG9jX3RyeWxvY2soKWAgZnVuY3Rpb24uIFRoZXNlIHNlZW0gZm9jdXNlZCBvbiBjb25jdXJyZW5jeSBhbmQgbG9ja2luZywgYnV0IGRvbid0IGltbWVkaWF0ZWx5IHNjcmVhbSBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5LlwiXG4gICAgKiAgIENoYW5nZXMgdG8gYF9fZF9sb29rdXBfdW5oYXNoYCwgYF9fZF9hZGRgLCBhbmQgYGRfc3BsaWNlX2FsaWFzX29wc2AuIFRoZXNlIGFwcGVhciB0byBiZSByZWZhY3RvcmluZ3MgYW5kIGltcHJvdmVtZW50cyBhcm91bmQgZGVudHJ5IG1hbmFnZW1lbnQsIHdpdGggc29tZSBsb2NrZGVwLXJlbGF0ZWQgY2hhbmdlcy4gQWdhaW4sIHRoZXNlIGFyZW4ndCBkaXJlY3RseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cbjMuICAqKmBmcy9uYW1laS5jYCBVcGRhdGVzOioqIFByaW1hcmlseSBsb2NrL3VubG9jayBjaGFuZ2VzIHdpdGggYSBiaXQgb2YgcmVmYWN0b3JpbmcgZm9yIGJldHRlciBgTE9PS1VQX1NIQVJFRGAgdXNhZ2UuIE5vIHJlZCBmbGFncyBoZXJlIGVpdGhlci5cbjQuICAqKmBmcy9uZnMvdW5saW5rLmNgIFR3ZWFrczoqKiBTb21lIGxvY2tpbmctcmVsYXRlZCBjaGFuZ2VzIHdpdGggYGRfbG9va3VwX2FjcXVpcmVgIGFuZCBgZF9sb29rdXBfcmVsZWFzZWAuIFRoaXMgaXMgbGlrZWx5IGNvcnJlY3QtbmVzcyByZWxhdGVkIGFuZCBJJ20gbm90IHNlZWluZyBhbnkgbmV3IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3MuXG41LiAgKipIZWFkZXIgZmlsZSBhZGRpdGlvbnM6KiogQWRkaW5nIGBsb29rdXBfbWFwYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgaW4gYGluY2x1ZGUvbGludXgvZGNhY2hlLmhgIGFuZCBgaW5jbHVkZS9saW51eC9uYW1laS5oYC4gVGhlc2UgYXJlIGp1c3QgZGVjbGFyYXRpb25zIGFuZCBkZWZpbml0aW9ucyBhbmQsIGJ5IHRoZW1zZWx2ZXMsIGRvbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzLlxuXG5Ob3csIGxldCdzIHJldHVybiB0byB0aGUgYGxvb2t1cF9tYXBgIGluaXRpYWxpemF0aW9uIGluIGBfX2RfYWxsb2NgLiBTaW5jZSB0aGUgc3RydWN0dXJlIGhhcyBiZWVuIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX2FsbG9jX2xydWAsIHRoaXMgc2hvdWxkIGluaXRpYWxpemUgdGhlIHN0cnVjdHVyZS4gQnV0IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYF9fZF9hbGxvY2AgdG8gYmUgMTAwJSBzdXJlLiBCYXNlZCBvbiBhbiBpbml0aWFsIHJldmlldyBvZiB0aGlzIHBhdGNoLCBJIHRoaW5rIHRoZSBjaGFuZ2VzIGFyZSBnZW5lcmFsbHkgc2FmZSBhbmQgZG9uJ3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgb2J2aW91cyBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhhdCB3b3VsZCAqcmVxdWlyZSogS01TQU4gZnV6emluZy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgX19kX2FsbG9jYCB0cnVseSBpbml0aWFsaXplcyBhbGwgbWVtYmVycywgaW5jbHVkaW5nIGBsb29rdXBfbWFwYC4gSWYgdGhhdCBwYW5zIG91dCwgdGhlbiBJIHdpbGwgY29uc2lkZXIgdGhpcyBwYXRjaCBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI5NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjE3OjA2Ljk5MjAwNTE2NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwODQ3ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fY2FjaGVfYWxsb2MuKmRlbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kY2FjaGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kY2FjaGUuYz0xOTAyPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuLS1cXG5mcy9kY2FjaGUuYy0xOTA4LVxcbmZzL2RjYWNoZS5jOjE5MDk6XFx0ZGVudHJ5ID0ga21lbV9jYWNoZV9hbGxvY19scnUoZGVudHJ5X2NhY2hlLCBcXHUwMDI2c2ItXFx1MDAzZXNfZGVudHJ5X2xydSxcXG5mcy9kY2FjaGUuYy0xOTEwLVxcdFxcdFxcdFxcdCAgICAgIEdGUF9LRVJORUwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxNzowNy4zNjI4NjExNTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg1NDM0MTM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYF9fZF9hbGxvY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byB6b29tIGluIG9uIHRoZSBgX19kX2FsbG9jYCBmdW5jdGlvbi4gSSdtIHRoaW5raW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMTkwMC0xOTcwLiBUaGlzIGFyZWEgc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgZm9yIHRoZSBpc3N1ZSBJJ20gaW52ZXN0aWdhdGluZy4gSSdsbCB1c2UgdGhlIFwicmVhZC1maWxlXCIgdG9vbCBvciBmdW5jdGlvbiB0byBxdWlja2x5IHB1bGwgdXAgdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlIGFuZCBnZXQgYSBkaXJlY3QgbG9vay4gSSBjYW4gdGhlbiBjYXJlZnVsbHkgZXhhbWluZSB0aGUgbG9naWMsIHZhcmlhYmxlIHVzYWdlLCBhbmQgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmNlcm5zIHdpdGhpbiB0aGF0IHNwZWNpZmljIHJhbmdlLiBGb2N1c2luZyBvbiBhIGRlZmluZWQgc2VjdGlvbiBoZWxwcyBzdHJlYW1saW5lIHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE1NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjE3OjEwLjIxNzIwNDkwOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZGNhY2hlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkwMDpcXHQgKi9cXG4xOTAxOlxcdCBcXG4xOTAyOlxcdHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuMTkwMzpcXHR7XFxuMTkwNDpcXHRcXHRzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fbG9va3VwX2tleTtcXG4xOTA1OlxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcXG4xOTA2OlxcdFxcdGNoYXIgKmRuYW1lO1xcbjE5MDc6XFx0XFx0aW50IGVycjtcXG4xOTA4OlxcdFxcbjE5MDk6XFx0XFx0ZGVudHJ5ID0ga21lbV9jYWNoZV9hbGxvY19scnUoZGVudHJ5X2NhY2hlLCBcXHUwMDI2c2ItXFx1MDAzZXNfZGVudHJ5X2xydSxcXG4xOTEwOlxcdFxcdFxcdFxcdFxcdCAgICAgIEdGUF9LRVJORUwpO1xcbjE5MTE6XFx0XFx0aWYgKCFkZW50cnkpXFxuMTkxMjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xOTEzOlxcdFxcbjE5MTQ6XFx0XFx0LypcXG4xOTE1OlxcdFxcdCAqIFdlIGd1YXJhbnRlZSB0aGF0IHRoZSBpbmxpbmUgbmFtZSBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuXFxuMTkxNjpcXHRcXHQgKiBUaGlzIHdheSB0aGUgbWVtY3B5KCkgZG9uZSBieSB0aGUgbmFtZSBzd2l0Y2hpbmcgaW4gcmVuYW1lXFxuMTkxNzpcXHRcXHQgKiB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsIGV2ZW4gaWYgd2UgbWlnaHRcXG4xOTE4OlxcdFxcdCAqIGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXJcXG4xOTE5OlxcdFxcdCAqL1xcbjE5MjA6XFx0XFx0ZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7XFxuMTkyMTpcXHRcXHRpZiAodW5saWtlbHkoIW5hbWUpKSB7XFxuMTkyMjpcXHRcXHRcXHRuYW1lID0gXFx1MDAyNnNsYXNoX25hbWU7XFxuMTkyMzpcXHRcXHRcXHRkbmFtZSA9IGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xcbjE5MjQ6XFx0XFx0fSBlbHNlIGlmIChuYW1lLVxcdTAwM2VsZW4gXFx1MDAzZSBETkFNRV9JTkxJTkVfTEVOLTEpIHtcXG4xOTI1OlxcdFxcdFxcdHN0cnVjdCBleHRlcm5hbF9uYW1lICpwO1xcbjE5MjY6XFx0XFxuMTkyNzpcXHRcXHRcXHRwID0ga21hbGxvY19mbGV4KCpwLCBuYW1lLCBuYW1lLVxcdTAwM2VsZW4gKyAxLFxcbjE5Mjg6XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1JFQ0xBSU1BQkxFKTtcXG4xOTI5OlxcdFxcdFxcdGlmICghcCkge1xcbjE5MzA6XFx0XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKGRlbnRyeV9jYWNoZSwgZGVudHJ5KTsgXFxuMTkzMTpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xOTMyOlxcdFxcdFxcdH1cXG4xOTMzOlxcdFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnAtXFx1MDAzZWNvdW50LCAxKTtcXG4xOTM0OlxcdFxcdFxcdGRuYW1lID0gcC1cXHUwMDNlbmFtZTtcXG4xOTM1OlxcdFxcdH0gZWxzZSAge1xcbjE5MzY6XFx0XFx0XFx0ZG5hbWUgPSBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcXG4xOTM3OlxcdFxcdH1cXHRcXG4xOTM4OlxcdFxcbjE5Mzk6XFx0XFx0ZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5sZW4gPSBuYW1lLVxcdTAwM2VsZW47XFxuMTk0MDpcXHRcXHRkZW50cnktXFx1MDAzZV9fZF9uYW1lLmhhc2ggPSBuYW1lLVxcdTAwM2VoYXNoO1xcbjE5NDE6XFx0XFx0bWVtY3B5KGRuYW1lLCBuYW1lLVxcdTAwM2VuYW1lLCBuYW1lLVxcdTAwM2VsZW4pO1xcbjE5NDI6XFx0XFx0ZG5hbWVbbmFtZS1cXHUwMDNlbGVuXSA9IDA7XFxuMTk0MzpcXHRcXG4xOTQ0OlxcdFxcdC8qIE1ha2Ugc3VyZSB3ZSBhbHdheXMgc2VlIHRoZSB0ZXJtaW5hdGluZyBOVUwgY2hhcmFjdGVyICovXFxuMTk0NTpcXHRcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2ZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5uYW1lLCBkbmFtZSk7IC8qIF5eXiAqL1xcbjE5NDY6XFx0XFxuMTk0NzpcXHRcXHRkZW50cnktXFx1MDAzZWRfZmxhZ3MgPSAwO1xcbjE5NDg6XFx0XFx0bG9ja3JlZl9pbml0KFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbG9ja3JlZik7XFxuMTk0OTpcXHRcXHRzZXFjb3VudF9zcGlubG9ja19pbml0KFxcdTAwMjZkZW50cnktXFx1MDAzZWRfc2VxLCBcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX2xvY2spO1xcbjE5NTA6XFx0XFx0ZGVudHJ5LVxcdTAwM2VkX2lub2RlID0gTlVMTDtcXG4xOTUxOlxcdFxcdGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQgPSBkZW50cnk7XFxuMTk1MjpcXHRcXHRkZW50cnktXFx1MDAzZWRfc2IgPSBzYjtcXG4xOTUzOlxcdFxcdGRlbnRyeS1cXHUwMDNlZF9vcCA9IHNiLVxcdTAwM2VfX3NfZF9vcDtcXG4xOTU0OlxcdFxcdGRlbnRyeS1cXHUwMDNlZF9mbGFncyA9IHNiLVxcdTAwM2VzX2RfZmxhZ3M7XFxuMTk1NTpcXHRcXHRkZW50cnktXFx1MDAzZWRfZnNkYXRhID0gTlVMTDtcXG4xOTU2OlxcdFxcdElOSVRfSExJU1RfQkxfTk9ERShcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX2hhc2gpO1xcbjE5NTc6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9scnUpO1xcbjE5NTg6XFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfY2hpbGRyZW4pO1xcbjE5NTk6XFx0XFx0ZGVudHJ5LVxcdTAwM2V3YWl0ZXJzID0gTlVMTDtcXG4xOTYwOlxcdFxcdElOSVRfSExJU1RfTk9ERShcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX3NpYik7XFxuMTk2MTpcXHRcXG4xOTYyOlxcdFxcdGxvY2tkZXBfaW5pdF9tYXAoXFx1MDAyNmRlbnRyeS1cXHUwMDNlbG9va3VwX21hcCwgXFxcIkRDQUNIRV9QQVJfTE9PS1VQXFxcIiwgXFx1MDAyNl9fbG9va3VwX2tleSwgMCk7XFxuMTk2MzpcXHRcXG4xOTY0OlxcdFxcdGlmIChkZW50cnktXFx1MDAzZWRfb3AgXFx1MDAyNlxcdTAwMjYgZGVudHJ5LVxcdTAwM2VkX29wLVxcdTAwM2VkX2luaXQpIHtcXG4xOTY1OlxcdFxcdFxcdGVyciA9IGRlbnRyeS1cXHUwMDNlZF9vcC1cXHUwMDNlZF9pbml0KGRlbnRyeSk7XFxuMTk2NjpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMTk2NzpcXHRcXHRcXHRcXHRpZiAoZG5hbWVfZXh0ZXJuYWwoZGVudHJ5KSlcXG4xOTY4OlxcdFxcdFxcdFxcdFxcdGtmcmVlKGV4dGVybmFsX25hbWUoZGVudHJ5KSk7XFxuMTk2OTpcXHRcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50cnkpO1xcbjE5NzA6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTk3MTpcXHRcXHRcXHR9XFxuMTk3MjpcXHRcXHR9XFxuMTk3MzpcXHRcXG4xOTc0OlxcdFxcdHRoaXNfY3B1X2luYyhucl9kZW50cnkpO1xcbjE5NzU6XFx0XFxuMTk3NjpcXHRcXHRyZXR1cm4gZGVudHJ5O1xcbjE5Nzc6XFx0fVxcbjE5Nzg6XFx0XFxuMTk3OTpcXHQvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTc6MTAuMjE3NDYyNjA4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkxNjUxOTAzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogUGFyYWxsZWwgRGVudHJ5IExvb2t1cCBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcy4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBmbGFnIHRoaXMgcGF0Y2ggZm9yIEtNU0FOIHNjcnV0aW55LiBJIGtub3cgdGhlIGRyaWxsOiB3ZSBoYXZlIHRvIGJlICpyZWFsbHkqIHN1cmUgYWJvdXQgZGF0YSBsZWFrcyB0byB1c2Vyc3BhY2Ugb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZS4gTGV0J3MgcnVuIHRocm91Z2ggdGhhdCBjaGVja2xpc3Q6XG5cbiogICAqKkZpcnN0LCBhcmUgdGhlcmUgYW55IHVzZXItc3BhY2UgZXhwb3N1cmVzPyoqIE5vLiBUaGlzIHBhdGNoIHRvdWNoZXMgZG9jdW1lbnRhdGlvbiBhbmQgZmlsZSBzeXN0ZW0gaW50ZXJuYWxzOiBgZGNhY2hlLmNgLCBgbmFtZWkuY2AsIGBuZnMvdW5saW5rLmNgIGFuZCBhIGZldyBoZWFkZXJzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2UuIFdlJ3JlIGFkZGluZyBgbG9va3VwX21hcGAgdG8gYHN0cnVjdCBkZW50cnlgIGZvciBsb2NrZGVwIGFuZCBzb21lIGhlbHBlciBmdW5jdGlvbnMsIGJ1dCBub3QgZm9yIGRpcmVjdCBjb21tdW5pY2F0aW9uIHdpdGggdXNlci1zcGFjZS5cblxuKiAgICoqTmV4dCwgYXJlIHRoZXJlIGNvbmRpdGlvbmFscyBvciBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIERvZXNuJ3Qgc2VlbSBzby4gVGhlIHBhdGNoIGludHJvZHVjZXMgYERDQUNIRV9QQVJfTE9PS1VQYCB0byBhbGxvdyBwYXJhbGxlbCBsb29rdXBzLiBXZSdyZSBhZGRpbmcgbmV3IGFsbG9jYXRpb24gaGVscGVycyBmb3Igbm9uLWJsb2NraW5nIGxvb2t1cCAoYEFMTE9DX1BBUkFfRkFJTGAsIGBkX2FsbG9jX3RyeWxvY2tgKSBhbmQgYWRkaW5nIGEgYExPT0tVUF9TSEFSRURgIGZsYWcgZm9yIGxvY2tpbmcgdXBkYXRlcy4gQnV0IHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgY2hhbmdlcyB0aGF0IGhpbmdlcyBvbiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgdG8gZGV0ZXJtaW5lIHByb2dyYW0gZmxvdy5cblxuKiAgICoqSG93IGFib3V0IGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXM/KiogV2UncmUgaW50cm9kdWNpbmcgYSBuZXcgZmllbGQgYGxvb2t1cF9tYXBgIGluIGBzdHJ1Y3QgZGVudHJ5YCBhbmQgdXNpbmcgaXQgZm9yIGxvY2tkZXAgaW5zdHJ1bWVudGF0aW9uIGluIHBhcmFsbGVsIGxvb2t1cHMuIEkgc2VlIHNvbWUgbmV3IGRlbnRyeSBhbGxvY2F0aW9ucyBhbmQgcmVmYWN0b3Jpbmcgb2YgYF9fZF9hZGRgIHRvIGNhbGwgYF9fZF9pbnN0YW50aWF0ZWAgZm9yIHBhcmFsbGVsIGxvb2t1cHMuIEhvd2V2ZXIsIGNydWNpYWxseSwgdGhlIG5ldyBhbGxvY2F0aW9ucyB2aWEgYF9fZF9hbGxvY2AgZnVsbHkgaW5pdGlhbGl6ZSBldmVyeXRoaW5nLCBpbmNsdWRpbmcgYGxvY2tkZXBfaW5pdF9tYXAoXHUwMDI2ZGVudHJ5LVx1MDAzZWxvb2t1cF9tYXAsIC4uLilgLlxuXG4qICAgKipGaW5hbGx5LCBpcyB0aGVyZSBhIGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgdmlhIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIGV0Yy4/KiogTm8sIEkgZG9uJ3Qgc2VlIGFueSBjaGFuZ2VzIHRvIGJ1ZmZlciBzaXppbmcsIGJvdW5kcyBjaGVja3MsIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkJhc2VkIG9uIHRoaXMsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBwYXRjaCAqZG9lc24ndCogaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucy4gQWxsIG9mIHRoZSBuZXcgYWxsb2NhdGlvbnMgaW5pdGlhbGl6ZSB0aGVpciBmaWVsZHMgcHJvcGVybHkuIFRoaXMgaXMgbWFpbmx5IGFib3V0IGxvY2tpbmcsIHBhcmFsbGVsaXNtLCBhbmQgZGVudHJ5IG1hbmFnZW1lbnQuIEFueSBjb25jdXJyZW50IHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3VlcyB0aGF0IEkgY2FuIHNlZSBzaG91bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAsIEtBU0FOLCBvciBrZXJuZWwgYXNzZXJ0cyAoYEJVR19PTmApLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXM6IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSdyZSBnb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY1NCwiT3V0cHV0VG9rZW5zIjoxOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxNzoxOS4zODI2NTQ4MTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIExvY2tkZXAgdHJhY2tpbmcgZm9yIHBhcmFsbGVsIGRlbnRyeSBsb29rdXBzIChEQ0FDSEVfUEFSX0xPT0tVUCB2aWEgc3RydWN0IGxvY2tkZXBfbWFwIGluIHN0cnVjdCBkZW50cnkpLCBhZGRzIHRoZSBkX2R1cGxpY2F0ZSBhbmQgZF9hbGxvY190cnlsb2NrIGhlbHBlcnMsIHVwZGF0ZXMgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gVkZTIGxvb2t1cCByb3V0aW5lcyAobG9va3VwX3Nsb3csIGxvb2t1cF9vcGVuKSwgYW5kIGZpeGVzIGZpbGVzeXN0ZW0gZG9jdW1lbnRhdGlvbi5cXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgdHJhbnNmZXJzLiBBbGwgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmVzIChlLmcuLCBzdHJ1Y3QgZGVudHJ5IGluIF9fZF9hbGxvYykgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbi4gQW55IGNvbmN1cnJlbmN5LCBkZWFkbG9jaywgb3IgcmVmY291bnRpbmcgaXNzdWVzIHJlc3VsdGluZyBmcm9tIHRoZXNlIFZGUyBsb2NraW5nL2xvb2t1cCByZWZhY3RvcmluZ3MgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyBzdWNoIGFzIExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBMb2NrZGVwIHRyYWNraW5nIGZvciBwYXJhbGxlbCBkZW50cnkgbG9va3VwcyAoRENBQ0hFX1BBUl9MT09LVVAgdmlhIHN0cnVjdCBsb2NrZGVwX21hcCBpbiBzdHJ1Y3QgZGVudHJ5KSwgYWRkcyB0aGUgZF9kdXBsaWNhdGUgYW5kIGRfYWxsb2NfdHJ5bG9jayBoZWxwZXJzLCB1cGRhdGVzIGxvY2tpbmcgZmxhZ3MgKExPT0tVUF9TSEFSRUQpIGluIFZGUyBsb29rdXAgcm91dGluZXMgKGxvb2t1cF9zbG93LCBsb29rdXBfb3BlbiksIGFuZCBmaXhlcyBmaWxlc3lzdGVtIGRvY3VtZW50YXRpb24uXFxuXFxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgYm91bmRhcmllcywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIHRyYW5zZmVycy4gQWxsIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IGRlbnRyeSBpbiBfX2RfYWxsb2MpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24uIEFueSBjb25jdXJyZW5jeSwgZGVhZGxvY2ssIG9yIHJlZmNvdW50aW5nIGlzc3VlcyByZXN1bHRpbmcgZnJvbSB0aGVzZSBWRlMgbG9ja2luZy9sb29rdXAgcmVmYWN0b3JpbmdzIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjk4h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 04:14:23 +0000 UTC FinishedAt: 2026-09-04 04:17:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "89a312991dc6e638a36adc43ccb91dbc25504c04", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROVE_LOCKING", "NFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "89a312991dc6e638a36adc43ccb91dbc25504c04", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROVE_LOCKING", "NFS_FS" ], "series_id": "f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "d_duplicate", "d_alloc_parallel", "d_alloc_trylock", "d_splice_alias", "d_splice_alias_ops", "d_wait_lookup", "lookup_slow", "lookup_slow_killable", "lookup_open", "nfs_async_unlink_release", "nfs_call_unlink" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST1ZFX0xPQ0tJTkcmIzM0OywKICAgICYjMzQ7TkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZF9kdXBsaWNhdGUmIzM0OywKICAgICYjMzQ7ZF9hbGxvY19wYXJhbGxlbCYjMzQ7LAogICAgJiMzNDtkX2FsbG9jX3RyeWxvY2smIzM0OywKICAgICYjMzQ7ZF9zcGxpY2VfYWxpYXMmIzM0OywKICAgICYjMzQ7ZF9zcGxpY2VfYWxpYXNfb3BzJiMzNDssCiAgICAmIzM0O2Rfd2FpdF9sb29rdXAmIzM0OywKICAgICYjMzQ7bG9va3VwX3Nsb3cmIzM0OywKICAgICYjMzQ7bG9va3VwX3Nsb3dfa2lsbGFibGUmIzM0OywKICAgICYjMzQ7bG9va3VwX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2FzeW5jX3VubGlua19yZWxlYXNlJiMzNDssCiAgICAmIzM0O25mc19jYWxsX3VubGluayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIExvY2tkZXAgdHJhY2tpbmcgZm9yIHBhcmFsbGVsIGRlbnRyeSBsb29rdXBzIChEQ0FDSEVfUEFSX0xPT0tVUCB2aWEgc3RydWN0IGxvY2tkZXBfbWFwIGluIHN0cnVjdCBkZW50cnkpLCBhZGRzIHRoZSBkX2R1cGxpY2F0ZSBhbmQgZF9hbGxvY190cnlsb2NrIGhlbHBlcnMsIHVwZGF0ZXMgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gVkZTIGxvb2t1cCByb3V0aW5lcyAobG9va3VwX3Nsb3csIGxvb2t1cF9vcGVuKSwgYW5kIGZpeGVzIGZpbGVzeXN0ZW0gZG9jdW1lbnRhdGlvbi5cblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgYm91bmRhcmllcywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIHRyYW5zZmVycy4gQWxsIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IGRlbnRyeSBpbiBfX2RfYWxsb2MpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24uIEFueSBjb25jdXJyZW5jeSwgZGVhZGxvY2ssIG9yIHJlZmNvdW50aW5nIGlzc3VlcyByZXN1bHRpbmcgZnJvbSB0aGVzZSBWRlMgbG9ja2luZy9sb29rdXAgcmVmYWN0b3JpbmdzIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIFZGUyBkY2FjaGUgYW5kIG5hbWVpIGxvZ2ljLCBpbmNsdWRpbmcgcGFyYWxsZWwgbG9va3VwIGxvY2tpbmcsIHNoYXJlZCBkaXJlY3RvcnkgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gbG9va3VwX3Nsb3cgYW5kIGxvb2t1cF9vcGVuLCBsb2NrZGVwIG1hcCB0cmFja2luZyBmb3IgaW4tbG9va3VwIGRlbnRyaWVzLCB1cGRhdGVkIGFzc2VydGlvbnMgaW4gZF9zcGxpY2VfYWxpYXNfb3BzLCBuZXcgZGNhY2hlIGhlbHBlcnMgKGRfZHVwbGljYXRlLCBkX2FsbG9jX3RyeWxvY2spLCBhbmQgTkZTIGFzeW5jaHJvbm91cyB1bmxpbmsgbG9jayB0cmFja2luZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSByZWFjaGFibGUga2VybmVsIHN1YnN5c3RlbXMgYW5kIGRpcmVjdGx5IGFmZmVjdCBjb25jdXJyZW5jeSBhbmQgaW52YXJpYW50IGVuZm9yY2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDlhMTJlYzFlNWZlM2YzZTU3N2QzYjYxODM2ZDg2ZTY2OTk0MzBlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDQ6MTU6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcbmluZGV4IDYwODgwZWIwYzQ5ZDEuLjRlMDE1ZjFiZjFmODQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0XG5AQCAtMTIwMywxNiAmIzQzOzEyMDMsMTYgQEAgd2lsbCBmYWlsLXNhZmUuXG4gXG4gLS0tXG4gXG4tKiogbWFuZGF0b3J5KipcbiYjNDM7KiptYW5kYXRvcnkqKlxuIFxuIGxvb2t1cF9vbmUoKSwgbG9va3VwX29uZV91bmxvY2tlZCgpLCBsb29rdXBfb25lX3Bvc2l0aXZlX3VubG9ja2VkKCkgbm93XG4gdGFrZSBhIHFzdHIgaW5zdGVhZCBvZiBhIG5hbWUgYW5kIGxlbi4gIFRoZXNlLCBub3QgdGhlIFwmIzM0O29uZV9sZW5cJiMzNDtcbiB2ZXJzaW9ucywgc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgYWNjZXNzaW5nIGEgZmlsZXN5c3RlbSBmcm9tIG91dHNpZGVcbi10aGF0IGZpbGVzeXNtdGVtLCB0aHJvdWdoIGEgbW91bnQgcG9pbnQgLSB3aGljaCB3aWxsIGhhdmUgYSBtbnRfaWRtYXAuXG4mIzQzO3RoYXQgZmlsZXN5c3RlbSwgdGhyb3VnaCBhIG1vdW50IHBvaW50IC0gd2hpY2ggd2lsbCBoYXZlIGEgbW50X2lkbWFwLlxuIFxuIC0tLVxuIFxuLSoqIG1hbmRhdG9yeSoqXG4mIzQzOyoqbWFuZGF0b3J5KipcbiBcbiBGdW5jdGlvbnMgdHJ5X2xvb2t1cF9vbmVfbGVuKCksIGxvb2t1cF9vbmVfbGVuKCksXG4gbG9va3VwX29uZV9sZW5fdW5sb2NrZWQoKSBhbmQgbG9va3VwX3Bvc2l0aXZlX3VubG9ja2VkKCkgaGF2ZSBiZWVuXG5AQCAtMTIyOSw3ICYjNDM7MTIyOSw3IEBAIGFscmVhZHkgYmVlbiBwZXJmb3JtZWQgc3VjaCBhcyBhZnRlciB2ZnNfcGF0aF9wYXJlbnRfbG9va3VwKClcbiBcbiAtLS1cbiBcbi0qKiBtYW5kYXRvcnkqKlxuJiM0MzsqKm1hbmRhdG9yeSoqXG4gXG4gZF9oYXNoX2FuZF9sb29rdXAoKSBpcyBubyBsb25nZXIgZXhwb3J0ZWQgb3IgYXZhaWxhYmxlIG91dHNpZGUgdGhlIFZGUy5cbiBVc2UgdHJ5X2xvb2t1cF9ub3Blcm0oKSBpbnN0ZWFkLiAgVGhpcyBhZGRzIG5hbWUgdmFsaWRhdGlvbiBhbmQgdGFrZXNcbkBAIC0xMzcwLDcgJiM0MzsxMzcwLDcgQEAgc2ltaWxhci5cbiBcbiAtLS1cbiBcbi0qKiBtYW5kYXRvcnkqKlxuJiM0MzsqKm1hbmRhdG9yeSoqXG4gXG4gbG9ja19yZW5hbWUoKSwgbG9ja19yZW5hbWVfY2hpbGQoKSwgdW5sb2NrX3JlbmFtZSgpIGFyZSBub1xuIGxvbmdlciBhdmFpbGFibGUuICBVc2Ugc3RhcnRfcmVuYW1pbmcoKSBvciBzaW1pbGFyLlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuaW5kZXggZDNhOTNlZWMzOTQ1Zi4uZGU4Zjg1MDIwNTZlOCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG5AQCAtNTA3LDggJiM0Mzs1MDcsOCBAQCBvdGhlcndpc2Ugbm90ZWQuXG4gXHRkZW50cnkgYmVmb3JlIHRoZSBmaXJzdCBta2RpciByZXR1cm5zLlxuIFxuIFx0SWYgdGhlcmUgaXMgYW55IGNoYW5jZSB0aGlzIGNvdWxkIGhhcHBlbiwgdGhlbiB0aGUgbmV3IGlub2RlXG4tXHRzaG91bGQgYmUgZF9kcm9wKCllZCBhbmQgYXR0YWNoZWQgd2l0aCBkX3NwbGljZV9hbGlhcygpLiAgVGhlXG4tXHRyZXR1cm5lZCBkZW50cnkgKGlmIGFueSkgc2hvdWxkIGJlIHJldHVybmVkIGJ5IC1cdTAwM2Vta2RpcigpLlxuJiM0MztcdHNob3VsZCBiZSBhdHRhY2hlZCB3aXRoIGRfc3BsaWNlX2FsaWFzKCkuICBUaGUgcmV0dXJuZWRcbiYjNDM7XHRkZW50cnkgKGlmIGFueSkgc2hvdWxkIGJlIHJldHVybmVkIGJ5IC1cdTAwM2Vta2RpcigpLlxuIFxuIGBgcm1kaXJgYFxuIFx0Y2FsbGVkIGJ5IHRoZSBybWRpcigyKSBzeXN0ZW0gY2FsbC4gIE9ubHkgcmVxdWlyZWQgaWYgeW91IHdhbnRcbmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jXG5pbmRleCAxYjFhODFmMTBkYTY3Li4zYWY4YjJhYzY5OWY5IDEwMDY0NFxuLS0tIGEvZnMvZGNhY2hlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RjYWNoZS5jXG5AQCAtMzIsNiAmIzQzOzMyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRfc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3RfYmwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmFtZWkuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDttb3VudC5oXCYjMzQ7XG4gXG5AQCAtMTkwMCw2ICYjNDM7MTkwMSw3IEBAIEVYUE9SVF9TWU1CT0woZF9pbnZhbGlkYXRlKTtcbiAgXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbiB7XG4mIzQzO1x0c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2xvb2t1cF9rZXk7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4gXHRjaGFyICpkbmFtZTtcbiBcdGludCBlcnI7XG5AQCAtMTk1Nyw2ICYjNDM7MTk1OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4gXHRkZW50cnktXHUwMDNld2FpdGVycyA9IE5VTEw7XG4gXHRJTklUX0hMSVNUX05PREUoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfc2liKTtcbiBcbiYjNDM7XHRsb2NrZGVwX2luaXRfbWFwKFx1MDAyNmRlbnRyeS1cdTAwM2Vsb29rdXBfbWFwLCBcJiMzNDtEQ0FDSEVfUEFSX0xPT0tVUFwmIzM0OywgXHUwMDI2X19sb29rdXBfa2V5LCAwKTtcbiYjNDM7XG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfb3AgXHUwMDI2XHUwMDI2IGRlbnRyeS1cdTAwM2VkX29wLVx1MDAzZWRfaW5pdCkge1xuIFx0XHRlcnIgPSBkZW50cnktXHUwMDNlZF9vcC1cdTAwM2VkX2luaXQoZGVudHJ5KTtcbiBcdFx0aWYgKGVycikge1xuQEAgLTE5OTksNiAmIzQzOzIwMDMsNTggQEAgc3RydWN0IGRlbnRyeSAqZF9hbGxvYyhzdHJ1Y3QgZGVudHJ5ICogcGFyZW50LCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbiB9XG4gRVhQT1JUX1NZTUJPTChkX2FsbG9jKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGRfZHVwbGljYXRlIC0gZHVwbGljYXRlIGEgZGVudHJ5IGZvciBjb21iaW5lZCBhdG9taWMgb3BlcmF0aW9uXG4mIzQzOyAqIEBkZW50cnk6IHRoZSBkZW50cnkgdG8gZHVwbGljYXRlXG4mIzQzOyAqXG4mIzQzOyAqIFNvbWUgcmVuYW1lIG9wZXJhdGlvbnMgbmVlZCB0byBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgb3BlcmF0aW9uXG4mIzQzOyAqIGluc2lkZSB0aGUgZmlsZXN5c3RlbS5cbiYjNDM7ICogMS8gQSBjbHVzdGVyIGZpbGVzeXN0ZW0gd2hlbiByZW5hbWluZyB0byBhbiBpbi11c2UgZmlsZSBtaWdodCBuZWVkIHRvXG4mIzQzOyAqICAgZmlyc3QgXCYjMzQ7c2lsbHktcmVuYW1lXCYjMzQ7IHRoYXQgdGFyZ2V0IG91dCBvZiB0aGUgd2F5IGJlZm9yZSB0aGUgbWFpbiByZW5hbWVcbiYjNDM7ICogMi8gQSBmaWxlc3lzdGVtIHRoYXQgc3VwcG9ydHMgd2hpdGUtb3V0IG1pZ2h0IHdhbnQgdG8gY3JlYXRlIGEgd2hpdGVvdXRcbiYjNDM7ICogICBpbiBwbGFjZSBvZiB0aGUgZmlsZSBiZWluZyBtb3ZlZC5cbiYjNDM7ICpcbiYjNDM7ICogRm9yIHRoaXMgdGhleSBuZWVkIHR3byBkZW50cmllcyB3aGljaCB0ZW1wb3JhcmlseSBoYXZlIHRoZSBzYW1lIG5hbWUsXG4mIzQzOyAqIGJlZm9yZSBvbmUgaXMgcmVuYW1lZC4gIGRfZHVwbGljYXRlKCkgcHJvdmlkZXMgZm9yIHRoaXMuICBHaXZlbiBhXG4mIzQzOyAqIHBvc2l0aXZlIGhhc2hlZCBkZW50cnksIGl0IGNyZWF0ZXMgYSBzZWNvbmQgaW4tbG9va3VwIGRlbnRyeS5cbiYjNDM7ICogQmVjYXVzZSB0aGUgb3JpZ2luYWwgZGVudHJ5IGV4aXN0cywgbm8gb3RoZXIgdGhyZWFkIHdpbGwgdHJ5IHRvXG4mIzQzOyAqIGNyZWF0ZSBhbiBpbi1sb29rdXAgZGVudHJ5LCBzbyB0aGVyZSBjYW4gYmUgbm8gcmFjZSBpbiB0aGlzIGNyZWF0ZS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGNhbGxlciBzaG91bGQgZF9tb3ZlKCkgdGhlIG9yaWdpbmFsIHRvIGEgbmV3IG5hbWUsIG9mdGVuIHZpYSBhXG4mIzQzOyAqIHJlbmFtZSByZXF1ZXN0LCBhbmQgc2hvdWxkIGNhbGwgZF9sb29rdXBfZG9uZSgpIG9uIHRoZSBuZXdseSBjcmVhdGVkXG4mIzQzOyAqIGRlbnRyeS4gIElmIHRoZSBuZXcgaXMgaW5zdGFudGlhdGVkIHRoZW4gdGhlIG9sZCBNVVNUIGVpdGhlciBiZSBtb3ZlZFxuJiM0MzsgKiBvciBkcm9wcGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBQYXJlbnQgbXVzdCBiZSBsb2NrZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IGFuIGluLWxvb2t1cCBkZW50cnksIG9yIC1FTk9NRU0uXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgZGVudHJ5ICpkX2R1cGxpY2F0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaGFzaCA9IGRlbnRyeS1cdTAwM2VkX25hbWUuaGFzaDtcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQ7XG4mIzQzO1x0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmIgPSBpbl9sb29rdXBfaGFzaChwYXJlbnQsIGhhc2gpO1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKm5ldyA9IF9fZF9hbGxvYyhwYXJlbnQtXHUwMDNlZF9zYiwgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbmFtZSk7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghbmV3KSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcbiYjNDM7XHRuZXctXHUwMDNlZF9mbGFncyB8PSBEQ0FDSEVfUEFSX0xPT0tVUDtcbiYjNDM7XHRsb2NrX21hcF9hY3F1aXJlX3RyeShcdTAwMjZuZXctXHUwMDNlbG9va3VwX21hcCk7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNnBhcmVudC1cdTAwM2VkX2xvY2spO1xuJiM0MztcdG5ldy1cdTAwM2VkX3BhcmVudCA9IGRnZXRfZGxvY2socGFyZW50KTtcbiYjNDM7XHRobGlzdF9hZGRfaGVhZChcdTAwMjZuZXctXHUwMDNlZF9zaWIsIFx1MDAyNnBhcmVudC1cdTAwM2VkX2NoaWxkcmVuKTtcbiYjNDM7XHRpZiAocGFyZW50LVx1MDAzZWRfZmxhZ3MgXHUwMDI2IERDQUNIRV9ESVNDT05ORUNURUQpXG4mIzQzO1x0XHRuZXctXHUwMDNlZF9mbGFncyB8PSBEQ0FDSEVfRElTQ09OTkVDVEVEO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnBhcmVudC1cdTAwM2VkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRobGlzdF9ibF9sb2NrKGIpO1xuJiM0MztcdGhsaXN0X2JsX2FkZF9oZWFkKFx1MDAyNm5ldy1cdTAwM2VkX2luX2xvb2t1cF9oYXNoLCBiKTtcbiYjNDM7XHRobGlzdF9ibF91bmxvY2soYik7XG4mIzQzO1x0cmV0dXJuIG5ldztcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGRfZHVwbGljYXRlKTtcbiYjNDM7XG4gc3RydWN0IGRlbnRyeSAqZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuIFx0cmV0dXJuIF9fZF9hbGxvYyhzYiwgTlVMTCk7XG5AQCAtMjE2OCw3ICYjNDM7MjIyNCw2IEBAIHN0YXRpYyB2b2lkIF9fZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gICogKG9yIG90aGVyd2lzZSBzZXQpIGJ5IHRoZSBjYWxsZXIgdG8gaW5kaWNhdGUgdGhhdCBpdCBpcyBub3dcbiAgKiBpbiB1c2UgYnkgdGhlIGRjYWNoZS5cbiAgKi9cbi0gXG4gdm9pZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiB7XG4gXHRCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZW50cnkpKTtcbkBAIC0yNzUwLDYgJiM0MzsyODA1LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBlbmRfZGlyX2FkZChzdHJ1Y3QgaW5vZGUgKmRpciwgdW5zaWduZWQgaW50IG4pXG4gc3RhdGljIHZvaWQgZF93YWl0X2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4ge1xuIFx0aWYgKGxpa2VseShkX2luX2xvb2t1cChkZW50cnkpKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRlbGwgbG9ja2RlcCB3ZSB3aWxsIHdhaXQgZm9yIHRoZSBsb29rdXAgbG9jaywgYWZ0ZXJcbiYjNDM7XHRcdCAqIGRyb3BwaW5nIC1cdTAwM2VkX2xvY2ssIGJ1dCB3b24mIzM5O3QgYWN0dWFsbHkgdGFrZSBpdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c3Bpbl9yZWxlYXNlKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xvY2suZGVwX21hcCwgMCk7XG4mIzQzO1x0XHRsb2NrX21hcF9zeW5jKFx1MDAyNmRlbnRyeS1cdTAwM2Vsb29rdXBfbWFwKTtcbiYjNDM7XHRcdHNwaW5fYWNxdWlyZShcdTAwMjZkZW50cnktXHUwMDNlZF9sb2NrLmRlcF9tYXAsIDAsIDEsIF9USElTX0lQXyk7XG4mIzQzO1xuIFx0XHRkZW50cnktXHUwMDNlZF9mbGFncyB8PSBEQ0FDSEVfTE9PS1VQX1dBSVRFUlM7XG4gXHRcdHdhaXRfdmFyX2V2ZW50X3NwaW5sb2NrKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2ZsYWdzLFxuIFx0XHRcdFx0XHQhZF9pbl9sb29rdXAoZGVudHJ5KSxcbkBAIC0yNzU3LDggJiM0MzsyODIwLDE2IEBAIHN0YXRpYyB2b2lkIGRfd2FpdF9sb29rdXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0fVxuIH1cbiBcbi1zdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCxcbi1cdFx0XHRcdGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuJiM0MzsvKiBXaGF0IHRvIGRvIHdoZW4gX19kX2FsbG9jX3BhcmFsbGVsIGZpbmRzIGEgZF9pbl9sb29rdXAgZGVudHJ5ICovXG4mIzQzO2VudW0gYWxsb2NfcGFyYSB7XG4mIzQzO1x0QUxMT0NfUEFSQV9XQUlULFxuJiM0MztcdEFMTE9DX1BBUkFfRkFJTCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7c3RydWN0IGRlbnRyeSAqX19kX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCxcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuJiM0MztcdFx0XHRcdCAgZW51bSBhbGxvY19wYXJhIGhvdylcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaGFzaCA9IG5hbWUtXHUwMDNlaGFzaDtcbiBcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpiID0gaW5fbG9va3VwX2hhc2gocGFyZW50LCBoYXNoKTtcbkBAIC0yODMxLDYgJiM0MzsyOTAyLDEyIEBAIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuIFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xvY2spO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG4gXHRcdH1cbiYjNDM7XHRcdGlmICh1bmxpa2VseShob3cgPT0gQUxMT0NfUEFSQV9GQUlMKSkge1xuJiM0MztcdFx0XHQvKiBtdXN0biYjMzk7dCB3YWl0IGZvciBjb25jdXJyZW50IGxvb2t1cCB0byBjb21wbGV0ZSAqL1xuJiM0MztcdFx0XHRzcGluX3VubG9jayhcdTAwMjZkZW50cnktXHUwMDNlZF9sb2NrKTtcbiYjNDM7XHRcdFx0ZHB1dChuZXcpO1xuJiM0MztcdFx0XHRyZXR1cm4gRVJSX1BUUigtRVdPVUxEQkxPQ0spO1xuJiM0MztcdFx0fVxuIFx0XHQvKlxuIFx0XHQgKiBzb21lYm9keSBpcyBsaWtlbHkgdG8gYmUgc3RpbGwgZG9pbmcgbG9va3VwIGZvciBpdDtcbiBcdFx0ICogcGluIGl0IGFuZCB3YWl0IGZvciB0aGVtIHRvIGZpbmlzaFxuQEAgLTI4NTgsMTQgJiM0MzsyOTM1LDc3IEBAIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuIFx0fVxuIFx0aGxpc3RfYmxfYWRkX2hlYWQoXHUwMDI2bmV3LVx1MDAzZWRfaW5fbG9va3VwX2hhc2gsIGIpO1xuIFx0aGxpc3RfYmxfdW5sb2NrKGIpO1xuJiM0MztcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFx1MDAyNm5ldy1cdTAwM2Vsb29rdXBfbWFwKTtcbiBcdHJldHVybiBuZXc7XG4gbWlzbWF0Y2g6XG4gXHRzcGluX3VubG9jayhcdTAwMjZkZW50cnktXHUwMDNlZF9sb2NrKTtcbiBcdGRwdXQoZGVudHJ5KTtcbiBcdGdvdG8gcmV0cnk7XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRfYWxsb2NfcGFyYWxsZWwoKSAtIGFsbG9jYXRlIGEgbmV3IGRlbnRyeSBhbmQgZW5zdXJlIHVuaXF1ZW5lc3NcbiYjNDM7ICogQHBhcmVudDogZGVudHJ5IG9mIHRoZSBwYXJlbnRcbiYjNDM7ICogQG5hbWU6ICAgbmFtZSBvZiB0aGUgZGVudHJ5IHdpdGhpbiB0aGF0IHBhcmVudC5cbiYjNDM7ICpcbiYjNDM7ICogQSBuZXcgZGVudHJ5IGlzIGFsbG9jYXRlZCBhbmQsIHByb3ZpZGluZyBpdCBpcyB1bmlxdWUsIGFkZGVkIHRvIHRoZVxuJiM0MzsgKiByZWxldmFudCBpbmRleC5cbiYjNDM7ICogSWYgYW4gZXhpc3RpbmcgZGVudHJ5IGlzIGZvdW5kIHdpdGggdGhlIHNhbWUgcGFyZW50L25hbWUgdGhhdCBpc1xuJiM0MzsgKiBub3QgZF9pbl9sb29rdXAoKSwgdGhlbiB0aGF0IGlzIHJldHVybmVkIGluc3RlYWQuXG4mIzQzOyAqIElmIHRoZSBleGlzdGluZyBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSwgZF9hbGxvY19wYXJhbGxlbCgpIHdhaXRzIGZvclxuJiM0MzsgKiB0aGF0IGxvb2t1cCB0byBjb21wbGV0ZSBiZWZvcmUgcmV0dXJuaW5nIHRoZSBkZW50cnkgYW5kIHRoZW4gZW5zdXJlcyB0aGVcbiYjNDM7ICogbWF0Y2ggaXMgc3RpbGwgdmFsaWQuXG4mIzQzOyAqIFRodXMgaWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBkX2luX2xvb2t1cCgpIHRoZW4gdGhlIGNhbGxlciBoYXNcbiYjNDM7ICogZXhjbHVzaXZlIGFjY2VzcyB1bnRpbCBpdCBjb21wbGV0ZXMgdGhlIGxvb2t1cC5cbiYjNDM7ICogSWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBub3QgZF9pbl9sb29rdXAoKSB0aGVuIGEgbG9va3VwIGhhc1xuJiM0MzsgKiBhbHJlYWR5IGNvbXBsZXRlZC5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIEBuYW1lIG11c3QgYWxyZWFkeSBoYXZlIC1cdTAwM2VoYXNoIHNldCwgYXMgY2FuIGJlIGFjaGlldmVkXG4mIzQzOyAqIGJ5IGUuZy4gdHJ5X2xvb2t1cF9ub3Blcm0oKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogdGhlIGRlbnRyeSwgd2hldGhlciBmb3VuZCBvciBhbGxvY2F0ZWQsIG9yIGFuIGVycm9yICUtRU5PTUVNLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGRlbnRyeSAqZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4mIzQzO1x0XHRcdFx0Y29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19kX2FsbG9jX3BhcmFsbGVsKHBhcmVudCwgbmFtZSwgQUxMT0NfUEFSQV9XQUlUKTtcbiYjNDM7fVxuIEVYUE9SVF9TWU1CT0woZF9hbGxvY19wYXJhbGxlbCk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBkX2FsbG9jX3RyeWxvY2soKSAtIGZpbmQgb3IgYWxsb2NhdGUgYSBuZXcgZGVudHJ5XG4mIzQzOyAqIEBwYXJlbnQ6IGRlbnRyeSBvZiB0aGUgcGFyZW50XG4mIzQzOyAqIEBuYW1lOiAgIG5hbWUgb2YgdGhlIGRlbnRyeSB3aXRoaW4gdGhhdCBwYXJlbnQuXG4mIzQzOyAqXG4mIzQzOyAqIEEgbmV3IGRlbnRyeSBpcyBhbGxvY2F0ZWQgYW5kLCBwcm92aWRpbmcgaXQgaXMgdW5pcXVlLCBhZGRlZCB0byB0aGVcbiYjNDM7ICogcmVsZXZhbnQgaW5kZXguXG4mIzQzOyAqIElmIGFuIGV4aXN0aW5nIGRlbnRyeSBpcyBmb3VuZCB3aXRoIHRoZSBzYW1lIHBhcmVudC9uYW1lIHRoYXQgaXNcbiYjNDM7ICogbm90IGRfaW5fbG9va3VwKCkgdGhlbiB0aGF0IGlzIHJldHVybmVkIGluc3RlYWQuXG4mIzQzOyAqIElmIHRoZSBleGlzdGluZyBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSwgZF9hbGxvY190cnlsb2NrKClcbiYjNDM7ICogcmV0dXJucyB3aXRoIGVycm9yICUtRVdPVUxEQkxPQ0suXG4mIzQzOyAqIFRodXMgaWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBkX2luX2xvb2t1cCgpIHRoZW4gdGhlIGNhbGxlciBoYXNcbiYjNDM7ICogZXhjbHVzaXZlIGFjY2VzcyB1bnRpbCBpdCBjb21wbGV0ZXMgdGhlIGxvb2t1cC5cbiYjNDM7ICogSWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBub3QgZF9pbl9sb29rdXAoKSB0aGVuIGEgbG9va3VwIGhhc1xuJiM0MzsgKiBhbHJlYWR5IGNvbXBsZXRlZC5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIEBuYW1lIG5lZWQgbm90IGFscmVhZHkgaGF2ZSAtXHUwMDNlaGFzaCBzZXQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IHRoZSBkZW50cnksIHdoZXRoZXIgZm91bmQgb3IgYWxsb2NhdGVkLCBvciBhbiBlcnJvclxuJiM0MzsgKiAgICAlLUVOT01FTSwgJS1FV09VTERCTE9DSywgJS1FQUNDRVMgKGZvciBhIGJhZCBuYW1lKSBvclxuJiM0MzsgKiAgICBhbnl0aGluZyByZXR1cm5lZCBieSAtXHUwMDNlZF9oYXNoKCkuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3RyeWxvY2soc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IHFzdHIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpkZTtcbiYjNDM7XG4mIzQzO1x0ZGUgPSB0cnlfbG9va3VwX25vcGVybShuYW1lLCBwYXJlbnQpO1xuJiM0MztcdGlmICghZGUpXG4mIzQzO1x0XHRkZSA9IF9fZF9hbGxvY19wYXJhbGxlbChwYXJlbnQsIG5hbWUsIEFMTE9DX1BBUkFfRkFJTCk7XG4mIzQzO1x0cmV0dXJuIGRlO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woZF9hbGxvY190cnlsb2NrKTtcbiYjNDM7XG4gLypcbiAgKiBNb3ZlIGRlbnRyeSBmcm9tIGluLWxvb2t1cCBzdGF0ZSB0byBidXN5LW5lZ2F0aXZlIG9uZS5cbiAgKlxuQEAgLTI4OTQsNiAmIzQzOzMwMzQsNyBAQCBzdGF0aWMgdm9pZCBfX2RfbG9va3VwX3VuaGFzaChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRiID0gaW5fbG9va3VwX2hhc2goZGVudHJ5LVx1MDAzZWRfcGFyZW50LCBkZW50cnktXHUwMDNlZF9uYW1lLmhhc2gpO1xuIFx0aGxpc3RfYmxfbG9jayhiKTtcbiBcdGRlbnRyeS1cdTAwM2VkX2ZsYWdzIFx1MDAyNj0gfkRDQUNIRV9QQVJfTE9PS1VQO1xuJiM0MztcdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2ZGVudHJ5LVx1MDAzZWxvb2t1cF9tYXApO1xuIFx0X19obGlzdF9ibF9kZWwoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfaW5fbG9va3VwX2hhc2gpO1xuIFx0aGxpc3RfYmxfdW5sb2NrKGIpO1xuIFx0ZGVudHJ5LVx1MDAzZXdhaXRlcnMgPSBOVUxMO1xuQEAgLTI5MzEsMTUgJiM0MzszMDcyLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RfYWRkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdH1cbiBcdGlmICh1bmxpa2VseShvcHMpKVxuIFx0XHRkX3NldF9kX29wKGRlbnRyeSwgb3BzKTtcbi1cdGlmIChpbm9kZSkge1xuLVx0XHR1bnNpZ25lZCBhZGRfZmxhZ3MgPSBkX2ZsYWdzX2Zvcl9pbm9kZShpbm9kZSk7XG4tXHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2FsaWFzLCBcdTAwMjZpbm9kZS1cdTAwM2VpX2RlbnRyeSk7XG4tXHRcdHJhd193cml0ZV9zZXFjb3VudF9iZWdpbihcdTAwMjZkZW50cnktXHUwMDNlZF9zZXEpO1xuLVx0XHRfX2Rfc2V0X2lub2RlX2FuZF90eXBlKGRlbnRyeSwgaW5vZGUsIGFkZF9mbGFncyk7XG4tXHRcdHJhd193cml0ZV9zZXFjb3VudF9lbmQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfc2VxKTtcbi1cdFx0ZnNub3RpZnlfdXBkYXRlX2ZsYWdzKGRlbnRyeSk7XG4tXHR9XG4tXHRfX2RfcmVoYXNoKGRlbnRyeSk7XG4mIzQzO1x0aWYgKGlub2RlKVxuJiM0MztcdFx0X19kX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpO1xuJiM0MztcdGlmIChkX3VuaGFzaGVkKGRlbnRyeSkpXG4mIzQzO1x0XHRfX2RfcmVoYXNoKGRlbnRyeSk7XG4gXHRpZiAoZGlyKSB7XG4gXHRcdGVuZF9kaXJfYWRkKGRpciwgbik7XG4gXHRcdF9fZF93YWtlX2luX2xvb2t1cF93YWl0ZXJzKGRlbnRyeSk7XG5AQCAtMzI0MSw3ICYjNDM7MzM3Nyw3IEBAIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRpZiAoSVNfRVJSKGlub2RlKSlcbiBcdFx0cmV0dXJuIEVSUl9DQVNUKGlub2RlKTtcbiBcbi1cdEJVR19PTighZF91bmhhc2hlZChkZW50cnkpKTtcbiYjNDM7XHRCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSk7XG4gXG4gXHRpZiAoIWlub2RlKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0zMjk3LDYgJiM0MzszNDMzLDggQEAgc3RydWN0IGRlbnRyeSAqZF9zcGxpY2VfYWxpYXNfb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiAgKiBAaW5vZGU6ICB0aGUgaW5vZGUgd2hpY2ggbWF5IGhhdmUgYSBkaXNjb25uZWN0ZWQgZGVudHJ5XG4gICogQGRlbnRyeTogYSBuZWdhdGl2ZSBkZW50cnkgd2hpY2ggd2Ugd2FudCB0byBwb2ludCB0byB0aGUgaW5vZGUuXG4gICpcbiYjNDM7ICogQGRlbnRyeSBtdXN0IGJlIG5lZ2F0aXZlIGFuZCBtYXkgYmUgaW4tbG9va3VwIG9yIHVuaGFzaGVkIG9yIGhhc2hlZC5cbiYjNDM7ICpcbiAgKiBJZiBpbm9kZSBpcyBhIGRpcmVjdG9yeSBhbmQgaGFzIGFuIElTX1JPT1QgYWxpYXMsIHRoZW4gZF9tb3ZlIHRoYXQgaW5cbiAgKiBwbGFjZSBvZiB0aGUgZ2l2ZW4gZGVudHJ5IGFuZCByZXR1cm4gaXQsIGVsc2Ugc2ltcGx5IGRfYWRkIHRoZSBpbm9kZVxuICAqIHRvIHRoZSBkZW50cnkgYW5kIHJldHVybiBOVUxMLlxuQEAgLTMzMDQsMTYgJiM0MzszNDQyLDE0IEBAIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gICogSWYgYSBub24tSVNfUk9PVCBkaXJlY3RvcnkgaXMgZm91bmQsIHRoZSBmaWxlc3lzdGVtIGlzIGNvcnJ1cHQsIGFuZFxuICAqIHdlIHNob3VsZCBlcnJvciBvdXQ6IGRpcmVjdG9yaWVzIGNhbiYjMzk7dCBoYXZlIG11bHRpcGxlIGFsaWFzZXMuXG4gICpcbi0gKiBUaGlzIGlzIG5lZWRlZCBpbiB0aGUgbG9va3VwIHJvdXRpbmUgb2YgYW55IGZpbGVzeXN0ZW0gdGhhdCBpcyBleHBvcnRhYmxlXG4tICogKHZpYSBrbmZzZCkgc28gdGhhdCB3ZSBjYW4gYnVpbGQgZGNhY2hlIHBhdGhzIHRvIGRpcmVjdG9yaWVzIGVmZmVjdGl2ZWx5LlxuJiM0MzsgKiBUaGlzIHNob3VsZCBiZSB1c2VkIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIC1cdTAwM2Vsb29rdXAoKSBhbmQgdG9cbiYjNDM7ICogaW5zdGFudGlhdGUgdGhlIHJlc3VsdCBvZiAtXHUwMDNlbWtkaXIoKSwgaXMgb2Z0ZW4gdXNlZnVsIGZvclxuJiM0MzsgKiAtXHUwMDNlYXRvbWljX29wZW4sIGFuZCBtYXkgYmUgdXNlZCB0byBpbnN0YW50aWF0ZSBvdGhlciBvYmplY3RzLlxuICAqXG4gICogSWYgYSBkZW50cnkgd2FzIGZvdW5kIGFuZCBtb3ZlZCwgdGhlbiBpdCBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSBOVUxMXG4tICogaXMgcmV0dXJuZWQuICBUaGlzIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHJldHVybiB2YWx1ZSBvZiAtXHUwMDNlbG9va3VwLlxuJiM0MzsgKiBpcyByZXR1cm5lZC4gIFRoaXMgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIG9mIC1cdTAwM2Vsb29rdXAgYW5kXG4mIzQzOyAqIC1cdTAwM2Vta2Rpci5cbiAgKlxuLSAqIENsdXN0ZXIgZmlsZXN5c3RlbXMgbWF5IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGEgbmVnYXRpdmUsIGhhc2hlZCBkZW50cnkuXG4tICogSW4gdGhhdCBjYXNlLCB3ZSBrbm93IHRoYXQgdGhlIGlub2RlIHdpbGwgYmUgYSByZWd1bGFyIGZpbGUsIGFuZCBhbHNvIHRoaXNcbi0gKiB3aWxsIG9ubHkgb2NjdXIgZHVyaW5nIGF0b21pY19vcGVuLiBTbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgZGVudHJ5XG4tICogYmVpbmcgYWxyZWFkeSBoYXNoZWQgb25seSBpbiB0aGUgZmluYWwgY2FzZS5cbiAgKi9cbiBzdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4ge1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi5lOTc4YTc1ZWI4YTE0IDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmFtZWkuY1xuQEAgLTE5MzMsNyAmIzQzOzE5MzMsNyBAQCBzdGF0aWMgbm9pbmxpbmUgc3RydWN0IGRlbnRyeSAqbG9va3VwX3Nsb3coY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGlyLVx1MDAzZWRfaW5vZGU7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpyZXM7XG4gXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4tXHRyZXMgPSBfX2xvb2t1cF9zbG93KG5hbWUsIGRpciwgZmxhZ3MpO1xuJiM0MztcdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyB8IExPT0tVUF9TSEFSRUQpO1xuIFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XG4gXHRyZXR1cm4gcmVzO1xuIH1cbkBAIC0xOTQ3LDcgJiM0MzsxOTQ3LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9zbG93X2tpbGxhYmxlKGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFxuIFx0aWYgKGlub2RlX2xvY2tfc2hhcmVkX2tpbGxhYmxlKGlub2RlKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlRSKTtcbi1cdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyk7XG4mIzQzO1x0cmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzIHwgTE9PS1VQX1NIQVJFRCk7XG4gXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbiBcdHJldHVybiByZXM7XG4gfVxuQEAgLTI5NDYsOCAmIzQzOzI5NDYsOCBAQCBzdHJ1Y3QgZGVudHJ5ICpzdGFydF9kaXJvcChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBxc3RyICpuYW1lLFxuICAqIGVuZF9kaXJvcCAtIHNpZ25hbCBjb21wbGV0aW9uIG9mIGEgZGlyb3BcbiAgKiBAZGU6IHRoZSBkZW50cnkgd2hpY2ggd2FzIHJldHVybmVkIGJ5IHN0YXJ0X2Rpcm9wIG9yIHNpbWlsYXIuXG4gICpcbi0gKiBJZiB0aGUgZGUgaXMgYW4gZXJyb3IsIG5vdGhpbmcgaGFwcGVucy4gT3RoZXJ3aXNlIGFueSBsb2NrIHRha2VuIHRvXG4tICogcHJvdGVjdCB0aGUgZGVudHJ5IGlzIGRyb3BwZWQgYW5kIHRoZSBkZW50cnkgaXRzZWxmIGlzIHJlbGVhc2UgKGRwdXQoKSkuXG4mIzQzOyAqIElmIHRoZSBAZGUgaXMgYW4gZXJyb3IsIG5vdGhpbmcgaGFwcGVucy4gT3RoZXJ3aXNlIGFueSBsb2NrIHRha2VuIHRvXG4mIzQzOyAqIHByb3RlY3QgdGhlIGRlbnRyeSBpcyBkcm9wcGVkIGFuZCB0aGUgZGVudHJ5IGl0c2VsZiBpcyByZWxlYXNlZCAoZHB1dCgpKS5cbiAgKi9cbiB2b2lkIGVuZF9kaXJvcChzdHJ1Y3QgZGVudHJ5ICpkZSlcbiB7XG5AQCAtMzIxMCw3ICYjNDM7MzIxMCw3IEBAIEVYUE9SVF9TWU1CT0wobG9va3VwX29uZSk7XG4gLyoqXG4gICogbG9va3VwX29uZV91bmxvY2tlZCAtIGxvb2t1cCBzaW5nbGUgcGF0aG5hbWUgY29tcG9uZW50XG4gICogQGlkbWFwOlx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBsb29rdXAgaXMgcGVyZm9ybWVkIGZyb21cbi0gKiBAbmFtZTpcdHFzdHIgb2xkaW5nIHBhdGhuYW1lIGNvbXBvbmVudCB0byBsb29rdXBcbiYjNDM7ICogQG5hbWU6XHRxc3RyIGhvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cFxuICAqIEBiYXNlOlx0YmFzZSBkaXJlY3RvcnkgdG8gbG9va3VwIGZyb21cbiAgKlxuICAqIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGluLWtlcm5lbCBmaWxlc3lzdGVtIGNsaWVudHMgc3VjaCBhcyBmaWxlIHNlcnZlcnMuXG5AQCAtMzI0Myw3ICYjNDM7MzI0Myw3IEBAIEVYUE9SVF9TWU1CT0wobG9va3VwX29uZV91bmxvY2tlZCk7XG4gLyoqXG4gICogbG9va3VwX29uZV9wb3NpdGl2ZV9raWxsYWJsZSAtIGxvb2t1cCBzaW5nbGUgcGF0aG5hbWUgY29tcG9uZW50XG4gICogQGlkbWFwOlx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBsb29rdXAgaXMgcGVyZm9ybWVkIGZyb21cbi0gKiBAbmFtZTpcdHFzdHIgb2xkaW5nIHBhdGhuYW1lIGNvbXBvbmVudCB0byBsb29rdXBcbiYjNDM7ICogQG5hbWU6XHRxc3RyIGhvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cFxuICAqIEBiYXNlOlx0YmFzZSBkaXJlY3RvcnkgdG8gbG9va3VwIGZyb21cbiAgKlxuICAqIFRoaXMgaGVscGVyIHdpbGwgeWllbGQgRVJSX1BUUigtRU5PRU5UKSBvbiBuZWdhdGl2ZXMuIFRoZSBoZWxwZXIgcmV0dXJuc1xuQEAgLTMyNTksNyAmIzQzOzMyNTksNyBAQCBFWFBPUlRfU1lNQk9MKGxvb2t1cF9vbmVfdW5sb2NrZWQpO1xuICAqIHRoZSBpX3J3c2VtIGl0c2VsZiBpZiBuZWNlc3NhcnkuICBJZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIG9yXG4gICogZGVsaXZlcmVkLCBpdCB3aWxsIHJldHVybiAlLUVJTlRSIGlmIHRoZSBsb2NrIGlzIG5lZWRlZC5cbiAgKlxuLSAqIFJldHVybnM6IEEgZGVudHJ5LCBwb3NzaWJseSBuZWdhdGl2ZSwgb3JcbiYjNDM7ICogUmV0dXJuczogQSBwb3NpdGl2ZSBkZW50cnksIG9yXG4gICpcdCAgIC0gc2FtZSBlcnJvcnMgYXMgbG9va3VwX29uZV91bmxvY2tlZCgpIG9yXG4gICpcdCAgIC0gRVJSX1BUUigtRUlOVFIpIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuXG4gICovXG5AQCAtMzM4MSw3ICYjNDM7MzM4MSw3IEBAIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9ub3Blcm1fcG9zaXRpdmVfdW5sb2NrZWQoc3RydWN0IHFzdHIgKm5hbWUsXG4gRVhQT1JUX1NZTUJPTChsb29rdXBfbm9wZXJtX3Bvc2l0aXZlX3VubG9ja2VkKTtcbiBcbiAvKipcbi0gKiBzdGFydF9jcmVhdGluZyAtIHByZXBhcmUgdG8gY3JlYXRlIGEgZ2l2ZW4gbmFtZSB3aXRoIHBlcm1pc3Npb24gY2hlY2tpbmdcbiYjNDM7ICogc3RhcnRfY3JlYXRpbmcgLSBwcmVwYXJlIHRvIGFjY2VzcyBvciBjcmVhdGUgYSBnaXZlbiBuYW1lIHdpdGggcGVybWlzc2lvbiBjaGVja2luZ1xuICAqIEBpZG1hcDogIGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBwcmVwYXJlIHRvIGNyZWF0ZSB0aGUgbmFtZVxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWRcbkBAIC0zNDEzLDggJiM0MzszNDEzLDggQEAgRVhQT1JUX1NZTUJPTChzdGFydF9jcmVhdGluZyk7XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIGZpbmQgdGhlIG5hbWVcbiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSByZW1vdmVkXG4gICpcbi0gKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGluIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xuLSAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LiAgUGVybWlzc2lvbiBjaGVja2luZyAoTUFZX0VYRUMpIGlzIHBlcmZvcm1lZFxuJiM0MzsgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZyBhbiBvYmplY3RcbiYjNDM7ICogZnJvbSBhIGRpcmVjdG9yeS4gIFBlcm1pc3Npb24gY2hlY2tpbmcgKE1BWV9FWEVDKSBpcyBwZXJmb3JtZWRcbiAgKiBhZ2FpbnN0IEBpZG1hcC5cbiAgKlxuICAqIElmIHRoZSBuYW1lIGRvZXNuJiMzOTt0IGV4aXN0LCBhbiBlcnJvciBpcyByZXR1cm5lZC5cbkBAIC0zNDQwLDcgJiM0MzszNDQwLDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZyk7XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIHByZXBhcmUgdG8gY3JlYXRlIHRoZSBuYW1lXG4gICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgY3JlYXRlZFxuICAqXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcbiYjNDM7ICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcbiAgKiBhbiBvYmplY3QgaW4gYSBkaXJlY3RvcnkuICBQZXJtaXNzaW9uIGNoZWNraW5nIChNQVlfRVhFQykgaXMgcGVyZm9ybWVkXG4gICogYWdhaW5zdCBAaWRtYXAuXG4gICpcbkBAIC0zNDY5LDcgJiM0MzszNDY5LDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9jcmVhdGluZ19raWxsYWJsZSk7XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIGZpbmQgdGhlIG5hbWVcbiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSByZW1vdmVkXG4gICpcbi0gKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGluIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xuJiM0MzsgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xuICAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LiAgUGVybWlzc2lvbiBjaGVja2luZyAoTUFZX0VYRUMpIGlzIHBlcmZvcm1lZFxuICAqIGFnYWluc3QgQGlkbWFwLlxuICAqXG5AQCAtMzQ5OSw3ICYjNDM7MzQ5OSw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfcmVtb3Zpbmdfa2lsbGFibGUpO1xuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBwcmVwYXJlIHRvIGNyZWF0ZSB0aGUgbmFtZVxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWRcbiAgKlxuLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIGNyZWF0aW5nXG4mIzQzOyAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaXMgcGVyZm9ybWVkIHByaW9yIHRvIGNyZWF0aW5nXG4gICogYW4gb2JqZWN0IGluIGEgZGlyZWN0b3J5LlxuICAqXG4gICogSWYgdGhlIG5hbWUgYWxyZWFkeSBleGlzdHMsIGEgcG9zaXRpdmUgZGVudHJ5IGlzIHJldHVybmVkLlxuQEAgLTM1MjIsNyAmIzQzOzM1MjIsNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX25vcGVybSk7XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIGZpbmQgdGhlIG5hbWVcbiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSByZW1vdmVkXG4gICpcbi0gKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGluIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xuJiM0MzsgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xuICAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LlxuICAqXG4gICogSWYgdGhlIG5hbWUgZG9lc24mIzM5O3QgZXhpc3QsIGFuIGVycm9yIGlzIHJldHVybmVkLlxuQEAgLTM1NDMsMTEgJiM0MzszNTQzLDExIEBAIHN0cnVjdCBkZW50cnkgKnN0YXJ0X3JlbW92aW5nX25vcGVybShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4gRVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZ19ub3Blcm0pO1xuIFxuIC8qKlxuLSAqIHN0YXJ0X2NyZWF0aW5nX2RlbnRyeSAtIHByZXBhcmUgdG8gY3JlYXRlIGEgZ2l2ZW4gZGVudHJ5XG4tICogQHBhcmVudDogZGlyZWN0b3J5IGZyb20gd2hpY2ggZGVudHJ5IHNob3VsZCBiZSByZW1vdmVkXG4tICogQGNoaWxkOiAgdGhlIGRlbnRyeSB0byBiZSByZW1vdmVkXG4mIzQzOyAqIHN0YXJ0X2NyZWF0aW5nX2RlbnRyeSAtIHByZXBhcmUgdG8gYWNjZXNzIG9yIGNyZWF0ZSBhIGdpdmVuIGRlbnRyeVxuJiM0MzsgKiBAcGFyZW50OiBkaXJlY3Rvcnkgb2YgZGVudHJ5XG4mIzQzOyAqIEBjaGlsZDogIHRoZSBkZW50cnkgdG8gYmUgcHJlcGFyZWRcbiAgKlxuLSAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW4gb3RoZXIgZGlyb3BzIGFuZFxuJiM0MzsgKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluc3Qgb3RoZXIgZGlyb3BzIGFuZFxuICAqIHRoZSB2YWxpZGl0eSBvZiB0aGUgZGVudHJ5IGlzIGNoZWNrZWQ6IGNvcnJlY3QgcGFyZW50IGFuZCBzdGlsbCBoYXNoZWQuXG4gICpcbiAgKiBJZiB0aGUgZGVudHJ5IGlzIHZhbGlkIGFuZCBuZWdhdGl2ZSBhIHJlZmVyZW5jZSBpcyB0YWtlbiBhbmRcbkBAIC0zNTgwLDcgJiM0MzszNTgwLDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9jcmVhdGluZ19kZW50cnkpO1xuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRlbnRyeSBzaG91bGQgYmUgcmVtb3ZlZFxuICAqIEBjaGlsZDogIHRoZSBkZW50cnkgdG8gYmUgcmVtb3ZlZFxuICAqXG4tICogQSBsb2NrIGlzIHRha2VuIHRvIHByb3RlY3QgdGhlIGRlbnRyeSBhZ2FpbiBvdGhlciBkaXJvcHMgYW5kXG4mIzQzOyAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW5zdCBvdGhlciBkaXJvcHMgYW5kXG4gICogdGhlIHZhbGlkaXR5IG9mIHRoZSBkZW50cnkgaXMgY2hlY2tlZDogY29ycmVjdCBwYXJlbnQgYW5kIHN0aWxsIGhhc2hlZC5cbiAgKlxuICAqIElmIHRoZSBkZW50cnkgaXMgdmFsaWQgYW5kIHBvc2l0aXZlLCBhIHJlZmVyZW5jZSBpcyB0YWtlbiBhbmRcbkBAIC00NDQwLDEyICYjNDM7NDQ0MCwxNCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0aW50IGVycm9yLCBjcmVhdGVfZXJyb3I7XG4gXHR1bW9kZV90IG1vZGU7XG4gXHRib29sIGdvdF93cml0ZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc2hhcmVkX2ZsYWc7XG4gXG4gcmV0cnk6XG4gXHRvcGVuX2ZsYWcgPSBvcC1cdTAwM2VvcGVuX2ZsYWc7XG4gXHRnb3Rfd3JpdGUgPSBmYWxzZTtcbiBcdG1vZGUgPSBvcC1cdTAwM2Vtb2RlO1xuIFx0Y3JlYXRlX2Vycm9yID0gMDtcbiYjNDM7XHRzaGFyZWRfZmxhZyA9IChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpID8gMCA6IExPT0tVUF9TSEFSRUQ7XG4gXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiAoT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSB8IE9fUkRXUikpIHtcbiBcdFx0Z290X3dyaXRlID0gIW1udF93YW50X3dyaXRlKG5kLVx1MDAzZXBhdGgubW50KTtcbkBAIC00NDU0LDEwICYjNDM7NDQ1NiwxMCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHQgKiBhIGRpZmZlcmVudCBlcnJvcjsgd2UmIzM5O2xsIGJlIGRyb3BwaW5nIHRoaXMgb25lIGFueXdheS5cbiBcdFx0ICovXG4gXHR9XG4tXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKVxuLVx0XHRpbm9kZV9sb2NrKGRpcl9pbm9kZSk7XG4tXHRlbHNlXG4mIzQzO1x0aWYgKHNoYXJlZF9mbGFnKVxuIFx0XHRpbm9kZV9sb2NrX3NoYXJlZChkaXJfaW5vZGUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGlub2RlX2xvY2soZGlyX2lub2RlKTtcbiBcbiBcdGlmICh1bmxpa2VseShJU19ERUFERElSKGRpcl9pbm9kZSkpKSB7XG4gXHRcdGRlbnRyeSA9IEVSUl9QVFIoLUVOT0VOVCk7XG5AQCAtNDUyNiw3ICYjNDM7NDUyOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSBkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2Vsb29rdXAoZGlyX2lub2RlLCBkZW50cnksXG4tXHRcdFx0XHRcdFx0XHQgICAgIG5kLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgIG5kLVx1MDAzZWZsYWdzIHwgc2hhcmVkX2ZsYWcpO1xuIFx0XHRkX2xvb2t1cF9kb25lKGRlbnRyeSk7XG4gXHRcdGlmICh1bmxpa2VseShyZXMpKSB7XG4gXHRcdFx0aWYgKElTX0VSUihyZXMpKSB7XG5AQCAtNDU3NCwxMCAmIzQzOzQ1NzYsMTAgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpXG4gXHRcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbiBcdH1cbi1cdGlmICgob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB8fCBjcmVhdGVfZXJyb3IpXG4tXHRcdGlub2RlX3VubG9jayhkaXJfaW5vZGUpO1xuLVx0ZWxzZVxuJiM0MztcdGlmIChzaGFyZWRfZmxhZylcbiBcdFx0aW5vZGVfdW5sb2NrX3NoYXJlZChkaXJfaW5vZGUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGlub2RlX3VubG9jayhkaXJfaW5vZGUpO1xuIFxuIFx0aWYgKGdvdF93cml0ZSlcbiBcdFx0bW50X2Ryb3Bfd3JpdGUobmQtXHUwMDNlcGF0aC5tbnQpO1xuZGlmZiAtLWdpdCBhL2ZzL25mcy91bmxpbmsuYyBiL2ZzL25mcy91bmxpbmsuY1xuaW5kZXggYjU3Y2ZhYTRkNTE2Zi4uYzhkNzEyMjA0ZTY0OSAxMDA2NDRcbi0tLSBhL2ZzL25mcy91bmxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmZzL3VubGluay5jXG5AQCAtNjcsNiAmIzQzOzY3LDcgQEAgc3RhdGljIHZvaWQgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlKHZvaWQgKmNhbGxkYXRhKVxuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS1cdTAwM2VkX3NiO1xuIFxuIFx0dXBfcmVhZF9ub25fb3duZXIoXHUwMDI2TkZTX0koZF9pbm9kZShkZW50cnktXHUwMDNlZF9wYXJlbnQpKS1cdTAwM2VybWRpcl9zZW0pO1xuJiM0MztcdGRfbG9va3VwX2FjcXVpcmUoZGVudHJ5KTtcbiBcdGRfbG9va3VwX2RvbmUoZGVudHJ5KTtcbiBcdG5mc19mcmVlX3VubGlua2RhdGEoZGF0YSk7XG4gXHRkcHV0KGRlbnRyeSk7XG5AQCAtMTU5LDYgJiM0MzsxNjAsOCBAQCBzdGF0aWMgaW50IG5mc19jYWxsX3VubGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZlxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFx0ZGF0YS1cdTAwM2VkZW50cnkgPSBhbGlhcztcbiYjNDM7XHRkX2xvb2t1cF9yZWxlYXNlKGFsaWFzKTtcbiYjNDM7XG4gXHRuZnNfZG9fY2FsbF91bmxpbmsoaW5vZGUsIGRhdGEpO1xuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oXG5pbmRleCA0YjFmZjk5NjA4ZTAxLi5lN2UzZWYwNTMxM2I4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaFxuQEAgLTExNiw2ICYjNDM7MTE2LDggQEAgc3RydWN0IGRlbnRyeSB7XG4gXHRcdFx0XHRcdCAqIHBvc3NpYmxlIVxuIFx0XHRcdFx0XHQgKi9cbiBcbiYjNDM7XHQvKiBsb2NrZGVwIHRyYWNraW5nIG9mIERDQUNIRV9QQVJfTE9PS1VQIGxvY2tzICovXG4mIzQzO1x0c3RydWN0IGxvY2tkZXBfbWFwXHRcdGxvb2t1cF9tYXA7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGRfbHJ1O1x0XHQvKiBMUlUgbGlzdCAqL1xuIFx0c3RydWN0IGhsaXN0X25vZGUgZF9zaWI7XHQvKiBjaGlsZCBvZiBwYXJlbnQgbGlzdCAqL1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgZF9jaGlsZHJlbjtcdC8qIG91ciBjaGlsZHJlbiAqL1xuQEAgLTI1Nyw3ICYjNDM7MjU5LDkgQEAgZXh0ZXJuIHZvaWQgZF9kZWxldGUoc3RydWN0IGRlbnRyeSAqKTtcbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2Moc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTtcbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfYW5vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG4gZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY190cnlsb2NrKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7XG4gZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX3NwbGljZV9hbGlhcyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTtcbiYjNDM7c3RydWN0IGRlbnRyeSAqZF9kdXBsaWNhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiAvKiB3ZWlyZCBwcm9jZnMgbWVzczsgKk5PVCogZXhwb3J0ZWQgKi9cbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqKTtcbkBAIC01NTIsNiAmIzQzOzU1NiwzNiBAQCBzdGF0aWMgaW5saW5lIGludCBzaW1wbGVfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIHVuc2lnbmVkIGxvbmcgdmZzX3ByZXNzdXJlX3JhdGlvKHVuc2lnbmVkIGxvbmcgdmFsKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGRfbG9va3VwX3JlbGVhc2UgLSByZWxlYXNlIG93bmVyc2hpcCBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrXG4mIzQzOyAqIEBkZW50cnk6IGRlbnRyeSB0aGF0IGlzIGxvY2tlZFxuJiM0MzsgKlxuJiM0MzsgKiBJZiBhbiBpbi1sb29rdXAgZGVudHJ5IGlzIHRvIGJlIHBhc3NlZCB0byBhbm90aGVyIHRocmVhZCB3aGljaFxuJiM0MzsgKiB3aWxsIGRyb3AgdGhlIGluLWxvb2t1cCBsb2NrLCB0aGVuIGRfbG9va3VwX3JlbGVhc2UoKSBtdXN0IGJlIGNhbGxlZFxuJiM0MzsgKiB0byB0ZWxsIGxvY2tkZXAgdGhhdCB0aGlzIHRocmVhZCBubyBsb2NrIGhvbGRzIHRoZSBsb2NrLiAgVGhlXG4mIzQzOyAqIHRocmVhZCB0aGF0IHJlY2VpdmVzIHRoZSBsb2NrIG11c3QgY2FsbCBkX2xvb2t1cF9hY3F1aXJlKCkgdG9cbiYjNDM7ICogYWNxdWlyZSB0aGUgbG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkX2xvb2t1cF9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiYjNDM7e1xuJiM0MztcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKVxuJiM0MztcdFx0bG9ja19tYXBfcmVsZWFzZShcdTAwMjZkZW50cnktXHUwMDNlbG9va3VwX21hcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBkX2xvb2t1cF9hY3F1aXJlIC0gYWNxdWlyZSBvd25lcnNoaXAgb2YgRENBQ0hFX1BBUl9MT09LVVAgbG9ja1xuJiM0MzsgKiBAZGVudHJ5OiBkZW50cnkgdGhhdCBpcyBsb2NrZWRcbiYjNDM7ICpcbiYjNDM7ICogSWYgYW4gaW4tbG9va3VwIGRlbnRyeSB3YXMgcGFzc2VkIHRvIHRoaXMgdGhyZWFkLCB0aGVcbiYjNDM7ICogZF9sb29rdXBfYWNxdWlyZSgpIG11c3QgYmUgY2FsbGVkIHRvIHRlbGwgbG9ja2RlcCB0aGF0IHRoaXNcbiYjNDM7ICogdGhyZWFkIG5vdyBvd25zIHRoZSBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGRfbG9va3VwX2FjcXVpcmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpXG4mIzQzO1x0XHRsb2NrX21hcF9hY3F1aXJlX3RyeShcdTAwMjZkZW50cnktXHUwMDNlbG9va3VwX21hcCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZF9pbm9kZSAtIEdldCB0aGUgYWN0dWFsIGlub2RlIG9mIHRoaXMgZGVudHJ5XG4gICogQGRlbnRyeTogVGhlIGRlbnRyeSB0byBxdWVyeVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmFtZWkuaCBiL2luY2x1ZGUvbGludXgvbmFtZWkuaFxuaW5kZXggODZkNjU3YjI0ZmM2YS4uNjVmMGY1NzEyODg1YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmFtZWkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uYW1laS5oXG5AQCAtMzIsOCAmIzQzOzMyLDkgQEAgZW51bSB7IE1BWF9ORVNURURfTElOS1MgPSA4IH07XG4gI2RlZmluZSBMT09LVVBfQ1JFQVRFXHRcdEJJVCgxNylcdC8qIC4uLiBpbiBvYmplY3QgY3JlYXRpb24gKi9cbiAjZGVmaW5lIExPT0tVUF9FWENMXHRcdEJJVCgxOClcdC8qIC4uLiBpbiB0YXJnZXQgbXVzdCBub3QgZXhpc3QgKi9cbiAjZGVmaW5lIExPT0tVUF9SRU5BTUVfVEFSR0VUXHRCSVQoMTkpXHQvKiAuLi4gaW4gZGVzdGluYXRpb24gb2YgcmVuYW1lKCkgKi9cbiYjNDM7I2RlZmluZSBMT09LVVBfU0hBUkVEXHRcdEJJVCgyMCkgLyogUGFyZW50IGxvY2sgaXMgaGVsZCBzaGFyZWQgKi9cbiBcbi0vKiA0IHNwYXJlIGJpdHMgZm9yIGludGVudCAqL1xuJiM0MzsvKiAzIHNwYXJlIGJpdHMgZm9yIGludGVudCAqL1xuIFxuIC8qIFNjb3BpbmcgZmxhZ3MgZm9yIGxvb2t1cC4gKi9cbiAjZGVmaW5lIExPT0tVUF9OT19TWU1MSU5LU1x0QklUKDI0KSAvKiBObyBzeW1saW5rIGNyb3NzaW5nLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST1ZFX0xPQ0tJTkcmIzM0OywKICAgICYjMzQ7TkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZF9kdXBsaWNhdGUmIzM0OywKICAgICYjMzQ7ZF9hbGxvY19wYXJhbGxlbCYjMzQ7LAogICAgJiMzNDtkX2FsbG9jX3RyeWxvY2smIzM0OywKICAgICYjMzQ7ZF9zcGxpY2VfYWxpYXMmIzM0OywKICAgICYjMzQ7ZF9zcGxpY2VfYWxpYXNfb3BzJiMzNDssCiAgICAmIzM0O2Rfd2FpdF9sb29rdXAmIzM0OywKICAgICYjMzQ7bG9va3VwX3Nsb3cmIzM0OywKICAgICYjMzQ7bG9va3VwX3Nsb3dfa2lsbGFibGUmIzM0OywKICAgICYjMzQ7bG9va3VwX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2FzeW5jX3VubGlua19yZWxlYXNlJiMzNDssCiAgICAmIzM0O25mc19jYWxsX3VubGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgY29yZSBWRlMgZGNhY2hlIGFuZCBuYW1laSBsb2dpYywgaW5jbHVkaW5nIHBhcmFsbGVsIGxvb2t1cCBsb2NraW5nLCBzaGFyZWQgZGlyZWN0b3J5IGxvY2tpbmcgZmxhZ3MgKExPT0tVUF9TSEFSRUQpIGluIGxvb2t1cF9zbG93IGFuZCBsb29rdXBfb3BlbiwgbG9ja2RlcCBtYXAgdHJhY2tpbmcgZm9yIGluLWxvb2t1cCBkZW50cmllcywgdXBkYXRlZCBhc3NlcnRpb25zIGluIGRfc3BsaWNlX2FsaWFzX29wcywgbmV3IGRjYWNoZSBoZWxwZXJzIChkX2R1cGxpY2F0ZSwgZF9hbGxvY190cnlsb2NrKSwgYW5kIE5GUyBhc3luY2hyb25vdXMgdW5saW5rIGxvY2sgdHJhY2tpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGNvcmUgcmVhY2hhYmxlIGtlcm5lbCBzdWJzeXN0ZW1zIGFuZCBkaXJlY3RseSBhZmZlY3QgY29uY3VycmVuY3kgYW5kIGludmFyaWFudCBlbmZvcmNlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ5YTEyZWMxZTVmZTNmM2U1NzdkM2I2MTgzNmQ4NmU2Njk5NDMwZWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDA0OjE1OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QKaW5kZXggNjA4ODBlYjBjNDlkMS4uNGUwMTVmMWJmMWY4NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0CkBAIC0xMjAzLDE2ICYjNDM7MTIwMywxNiBAQCB3aWxsIGZhaWwtc2FmZS4KIAogLS0tCiAKLSoqIG1hbmRhdG9yeSoqCiYjNDM7KiptYW5kYXRvcnkqKgogCiBsb29rdXBfb25lKCksIGxvb2t1cF9vbmVfdW5sb2NrZWQoKSwgbG9va3VwX29uZV9wb3NpdGl2ZV91bmxvY2tlZCgpIG5vdwogdGFrZSBhIHFzdHIgaW5zdGVhZCBvZiBhIG5hbWUgYW5kIGxlbi4gIFRoZXNlLCBub3QgdGhlICYjMzQ7b25lX2xlbiYjMzQ7CiB2ZXJzaW9ucywgc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgYWNjZXNzaW5nIGEgZmlsZXN5c3RlbSBmcm9tIG91dHNpZGUKLXRoYXQgZmlsZXN5c210ZW0sIHRocm91Z2ggYSBtb3VudCBwb2ludCAtIHdoaWNoIHdpbGwgaGF2ZSBhIG1udF9pZG1hcC4KJiM0Mzt0aGF0IGZpbGVzeXN0ZW0sIHRocm91Z2ggYSBtb3VudCBwb2ludCAtIHdoaWNoIHdpbGwgaGF2ZSBhIG1udF9pZG1hcC4KIAogLS0tCiAKLSoqIG1hbmRhdG9yeSoqCiYjNDM7KiptYW5kYXRvcnkqKgogCiBGdW5jdGlvbnMgdHJ5X2xvb2t1cF9vbmVfbGVuKCksIGxvb2t1cF9vbmVfbGVuKCksCiBsb29rdXBfb25lX2xlbl91bmxvY2tlZCgpIGFuZCBsb29rdXBfcG9zaXRpdmVfdW5sb2NrZWQoKSBoYXZlIGJlZW4KQEAgLTEyMjksNyAmIzQzOzEyMjksNyBAQCBhbHJlYWR5IGJlZW4gcGVyZm9ybWVkIHN1Y2ggYXMgYWZ0ZXIgdmZzX3BhdGhfcGFyZW50X2xvb2t1cCgpCiAKIC0tLQogCi0qKiBtYW5kYXRvcnkqKgomIzQzOyoqbWFuZGF0b3J5KioKIAogZF9oYXNoX2FuZF9sb29rdXAoKSBpcyBubyBsb25nZXIgZXhwb3J0ZWQgb3IgYXZhaWxhYmxlIG91dHNpZGUgdGhlIFZGUy4KIFVzZSB0cnlfbG9va3VwX25vcGVybSgpIGluc3RlYWQuICBUaGlzIGFkZHMgbmFtZSB2YWxpZGF0aW9uIGFuZCB0YWtlcwpAQCAtMTM3MCw3ICYjNDM7MTM3MCw3IEBAIHNpbWlsYXIuCiAKIC0tLQogCi0qKiBtYW5kYXRvcnkqKgomIzQzOyoqbWFuZGF0b3J5KioKIAogbG9ja19yZW5hbWUoKSwgbG9ja19yZW5hbWVfY2hpbGQoKSwgdW5sb2NrX3JlbmFtZSgpIGFyZSBubwogbG9uZ2VyIGF2YWlsYWJsZS4gIFVzZSBzdGFydF9yZW5hbWluZygpIG9yIHNpbWlsYXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QKaW5kZXggZDNhOTNlZWMzOTQ1Zi4uZGU4Zjg1MDIwNTZlOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdApAQCAtNTA3LDggJiM0Mzs1MDcsOCBAQCBvdGhlcndpc2Ugbm90ZWQuCiAJZGVudHJ5IGJlZm9yZSB0aGUgZmlyc3QgbWtkaXIgcmV0dXJucy4KIAogCUlmIHRoZXJlIGlzIGFueSBjaGFuY2UgdGhpcyBjb3VsZCBoYXBwZW4sIHRoZW4gdGhlIG5ldyBpbm9kZQotCXNob3VsZCBiZSBkX2Ryb3AoKWVkIGFuZCBhdHRhY2hlZCB3aXRoIGRfc3BsaWNlX2FsaWFzKCkuICBUaGUKLQlyZXR1cm5lZCBkZW50cnkgKGlmIGFueSkgc2hvdWxkIGJlIHJldHVybmVkIGJ5IC0mZ3Q7bWtkaXIoKS4KJiM0MzsJc2hvdWxkIGJlIGF0dGFjaGVkIHdpdGggZF9zcGxpY2VfYWxpYXMoKS4gIFRoZSByZXR1cm5lZAomIzQzOwlkZW50cnkgKGlmIGFueSkgc2hvdWxkIGJlIHJldHVybmVkIGJ5IC0mZ3Q7bWtkaXIoKS4KIAogYGBybWRpcmBgCiAJY2FsbGVkIGJ5IHRoZSBybWRpcigyKSBzeXN0ZW0gY2FsbC4gIE9ubHkgcmVxdWlyZWQgaWYgeW91IHdhbnQKZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggMWIxYTgxZjEwZGE2Ny4uM2FmOGIyYWM2OTlmOSAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZGNhY2hlLmMKQEAgLTMyLDYgJiM0MzszMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYml0X3NwaW5sb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1bGlzdF9ibC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3RfbHJ1LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25hbWVpLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDttb3VudC5oJiMzNDsKIApAQCAtMTkwMCw2ICYjNDM7MTkwMSw3IEBAIEVYUE9SVF9TWU1CT0woZF9pbnZhbGlkYXRlKTsKICAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCiB7CiYjNDM7CXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19sb29rdXBfa2V5OwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAljaGFyICpkbmFtZTsKIAlpbnQgZXJyOwpAQCAtMTk1Nyw2ICYjNDM7MTk1OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCiAJZGVudHJ5LSZndDt3YWl0ZXJzID0gTlVMTDsKIAlJTklUX0hMSVNUX05PREUoJmFtcDtkZW50cnktJmd0O2Rfc2liKTsKIAomIzQzOwlsb2NrZGVwX2luaXRfbWFwKCZhbXA7ZGVudHJ5LSZndDtsb29rdXBfbWFwLCAmIzM0O0RDQUNIRV9QQVJfTE9PS1VQJiMzNDssICZhbXA7X19sb29rdXBfa2V5LCAwKTsKJiM0MzsKIAlpZiAoZGVudHJ5LSZndDtkX29wICZhbXA7JmFtcDsgZGVudHJ5LSZndDtkX29wLSZndDtkX2luaXQpIHsKIAkJZXJyID0gZGVudHJ5LSZndDtkX29wLSZndDtkX2luaXQoZGVudHJ5KTsKIAkJaWYgKGVycikgewpAQCAtMTk5OSw2ICYjNDM7MjAwMyw1OCBAQCBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiBwYXJlbnQsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogfQogRVhQT1JUX1NZTUJPTChkX2FsbG9jKTsKIAomIzQzOy8qKgomIzQzOyAqIGRfZHVwbGljYXRlIC0gZHVwbGljYXRlIGEgZGVudHJ5IGZvciBjb21iaW5lZCBhdG9taWMgb3BlcmF0aW9uCiYjNDM7ICogQGRlbnRyeTogdGhlIGRlbnRyeSB0byBkdXBsaWNhdGUKJiM0MzsgKgomIzQzOyAqIFNvbWUgcmVuYW1lIG9wZXJhdGlvbnMgbmVlZCB0byBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgb3BlcmF0aW9uCiYjNDM7ICogaW5zaWRlIHRoZSBmaWxlc3lzdGVtLgomIzQzOyAqIDEvIEEgY2x1c3RlciBmaWxlc3lzdGVtIHdoZW4gcmVuYW1pbmcgdG8gYW4gaW4tdXNlIGZpbGUgbWlnaHQgbmVlZCB0bwomIzQzOyAqICAgZmlyc3QgJiMzNDtzaWxseS1yZW5hbWUmIzM0OyB0aGF0IHRhcmdldCBvdXQgb2YgdGhlIHdheSBiZWZvcmUgdGhlIG1haW4gcmVuYW1lCiYjNDM7ICogMi8gQSBmaWxlc3lzdGVtIHRoYXQgc3VwcG9ydHMgd2hpdGUtb3V0IG1pZ2h0IHdhbnQgdG8gY3JlYXRlIGEgd2hpdGVvdXQKJiM0MzsgKiAgIGluIHBsYWNlIG9mIHRoZSBmaWxlIGJlaW5nIG1vdmVkLgomIzQzOyAqCiYjNDM7ICogRm9yIHRoaXMgdGhleSBuZWVkIHR3byBkZW50cmllcyB3aGljaCB0ZW1wb3JhcmlseSBoYXZlIHRoZSBzYW1lIG5hbWUsCiYjNDM7ICogYmVmb3JlIG9uZSBpcyByZW5hbWVkLiAgZF9kdXBsaWNhdGUoKSBwcm92aWRlcyBmb3IgdGhpcy4gIEdpdmVuIGEKJiM0MzsgKiBwb3NpdGl2ZSBoYXNoZWQgZGVudHJ5LCBpdCBjcmVhdGVzIGEgc2Vjb25kIGluLWxvb2t1cCBkZW50cnkuCiYjNDM7ICogQmVjYXVzZSB0aGUgb3JpZ2luYWwgZGVudHJ5IGV4aXN0cywgbm8gb3RoZXIgdGhyZWFkIHdpbGwgdHJ5IHRvCiYjNDM7ICogY3JlYXRlIGFuIGluLWxvb2t1cCBkZW50cnksIHNvIHRoZXJlIGNhbiBiZSBubyByYWNlIGluIHRoaXMgY3JlYXRlLgomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBzaG91bGQgZF9tb3ZlKCkgdGhlIG9yaWdpbmFsIHRvIGEgbmV3IG5hbWUsIG9mdGVuIHZpYSBhCiYjNDM7ICogcmVuYW1lIHJlcXVlc3QsIGFuZCBzaG91bGQgY2FsbCBkX2xvb2t1cF9kb25lKCkgb24gdGhlIG5ld2x5IGNyZWF0ZWQKJiM0MzsgKiBkZW50cnkuICBJZiB0aGUgbmV3IGlzIGluc3RhbnRpYXRlZCB0aGVuIHRoZSBvbGQgTVVTVCBlaXRoZXIgYmUgbW92ZWQKJiM0MzsgKiBvciBkcm9wcGVkLgomIzQzOyAqCiYjNDM7ICogUGFyZW50IG11c3QgYmUgbG9ja2VkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogYW4gaW4tbG9va3VwIGRlbnRyeSwgb3IgLUVOT01FTS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgZGVudHJ5ICpkX2R1cGxpY2F0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgaGFzaCA9IGRlbnRyeS0mZ3Q7ZF9uYW1lLmhhc2g7CiYjNDM7CXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRlbnRyeS0mZ3Q7ZF9wYXJlbnQ7CiYjNDM7CXN0cnVjdCBobGlzdF9ibF9oZWFkICpiID0gaW5fbG9va3VwX2hhc2gocGFyZW50LCBoYXNoKTsKJiM0MzsJc3RydWN0IGRlbnRyeSAqbmV3ID0gX19kX2FsbG9jKHBhcmVudC0mZ3Q7ZF9zYiwgJmFtcDtkZW50cnktJmd0O2RfbmFtZSk7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghbmV3KSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwluZXctJmd0O2RfZmxhZ3MgfD0gRENBQ0hFX1BBUl9MT09LVVA7CiYjNDM7CWxvY2tfbWFwX2FjcXVpcmVfdHJ5KCZhbXA7bmV3LSZndDtsb29rdXBfbWFwKTsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cGFyZW50LSZndDtkX2xvY2spOwomIzQzOwluZXctJmd0O2RfcGFyZW50ID0gZGdldF9kbG9jayhwYXJlbnQpOwomIzQzOwlobGlzdF9hZGRfaGVhZCgmYW1wO25ldy0mZ3Q7ZF9zaWIsICZhbXA7cGFyZW50LSZndDtkX2NoaWxkcmVuKTsKJiM0MzsJaWYgKHBhcmVudC0mZ3Q7ZF9mbGFncyAmYW1wOyBEQ0FDSEVfRElTQ09OTkVDVEVEKQomIzQzOwkJbmV3LSZndDtkX2ZsYWdzIHw9IERDQUNIRV9ESVNDT05ORUNURUQ7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7cGFyZW50LSZndDtkX2xvY2spOwomIzQzOwomIzQzOwlobGlzdF9ibF9sb2NrKGIpOwomIzQzOwlobGlzdF9ibF9hZGRfaGVhZCgmYW1wO25ldy0mZ3Q7ZF9pbl9sb29rdXBfaGFzaCwgYik7CiYjNDM7CWhsaXN0X2JsX3VubG9jayhiKTsKJiM0MzsJcmV0dXJuIG5ldzsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChkX2R1cGxpY2F0ZSk7CiYjNDM7CiBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX2Fub24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlyZXR1cm4gX19kX2FsbG9jKHNiLCBOVUxMKTsKQEAgLTIxNjgsNyAmIzQzOzIyMjQsNiBAQCBzdGF0aWMgdm9pZCBfX2RfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogICogKG9yIG90aGVyd2lzZSBzZXQpIGJ5IHRoZSBjYWxsZXIgdG8gaW5kaWNhdGUgdGhhdCBpdCBpcyBub3cKICAqIGluIHVzZSBieSB0aGUgZGNhY2hlLgogICovCi0gCiB2b2lkIGRfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqZW50cnksIHN0cnVjdCBpbm9kZSAqIGlub2RlKQogewogCUJVR19PTihkX3JlYWxseV9pc19wb3NpdGl2ZShlbnRyeSkpOwpAQCAtMjc1MCw2ICYjNDM7MjgwNSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZW5kX2Rpcl9hZGQoc3RydWN0IGlub2RlICpkaXIsIHVuc2lnbmVkIGludCBuKQogc3RhdGljIHZvaWQgZF93YWl0X2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJaWYgKGxpa2VseShkX2luX2xvb2t1cChkZW50cnkpKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFRlbGwgbG9ja2RlcCB3ZSB3aWxsIHdhaXQgZm9yIHRoZSBsb29rdXAgbG9jaywgYWZ0ZXIKJiM0MzsJCSAqIGRyb3BwaW5nIC0mZ3Q7ZF9sb2NrLCBidXQgd29uJiMzOTt0IGFjdHVhbGx5IHRha2UgaXQuCiYjNDM7CQkgKi8KJiM0MzsJCXNwaW5fcmVsZWFzZSgmYW1wO2RlbnRyeS0mZ3Q7ZF9sb2NrLmRlcF9tYXAsIDApOwomIzQzOwkJbG9ja19tYXBfc3luYygmYW1wO2RlbnRyeS0mZ3Q7bG9va3VwX21hcCk7CiYjNDM7CQlzcGluX2FjcXVpcmUoJmFtcDtkZW50cnktJmd0O2RfbG9jay5kZXBfbWFwLCAwLCAxLCBfVEhJU19JUF8pOwomIzQzOwogCQlkZW50cnktJmd0O2RfZmxhZ3MgfD0gRENBQ0hFX0xPT0tVUF9XQUlURVJTOwogCQl3YWl0X3Zhcl9ldmVudF9zcGlubG9jaygmYW1wO2RlbnRyeS0mZ3Q7ZF9mbGFncywKIAkJCQkJIWRfaW5fbG9va3VwKGRlbnRyeSksCkBAIC0yNzU3LDggJiM0MzsyODIwLDE2IEBAIHN0YXRpYyB2b2lkIGRfd2FpdF9sb29rdXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCX0KIH0KIAotc3RydWN0IGRlbnRyeSAqZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCi0JCQkJY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCiYjNDM7LyogV2hhdCB0byBkbyB3aGVuIF9fZF9hbGxvY19wYXJhbGxlbCBmaW5kcyBhIGRfaW5fbG9va3VwIGRlbnRyeSAqLwomIzQzO2VudW0gYWxsb2NfcGFyYSB7CiYjNDM7CUFMTE9DX1BBUkFfV0FJVCwKJiM0MzsJQUxMT0NfUEFSQV9GQUlMLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZQomIzQzO3N0cnVjdCBkZW50cnkgKl9fZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCiYjNDM7CQkJCSAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiYjNDM7CQkJCSAgZW51bSBhbGxvY19wYXJhIGhvdykKIHsKIAl1bnNpZ25lZCBpbnQgaGFzaCA9IG5hbWUtJmd0O2hhc2g7CiAJc3RydWN0IGhsaXN0X2JsX2hlYWQgKmIgPSBpbl9sb29rdXBfaGFzaChwYXJlbnQsIGhhc2gpOwpAQCAtMjgzMSw2ICYjNDM7MjkwMiwxMiBAQCBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCwKIAkJCXNwaW5fdW5sb2NrKCZhbXA7ZGVudHJ5LSZndDtkX2xvY2spOwogCQkJZ290byByZXRyeTsKIAkJfQomIzQzOwkJaWYgKHVubGlrZWx5KGhvdyA9PSBBTExPQ19QQVJBX0ZBSUwpKSB7CiYjNDM7CQkJLyogbXVzdG4mIzM5O3Qgd2FpdCBmb3IgY29uY3VycmVudCBsb29rdXAgdG8gY29tcGxldGUgKi8KJiM0MzsJCQlzcGluX3VubG9jaygmYW1wO2RlbnRyeS0mZ3Q7ZF9sb2NrKTsKJiM0MzsJCQlkcHV0KG5ldyk7CiYjNDM7CQkJcmV0dXJuIEVSUl9QVFIoLUVXT1VMREJMT0NLKTsKJiM0MzsJCX0KIAkJLyoKIAkJICogc29tZWJvZHkgaXMgbGlrZWx5IHRvIGJlIHN0aWxsIGRvaW5nIGxvb2t1cCBmb3IgaXQ7CiAJCSAqIHBpbiBpdCBhbmQgd2FpdCBmb3IgdGhlbSB0byBmaW5pc2gKQEAgLTI4NTgsMTQgJiM0MzsyOTM1LDc3IEBAIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LAogCX0KIAlobGlzdF9ibF9hZGRfaGVhZCgmYW1wO25ldy0mZ3Q7ZF9pbl9sb29rdXBfaGFzaCwgYik7CiAJaGxpc3RfYmxfdW5sb2NrKGIpOwomIzQzOwlsb2NrX21hcF9hY3F1aXJlX3RyeSgmYW1wO25ldy0mZ3Q7bG9va3VwX21hcCk7CiAJcmV0dXJuIG5ldzsKIG1pc21hdGNoOgogCXNwaW5fdW5sb2NrKCZhbXA7ZGVudHJ5LSZndDtkX2xvY2spOwogCWRwdXQoZGVudHJ5KTsKIAlnb3RvIHJldHJ5OwogfQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRfYWxsb2NfcGFyYWxsZWwoKSAtIGFsbG9jYXRlIGEgbmV3IGRlbnRyeSBhbmQgZW5zdXJlIHVuaXF1ZW5lc3MKJiM0MzsgKiBAcGFyZW50OiBkZW50cnkgb2YgdGhlIHBhcmVudAomIzQzOyAqIEBuYW1lOiAgIG5hbWUgb2YgdGhlIGRlbnRyeSB3aXRoaW4gdGhhdCBwYXJlbnQuCiYjNDM7ICoKJiM0MzsgKiBBIG5ldyBkZW50cnkgaXMgYWxsb2NhdGVkIGFuZCwgcHJvdmlkaW5nIGl0IGlzIHVuaXF1ZSwgYWRkZWQgdG8gdGhlCiYjNDM7ICogcmVsZXZhbnQgaW5kZXguCiYjNDM7ICogSWYgYW4gZXhpc3RpbmcgZGVudHJ5IGlzIGZvdW5kIHdpdGggdGhlIHNhbWUgcGFyZW50L25hbWUgdGhhdCBpcwomIzQzOyAqIG5vdCBkX2luX2xvb2t1cCgpLCB0aGVuIHRoYXQgaXMgcmV0dXJuZWQgaW5zdGVhZC4KJiM0MzsgKiBJZiB0aGUgZXhpc3RpbmcgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCksIGRfYWxsb2NfcGFyYWxsZWwoKSB3YWl0cyBmb3IKJiM0MzsgKiB0aGF0IGxvb2t1cCB0byBjb21wbGV0ZSBiZWZvcmUgcmV0dXJuaW5nIHRoZSBkZW50cnkgYW5kIHRoZW4gZW5zdXJlcyB0aGUKJiM0MzsgKiBtYXRjaCBpcyBzdGlsbCB2YWxpZC4KJiM0MzsgKiBUaHVzIGlmIHRoZSByZXR1cm5lZCBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSB0aGVuIHRoZSBjYWxsZXIgaGFzCiYjNDM7ICogZXhjbHVzaXZlIGFjY2VzcyB1bnRpbCBpdCBjb21wbGV0ZXMgdGhlIGxvb2t1cC4KJiM0MzsgKiBJZiB0aGUgcmV0dXJuZWQgZGVudHJ5IGlzIG5vdCBkX2luX2xvb2t1cCgpIHRoZW4gYSBsb29rdXAgaGFzCiYjNDM7ICogYWxyZWFkeSBjb21wbGV0ZWQuCiYjNDM7ICoKJiM0MzsgKiBUaGUgQG5hbWUgbXVzdCBhbHJlYWR5IGhhdmUgLSZndDtoYXNoIHNldCwgYXMgY2FuIGJlIGFjaGlldmVkCiYjNDM7ICogYnkgZS5nLiB0cnlfbG9va3VwX25vcGVybSgpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogdGhlIGRlbnRyeSwgd2hldGhlciBmb3VuZCBvciBhbGxvY2F0ZWQsIG9yIGFuIGVycm9yICUtRU5PTUVNLgomIzQzOyAqLwomIzQzO3N0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LAomIzQzOwkJCQljb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2RfYWxsb2NfcGFyYWxsZWwocGFyZW50LCBuYW1lLCBBTExPQ19QQVJBX1dBSVQpOwomIzQzO30KIEVYUE9SVF9TWU1CT0woZF9hbGxvY19wYXJhbGxlbCk7CiAKJiM0MzsvKioKJiM0MzsgKiBkX2FsbG9jX3RyeWxvY2soKSAtIGZpbmQgb3IgYWxsb2NhdGUgYSBuZXcgZGVudHJ5CiYjNDM7ICogQHBhcmVudDogZGVudHJ5IG9mIHRoZSBwYXJlbnQKJiM0MzsgKiBAbmFtZTogICBuYW1lIG9mIHRoZSBkZW50cnkgd2l0aGluIHRoYXQgcGFyZW50LgomIzQzOyAqCiYjNDM7ICogQSBuZXcgZGVudHJ5IGlzIGFsbG9jYXRlZCBhbmQsIHByb3ZpZGluZyBpdCBpcyB1bmlxdWUsIGFkZGVkIHRvIHRoZQomIzQzOyAqIHJlbGV2YW50IGluZGV4LgomIzQzOyAqIElmIGFuIGV4aXN0aW5nIGRlbnRyeSBpcyBmb3VuZCB3aXRoIHRoZSBzYW1lIHBhcmVudC9uYW1lIHRoYXQgaXMKJiM0MzsgKiBub3QgZF9pbl9sb29rdXAoKSB0aGVuIHRoYXQgaXMgcmV0dXJuZWQgaW5zdGVhZC4KJiM0MzsgKiBJZiB0aGUgZXhpc3RpbmcgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCksIGRfYWxsb2NfdHJ5bG9jaygpCiYjNDM7ICogcmV0dXJucyB3aXRoIGVycm9yICUtRVdPVUxEQkxPQ0suCiYjNDM7ICogVGh1cyBpZiB0aGUgcmV0dXJuZWQgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCkgdGhlbiB0aGUgY2FsbGVyIGhhcwomIzQzOyAqIGV4Y2x1c2l2ZSBhY2Nlc3MgdW50aWwgaXQgY29tcGxldGVzIHRoZSBsb29rdXAuCiYjNDM7ICogSWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBub3QgZF9pbl9sb29rdXAoKSB0aGVuIGEgbG9va3VwIGhhcwomIzQzOyAqIGFscmVhZHkgY29tcGxldGVkLgomIzQzOyAqCiYjNDM7ICogVGhlIEBuYW1lIG5lZWQgbm90IGFscmVhZHkgaGF2ZSAtJmd0O2hhc2ggc2V0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogdGhlIGRlbnRyeSwgd2hldGhlciBmb3VuZCBvciBhbGxvY2F0ZWQsIG9yIGFuIGVycm9yCiYjNDM7ICogICAgJS1FTk9NRU0sICUtRVdPVUxEQkxPQ0ssICUtRUFDQ0VTIChmb3IgYSBiYWQgbmFtZSkgb3IKJiM0MzsgKiAgICBhbnl0aGluZyByZXR1cm5lZCBieSAtJmd0O2RfaGFzaCgpLgomIzQzOyAqLwomIzQzO3N0cnVjdCBkZW50cnkgKmRfYWxsb2NfdHJ5bG9jayhzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBxc3RyICpuYW1lKQomIzQzO3sKJiM0MzsJc3RydWN0IGRlbnRyeSAqZGU7CiYjNDM7CiYjNDM7CWRlID0gdHJ5X2xvb2t1cF9ub3Blcm0obmFtZSwgcGFyZW50KTsKJiM0MzsJaWYgKCFkZSkKJiM0MzsJCWRlID0gX19kX2FsbG9jX3BhcmFsbGVsKHBhcmVudCwgbmFtZSwgQUxMT0NfUEFSQV9GQUlMKTsKJiM0MzsJcmV0dXJuIGRlOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGRfYWxsb2NfdHJ5bG9jayk7CiYjNDM7CiAvKgogICogTW92ZSBkZW50cnkgZnJvbSBpbi1sb29rdXAgc3RhdGUgdG8gYnVzeS1uZWdhdGl2ZSBvbmUuCiAgKgpAQCAtMjg5NCw2ICYjNDM7MzAzNCw3IEBAIHN0YXRpYyB2b2lkIF9fZF9sb29rdXBfdW5oYXNoKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAliID0gaW5fbG9va3VwX2hhc2goZGVudHJ5LSZndDtkX3BhcmVudCwgZGVudHJ5LSZndDtkX25hbWUuaGFzaCk7CiAJaGxpc3RfYmxfbG9jayhiKTsKIAlkZW50cnktJmd0O2RfZmxhZ3MgJmFtcDs9IH5EQ0FDSEVfUEFSX0xPT0tVUDsKJiM0MzsJbG9ja19tYXBfcmVsZWFzZSgmYW1wO2RlbnRyeS0mZ3Q7bG9va3VwX21hcCk7CiAJX19obGlzdF9ibF9kZWwoJmFtcDtkZW50cnktJmd0O2RfaW5fbG9va3VwX2hhc2gpOwogCWhsaXN0X2JsX3VubG9jayhiKTsKIAlkZW50cnktJmd0O3dhaXRlcnMgPSBOVUxMOwpAQCAtMjkzMSwxNSAmIzQzOzMwNzIsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fZF9hZGQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCX0KIAlpZiAodW5saWtlbHkob3BzKSkKIAkJZF9zZXRfZF9vcChkZW50cnksIG9wcyk7Ci0JaWYgKGlub2RlKSB7Ci0JCXVuc2lnbmVkIGFkZF9mbGFncyA9IGRfZmxhZ3NfZm9yX2lub2RlKGlub2RlKTsKLQkJaGxpc3RfYWRkX2hlYWQoJmFtcDtkZW50cnktJmd0O2RfYWxpYXMsICZhbXA7aW5vZGUtJmd0O2lfZGVudHJ5KTsKLQkJcmF3X3dyaXRlX3NlcWNvdW50X2JlZ2luKCZhbXA7ZGVudHJ5LSZndDtkX3NlcSk7Ci0JCV9fZF9zZXRfaW5vZGVfYW5kX3R5cGUoZGVudHJ5LCBpbm9kZSwgYWRkX2ZsYWdzKTsKLQkJcmF3X3dyaXRlX3NlcWNvdW50X2VuZCgmYW1wO2RlbnRyeS0mZ3Q7ZF9zZXEpOwotCQlmc25vdGlmeV91cGRhdGVfZmxhZ3MoZGVudHJ5KTsKLQl9Ci0JX19kX3JlaGFzaChkZW50cnkpOwomIzQzOwlpZiAoaW5vZGUpCiYjNDM7CQlfX2RfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiYjNDM7CWlmIChkX3VuaGFzaGVkKGRlbnRyeSkpCiYjNDM7CQlfX2RfcmVoYXNoKGRlbnRyeSk7CiAJaWYgKGRpcikgewogCQllbmRfZGlyX2FkZChkaXIsIG4pOwogCQlfX2Rfd2FrZV9pbl9sb29rdXBfd2FpdGVycyhkZW50cnkpOwpAQCAtMzI0MSw3ICYjNDM7MzM3Nyw3IEBAIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJaWYgKElTX0VSUihpbm9kZSkpCiAJCXJldHVybiBFUlJfQ0FTVChpbm9kZSk7CiAKLQlCVUdfT04oIWRfdW5oYXNoZWQoZGVudHJ5KSk7CiYjNDM7CUJVR19PTihkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKTsKIAogCWlmICghaW5vZGUpCiAJCWdvdG8gb3V0OwpAQCAtMzI5Nyw2ICYjNDM7MzQzMyw4IEBAIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAgKiBAaW5vZGU6ICB0aGUgaW5vZGUgd2hpY2ggbWF5IGhhdmUgYSBkaXNjb25uZWN0ZWQgZGVudHJ5CiAgKiBAZGVudHJ5OiBhIG5lZ2F0aXZlIGRlbnRyeSB3aGljaCB3ZSB3YW50IHRvIHBvaW50IHRvIHRoZSBpbm9kZS4KICAqCiYjNDM7ICogQGRlbnRyeSBtdXN0IGJlIG5lZ2F0aXZlIGFuZCBtYXkgYmUgaW4tbG9va3VwIG9yIHVuaGFzaGVkIG9yIGhhc2hlZC4KJiM0MzsgKgogICogSWYgaW5vZGUgaXMgYSBkaXJlY3RvcnkgYW5kIGhhcyBhbiBJU19ST09UIGFsaWFzLCB0aGVuIGRfbW92ZSB0aGF0IGluCiAgKiBwbGFjZSBvZiB0aGUgZ2l2ZW4gZGVudHJ5IGFuZCByZXR1cm4gaXQsIGVsc2Ugc2ltcGx5IGRfYWRkIHRoZSBpbm9kZQogICogdG8gdGhlIGRlbnRyeSBhbmQgcmV0dXJuIE5VTEwuCkBAIC0zMzA0LDE2ICYjNDM7MzQ0MiwxNCBAQCBzdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhc19vcHMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogICogSWYgYSBub24tSVNfUk9PVCBkaXJlY3RvcnkgaXMgZm91bmQsIHRoZSBmaWxlc3lzdGVtIGlzIGNvcnJ1cHQsIGFuZAogICogd2Ugc2hvdWxkIGVycm9yIG91dDogZGlyZWN0b3JpZXMgY2FuJiMzOTt0IGhhdmUgbXVsdGlwbGUgYWxpYXNlcy4KICAqCi0gKiBUaGlzIGlzIG5lZWRlZCBpbiB0aGUgbG9va3VwIHJvdXRpbmUgb2YgYW55IGZpbGVzeXN0ZW0gdGhhdCBpcyBleHBvcnRhYmxlCi0gKiAodmlhIGtuZnNkKSBzbyB0aGF0IHdlIGNhbiBidWlsZCBkY2FjaGUgcGF0aHMgdG8gZGlyZWN0b3JpZXMgZWZmZWN0aXZlbHkuCiYjNDM7ICogVGhpcyBzaG91bGQgYmUgdXNlZCB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiAtJmd0O2xvb2t1cCgpIGFuZCB0bwomIzQzOyAqIGluc3RhbnRpYXRlIHRoZSByZXN1bHQgb2YgLSZndDtta2RpcigpLCBpcyBvZnRlbiB1c2VmdWwgZm9yCiYjNDM7ICogLSZndDthdG9taWNfb3BlbiwgYW5kIG1heSBiZSB1c2VkIHRvIGluc3RhbnRpYXRlIG90aGVyIG9iamVjdHMuCiAgKgogICogSWYgYSBkZW50cnkgd2FzIGZvdW5kIGFuZCBtb3ZlZCwgdGhlbiBpdCBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSBOVUxMCi0gKiBpcyByZXR1cm5lZC4gIFRoaXMgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIG9mIC0mZ3Q7bG9va3VwLgomIzQzOyAqIGlzIHJldHVybmVkLiAgVGhpcyBtYXRjaGVzIHRoZSBleHBlY3RlZCByZXR1cm4gdmFsdWUgb2YgLSZndDtsb29rdXAgYW5kCiYjNDM7ICogLSZndDtta2Rpci4KICAqCi0gKiBDbHVzdGVyIGZpbGVzeXN0ZW1zIG1heSBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBhIG5lZ2F0aXZlLCBoYXNoZWQgZGVudHJ5LgotICogSW4gdGhhdCBjYXNlLCB3ZSBrbm93IHRoYXQgdGhlIGlub2RlIHdpbGwgYmUgYSByZWd1bGFyIGZpbGUsIGFuZCBhbHNvIHRoaXMKLSAqIHdpbGwgb25seSBvY2N1ciBkdXJpbmcgYXRvbWljX29wZW4uIFNvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSBkZW50cnkKLSAqIGJlaW5nIGFscmVhZHkgaGFzaGVkIG9ubHkgaW4gdGhlIGZpbmFsIGNhc2UuCiAgKi8KIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDIwYTY1MzRlYTNlZmYuLmU5NzhhNzVlYjhhMTQgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmFtZWkuYwpAQCAtMTkzMyw3ICYjNDM7MTkzMyw3IEBAIHN0YXRpYyBub2lubGluZSBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfc2xvdyhjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGlyLSZndDtkX2lub2RlOwogCXN0cnVjdCBkZW50cnkgKnJlczsKIAlpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7Ci0JcmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzKTsKJiM0MzsJcmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzIHwgTE9PS1VQX1NIQVJFRCk7CiAJaW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7CiAJcmV0dXJuIHJlczsKIH0KQEAgLTE5NDcsNyAmIzQzOzE5NDcsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX3Nsb3dfa2lsbGFibGUoY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAKIAlpZiAoaW5vZGVfbG9ja19zaGFyZWRfa2lsbGFibGUoaW5vZGUpKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVFIpOwotCXJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyk7CiYjNDM7CXJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyB8IExPT0tVUF9TSEFSRUQpOwogCWlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpOwogCXJldHVybiByZXM7CiB9CkBAIC0yOTQ2LDggJiM0MzsyOTQ2LDggQEAgc3RydWN0IGRlbnRyeSAqc3RhcnRfZGlyb3Aoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqbmFtZSwKICAqIGVuZF9kaXJvcCAtIHNpZ25hbCBjb21wbGV0aW9uIG9mIGEgZGlyb3AKICAqIEBkZTogdGhlIGRlbnRyeSB3aGljaCB3YXMgcmV0dXJuZWQgYnkgc3RhcnRfZGlyb3Agb3Igc2ltaWxhci4KICAqCi0gKiBJZiB0aGUgZGUgaXMgYW4gZXJyb3IsIG5vdGhpbmcgaGFwcGVucy4gT3RoZXJ3aXNlIGFueSBsb2NrIHRha2VuIHRvCi0gKiBwcm90ZWN0IHRoZSBkZW50cnkgaXMgZHJvcHBlZCBhbmQgdGhlIGRlbnRyeSBpdHNlbGYgaXMgcmVsZWFzZSAoZHB1dCgpKS4KJiM0MzsgKiBJZiB0aGUgQGRlIGlzIGFuIGVycm9yLCBub3RoaW5nIGhhcHBlbnMuIE90aGVyd2lzZSBhbnkgbG9jayB0YWtlbiB0bwomIzQzOyAqIHByb3RlY3QgdGhlIGRlbnRyeSBpcyBkcm9wcGVkIGFuZCB0aGUgZGVudHJ5IGl0c2VsZiBpcyByZWxlYXNlZCAoZHB1dCgpKS4KICAqLwogdm9pZCBlbmRfZGlyb3Aoc3RydWN0IGRlbnRyeSAqZGUpCiB7CkBAIC0zMjEwLDcgJiM0MzszMjEwLDcgQEAgRVhQT1JUX1NZTUJPTChsb29rdXBfb25lKTsKIC8qKgogICogbG9va3VwX29uZV91bmxvY2tlZCAtIGxvb2t1cCBzaW5nbGUgcGF0aG5hbWUgY29tcG9uZW50CiAgKiBAaWRtYXA6CWlkbWFwIG9mIHRoZSBtb3VudCB0aGUgbG9va3VwIGlzIHBlcmZvcm1lZCBmcm9tCi0gKiBAbmFtZToJcXN0ciBvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cAomIzQzOyAqIEBuYW1lOglxc3RyIGhvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cAogICogQGJhc2U6CWJhc2UgZGlyZWN0b3J5IHRvIGxvb2t1cCBmcm9tCiAgKgogICogVGhpcyBjYW4gYmUgdXNlZCBmb3IgaW4ta2VybmVsIGZpbGVzeXN0ZW0gY2xpZW50cyBzdWNoIGFzIGZpbGUgc2VydmVycy4KQEAgLTMyNDMsNyAmIzQzOzMyNDMsNyBAQCBFWFBPUlRfU1lNQk9MKGxvb2t1cF9vbmVfdW5sb2NrZWQpOwogLyoqCiAgKiBsb29rdXBfb25lX3Bvc2l0aXZlX2tpbGxhYmxlIC0gbG9va3VwIHNpbmdsZSBwYXRobmFtZSBjb21wb25lbnQKICAqIEBpZG1hcDoJaWRtYXAgb2YgdGhlIG1vdW50IHRoZSBsb29rdXAgaXMgcGVyZm9ybWVkIGZyb20KLSAqIEBuYW1lOglxc3RyIG9sZGluZyBwYXRobmFtZSBjb21wb25lbnQgdG8gbG9va3VwCiYjNDM7ICogQG5hbWU6CXFzdHIgaG9sZGluZyBwYXRobmFtZSBjb21wb25lbnQgdG8gbG9va3VwCiAgKiBAYmFzZToJYmFzZSBkaXJlY3RvcnkgdG8gbG9va3VwIGZyb20KICAqCiAgKiBUaGlzIGhlbHBlciB3aWxsIHlpZWxkIEVSUl9QVFIoLUVOT0VOVCkgb24gbmVnYXRpdmVzLiBUaGUgaGVscGVyIHJldHVybnMKQEAgLTMyNTksNyAmIzQzOzMyNTksNyBAQCBFWFBPUlRfU1lNQk9MKGxvb2t1cF9vbmVfdW5sb2NrZWQpOwogICogdGhlIGlfcndzZW0gaXRzZWxmIGlmIG5lY2Vzc2FyeS4gIElmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgb3IKICAqIGRlbGl2ZXJlZCwgaXQgd2lsbCByZXR1cm4gJS1FSU5UUiBpZiB0aGUgbG9jayBpcyBuZWVkZWQuCiAgKgotICogUmV0dXJuczogQSBkZW50cnksIHBvc3NpYmx5IG5lZ2F0aXZlLCBvcgomIzQzOyAqIFJldHVybnM6IEEgcG9zaXRpdmUgZGVudHJ5LCBvcgogICoJICAgLSBzYW1lIGVycm9ycyBhcyBsb29rdXBfb25lX3VubG9ja2VkKCkgb3IKICAqCSAgIC0gRVJSX1BUUigtRUlOVFIpIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuCiAgKi8KQEAgLTMzODEsNyAmIzQzOzMzODEsNyBAQCBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfbm9wZXJtX3Bvc2l0aXZlX3VubG9ja2VkKHN0cnVjdCBxc3RyICpuYW1lLAogRVhQT1JUX1NZTUJPTChsb29rdXBfbm9wZXJtX3Bvc2l0aXZlX3VubG9ja2VkKTsKIAogLyoqCi0gKiBzdGFydF9jcmVhdGluZyAtIHByZXBhcmUgdG8gY3JlYXRlIGEgZ2l2ZW4gbmFtZSB3aXRoIHBlcm1pc3Npb24gY2hlY2tpbmcKJiM0MzsgKiBzdGFydF9jcmVhdGluZyAtIHByZXBhcmUgdG8gYWNjZXNzIG9yIGNyZWF0ZSBhIGdpdmVuIG5hbWUgd2l0aCBwZXJtaXNzaW9uIGNoZWNraW5nCiAgKiBAaWRtYXA6ICBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBwcmVwYXJlIHRvIGNyZWF0ZSB0aGUgbmFtZQogICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgY3JlYXRlZApAQCAtMzQxMyw4ICYjNDM7MzQxMyw4IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmcpOwogICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIGZpbmQgdGhlIG5hbWUKICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIHJlbW92ZWQKICAqCi0gKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGluIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZwotICogYW4gb2JqZWN0IGZyb20gYSBkaXJlY3RvcnkuICBQZXJtaXNzaW9uIGNoZWNraW5nIChNQVlfRVhFQykgaXMgcGVyZm9ybWVkCiYjNDM7ICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmcgYW4gb2JqZWN0CiYjNDM7ICogZnJvbSBhIGRpcmVjdG9yeS4gIFBlcm1pc3Npb24gY2hlY2tpbmcgKE1BWV9FWEVDKSBpcyBwZXJmb3JtZWQKICAqIGFnYWluc3QgQGlkbWFwLgogICoKICAqIElmIHRoZSBuYW1lIGRvZXNuJiMzOTt0IGV4aXN0LCBhbiBlcnJvciBpcyByZXR1cm5lZC4KQEAgLTM0NDAsNyAmIzQzOzM0NDAsNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X3JlbW92aW5nKTsKICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBwcmVwYXJlIHRvIGNyZWF0ZSB0aGUgbmFtZQogICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgY3JlYXRlZAogICoKLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIGNyZWF0aW5nCiYjNDM7ICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmcKICAqIGFuIG9iamVjdCBpbiBhIGRpcmVjdG9yeS4gIFBlcm1pc3Npb24gY2hlY2tpbmcgKE1BWV9FWEVDKSBpcyBwZXJmb3JtZWQKICAqIGFnYWluc3QgQGlkbWFwLgogICoKQEAgLTM0NjksNyAmIzQzOzM0NjksNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX2tpbGxhYmxlKTsKICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBmaW5kIHRoZSBuYW1lCiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSByZW1vdmVkCiAgKgotICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmcKJiM0MzsgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZwogICogYW4gb2JqZWN0IGZyb20gYSBkaXJlY3RvcnkuICBQZXJtaXNzaW9uIGNoZWNraW5nIChNQVlfRVhFQykgaXMgcGVyZm9ybWVkCiAgKiBhZ2FpbnN0IEBpZG1hcC4KICAqCkBAIC0zNDk5LDcgJiM0MzszNDk5LDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZ19raWxsYWJsZSk7CiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gcHJlcGFyZSB0byBjcmVhdGUgdGhlIG5hbWUKICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWQKICAqCi0gKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGluIHBlcmZvcm1lZCBwcmlvciB0byBjcmVhdGluZwomIzQzOyAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaXMgcGVyZm9ybWVkIHByaW9yIHRvIGNyZWF0aW5nCiAgKiBhbiBvYmplY3QgaW4gYSBkaXJlY3RvcnkuCiAgKgogICogSWYgdGhlIG5hbWUgYWxyZWFkeSBleGlzdHMsIGEgcG9zaXRpdmUgZGVudHJ5IGlzIHJldHVybmVkLgpAQCAtMzUyMiw3ICYjNDM7MzUyMiw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmdfbm9wZXJtKTsKICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBmaW5kIHRoZSBuYW1lCiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSByZW1vdmVkCiAgKgotICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmcKJiM0MzsgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZwogICogYW4gb2JqZWN0IGZyb20gYSBkaXJlY3RvcnkuCiAgKgogICogSWYgdGhlIG5hbWUgZG9lc24mIzM5O3QgZXhpc3QsIGFuIGVycm9yIGlzIHJldHVybmVkLgpAQCAtMzU0MywxMSAmIzQzOzM1NDMsMTEgQEAgc3RydWN0IGRlbnRyeSAqc3RhcnRfcmVtb3Zpbmdfbm9wZXJtKHN0cnVjdCBkZW50cnkgKnBhcmVudCwKIEVYUE9SVF9TWU1CT0woc3RhcnRfcmVtb3Zpbmdfbm9wZXJtKTsKIAogLyoqCi0gKiBzdGFydF9jcmVhdGluZ19kZW50cnkgLSBwcmVwYXJlIHRvIGNyZWF0ZSBhIGdpdmVuIGRlbnRyeQotICogQHBhcmVudDogZGlyZWN0b3J5IGZyb20gd2hpY2ggZGVudHJ5IHNob3VsZCBiZSByZW1vdmVkCi0gKiBAY2hpbGQ6ICB0aGUgZGVudHJ5IHRvIGJlIHJlbW92ZWQKJiM0MzsgKiBzdGFydF9jcmVhdGluZ19kZW50cnkgLSBwcmVwYXJlIHRvIGFjY2VzcyBvciBjcmVhdGUgYSBnaXZlbiBkZW50cnkKJiM0MzsgKiBAcGFyZW50OiBkaXJlY3Rvcnkgb2YgZGVudHJ5CiYjNDM7ICogQGNoaWxkOiAgdGhlIGRlbnRyeSB0byBiZSBwcmVwYXJlZAogICoKLSAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW4gb3RoZXIgZGlyb3BzIGFuZAomIzQzOyAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW5zdCBvdGhlciBkaXJvcHMgYW5kCiAgKiB0aGUgdmFsaWRpdHkgb2YgdGhlIGRlbnRyeSBpcyBjaGVja2VkOiBjb3JyZWN0IHBhcmVudCBhbmQgc3RpbGwgaGFzaGVkLgogICoKICAqIElmIHRoZSBkZW50cnkgaXMgdmFsaWQgYW5kIG5lZ2F0aXZlIGEgcmVmZXJlbmNlIGlzIHRha2VuIGFuZApAQCAtMzU4MCw3ICYjNDM7MzU4MCw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmdfZGVudHJ5KTsKICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRlbnRyeSBzaG91bGQgYmUgcmVtb3ZlZAogICogQGNoaWxkOiAgdGhlIGRlbnRyeSB0byBiZSByZW1vdmVkCiAgKgotICogQSBsb2NrIGlzIHRha2VuIHRvIHByb3RlY3QgdGhlIGRlbnRyeSBhZ2FpbiBvdGhlciBkaXJvcHMgYW5kCiYjNDM7ICogQSBsb2NrIGlzIHRha2VuIHRvIHByb3RlY3QgdGhlIGRlbnRyeSBhZ2FpbnN0IG90aGVyIGRpcm9wcyBhbmQKICAqIHRoZSB2YWxpZGl0eSBvZiB0aGUgZGVudHJ5IGlzIGNoZWNrZWQ6IGNvcnJlY3QgcGFyZW50IGFuZCBzdGlsbCBoYXNoZWQuCiAgKgogICogSWYgdGhlIGRlbnRyeSBpcyB2YWxpZCBhbmQgcG9zaXRpdmUsIGEgcmVmZXJlbmNlIGlzIHRha2VuIGFuZApAQCAtNDQ0MCwxMiAmIzQzOzQ0NDAsMTQgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvcjsKIAl1bW9kZV90IG1vZGU7CiAJYm9vbCBnb3Rfd3JpdGU7CiYjNDM7CXVuc2lnbmVkIGludCBzaGFyZWRfZmxhZzsKIAogcmV0cnk6CiAJb3Blbl9mbGFnID0gb3AtJmd0O29wZW5fZmxhZzsKIAlnb3Rfd3JpdGUgPSBmYWxzZTsKIAltb2RlID0gb3AtJmd0O21vZGU7CiAJY3JlYXRlX2Vycm9yID0gMDsKJiM0MzsJc2hhcmVkX2ZsYWcgPSAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpID8gMCA6IExPT0tVUF9TSEFSRUQ7CiAKIAlpZiAob3Blbl9mbGFnICZhbXA7IChPX0NSRUFUIHwgT19UUlVOQyB8IE9fV1JPTkxZIHwgT19SRFdSKSkgewogCQlnb3Rfd3JpdGUgPSAhbW50X3dhbnRfd3JpdGUobmQtJmd0O3BhdGgubW50KTsKQEAgLTQ0NTQsMTAgJiM0Mzs0NDU2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAqIGEgZGlmZmVyZW50IGVycm9yOyB3ZSYjMzk7bGwgYmUgZHJvcHBpbmcgdGhpcyBvbmUgYW55d2F5LgogCQkgKi8KIAl9Ci0JaWYgKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKQotCQlpbm9kZV9sb2NrKGRpcl9pbm9kZSk7Ci0JZWxzZQomIzQzOwlpZiAoc2hhcmVkX2ZsYWcpCiAJCWlub2RlX2xvY2tfc2hhcmVkKGRpcl9pbm9kZSk7CiYjNDM7CWVsc2UKJiM0MzsJCWlub2RlX2xvY2soZGlyX2lub2RlKTsKIAogCWlmICh1bmxpa2VseShJU19ERUFERElSKGRpcl9pbm9kZSkpKSB7CiAJCWRlbnRyeSA9IEVSUl9QVFIoLUVOT0VOVCk7CkBAIC00NTI2LDcgJiM0Mzs0NTI4LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAogCWlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7CiAJCXN0cnVjdCBkZW50cnkgKnJlcyA9IGRpcl9pbm9kZS0mZ3Q7aV9vcC0mZ3Q7bG9va3VwKGRpcl9pbm9kZSwgZGVudHJ5LAotCQkJCQkJCSAgICAgbmQtJmd0O2ZsYWdzKTsKJiM0MzsJCQkJCQkJICAgICBuZC0mZ3Q7ZmxhZ3MgfCBzaGFyZWRfZmxhZyk7CiAJCWRfbG9va3VwX2RvbmUoZGVudHJ5KTsKIAkJaWYgKHVubGlrZWx5KHJlcykpIHsKIAkJCWlmIChJU19FUlIocmVzKSkgewpAQCAtNDU3NCwxMCAmIzQzOzQ1NzYsMTAgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9PUEVORUQpCiAJCQlmc25vdGlmeV9vcGVuKGZpbGUpOwogCX0KLQlpZiAoKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSB8fCBjcmVhdGVfZXJyb3IpCi0JCWlub2RlX3VubG9jayhkaXJfaW5vZGUpOwotCWVsc2UKJiM0MzsJaWYgKHNoYXJlZF9mbGFnKQogCQlpbm9kZV91bmxvY2tfc2hhcmVkKGRpcl9pbm9kZSk7CiYjNDM7CWVsc2UKJiM0MzsJCWlub2RlX3VubG9jayhkaXJfaW5vZGUpOwogCiAJaWYgKGdvdF93cml0ZSkKIAkJbW50X2Ryb3Bfd3JpdGUobmQtJmd0O3BhdGgubW50KTsKZGlmZiAtLWdpdCBhL2ZzL25mcy91bmxpbmsuYyBiL2ZzL25mcy91bmxpbmsuYwppbmRleCBiNTdjZmFhNGQ1MTZmLi5jOGQ3MTIyMDRlNjQ5IDEwMDY0NAotLS0gYS9mcy9uZnMvdW5saW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmZzL3VubGluay5jCkBAIC02Nyw2ICYjNDM7NjcsNyBAQCBzdGF0aWMgdm9pZCBuZnNfYXN5bmNfdW5saW5rX3JlbGVhc2Uodm9pZCAqY2FsbGRhdGEpCiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0mZ3Q7ZF9zYjsKIAogCXVwX3JlYWRfbm9uX293bmVyKCZhbXA7TkZTX0koZF9pbm9kZShkZW50cnktJmd0O2RfcGFyZW50KSktJmd0O3JtZGlyX3NlbSk7CiYjNDM7CWRfbG9va3VwX2FjcXVpcmUoZGVudHJ5KTsKIAlkX2xvb2t1cF9kb25lKGRlbnRyeSk7CiAJbmZzX2ZyZWVfdW5saW5rZGF0YShkYXRhKTsKIAlkcHV0KGRlbnRyeSk7CkBAIC0xNTksNiAmIzQzOzE2MCw4IEBAIHN0YXRpYyBpbnQgbmZzX2NhbGxfdW5saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mCiAJCXJldHVybiByZXQ7CiAJfQogCWRhdGEtJmd0O2RlbnRyeSA9IGFsaWFzOwomIzQzOwlkX2xvb2t1cF9yZWxlYXNlKGFsaWFzKTsKJiM0MzsKIAluZnNfZG9fY2FsbF91bmxpbmsoaW5vZGUsIGRhdGEpOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKaW5kZXggNGIxZmY5OTYwOGUwMS4uZTdlM2VmMDUzMTNiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCkBAIC0xMTYsNiAmIzQzOzExNiw4IEBAIHN0cnVjdCBkZW50cnkgewogCQkJCQkgKiBwb3NzaWJsZSEKIAkJCQkJICovCiAKJiM0MzsJLyogbG9ja2RlcCB0cmFja2luZyBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrcyAqLwomIzQzOwlzdHJ1Y3QgbG9ja2RlcF9tYXAJCWxvb2t1cF9tYXA7CiAJc3RydWN0IGxpc3RfaGVhZCBkX2xydTsJCS8qIExSVSBsaXN0ICovCiAJc3RydWN0IGhsaXN0X25vZGUgZF9zaWI7CS8qIGNoaWxkIG9mIHBhcmVudCBsaXN0ICovCiAJc3RydWN0IGhsaXN0X2hlYWQgZF9jaGlsZHJlbjsJLyogb3VyIGNoaWxkcmVuICovCkBAIC0yNTcsNyAmIzQzOzI1OSw5IEBAIGV4dGVybiB2b2lkIGRfZGVsZXRlKHN0cnVjdCBkZW50cnkgKik7CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2Moc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTsKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IHN0cnVjdCBxc3RyICopOwomIzQzO2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY190cnlsb2NrKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfc3BsaWNlX2FsaWFzKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwomIzQzO3N0cnVjdCBkZW50cnkgKmRfZHVwbGljYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiAvKiB3ZWlyZCBwcm9jZnMgbWVzczsgKk5PVCogZXhwb3J0ZWQgKi8KIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9zcGxpY2VfYWxpYXNfb3BzKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosCiAJCQkJCSAgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICopOwpAQCAtNTUyLDYgJiM0Mzs1NTYsMzYgQEAgc3RhdGljIGlubGluZSBpbnQgc2ltcGxlX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAogdW5zaWduZWQgbG9uZyB2ZnNfcHJlc3N1cmVfcmF0aW8odW5zaWduZWQgbG9uZyB2YWwpOwogCiYjNDM7LyoqCiYjNDM7ICogZF9sb29rdXBfcmVsZWFzZSAtIHJlbGVhc2Ugb3duZXJzaGlwIG9mIERDQUNIRV9QQVJfTE9PS1VQIGxvY2sKJiM0MzsgKiBAZGVudHJ5OiBkZW50cnkgdGhhdCBpcyBsb2NrZWQKJiM0MzsgKgomIzQzOyAqIElmIGFuIGluLWxvb2t1cCBkZW50cnkgaXMgdG8gYmUgcGFzc2VkIHRvIGFub3RoZXIgdGhyZWFkIHdoaWNoCiYjNDM7ICogd2lsbCBkcm9wIHRoZSBpbi1sb29rdXAgbG9jaywgdGhlbiBkX2xvb2t1cF9yZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWQKJiM0MzsgKiB0byB0ZWxsIGxvY2tkZXAgdGhhdCB0aGlzIHRocmVhZCBubyBsb2NrIGhvbGRzIHRoZSBsb2NrLiAgVGhlCiYjNDM7ICogdGhyZWFkIHRoYXQgcmVjZWl2ZXMgdGhlIGxvY2sgbXVzdCBjYWxsIGRfbG9va3VwX2FjcXVpcmUoKSB0bwomIzQzOyAqIGFjcXVpcmUgdGhlIGxvY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGRfbG9va3VwX3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQomIzQzO3sKJiM0MzsJaWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpCiYjNDM7CQlsb2NrX21hcF9yZWxlYXNlKCZhbXA7ZGVudHJ5LSZndDtsb29rdXBfbWFwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZF9sb29rdXBfYWNxdWlyZSAtIGFjcXVpcmUgb3duZXJzaGlwIG9mIERDQUNIRV9QQVJfTE9PS1VQIGxvY2sKJiM0MzsgKiBAZGVudHJ5OiBkZW50cnkgdGhhdCBpcyBsb2NrZWQKJiM0MzsgKgomIzQzOyAqIElmIGFuIGluLWxvb2t1cCBkZW50cnkgd2FzIHBhc3NlZCB0byB0aGlzIHRocmVhZCwgdGhlCiYjNDM7ICogZF9sb29rdXBfYWNxdWlyZSgpIG11c3QgYmUgY2FsbGVkIHRvIHRlbGwgbG9ja2RlcCB0aGF0IHRoaXMKJiM0MzsgKiB0aHJlYWQgbm93IG93bnMgdGhlIERDQUNIRV9QQVJfTE9PS1VQIGxvY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGRfbG9va3VwX2FjcXVpcmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQomIzQzO3sKJiM0MzsJaWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpCiYjNDM7CQlsb2NrX21hcF9hY3F1aXJlX3RyeSgmYW1wO2RlbnRyeS0mZ3Q7bG9va3VwX21hcCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBkX2lub2RlIC0gR2V0IHRoZSBhY3R1YWwgaW5vZGUgb2YgdGhpcyBkZW50cnkKICAqIEBkZW50cnk6IFRoZSBkZW50cnkgdG8gcXVlcnkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmFtZWkuaCBiL2luY2x1ZGUvbGludXgvbmFtZWkuaAppbmRleCA4NmQ2NTdiMjRmYzZhLi42NWYwZjU3MTI4ODVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25hbWVpLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uYW1laS5oCkBAIC0zMiw4ICYjNDM7MzIsOSBAQCBlbnVtIHsgTUFYX05FU1RFRF9MSU5LUyA9IDggfTsKICNkZWZpbmUgTE9PS1VQX0NSRUFURQkJQklUKDE3KQkvKiAuLi4gaW4gb2JqZWN0IGNyZWF0aW9uICovCiAjZGVmaW5lIExPT0tVUF9FWENMCQlCSVQoMTgpCS8qIC4uLiBpbiB0YXJnZXQgbXVzdCBub3QgZXhpc3QgKi8KICNkZWZpbmUgTE9PS1VQX1JFTkFNRV9UQVJHRVQJQklUKDE5KQkvKiAuLi4gaW4gZGVzdGluYXRpb24gb2YgcmVuYW1lKCkgKi8KJiM0MzsjZGVmaW5lIExPT0tVUF9TSEFSRUQJCUJJVCgyMCkgLyogUGFyZW50IGxvY2sgaXMgaGVsZCBzaGFyZWQgKi8KIAotLyogNCBzcGFyZSBiaXRzIGZvciBpbnRlbnQgKi8KJiM0MzsvKiAzIHNwYXJlIGJpdHMgZm9yIGludGVudCAqLwogCiAvKiBTY29waW5nIGZsYWdzIGZvciBsb29rdXAuICovCiAjZGVmaW5lIExPT0tVUF9OT19TWU1MSU5LUwlCSVQoMjQpIC8qIE5vIHN5bWxpbmsgY3Jvc3NpbmcuICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDg1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRXZhbHVhdGlvbjogZGNhY2hlIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGxvb2sgb3ZlciB0aGlzIHBhdGNoIHNlcmllcyBmb3IgZnV6emluZyBwb3RlbnRpYWwgd2l0aCBzeXprYWxsZXIuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgpGaXJzdCwgdGhlIGRpZmYuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpLCBzcGVjaWZpY2FsbHkgdGhlIGRjYWNoZSBhbmQgbmFtZWkgc3Vic3lzdGVtcywgd2l0aCBhIGxpdHRsZSB0b3VjaCBvZiBORlMuIFRoaXMgaXMgKmNyaXRpY2FsKiBpbmZyYXN0cnVjdHVyZTsgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcGF0aCBsb29rdXAsIGRlbnRyeSBhbGxvY2F0aW9uLCBsb2NraW5nLCBhbmQgc29tZSBpbXBvcnRhbnQgYXNzZXJ0aW9ucy4gVGhpcyBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdGhlIGZpbGVzeXN0ZW0sIHNvIGl0JiMzOTtzIGludGVyZXN0aW5nLgoKVGhlIGBEb2N1bWVudGF0aW9uL2AgY2hhbmdlcyBhcmUgdXN1YWxseSBhIGdvb2Qgc2lnbiB0aGF0IHRoZXkgd2VyZSB0aGlua2luZyBhYm91dCBmdXp6aW5nIGFuZCB0cnlpbmcgdG8ga2VlcCB0aGluZ3MgZWFzaWx5IGF2YWlsYWJsZSBmb3IgdGhvc2UgdGhhdCB3YW50IHRvIGNvbnRyaWJ1dGUuCgpBIGRlZXBlciBkaXZlIGludG8gdGhlIGRpZmYgc2hvd3Mgc3Vic3RhbnRpYWwgY2hhbmdlczogd2UgaGF2ZSBhIG5ldyBgbG9va3VwX21hcGAgdW5kZXIgbG9ja2RlcCwgbmV3IGZ1bmN0aW9ucyBsaWtlIGBkX2R1cGxpY2F0ZWAsIGBkX2FsbG9jX3RyeWxvY2tgLCBhbmQgYGRfbG9va3VwX2FjcXVpcmUvcmVsZWFzZWAgYXJlIGludHJvZHVjZWQsIGBfX2RfYWRkYCBsb2dpYyBpcyByZWZhY3RvcmVkLCBhbmQgbG9jayBoYW5kbGluZyBpbiBgbG9va3VwX29wZW5gIGNoYW5nZXMgYmFzZWQgb24gc2hhcmVkIGZsYWdzLiBUaGVyZSBpcyBldmVuIGEgY2hhbmdlIGZyb20gYEJVR19PTighZF91bmhhc2hlZChkZW50cnkpKWAgdG8gYEJVR19PTihkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKWAsIHdoaWNoIGlzIGFsd2F5cyB3b3J0aCBhIGxvb2suIFRoZSBvdmVyYWxsIGdvYWwgc2VlbXMgdG8gYmUgZW5oYW5jaW5nIGNvbmN1cnJlbmN5IGFuZCBoYW5kbGluZyBzb21lIG5ldyBjbHVzdGVyL292ZXJsYXkgc2NlbmFyaW9zLgoKVGhlIG1vZGlmaWNhdGlvbiBvZiBgX19kX2FsbG9jYCwgYF9fZF9hZGRgLCBgbG9va3VwX29wZW5gIGFuZCBgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlYCByZWFsbHkgY2F1Z2h0IG15IGV5ZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgZmlsZXN5c3RlbSBjYWxscyBsaWtlIGBvcGVuYCwgYGxvb2t1cGAsIGB1bmxpbmtgLCBhbmQgYG1rZGlyYCwgc28sIHRoYXQmIzM5O3MgYWxyZWFkeSBhIHNpZ25pZmljYW50IHBvaW50IGluIGl0cyBmYXZvci4KCioqTXkgYXNzZXNzbWVudDogVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuKiogVGhpcyBoYXMgYWxsIHRoZSBoYWxsbWFya3Mgb2YgYSBwYXRjaCBzZXJpZXMgcmlwZSBmb3IgZnV6emluZzogY29yZSBzdWJzeXN0ZW0gbW9kaWZpY2F0aW9ucyAoVkZTL2RjYWNoZSksIG5ldyBsb2NraW5nIGludmFyaWFudHMgaW50cm9kdWNlZCB3aXRoIGxvY2tkZXAsIHRoZSBhZGRpdGlvbiBvZiBhIGxvY2tkZXAgbWFwLCBtb2RpZmllZCBhc3NlcnRpb25zLCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGBfX2RfYWRkYCBsb2dpYywgYW5kIHRoZSBgbG9va3VwX29wZW5gIHNoYXJlZCBsb2NraW5nIGNoYW5nZSBpcyBwYXJ0aWN1bGFybHkgaW50cmlndWluZy4gVGhlcmUmIzM5O3MgYSBoaWdoIHByb2JhYmlsaXR5IG9mIGZpbmRpbmcgaW50ZXJlc3Rpbmcga2VybmVsIHN0YXRlcyBvciByYWNlIGNvbmRpdGlvbnMgaGVyZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHVzdWFsIHN1c3BlY3RzLiBJIHNob3VsZCBjaGVjayBgV29ydGhGdXp6aW5nYCwgYEZvY3VzU3ltYm9sc2AsIGFuZCBgRW5hYmxlQ29uZmlnc2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgb3IgcHJlLWV4aXN0aW5nIHNldHVwIHRvIG1ha2UgdGhpcyBlYXNpZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnkgb2J2aW91cyBlbnRyeSBwb2ludHMgYW5kIHRoYXQgSSBoYXZlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIGVuYWJsZWQuIEFsc28sIGEgcXVpY2sgYGdyZXBwZXJgIHJ1biBmb3IgdGhlIG5ldyBmdW5jdGlvbnMgbGlrZSBgZF9hbGxvY190cnlsb2NrYCwgYW5kIGBkX2R1cGxpY2F0ZWAgaXMgY3J1Y2lhbCB0byBnZXQgYSBob2xpc3RpYyB2aWV3IG9mIHRoZSBjYWxsZXJzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhbiBpZGVhIGFib3V0IHRoZSBvdmVyYWxsIHNjb3BlIGFuZCBpZiB0aGlzIGlzIGEgcGFydCBvZiBhIGxhcmdlciBwYXRjaCBzZXJpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZF9hbGxvY190cnlsb2NrfGRfZHVwbGljYXRlfExPT0tVUF9TSEFSRUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnM9MjU9cHViKGNyYXRlKSBzdHJ1Y3QgRnJlZXplTGlzdGVuZXIge1xuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzLTQyLSAgICAvLy8gTnVtYmVyIG9mIGNsZWFyZWQgZHVwbGljYXRlcyB0aGF0IGNhbiBiZSBkZWxldGVkLlxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnM6NDM6ICAgIG51bV9jbGVhcmVkX2R1cGxpY2F0ZXM6IHU2NCxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzLTQ0LX1cbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycz04Nj0gICAgZm4gZG9fd29yayhcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycy05Ny1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzOjk4OiAgICAgICAgaWYgZnJlZXplLm51bV9jbGVhcmVkX2R1cGxpY2F0ZXMgXHUwMDNlIDAge1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnM6OTk6ICAgICAgICAgICAgZnJlZXplLm51bV9jbGVhcmVkX2R1cGxpY2F0ZXMgLT0gMTtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzLTEwMC0gICAgICAgICAgICBkcm9wKG5vZGVfcmVmcyk7XG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtMTA5LSAgICAgICAgaWYgZnJlZXplLmlzX2NsZWFyaW5nIHtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzOjExMDogICAgICAgICAgICBrZXJuZWw6Ondhcm5fb24hKGZyZWV6ZS5udW1fY2xlYXJlZF9kdXBsaWNhdGVzICE9IDApO1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtMTExLSAgICAgICAgICAgIGlmIGZyZWV6ZS5udW1fcGVuZGluZ19kdXBsaWNhdGVzIFx1MDAzZSAwIHtcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycz0xODA9ICAgIHB1YihjcmF0ZSkgZm4gcmVxdWVzdF9mcmVlemVfbm90aWYoXG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtMjQ5LSAgICAgICAgICAgICAgICAgICAgICAgIG51bV9wZW5kaW5nX2R1cGxpY2F0ZXM6IDAsXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5yczoyNTA6ICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2NsZWFyZWRfZHVwbGljYXRlczogMCxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzLTI1MS0gICAgICAgICAgICAgICAgICAgIH0sXG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtMjU5LSAgICAgICAgICAgICAgICB9IGVsc2Uge1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnM6MjYwOiAgICAgICAgICAgICAgICAgICAgZHVwZS5udW1fY2xlYXJlZF9kdXBsaWNhdGVzICYjNDM7PSAxO1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtMjYxLSAgICAgICAgICAgICAgICB9XG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnM9Mjc1PSAgICBwdWIoY3JhdGUpIGZuIGZyZWV6ZV9ub3RpZl9kb25lKHNlbGY6IFx1MDAyNkFyY1x1MDAzY1NlbGZcdTAwM2UsIHJlYWRlcjogXHUwMDI2bXV0IFVzZXJTbGljZVJlYWRlcikgLVx1MDAzZSBSZXN1bHRcdTAwM2MoKVx1MDAzZSB7XG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtMjkxLSAgICAgICAgICAgIGZyZWV6ZS5udW1fcGVuZGluZ19kdXBsaWNhdGVzIC09IDE7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5yczoyOTI6ICAgICAgICAgICAgZnJlZXplLm51bV9jbGVhcmVkX2R1cGxpY2F0ZXMgJiM0Mzs9IDE7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycy0yOTMtICAgICAgICB9IGVsc2Uge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYz00Mzk1PXN0cnVjdCBlZGlkICpkcm1fZHBfbXN0X2dldF9lZGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF90b3BvbG9neS5jLTQ0MDMtXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmM6NDQwNDpcdGVkaWQgPSBkcm1fZWRpZF9kdXBsaWNhdGUoZHJtX2VkaWRfcmF3KGRybV9lZGlkKSk7XG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMtNDQwNS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYz0yOTUwPUVYUE9SVF9TWU1CT0woZHJtX2VkaWRfcmVhZF9zd2l0Y2hlcm9vKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYy0yOTUyLS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmM6Mjk1MzogKiBkcm1fZWRpZF9kdXBsaWNhdGUgLSBkdXBsaWNhdGUgYW4gRURJRCBhbmQgdGhlIGV4dGVuc2lvbnNcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jLTI5NTQtICogQGVkaWQ6IEVESUQgdG8gZHVwbGljYXRlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMtMjk1Ny0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jOjI5NTg6c3RydWN0IGVkaWQgKmRybV9lZGlkX2R1cGxpY2F0ZShjb25zdCBzdHJ1Y3QgZWRpZCAqZWRpZClcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jLTI5NTkte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jLTI5NjQtfVxuZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmM6Mjk2NTpFWFBPUlRfU1lNQk9MKGRybV9lZGlkX2R1cGxpY2F0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYy0yOTY2LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcG1kZW1hbmQuYz01Nj1zdGF0aWMgc3RydWN0IGludGVsX2dsb2JhbF9zdGF0ZSAqXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3BtZGVtYW5kLmM6NTc6aW50ZWxfcG1kZW1hbmRfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBpbnRlbF9nbG9iYWxfb2JqICpvYmopXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3BtZGVtYW5kLmMtNTgte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcG1kZW1hbmQuYz03ND1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2dsb2JhbF9zdGF0ZV9mdW5jcyBpbnRlbF9wbWRlbWFuZF9mdW5jcyA9IHtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcG1kZW1hbmQuYzo3NTpcdC5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gaW50ZWxfcG1kZW1hbmRfZHVwbGljYXRlX3N0YXRlLFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wbWRlbWFuZC5jLTc2LVx0LmF0b21pY19kZXN0cm95X3N0YXRlID0gaW50ZWxfcG1kZW1hbmRfZGVzdHJveV9zdGF0ZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5oPTkxPXN0YXRpYyBjb25zdCB1MzIgYTZ4eF9obHNxX2R1cGxpY2F0ZV9jbHVzdGVyW10gPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHVfc3RhdGUuaC05NC1cbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmg6OTU6c3RhdGljIGNvbnN0IHUzMiBhNnh4X2hsc3FfMmRfZHVwbGljYXRlX2NsdXN0ZXJbXSA9IHtcbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmgtOTYtXHQweGJkODAsIDB4YmQ4MCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5oPTEzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGE2eHhfZGJnYWhiX2NsdXN0ZXIge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmgtMTQ2LVx0Q0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9WUywgMHgwMDAyZTAwMCwgMHg0MSwgYTZ4eF9obHNxX2R1cGxpY2F0ZV9jbHVzdGVyKSxcbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmg6MTQ3Olx0Q0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9WUywgMHgwMDAyZjAwMCwgMHg0NSwgYTZ4eF9obHNxXzJkX2R1cGxpY2F0ZV9jbHVzdGVyKSxcbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmgtMTQ4LVx0Q0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9WUywgMHgwMDAyYTAwMCwgMHgyMSwgYTZ4eF9zcF9kdXBsaWNhdGVfY2x1c3RlciksXG4tLVxuZHJpdmVycy9tZC9kbS5jPTEyNzQ9c3RhdGljIHNpemVfdCBkbV9kYXhfcmVjb3Zlcnlfd3JpdGUoc3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHBnb2ZmX3QgcGdvZmYsXG4tLVxuZHJpdmVycy9tZC9kbS5jLTEyOTctICogd2l0aCB3cml0ZSBCSU9zIGZsYWdnZWQgd2l0aCBCSU9fRU1VTEFURVNfWk9ORV9BUFBFTkQpIGFuZCBhbnkgYmlvIHNlcnZpY2VkXG5kcml2ZXJzL21kL2RtLmM6MTI5ODogKiBieSBfX3NlbmRfZHVwbGljYXRlX2Jpb3MoKS5cbmRyaXZlcnMvbWQvZG0uYy0xMjk5LSAqXG4tLVxuZHJpdmVycy9tZC9kbS5jPTE0Nzg9c3RhdGljIHZvaWQgYWxsb2NfbXVsdGlwbGVfYmlvcyhzdHJ1Y3QgYmlvX2xpc3QgKmJsaXN0LCBzdHJ1Y3QgY2xvbmVfaW5mbyAqY2ksXG4tLVxuZHJpdmVycy9tZC9kbS5jLTE1MDctXG5kcml2ZXJzL21kL2RtLmM6MTUwODpzdGF0aWMgdW5zaWduZWQgaW50IF9fc2VuZF9kdXBsaWNhdGVfYmlvcyhzdHJ1Y3QgY2xvbmVfaW5mbyAqY2ksIHN0cnVjdCBkbV90YXJnZXQgKnRpLFxuZHJpdmVycy9tZC9kbS5jLTE1MDktXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IG51bV9iaW9zLCB1bnNpZ25lZCBpbnQgKmxlbilcbi0tXG5kcml2ZXJzL21kL2RtLmM9MTUzNz1zdGF0aWMgdm9pZCBfX3NlbmRfZW1wdHlfZmx1c2goc3RydWN0IGNsb25lX2luZm8gKmNpKVxuLS1cbmRyaXZlcnMvbWQvZG0uYy0xNTY2LVx0XHRcdGF0b21pY19hZGQodGktXHUwMDNlbnVtX2ZsdXNoX2Jpb3MsIFx1MDAyNmNpLVx1MDAzZWlvLVx1MDAzZWlvX2NvdW50KTtcbmRyaXZlcnMvbWQvZG0uYzoxNTY3Olx0XHRcdGJpb3MgPSBfX3NlbmRfZHVwbGljYXRlX2Jpb3MoY2ksIHRpLCB0aS1cdTAwM2VudW1fZmx1c2hfYmlvcyxcbmRyaXZlcnMvbWQvZG0uYy0xNTY4LVx0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4tLVxuZHJpdmVycy9tZC9kbS5jPTE2MDY9c3RhdGljIHZvaWQgX19zZW5kX2Fibm9ybWFsX2lvKHN0cnVjdCBjbG9uZV9pbmZvICpjaSwgc3RydWN0IGRtX3RhcmdldCAqdGksXG4tLVxuZHJpdmVycy9tZC9kbS5jLTE2MTUtXHRhdG9taWNfYWRkKG51bV9iaW9zLCBcdTAwMjZjaS1cdTAwM2Vpby1cdTAwM2Vpb19jb3VudCk7XG5kcml2ZXJzL21kL2RtLmM6MTYxNjpcdGJpb3MgPSBfX3NlbmRfZHVwbGljYXRlX2Jpb3MoY2ksIHRpLCBudW1fYmlvcywgXHUwMDI2bGVuKTtcbmRyaXZlcnMvbWQvZG0uYy0xNjE3LVx0Lypcbi0tXG5kcml2ZXJzL21kL2RtLmM9MTkwMj1zdGF0aWMgdm9pZCBfX3NlbmRfem9uZV9yZXNldF9hbGxfbmF0aXZlKHN0cnVjdCBjbG9uZV9pbmZvICpjaSxcbi0tXG5kcml2ZXJzL21kL2RtLmMtMTkwNy1cdGF0b21pY19hZGQoMSwgXHUwMDI2Y2ktXHUwMDNlaW8tXHUwMDNlaW9fY291bnQpO1xuZHJpdmVycy9tZC9kbS5jOjE5MDg6XHRiaW9zID0gX19zZW5kX2R1cGxpY2F0ZV9iaW9zKGNpLCB0aSwgMSwgTlVMTCk7XG5kcml2ZXJzL21kL2RtLmMtMTkwOS1cdGF0b21pY19zdWIoMSAtIGJpb3MsIFx1MDAyNmNpLVx1MDAzZWlvLVx1MDAzZWlvX2NvdW50KTtcbi0tXG5kcml2ZXJzL3VzYi90eXBlYy9jbGFzcy5jPTQ0OD1zdGF0aWMgaW50IGluY3JlbWVudF9kdXBsaWNhdGVkX3ByaW9yaXR5KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3VzYi90eXBlYy9jbGFzcy5jLTQ2Mi1cbmRyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmM6NDYzOnN0YXRpYyBpbnQgZmluZF9kdXBsaWNhdGVkX3ByaW9yaXR5KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbmRyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmMtNDY0LXtcbi0tXG5kcml2ZXJzL3VzYi90eXBlYy9jbGFzcy5jPTQ3NT1zdGF0aWMgaW50IHR5cGVjX21vZGVfc2V0X3ByaW9yaXR5KHN0cnVjdCB0eXBlY19hbHRtb2RlICphbHQsIGNvbnN0IHU4IHByaW9yaXR5KVxuLS1cbmRyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmMtNDgyLVx0d2hpbGUgKHJlcykge1xuZHJpdmVycy91c2IvdHlwZWMvY2xhc3MuYzo0ODM6XHRcdHJlcyA9IGRldmljZV9mb3JfZWFjaF9jaGlsZChcdTAwMjZwb3J0LVx1MDAzZWRldiwgXHUwMDI2YWx0LCBmaW5kX2R1cGxpY2F0ZWRfcHJpb3JpdHkpO1xuZHJpdmVycy91c2IvdHlwZWMvY2xhc3MuYy00ODQtXHRcdGlmIChyZXMpIHtcbi0tXG5mcy9kY2FjaGUuYz0yMDA0PUVYUE9SVF9TWU1CT0woZF9hbGxvYyk7XG4tLVxuZnMvZGNhY2hlLmMtMjAwNi0vKipcbmZzL2RjYWNoZS5jOjIwMDc6ICogZF9kdXBsaWNhdGUgLSBkdXBsaWNhdGUgYSBkZW50cnkgZm9yIGNvbWJpbmVkIGF0b21pYyBvcGVyYXRpb25cbmZzL2RjYWNoZS5jLTIwMDgtICogQGRlbnRyeTogdGhlIGRlbnRyeSB0byBkdXBsaWNhdGVcbi0tXG5mcy9kY2FjaGUuYy0yMDE3LSAqIEZvciB0aGlzIHRoZXkgbmVlZCB0d28gZGVudHJpZXMgd2hpY2ggdGVtcG9yYXJpbHkgaGF2ZSB0aGUgc2FtZSBuYW1lLFxuZnMvZGNhY2hlLmM6MjAxODogKiBiZWZvcmUgb25lIGlzIHJlbmFtZWQuICBkX2R1cGxpY2F0ZSgpIHByb3ZpZGVzIGZvciB0aGlzLiAgR2l2ZW4gYVxuZnMvZGNhY2hlLmMtMjAxOS0gKiBwb3NpdGl2ZSBoYXNoZWQgZGVudHJ5LCBpdCBjcmVhdGVzIGEgc2Vjb25kIGluLWxvb2t1cCBkZW50cnkuXG4tLVxuZnMvZGNhY2hlLmMtMjAzMS0gKi9cbmZzL2RjYWNoZS5jOjIwMzI6c3RydWN0IGRlbnRyeSAqZF9kdXBsaWNhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvZGNhY2hlLmMtMjAzMy17XG4tLVxuZnMvZGNhY2hlLmMtMjA1NS19XG5mcy9kY2FjaGUuYzoyMDU2OkVYUE9SVF9TWU1CT0woZF9kdXBsaWNhdGUpO1xuZnMvZGNhY2hlLmMtMjA1Ny1cbi0tXG5mcy9kY2FjaGUuYz0yOTczPUVYUE9SVF9TWU1CT0woZF9hbGxvY19wYXJhbGxlbCk7XG4tLVxuZnMvZGNhY2hlLmMtMjk3NS0vKipcbmZzL2RjYWNoZS5jOjI5NzY6ICogZF9hbGxvY190cnlsb2NrKCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgbmV3IGRlbnRyeVxuZnMvZGNhY2hlLmMtMjk3Ny0gKiBAcGFyZW50OiBkZW50cnkgb2YgdGhlIHBhcmVudFxuLS1cbmZzL2RjYWNoZS5jLTI5ODMtICogbm90IGRfaW5fbG9va3VwKCkgdGhlbiB0aGF0IGlzIHJldHVybmVkIGluc3RlYWQuXG5mcy9kY2FjaGUuYzoyOTg0OiAqIElmIHRoZSBleGlzdGluZyBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSwgZF9hbGxvY190cnlsb2NrKClcbmZzL2RjYWNoZS5jLTI5ODUtICogcmV0dXJucyB3aXRoIGVycm9yICUtRVdPVUxEQkxPQ0suXG4tLVxuZnMvZGNhY2hlLmMtMjk5Ni0gKi9cbmZzL2RjYWNoZS5jOjI5OTc6c3RydWN0IGRlbnRyeSAqZF9hbGxvY190cnlsb2NrKHN0cnVjdCBkZW50cnkgKnBhcmVudCxcbmZzL2RjYWNoZS5jLTI5OTgtXHRcdFx0ICAgICAgIHN0cnVjdCBxc3RyICpuYW1lKVxuLS1cbmZzL2RjYWNoZS5jLTMwMDYtfVxuZnMvZGNhY2hlLmM6MzAwNzpFWFBPUlRfU1lNQk9MKGRfYWxsb2NfdHJ5bG9jayk7XG5mcy9kY2FjaGUuYy0zMDA4LVxuLS1cbmZzL25hbWVpLmM9MTkyOT1zdGF0aWMgbm9pbmxpbmUgc3RydWN0IGRlbnRyeSAqbG9va3VwX3Nsb3coY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4tLVxuZnMvbmFtZWkuYy0xOTM1LVx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuZnMvbmFtZWkuYzoxOTM2Olx0cmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzIHwgTE9PS1VQX1NIQVJFRCk7XG5mcy9uYW1laS5jLTE5MzctXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbi0tXG5mcy9uYW1laS5jPTE5NDE9c3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9zbG93X2tpbGxhYmxlKGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuLS1cbmZzL25hbWVpLmMtMTk0OS1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlRSKTtcbmZzL25hbWVpLmM6MTk1MDpcdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyB8IExPT0tVUF9TSEFSRUQpO1xuZnMvbmFtZWkuYy0xOTUxLVx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XG4tLVxuZnMvbmFtZWkuYz00NDMxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvbmFtZWkuYy00NDQ5LVx0Y3JlYXRlX2Vycm9yID0gMDtcbmZzL25hbWVpLmM6NDQ1MDpcdHNoYXJlZF9mbGFnID0gKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkgPyAwIDogTE9PS1VQX1NIQVJFRDtcbmZzL25hbWVpLmMtNDQ1MS1cbi0tXG5pbmNsdWRlL2RybS9kcm1fZWRpZC5oPTQ0MT1zdHJ1Y3QgZWRpZCAqZHJtX2dldF9lZGlkX3N3aXRjaGVyb28oc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcixcbmluY2x1ZGUvZHJtL2RybV9lZGlkLmgtNDQyLVx0XHRcdFx0ICAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuaW5jbHVkZS9kcm0vZHJtX2VkaWQuaDo0NDM6c3RydWN0IGVkaWQgKmRybV9lZGlkX2R1cGxpY2F0ZShjb25zdCBzdHJ1Y3QgZWRpZCAqZWRpZCk7XG5pbmNsdWRlL2RybS9kcm1fZWRpZC5oLTQ0NC1pbnQgZHJtX2FkZF9lZGlkX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBlZGlkICplZGlkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oPTI2MT1leHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTtcbmluY2x1ZGUvbGludXgvZGNhY2hlLmg6MjYyOmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY190cnlsb2NrKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7XG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTI2My1leHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfc3BsaWNlX2FsaWFzKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopO1xuaW5jbHVkZS9saW51eC9kY2FjaGUuaDoyNjQ6c3RydWN0IGRlbnRyeSAqZF9kdXBsaWNhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbmluY2x1ZGUvbGludXgvZGNhY2hlLmgtMjY1LS8qIHdlaXJkIHByb2NmcyBtZXNzOyAqTk9UKiBleHBvcnRlZCAqL1xuLS1cbmluY2x1ZGUvbGludXgvbmFtZWkuaD0xMj1lbnVtIHsgTUFYX05FU1RFRF9MSU5LUyA9IDggfTtcbi0tXG5pbmNsdWRlL2xpbnV4L25hbWVpLmgtMzQtI2RlZmluZSBMT09LVVBfUkVOQU1FX1RBUkdFVFx0QklUKDE5KVx0LyogLi4uIGluIGRlc3RpbmF0aW9uIG9mIHJlbmFtZSgpICovXG5pbmNsdWRlL2xpbnV4L25hbWVpLmg6MzU6I2RlZmluZSBMT09LVVBfU0hBUkVEXHRcdEJJVCgyMCkgLyogUGFyZW50IGxvY2sgaXMgaGVsZCBzaGFyZWQgKi9cbmluY2x1ZGUvbGludXgvbmFtZWkuaC0zNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI1MAoJCQkJCQkJb3V0cHV0OiAyMzMKCQkJCQkJCXRob3VnaHRzOiA5NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiAgSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBjb2RlIGNoYW5nZXMgYW5kIHRoZSByZWxldmFudCBmdW5jdGlvbnMgYXJlOiBgZF9kdXBsaWNhdGVgLCBgZF93YWl0X2xvb2t1cGAsIGBkX2FsbG9jX3BhcmFsbGVsYCwgYGRfYWxsb2NfdHJ5bG9ja2AsIGBfX2RfbG9va3VwX3VuaGFzaGAsIGBfX2RfYWRkYCwgYGRfc3BsaWNlX2FsaWFzX29wc2AsIGBkX3NwbGljZV9hbGlhc2AsIGBfX2RfYWxsb2NgIGZyb20gYGZzL2RjYWNoZS5jYDsgYGxvb2t1cF9zbG93YCwgYGxvb2t1cF9zbG93X2tpbGxhYmxlYCwgYW5kIGBsb29rdXBfb3BlbmAgZnJvbSBgZnMvbmFtZWkuY2A7IGFuZCBgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlYCBhbmQgYG5mc19jYWxsX3VubGlua2AgZnJvbSBgZnMvbmZzL3VubGluay5jYC4gSSBhbHNvIHNlZSBjaGFuZ2VzIGluIGBpbmNsdWRlL2xpbnV4L2RjYWNoZS5oYCBpbnZvbHZpbmcgYGRfbG9va3VwX3JlbGVhc2VgIGFuZCBgZF9sb29rdXBfYWNxdWlyZWAuCgpOb3csIEkgbmVlZCB0byBmaWx0ZXIgdGhlc2UgZG93biB0byB0aGUgbW9zdCByZWxldmFudCB0YXJnZXRzIGZvciBmdXp6aW5nLiBGdW5jdGlvbnMgbGlrZSBgZF9hbGxvY2AgYXJlIHBvdGVudGlhbGx5IHRvbyB1YmlxdWl0b3VzLCBidXQgIGBkX2FsbG9jX3BhcmFsbGVsYCwgYGRfYWxsb2NfdHJ5bG9ja2AsIGBkX3NwbGljZV9hbGlhc2AsIGBkX2R1cGxpY2F0ZWAsIGBsb29rdXBfc2xvd2AsIGBsb29rdXBfc2xvd19raWxsYWJsZWAsIGBsb29rdXBfb3BlbmAsIGBuZnNfY2FsbF91bmxpbmtgIGFuZCBgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlYCBzZWVtIG1vcmUgdGFyZ2V0ZWQsIGFuZCB0aGF0IGBsb29rdXBfb3BlbmAmIzM5O3Mgc3BlY2lmaWMgdXNlIGluIGBPX0NSRUFUYCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlLiBUaGUgYWltIGlzIHRvIGVuc3VyZSB0aGUgZnV6emluZyBlZmZvcnQgaXMgZm9jdXNlZCBvbiB0aGUgbW9zdCBpbnRlcmVzdGluZyBhbmQgaW1wYWN0ZnVsIGNvZGUgY2hhbmdlcy4KCkkmIzM5O20gYWxzbyBjb25zaWRlcmluZyBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFZGUyBhbmQgZGNhY2hlIGFyZSBjb3JlIGZlYXR1cmVzOyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIHN0cmljdGx5IHJlcXVpcmVkLCBhbHRob3VnaCBgQ09ORklHX0xPQ0tERVBgIGlzIHVzZWQgaWYgbG9ja2RlcCBpcyBlbmFibGVkLCBhbmQgdGhlIE5GUyBjbGllbnQgdXNlcyBgQ09ORklHX05GU19GU2AuICBGb3Igb3B0aW1hbCBmdXp6aW5nLCBJJiMzOTtsbCByZWNvbW1lbmQgZW5hYmxpbmcgYFBST1ZFX0xPQ0tJTkdgIGFuZCBgTE9DS0RFUGAgdG8gZXhlcmNpc2UgdGhlIGxvY2tkZXAgaW50ZWdyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGBkZW50cnktJmd0O2xvb2t1cF9tYXBgLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIGBDT05GSUdfTkZTX0ZTYCBpcyBzZXQsIHNpbmNlIHRoZSBjaGFuZ2VzIHRvdWNoIE5GUy4KCkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcyDigJMgY29yZSBWRlMgcGF0aCBsb29rdXAsIHBhcmFsbGVsIGRlbnRyeSBhbGxvY2F0aW9uLCBzaGFyZWQgZGlyZWN0b3J5IGxvY2tpbmcgZHVyaW5nIGxvb2t1cCBhbmQgb3BlbiBvcGVyYXRpb25zLCBsb2NrZGVwIGFubm90YXRpb24gZm9yIHBhcmFsbGVsIGxvb2t1cHMsIGRfc3BsaWNlX2FsaWFzIGFzc2VydGlvbnMsIGFuZCB0aGUgZGVudHJ5IGhlbHBlcnMgLSAgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIGNyaXRpY2FsIGluZnJhc3RydWN0dXJlIGFuZCBwb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBhcmVhcyBjb3VsZCBiZSBxdWl0ZSBpbXBhY3RmdWwuIFRoZSBmdXp6aW5nIHNob3VsZCB0YXJnZXQgdGhlIGZvbGxvd2luZzogYGRfZHVwbGljYXRlYCwgYGRfYWxsb2NfcGFyYWxsZWxgLCBgZF9hbGxvY190cnlsb2NrYCwgYGRfc3BsaWNlX2FsaWFzYCwgYGRfc3BsaWNlX2FsaWFzX29wc2AsIGBkX3dhaXRfbG9va3VwYCwgYGxvb2t1cF9zbG93YCwgYGxvb2t1cF9zbG93X2tpbGxhYmxlYCwgYGxvb2t1cF9vcGVuYCwgYG5mc19hc3luY191bmxpbmtfcmVsZWFzZWAsIGFuZCBgbmZzX2NhbGxfdW5saW5rYC4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byBkZWZpbmUgdGhlIHBhcmFtZXRlcnMgZm9yIHNldHRpbmcgdGhlIHJlc3VsdHMsIGNvbmZpcm1pbmcgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAsIHdpdGggY2xlYXIgcmVhc29uaW5nIGFib3V0IHdoeSBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIC0gdGhlIGNoYW5nZXMgaW4gcGFyYWxsZWwgbG9va3VwcywgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcywgc2hhcmVkIGRpcmVjdG9yeSBsb2NraW5nIGluIGBsb29rdXBfc2xvd2AgYW5kIGBsb29rdXBfb3BlbmAsIHRoZSBuZXcgZGVudHJ5IGhlbHBlcnMgc3VjaCBhcyBgZF9kdXBsaWNhdGVgIGFuZCBgZF9hbGxvY190cnlsb2NrYCwgZGVudHJ5IGxvY2tkZXAgdHJhY2tpbmcsIGFuZCBhc3NlcnRpb24gY2hhbmdlcyBpbiBgZF9zcGxpY2VfYWxpYXNfb3BzYC4gSSYjMzk7bGwgaW5jbHVkZSB0aGUgaWRlbnRpZmllZCBmb2N1cyBzeW1ib2xzIGFuZCB0aGUgc3VnZ2VzdGVkIGNvbmZpZ3VyYXRpb25zOiBgUFJPVkVfTE9DS0lOR2AsIGFuZCBgTkZTX0ZTYC4gIEZpbmFsbHksIEkgd2lsbCBkb3VibGUtY2hlY2sgYWxsIHRoZSBwYXJhbWV0ZXJzIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST1ZFX0xPQ0tJTkcmIzM0OywKICAgICYjMzQ7TkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZF9kdXBsaWNhdGUmIzM0OywKICAgICYjMzQ7ZF9hbGxvY19wYXJhbGxlbCYjMzQ7LAogICAgJiMzNDtkX2FsbG9jX3RyeWxvY2smIzM0OywKICAgICYjMzQ7ZF9zcGxpY2VfYWxpYXMmIzM0OywKICAgICYjMzQ7ZF9zcGxpY2VfYWxpYXNfb3BzJiMzNDssCiAgICAmIzM0O2Rfd2FpdF9sb29rdXAmIzM0OywKICAgICYjMzQ7bG9va3VwX3Nsb3cmIzM0OywKICAgICYjMzQ7bG9va3VwX3Nsb3dfa2lsbGFibGUmIzM0OywKICAgICYjMzQ7bG9va3VwX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2FzeW5jX3VubGlua19yZWxlYXNlJiMzNDssCiAgICAmIzM0O25mc19jYWxsX3VubGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgY29yZSBWRlMgZGNhY2hlIGFuZCBuYW1laSBsb2dpYywgaW5jbHVkaW5nIHBhcmFsbGVsIGxvb2t1cCBsb2NraW5nLCBzaGFyZWQgZGlyZWN0b3J5IGxvY2tpbmcgZmxhZ3MgKExPT0tVUF9TSEFSRUQpIGluIGxvb2t1cF9zbG93IGFuZCBsb29rdXBfb3BlbiwgbG9ja2RlcCBtYXAgdHJhY2tpbmcgZm9yIGluLWxvb2t1cCBkZW50cmllcywgdXBkYXRlZCBhc3NlcnRpb25zIGluIGRfc3BsaWNlX2FsaWFzX29wcywgbmV3IGRjYWNoZSBoZWxwZXJzIChkX2R1cGxpY2F0ZSwgZF9hbGxvY190cnlsb2NrKSwgYW5kIE5GUyBhc3luY2hyb25vdXMgdW5saW5rIGxvY2sgdHJhY2tpbmcuIFRoZXNlIGNoYW5nZXMgYXJlIGluIGNvcmUgcmVhY2hhYmxlIGtlcm5lbCBzdWJzeXN0ZW1zIGFuZCBkaXJlY3RseSBhZmZlY3QgY29uY3VycmVuY3kgYW5kIGludmFyaWFudCBlbmZvcmNlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtORlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkX2R1cGxpY2F0ZSYjMzQ7LAogICAgJiMzNDtkX2FsbG9jX3BhcmFsbGVsJiMzNDssCiAgICAmIzM0O2RfYWxsb2NfdHJ5bG9jayYjMzQ7LAogICAgJiMzNDtkX3NwbGljZV9hbGlhcyYjMzQ7LAogICAgJiMzNDtkX3NwbGljZV9hbGlhc19vcHMmIzM0OywKICAgICYjMzQ7ZF93YWl0X2xvb2t1cCYjMzQ7LAogICAgJiMzNDtsb29rdXBfc2xvdyYjMzQ7LAogICAgJiMzNDtsb29rdXBfc2xvd19raWxsYWJsZSYjMzQ7LAogICAgJiMzNDtsb29rdXBfb3BlbiYjMzQ7LAogICAgJiMzNDtuZnNfYXN5bmNfdW5saW5rX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bmZzX2NhbGxfdW5saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIFZGUyBkY2FjaGUgYW5kIG5hbWVpIGxvZ2ljLCBpbmNsdWRpbmcgcGFyYWxsZWwgbG9va3VwIGxvY2tpbmcsIHNoYXJlZCBkaXJlY3RvcnkgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gbG9va3VwX3Nsb3cgYW5kIGxvb2t1cF9vcGVuLCBsb2NrZGVwIG1hcCB0cmFja2luZyBmb3IgaW4tbG9va3VwIGRlbnRyaWVzLCB1cGRhdGVkIGFzc2VydGlvbnMgaW4gZF9zcGxpY2VfYWxpYXNfb3BzLCBuZXcgZGNhY2hlIGhlbHBlcnMgKGRfZHVwbGljYXRlLCBkX2FsbG9jX3RyeWxvY2spLCBhbmQgTkZTIGFzeW5jaHJvbm91cyB1bmxpbmsgbG9jayB0cmFja2luZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSByZWFjaGFibGUga2VybmVsIHN1YnN5c3RlbXMgYW5kIGRpcmVjdGx5IGFmZmVjdCBjb25jdXJyZW5jeSBhbmQgaW52YXJpYW50IGVuZm9yY2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIExvY2tkZXAgdHJhY2tpbmcgZm9yIHBhcmFsbGVsIGRlbnRyeSBsb29rdXBzIChEQ0FDSEVfUEFSX0xPT0tVUCB2aWEgc3RydWN0IGxvY2tkZXBfbWFwIGluIHN0cnVjdCBkZW50cnkpLCBhZGRzIHRoZSBkX2R1cGxpY2F0ZSBhbmQgZF9hbGxvY190cnlsb2NrIGhlbHBlcnMsIHVwZGF0ZXMgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gVkZTIGxvb2t1cCByb3V0aW5lcyAobG9va3VwX3Nsb3csIGxvb2t1cF9vcGVuKSwgYW5kIGZpeGVzIGZpbGVzeXN0ZW0gZG9jdW1lbnRhdGlvbi5cblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgYm91bmRhcmllcywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIHRyYW5zZmVycy4gQWxsIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IGRlbnRyeSBpbiBfX2RfYWxsb2MpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24uIEFueSBjb25jdXJyZW5jeSwgZGVhZGxvY2ssIG9yIHJlZmNvdW50aW5nIGlzc3VlcyByZXN1bHRpbmcgZnJvbSB0aGVzZSBWRlMgbG9ja2luZy9sb29rdXAgcmVmYWN0b3JpbmdzIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkOWExMmVjMWU1ZmUzZjNlNTc3ZDNiNjE4MzZkODZlNjY5OTQzMGVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwNDoxNTo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0CmluZGV4IDYwODgwZWIwYzQ5ZDEuLjRlMDE1ZjFiZjFmODQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdApAQCAtMTIwMywxNiAmIzQzOzEyMDMsMTYgQEAgd2lsbCBmYWlsLXNhZmUuCiAKIC0tLQogCi0qKiBtYW5kYXRvcnkqKgomIzQzOyoqbWFuZGF0b3J5KioKIAogbG9va3VwX29uZSgpLCBsb29rdXBfb25lX3VubG9ja2VkKCksIGxvb2t1cF9vbmVfcG9zaXRpdmVfdW5sb2NrZWQoKSBub3cKIHRha2UgYSBxc3RyIGluc3RlYWQgb2YgYSBuYW1lIGFuZCBsZW4uICBUaGVzZSwgbm90IHRoZSAmIzM0O29uZV9sZW4mIzM0OwogdmVyc2lvbnMsIHNob3VsZCBiZSB1c2VkIHdoZW5ldmVyIGFjY2Vzc2luZyBhIGZpbGVzeXN0ZW0gZnJvbSBvdXRzaWRlCi10aGF0IGZpbGVzeXNtdGVtLCB0aHJvdWdoIGEgbW91bnQgcG9pbnQgLSB3aGljaCB3aWxsIGhhdmUgYSBtbnRfaWRtYXAuCiYjNDM7dGhhdCBmaWxlc3lzdGVtLCB0aHJvdWdoIGEgbW91bnQgcG9pbnQgLSB3aGljaCB3aWxsIGhhdmUgYSBtbnRfaWRtYXAuCiAKIC0tLQogCi0qKiBtYW5kYXRvcnkqKgomIzQzOyoqbWFuZGF0b3J5KioKIAogRnVuY3Rpb25zIHRyeV9sb29rdXBfb25lX2xlbigpLCBsb29rdXBfb25lX2xlbigpLAogbG9va3VwX29uZV9sZW5fdW5sb2NrZWQoKSBhbmQgbG9va3VwX3Bvc2l0aXZlX3VubG9ja2VkKCkgaGF2ZSBiZWVuCkBAIC0xMjI5LDcgJiM0MzsxMjI5LDcgQEAgYWxyZWFkeSBiZWVuIHBlcmZvcm1lZCBzdWNoIGFzIGFmdGVyIHZmc19wYXRoX3BhcmVudF9sb29rdXAoKQogCiAtLS0KIAotKiogbWFuZGF0b3J5KioKJiM0MzsqKm1hbmRhdG9yeSoqCiAKIGRfaGFzaF9hbmRfbG9va3VwKCkgaXMgbm8gbG9uZ2VyIGV4cG9ydGVkIG9yIGF2YWlsYWJsZSBvdXRzaWRlIHRoZSBWRlMuCiBVc2UgdHJ5X2xvb2t1cF9ub3Blcm0oKSBpbnN0ZWFkLiAgVGhpcyBhZGRzIG5hbWUgdmFsaWRhdGlvbiBhbmQgdGFrZXMKQEAgLTEzNzAsNyAmIzQzOzEzNzAsNyBAQCBzaW1pbGFyLgogCiAtLS0KIAotKiogbWFuZGF0b3J5KioKJiM0MzsqKm1hbmRhdG9yeSoqCiAKIGxvY2tfcmVuYW1lKCksIGxvY2tfcmVuYW1lX2NoaWxkKCksIHVubG9ja19yZW5hbWUoKSBhcmUgbm8KIGxvbmdlciBhdmFpbGFibGUuICBVc2Ugc3RhcnRfcmVuYW1pbmcoKSBvciBzaW1pbGFyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0CmluZGV4IGQzYTkzZWVjMzk0NWYuLmRlOGY4NTAyMDU2ZTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QKQEAgLTUwNyw4ICYjNDM7NTA3LDggQEAgb3RoZXJ3aXNlIG5vdGVkLgogCWRlbnRyeSBiZWZvcmUgdGhlIGZpcnN0IG1rZGlyIHJldHVybnMuCiAKIAlJZiB0aGVyZSBpcyBhbnkgY2hhbmNlIHRoaXMgY291bGQgaGFwcGVuLCB0aGVuIHRoZSBuZXcgaW5vZGUKLQlzaG91bGQgYmUgZF9kcm9wKCllZCBhbmQgYXR0YWNoZWQgd2l0aCBkX3NwbGljZV9hbGlhcygpLiAgVGhlCi0JcmV0dXJuZWQgZGVudHJ5IChpZiBhbnkpIHNob3VsZCBiZSByZXR1cm5lZCBieSAtJmd0O21rZGlyKCkuCiYjNDM7CXNob3VsZCBiZSBhdHRhY2hlZCB3aXRoIGRfc3BsaWNlX2FsaWFzKCkuICBUaGUgcmV0dXJuZWQKJiM0MzsJZGVudHJ5IChpZiBhbnkpIHNob3VsZCBiZSByZXR1cm5lZCBieSAtJmd0O21rZGlyKCkuCiAKIGBgcm1kaXJgYAogCWNhbGxlZCBieSB0aGUgcm1kaXIoMikgc3lzdGVtIGNhbGwuICBPbmx5IHJlcXVpcmVkIGlmIHlvdSB3YW50CmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDFiMWE4MWYxMGRhNjcuLjNhZjhiMmFjNjk5ZjkgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RjYWNoZS5jCkBAIC0zMiw2ICYjNDM7MzIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdF9zcGlubG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdWxpc3RfYmwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0X2xydS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uYW1laS5oJmd0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bW91bnQuaCYjMzQ7CiAKQEAgLTE5MDAsNiAmIzQzOzE5MDEsNyBAQCBFWFBPUlRfU1lNQk9MKGRfaW52YWxpZGF0ZSk7CiAgCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogewomIzQzOwlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fbG9va3VwX2tleTsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJY2hhciAqZG5hbWU7CiAJaW50IGVycjsKQEAgLTE5NTcsNiAmIzQzOzE5NTksOCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogCWRlbnRyeS0mZ3Q7d2FpdGVycyA9IE5VTEw7CiAJSU5JVF9ITElTVF9OT0RFKCZhbXA7ZGVudHJ5LSZndDtkX3NpYik7CiAKJiM0MzsJbG9ja2RlcF9pbml0X21hcCgmYW1wO2RlbnRyeS0mZ3Q7bG9va3VwX21hcCwgJiMzNDtEQ0FDSEVfUEFSX0xPT0tVUCYjMzQ7LCAmYW1wO19fbG9va3VwX2tleSwgMCk7CiYjNDM7CiAJaWYgKGRlbnRyeS0mZ3Q7ZF9vcCAmYW1wOyZhbXA7IGRlbnRyeS0mZ3Q7ZF9vcC0mZ3Q7ZF9pbml0KSB7CiAJCWVyciA9IGRlbnRyeS0mZ3Q7ZF9vcC0mZ3Q7ZF9pbml0KGRlbnRyeSk7CiAJCWlmIChlcnIpIHsKQEAgLTE5OTksNiAmIzQzOzIwMDMsNTggQEAgc3RydWN0IGRlbnRyeSAqZF9hbGxvYyhzdHJ1Y3QgZGVudHJ5ICogcGFyZW50LCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSkKIH0KIEVYUE9SVF9TWU1CT0woZF9hbGxvYyk7CiAKJiM0MzsvKioKJiM0MzsgKiBkX2R1cGxpY2F0ZSAtIGR1cGxpY2F0ZSBhIGRlbnRyeSBmb3IgY29tYmluZWQgYXRvbWljIG9wZXJhdGlvbgomIzQzOyAqIEBkZW50cnk6IHRoZSBkZW50cnkgdG8gZHVwbGljYXRlCiYjNDM7ICoKJiM0MzsgKiBTb21lIHJlbmFtZSBvcGVyYXRpb25zIG5lZWQgdG8gYmUgY29tYmluZWQgd2l0aCBhbm90aGVyIG9wZXJhdGlvbgomIzQzOyAqIGluc2lkZSB0aGUgZmlsZXN5c3RlbS4KJiM0MzsgKiAxLyBBIGNsdXN0ZXIgZmlsZXN5c3RlbSB3aGVuIHJlbmFtaW5nIHRvIGFuIGluLXVzZSBmaWxlIG1pZ2h0IG5lZWQgdG8KJiM0MzsgKiAgIGZpcnN0ICYjMzQ7c2lsbHktcmVuYW1lJiMzNDsgdGhhdCB0YXJnZXQgb3V0IG9mIHRoZSB3YXkgYmVmb3JlIHRoZSBtYWluIHJlbmFtZQomIzQzOyAqIDIvIEEgZmlsZXN5c3RlbSB0aGF0IHN1cHBvcnRzIHdoaXRlLW91dCBtaWdodCB3YW50IHRvIGNyZWF0ZSBhIHdoaXRlb3V0CiYjNDM7ICogICBpbiBwbGFjZSBvZiB0aGUgZmlsZSBiZWluZyBtb3ZlZC4KJiM0MzsgKgomIzQzOyAqIEZvciB0aGlzIHRoZXkgbmVlZCB0d28gZGVudHJpZXMgd2hpY2ggdGVtcG9yYXJpbHkgaGF2ZSB0aGUgc2FtZSBuYW1lLAomIzQzOyAqIGJlZm9yZSBvbmUgaXMgcmVuYW1lZC4gIGRfZHVwbGljYXRlKCkgcHJvdmlkZXMgZm9yIHRoaXMuICBHaXZlbiBhCiYjNDM7ICogcG9zaXRpdmUgaGFzaGVkIGRlbnRyeSwgaXQgY3JlYXRlcyBhIHNlY29uZCBpbi1sb29rdXAgZGVudHJ5LgomIzQzOyAqIEJlY2F1c2UgdGhlIG9yaWdpbmFsIGRlbnRyeSBleGlzdHMsIG5vIG90aGVyIHRocmVhZCB3aWxsIHRyeSB0bwomIzQzOyAqIGNyZWF0ZSBhbiBpbi1sb29rdXAgZGVudHJ5LCBzbyB0aGVyZSBjYW4gYmUgbm8gcmFjZSBpbiB0aGlzIGNyZWF0ZS4KJiM0MzsgKgomIzQzOyAqIFRoZSBjYWxsZXIgc2hvdWxkIGRfbW92ZSgpIHRoZSBvcmlnaW5hbCB0byBhIG5ldyBuYW1lLCBvZnRlbiB2aWEgYQomIzQzOyAqIHJlbmFtZSByZXF1ZXN0LCBhbmQgc2hvdWxkIGNhbGwgZF9sb29rdXBfZG9uZSgpIG9uIHRoZSBuZXdseSBjcmVhdGVkCiYjNDM7ICogZGVudHJ5LiAgSWYgdGhlIG5ldyBpcyBpbnN0YW50aWF0ZWQgdGhlbiB0aGUgb2xkIE1VU1QgZWl0aGVyIGJlIG1vdmVkCiYjNDM7ICogb3IgZHJvcHBlZC4KJiM0MzsgKgomIzQzOyAqIFBhcmVudCBtdXN0IGJlIGxvY2tlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IGFuIGluLWxvb2t1cCBkZW50cnksIG9yIC1FTk9NRU0uCiYjNDM7ICovCiYjNDM7c3RydWN0IGRlbnRyeSAqZF9kdXBsaWNhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGhhc2ggPSBkZW50cnktJmd0O2RfbmFtZS5oYXNoOwomIzQzOwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZW50cnktJmd0O2RfcGFyZW50OwomIzQzOwlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYiA9IGluX2xvb2t1cF9oYXNoKHBhcmVudCwgaGFzaCk7CiYjNDM7CXN0cnVjdCBkZW50cnkgKm5ldyA9IF9fZF9hbGxvYyhwYXJlbnQtJmd0O2Rfc2IsICZhbXA7ZGVudHJ5LSZndDtkX25hbWUpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIW5ldykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsKJiM0MzsJbmV3LSZndDtkX2ZsYWdzIHw9IERDQUNIRV9QQVJfTE9PS1VQOwomIzQzOwlsb2NrX21hcF9hY3F1aXJlX3RyeSgmYW1wO25ldy0mZ3Q7bG9va3VwX21hcCk7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3BhcmVudC0mZ3Q7ZF9sb2NrKTsKJiM0MzsJbmV3LSZndDtkX3BhcmVudCA9IGRnZXRfZGxvY2socGFyZW50KTsKJiM0MzsJaGxpc3RfYWRkX2hlYWQoJmFtcDtuZXctJmd0O2Rfc2liLCAmYW1wO3BhcmVudC0mZ3Q7ZF9jaGlsZHJlbik7CiYjNDM7CWlmIChwYXJlbnQtJmd0O2RfZmxhZ3MgJmFtcDsgRENBQ0hFX0RJU0NPTk5FQ1RFRCkKJiM0MzsJCW5ldy0mZ3Q7ZF9mbGFncyB8PSBEQ0FDSEVfRElTQ09OTkVDVEVEOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3BhcmVudC0mZ3Q7ZF9sb2NrKTsKJiM0MzsKJiM0MzsJaGxpc3RfYmxfbG9jayhiKTsKJiM0MzsJaGxpc3RfYmxfYWRkX2hlYWQoJmFtcDtuZXctJmd0O2RfaW5fbG9va3VwX2hhc2gsIGIpOwomIzQzOwlobGlzdF9ibF91bmxvY2soYik7CiYjNDM7CXJldHVybiBuZXc7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woZF9kdXBsaWNhdGUpOwomIzQzOwogc3RydWN0IGRlbnRyeSAqZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJcmV0dXJuIF9fZF9hbGxvYyhzYiwgTlVMTCk7CkBAIC0yMTY4LDcgJiM0MzsyMjI0LDYgQEAgc3RhdGljIHZvaWQgX19kX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKICAqIChvciBvdGhlcndpc2Ugc2V0KSBieSB0aGUgY2FsbGVyIHRvIGluZGljYXRlIHRoYXQgaXQgaXMgbm93CiAgKiBpbiB1c2UgYnkgdGhlIGRjYWNoZS4KICAqLwotIAogdm9pZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIHsKIAlCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZW50cnkpKTsKQEAgLTI3NTAsNiAmIzQzOzI4MDUsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGVuZF9kaXJfYWRkKHN0cnVjdCBpbm9kZSAqZGlyLCB1bnNpZ25lZCBpbnQgbikKIHN0YXRpYyB2b2lkIGRfd2FpdF9sb29rdXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCWlmIChsaWtlbHkoZF9pbl9sb29rdXAoZGVudHJ5KSkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUZWxsIGxvY2tkZXAgd2Ugd2lsbCB3YWl0IGZvciB0aGUgbG9va3VwIGxvY2ssIGFmdGVyCiYjNDM7CQkgKiBkcm9wcGluZyAtJmd0O2RfbG9jaywgYnV0IHdvbiYjMzk7dCBhY3R1YWxseSB0YWtlIGl0LgomIzQzOwkJICovCiYjNDM7CQlzcGluX3JlbGVhc2UoJmFtcDtkZW50cnktJmd0O2RfbG9jay5kZXBfbWFwLCAwKTsKJiM0MzsJCWxvY2tfbWFwX3N5bmMoJmFtcDtkZW50cnktJmd0O2xvb2t1cF9tYXApOwomIzQzOwkJc3Bpbl9hY3F1aXJlKCZhbXA7ZGVudHJ5LSZndDtkX2xvY2suZGVwX21hcCwgMCwgMSwgX1RISVNfSVBfKTsKJiM0MzsKIAkJZGVudHJ5LSZndDtkX2ZsYWdzIHw9IERDQUNIRV9MT09LVVBfV0FJVEVSUzsKIAkJd2FpdF92YXJfZXZlbnRfc3BpbmxvY2soJmFtcDtkZW50cnktJmd0O2RfZmxhZ3MsCiAJCQkJCSFkX2luX2xvb2t1cChkZW50cnkpLApAQCAtMjc1Nyw4ICYjNDM7MjgyMCwxNiBAQCBzdGF0aWMgdm9pZCBkX3dhaXRfbG9va3VwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAl9CiB9CiAKLXN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LAotCQkJCWNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQomIzQzOy8qIFdoYXQgdG8gZG8gd2hlbiBfX2RfYWxsb2NfcGFyYWxsZWwgZmluZHMgYSBkX2luX2xvb2t1cCBkZW50cnkgKi8KJiM0MztlbnVtIGFsbG9jX3BhcmEgewomIzQzOwlBTExPQ19QQVJBX1dBSVQsCiYjNDM7CUFMTE9DX1BBUkFfRkFJTCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUKJiM0MztzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LAomIzQzOwkJCQkgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAomIzQzOwkJCQkgIGVudW0gYWxsb2NfcGFyYSBob3cpCiB7CiAJdW5zaWduZWQgaW50IGhhc2ggPSBuYW1lLSZndDtoYXNoOwogCXN0cnVjdCBobGlzdF9ibF9oZWFkICpiID0gaW5fbG9va3VwX2hhc2gocGFyZW50LCBoYXNoKTsKQEAgLTI4MzEsNiAmIzQzOzI5MDIsMTIgQEAgc3RydWN0IGRlbnRyeSAqZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCiAJCQlzcGluX3VubG9jaygmYW1wO2RlbnRyeS0mZ3Q7ZF9sb2NrKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KJiM0MzsJCWlmICh1bmxpa2VseShob3cgPT0gQUxMT0NfUEFSQV9GQUlMKSkgewomIzQzOwkJCS8qIG11c3RuJiMzOTt0IHdhaXQgZm9yIGNvbmN1cnJlbnQgbG9va3VwIHRvIGNvbXBsZXRlICovCiYjNDM7CQkJc3Bpbl91bmxvY2soJmFtcDtkZW50cnktJmd0O2RfbG9jayk7CiYjNDM7CQkJZHB1dChuZXcpOwomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FV09VTERCTE9DSyk7CiYjNDM7CQl9CiAJCS8qCiAJCSAqIHNvbWVib2R5IGlzIGxpa2VseSB0byBiZSBzdGlsbCBkb2luZyBsb29rdXAgZm9yIGl0OwogCQkgKiBwaW4gaXQgYW5kIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNoCkBAIC0yODU4LDE0ICYjNDM7MjkzNSw3NyBAQCBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCwKIAl9CiAJaGxpc3RfYmxfYWRkX2hlYWQoJmFtcDtuZXctJmd0O2RfaW5fbG9va3VwX2hhc2gsIGIpOwogCWhsaXN0X2JsX3VubG9jayhiKTsKJiM0MzsJbG9ja19tYXBfYWNxdWlyZV90cnkoJmFtcDtuZXctJmd0O2xvb2t1cF9tYXApOwogCXJldHVybiBuZXc7CiBtaXNtYXRjaDoKIAlzcGluX3VubG9jaygmYW1wO2RlbnRyeS0mZ3Q7ZF9sb2NrKTsKIAlkcHV0KGRlbnRyeSk7CiAJZ290byByZXRyeTsKIH0KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkX2FsbG9jX3BhcmFsbGVsKCkgLSBhbGxvY2F0ZSBhIG5ldyBkZW50cnkgYW5kIGVuc3VyZSB1bmlxdWVuZXNzCiYjNDM7ICogQHBhcmVudDogZGVudHJ5IG9mIHRoZSBwYXJlbnQKJiM0MzsgKiBAbmFtZTogICBuYW1lIG9mIHRoZSBkZW50cnkgd2l0aGluIHRoYXQgcGFyZW50LgomIzQzOyAqCiYjNDM7ICogQSBuZXcgZGVudHJ5IGlzIGFsbG9jYXRlZCBhbmQsIHByb3ZpZGluZyBpdCBpcyB1bmlxdWUsIGFkZGVkIHRvIHRoZQomIzQzOyAqIHJlbGV2YW50IGluZGV4LgomIzQzOyAqIElmIGFuIGV4aXN0aW5nIGRlbnRyeSBpcyBmb3VuZCB3aXRoIHRoZSBzYW1lIHBhcmVudC9uYW1lIHRoYXQgaXMKJiM0MzsgKiBub3QgZF9pbl9sb29rdXAoKSwgdGhlbiB0aGF0IGlzIHJldHVybmVkIGluc3RlYWQuCiYjNDM7ICogSWYgdGhlIGV4aXN0aW5nIGRlbnRyeSBpcyBkX2luX2xvb2t1cCgpLCBkX2FsbG9jX3BhcmFsbGVsKCkgd2FpdHMgZm9yCiYjNDM7ICogdGhhdCBsb29rdXAgdG8gY29tcGxldGUgYmVmb3JlIHJldHVybmluZyB0aGUgZGVudHJ5IGFuZCB0aGVuIGVuc3VyZXMgdGhlCiYjNDM7ICogbWF0Y2ggaXMgc3RpbGwgdmFsaWQuCiYjNDM7ICogVGh1cyBpZiB0aGUgcmV0dXJuZWQgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCkgdGhlbiB0aGUgY2FsbGVyIGhhcwomIzQzOyAqIGV4Y2x1c2l2ZSBhY2Nlc3MgdW50aWwgaXQgY29tcGxldGVzIHRoZSBsb29rdXAuCiYjNDM7ICogSWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBub3QgZF9pbl9sb29rdXAoKSB0aGVuIGEgbG9va3VwIGhhcwomIzQzOyAqIGFscmVhZHkgY29tcGxldGVkLgomIzQzOyAqCiYjNDM7ICogVGhlIEBuYW1lIG11c3QgYWxyZWFkeSBoYXZlIC0mZ3Q7aGFzaCBzZXQsIGFzIGNhbiBiZSBhY2hpZXZlZAomIzQzOyAqIGJ5IGUuZy4gdHJ5X2xvb2t1cF9ub3Blcm0oKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IHRoZSBkZW50cnksIHdoZXRoZXIgZm91bmQgb3IgYWxsb2NhdGVkLCBvciBhbiBlcnJvciAlLUVOT01FTS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCwKJiM0MzsJCQkJY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19kX2FsbG9jX3BhcmFsbGVsKHBhcmVudCwgbmFtZSwgQUxMT0NfUEFSQV9XQUlUKTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MKGRfYWxsb2NfcGFyYWxsZWwpOwogCiYjNDM7LyoqCiYjNDM7ICogZF9hbGxvY190cnlsb2NrKCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgbmV3IGRlbnRyeQomIzQzOyAqIEBwYXJlbnQ6IGRlbnRyeSBvZiB0aGUgcGFyZW50CiYjNDM7ICogQG5hbWU6ICAgbmFtZSBvZiB0aGUgZGVudHJ5IHdpdGhpbiB0aGF0IHBhcmVudC4KJiM0MzsgKgomIzQzOyAqIEEgbmV3IGRlbnRyeSBpcyBhbGxvY2F0ZWQgYW5kLCBwcm92aWRpbmcgaXQgaXMgdW5pcXVlLCBhZGRlZCB0byB0aGUKJiM0MzsgKiByZWxldmFudCBpbmRleC4KJiM0MzsgKiBJZiBhbiBleGlzdGluZyBkZW50cnkgaXMgZm91bmQgd2l0aCB0aGUgc2FtZSBwYXJlbnQvbmFtZSB0aGF0IGlzCiYjNDM7ICogbm90IGRfaW5fbG9va3VwKCkgdGhlbiB0aGF0IGlzIHJldHVybmVkIGluc3RlYWQuCiYjNDM7ICogSWYgdGhlIGV4aXN0aW5nIGRlbnRyeSBpcyBkX2luX2xvb2t1cCgpLCBkX2FsbG9jX3RyeWxvY2soKQomIzQzOyAqIHJldHVybnMgd2l0aCBlcnJvciAlLUVXT1VMREJMT0NLLgomIzQzOyAqIFRodXMgaWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBkX2luX2xvb2t1cCgpIHRoZW4gdGhlIGNhbGxlciBoYXMKJiM0MzsgKiBleGNsdXNpdmUgYWNjZXNzIHVudGlsIGl0IGNvbXBsZXRlcyB0aGUgbG9va3VwLgomIzQzOyAqIElmIHRoZSByZXR1cm5lZCBkZW50cnkgaXMgbm90IGRfaW5fbG9va3VwKCkgdGhlbiBhIGxvb2t1cCBoYXMKJiM0MzsgKiBhbHJlYWR5IGNvbXBsZXRlZC4KJiM0MzsgKgomIzQzOyAqIFRoZSBAbmFtZSBuZWVkIG5vdCBhbHJlYWR5IGhhdmUgLSZndDtoYXNoIHNldC4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IHRoZSBkZW50cnksIHdoZXRoZXIgZm91bmQgb3IgYWxsb2NhdGVkLCBvciBhbiBlcnJvcgomIzQzOyAqICAgICUtRU5PTUVNLCAlLUVXT1VMREJMT0NLLCAlLUVBQ0NFUyAoZm9yIGEgYmFkIG5hbWUpIG9yCiYjNDM7ICogICAgYW55dGhpbmcgcmV0dXJuZWQgYnkgLSZndDtkX2hhc2goKS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3RyeWxvY2soc3RydWN0IGRlbnRyeSAqcGFyZW50LAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcXN0ciAqbmFtZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZW50cnkgKmRlOwomIzQzOwomIzQzOwlkZSA9IHRyeV9sb29rdXBfbm9wZXJtKG5hbWUsIHBhcmVudCk7CiYjNDM7CWlmICghZGUpCiYjNDM7CQlkZSA9IF9fZF9hbGxvY19wYXJhbGxlbChwYXJlbnQsIG5hbWUsIEFMTE9DX1BBUkFfRkFJTCk7CiYjNDM7CXJldHVybiBkZTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChkX2FsbG9jX3RyeWxvY2spOwomIzQzOwogLyoKICAqIE1vdmUgZGVudHJ5IGZyb20gaW4tbG9va3VwIHN0YXRlIHRvIGJ1c3ktbmVnYXRpdmUgb25lLgogICoKQEAgLTI4OTQsNiAmIzQzOzMwMzQsNyBAQCBzdGF0aWMgdm9pZCBfX2RfbG9va3VwX3VuaGFzaChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJYiA9IGluX2xvb2t1cF9oYXNoKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQsIGRlbnRyeS0mZ3Q7ZF9uYW1lLmhhc2gpOwogCWhsaXN0X2JsX2xvY2soYik7CiAJZGVudHJ5LSZndDtkX2ZsYWdzICZhbXA7PSB+RENBQ0hFX1BBUl9MT09LVVA7CiYjNDM7CWxvY2tfbWFwX3JlbGVhc2UoJmFtcDtkZW50cnktJmd0O2xvb2t1cF9tYXApOwogCV9faGxpc3RfYmxfZGVsKCZhbXA7ZGVudHJ5LSZndDtkX2luX2xvb2t1cF9oYXNoKTsKIAlobGlzdF9ibF91bmxvY2soYik7CiAJZGVudHJ5LSZndDt3YWl0ZXJzID0gTlVMTDsKQEAgLTI5MzEsMTUgJiM0MzszMDcyLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RfYWRkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKIAl9CiAJaWYgKHVubGlrZWx5KG9wcykpCiAJCWRfc2V0X2Rfb3AoZGVudHJ5LCBvcHMpOwotCWlmIChpbm9kZSkgewotCQl1bnNpZ25lZCBhZGRfZmxhZ3MgPSBkX2ZsYWdzX2Zvcl9pbm9kZShpbm9kZSk7Ci0JCWhsaXN0X2FkZF9oZWFkKCZhbXA7ZGVudHJ5LSZndDtkX2FsaWFzLCAmYW1wO2lub2RlLSZndDtpX2RlbnRyeSk7Ci0JCXJhd193cml0ZV9zZXFjb3VudF9iZWdpbigmYW1wO2RlbnRyeS0mZ3Q7ZF9zZXEpOwotCQlfX2Rfc2V0X2lub2RlX2FuZF90eXBlKGRlbnRyeSwgaW5vZGUsIGFkZF9mbGFncyk7Ci0JCXJhd193cml0ZV9zZXFjb3VudF9lbmQoJmFtcDtkZW50cnktJmd0O2Rfc2VxKTsKLQkJZnNub3RpZnlfdXBkYXRlX2ZsYWdzKGRlbnRyeSk7Ci0JfQotCV9fZF9yZWhhc2goZGVudHJ5KTsKJiM0MzsJaWYgKGlub2RlKQomIzQzOwkJX19kX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwomIzQzOwlpZiAoZF91bmhhc2hlZChkZW50cnkpKQomIzQzOwkJX19kX3JlaGFzaChkZW50cnkpOwogCWlmIChkaXIpIHsKIAkJZW5kX2Rpcl9hZGQoZGlyLCBuKTsKIAkJX19kX3dha2VfaW5fbG9va3VwX3dhaXRlcnMoZGVudHJ5KTsKQEAgLTMyNDEsNyAmIzQzOzMzNzcsNyBAQCBzdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhc19vcHMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCWlmIChJU19FUlIoaW5vZGUpKQogCQlyZXR1cm4gRVJSX0NBU1QoaW5vZGUpOwogCi0JQlVHX09OKCFkX3VuaGFzaGVkKGRlbnRyeSkpOwomIzQzOwlCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSk7CiAKIAlpZiAoIWlub2RlKQogCQlnb3RvIG91dDsKQEAgLTMyOTcsNiAmIzQzOzM0MzMsOCBAQCBzdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhc19vcHMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogICogQGlub2RlOiAgdGhlIGlub2RlIHdoaWNoIG1heSBoYXZlIGEgZGlzY29ubmVjdGVkIGRlbnRyeQogICogQGRlbnRyeTogYSBuZWdhdGl2ZSBkZW50cnkgd2hpY2ggd2Ugd2FudCB0byBwb2ludCB0byB0aGUgaW5vZGUuCiAgKgomIzQzOyAqIEBkZW50cnkgbXVzdCBiZSBuZWdhdGl2ZSBhbmQgbWF5IGJlIGluLWxvb2t1cCBvciB1bmhhc2hlZCBvciBoYXNoZWQuCiYjNDM7ICoKICAqIElmIGlub2RlIGlzIGEgZGlyZWN0b3J5IGFuZCBoYXMgYW4gSVNfUk9PVCBhbGlhcywgdGhlbiBkX21vdmUgdGhhdCBpbgogICogcGxhY2Ugb2YgdGhlIGdpdmVuIGRlbnRyeSBhbmQgcmV0dXJuIGl0LCBlbHNlIHNpbXBseSBkX2FkZCB0aGUgaW5vZGUKICAqIHRvIHRoZSBkZW50cnkgYW5kIHJldHVybiBOVUxMLgpAQCAtMzMwNCwxNiAmIzQzOzM0NDIsMTQgQEAgc3RydWN0IGRlbnRyeSAqZF9zcGxpY2VfYWxpYXNfb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKICAqIElmIGEgbm9uLUlTX1JPT1QgZGlyZWN0b3J5IGlzIGZvdW5kLCB0aGUgZmlsZXN5c3RlbSBpcyBjb3JydXB0LCBhbmQKICAqIHdlIHNob3VsZCBlcnJvciBvdXQ6IGRpcmVjdG9yaWVzIGNhbiYjMzk7dCBoYXZlIG11bHRpcGxlIGFsaWFzZXMuCiAgKgotICogVGhpcyBpcyBuZWVkZWQgaW4gdGhlIGxvb2t1cCByb3V0aW5lIG9mIGFueSBmaWxlc3lzdGVtIHRoYXQgaXMgZXhwb3J0YWJsZQotICogKHZpYSBrbmZzZCkgc28gdGhhdCB3ZSBjYW4gYnVpbGQgZGNhY2hlIHBhdGhzIHRvIGRpcmVjdG9yaWVzIGVmZmVjdGl2ZWx5LgomIzQzOyAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgLSZndDtsb29rdXAoKSBhbmQgdG8KJiM0MzsgKiBpbnN0YW50aWF0ZSB0aGUgcmVzdWx0IG9mIC0mZ3Q7bWtkaXIoKSwgaXMgb2Z0ZW4gdXNlZnVsIGZvcgomIzQzOyAqIC0mZ3Q7YXRvbWljX29wZW4sIGFuZCBtYXkgYmUgdXNlZCB0byBpbnN0YW50aWF0ZSBvdGhlciBvYmplY3RzLgogICoKICAqIElmIGEgZGVudHJ5IHdhcyBmb3VuZCBhbmQgbW92ZWQsIHRoZW4gaXQgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UgTlVMTAotICogaXMgcmV0dXJuZWQuICBUaGlzIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHJldHVybiB2YWx1ZSBvZiAtJmd0O2xvb2t1cC4KJiM0MzsgKiBpcyByZXR1cm5lZC4gIFRoaXMgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIG9mIC0mZ3Q7bG9va3VwIGFuZAomIzQzOyAqIC0mZ3Q7bWtkaXIuCiAgKgotICogQ2x1c3RlciBmaWxlc3lzdGVtcyBtYXkgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggYSBuZWdhdGl2ZSwgaGFzaGVkIGRlbnRyeS4KLSAqIEluIHRoYXQgY2FzZSwgd2Uga25vdyB0aGF0IHRoZSBpbm9kZSB3aWxsIGJlIGEgcmVndWxhciBmaWxlLCBhbmQgYWxzbyB0aGlzCi0gKiB3aWxsIG9ubHkgb2NjdXIgZHVyaW5nIGF0b21pY19vcGVuLiBTbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgZGVudHJ5Ci0gKiBiZWluZyBhbHJlYWR5IGhhc2hlZCBvbmx5IGluIHRoZSBmaW5hbCBjYXNlLgogICovCiBzdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAyMGE2NTM0ZWEzZWZmLi5lOTc4YTc1ZWI4YTE0IDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTE5MzMsNyAmIzQzOzE5MzMsNyBAQCBzdGF0aWMgbm9pbmxpbmUgc3RydWN0IGRlbnRyeSAqbG9va3VwX3Nsb3coY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRpci0mZ3Q7ZF9pbm9kZTsKIAlzdHJ1Y3QgZGVudHJ5ICpyZXM7CiAJaW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpOwotCXJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyk7CiYjNDM7CXJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyB8IExPT0tVUF9TSEFSRUQpOwogCWlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpOwogCXJldHVybiByZXM7CiB9CkBAIC0xOTQ3LDcgJiM0MzsxOTQ3LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9zbG93X2tpbGxhYmxlKGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogCiAJaWYgKGlub2RlX2xvY2tfc2hhcmVkX2tpbGxhYmxlKGlub2RlKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlRSKTsKLQlyZXMgPSBfX2xvb2t1cF9zbG93KG5hbWUsIGRpciwgZmxhZ3MpOwomIzQzOwlyZXMgPSBfX2xvb2t1cF9zbG93KG5hbWUsIGRpciwgZmxhZ3MgfCBMT09LVVBfU0hBUkVEKTsKIAlpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTsKIAlyZXR1cm4gcmVzOwogfQpAQCAtMjk0Niw4ICYjNDM7Mjk0Niw4IEBAIHN0cnVjdCBkZW50cnkgKnN0YXJ0X2Rpcm9wKHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IHFzdHIgKm5hbWUsCiAgKiBlbmRfZGlyb3AgLSBzaWduYWwgY29tcGxldGlvbiBvZiBhIGRpcm9wCiAgKiBAZGU6IHRoZSBkZW50cnkgd2hpY2ggd2FzIHJldHVybmVkIGJ5IHN0YXJ0X2Rpcm9wIG9yIHNpbWlsYXIuCiAgKgotICogSWYgdGhlIGRlIGlzIGFuIGVycm9yLCBub3RoaW5nIGhhcHBlbnMuIE90aGVyd2lzZSBhbnkgbG9jayB0YWtlbiB0bwotICogcHJvdGVjdCB0aGUgZGVudHJ5IGlzIGRyb3BwZWQgYW5kIHRoZSBkZW50cnkgaXRzZWxmIGlzIHJlbGVhc2UgKGRwdXQoKSkuCiYjNDM7ICogSWYgdGhlIEBkZSBpcyBhbiBlcnJvciwgbm90aGluZyBoYXBwZW5zLiBPdGhlcndpc2UgYW55IGxvY2sgdGFrZW4gdG8KJiM0MzsgKiBwcm90ZWN0IHRoZSBkZW50cnkgaXMgZHJvcHBlZCBhbmQgdGhlIGRlbnRyeSBpdHNlbGYgaXMgcmVsZWFzZWQgKGRwdXQoKSkuCiAgKi8KIHZvaWQgZW5kX2Rpcm9wKHN0cnVjdCBkZW50cnkgKmRlKQogewpAQCAtMzIxMCw3ICYjNDM7MzIxMCw3IEBAIEVYUE9SVF9TWU1CT0wobG9va3VwX29uZSk7CiAvKioKICAqIGxvb2t1cF9vbmVfdW5sb2NrZWQgLSBsb29rdXAgc2luZ2xlIHBhdGhuYW1lIGNvbXBvbmVudAogICogQGlkbWFwOglpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGxvb2t1cCBpcyBwZXJmb3JtZWQgZnJvbQotICogQG5hbWU6CXFzdHIgb2xkaW5nIHBhdGhuYW1lIGNvbXBvbmVudCB0byBsb29rdXAKJiM0MzsgKiBAbmFtZToJcXN0ciBob2xkaW5nIHBhdGhuYW1lIGNvbXBvbmVudCB0byBsb29rdXAKICAqIEBiYXNlOgliYXNlIGRpcmVjdG9yeSB0byBsb29rdXAgZnJvbQogICoKICAqIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGluLWtlcm5lbCBmaWxlc3lzdGVtIGNsaWVudHMgc3VjaCBhcyBmaWxlIHNlcnZlcnMuCkBAIC0zMjQzLDcgJiM0MzszMjQzLDcgQEAgRVhQT1JUX1NZTUJPTChsb29rdXBfb25lX3VubG9ja2VkKTsKIC8qKgogICogbG9va3VwX29uZV9wb3NpdGl2ZV9raWxsYWJsZSAtIGxvb2t1cCBzaW5nbGUgcGF0aG5hbWUgY29tcG9uZW50CiAgKiBAaWRtYXA6CWlkbWFwIG9mIHRoZSBtb3VudCB0aGUgbG9va3VwIGlzIHBlcmZvcm1lZCBmcm9tCi0gKiBAbmFtZToJcXN0ciBvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cAomIzQzOyAqIEBuYW1lOglxc3RyIGhvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cAogICogQGJhc2U6CWJhc2UgZGlyZWN0b3J5IHRvIGxvb2t1cCBmcm9tCiAgKgogICogVGhpcyBoZWxwZXIgd2lsbCB5aWVsZCBFUlJfUFRSKC1FTk9FTlQpIG9uIG5lZ2F0aXZlcy4gVGhlIGhlbHBlciByZXR1cm5zCkBAIC0zMjU5LDcgJiM0MzszMjU5LDcgQEAgRVhQT1JUX1NZTUJPTChsb29rdXBfb25lX3VubG9ja2VkKTsKICAqIHRoZSBpX3J3c2VtIGl0c2VsZiBpZiBuZWNlc3NhcnkuICBJZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIG9yCiAgKiBkZWxpdmVyZWQsIGl0IHdpbGwgcmV0dXJuICUtRUlOVFIgaWYgdGhlIGxvY2sgaXMgbmVlZGVkLgogICoKLSAqIFJldHVybnM6IEEgZGVudHJ5LCBwb3NzaWJseSBuZWdhdGl2ZSwgb3IKJiM0MzsgKiBSZXR1cm5zOiBBIHBvc2l0aXZlIGRlbnRyeSwgb3IKICAqCSAgIC0gc2FtZSBlcnJvcnMgYXMgbG9va3VwX29uZV91bmxvY2tlZCgpIG9yCiAgKgkgICAtIEVSUl9QVFIoLUVJTlRSKSBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLgogICovCkBAIC0zMzgxLDcgJiM0MzszMzgxLDcgQEAgc3RydWN0IGRlbnRyeSAqbG9va3VwX25vcGVybV9wb3NpdGl2ZV91bmxvY2tlZChzdHJ1Y3QgcXN0ciAqbmFtZSwKIEVYUE9SVF9TWU1CT0wobG9va3VwX25vcGVybV9wb3NpdGl2ZV91bmxvY2tlZCk7CiAKIC8qKgotICogc3RhcnRfY3JlYXRpbmcgLSBwcmVwYXJlIHRvIGNyZWF0ZSBhIGdpdmVuIG5hbWUgd2l0aCBwZXJtaXNzaW9uIGNoZWNraW5nCiYjNDM7ICogc3RhcnRfY3JlYXRpbmcgLSBwcmVwYXJlIHRvIGFjY2VzcyBvciBjcmVhdGUgYSBnaXZlbiBuYW1lIHdpdGggcGVybWlzc2lvbiBjaGVja2luZwogICogQGlkbWFwOiAgaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gcHJlcGFyZSB0byBjcmVhdGUgdGhlIG5hbWUKICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWQKQEAgLTM0MTMsOCAmIzQzOzM0MTMsOCBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nKTsKICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBmaW5kIHRoZSBuYW1lCiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSByZW1vdmVkCiAgKgotICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmcKLSAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LiAgUGVybWlzc2lvbiBjaGVja2luZyAoTUFZX0VYRUMpIGlzIHBlcmZvcm1lZAomIzQzOyAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaXMgcGVyZm9ybWVkIHByaW9yIHRvIHJlbW92aW5nIGFuIG9iamVjdAomIzQzOyAqIGZyb20gYSBkaXJlY3RvcnkuICBQZXJtaXNzaW9uIGNoZWNraW5nIChNQVlfRVhFQykgaXMgcGVyZm9ybWVkCiAgKiBhZ2FpbnN0IEBpZG1hcC4KICAqCiAgKiBJZiB0aGUgbmFtZSBkb2VzbiYjMzk7dCBleGlzdCwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuCkBAIC0zNDQwLDcgJiM0MzszNDQwLDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZyk7CiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gcHJlcGFyZSB0byBjcmVhdGUgdGhlIG5hbWUKICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWQKICAqCi0gKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGluIHBlcmZvcm1lZCBwcmlvciB0byBjcmVhdGluZwomIzQzOyAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaXMgcGVyZm9ybWVkIHByaW9yIHRvIGNyZWF0aW5nCiAgKiBhbiBvYmplY3QgaW4gYSBkaXJlY3RvcnkuICBQZXJtaXNzaW9uIGNoZWNraW5nIChNQVlfRVhFQykgaXMgcGVyZm9ybWVkCiAgKiBhZ2FpbnN0IEBpZG1hcC4KICAqCkBAIC0zNDY5LDcgJiM0MzszNDY5LDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9jcmVhdGluZ19raWxsYWJsZSk7CiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gZmluZCB0aGUgbmFtZQogICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgcmVtb3ZlZAogICoKLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIHJlbW92aW5nCiYjNDM7ICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmcKICAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LiAgUGVybWlzc2lvbiBjaGVja2luZyAoTUFZX0VYRUMpIGlzIHBlcmZvcm1lZAogICogYWdhaW5zdCBAaWRtYXAuCiAgKgpAQCAtMzQ5OSw3ICYjNDM7MzQ5OSw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfcmVtb3Zpbmdfa2lsbGFibGUpOwogICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIHByZXBhcmUgdG8gY3JlYXRlIHRoZSBuYW1lCiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSBjcmVhdGVkCiAgKgotICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmcKJiM0MzsgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byBjcmVhdGluZwogICogYW4gb2JqZWN0IGluIGEgZGlyZWN0b3J5LgogICoKICAqIElmIHRoZSBuYW1lIGFscmVhZHkgZXhpc3RzLCBhIHBvc2l0aXZlIGRlbnRyeSBpcyByZXR1cm5lZC4KQEAgLTM1MjIsNyAmIzQzOzM1MjIsNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX25vcGVybSk7CiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gZmluZCB0aGUgbmFtZQogICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgcmVtb3ZlZAogICoKLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIHJlbW92aW5nCiYjNDM7ICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmcKICAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LgogICoKICAqIElmIHRoZSBuYW1lIGRvZXNuJiMzOTt0IGV4aXN0LCBhbiBlcnJvciBpcyByZXR1cm5lZC4KQEAgLTM1NDMsMTEgJiM0MzszNTQzLDExIEBAIHN0cnVjdCBkZW50cnkgKnN0YXJ0X3JlbW92aW5nX25vcGVybShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCiBFWFBPUlRfU1lNQk9MKHN0YXJ0X3JlbW92aW5nX25vcGVybSk7CiAKIC8qKgotICogc3RhcnRfY3JlYXRpbmdfZGVudHJ5IC0gcHJlcGFyZSB0byBjcmVhdGUgYSBnaXZlbiBkZW50cnkKLSAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRlbnRyeSBzaG91bGQgYmUgcmVtb3ZlZAotICogQGNoaWxkOiAgdGhlIGRlbnRyeSB0byBiZSByZW1vdmVkCiYjNDM7ICogc3RhcnRfY3JlYXRpbmdfZGVudHJ5IC0gcHJlcGFyZSB0byBhY2Nlc3Mgb3IgY3JlYXRlIGEgZ2l2ZW4gZGVudHJ5CiYjNDM7ICogQHBhcmVudDogZGlyZWN0b3J5IG9mIGRlbnRyeQomIzQzOyAqIEBjaGlsZDogIHRoZSBkZW50cnkgdG8gYmUgcHJlcGFyZWQKICAqCi0gKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluIG90aGVyIGRpcm9wcyBhbmQKJiM0MzsgKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluc3Qgb3RoZXIgZGlyb3BzIGFuZAogICogdGhlIHZhbGlkaXR5IG9mIHRoZSBkZW50cnkgaXMgY2hlY2tlZDogY29ycmVjdCBwYXJlbnQgYW5kIHN0aWxsIGhhc2hlZC4KICAqCiAgKiBJZiB0aGUgZGVudHJ5IGlzIHZhbGlkIGFuZCBuZWdhdGl2ZSBhIHJlZmVyZW5jZSBpcyB0YWtlbiBhbmQKQEAgLTM1ODAsNyAmIzQzOzM1ODAsNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX2RlbnRyeSk7CiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgZnJvbSB3aGljaCBkZW50cnkgc2hvdWxkIGJlIHJlbW92ZWQKICAqIEBjaGlsZDogIHRoZSBkZW50cnkgdG8gYmUgcmVtb3ZlZAogICoKLSAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW4gb3RoZXIgZGlyb3BzIGFuZAomIzQzOyAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW5zdCBvdGhlciBkaXJvcHMgYW5kCiAgKiB0aGUgdmFsaWRpdHkgb2YgdGhlIGRlbnRyeSBpcyBjaGVja2VkOiBjb3JyZWN0IHBhcmVudCBhbmQgc3RpbGwgaGFzaGVkLgogICoKICAqIElmIHRoZSBkZW50cnkgaXMgdmFsaWQgYW5kIHBvc2l0aXZlLCBhIHJlZmVyZW5jZSBpcyB0YWtlbiBhbmQKQEAgLTQ0NDAsMTIgJiM0Mzs0NDQwLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsCiAJaW50IGVycm9yLCBjcmVhdGVfZXJyb3I7CiAJdW1vZGVfdCBtb2RlOwogCWJvb2wgZ290X3dyaXRlOwomIzQzOwl1bnNpZ25lZCBpbnQgc2hhcmVkX2ZsYWc7CiAKIHJldHJ5OgogCW9wZW5fZmxhZyA9IG9wLSZndDtvcGVuX2ZsYWc7CiAJZ290X3dyaXRlID0gZmFsc2U7CiAJbW9kZSA9IG9wLSZndDttb2RlOwogCWNyZWF0ZV9lcnJvciA9IDA7CiYjNDM7CXNoYXJlZF9mbGFnID0gKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSA/IDAgOiBMT09LVVBfU0hBUkVEOwogCiAJaWYgKG9wZW5fZmxhZyAmYW1wOyAoT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSB8IE9fUkRXUikpIHsKIAkJZ290X3dyaXRlID0gIW1udF93YW50X3dyaXRlKG5kLSZndDtwYXRoLm1udCk7CkBAIC00NDU0LDEwICYjNDM7NDQ1NiwxMCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkgKiBhIGRpZmZlcmVudCBlcnJvcjsgd2UmIzM5O2xsIGJlIGRyb3BwaW5nIHRoaXMgb25lIGFueXdheS4KIAkJICovCiAJfQotCWlmIChvcGVuX2ZsYWcgJmFtcDsgT19DUkVBVCkKLQkJaW5vZGVfbG9jayhkaXJfaW5vZGUpOwotCWVsc2UKJiM0MzsJaWYgKHNoYXJlZF9mbGFnKQogCQlpbm9kZV9sb2NrX3NoYXJlZChkaXJfaW5vZGUpOwomIzQzOwllbHNlCiYjNDM7CQlpbm9kZV9sb2NrKGRpcl9pbm9kZSk7CiAKIAlpZiAodW5saWtlbHkoSVNfREVBRERJUihkaXJfaW5vZGUpKSkgewogCQlkZW50cnkgPSBFUlJfUFRSKC1FTk9FTlQpOwpAQCAtNDUyNiw3ICYjNDM7NDUyOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsCiAKIAlpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpyZXMgPSBkaXJfaW5vZGUtJmd0O2lfb3AtJmd0O2xvb2t1cChkaXJfaW5vZGUsIGRlbnRyeSwKLQkJCQkJCQkgICAgIG5kLSZndDtmbGFncyk7CiYjNDM7CQkJCQkJCSAgICAgbmQtJmd0O2ZsYWdzIHwgc2hhcmVkX2ZsYWcpOwogCQlkX2xvb2t1cF9kb25lKGRlbnRyeSk7CiAJCWlmICh1bmxpa2VseShyZXMpKSB7CiAJCQlpZiAoSVNfRVJSKHJlcykpIHsKQEAgLTQ1NzQsMTAgJiM0Mzs0NTc2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCWlmIChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfT1BFTkVEKQogCQkJZnNub3RpZnlfb3BlbihmaWxlKTsKIAl9Ci0JaWYgKChvcGVuX2ZsYWcgJmFtcDsgT19DUkVBVCkgfHwgY3JlYXRlX2Vycm9yKQotCQlpbm9kZV91bmxvY2soZGlyX2lub2RlKTsKLQllbHNlCiYjNDM7CWlmIChzaGFyZWRfZmxhZykKIAkJaW5vZGVfdW5sb2NrX3NoYXJlZChkaXJfaW5vZGUpOwomIzQzOwllbHNlCiYjNDM7CQlpbm9kZV91bmxvY2soZGlyX2lub2RlKTsKIAogCWlmIChnb3Rfd3JpdGUpCiAJCW1udF9kcm9wX3dyaXRlKG5kLSZndDtwYXRoLm1udCk7CmRpZmYgLS1naXQgYS9mcy9uZnMvdW5saW5rLmMgYi9mcy9uZnMvdW5saW5rLmMKaW5kZXggYjU3Y2ZhYTRkNTE2Zi4uYzhkNzEyMjA0ZTY0OSAxMDA2NDQKLS0tIGEvZnMvbmZzL3VubGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25mcy91bmxpbmsuYwpAQCAtNjcsNiAmIzQzOzY3LDcgQEAgc3RhdGljIHZvaWQgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlKHZvaWQgKmNhbGxkYXRhKQogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktJmd0O2Rfc2I7CiAKIAl1cF9yZWFkX25vbl9vd25lcigmYW1wO05GU19JKGRfaW5vZGUoZGVudHJ5LSZndDtkX3BhcmVudCkpLSZndDtybWRpcl9zZW0pOwomIzQzOwlkX2xvb2t1cF9hY3F1aXJlKGRlbnRyeSk7CiAJZF9sb29rdXBfZG9uZShkZW50cnkpOwogCW5mc19mcmVlX3VubGlua2RhdGEoZGF0YSk7CiAJZHB1dChkZW50cnkpOwpAQCAtMTU5LDYgJiM0MzsxNjAsOCBAQCBzdGF0aWMgaW50IG5mc19jYWxsX3VubGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZgogCQlyZXR1cm4gcmV0OwogCX0KIAlkYXRhLSZndDtkZW50cnkgPSBhbGlhczsKJiM0MzsJZF9sb29rdXBfcmVsZWFzZShhbGlhcyk7CiYjNDM7CiAJbmZzX2RvX2NhbGxfdW5saW5rKGlub2RlLCBkYXRhKTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCmluZGV4IDRiMWZmOTk2MDhlMDEuLmU3ZTNlZjA1MzEzYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaApAQCAtMTE2LDYgJiM0MzsxMTYsOCBAQCBzdHJ1Y3QgZGVudHJ5IHsKIAkJCQkJICogcG9zc2libGUhCiAJCQkJCSAqLwogCiYjNDM7CS8qIGxvY2tkZXAgdHJhY2tpbmcgb2YgRENBQ0hFX1BBUl9MT09LVVAgbG9ja3MgKi8KJiM0MzsJc3RydWN0IGxvY2tkZXBfbWFwCQlsb29rdXBfbWFwOwogCXN0cnVjdCBsaXN0X2hlYWQgZF9scnU7CQkvKiBMUlUgbGlzdCAqLwogCXN0cnVjdCBobGlzdF9ub2RlIGRfc2liOwkvKiBjaGlsZCBvZiBwYXJlbnQgbGlzdCAqLwogCXN0cnVjdCBobGlzdF9oZWFkIGRfY2hpbGRyZW47CS8qIG91ciBjaGlsZHJlbiAqLwpAQCAtMjU3LDcgJiM0MzsyNTksOSBAQCBleHRlcm4gdm9pZCBkX2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfYW5vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTsKJiM0MztleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfdHJ5bG9jayhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX3NwbGljZV9hbGlhcyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKJiM0MztzdHJ1Y3QgZGVudHJ5ICpkX2R1cGxpY2F0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogLyogd2VpcmQgcHJvY2ZzIG1lc3M7ICpOT1QqIGV4cG9ydGVkICovCiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLAogCQkJCQkgIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqKTsKQEAgLTU1Miw2ICYjNDM7NTU2LDM2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNpbXBsZV9wb3NpdGl2ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAKIHVuc2lnbmVkIGxvbmcgdmZzX3ByZXNzdXJlX3JhdGlvKHVuc2lnbmVkIGxvbmcgdmFsKTsKIAomIzQzOy8qKgomIzQzOyAqIGRfbG9va3VwX3JlbGVhc2UgLSByZWxlYXNlIG93bmVyc2hpcCBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrCiYjNDM7ICogQGRlbnRyeTogZGVudHJ5IHRoYXQgaXMgbG9ja2VkCiYjNDM7ICoKJiM0MzsgKiBJZiBhbiBpbi1sb29rdXAgZGVudHJ5IGlzIHRvIGJlIHBhc3NlZCB0byBhbm90aGVyIHRocmVhZCB3aGljaAomIzQzOyAqIHdpbGwgZHJvcCB0aGUgaW4tbG9va3VwIGxvY2ssIHRoZW4gZF9sb29rdXBfcmVsZWFzZSgpIG11c3QgYmUgY2FsbGVkCiYjNDM7ICogdG8gdGVsbCBsb2NrZGVwIHRoYXQgdGhpcyB0aHJlYWQgbm8gbG9jayBob2xkcyB0aGUgbG9jay4gIFRoZQomIzQzOyAqIHRocmVhZCB0aGF0IHJlY2VpdmVzIHRoZSBsb2NrIG11c3QgY2FsbCBkX2xvb2t1cF9hY3F1aXJlKCkgdG8KJiM0MzsgKiBhY3F1aXJlIHRoZSBsb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkX2xvb2t1cF9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKJiM0Mzt7CiYjNDM7CWlmIChkX2luX2xvb2t1cChkZW50cnkpKQomIzQzOwkJbG9ja19tYXBfcmVsZWFzZSgmYW1wO2RlbnRyeS0mZ3Q7bG9va3VwX21hcCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRfbG9va3VwX2FjcXVpcmUgLSBhY3F1aXJlIG93bmVyc2hpcCBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrCiYjNDM7ICogQGRlbnRyeTogZGVudHJ5IHRoYXQgaXMgbG9ja2VkCiYjNDM7ICoKJiM0MzsgKiBJZiBhbiBpbi1sb29rdXAgZGVudHJ5IHdhcyBwYXNzZWQgdG8gdGhpcyB0aHJlYWQsIHRoZQomIzQzOyAqIGRfbG9va3VwX2FjcXVpcmUoKSBtdXN0IGJlIGNhbGxlZCB0byB0ZWxsIGxvY2tkZXAgdGhhdCB0aGlzCiYjNDM7ICogdGhyZWFkIG5vdyBvd25zIHRoZSBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBkX2xvb2t1cF9hY3F1aXJlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKJiM0Mzt7CiYjNDM7CWlmIChkX2luX2xvb2t1cChkZW50cnkpKQomIzQzOwkJbG9ja19tYXBfYWNxdWlyZV90cnkoJmFtcDtkZW50cnktJmd0O2xvb2t1cF9tYXApOwomIzQzO30KJiM0MzsKIC8qKgogICogZF9pbm9kZSAtIEdldCB0aGUgYWN0dWFsIGlub2RlIG9mIHRoaXMgZGVudHJ5CiAgKiBAZGVudHJ5OiBUaGUgZGVudHJ5IHRvIHF1ZXJ5CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25hbWVpLmggYi9pbmNsdWRlL2xpbnV4L25hbWVpLmgKaW5kZXggODZkNjU3YjI0ZmM2YS4uNjVmMGY1NzEyODg1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmFtZWkuaApAQCAtMzIsOCAmIzQzOzMyLDkgQEAgZW51bSB7IE1BWF9ORVNURURfTElOS1MgPSA4IH07CiAjZGVmaW5lIExPT0tVUF9DUkVBVEUJCUJJVCgxNykJLyogLi4uIGluIG9iamVjdCBjcmVhdGlvbiAqLwogI2RlZmluZSBMT09LVVBfRVhDTAkJQklUKDE4KQkvKiAuLi4gaW4gdGFyZ2V0IG11c3Qgbm90IGV4aXN0ICovCiAjZGVmaW5lIExPT0tVUF9SRU5BTUVfVEFSR0VUCUJJVCgxOSkJLyogLi4uIGluIGRlc3RpbmF0aW9uIG9mIHJlbmFtZSgpICovCiYjNDM7I2RlZmluZSBMT09LVVBfU0hBUkVECQlCSVQoMjApIC8qIFBhcmVudCBsb2NrIGlzIGhlbGQgc2hhcmVkICovCiAKLS8qIDQgc3BhcmUgYml0cyBmb3IgaW50ZW50ICovCiYjNDM7LyogMyBzcGFyZSBiaXRzIGZvciBpbnRlbnQgKi8KIAogLyogU2NvcGluZyBmbGFncyBmb3IgbG9va3VwLiAqLwogI2RlZmluZSBMT09LVVBfTk9fU1lNTElOS1MJQklUKDI0KSAvKiBObyBzeW1saW5rIGNyb3NzaW5nLiAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI5NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lIGlmIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHdhcnJhbnRlZC4gTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCBlc3BlY2lhbGx5IHRvIHVzZXJzcGFjZSwgYmVjYXVzZSBmcmFua2x5LCBLTVNBTiBzZXNzaW9ucyBhcmUgcmVzb3VyY2UgaG9ncyBhbmQgSSYjMzk7ZCBwcmVmZXIgdG8gYXZvaWQgdGhlbSBpZiBwb3NzaWJsZS4gVGhlIHJ1bGUgaXMgc2ltcGxlOiBpZiBLQVNBTiwgTE9DS0RFUCwgb3IgYW55IG90aGVyIHN0YW5kYXJkIGRldGVjdG9yIGNhbiBjYXRjaCB0aGUgYnVnLCB3ZSAqZG9uJiMzOTt0KiBuZWVkIEtNU0FOLiBXZSBvbmx5IGludm9rZSB0aGUgYmlnIGd1bnMgd2hlbiBLTVNBTiBpcyB0aGUgb25seSB0b29sIHRoYXQgY2FuIGRvIHRoZSBqb2IuCgpTbywgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZSBjaGFuZ2VzIG9uZSBieSBvbmU6CgoxLiAgKipEb2N1bWVudGF0aW9uIFVwZGF0ZXM6KiogVHlwbyBmaXhlcyBpbiBgcG9ydGluZy5yc3RgIGFuZCBgdmZzLnJzdGAgLSBubyBjb25jZXJucyBoZXJlLiBTdHJhaWdodGZvcndhcmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBubyBjb2RlIGNoYW5nZXMuIFNhZmUuCjIuICAqKmBmcy9kY2FjaGUuY2AgTW9kaWZpY2F0aW9uczoqKiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdlJiMzOTt2ZSBnb3QgYSBsb3Qgb2YgY2hhbmdlcyBpbiBgZnMvZGNhY2hlLmNgOgoKICAgICogICBJbnRyb2R1Y3Rpb24gb2YgYGxvb2t1cF9tYXBgIGFuZCBpdHMgaW5pdGlhbGl6YXRpb24gd2l0aGluIGBfX2RfYWxsb2NgLiBUaGUgYGxvb2t1cF9tYXBgIGlzIGluaXRpYWxpemVkIHdpdGggYGxvY2tkZXBfaW5pdF9tYXBgLCB3aGljaCBzaG91bGQgc2V0IHRoZSBpbml0aWFsIHN0YXRlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBgX19kX2FsbG9jYCBpbml0aWFsaXplcyBldmVyeXRoaW5nLCB0aGUgYGxvb2t1cF9tYXBgIHNob3VsZCBhbHNvIGJlIGluaXRpYWxpemVkLCBhbmQgdGhpcyBkb2VzIG5vdCB3YXJyYW50IEtNU0FOIGZ1enppbmcuIEJ1dCBJIHNob3VsZCBjaGVjayBgX19kX2FsbG9jYCB0byB2ZXJpZnkgdGhhdCBga21lbV9jYWNoZV9hbGxvY19scnVgIGNvcnJlY3RseSBpbml0aWFsaXplcyB0aGUgZmllbGRzLgogICAgKiAgIEEgbmV3IGBkX2R1cGxpY2F0ZSgpYCBoZWxwZXIsIHNvbWUgbG9ja2RlcCBhbm5vdGF0aW9ucywgYW5kIGEgYGRfYWxsb2NfdHJ5bG9jaygpYCBmdW5jdGlvbi4gVGhlc2Ugc2VlbSBmb2N1c2VkIG9uIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nLCBidXQgZG9uJiMzOTt0IGltbWVkaWF0ZWx5IHNjcmVhbSAmIzM0O3VuaW5pdGlhbGl6ZWQgbWVtb3J5LiYjMzQ7CiAgICAqICAgQ2hhbmdlcyB0byBgX19kX2xvb2t1cF91bmhhc2hgLCBgX19kX2FkZGAsIGFuZCBgZF9zcGxpY2VfYWxpYXNfb3BzYC4gVGhlc2UgYXBwZWFyIHRvIGJlIHJlZmFjdG9yaW5ncyBhbmQgaW1wcm92ZW1lbnRzIGFyb3VuZCBkZW50cnkgbWFuYWdlbWVudCwgd2l0aCBzb21lIGxvY2tkZXAtcmVsYXRlZCBjaGFuZ2VzLiBBZ2FpbiwgdGhlc2UgYXJlbiYjMzk7dCBkaXJlY3RseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KMy4gICoqYGZzL25hbWVpLmNgIFVwZGF0ZXM6KiogUHJpbWFyaWx5IGxvY2svdW5sb2NrIGNoYW5nZXMgd2l0aCBhIGJpdCBvZiByZWZhY3RvcmluZyBmb3IgYmV0dGVyIGBMT09LVVBfU0hBUkVEYCB1c2FnZS4gTm8gcmVkIGZsYWdzIGhlcmUgZWl0aGVyLgo0LiAgKipgZnMvbmZzL3VubGluay5jYCBUd2Vha3M6KiogU29tZSBsb2NraW5nLXJlbGF0ZWQgY2hhbmdlcyB3aXRoIGBkX2xvb2t1cF9hY3F1aXJlYCBhbmQgYGRfbG9va3VwX3JlbGVhc2VgLiBUaGlzIGlzIGxpa2VseSBjb3JyZWN0LW5lc3MgcmVsYXRlZCBhbmQgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBuZXcgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrcy4KNS4gICoqSGVhZGVyIGZpbGUgYWRkaXRpb25zOioqIEFkZGluZyBgbG9va3VwX21hcGAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBpbmNsdWRlL2xpbnV4L2RjYWNoZS5oYCBhbmQgYGluY2x1ZGUvbGludXgvbmFtZWkuaGAuIFRoZXNlIGFyZSBqdXN0IGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMgYW5kLCBieSB0aGVtc2VsdmVzLCBkb24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3MuCgpOb3csIGxldCYjMzk7cyByZXR1cm4gdG8gdGhlIGBsb29rdXBfbWFwYCBpbml0aWFsaXphdGlvbiBpbiBgX19kX2FsbG9jYC4gU2luY2UgdGhlIHN0cnVjdHVyZSBoYXMgYmVlbiBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV9hbGxvY19scnVgLCB0aGlzIHNob3VsZCBpbml0aWFsaXplIHRoZSBzdHJ1Y3R1cmUuIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBfX2RfYWxsb2NgIHRvIGJlIDEwMCUgc3VyZS4gQmFzZWQgb24gYW4gaW5pdGlhbCByZXZpZXcgb2YgdGhpcyBwYXRjaCwgSSB0aGluayB0aGUgY2hhbmdlcyBhcmUgZ2VuZXJhbGx5IHNhZmUgYW5kIGRvbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBvYnZpb3VzIG5ldyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0aGF0IHdvdWxkICpyZXF1aXJlKiBLTVNBTiBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgX19kX2FsbG9jYCB0cnVseSBpbml0aWFsaXplcyBhbGwgbWVtYmVycywgaW5jbHVkaW5nIGBsb29rdXBfbWFwYC4gSWYgdGhhdCBwYW5zIG91dCwgdGhlbiBJIHdpbGwgY29uc2lkZXIgdGhpcyBwYXRjaCBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWVtX2NhY2hlX2FsbG9jLipkZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kY2FjaGUuYz0xOTAyPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4tLVxuZnMvZGNhY2hlLmMtMTkwOC1cbmZzL2RjYWNoZS5jOjE5MDk6XHRkZW50cnkgPSBrbWVtX2NhY2hlX2FsbG9jX2xydShkZW50cnlfY2FjaGUsIFx1MDAyNnNiLVx1MDAzZXNfZGVudHJ5X2xydSxcbmZzL2RjYWNoZS5jLTE5MTAtXHRcdFx0XHQgICAgICBHRlBfS0VSTkVMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYF9fZF9hbGxvY2AqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gem9vbSBpbiBvbiB0aGUgYF9fZF9hbGxvY2AgZnVuY3Rpb24uIEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAxOTAwLTE5NzAuIFRoaXMgYXJlYSBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhlIGlzc3VlIEkmIzM5O20gaW52ZXN0aWdhdGluZy4gSSYjMzk7bGwgdXNlIHRoZSAmIzM0O3JlYWQtZmlsZSYjMzQ7IHRvb2wgb3IgZnVuY3Rpb24gdG8gcXVpY2tseSBwdWxsIHVwIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZSBhbmQgZ2V0IGEgZGlyZWN0IGxvb2suIEkgY2FuIHRoZW4gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGxvZ2ljLCB2YXJpYWJsZSB1c2FnZSwgYW5kIHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBjb25jZXJucyB3aXRoaW4gdGhhdCBzcGVjaWZpYyByYW5nZS4gRm9jdXNpbmcgb24gYSBkZWZpbmVkIHNlY3Rpb24gaGVscHMgc3RyZWFtbGluZSB0aGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkwMDpcdCAqL1xuMTkwMTpcdCBcbjE5MDI6XHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuMTkwMzpcdHtcbjE5MDQ6XHRcdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19sb29rdXBfa2V5O1xuMTkwNTpcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuMTkwNjpcdFx0Y2hhciAqZG5hbWU7XG4xOTA3Olx0XHRpbnQgZXJyO1xuMTkwODpcdFxuMTkwOTpcdFx0ZGVudHJ5ID0ga21lbV9jYWNoZV9hbGxvY19scnUoZGVudHJ5X2NhY2hlLCBcdTAwMjZzYi1cdTAwM2VzX2RlbnRyeV9scnUsXG4xOTEwOlx0XHRcdFx0XHQgICAgICBHRlBfS0VSTkVMKTtcbjE5MTE6XHRcdGlmICghZGVudHJ5KVxuMTkxMjpcdFx0XHRyZXR1cm4gTlVMTDtcbjE5MTM6XHRcbjE5MTQ6XHRcdC8qXG4xOTE1Olx0XHQgKiBXZSBndWFyYW50ZWUgdGhhdCB0aGUgaW5saW5lIG5hbWUgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLlxuMTkxNjpcdFx0ICogVGhpcyB3YXkgdGhlIG1lbWNweSgpIGRvbmUgYnkgdGhlIG5hbWUgc3dpdGNoaW5nIGluIHJlbmFtZVxuMTkxNzpcdFx0ICogd2lsbCBzdGlsbCBhbHdheXMgaGF2ZSBhIE5VTCBhdCB0aGUgZW5kLCBldmVuIGlmIHdlIG1pZ2h0XG4xOTE4Olx0XHQgKiBiZSBvdmVyd3JpdGluZyBhbiBpbnRlcm5hbCBOVUwgY2hhcmFjdGVyXG4xOTE5Olx0XHQgKi9cbjE5MjA6XHRcdGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7XG4xOTIxOlx0XHRpZiAodW5saWtlbHkoIW5hbWUpKSB7XG4xOTIyOlx0XHRcdG5hbWUgPSBcdTAwMjZzbGFzaF9uYW1lO1xuMTkyMzpcdFx0XHRkbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4xOTI0Olx0XHR9IGVsc2UgaWYgKG5hbWUtXHUwMDNlbGVuIFx1MDAzZSBETkFNRV9JTkxJTkVfTEVOLTEpIHtcbjE5MjU6XHRcdFx0c3RydWN0IGV4dGVybmFsX25hbWUgKnA7XG4xOTI2Olx0XG4xOTI3Olx0XHRcdHAgPSBrbWFsbG9jX2ZsZXgoKnAsIG5hbWUsIG5hbWUtXHUwMDNlbGVuICYjNDM7IDEsXG4xOTI4Olx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfUkVDTEFJTUFCTEUpO1xuMTkyOTpcdFx0XHRpZiAoIXApIHtcbjE5MzA6XHRcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50cnkpOyBcbjE5MzE6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbjE5MzI6XHRcdFx0fVxuMTkzMzpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNnAtXHUwMDNlY291bnQsIDEpO1xuMTkzNDpcdFx0XHRkbmFtZSA9IHAtXHUwMDNlbmFtZTtcbjE5MzU6XHRcdH0gZWxzZSAge1xuMTkzNjpcdFx0XHRkbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmc7XG4xOTM3Olx0XHR9XHRcbjE5Mzg6XHRcbjE5Mzk6XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5sZW4gPSBuYW1lLVx1MDAzZWxlbjtcbjE5NDA6XHRcdGRlbnRyeS1cdTAwM2VfX2RfbmFtZS5oYXNoID0gbmFtZS1cdTAwM2VoYXNoO1xuMTk0MTpcdFx0bWVtY3B5KGRuYW1lLCBuYW1lLVx1MDAzZW5hbWUsIG5hbWUtXHUwMDNlbGVuKTtcbjE5NDI6XHRcdGRuYW1lW25hbWUtXHUwMDNlbGVuXSA9IDA7XG4xOTQzOlx0XG4xOTQ0Olx0XHQvKiBNYWtlIHN1cmUgd2UgYWx3YXlzIHNlZSB0aGUgdGVybWluYXRpbmcgTlVMIGNoYXJhY3RlciAqL1xuMTk0NTpcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2ZGVudHJ5LVx1MDAzZV9fZF9uYW1lLm5hbWUsIGRuYW1lKTsgLyogXl5eICovXG4xOTQ2Olx0XG4xOTQ3Olx0XHRkZW50cnktXHUwMDNlZF9mbGFncyA9IDA7XG4xOTQ4Olx0XHRsb2NrcmVmX2luaXQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9ja3JlZik7XG4xOTQ5Olx0XHRzZXFjb3VudF9zcGlubG9ja19pbml0KFx1MDAyNmRlbnRyeS1cdTAwM2VkX3NlcSwgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4xOTUwOlx0XHRkZW50cnktXHUwMDNlZF9pbm9kZSA9IE5VTEw7XG4xOTUxOlx0XHRkZW50cnktXHUwMDNlZF9wYXJlbnQgPSBkZW50cnk7XG4xOTUyOlx0XHRkZW50cnktXHUwMDNlZF9zYiA9IHNiO1xuMTk1MzpcdFx0ZGVudHJ5LVx1MDAzZWRfb3AgPSBzYi1cdTAwM2VfX3NfZF9vcDtcbjE5NTQ6XHRcdGRlbnRyeS1cdTAwM2VkX2ZsYWdzID0gc2ItXHUwMDNlc19kX2ZsYWdzO1xuMTk1NTpcdFx0ZGVudHJ5LVx1MDAzZWRfZnNkYXRhID0gTlVMTDtcbjE5NTY6XHRcdElOSVRfSExJU1RfQkxfTk9ERShcdTAwMjZkZW50cnktXHUwMDNlZF9oYXNoKTtcbjE5NTc6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xydSk7XG4xOTU4Olx0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfY2hpbGRyZW4pO1xuMTk1OTpcdFx0ZGVudHJ5LVx1MDAzZXdhaXRlcnMgPSBOVUxMO1xuMTk2MDpcdFx0SU5JVF9ITElTVF9OT0RFKFx1MDAyNmRlbnRyeS1cdTAwM2VkX3NpYik7XG4xOTYxOlx0XG4xOTYyOlx0XHRsb2NrZGVwX2luaXRfbWFwKFx1MDAyNmRlbnRyeS1cdTAwM2Vsb29rdXBfbWFwLCBcJiMzNDtEQ0FDSEVfUEFSX0xPT0tVUFwmIzM0OywgXHUwMDI2X19sb29rdXBfa2V5LCAwKTtcbjE5NjM6XHRcbjE5NjQ6XHRcdGlmIChkZW50cnktXHUwMDNlZF9vcCBcdTAwMjZcdTAwMjYgZGVudHJ5LVx1MDAzZWRfb3AtXHUwMDNlZF9pbml0KSB7XG4xOTY1Olx0XHRcdGVyciA9IGRlbnRyeS1cdTAwM2VkX29wLVx1MDAzZWRfaW5pdChkZW50cnkpO1xuMTk2NjpcdFx0XHRpZiAoZXJyKSB7XG4xOTY3Olx0XHRcdFx0aWYgKGRuYW1lX2V4dGVybmFsKGRlbnRyeSkpXG4xOTY4Olx0XHRcdFx0XHRrZnJlZShleHRlcm5hbF9uYW1lKGRlbnRyeSkpO1xuMTk2OTpcdFx0XHRcdGttZW1fY2FjaGVfZnJlZShkZW50cnlfY2FjaGUsIGRlbnRyeSk7XG4xOTcwOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4xOTcxOlx0XHRcdH1cbjE5NzI6XHRcdH1cbjE5NzM6XHRcbjE5NzQ6XHRcdHRoaXNfY3B1X2luYyhucl9kZW50cnkpO1xuMTk3NTpcdFxuMTk3NjpcdFx0cmV0dXJuIGRlbnRyeTtcbjE5Nzc6XHR9XG4xOTc4Olx0XG4xOTc5Olx0LyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjU0CgkJCQkJCQlvdXRwdXQ6IDE5NwoJCQkJCQkJdGhvdWdodHM6IDcwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBQYXJhbGxlbCBEZW50cnkgTG9va3VwIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gZmxhZyB0aGlzIHBhdGNoIGZvciBLTVNBTiBzY3J1dGlueS4gSSBrbm93IHRoZSBkcmlsbDogd2UgaGF2ZSB0byBiZSAqcmVhbGx5KiBzdXJlIGFib3V0IGRhdGEgbGVha3MgdG8gdXNlcnNwYWNlIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UuIExldCYjMzk7cyBydW4gdGhyb3VnaCB0aGF0IGNoZWNrbGlzdDoKCiogICAqKkZpcnN0LCBhcmUgdGhlcmUgYW55IHVzZXItc3BhY2UgZXhwb3N1cmVzPyoqIE5vLiBUaGlzIHBhdGNoIHRvdWNoZXMgZG9jdW1lbnRhdGlvbiBhbmQgZmlsZSBzeXN0ZW0gaW50ZXJuYWxzOiBgZGNhY2hlLmNgLCBgbmFtZWkuY2AsIGBuZnMvdW5saW5rLmNgIGFuZCBhIGZldyBoZWFkZXJzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2UuIFdlJiMzOTtyZSBhZGRpbmcgYGxvb2t1cF9tYXBgIHRvIGBzdHJ1Y3QgZGVudHJ5YCBmb3IgbG9ja2RlcCBhbmQgc29tZSBoZWxwZXIgZnVuY3Rpb25zLCBidXQgbm90IGZvciBkaXJlY3QgY29tbXVuaWNhdGlvbiB3aXRoIHVzZXItc3BhY2UuCgoqICAgKipOZXh0LCBhcmUgdGhlcmUgY29uZGl0aW9uYWxzIG9yIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE/KiogRG9lc24mIzM5O3Qgc2VlbSBzby4gVGhlIHBhdGNoIGludHJvZHVjZXMgYERDQUNIRV9QQVJfTE9PS1VQYCB0byBhbGxvdyBwYXJhbGxlbCBsb29rdXBzLiBXZSYjMzk7cmUgYWRkaW5nIG5ldyBhbGxvY2F0aW9uIGhlbHBlcnMgZm9yIG5vbi1ibG9ja2luZyBsb29rdXAgKGBBTExPQ19QQVJBX0ZBSUxgLCBgZF9hbGxvY190cnlsb2NrYCkgYW5kIGFkZGluZyBhIGBMT09LVVBfU0hBUkVEYCBmbGFnIGZvciBsb2NraW5nIHVwZGF0ZXMuIEJ1dCB0aGVyZSYjMzk7cyBub3RoaW5nIGluIHRoZSBjaGFuZ2VzIHRoYXQgaGluZ2VzIG9uIHJlYWRpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyB0byBkZXRlcm1pbmUgcHJvZ3JhbSBmbG93LgoKKiAgICoqSG93IGFib3V0IGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXM/KiogV2UmIzM5O3JlIGludHJvZHVjaW5nIGEgbmV3IGZpZWxkIGBsb29rdXBfbWFwYCBpbiBgc3RydWN0IGRlbnRyeWAgYW5kIHVzaW5nIGl0IGZvciBsb2NrZGVwIGluc3RydW1lbnRhdGlvbiBpbiBwYXJhbGxlbCBsb29rdXBzLiBJIHNlZSBzb21lIG5ldyBkZW50cnkgYWxsb2NhdGlvbnMgYW5kIHJlZmFjdG9yaW5nIG9mIGBfX2RfYWRkYCB0byBjYWxsIGBfX2RfaW5zdGFudGlhdGVgIGZvciBwYXJhbGxlbCBsb29rdXBzLiBIb3dldmVyLCBjcnVjaWFsbHksIHRoZSBuZXcgYWxsb2NhdGlvbnMgdmlhIGBfX2RfYWxsb2NgIGZ1bGx5IGluaXRpYWxpemUgZXZlcnl0aGluZywgaW5jbHVkaW5nIGBsb2NrZGVwX2luaXRfbWFwKCZhbXA7ZGVudHJ5LSZndDtsb29rdXBfbWFwLCAuLi4pYC4KCiogICAqKkZpbmFsbHksIGlzIHRoZXJlIGEgY2hhbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyB2aWEgYm91bmRzIGNoZWNrcywgbGVuZ3RocywgZXRjLj8qKiBObywgSSBkb24mIzM5O3Qgc2VlIGFueSBjaGFuZ2VzIHRvIGJ1ZmZlciBzaXppbmcsIGJvdW5kcyBjaGVja3MsIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpCYXNlZCBvbiB0aGlzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucy4gQWxsIG9mIHRoZSBuZXcgYWxsb2NhdGlvbnMgaW5pdGlhbGl6ZSB0aGVpciBmaWVsZHMgcHJvcGVybHkuIFRoaXMgaXMgbWFpbmx5IGFib3V0IGxvY2tpbmcsIHBhcmFsbGVsaXNtLCBhbmQgZGVudHJ5IG1hbmFnZW1lbnQuIEFueSBjb25jdXJyZW50IHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3VlcyB0aGF0IEkgY2FuIHNlZSBzaG91bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAsIEtBU0FOLCBvciBrZXJuZWwgYXNzZXJ0cyAoYEJVR19PTmApLgoKU28sIHRoZSBjb25jbHVzaW9uIGlzOiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UmIzM5O3JlIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIExvY2tkZXAgdHJhY2tpbmcgZm9yIHBhcmFsbGVsIGRlbnRyeSBsb29rdXBzIChEQ0FDSEVfUEFSX0xPT0tVUCB2aWEgc3RydWN0IGxvY2tkZXBfbWFwIGluIHN0cnVjdCBkZW50cnkpLCBhZGRzIHRoZSBkX2R1cGxpY2F0ZSBhbmQgZF9hbGxvY190cnlsb2NrIGhlbHBlcnMsIHVwZGF0ZXMgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gVkZTIGxvb2t1cCByb3V0aW5lcyAobG9va3VwX3Nsb3csIGxvb2t1cF9vcGVuKSwgYW5kIGZpeGVzIGZpbGVzeXN0ZW0gZG9jdW1lbnRhdGlvbi5cblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgYm91bmRhcmllcywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIHRyYW5zZmVycy4gQWxsIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IGRlbnRyeSBpbiBfX2RfYWxsb2MpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24uIEFueSBjb25jdXJyZW5jeSwgZGVhZGxvY2ssIG9yIHJlZmNvdW50aW5nIGlzc3VlcyByZXN1bHRpbmcgZnJvbSB0aGVzZSBWRlMgbG9ja2luZy9sb29rdXAgcmVmYWN0b3JpbmdzIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBMb2NrZGVwIHRyYWNraW5nIGZvciBwYXJhbGxlbCBkZW50cnkgbG9va3VwcyAoRENBQ0hFX1BBUl9MT09LVVAgdmlhIHN0cnVjdCBsb2NrZGVwX21hcCBpbiBzdHJ1Y3QgZGVudHJ5KSwgYWRkcyB0aGUgZF9kdXBsaWNhdGUgYW5kIGRfYWxsb2NfdHJ5bG9jayBoZWxwZXJzLCB1cGRhdGVzIGxvY2tpbmcgZmxhZ3MgKExPT0tVUF9TSEFSRUQpIGluIFZGUyBsb29rdXAgcm91dGluZXMgKGxvb2t1cF9zbG93LCBsb29rdXBfb3BlbiksIGFuZCBmaXhlcyBmaWxlc3lzdGVtIGRvY3VtZW50YXRpb24uXG5cbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGtlcm5lbC10by11c2Vyc3BhY2UgZGF0YSB0cmFuc2ZlcnMuIEFsbCBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBkZW50cnkgaW4gX19kX2FsbG9jKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBBbnkgY29uY3VycmVuY3ksIGRlYWRsb2NrLCBvciByZWZjb3VudGluZyBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gdGhlc2UgVkZTIGxvY2tpbmcvbG9va3VwIHJlZmFjdG9yaW5ncyBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIHN1Y2ggYXMgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxNTo1Ny4yODEwOTAxNThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjEwMTYwOTE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJORlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkX2R1cGxpY2F0ZVwiLFxuICAgIFwiZF9hbGxvY19wYXJhbGxlbFwiLFxuICAgIFwiZF9hbGxvY190cnlsb2NrXCIsXG4gICAgXCJkX3NwbGljZV9hbGlhc1wiLFxuICAgIFwiZF9zcGxpY2VfYWxpYXNfb3BzXCIsXG4gICAgXCJkX3dhaXRfbG9va3VwXCIsXG4gICAgXCJsb29rdXBfc2xvd1wiLFxuICAgIFwibG9va3VwX3Nsb3dfa2lsbGFibGVcIixcbiAgICBcImxvb2t1cF9vcGVuXCIsXG4gICAgXCJuZnNfYXN5bmNfdW5saW5rX3JlbGVhc2VcIixcbiAgICBcIm5mc19jYWxsX3VubGlua1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgTG9ja2RlcCB0cmFja2luZyBmb3IgcGFyYWxsZWwgZGVudHJ5IGxvb2t1cHMgKERDQUNIRV9QQVJfTE9PS1VQIHZpYSBzdHJ1Y3QgbG9ja2RlcF9tYXAgaW4gc3RydWN0IGRlbnRyeSksIGFkZHMgdGhlIGRfZHVwbGljYXRlIGFuZCBkX2FsbG9jX3RyeWxvY2sgaGVscGVycywgdXBkYXRlcyBsb2NraW5nIGZsYWdzIChMT09LVVBfU0hBUkVEKSBpbiBWRlMgbG9va3VwIHJvdXRpbmVzIChsb29rdXBfc2xvdywgbG9va3VwX29wZW4pLCBhbmQgZml4ZXMgZmlsZXN5c3RlbSBkb2N1bWVudGF0aW9uLlxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGtlcm5lbC10by11c2Vyc3BhY2UgZGF0YSB0cmFuc2ZlcnMuIEFsbCBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBkZW50cnkgaW4gX19kX2FsbG9jKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBBbnkgY29uY3VycmVuY3ksIGRlYWRsb2NrLCBvciByZWZjb3VudGluZyBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gdGhlc2UgVkZTIGxvY2tpbmcvbG9va3VwIHJlZmFjdG9yaW5ncyBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIHN1Y2ggYXMgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIFZGUyBkY2FjaGUgYW5kIG5hbWVpIGxvZ2ljLCBpbmNsdWRpbmcgcGFyYWxsZWwgbG9va3VwIGxvY2tpbmcsIHNoYXJlZCBkaXJlY3RvcnkgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gbG9va3VwX3Nsb3cgYW5kIGxvb2t1cF9vcGVuLCBsb2NrZGVwIG1hcCB0cmFja2luZyBmb3IgaW4tbG9va3VwIGRlbnRyaWVzLCB1cGRhdGVkIGFzc2VydGlvbnMgaW4gZF9zcGxpY2VfYWxpYXNfb3BzLCBuZXcgZGNhY2hlIGhlbHBlcnMgKGRfZHVwbGljYXRlLCBkX2FsbG9jX3RyeWxvY2spLCBhbmQgTkZTIGFzeW5jaHJvbm91cyB1bmxpbmsgbG9jayB0cmFja2luZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSByZWFjaGFibGUga2VybmVsIHN1YnN5c3RlbXMgYW5kIGRpcmVjdGx5IGFmZmVjdCBjb25jdXJyZW5jeSBhbmQgaW52YXJpYW50IGVuZm9yY2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxNTo1Ny4yODEwOTYzMThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNTc0NjE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ5YTEyZWMxZTVmZTNmM2U1NzdkM2I2MTgzNmQ4NmU2Njk5NDMwZWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAwNDoxNTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxcbmluZGV4IDYwODgwZWIwYzQ5ZDEuLjRlMDE1ZjFiZjFmODQgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcXG5AQCAtMTIwMywxNiArMTIwMywxNiBAQCB3aWxsIGZhaWwtc2FmZS5cXG4gXFxuIC0tLVxcbiBcXG4tKiogbWFuZGF0b3J5KipcXG4rKiptYW5kYXRvcnkqKlxcbiBcXG4gbG9va3VwX29uZSgpLCBsb29rdXBfb25lX3VubG9ja2VkKCksIGxvb2t1cF9vbmVfcG9zaXRpdmVfdW5sb2NrZWQoKSBub3dcXG4gdGFrZSBhIHFzdHIgaW5zdGVhZCBvZiBhIG5hbWUgYW5kIGxlbi4gIFRoZXNlLCBub3QgdGhlIFxcXCJvbmVfbGVuXFxcIlxcbiB2ZXJzaW9ucywgc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgYWNjZXNzaW5nIGEgZmlsZXN5c3RlbSBmcm9tIG91dHNpZGVcXG4tdGhhdCBmaWxlc3lzbXRlbSwgdGhyb3VnaCBhIG1vdW50IHBvaW50IC0gd2hpY2ggd2lsbCBoYXZlIGEgbW50X2lkbWFwLlxcbit0aGF0IGZpbGVzeXN0ZW0sIHRocm91Z2ggYSBtb3VudCBwb2ludCAtIHdoaWNoIHdpbGwgaGF2ZSBhIG1udF9pZG1hcC5cXG4gXFxuIC0tLVxcbiBcXG4tKiogbWFuZGF0b3J5KipcXG4rKiptYW5kYXRvcnkqKlxcbiBcXG4gRnVuY3Rpb25zIHRyeV9sb29rdXBfb25lX2xlbigpLCBsb29rdXBfb25lX2xlbigpLFxcbiBsb29rdXBfb25lX2xlbl91bmxvY2tlZCgpIGFuZCBsb29rdXBfcG9zaXRpdmVfdW5sb2NrZWQoKSBoYXZlIGJlZW5cXG5AQCAtMTIyOSw3ICsxMjI5LDcgQEAgYWxyZWFkeSBiZWVuIHBlcmZvcm1lZCBzdWNoIGFzIGFmdGVyIHZmc19wYXRoX3BhcmVudF9sb29rdXAoKVxcbiBcXG4gLS0tXFxuIFxcbi0qKiBtYW5kYXRvcnkqKlxcbisqKm1hbmRhdG9yeSoqXFxuIFxcbiBkX2hhc2hfYW5kX2xvb2t1cCgpIGlzIG5vIGxvbmdlciBleHBvcnRlZCBvciBhdmFpbGFibGUgb3V0c2lkZSB0aGUgVkZTLlxcbiBVc2UgdHJ5X2xvb2t1cF9ub3Blcm0oKSBpbnN0ZWFkLiAgVGhpcyBhZGRzIG5hbWUgdmFsaWRhdGlvbiBhbmQgdGFrZXNcXG5AQCAtMTM3MCw3ICsxMzcwLDcgQEAgc2ltaWxhci5cXG4gXFxuIC0tLVxcbiBcXG4tKiogbWFuZGF0b3J5KipcXG4rKiptYW5kYXRvcnkqKlxcbiBcXG4gbG9ja19yZW5hbWUoKSwgbG9ja19yZW5hbWVfY2hpbGQoKSwgdW5sb2NrX3JlbmFtZSgpIGFyZSBub1xcbiBsb25nZXIgYXZhaWxhYmxlLiAgVXNlIHN0YXJ0X3JlbmFtaW5nKCkgb3Igc2ltaWxhci5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XFxuaW5kZXggZDNhOTNlZWMzOTQ1Zi4uZGU4Zjg1MDIwNTZlOCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcXG5AQCAtNTA3LDggKzUwNyw4IEBAIG90aGVyd2lzZSBub3RlZC5cXG4gXFx0ZGVudHJ5IGJlZm9yZSB0aGUgZmlyc3QgbWtkaXIgcmV0dXJucy5cXG4gXFxuIFxcdElmIHRoZXJlIGlzIGFueSBjaGFuY2UgdGhpcyBjb3VsZCBoYXBwZW4sIHRoZW4gdGhlIG5ldyBpbm9kZVxcbi1cXHRzaG91bGQgYmUgZF9kcm9wKCllZCBhbmQgYXR0YWNoZWQgd2l0aCBkX3NwbGljZV9hbGlhcygpLiAgVGhlXFxuLVxcdHJldHVybmVkIGRlbnRyeSAoaWYgYW55KSBzaG91bGQgYmUgcmV0dXJuZWQgYnkgLVxcdTAwM2Vta2RpcigpLlxcbitcXHRzaG91bGQgYmUgYXR0YWNoZWQgd2l0aCBkX3NwbGljZV9hbGlhcygpLiAgVGhlIHJldHVybmVkXFxuK1xcdGRlbnRyeSAoaWYgYW55KSBzaG91bGQgYmUgcmV0dXJuZWQgYnkgLVxcdTAwM2Vta2RpcigpLlxcbiBcXG4gYGBybWRpcmBgXFxuIFxcdGNhbGxlZCBieSB0aGUgcm1kaXIoMikgc3lzdGVtIGNhbGwuICBPbmx5IHJlcXVpcmVkIGlmIHlvdSB3YW50XFxuZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmNcXG5pbmRleCAxYjFhODFmMTBkYTY3Li4zYWY4YjJhYzY5OWY5IDEwMDY0NFxcbi0tLSBhL2ZzL2RjYWNoZS5jXFxuKysrIGIvZnMvZGNhY2hlLmNcXG5AQCAtMzIsNiArMzIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0X3NwaW5sb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VsaXN0X2JsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0X2xydS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmFtZWkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJtb3VudC5oXFxcIlxcbiBcXG5AQCAtMTkwMCw2ICsxOTAxLDcgQEAgRVhQT1JUX1NZTUJPTChkX2ludmFsaWRhdGUpO1xcbiAgXFxuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuIHtcXG4rXFx0c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2xvb2t1cF9rZXk7XFxuIFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcXG4gXFx0Y2hhciAqZG5hbWU7XFxuIFxcdGludCBlcnI7XFxuQEAgLTE5NTcsNiArMTk1OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuIFxcdGRlbnRyeS1cXHUwMDNld2FpdGVycyA9IE5VTEw7XFxuIFxcdElOSVRfSExJU1RfTk9ERShcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX3NpYik7XFxuIFxcbitcXHRsb2NrZGVwX2luaXRfbWFwKFxcdTAwMjZkZW50cnktXFx1MDAzZWxvb2t1cF9tYXAsIFxcXCJEQ0FDSEVfUEFSX0xPT0tVUFxcXCIsIFxcdTAwMjZfX2xvb2t1cF9rZXksIDApO1xcbitcXG4gXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9vcCBcXHUwMDI2XFx1MDAyNiBkZW50cnktXFx1MDAzZWRfb3AtXFx1MDAzZWRfaW5pdCkge1xcbiBcXHRcXHRlcnIgPSBkZW50cnktXFx1MDAzZWRfb3AtXFx1MDAzZWRfaW5pdChkZW50cnkpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuQEAgLTE5OTksNiArMjAwMyw1OCBAQCBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiBwYXJlbnQsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woZF9hbGxvYyk7XFxuIFxcbisvKipcXG4rICogZF9kdXBsaWNhdGUgLSBkdXBsaWNhdGUgYSBkZW50cnkgZm9yIGNvbWJpbmVkIGF0b21pYyBvcGVyYXRpb25cXG4rICogQGRlbnRyeTogdGhlIGRlbnRyeSB0byBkdXBsaWNhdGVcXG4rICpcXG4rICogU29tZSByZW5hbWUgb3BlcmF0aW9ucyBuZWVkIHRvIGJlIGNvbWJpbmVkIHdpdGggYW5vdGhlciBvcGVyYXRpb25cXG4rICogaW5zaWRlIHRoZSBmaWxlc3lzdGVtLlxcbisgKiAxLyBBIGNsdXN0ZXIgZmlsZXN5c3RlbSB3aGVuIHJlbmFtaW5nIHRvIGFuIGluLXVzZSBmaWxlIG1pZ2h0IG5lZWQgdG9cXG4rICogICBmaXJzdCBcXFwic2lsbHktcmVuYW1lXFxcIiB0aGF0IHRhcmdldCBvdXQgb2YgdGhlIHdheSBiZWZvcmUgdGhlIG1haW4gcmVuYW1lXFxuKyAqIDIvIEEgZmlsZXN5c3RlbSB0aGF0IHN1cHBvcnRzIHdoaXRlLW91dCBtaWdodCB3YW50IHRvIGNyZWF0ZSBhIHdoaXRlb3V0XFxuKyAqICAgaW4gcGxhY2Ugb2YgdGhlIGZpbGUgYmVpbmcgbW92ZWQuXFxuKyAqXFxuKyAqIEZvciB0aGlzIHRoZXkgbmVlZCB0d28gZGVudHJpZXMgd2hpY2ggdGVtcG9yYXJpbHkgaGF2ZSB0aGUgc2FtZSBuYW1lLFxcbisgKiBiZWZvcmUgb25lIGlzIHJlbmFtZWQuICBkX2R1cGxpY2F0ZSgpIHByb3ZpZGVzIGZvciB0aGlzLiAgR2l2ZW4gYVxcbisgKiBwb3NpdGl2ZSBoYXNoZWQgZGVudHJ5LCBpdCBjcmVhdGVzIGEgc2Vjb25kIGluLWxvb2t1cCBkZW50cnkuXFxuKyAqIEJlY2F1c2UgdGhlIG9yaWdpbmFsIGRlbnRyeSBleGlzdHMsIG5vIG90aGVyIHRocmVhZCB3aWxsIHRyeSB0b1xcbisgKiBjcmVhdGUgYW4gaW4tbG9va3VwIGRlbnRyeSwgc28gdGhlcmUgY2FuIGJlIG5vIHJhY2UgaW4gdGhpcyBjcmVhdGUuXFxuKyAqXFxuKyAqIFRoZSBjYWxsZXIgc2hvdWxkIGRfbW92ZSgpIHRoZSBvcmlnaW5hbCB0byBhIG5ldyBuYW1lLCBvZnRlbiB2aWEgYVxcbisgKiByZW5hbWUgcmVxdWVzdCwgYW5kIHNob3VsZCBjYWxsIGRfbG9va3VwX2RvbmUoKSBvbiB0aGUgbmV3bHkgY3JlYXRlZFxcbisgKiBkZW50cnkuICBJZiB0aGUgbmV3IGlzIGluc3RhbnRpYXRlZCB0aGVuIHRoZSBvbGQgTVVTVCBlaXRoZXIgYmUgbW92ZWRcXG4rICogb3IgZHJvcHBlZC5cXG4rICpcXG4rICogUGFyZW50IG11c3QgYmUgbG9ja2VkLlxcbisgKlxcbisgKiBSZXR1cm5zOiBhbiBpbi1sb29rdXAgZGVudHJ5LCBvciAtRU5PTUVNLlxcbisgKi9cXG4rc3RydWN0IGRlbnRyeSAqZF9kdXBsaWNhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBoYXNoID0gZGVudHJ5LVxcdTAwM2VkX25hbWUuaGFzaDtcXG4rXFx0c3RydWN0IGRlbnRyeSAqcGFyZW50ID0gZGVudHJ5LVxcdTAwM2VkX3BhcmVudDtcXG4rXFx0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmIgPSBpbl9sb29rdXBfaGFzaChwYXJlbnQsIGhhc2gpO1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICpuZXcgPSBfX2RfYWxsb2MocGFyZW50LVxcdTAwM2VkX3NiLCBcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX25hbWUpO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFuZXcpKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdG5ldy1cXHUwMDNlZF9mbGFncyB8PSBEQ0FDSEVfUEFSX0xPT0tVUDtcXG4rXFx0bG9ja19tYXBfYWNxdWlyZV90cnkoXFx1MDAyNm5ldy1cXHUwMDNlbG9va3VwX21hcCk7XFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2cGFyZW50LVxcdTAwM2VkX2xvY2spO1xcbitcXHRuZXctXFx1MDAzZWRfcGFyZW50ID0gZGdldF9kbG9jayhwYXJlbnQpO1xcbitcXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2bmV3LVxcdTAwM2VkX3NpYiwgXFx1MDAyNnBhcmVudC1cXHUwMDNlZF9jaGlsZHJlbik7XFxuK1xcdGlmIChwYXJlbnQtXFx1MDAzZWRfZmxhZ3MgXFx1MDAyNiBEQ0FDSEVfRElTQ09OTkVDVEVEKVxcbitcXHRcXHRuZXctXFx1MDAzZWRfZmxhZ3MgfD0gRENBQ0hFX0RJU0NPTk5FQ1RFRDtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnBhcmVudC1cXHUwMDNlZF9sb2NrKTtcXG4rXFxuK1xcdGhsaXN0X2JsX2xvY2soYik7XFxuK1xcdGhsaXN0X2JsX2FkZF9oZWFkKFxcdTAwMjZuZXctXFx1MDAzZWRfaW5fbG9va3VwX2hhc2gsIGIpO1xcbitcXHRobGlzdF9ibF91bmxvY2soYik7XFxuK1xcdHJldHVybiBuZXc7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChkX2R1cGxpY2F0ZSk7XFxuK1xcbiBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX2Fub24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4ge1xcbiBcXHRyZXR1cm4gX19kX2FsbG9jKHNiLCBOVUxMKTtcXG5AQCAtMjE2OCw3ICsyMjI0LDYgQEAgc3RhdGljIHZvaWQgX19kX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4gICogKG9yIG90aGVyd2lzZSBzZXQpIGJ5IHRoZSBjYWxsZXIgdG8gaW5kaWNhdGUgdGhhdCBpdCBpcyBub3dcXG4gICogaW4gdXNlIGJ5IHRoZSBkY2FjaGUuXFxuICAqL1xcbi0gXFxuIHZvaWQgZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgc3RydWN0IGlub2RlICogaW5vZGUpXFxuIHtcXG4gXFx0QlVHX09OKGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGVudHJ5KSk7XFxuQEAgLTI3NTAsNiArMjgwNSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZW5kX2Rpcl9hZGQoc3RydWN0IGlub2RlICpkaXIsIHVuc2lnbmVkIGludCBuKVxcbiBzdGF0aWMgdm9pZCBkX3dhaXRfbG9va3VwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4ge1xcbiBcXHRpZiAobGlrZWx5KGRfaW5fbG9va3VwKGRlbnRyeSkpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRlbGwgbG9ja2RlcCB3ZSB3aWxsIHdhaXQgZm9yIHRoZSBsb29rdXAgbG9jaywgYWZ0ZXJcXG4rXFx0XFx0ICogZHJvcHBpbmcgLVxcdTAwM2VkX2xvY2ssIGJ1dCB3b24ndCBhY3R1YWxseSB0YWtlIGl0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c3Bpbl9yZWxlYXNlKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbG9jay5kZXBfbWFwLCAwKTtcXG4rXFx0XFx0bG9ja19tYXBfc3luYyhcXHUwMDI2ZGVudHJ5LVxcdTAwM2Vsb29rdXBfbWFwKTtcXG4rXFx0XFx0c3Bpbl9hY3F1aXJlKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbG9jay5kZXBfbWFwLCAwLCAxLCBfVEhJU19JUF8pO1xcbitcXG4gXFx0XFx0ZGVudHJ5LVxcdTAwM2VkX2ZsYWdzIHw9IERDQUNIRV9MT09LVVBfV0FJVEVSUztcXG4gXFx0XFx0d2FpdF92YXJfZXZlbnRfc3BpbmxvY2soXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9mbGFncyxcXG4gXFx0XFx0XFx0XFx0XFx0IWRfaW5fbG9va3VwKGRlbnRyeSksXFxuQEAgLTI3NTcsOCArMjgyMCwxNiBAQCBzdGF0aWMgdm9pZCBkX3dhaXRfbG9va3VwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCxcXG4tXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuKy8qIFdoYXQgdG8gZG8gd2hlbiBfX2RfYWxsb2NfcGFyYWxsZWwgZmluZHMgYSBkX2luX2xvb2t1cCBkZW50cnkgKi9cXG4rZW51bSBhbGxvY19wYXJhIHtcXG4rXFx0QUxMT0NfUEFSQV9XQUlULFxcbitcXHRBTExPQ19QQVJBX0ZBSUwsXFxuK307XFxuK1xcbitzdGF0aWMgaW5saW5lXFxuK3N0cnVjdCBkZW50cnkgKl9fZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXFxuK1xcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuK1xcdFxcdFxcdFxcdCAgZW51bSBhbGxvY19wYXJhIGhvdylcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgaGFzaCA9IG5hbWUtXFx1MDAzZWhhc2g7XFxuIFxcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpiID0gaW5fbG9va3VwX2hhc2gocGFyZW50LCBoYXNoKTtcXG5AQCAtMjgzMSw2ICsyOTAyLDEyIEBAIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxcbiBcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX2xvY2spO1xcbiBcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbiBcXHRcXHR9XFxuK1xcdFxcdGlmICh1bmxpa2VseShob3cgPT0gQUxMT0NfUEFSQV9GQUlMKSkge1xcbitcXHRcXHRcXHQvKiBtdXN0bid0IHdhaXQgZm9yIGNvbmN1cnJlbnQgbG9va3VwIHRvIGNvbXBsZXRlICovXFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbG9jayk7XFxuK1xcdFxcdFxcdGRwdXQobmV3KTtcXG4rXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVXT1VMREJMT0NLKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBzb21lYm9keSBpcyBsaWtlbHkgdG8gYmUgc3RpbGwgZG9pbmcgbG9va3VwIGZvciBpdDtcXG4gXFx0XFx0ICogcGluIGl0IGFuZCB3YWl0IGZvciB0aGVtIHRvIGZpbmlzaFxcbkBAIC0yODU4LDE0ICsyOTM1LDc3IEBAIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxcbiBcXHR9XFxuIFxcdGhsaXN0X2JsX2FkZF9oZWFkKFxcdTAwMjZuZXctXFx1MDAzZWRfaW5fbG9va3VwX2hhc2gsIGIpO1xcbiBcXHRobGlzdF9ibF91bmxvY2soYik7XFxuK1xcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFxcdTAwMjZuZXctXFx1MDAzZWxvb2t1cF9tYXApO1xcbiBcXHRyZXR1cm4gbmV3O1xcbiBtaXNtYXRjaDpcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9sb2NrKTtcXG4gXFx0ZHB1dChkZW50cnkpO1xcbiBcXHRnb3RvIHJldHJ5O1xcbiB9XFxuK1xcbisvKipcXG4rICogZF9hbGxvY19wYXJhbGxlbCgpIC0gYWxsb2NhdGUgYSBuZXcgZGVudHJ5IGFuZCBlbnN1cmUgdW5pcXVlbmVzc1xcbisgKiBAcGFyZW50OiBkZW50cnkgb2YgdGhlIHBhcmVudFxcbisgKiBAbmFtZTogICBuYW1lIG9mIHRoZSBkZW50cnkgd2l0aGluIHRoYXQgcGFyZW50LlxcbisgKlxcbisgKiBBIG5ldyBkZW50cnkgaXMgYWxsb2NhdGVkIGFuZCwgcHJvdmlkaW5nIGl0IGlzIHVuaXF1ZSwgYWRkZWQgdG8gdGhlXFxuKyAqIHJlbGV2YW50IGluZGV4LlxcbisgKiBJZiBhbiBleGlzdGluZyBkZW50cnkgaXMgZm91bmQgd2l0aCB0aGUgc2FtZSBwYXJlbnQvbmFtZSB0aGF0IGlzXFxuKyAqIG5vdCBkX2luX2xvb2t1cCgpLCB0aGVuIHRoYXQgaXMgcmV0dXJuZWQgaW5zdGVhZC5cXG4rICogSWYgdGhlIGV4aXN0aW5nIGRlbnRyeSBpcyBkX2luX2xvb2t1cCgpLCBkX2FsbG9jX3BhcmFsbGVsKCkgd2FpdHMgZm9yXFxuKyAqIHRoYXQgbG9va3VwIHRvIGNvbXBsZXRlIGJlZm9yZSByZXR1cm5pbmcgdGhlIGRlbnRyeSBhbmQgdGhlbiBlbnN1cmVzIHRoZVxcbisgKiBtYXRjaCBpcyBzdGlsbCB2YWxpZC5cXG4rICogVGh1cyBpZiB0aGUgcmV0dXJuZWQgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCkgdGhlbiB0aGUgY2FsbGVyIGhhc1xcbisgKiBleGNsdXNpdmUgYWNjZXNzIHVudGlsIGl0IGNvbXBsZXRlcyB0aGUgbG9va3VwLlxcbisgKiBJZiB0aGUgcmV0dXJuZWQgZGVudHJ5IGlzIG5vdCBkX2luX2xvb2t1cCgpIHRoZW4gYSBsb29rdXAgaGFzXFxuKyAqIGFscmVhZHkgY29tcGxldGVkLlxcbisgKlxcbisgKiBUaGUgQG5hbWUgbXVzdCBhbHJlYWR5IGhhdmUgLVxcdTAwM2VoYXNoIHNldCwgYXMgY2FuIGJlIGFjaGlldmVkXFxuKyAqIGJ5IGUuZy4gdHJ5X2xvb2t1cF9ub3Blcm0oKS5cXG4rICpcXG4rICogUmV0dXJuczogdGhlIGRlbnRyeSwgd2hldGhlciBmb3VuZCBvciBhbGxvY2F0ZWQsIG9yIGFuIGVycm9yICUtRU5PTUVNLlxcbisgKi9cXG4rc3RydWN0IGRlbnRyeSAqZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbit7XFxuK1xcdHJldHVybiBfX2RfYWxsb2NfcGFyYWxsZWwocGFyZW50LCBuYW1lLCBBTExPQ19QQVJBX1dBSVQpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0woZF9hbGxvY19wYXJhbGxlbCk7XFxuIFxcbisvKipcXG4rICogZF9hbGxvY190cnlsb2NrKCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgbmV3IGRlbnRyeVxcbisgKiBAcGFyZW50OiBkZW50cnkgb2YgdGhlIHBhcmVudFxcbisgKiBAbmFtZTogICBuYW1lIG9mIHRoZSBkZW50cnkgd2l0aGluIHRoYXQgcGFyZW50LlxcbisgKlxcbisgKiBBIG5ldyBkZW50cnkgaXMgYWxsb2NhdGVkIGFuZCwgcHJvdmlkaW5nIGl0IGlzIHVuaXF1ZSwgYWRkZWQgdG8gdGhlXFxuKyAqIHJlbGV2YW50IGluZGV4LlxcbisgKiBJZiBhbiBleGlzdGluZyBkZW50cnkgaXMgZm91bmQgd2l0aCB0aGUgc2FtZSBwYXJlbnQvbmFtZSB0aGF0IGlzXFxuKyAqIG5vdCBkX2luX2xvb2t1cCgpIHRoZW4gdGhhdCBpcyByZXR1cm5lZCBpbnN0ZWFkLlxcbisgKiBJZiB0aGUgZXhpc3RpbmcgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCksIGRfYWxsb2NfdHJ5bG9jaygpXFxuKyAqIHJldHVybnMgd2l0aCBlcnJvciAlLUVXT1VMREJMT0NLLlxcbisgKiBUaHVzIGlmIHRoZSByZXR1cm5lZCBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSB0aGVuIHRoZSBjYWxsZXIgaGFzXFxuKyAqIGV4Y2x1c2l2ZSBhY2Nlc3MgdW50aWwgaXQgY29tcGxldGVzIHRoZSBsb29rdXAuXFxuKyAqIElmIHRoZSByZXR1cm5lZCBkZW50cnkgaXMgbm90IGRfaW5fbG9va3VwKCkgdGhlbiBhIGxvb2t1cCBoYXNcXG4rICogYWxyZWFkeSBjb21wbGV0ZWQuXFxuKyAqXFxuKyAqIFRoZSBAbmFtZSBuZWVkIG5vdCBhbHJlYWR5IGhhdmUgLVxcdTAwM2VoYXNoIHNldC5cXG4rICpcXG4rICogUmV0dXJuczogdGhlIGRlbnRyeSwgd2hldGhlciBmb3VuZCBvciBhbGxvY2F0ZWQsIG9yIGFuIGVycm9yXFxuKyAqICAgICUtRU5PTUVNLCAlLUVXT1VMREJMT0NLLCAlLUVBQ0NFUyAoZm9yIGEgYmFkIG5hbWUpIG9yXFxuKyAqICAgIGFueXRoaW5nIHJldHVybmVkIGJ5IC1cXHUwMDNlZF9oYXNoKCkuXFxuKyAqL1xcbitzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3RyeWxvY2soc3RydWN0IGRlbnRyeSAqcGFyZW50LFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IHFzdHIgKm5hbWUpXFxuK3tcXG4rXFx0c3RydWN0IGRlbnRyeSAqZGU7XFxuK1xcbitcXHRkZSA9IHRyeV9sb29rdXBfbm9wZXJtKG5hbWUsIHBhcmVudCk7XFxuK1xcdGlmICghZGUpXFxuK1xcdFxcdGRlID0gX19kX2FsbG9jX3BhcmFsbGVsKHBhcmVudCwgbmFtZSwgQUxMT0NfUEFSQV9GQUlMKTtcXG4rXFx0cmV0dXJuIGRlO1xcbit9XFxuK0VYUE9SVF9TWU1CT0woZF9hbGxvY190cnlsb2NrKTtcXG4rXFxuIC8qXFxuICAqIE1vdmUgZGVudHJ5IGZyb20gaW4tbG9va3VwIHN0YXRlIHRvIGJ1c3ktbmVnYXRpdmUgb25lLlxcbiAgKlxcbkBAIC0yODk0LDYgKzMwMzQsNyBAQCBzdGF0aWMgdm9pZCBfX2RfbG9va3VwX3VuaGFzaChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcdGIgPSBpbl9sb29rdXBfaGFzaChkZW50cnktXFx1MDAzZWRfcGFyZW50LCBkZW50cnktXFx1MDAzZWRfbmFtZS5oYXNoKTtcXG4gXFx0aGxpc3RfYmxfbG9jayhiKTtcXG4gXFx0ZGVudHJ5LVxcdTAwM2VkX2ZsYWdzIFxcdTAwMjY9IH5EQ0FDSEVfUEFSX0xPT0tVUDtcXG4rXFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2ZGVudHJ5LVxcdTAwM2Vsb29rdXBfbWFwKTtcXG4gXFx0X19obGlzdF9ibF9kZWwoXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9pbl9sb29rdXBfaGFzaCk7XFxuIFxcdGhsaXN0X2JsX3VubG9jayhiKTtcXG4gXFx0ZGVudHJ5LVxcdTAwM2V3YWl0ZXJzID0gTlVMTDtcXG5AQCAtMjkzMSwxNSArMzA3MiwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19kX2FkZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdH1cXG4gXFx0aWYgKHVubGlrZWx5KG9wcykpXFxuIFxcdFxcdGRfc2V0X2Rfb3AoZGVudHJ5LCBvcHMpO1xcbi1cXHRpZiAoaW5vZGUpIHtcXG4tXFx0XFx0dW5zaWduZWQgYWRkX2ZsYWdzID0gZF9mbGFnc19mb3JfaW5vZGUoaW5vZGUpO1xcbi1cXHRcXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX2FsaWFzLCBcXHUwMDI2aW5vZGUtXFx1MDAzZWlfZGVudHJ5KTtcXG4tXFx0XFx0cmF3X3dyaXRlX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfc2VxKTtcXG4tXFx0XFx0X19kX3NldF9pbm9kZV9hbmRfdHlwZShkZW50cnksIGlub2RlLCBhZGRfZmxhZ3MpO1xcbi1cXHRcXHRyYXdfd3JpdGVfc2VxY291bnRfZW5kKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfc2VxKTtcXG4tXFx0XFx0ZnNub3RpZnlfdXBkYXRlX2ZsYWdzKGRlbnRyeSk7XFxuLVxcdH1cXG4tXFx0X19kX3JlaGFzaChkZW50cnkpO1xcbitcXHRpZiAoaW5vZGUpXFxuK1xcdFxcdF9fZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTtcXG4rXFx0aWYgKGRfdW5oYXNoZWQoZGVudHJ5KSlcXG4rXFx0XFx0X19kX3JlaGFzaChkZW50cnkpO1xcbiBcXHRpZiAoZGlyKSB7XFxuIFxcdFxcdGVuZF9kaXJfYWRkKGRpciwgbik7XFxuIFxcdFxcdF9fZF93YWtlX2luX2xvb2t1cF93YWl0ZXJzKGRlbnRyeSk7XFxuQEAgLTMyNDEsNyArMzM3Nyw3IEBAIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdGlmIChJU19FUlIoaW5vZGUpKVxcbiBcXHRcXHRyZXR1cm4gRVJSX0NBU1QoaW5vZGUpO1xcbiBcXG4tXFx0QlVHX09OKCFkX3VuaGFzaGVkKGRlbnRyeSkpO1xcbitcXHRCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSk7XFxuIFxcbiBcXHRpZiAoIWlub2RlKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMzI5Nyw2ICszNDMzLDggQEAgc3RydWN0IGRlbnRyeSAqZF9zcGxpY2VfYWxpYXNfb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gICogQGlub2RlOiAgdGhlIGlub2RlIHdoaWNoIG1heSBoYXZlIGEgZGlzY29ubmVjdGVkIGRlbnRyeVxcbiAgKiBAZGVudHJ5OiBhIG5lZ2F0aXZlIGRlbnRyeSB3aGljaCB3ZSB3YW50IHRvIHBvaW50IHRvIHRoZSBpbm9kZS5cXG4gICpcXG4rICogQGRlbnRyeSBtdXN0IGJlIG5lZ2F0aXZlIGFuZCBtYXkgYmUgaW4tbG9va3VwIG9yIHVuaGFzaGVkIG9yIGhhc2hlZC5cXG4rICpcXG4gICogSWYgaW5vZGUgaXMgYSBkaXJlY3RvcnkgYW5kIGhhcyBhbiBJU19ST09UIGFsaWFzLCB0aGVuIGRfbW92ZSB0aGF0IGluXFxuICAqIHBsYWNlIG9mIHRoZSBnaXZlbiBkZW50cnkgYW5kIHJldHVybiBpdCwgZWxzZSBzaW1wbHkgZF9hZGQgdGhlIGlub2RlXFxuICAqIHRvIHRoZSBkZW50cnkgYW5kIHJldHVybiBOVUxMLlxcbkBAIC0zMzA0LDE2ICszNDQyLDE0IEBAIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuICAqIElmIGEgbm9uLUlTX1JPT1QgZGlyZWN0b3J5IGlzIGZvdW5kLCB0aGUgZmlsZXN5c3RlbSBpcyBjb3JydXB0LCBhbmRcXG4gICogd2Ugc2hvdWxkIGVycm9yIG91dDogZGlyZWN0b3JpZXMgY2FuJ3QgaGF2ZSBtdWx0aXBsZSBhbGlhc2VzLlxcbiAgKlxcbi0gKiBUaGlzIGlzIG5lZWRlZCBpbiB0aGUgbG9va3VwIHJvdXRpbmUgb2YgYW55IGZpbGVzeXN0ZW0gdGhhdCBpcyBleHBvcnRhYmxlXFxuLSAqICh2aWEga25mc2QpIHNvIHRoYXQgd2UgY2FuIGJ1aWxkIGRjYWNoZSBwYXRocyB0byBkaXJlY3RvcmllcyBlZmZlY3RpdmVseS5cXG4rICogVGhpcyBzaG91bGQgYmUgdXNlZCB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiAtXFx1MDAzZWxvb2t1cCgpIGFuZCB0b1xcbisgKiBpbnN0YW50aWF0ZSB0aGUgcmVzdWx0IG9mIC1cXHUwMDNlbWtkaXIoKSwgaXMgb2Z0ZW4gdXNlZnVsIGZvclxcbisgKiAtXFx1MDAzZWF0b21pY19vcGVuLCBhbmQgbWF5IGJlIHVzZWQgdG8gaW5zdGFudGlhdGUgb3RoZXIgb2JqZWN0cy5cXG4gICpcXG4gICogSWYgYSBkZW50cnkgd2FzIGZvdW5kIGFuZCBtb3ZlZCwgdGhlbiBpdCBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSBOVUxMXFxuLSAqIGlzIHJldHVybmVkLiAgVGhpcyBtYXRjaGVzIHRoZSBleHBlY3RlZCByZXR1cm4gdmFsdWUgb2YgLVxcdTAwM2Vsb29rdXAuXFxuKyAqIGlzIHJldHVybmVkLiAgVGhpcyBtYXRjaGVzIHRoZSBleHBlY3RlZCByZXR1cm4gdmFsdWUgb2YgLVxcdTAwM2Vsb29rdXAgYW5kXFxuKyAqIC1cXHUwMDNlbWtkaXIuXFxuICAqXFxuLSAqIENsdXN0ZXIgZmlsZXN5c3RlbXMgbWF5IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGEgbmVnYXRpdmUsIGhhc2hlZCBkZW50cnkuXFxuLSAqIEluIHRoYXQgY2FzZSwgd2Uga25vdyB0aGF0IHRoZSBpbm9kZSB3aWxsIGJlIGEgcmVndWxhciBmaWxlLCBhbmQgYWxzbyB0aGlzXFxuLSAqIHdpbGwgb25seSBvY2N1ciBkdXJpbmcgYXRvbWljX29wZW4uIFNvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSBkZW50cnlcXG4tICogYmVpbmcgYWxyZWFkeSBoYXNoZWQgb25seSBpbiB0aGUgZmluYWwgY2FzZS5cXG4gICovXFxuIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4ge1xcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xcbmluZGV4IDIwYTY1MzRlYTNlZmYuLmU5NzhhNzVlYjhhMTQgMTAwNjQ0XFxuLS0tIGEvZnMvbmFtZWkuY1xcbisrKyBiL2ZzL25hbWVpLmNcXG5AQCAtMTkzMyw3ICsxOTMzLDcgQEAgc3RhdGljIG5vaW5saW5lIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9zbG93KGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGlyLVxcdTAwM2VkX2lub2RlO1xcbiBcXHRzdHJ1Y3QgZGVudHJ5ICpyZXM7XFxuIFxcdGlub2RlX2xvY2tfc2hhcmVkKGlub2RlKTtcXG4tXFx0cmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzKTtcXG4rXFx0cmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzIHwgTE9PS1VQX1NIQVJFRCk7XFxuIFxcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xcbiBcXHRyZXR1cm4gcmVzO1xcbiB9XFxuQEAgLTE5NDcsNyArMTk0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfc2xvd19raWxsYWJsZShjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4gXFxuIFxcdGlmIChpbm9kZV9sb2NrX3NoYXJlZF9raWxsYWJsZShpbm9kZSkpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5UUik7XFxuLVxcdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyk7XFxuK1xcdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyB8IExPT0tVUF9TSEFSRUQpO1xcbiBcXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcXG4gXFx0cmV0dXJuIHJlcztcXG4gfVxcbkBAIC0yOTQ2LDggKzI5NDYsOCBAQCBzdHJ1Y3QgZGVudHJ5ICpzdGFydF9kaXJvcChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBxc3RyICpuYW1lLFxcbiAgKiBlbmRfZGlyb3AgLSBzaWduYWwgY29tcGxldGlvbiBvZiBhIGRpcm9wXFxuICAqIEBkZTogdGhlIGRlbnRyeSB3aGljaCB3YXMgcmV0dXJuZWQgYnkgc3RhcnRfZGlyb3Agb3Igc2ltaWxhci5cXG4gICpcXG4tICogSWYgdGhlIGRlIGlzIGFuIGVycm9yLCBub3RoaW5nIGhhcHBlbnMuIE90aGVyd2lzZSBhbnkgbG9jayB0YWtlbiB0b1xcbi0gKiBwcm90ZWN0IHRoZSBkZW50cnkgaXMgZHJvcHBlZCBhbmQgdGhlIGRlbnRyeSBpdHNlbGYgaXMgcmVsZWFzZSAoZHB1dCgpKS5cXG4rICogSWYgdGhlIEBkZSBpcyBhbiBlcnJvciwgbm90aGluZyBoYXBwZW5zLiBPdGhlcndpc2UgYW55IGxvY2sgdGFrZW4gdG9cXG4rICogcHJvdGVjdCB0aGUgZGVudHJ5IGlzIGRyb3BwZWQgYW5kIHRoZSBkZW50cnkgaXRzZWxmIGlzIHJlbGVhc2VkIChkcHV0KCkpLlxcbiAgKi9cXG4gdm9pZCBlbmRfZGlyb3Aoc3RydWN0IGRlbnRyeSAqZGUpXFxuIHtcXG5AQCAtMzIxMCw3ICszMjEwLDcgQEAgRVhQT1JUX1NZTUJPTChsb29rdXBfb25lKTtcXG4gLyoqXFxuICAqIGxvb2t1cF9vbmVfdW5sb2NrZWQgLSBsb29rdXAgc2luZ2xlIHBhdGhuYW1lIGNvbXBvbmVudFxcbiAgKiBAaWRtYXA6XFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBsb29rdXAgaXMgcGVyZm9ybWVkIGZyb21cXG4tICogQG5hbWU6XFx0cXN0ciBvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cFxcbisgKiBAbmFtZTpcXHRxc3RyIGhvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cFxcbiAgKiBAYmFzZTpcXHRiYXNlIGRpcmVjdG9yeSB0byBsb29rdXAgZnJvbVxcbiAgKlxcbiAgKiBUaGlzIGNhbiBiZSB1c2VkIGZvciBpbi1rZXJuZWwgZmlsZXN5c3RlbSBjbGllbnRzIHN1Y2ggYXMgZmlsZSBzZXJ2ZXJzLlxcbkBAIC0zMjQzLDcgKzMyNDMsNyBAQCBFWFBPUlRfU1lNQk9MKGxvb2t1cF9vbmVfdW5sb2NrZWQpO1xcbiAvKipcXG4gICogbG9va3VwX29uZV9wb3NpdGl2ZV9raWxsYWJsZSAtIGxvb2t1cCBzaW5nbGUgcGF0aG5hbWUgY29tcG9uZW50XFxuICAqIEBpZG1hcDpcXHRpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGxvb2t1cCBpcyBwZXJmb3JtZWQgZnJvbVxcbi0gKiBAbmFtZTpcXHRxc3RyIG9sZGluZyBwYXRobmFtZSBjb21wb25lbnQgdG8gbG9va3VwXFxuKyAqIEBuYW1lOlxcdHFzdHIgaG9sZGluZyBwYXRobmFtZSBjb21wb25lbnQgdG8gbG9va3VwXFxuICAqIEBiYXNlOlxcdGJhc2UgZGlyZWN0b3J5IHRvIGxvb2t1cCBmcm9tXFxuICAqXFxuICAqIFRoaXMgaGVscGVyIHdpbGwgeWllbGQgRVJSX1BUUigtRU5PRU5UKSBvbiBuZWdhdGl2ZXMuIFRoZSBoZWxwZXIgcmV0dXJuc1xcbkBAIC0zMjU5LDcgKzMyNTksNyBAQCBFWFBPUlRfU1lNQk9MKGxvb2t1cF9vbmVfdW5sb2NrZWQpO1xcbiAgKiB0aGUgaV9yd3NlbSBpdHNlbGYgaWYgbmVjZXNzYXJ5LiAgSWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZyBvclxcbiAgKiBkZWxpdmVyZWQsIGl0IHdpbGwgcmV0dXJuICUtRUlOVFIgaWYgdGhlIGxvY2sgaXMgbmVlZGVkLlxcbiAgKlxcbi0gKiBSZXR1cm5zOiBBIGRlbnRyeSwgcG9zc2libHkgbmVnYXRpdmUsIG9yXFxuKyAqIFJldHVybnM6IEEgcG9zaXRpdmUgZGVudHJ5LCBvclxcbiAgKlxcdCAgIC0gc2FtZSBlcnJvcnMgYXMgbG9va3VwX29uZV91bmxvY2tlZCgpIG9yXFxuICAqXFx0ICAgLSBFUlJfUFRSKC1FSU5UUikgaWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZy5cXG4gICovXFxuQEAgLTMzODEsNyArMzM4MSw3IEBAIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9ub3Blcm1fcG9zaXRpdmVfdW5sb2NrZWQoc3RydWN0IHFzdHIgKm5hbWUsXFxuIEVYUE9SVF9TWU1CT0wobG9va3VwX25vcGVybV9wb3NpdGl2ZV91bmxvY2tlZCk7XFxuIFxcbiAvKipcXG4tICogc3RhcnRfY3JlYXRpbmcgLSBwcmVwYXJlIHRvIGNyZWF0ZSBhIGdpdmVuIG5hbWUgd2l0aCBwZXJtaXNzaW9uIGNoZWNraW5nXFxuKyAqIHN0YXJ0X2NyZWF0aW5nIC0gcHJlcGFyZSB0byBhY2Nlc3Mgb3IgY3JlYXRlIGEgZ2l2ZW4gbmFtZSB3aXRoIHBlcm1pc3Npb24gY2hlY2tpbmdcXG4gICogQGlkbWFwOiAgaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBwcmVwYXJlIHRvIGNyZWF0ZSB0aGUgbmFtZVxcbiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSBjcmVhdGVkXFxuQEAgLTM0MTMsOCArMzQxMyw4IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmcpO1xcbiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gZmluZCB0aGUgbmFtZVxcbiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSByZW1vdmVkXFxuICAqXFxuLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIHJlbW92aW5nXFxuLSAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LiAgUGVybWlzc2lvbiBjaGVja2luZyAoTUFZX0VYRUMpIGlzIHBlcmZvcm1lZFxcbisgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZyBhbiBvYmplY3RcXG4rICogZnJvbSBhIGRpcmVjdG9yeS4gIFBlcm1pc3Npb24gY2hlY2tpbmcgKE1BWV9FWEVDKSBpcyBwZXJmb3JtZWRcXG4gICogYWdhaW5zdCBAaWRtYXAuXFxuICAqXFxuICAqIElmIHRoZSBuYW1lIGRvZXNuJ3QgZXhpc3QsIGFuIGVycm9yIGlzIHJldHVybmVkLlxcbkBAIC0zNDQwLDcgKzM0NDAsNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X3JlbW92aW5nKTtcXG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIHByZXBhcmUgdG8gY3JlYXRlIHRoZSBuYW1lXFxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWRcXG4gICpcXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcXG4rICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcXG4gICogYW4gb2JqZWN0IGluIGEgZGlyZWN0b3J5LiAgUGVybWlzc2lvbiBjaGVja2luZyAoTUFZX0VYRUMpIGlzIHBlcmZvcm1lZFxcbiAgKiBhZ2FpbnN0IEBpZG1hcC5cXG4gICpcXG5AQCAtMzQ2OSw3ICszNDY5LDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9jcmVhdGluZ19raWxsYWJsZSk7XFxuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBmaW5kIHRoZSBuYW1lXFxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIHJlbW92ZWRcXG4gICpcXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmdcXG4rICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmdcXG4gICogYW4gb2JqZWN0IGZyb20gYSBkaXJlY3RvcnkuICBQZXJtaXNzaW9uIGNoZWNraW5nIChNQVlfRVhFQykgaXMgcGVyZm9ybWVkXFxuICAqIGFnYWluc3QgQGlkbWFwLlxcbiAgKlxcbkBAIC0zNDk5LDcgKzM0OTksNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X3JlbW92aW5nX2tpbGxhYmxlKTtcXG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIHByZXBhcmUgdG8gY3JlYXRlIHRoZSBuYW1lXFxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWRcXG4gICpcXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcXG4rICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcXG4gICogYW4gb2JqZWN0IGluIGEgZGlyZWN0b3J5LlxcbiAgKlxcbiAgKiBJZiB0aGUgbmFtZSBhbHJlYWR5IGV4aXN0cywgYSBwb3NpdGl2ZSBkZW50cnkgaXMgcmV0dXJuZWQuXFxuQEAgLTM1MjIsNyArMzUyMiw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmdfbm9wZXJtKTtcXG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIGZpbmQgdGhlIG5hbWVcXG4gICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgcmVtb3ZlZFxcbiAgKlxcbi0gKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGluIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xcbisgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xcbiAgKiBhbiBvYmplY3QgZnJvbSBhIGRpcmVjdG9yeS5cXG4gICpcXG4gICogSWYgdGhlIG5hbWUgZG9lc24ndCBleGlzdCwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuXFxuQEAgLTM1NDMsMTEgKzM1NDMsMTEgQEAgc3RydWN0IGRlbnRyeSAqc3RhcnRfcmVtb3Zpbmdfbm9wZXJtKHN0cnVjdCBkZW50cnkgKnBhcmVudCxcXG4gRVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZ19ub3Blcm0pO1xcbiBcXG4gLyoqXFxuLSAqIHN0YXJ0X2NyZWF0aW5nX2RlbnRyeSAtIHByZXBhcmUgdG8gY3JlYXRlIGEgZ2l2ZW4gZGVudHJ5XFxuLSAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRlbnRyeSBzaG91bGQgYmUgcmVtb3ZlZFxcbi0gKiBAY2hpbGQ6ICB0aGUgZGVudHJ5IHRvIGJlIHJlbW92ZWRcXG4rICogc3RhcnRfY3JlYXRpbmdfZGVudHJ5IC0gcHJlcGFyZSB0byBhY2Nlc3Mgb3IgY3JlYXRlIGEgZ2l2ZW4gZGVudHJ5XFxuKyAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBvZiBkZW50cnlcXG4rICogQGNoaWxkOiAgdGhlIGRlbnRyeSB0byBiZSBwcmVwYXJlZFxcbiAgKlxcbi0gKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluIG90aGVyIGRpcm9wcyBhbmRcXG4rICogQSBsb2NrIGlzIHRha2VuIHRvIHByb3RlY3QgdGhlIGRlbnRyeSBhZ2FpbnN0IG90aGVyIGRpcm9wcyBhbmRcXG4gICogdGhlIHZhbGlkaXR5IG9mIHRoZSBkZW50cnkgaXMgY2hlY2tlZDogY29ycmVjdCBwYXJlbnQgYW5kIHN0aWxsIGhhc2hlZC5cXG4gICpcXG4gICogSWYgdGhlIGRlbnRyeSBpcyB2YWxpZCBhbmQgbmVnYXRpdmUgYSByZWZlcmVuY2UgaXMgdGFrZW4gYW5kXFxuQEAgLTM1ODAsNyArMzU4MCw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmdfZGVudHJ5KTtcXG4gICogQHBhcmVudDogZGlyZWN0b3J5IGZyb20gd2hpY2ggZGVudHJ5IHNob3VsZCBiZSByZW1vdmVkXFxuICAqIEBjaGlsZDogIHRoZSBkZW50cnkgdG8gYmUgcmVtb3ZlZFxcbiAgKlxcbi0gKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluIG90aGVyIGRpcm9wcyBhbmRcXG4rICogQSBsb2NrIGlzIHRha2VuIHRvIHByb3RlY3QgdGhlIGRlbnRyeSBhZ2FpbnN0IG90aGVyIGRpcm9wcyBhbmRcXG4gICogdGhlIHZhbGlkaXR5IG9mIHRoZSBkZW50cnkgaXMgY2hlY2tlZDogY29ycmVjdCBwYXJlbnQgYW5kIHN0aWxsIGhhc2hlZC5cXG4gICpcXG4gICogSWYgdGhlIGRlbnRyeSBpcyB2YWxpZCBhbmQgcG9zaXRpdmUsIGEgcmVmZXJlbmNlIGlzIHRha2VuIGFuZFxcbkBAIC00NDQwLDEyICs0NDQwLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdGludCBlcnJvciwgY3JlYXRlX2Vycm9yO1xcbiBcXHR1bW9kZV90IG1vZGU7XFxuIFxcdGJvb2wgZ290X3dyaXRlO1xcbitcXHR1bnNpZ25lZCBpbnQgc2hhcmVkX2ZsYWc7XFxuIFxcbiByZXRyeTpcXG4gXFx0b3Blbl9mbGFnID0gb3AtXFx1MDAzZW9wZW5fZmxhZztcXG4gXFx0Z290X3dyaXRlID0gZmFsc2U7XFxuIFxcdG1vZGUgPSBvcC1cXHUwMDNlbW9kZTtcXG4gXFx0Y3JlYXRlX2Vycm9yID0gMDtcXG4rXFx0c2hhcmVkX2ZsYWcgPSAob3Blbl9mbGFnIFxcdTAwMjYgT19DUkVBVCkgPyAwIDogTE9PS1VQX1NIQVJFRDtcXG4gXFxuIFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiAoT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSB8IE9fUkRXUikpIHtcXG4gXFx0XFx0Z290X3dyaXRlID0gIW1udF93YW50X3dyaXRlKG5kLVxcdTAwM2VwYXRoLm1udCk7XFxuQEAgLTQ0NTQsMTAgKzQ0NTYsMTAgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0ICogYSBkaWZmZXJlbnQgZXJyb3I7IHdlJ2xsIGJlIGRyb3BwaW5nIHRoaXMgb25lIGFueXdheS5cXG4gXFx0XFx0ICovXFxuIFxcdH1cXG4tXFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpXFxuLVxcdFxcdGlub2RlX2xvY2soZGlyX2lub2RlKTtcXG4tXFx0ZWxzZVxcbitcXHRpZiAoc2hhcmVkX2ZsYWcpXFxuIFxcdFxcdGlub2RlX2xvY2tfc2hhcmVkKGRpcl9pbm9kZSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0aW5vZGVfbG9jayhkaXJfaW5vZGUpO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KElTX0RFQURESVIoZGlyX2lub2RlKSkpIHtcXG4gXFx0XFx0ZGVudHJ5ID0gRVJSX1BUUigtRU5PRU5UKTtcXG5AQCAtNDUyNiw3ICs0NTI4LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFxuIFxcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XFxuIFxcdFxcdHN0cnVjdCBkZW50cnkgKnJlcyA9IGRpcl9pbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlbG9va3VwKGRpcl9pbm9kZSwgZGVudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG5kLVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgbmQtXFx1MDAzZWZsYWdzIHwgc2hhcmVkX2ZsYWcpO1xcbiBcXHRcXHRkX2xvb2t1cF9kb25lKGRlbnRyeSk7XFxuIFxcdFxcdGlmICh1bmxpa2VseShyZXMpKSB7XFxuIFxcdFxcdFxcdGlmIChJU19FUlIocmVzKSkge1xcbkBAIC00NTc0LDEwICs0NTc2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9PUEVORUQpXFxuIFxcdFxcdFxcdGZzbm90aWZ5X29wZW4oZmlsZSk7XFxuIFxcdH1cXG4tXFx0aWYgKChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSB8fCBjcmVhdGVfZXJyb3IpXFxuLVxcdFxcdGlub2RlX3VubG9jayhkaXJfaW5vZGUpO1xcbi1cXHRlbHNlXFxuK1xcdGlmIChzaGFyZWRfZmxhZylcXG4gXFx0XFx0aW5vZGVfdW5sb2NrX3NoYXJlZChkaXJfaW5vZGUpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGlub2RlX3VubG9jayhkaXJfaW5vZGUpO1xcbiBcXG4gXFx0aWYgKGdvdF93cml0ZSlcXG4gXFx0XFx0bW50X2Ryb3Bfd3JpdGUobmQtXFx1MDAzZXBhdGgubW50KTtcXG5kaWZmIC0tZ2l0IGEvZnMvbmZzL3VubGluay5jIGIvZnMvbmZzL3VubGluay5jXFxuaW5kZXggYjU3Y2ZhYTRkNTE2Zi4uYzhkNzEyMjA0ZTY0OSAxMDA2NDRcXG4tLS0gYS9mcy9uZnMvdW5saW5rLmNcXG4rKysgYi9mcy9uZnMvdW5saW5rLmNcXG5AQCAtNjcsNiArNjcsNyBAQCBzdGF0aWMgdm9pZCBuZnNfYXN5bmNfdW5saW5rX3JlbGVhc2Uodm9pZCAqY2FsbGRhdGEpXFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktXFx1MDAzZWRfc2I7XFxuIFxcbiBcXHR1cF9yZWFkX25vbl9vd25lcihcXHUwMDI2TkZTX0koZF9pbm9kZShkZW50cnktXFx1MDAzZWRfcGFyZW50KSktXFx1MDAzZXJtZGlyX3NlbSk7XFxuK1xcdGRfbG9va3VwX2FjcXVpcmUoZGVudHJ5KTtcXG4gXFx0ZF9sb29rdXBfZG9uZShkZW50cnkpO1xcbiBcXHRuZnNfZnJlZV91bmxpbmtkYXRhKGRhdGEpO1xcbiBcXHRkcHV0KGRlbnRyeSk7XFxuQEAgLTE1OSw2ICsxNjAsOCBAQCBzdGF0aWMgaW50IG5mc19jYWxsX3VubGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZlxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcdGRhdGEtXFx1MDAzZWRlbnRyeSA9IGFsaWFzO1xcbitcXHRkX2xvb2t1cF9yZWxlYXNlKGFsaWFzKTtcXG4rXFxuIFxcdG5mc19kb19jYWxsX3VubGluayhpbm9kZSwgZGF0YSk7XFxuIFxcdHJldHVybiAxO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oXFxuaW5kZXggNGIxZmY5OTYwOGUwMS4uZTdlM2VmMDUzMTNiOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaFxcbkBAIC0xMTYsNiArMTE2LDggQEAgc3RydWN0IGRlbnRyeSB7XFxuIFxcdFxcdFxcdFxcdFxcdCAqIHBvc3NpYmxlIVxcbiBcXHRcXHRcXHRcXHRcXHQgKi9cXG4gXFxuK1xcdC8qIGxvY2tkZXAgdHJhY2tpbmcgb2YgRENBQ0hFX1BBUl9MT09LVVAgbG9ja3MgKi9cXG4rXFx0c3RydWN0IGxvY2tkZXBfbWFwXFx0XFx0bG9va3VwX21hcDtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBkX2xydTtcXHRcXHQvKiBMUlUgbGlzdCAqL1xcbiBcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBkX3NpYjtcXHQvKiBjaGlsZCBvZiBwYXJlbnQgbGlzdCAqL1xcbiBcXHRzdHJ1Y3QgaGxpc3RfaGVhZCBkX2NoaWxkcmVuO1xcdC8qIG91ciBjaGlsZHJlbiAqL1xcbkBAIC0yNTcsNyArMjU5LDkgQEAgZXh0ZXJuIHZvaWQgZF9kZWxldGUoc3RydWN0IGRlbnRyeSAqKTtcXG4gZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7XFxuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcXG4gZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7XFxuK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY190cnlsb2NrKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7XFxuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9zcGxpY2VfYWxpYXMoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7XFxuK3N0cnVjdCBkZW50cnkgKmRfZHVwbGljYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuIC8qIHdlaXJkIHByb2NmcyBtZXNzOyAqTk9UKiBleHBvcnRlZCAqL1xcbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqKTtcXG5AQCAtNTUyLDYgKzU1NiwzNiBAQCBzdGF0aWMgaW5saW5lIGludCBzaW1wbGVfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBcXG4gdW5zaWduZWQgbG9uZyB2ZnNfcHJlc3N1cmVfcmF0aW8odW5zaWduZWQgbG9uZyB2YWwpO1xcbiBcXG4rLyoqXFxuKyAqIGRfbG9va3VwX3JlbGVhc2UgLSByZWxlYXNlIG93bmVyc2hpcCBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrXFxuKyAqIEBkZW50cnk6IGRlbnRyeSB0aGF0IGlzIGxvY2tlZFxcbisgKlxcbisgKiBJZiBhbiBpbi1sb29rdXAgZGVudHJ5IGlzIHRvIGJlIHBhc3NlZCB0byBhbm90aGVyIHRocmVhZCB3aGljaFxcbisgKiB3aWxsIGRyb3AgdGhlIGluLWxvb2t1cCBsb2NrLCB0aGVuIGRfbG9va3VwX3JlbGVhc2UoKSBtdXN0IGJlIGNhbGxlZFxcbisgKiB0byB0ZWxsIGxvY2tkZXAgdGhhdCB0aGlzIHRocmVhZCBubyBsb2NrIGhvbGRzIHRoZSBsb2NrLiAgVGhlXFxuKyAqIHRocmVhZCB0aGF0IHJlY2VpdmVzIHRoZSBsb2NrIG11c3QgY2FsbCBkX2xvb2t1cF9hY3F1aXJlKCkgdG9cXG4rICogYWNxdWlyZSB0aGUgbG9jay5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBkX2xvb2t1cF9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4re1xcbitcXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSlcXG4rXFx0XFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2ZGVudHJ5LVxcdTAwM2Vsb29rdXBfbWFwKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGRfbG9va3VwX2FjcXVpcmUgLSBhY3F1aXJlIG93bmVyc2hpcCBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrXFxuKyAqIEBkZW50cnk6IGRlbnRyeSB0aGF0IGlzIGxvY2tlZFxcbisgKlxcbisgKiBJZiBhbiBpbi1sb29rdXAgZGVudHJ5IHdhcyBwYXNzZWQgdG8gdGhpcyB0aHJlYWQsIHRoZVxcbisgKiBkX2xvb2t1cF9hY3F1aXJlKCkgbXVzdCBiZSBjYWxsZWQgdG8gdGVsbCBsb2NrZGVwIHRoYXQgdGhpc1xcbisgKiB0aHJlYWQgbm93IG93bnMgdGhlIERDQUNIRV9QQVJfTE9PS1VQIGxvY2suXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZF9sb29rdXBfYWNxdWlyZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuK3tcXG4rXFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpXFxuK1xcdFxcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFxcdTAwMjZkZW50cnktXFx1MDAzZWxvb2t1cF9tYXApO1xcbit9XFxuK1xcbiAvKipcXG4gICogZF9pbm9kZSAtIEdldCB0aGUgYWN0dWFsIGlub2RlIG9mIHRoaXMgZGVudHJ5XFxuICAqIEBkZW50cnk6IFRoZSBkZW50cnkgdG8gcXVlcnlcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uYW1laS5oIGIvaW5jbHVkZS9saW51eC9uYW1laS5oXFxuaW5kZXggODZkNjU3YjI0ZmM2YS4uNjVmMGY1NzEyODg1YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25hbWVpLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25hbWVpLmhcXG5AQCAtMzIsOCArMzIsOSBAQCBlbnVtIHsgTUFYX05FU1RFRF9MSU5LUyA9IDggfTtcXG4gI2RlZmluZSBMT09LVVBfQ1JFQVRFXFx0XFx0QklUKDE3KVxcdC8qIC4uLiBpbiBvYmplY3QgY3JlYXRpb24gKi9cXG4gI2RlZmluZSBMT09LVVBfRVhDTFxcdFxcdEJJVCgxOClcXHQvKiAuLi4gaW4gdGFyZ2V0IG11c3Qgbm90IGV4aXN0ICovXFxuICNkZWZpbmUgTE9PS1VQX1JFTkFNRV9UQVJHRVRcXHRCSVQoMTkpXFx0LyogLi4uIGluIGRlc3RpbmF0aW9uIG9mIHJlbmFtZSgpICovXFxuKyNkZWZpbmUgTE9PS1VQX1NIQVJFRFxcdFxcdEJJVCgyMCkgLyogUGFyZW50IGxvY2sgaXMgaGVsZCBzaGFyZWQgKi9cXG4gXFxuLS8qIDQgc3BhcmUgYml0cyBmb3IgaW50ZW50ICovXFxuKy8qIDMgc3BhcmUgYml0cyBmb3IgaW50ZW50ICovXFxuIFxcbiAvKiBTY29waW5nIGZsYWdzIGZvciBsb29rdXAuICovXFxuICNkZWZpbmUgTE9PS1VQX05PX1NZTUxJTktTXFx0QklUKDI0KSAvKiBObyBzeW1saW5rIGNyb3NzaW5nLiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxNTo1Ny45MDk5NDcxOTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxOTkwNDk4ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIk5GU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRfZHVwbGljYXRlXCIsXG4gICAgXCJkX2FsbG9jX3BhcmFsbGVsXCIsXG4gICAgXCJkX2FsbG9jX3RyeWxvY2tcIixcbiAgICBcImRfc3BsaWNlX2FsaWFzXCIsXG4gICAgXCJkX3NwbGljZV9hbGlhc19vcHNcIixcbiAgICBcImRfd2FpdF9sb29rdXBcIixcbiAgICBcImxvb2t1cF9zbG93XCIsXG4gICAgXCJsb29rdXBfc2xvd19raWxsYWJsZVwiLFxuICAgIFwibG9va3VwX29wZW5cIixcbiAgICBcIm5mc19hc3luY191bmxpbmtfcmVsZWFzZVwiLFxuICAgIFwibmZzX2NhbGxfdW5saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvcmUgVkZTIGRjYWNoZSBhbmQgbmFtZWkgbG9naWMsIGluY2x1ZGluZyBwYXJhbGxlbCBsb29rdXAgbG9ja2luZywgc2hhcmVkIGRpcmVjdG9yeSBsb2NraW5nIGZsYWdzIChMT09LVVBfU0hBUkVEKSBpbiBsb29rdXBfc2xvdyBhbmQgbG9va3VwX29wZW4sIGxvY2tkZXAgbWFwIHRyYWNraW5nIGZvciBpbi1sb29rdXAgZGVudHJpZXMsIHVwZGF0ZWQgYXNzZXJ0aW9ucyBpbiBkX3NwbGljZV9hbGlhc19vcHMsIG5ldyBkY2FjaGUgaGVscGVycyAoZF9kdXBsaWNhdGUsIGRfYWxsb2NfdHJ5bG9jayksIGFuZCBORlMgYXN5bmNocm9ub3VzIHVubGluayBsb2NrIHRyYWNraW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIHJlYWNoYWJsZSBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgZGlyZWN0bHkgYWZmZWN0IGNvbmN1cnJlbmN5IGFuZCBpbnZhcmlhbnQgZW5mb3JjZW1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDlhMTJlYzFlNWZlM2YzZTU3N2QzYjYxODM2ZDg2ZTY2OTk0MzBlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDQ6MTU6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuaW5kZXggNjA4ODBlYjBjNDlkMS4uNGUwMTVmMWJmMWY4NCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3RcbkBAIC0xMjAzLDE2ICsxMjAzLDE2IEBAIHdpbGwgZmFpbC1zYWZlLlxuIFxuIC0tLVxuIFxuLSoqIG1hbmRhdG9yeSoqXG4rKiptYW5kYXRvcnkqKlxuIFxuIGxvb2t1cF9vbmUoKSwgbG9va3VwX29uZV91bmxvY2tlZCgpLCBsb29rdXBfb25lX3Bvc2l0aXZlX3VubG9ja2VkKCkgbm93XG4gdGFrZSBhIHFzdHIgaW5zdGVhZCBvZiBhIG5hbWUgYW5kIGxlbi4gIFRoZXNlLCBub3QgdGhlIFwib25lX2xlblwiXG4gdmVyc2lvbnMsIHNob3VsZCBiZSB1c2VkIHdoZW5ldmVyIGFjY2Vzc2luZyBhIGZpbGVzeXN0ZW0gZnJvbSBvdXRzaWRlXG4tdGhhdCBmaWxlc3lzbXRlbSwgdGhyb3VnaCBhIG1vdW50IHBvaW50IC0gd2hpY2ggd2lsbCBoYXZlIGEgbW50X2lkbWFwLlxuK3RoYXQgZmlsZXN5c3RlbSwgdGhyb3VnaCBhIG1vdW50IHBvaW50IC0gd2hpY2ggd2lsbCBoYXZlIGEgbW50X2lkbWFwLlxuIFxuIC0tLVxuIFxuLSoqIG1hbmRhdG9yeSoqXG4rKiptYW5kYXRvcnkqKlxuIFxuIEZ1bmN0aW9ucyB0cnlfbG9va3VwX29uZV9sZW4oKSwgbG9va3VwX29uZV9sZW4oKSxcbiBsb29rdXBfb25lX2xlbl91bmxvY2tlZCgpIGFuZCBsb29rdXBfcG9zaXRpdmVfdW5sb2NrZWQoKSBoYXZlIGJlZW5cbkBAIC0xMjI5LDcgKzEyMjksNyBAQCBhbHJlYWR5IGJlZW4gcGVyZm9ybWVkIHN1Y2ggYXMgYWZ0ZXIgdmZzX3BhdGhfcGFyZW50X2xvb2t1cCgpXG4gXG4gLS0tXG4gXG4tKiogbWFuZGF0b3J5KipcbisqKm1hbmRhdG9yeSoqXG4gXG4gZF9oYXNoX2FuZF9sb29rdXAoKSBpcyBubyBsb25nZXIgZXhwb3J0ZWQgb3IgYXZhaWxhYmxlIG91dHNpZGUgdGhlIFZGUy5cbiBVc2UgdHJ5X2xvb2t1cF9ub3Blcm0oKSBpbnN0ZWFkLiAgVGhpcyBhZGRzIG5hbWUgdmFsaWRhdGlvbiBhbmQgdGFrZXNcbkBAIC0xMzcwLDcgKzEzNzAsNyBAQCBzaW1pbGFyLlxuIFxuIC0tLVxuIFxuLSoqIG1hbmRhdG9yeSoqXG4rKiptYW5kYXRvcnkqKlxuIFxuIGxvY2tfcmVuYW1lKCksIGxvY2tfcmVuYW1lX2NoaWxkKCksIHVubG9ja19yZW5hbWUoKSBhcmUgbm9cbiBsb25nZXIgYXZhaWxhYmxlLiAgVXNlIHN0YXJ0X3JlbmFtaW5nKCkgb3Igc2ltaWxhci5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbmluZGV4IGQzYTkzZWVjMzk0NWYuLmRlOGY4NTAyMDU2ZTggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuQEAgLTUwNyw4ICs1MDcsOCBAQCBvdGhlcndpc2Ugbm90ZWQuXG4gXHRkZW50cnkgYmVmb3JlIHRoZSBmaXJzdCBta2RpciByZXR1cm5zLlxuIFxuIFx0SWYgdGhlcmUgaXMgYW55IGNoYW5jZSB0aGlzIGNvdWxkIGhhcHBlbiwgdGhlbiB0aGUgbmV3IGlub2RlXG4tXHRzaG91bGQgYmUgZF9kcm9wKCllZCBhbmQgYXR0YWNoZWQgd2l0aCBkX3NwbGljZV9hbGlhcygpLiAgVGhlXG4tXHRyZXR1cm5lZCBkZW50cnkgKGlmIGFueSkgc2hvdWxkIGJlIHJldHVybmVkIGJ5IC1cdTAwM2Vta2RpcigpLlxuK1x0c2hvdWxkIGJlIGF0dGFjaGVkIHdpdGggZF9zcGxpY2VfYWxpYXMoKS4gIFRoZSByZXR1cm5lZFxuK1x0ZGVudHJ5IChpZiBhbnkpIHNob3VsZCBiZSByZXR1cm5lZCBieSAtXHUwMDNlbWtkaXIoKS5cbiBcbiBgYHJtZGlyYGBcbiBcdGNhbGxlZCBieSB0aGUgcm1kaXIoMikgc3lzdGVtIGNhbGwuICBPbmx5IHJlcXVpcmVkIGlmIHlvdSB3YW50XG5kaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuY1xuaW5kZXggMWIxYTgxZjEwZGE2Ny4uM2FmOGIyYWM2OTlmOSAxMDA2NDRcbi0tLSBhL2ZzL2RjYWNoZS5jXG4rKysgYi9mcy9kY2FjaGUuY1xuQEAgLTMyLDYgKzMyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRfc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3RfYmwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uYW1laS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbiAjaW5jbHVkZSBcIm1vdW50LmhcIlxuIFxuQEAgLTE5MDAsNiArMTkwMSw3IEBAIEVYUE9SVF9TWU1CT0woZF9pbnZhbGlkYXRlKTtcbiAgXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbiB7XG4rXHRzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fbG9va3VwX2tleTtcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiBcdGNoYXIgKmRuYW1lO1xuIFx0aW50IGVycjtcbkBAIC0xOTU3LDYgKzE5NTksOCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuIFx0ZGVudHJ5LVx1MDAzZXdhaXRlcnMgPSBOVUxMO1xuIFx0SU5JVF9ITElTVF9OT0RFKFx1MDAyNmRlbnRyeS1cdTAwM2VkX3NpYik7XG4gXG4rXHRsb2NrZGVwX2luaXRfbWFwKFx1MDAyNmRlbnRyeS1cdTAwM2Vsb29rdXBfbWFwLCBcIkRDQUNIRV9QQVJfTE9PS1VQXCIsIFx1MDAyNl9fbG9va3VwX2tleSwgMCk7XG4rXG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfb3AgXHUwMDI2XHUwMDI2IGRlbnRyeS1cdTAwM2VkX29wLVx1MDAzZWRfaW5pdCkge1xuIFx0XHRlcnIgPSBkZW50cnktXHUwMDNlZF9vcC1cdTAwM2VkX2luaXQoZGVudHJ5KTtcbiBcdFx0aWYgKGVycikge1xuQEAgLTE5OTksNiArMjAwMyw1OCBAQCBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiBwYXJlbnQsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuIH1cbiBFWFBPUlRfU1lNQk9MKGRfYWxsb2MpO1xuIFxuKy8qKlxuKyAqIGRfZHVwbGljYXRlIC0gZHVwbGljYXRlIGEgZGVudHJ5IGZvciBjb21iaW5lZCBhdG9taWMgb3BlcmF0aW9uXG4rICogQGRlbnRyeTogdGhlIGRlbnRyeSB0byBkdXBsaWNhdGVcbisgKlxuKyAqIFNvbWUgcmVuYW1lIG9wZXJhdGlvbnMgbmVlZCB0byBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgb3BlcmF0aW9uXG4rICogaW5zaWRlIHRoZSBmaWxlc3lzdGVtLlxuKyAqIDEvIEEgY2x1c3RlciBmaWxlc3lzdGVtIHdoZW4gcmVuYW1pbmcgdG8gYW4gaW4tdXNlIGZpbGUgbWlnaHQgbmVlZCB0b1xuKyAqICAgZmlyc3QgXCJzaWxseS1yZW5hbWVcIiB0aGF0IHRhcmdldCBvdXQgb2YgdGhlIHdheSBiZWZvcmUgdGhlIG1haW4gcmVuYW1lXG4rICogMi8gQSBmaWxlc3lzdGVtIHRoYXQgc3VwcG9ydHMgd2hpdGUtb3V0IG1pZ2h0IHdhbnQgdG8gY3JlYXRlIGEgd2hpdGVvdXRcbisgKiAgIGluIHBsYWNlIG9mIHRoZSBmaWxlIGJlaW5nIG1vdmVkLlxuKyAqXG4rICogRm9yIHRoaXMgdGhleSBuZWVkIHR3byBkZW50cmllcyB3aGljaCB0ZW1wb3JhcmlseSBoYXZlIHRoZSBzYW1lIG5hbWUsXG4rICogYmVmb3JlIG9uZSBpcyByZW5hbWVkLiAgZF9kdXBsaWNhdGUoKSBwcm92aWRlcyBmb3IgdGhpcy4gIEdpdmVuIGFcbisgKiBwb3NpdGl2ZSBoYXNoZWQgZGVudHJ5LCBpdCBjcmVhdGVzIGEgc2Vjb25kIGluLWxvb2t1cCBkZW50cnkuXG4rICogQmVjYXVzZSB0aGUgb3JpZ2luYWwgZGVudHJ5IGV4aXN0cywgbm8gb3RoZXIgdGhyZWFkIHdpbGwgdHJ5IHRvXG4rICogY3JlYXRlIGFuIGluLWxvb2t1cCBkZW50cnksIHNvIHRoZXJlIGNhbiBiZSBubyByYWNlIGluIHRoaXMgY3JlYXRlLlxuKyAqXG4rICogVGhlIGNhbGxlciBzaG91bGQgZF9tb3ZlKCkgdGhlIG9yaWdpbmFsIHRvIGEgbmV3IG5hbWUsIG9mdGVuIHZpYSBhXG4rICogcmVuYW1lIHJlcXVlc3QsIGFuZCBzaG91bGQgY2FsbCBkX2xvb2t1cF9kb25lKCkgb24gdGhlIG5ld2x5IGNyZWF0ZWRcbisgKiBkZW50cnkuICBJZiB0aGUgbmV3IGlzIGluc3RhbnRpYXRlZCB0aGVuIHRoZSBvbGQgTVVTVCBlaXRoZXIgYmUgbW92ZWRcbisgKiBvciBkcm9wcGVkLlxuKyAqXG4rICogUGFyZW50IG11c3QgYmUgbG9ja2VkLlxuKyAqXG4rICogUmV0dXJuczogYW4gaW4tbG9va3VwIGRlbnRyeSwgb3IgLUVOT01FTS5cbisgKi9cbitzdHJ1Y3QgZGVudHJ5ICpkX2R1cGxpY2F0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4re1xuK1x0dW5zaWduZWQgaW50IGhhc2ggPSBkZW50cnktXHUwMDNlZF9uYW1lLmhhc2g7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQ7XG4rXHRzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYiA9IGluX2xvb2t1cF9oYXNoKHBhcmVudCwgaGFzaCk7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpuZXcgPSBfX2RfYWxsb2MocGFyZW50LVx1MDAzZWRfc2IsIFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUpO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFuZXcpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdG5ldy1cdTAwM2VkX2ZsYWdzIHw9IERDQUNIRV9QQVJfTE9PS1VQO1xuK1x0bG9ja19tYXBfYWNxdWlyZV90cnkoXHUwMDI2bmV3LVx1MDAzZWxvb2t1cF9tYXApO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnBhcmVudC1cdTAwM2VkX2xvY2spO1xuK1x0bmV3LVx1MDAzZWRfcGFyZW50ID0gZGdldF9kbG9jayhwYXJlbnQpO1xuK1x0aGxpc3RfYWRkX2hlYWQoXHUwMDI2bmV3LVx1MDAzZWRfc2liLCBcdTAwMjZwYXJlbnQtXHUwMDNlZF9jaGlsZHJlbik7XG4rXHRpZiAocGFyZW50LVx1MDAzZWRfZmxhZ3MgXHUwMDI2IERDQUNIRV9ESVNDT05ORUNURUQpXG4rXHRcdG5ldy1cdTAwM2VkX2ZsYWdzIHw9IERDQUNIRV9ESVNDT05ORUNURUQ7XG4rXHRzcGluX3VubG9jayhcdTAwMjZwYXJlbnQtXHUwMDNlZF9sb2NrKTtcbitcbitcdGhsaXN0X2JsX2xvY2soYik7XG4rXHRobGlzdF9ibF9hZGRfaGVhZChcdTAwMjZuZXctXHUwMDNlZF9pbl9sb29rdXBfaGFzaCwgYik7XG4rXHRobGlzdF9ibF91bmxvY2soYik7XG4rXHRyZXR1cm4gbmV3O1xuK31cbitFWFBPUlRfU1lNQk9MKGRfZHVwbGljYXRlKTtcbitcbiBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX2Fub24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4gXHRyZXR1cm4gX19kX2FsbG9jKHNiLCBOVUxMKTtcbkBAIC0yMTY4LDcgKzIyMjQsNiBAQCBzdGF0aWMgdm9pZCBfX2RfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuICAqIChvciBvdGhlcndpc2Ugc2V0KSBieSB0aGUgY2FsbGVyIHRvIGluZGljYXRlIHRoYXQgaXQgaXMgbm93XG4gICogaW4gdXNlIGJ5IHRoZSBkY2FjaGUuXG4gICovXG4tIFxuIHZvaWQgZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgc3RydWN0IGlub2RlICogaW5vZGUpXG4ge1xuIFx0QlVHX09OKGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGVudHJ5KSk7XG5AQCAtMjc1MCw2ICsyODA1LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBlbmRfZGlyX2FkZChzdHJ1Y3QgaW5vZGUgKmRpciwgdW5zaWduZWQgaW50IG4pXG4gc3RhdGljIHZvaWQgZF93YWl0X2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4ge1xuIFx0aWYgKGxpa2VseShkX2luX2xvb2t1cChkZW50cnkpKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBUZWxsIGxvY2tkZXAgd2Ugd2lsbCB3YWl0IGZvciB0aGUgbG9va3VwIGxvY2ssIGFmdGVyXG4rXHRcdCAqIGRyb3BwaW5nIC1cdTAwM2VkX2xvY2ssIGJ1dCB3b24ndCBhY3R1YWxseSB0YWtlIGl0LlxuK1x0XHQgKi9cbitcdFx0c3Bpbl9yZWxlYXNlKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xvY2suZGVwX21hcCwgMCk7XG4rXHRcdGxvY2tfbWFwX3N5bmMoXHUwMDI2ZGVudHJ5LVx1MDAzZWxvb2t1cF9tYXApO1xuK1x0XHRzcGluX2FjcXVpcmUoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jay5kZXBfbWFwLCAwLCAxLCBfVEhJU19JUF8pO1xuK1xuIFx0XHRkZW50cnktXHUwMDNlZF9mbGFncyB8PSBEQ0FDSEVfTE9PS1VQX1dBSVRFUlM7XG4gXHRcdHdhaXRfdmFyX2V2ZW50X3NwaW5sb2NrKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2ZsYWdzLFxuIFx0XHRcdFx0XHQhZF9pbl9sb29rdXAoZGVudHJ5KSxcbkBAIC0yNzU3LDggKzI4MjAsMTYgQEAgc3RhdGljIHZvaWQgZF93YWl0X2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHR9XG4gfVxuIFxuLXN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuLVx0XHRcdFx0Y29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4rLyogV2hhdCB0byBkbyB3aGVuIF9fZF9hbGxvY19wYXJhbGxlbCBmaW5kcyBhIGRfaW5fbG9va3VwIGRlbnRyeSAqL1xuK2VudW0gYWxsb2NfcGFyYSB7XG4rXHRBTExPQ19QQVJBX1dBSVQsXG4rXHRBTExPQ19QQVJBX0ZBSUwsXG4rfTtcbitcbitzdGF0aWMgaW5saW5lXG4rc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCxcbitcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4rXHRcdFx0XHQgIGVudW0gYWxsb2NfcGFyYSBob3cpXG4ge1xuIFx0dW5zaWduZWQgaW50IGhhc2ggPSBuYW1lLVx1MDAzZWhhc2g7XG4gXHRzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYiA9IGluX2xvb2t1cF9oYXNoKHBhcmVudCwgaGFzaCk7XG5AQCAtMjgzMSw2ICsyOTAyLDEyIEBAIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuIFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xvY2spO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG4gXHRcdH1cbitcdFx0aWYgKHVubGlrZWx5KGhvdyA9PSBBTExPQ19QQVJBX0ZBSUwpKSB7XG4rXHRcdFx0LyogbXVzdG4ndCB3YWl0IGZvciBjb25jdXJyZW50IGxvb2t1cCB0byBjb21wbGV0ZSAqL1xuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xvY2spO1xuK1x0XHRcdGRwdXQobmV3KTtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUigtRVdPVUxEQkxPQ0spO1xuK1x0XHR9XG4gXHRcdC8qXG4gXHRcdCAqIHNvbWVib2R5IGlzIGxpa2VseSB0byBiZSBzdGlsbCBkb2luZyBsb29rdXAgZm9yIGl0O1xuIFx0XHQgKiBwaW4gaXQgYW5kIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNoXG5AQCAtMjg1OCwxNCArMjkzNSw3NyBAQCBzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCxcbiBcdH1cbiBcdGhsaXN0X2JsX2FkZF9oZWFkKFx1MDAyNm5ldy1cdTAwM2VkX2luX2xvb2t1cF9oYXNoLCBiKTtcbiBcdGhsaXN0X2JsX3VubG9jayhiKTtcbitcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFx1MDAyNm5ldy1cdTAwM2Vsb29rdXBfbWFwKTtcbiBcdHJldHVybiBuZXc7XG4gbWlzbWF0Y2g6XG4gXHRzcGluX3VubG9jayhcdTAwMjZkZW50cnktXHUwMDNlZF9sb2NrKTtcbiBcdGRwdXQoZGVudHJ5KTtcbiBcdGdvdG8gcmV0cnk7XG4gfVxuK1xuKy8qKlxuKyAqIGRfYWxsb2NfcGFyYWxsZWwoKSAtIGFsbG9jYXRlIGEgbmV3IGRlbnRyeSBhbmQgZW5zdXJlIHVuaXF1ZW5lc3NcbisgKiBAcGFyZW50OiBkZW50cnkgb2YgdGhlIHBhcmVudFxuKyAqIEBuYW1lOiAgIG5hbWUgb2YgdGhlIGRlbnRyeSB3aXRoaW4gdGhhdCBwYXJlbnQuXG4rICpcbisgKiBBIG5ldyBkZW50cnkgaXMgYWxsb2NhdGVkIGFuZCwgcHJvdmlkaW5nIGl0IGlzIHVuaXF1ZSwgYWRkZWQgdG8gdGhlXG4rICogcmVsZXZhbnQgaW5kZXguXG4rICogSWYgYW4gZXhpc3RpbmcgZGVudHJ5IGlzIGZvdW5kIHdpdGggdGhlIHNhbWUgcGFyZW50L25hbWUgdGhhdCBpc1xuKyAqIG5vdCBkX2luX2xvb2t1cCgpLCB0aGVuIHRoYXQgaXMgcmV0dXJuZWQgaW5zdGVhZC5cbisgKiBJZiB0aGUgZXhpc3RpbmcgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCksIGRfYWxsb2NfcGFyYWxsZWwoKSB3YWl0cyBmb3JcbisgKiB0aGF0IGxvb2t1cCB0byBjb21wbGV0ZSBiZWZvcmUgcmV0dXJuaW5nIHRoZSBkZW50cnkgYW5kIHRoZW4gZW5zdXJlcyB0aGVcbisgKiBtYXRjaCBpcyBzdGlsbCB2YWxpZC5cbisgKiBUaHVzIGlmIHRoZSByZXR1cm5lZCBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSB0aGVuIHRoZSBjYWxsZXIgaGFzXG4rICogZXhjbHVzaXZlIGFjY2VzcyB1bnRpbCBpdCBjb21wbGV0ZXMgdGhlIGxvb2t1cC5cbisgKiBJZiB0aGUgcmV0dXJuZWQgZGVudHJ5IGlzIG5vdCBkX2luX2xvb2t1cCgpIHRoZW4gYSBsb29rdXAgaGFzXG4rICogYWxyZWFkeSBjb21wbGV0ZWQuXG4rICpcbisgKiBUaGUgQG5hbWUgbXVzdCBhbHJlYWR5IGhhdmUgLVx1MDAzZWhhc2ggc2V0LCBhcyBjYW4gYmUgYWNoaWV2ZWRcbisgKiBieSBlLmcuIHRyeV9sb29rdXBfbm9wZXJtKCkuXG4rICpcbisgKiBSZXR1cm5zOiB0aGUgZGVudHJ5LCB3aGV0aGVyIGZvdW5kIG9yIGFsbG9jYXRlZCwgb3IgYW4gZXJyb3IgJS1FTk9NRU0uXG4rICovXG4rc3RydWN0IGRlbnRyeSAqZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4rXHRcdFx0XHRjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbit7XG4rXHRyZXR1cm4gX19kX2FsbG9jX3BhcmFsbGVsKHBhcmVudCwgbmFtZSwgQUxMT0NfUEFSQV9XQUlUKTtcbit9XG4gRVhQT1JUX1NZTUJPTChkX2FsbG9jX3BhcmFsbGVsKTtcbiBcbisvKipcbisgKiBkX2FsbG9jX3RyeWxvY2soKSAtIGZpbmQgb3IgYWxsb2NhdGUgYSBuZXcgZGVudHJ5XG4rICogQHBhcmVudDogZGVudHJ5IG9mIHRoZSBwYXJlbnRcbisgKiBAbmFtZTogICBuYW1lIG9mIHRoZSBkZW50cnkgd2l0aGluIHRoYXQgcGFyZW50LlxuKyAqXG4rICogQSBuZXcgZGVudHJ5IGlzIGFsbG9jYXRlZCBhbmQsIHByb3ZpZGluZyBpdCBpcyB1bmlxdWUsIGFkZGVkIHRvIHRoZVxuKyAqIHJlbGV2YW50IGluZGV4LlxuKyAqIElmIGFuIGV4aXN0aW5nIGRlbnRyeSBpcyBmb3VuZCB3aXRoIHRoZSBzYW1lIHBhcmVudC9uYW1lIHRoYXQgaXNcbisgKiBub3QgZF9pbl9sb29rdXAoKSB0aGVuIHRoYXQgaXMgcmV0dXJuZWQgaW5zdGVhZC5cbisgKiBJZiB0aGUgZXhpc3RpbmcgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCksIGRfYWxsb2NfdHJ5bG9jaygpXG4rICogcmV0dXJucyB3aXRoIGVycm9yICUtRVdPVUxEQkxPQ0suXG4rICogVGh1cyBpZiB0aGUgcmV0dXJuZWQgZGVudHJ5IGlzIGRfaW5fbG9va3VwKCkgdGhlbiB0aGUgY2FsbGVyIGhhc1xuKyAqIGV4Y2x1c2l2ZSBhY2Nlc3MgdW50aWwgaXQgY29tcGxldGVzIHRoZSBsb29rdXAuXG4rICogSWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBub3QgZF9pbl9sb29rdXAoKSB0aGVuIGEgbG9va3VwIGhhc1xuKyAqIGFscmVhZHkgY29tcGxldGVkLlxuKyAqXG4rICogVGhlIEBuYW1lIG5lZWQgbm90IGFscmVhZHkgaGF2ZSAtXHUwMDNlaGFzaCBzZXQuXG4rICpcbisgKiBSZXR1cm5zOiB0aGUgZGVudHJ5LCB3aGV0aGVyIGZvdW5kIG9yIGFsbG9jYXRlZCwgb3IgYW4gZXJyb3JcbisgKiAgICAlLUVOT01FTSwgJS1FV09VTERCTE9DSywgJS1FQUNDRVMgKGZvciBhIGJhZCBuYW1lKSBvclxuKyAqICAgIGFueXRoaW5nIHJldHVybmVkIGJ5IC1cdTAwM2VkX2hhc2goKS5cbisgKi9cbitzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3RyeWxvY2soc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgcXN0ciAqbmFtZSlcbit7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcbitcbitcdGRlID0gdHJ5X2xvb2t1cF9ub3Blcm0obmFtZSwgcGFyZW50KTtcbitcdGlmICghZGUpXG4rXHRcdGRlID0gX19kX2FsbG9jX3BhcmFsbGVsKHBhcmVudCwgbmFtZSwgQUxMT0NfUEFSQV9GQUlMKTtcbitcdHJldHVybiBkZTtcbit9XG4rRVhQT1JUX1NZTUJPTChkX2FsbG9jX3RyeWxvY2spO1xuK1xuIC8qXG4gICogTW92ZSBkZW50cnkgZnJvbSBpbi1sb29rdXAgc3RhdGUgdG8gYnVzeS1uZWdhdGl2ZSBvbmUuXG4gICpcbkBAIC0yODk0LDYgKzMwMzQsNyBAQCBzdGF0aWMgdm9pZCBfX2RfbG9va3VwX3VuaGFzaChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRiID0gaW5fbG9va3VwX2hhc2goZGVudHJ5LVx1MDAzZWRfcGFyZW50LCBkZW50cnktXHUwMDNlZF9uYW1lLmhhc2gpO1xuIFx0aGxpc3RfYmxfbG9jayhiKTtcbiBcdGRlbnRyeS1cdTAwM2VkX2ZsYWdzIFx1MDAyNj0gfkRDQUNIRV9QQVJfTE9PS1VQO1xuK1x0bG9ja19tYXBfcmVsZWFzZShcdTAwMjZkZW50cnktXHUwMDNlbG9va3VwX21hcCk7XG4gXHRfX2hsaXN0X2JsX2RlbChcdTAwMjZkZW50cnktXHUwMDNlZF9pbl9sb29rdXBfaGFzaCk7XG4gXHRobGlzdF9ibF91bmxvY2soYik7XG4gXHRkZW50cnktXHUwMDNld2FpdGVycyA9IE5VTEw7XG5AQCAtMjkzMSwxNSArMzA3MiwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19kX2FkZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHR9XG4gXHRpZiAodW5saWtlbHkob3BzKSlcbiBcdFx0ZF9zZXRfZF9vcChkZW50cnksIG9wcyk7XG4tXHRpZiAoaW5vZGUpIHtcbi1cdFx0dW5zaWduZWQgYWRkX2ZsYWdzID0gZF9mbGFnc19mb3JfaW5vZGUoaW5vZGUpO1xuLVx0XHRobGlzdF9hZGRfaGVhZChcdTAwMjZkZW50cnktXHUwMDNlZF9hbGlhcywgXHUwMDI2aW5vZGUtXHUwMDNlaV9kZW50cnkpO1xuLVx0XHRyYXdfd3JpdGVfc2VxY291bnRfYmVnaW4oXHUwMDI2ZGVudHJ5LVx1MDAzZWRfc2VxKTtcbi1cdFx0X19kX3NldF9pbm9kZV9hbmRfdHlwZShkZW50cnksIGlub2RlLCBhZGRfZmxhZ3MpO1xuLVx0XHRyYXdfd3JpdGVfc2VxY291bnRfZW5kKFx1MDAyNmRlbnRyeS1cdTAwM2VkX3NlcSk7XG4tXHRcdGZzbm90aWZ5X3VwZGF0ZV9mbGFncyhkZW50cnkpO1xuLVx0fVxuLVx0X19kX3JlaGFzaChkZW50cnkpO1xuK1x0aWYgKGlub2RlKVxuK1x0XHRfX2RfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7XG4rXHRpZiAoZF91bmhhc2hlZChkZW50cnkpKVxuK1x0XHRfX2RfcmVoYXNoKGRlbnRyeSk7XG4gXHRpZiAoZGlyKSB7XG4gXHRcdGVuZF9kaXJfYWRkKGRpciwgbik7XG4gXHRcdF9fZF93YWtlX2luX2xvb2t1cF93YWl0ZXJzKGRlbnRyeSk7XG5AQCAtMzI0MSw3ICszMzc3LDcgQEAgc3RydWN0IGRlbnRyeSAqZF9zcGxpY2VfYWxpYXNfb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdGlmIChJU19FUlIoaW5vZGUpKVxuIFx0XHRyZXR1cm4gRVJSX0NBU1QoaW5vZGUpO1xuIFxuLVx0QlVHX09OKCFkX3VuaGFzaGVkKGRlbnRyeSkpO1xuK1x0QlVHX09OKGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpO1xuIFxuIFx0aWYgKCFpbm9kZSlcbiBcdFx0Z290byBvdXQ7XG5AQCAtMzI5Nyw2ICszNDMzLDggQEAgc3RydWN0IGRlbnRyeSAqZF9zcGxpY2VfYWxpYXNfb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiAgKiBAaW5vZGU6ICB0aGUgaW5vZGUgd2hpY2ggbWF5IGhhdmUgYSBkaXNjb25uZWN0ZWQgZGVudHJ5XG4gICogQGRlbnRyeTogYSBuZWdhdGl2ZSBkZW50cnkgd2hpY2ggd2Ugd2FudCB0byBwb2ludCB0byB0aGUgaW5vZGUuXG4gICpcbisgKiBAZGVudHJ5IG11c3QgYmUgbmVnYXRpdmUgYW5kIG1heSBiZSBpbi1sb29rdXAgb3IgdW5oYXNoZWQgb3IgaGFzaGVkLlxuKyAqXG4gICogSWYgaW5vZGUgaXMgYSBkaXJlY3RvcnkgYW5kIGhhcyBhbiBJU19ST09UIGFsaWFzLCB0aGVuIGRfbW92ZSB0aGF0IGluXG4gICogcGxhY2Ugb2YgdGhlIGdpdmVuIGRlbnRyeSBhbmQgcmV0dXJuIGl0LCBlbHNlIHNpbXBseSBkX2FkZCB0aGUgaW5vZGVcbiAgKiB0byB0aGUgZGVudHJ5IGFuZCByZXR1cm4gTlVMTC5cbkBAIC0zMzA0LDE2ICszNDQyLDE0IEBAIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gICogSWYgYSBub24tSVNfUk9PVCBkaXJlY3RvcnkgaXMgZm91bmQsIHRoZSBmaWxlc3lzdGVtIGlzIGNvcnJ1cHQsIGFuZFxuICAqIHdlIHNob3VsZCBlcnJvciBvdXQ6IGRpcmVjdG9yaWVzIGNhbid0IGhhdmUgbXVsdGlwbGUgYWxpYXNlcy5cbiAgKlxuLSAqIFRoaXMgaXMgbmVlZGVkIGluIHRoZSBsb29rdXAgcm91dGluZSBvZiBhbnkgZmlsZXN5c3RlbSB0aGF0IGlzIGV4cG9ydGFibGVcbi0gKiAodmlhIGtuZnNkKSBzbyB0aGF0IHdlIGNhbiBidWlsZCBkY2FjaGUgcGF0aHMgdG8gZGlyZWN0b3JpZXMgZWZmZWN0aXZlbHkuXG4rICogVGhpcyBzaG91bGQgYmUgdXNlZCB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiAtXHUwMDNlbG9va3VwKCkgYW5kIHRvXG4rICogaW5zdGFudGlhdGUgdGhlIHJlc3VsdCBvZiAtXHUwMDNlbWtkaXIoKSwgaXMgb2Z0ZW4gdXNlZnVsIGZvclxuKyAqIC1cdTAwM2VhdG9taWNfb3BlbiwgYW5kIG1heSBiZSB1c2VkIHRvIGluc3RhbnRpYXRlIG90aGVyIG9iamVjdHMuXG4gICpcbiAgKiBJZiBhIGRlbnRyeSB3YXMgZm91bmQgYW5kIG1vdmVkLCB0aGVuIGl0IGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlIE5VTExcbi0gKiBpcyByZXR1cm5lZC4gIFRoaXMgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIG9mIC1cdTAwM2Vsb29rdXAuXG4rICogaXMgcmV0dXJuZWQuICBUaGlzIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHJldHVybiB2YWx1ZSBvZiAtXHUwMDNlbG9va3VwIGFuZFxuKyAqIC1cdTAwM2Vta2Rpci5cbiAgKlxuLSAqIENsdXN0ZXIgZmlsZXN5c3RlbXMgbWF5IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGEgbmVnYXRpdmUsIGhhc2hlZCBkZW50cnkuXG4tICogSW4gdGhhdCBjYXNlLCB3ZSBrbm93IHRoYXQgdGhlIGlub2RlIHdpbGwgYmUgYSByZWd1bGFyIGZpbGUsIGFuZCBhbHNvIHRoaXNcbi0gKiB3aWxsIG9ubHkgb2NjdXIgZHVyaW5nIGF0b21pY19vcGVuLiBTbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgZGVudHJ5XG4tICogYmVpbmcgYWxyZWFkeSBoYXNoZWQgb25seSBpbiB0aGUgZmluYWwgY2FzZS5cbiAgKi9cbiBzdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4ge1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi5lOTc4YTc1ZWI4YTE0IDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuKysrIGIvZnMvbmFtZWkuY1xuQEAgLTE5MzMsNyArMTkzMyw3IEBAIHN0YXRpYyBub2lubGluZSBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfc2xvdyhjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkaXItXHUwMDNlZF9pbm9kZTtcbiBcdHN0cnVjdCBkZW50cnkgKnJlcztcbiBcdGlub2RlX2xvY2tfc2hhcmVkKGlub2RlKTtcbi1cdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyk7XG4rXHRyZXMgPSBfX2xvb2t1cF9zbG93KG5hbWUsIGRpciwgZmxhZ3MgfCBMT09LVVBfU0hBUkVEKTtcbiBcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuIFx0cmV0dXJuIHJlcztcbiB9XG5AQCAtMTk0Nyw3ICsxOTQ3LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9zbG93X2tpbGxhYmxlKGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFxuIFx0aWYgKGlub2RlX2xvY2tfc2hhcmVkX2tpbGxhYmxlKGlub2RlKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlRSKTtcbi1cdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyk7XG4rXHRyZXMgPSBfX2xvb2t1cF9zbG93KG5hbWUsIGRpciwgZmxhZ3MgfCBMT09LVVBfU0hBUkVEKTtcbiBcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuIFx0cmV0dXJuIHJlcztcbiB9XG5AQCAtMjk0Niw4ICsyOTQ2LDggQEAgc3RydWN0IGRlbnRyeSAqc3RhcnRfZGlyb3Aoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiAgKiBlbmRfZGlyb3AgLSBzaWduYWwgY29tcGxldGlvbiBvZiBhIGRpcm9wXG4gICogQGRlOiB0aGUgZGVudHJ5IHdoaWNoIHdhcyByZXR1cm5lZCBieSBzdGFydF9kaXJvcCBvciBzaW1pbGFyLlxuICAqXG4tICogSWYgdGhlIGRlIGlzIGFuIGVycm9yLCBub3RoaW5nIGhhcHBlbnMuIE90aGVyd2lzZSBhbnkgbG9jayB0YWtlbiB0b1xuLSAqIHByb3RlY3QgdGhlIGRlbnRyeSBpcyBkcm9wcGVkIGFuZCB0aGUgZGVudHJ5IGl0c2VsZiBpcyByZWxlYXNlIChkcHV0KCkpLlxuKyAqIElmIHRoZSBAZGUgaXMgYW4gZXJyb3IsIG5vdGhpbmcgaGFwcGVucy4gT3RoZXJ3aXNlIGFueSBsb2NrIHRha2VuIHRvXG4rICogcHJvdGVjdCB0aGUgZGVudHJ5IGlzIGRyb3BwZWQgYW5kIHRoZSBkZW50cnkgaXRzZWxmIGlzIHJlbGVhc2VkIChkcHV0KCkpLlxuICAqL1xuIHZvaWQgZW5kX2Rpcm9wKHN0cnVjdCBkZW50cnkgKmRlKVxuIHtcbkBAIC0zMjEwLDcgKzMyMTAsNyBAQCBFWFBPUlRfU1lNQk9MKGxvb2t1cF9vbmUpO1xuIC8qKlxuICAqIGxvb2t1cF9vbmVfdW5sb2NrZWQgLSBsb29rdXAgc2luZ2xlIHBhdGhuYW1lIGNvbXBvbmVudFxuICAqIEBpZG1hcDpcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgbG9va3VwIGlzIHBlcmZvcm1lZCBmcm9tXG4tICogQG5hbWU6XHRxc3RyIG9sZGluZyBwYXRobmFtZSBjb21wb25lbnQgdG8gbG9va3VwXG4rICogQG5hbWU6XHRxc3RyIGhvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cFxuICAqIEBiYXNlOlx0YmFzZSBkaXJlY3RvcnkgdG8gbG9va3VwIGZyb21cbiAgKlxuICAqIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGluLWtlcm5lbCBmaWxlc3lzdGVtIGNsaWVudHMgc3VjaCBhcyBmaWxlIHNlcnZlcnMuXG5AQCAtMzI0Myw3ICszMjQzLDcgQEAgRVhQT1JUX1NZTUJPTChsb29rdXBfb25lX3VubG9ja2VkKTtcbiAvKipcbiAgKiBsb29rdXBfb25lX3Bvc2l0aXZlX2tpbGxhYmxlIC0gbG9va3VwIHNpbmdsZSBwYXRobmFtZSBjb21wb25lbnRcbiAgKiBAaWRtYXA6XHRpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGxvb2t1cCBpcyBwZXJmb3JtZWQgZnJvbVxuLSAqIEBuYW1lOlx0cXN0ciBvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cFxuKyAqIEBuYW1lOlx0cXN0ciBob2xkaW5nIHBhdGhuYW1lIGNvbXBvbmVudCB0byBsb29rdXBcbiAgKiBAYmFzZTpcdGJhc2UgZGlyZWN0b3J5IHRvIGxvb2t1cCBmcm9tXG4gICpcbiAgKiBUaGlzIGhlbHBlciB3aWxsIHlpZWxkIEVSUl9QVFIoLUVOT0VOVCkgb24gbmVnYXRpdmVzLiBUaGUgaGVscGVyIHJldHVybnNcbkBAIC0zMjU5LDcgKzMyNTksNyBAQCBFWFBPUlRfU1lNQk9MKGxvb2t1cF9vbmVfdW5sb2NrZWQpO1xuICAqIHRoZSBpX3J3c2VtIGl0c2VsZiBpZiBuZWNlc3NhcnkuICBJZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIG9yXG4gICogZGVsaXZlcmVkLCBpdCB3aWxsIHJldHVybiAlLUVJTlRSIGlmIHRoZSBsb2NrIGlzIG5lZWRlZC5cbiAgKlxuLSAqIFJldHVybnM6IEEgZGVudHJ5LCBwb3NzaWJseSBuZWdhdGl2ZSwgb3JcbisgKiBSZXR1cm5zOiBBIHBvc2l0aXZlIGRlbnRyeSwgb3JcbiAgKlx0ICAgLSBzYW1lIGVycm9ycyBhcyBsb29rdXBfb25lX3VubG9ja2VkKCkgb3JcbiAgKlx0ICAgLSBFUlJfUFRSKC1FSU5UUikgaWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZy5cbiAgKi9cbkBAIC0zMzgxLDcgKzMzODEsNyBAQCBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfbm9wZXJtX3Bvc2l0aXZlX3VubG9ja2VkKHN0cnVjdCBxc3RyICpuYW1lLFxuIEVYUE9SVF9TWU1CT0wobG9va3VwX25vcGVybV9wb3NpdGl2ZV91bmxvY2tlZCk7XG4gXG4gLyoqXG4tICogc3RhcnRfY3JlYXRpbmcgLSBwcmVwYXJlIHRvIGNyZWF0ZSBhIGdpdmVuIG5hbWUgd2l0aCBwZXJtaXNzaW9uIGNoZWNraW5nXG4rICogc3RhcnRfY3JlYXRpbmcgLSBwcmVwYXJlIHRvIGFjY2VzcyBvciBjcmVhdGUgYSBnaXZlbiBuYW1lIHdpdGggcGVybWlzc2lvbiBjaGVja2luZ1xuICAqIEBpZG1hcDogIGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBwcmVwYXJlIHRvIGNyZWF0ZSB0aGUgbmFtZVxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWRcbkBAIC0zNDEzLDggKzM0MTMsOCBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nKTtcbiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gZmluZCB0aGUgbmFtZVxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIHJlbW92ZWRcbiAgKlxuLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIHJlbW92aW5nXG4tICogYW4gb2JqZWN0IGZyb20gYSBkaXJlY3RvcnkuICBQZXJtaXNzaW9uIGNoZWNraW5nIChNQVlfRVhFQykgaXMgcGVyZm9ybWVkXG4rICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmcgYW4gb2JqZWN0XG4rICogZnJvbSBhIGRpcmVjdG9yeS4gIFBlcm1pc3Npb24gY2hlY2tpbmcgKE1BWV9FWEVDKSBpcyBwZXJmb3JtZWRcbiAgKiBhZ2FpbnN0IEBpZG1hcC5cbiAgKlxuICAqIElmIHRoZSBuYW1lIGRvZXNuJ3QgZXhpc3QsIGFuIGVycm9yIGlzIHJldHVybmVkLlxuQEAgLTM0NDAsNyArMzQ0MCw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfcmVtb3ZpbmcpO1xuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBwcmVwYXJlIHRvIGNyZWF0ZSB0aGUgbmFtZVxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWRcbiAgKlxuLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIGNyZWF0aW5nXG4rICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcbiAgKiBhbiBvYmplY3QgaW4gYSBkaXJlY3RvcnkuICBQZXJtaXNzaW9uIGNoZWNraW5nIChNQVlfRVhFQykgaXMgcGVyZm9ybWVkXG4gICogYWdhaW5zdCBAaWRtYXAuXG4gICpcbkBAIC0zNDY5LDcgKzM0NjksNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX2tpbGxhYmxlKTtcbiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gZmluZCB0aGUgbmFtZVxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIHJlbW92ZWRcbiAgKlxuLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIHJlbW92aW5nXG4rICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmdcbiAgKiBhbiBvYmplY3QgZnJvbSBhIGRpcmVjdG9yeS4gIFBlcm1pc3Npb24gY2hlY2tpbmcgKE1BWV9FWEVDKSBpcyBwZXJmb3JtZWRcbiAgKiBhZ2FpbnN0IEBpZG1hcC5cbiAgKlxuQEAgLTM0OTksNyArMzQ5OSw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfcmVtb3Zpbmdfa2lsbGFibGUpO1xuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBwcmVwYXJlIHRvIGNyZWF0ZSB0aGUgbmFtZVxuICAqIEBuYW1lOiAgIHRoZSBuYW1lIHRvIGJlIGNyZWF0ZWRcbiAgKlxuLSAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaW4gcGVyZm9ybWVkIHByaW9yIHRvIGNyZWF0aW5nXG4rICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpcyBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcbiAgKiBhbiBvYmplY3QgaW4gYSBkaXJlY3RvcnkuXG4gICpcbiAgKiBJZiB0aGUgbmFtZSBhbHJlYWR5IGV4aXN0cywgYSBwb3NpdGl2ZSBkZW50cnkgaXMgcmV0dXJuZWQuXG5AQCAtMzUyMiw3ICszNTIyLDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9jcmVhdGluZ19ub3Blcm0pO1xuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBmaW5kIHRoZSBuYW1lXG4gICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgcmVtb3ZlZFxuICAqXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmdcbisgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xuICAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LlxuICAqXG4gICogSWYgdGhlIG5hbWUgZG9lc24ndCBleGlzdCwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuXG5AQCAtMzU0MywxMSArMzU0MywxMSBAQCBzdHJ1Y3QgZGVudHJ5ICpzdGFydF9yZW1vdmluZ19ub3Blcm0oc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuIEVYUE9SVF9TWU1CT0woc3RhcnRfcmVtb3Zpbmdfbm9wZXJtKTtcbiBcbiAvKipcbi0gKiBzdGFydF9jcmVhdGluZ19kZW50cnkgLSBwcmVwYXJlIHRvIGNyZWF0ZSBhIGdpdmVuIGRlbnRyeVxuLSAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBmcm9tIHdoaWNoIGRlbnRyeSBzaG91bGQgYmUgcmVtb3ZlZFxuLSAqIEBjaGlsZDogIHRoZSBkZW50cnkgdG8gYmUgcmVtb3ZlZFxuKyAqIHN0YXJ0X2NyZWF0aW5nX2RlbnRyeSAtIHByZXBhcmUgdG8gYWNjZXNzIG9yIGNyZWF0ZSBhIGdpdmVuIGRlbnRyeVxuKyAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBvZiBkZW50cnlcbisgKiBAY2hpbGQ6ICB0aGUgZGVudHJ5IHRvIGJlIHByZXBhcmVkXG4gICpcbi0gKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluIG90aGVyIGRpcm9wcyBhbmRcbisgKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluc3Qgb3RoZXIgZGlyb3BzIGFuZFxuICAqIHRoZSB2YWxpZGl0eSBvZiB0aGUgZGVudHJ5IGlzIGNoZWNrZWQ6IGNvcnJlY3QgcGFyZW50IGFuZCBzdGlsbCBoYXNoZWQuXG4gICpcbiAgKiBJZiB0aGUgZGVudHJ5IGlzIHZhbGlkIGFuZCBuZWdhdGl2ZSBhIHJlZmVyZW5jZSBpcyB0YWtlbiBhbmRcbkBAIC0zNTgwLDcgKzM1ODAsNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX2RlbnRyeSk7XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGZyb20gd2hpY2ggZGVudHJ5IHNob3VsZCBiZSByZW1vdmVkXG4gICogQGNoaWxkOiAgdGhlIGRlbnRyeSB0byBiZSByZW1vdmVkXG4gICpcbi0gKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluIG90aGVyIGRpcm9wcyBhbmRcbisgKiBBIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgZGVudHJ5IGFnYWluc3Qgb3RoZXIgZGlyb3BzIGFuZFxuICAqIHRoZSB2YWxpZGl0eSBvZiB0aGUgZGVudHJ5IGlzIGNoZWNrZWQ6IGNvcnJlY3QgcGFyZW50IGFuZCBzdGlsbCBoYXNoZWQuXG4gICpcbiAgKiBJZiB0aGUgZGVudHJ5IGlzIHZhbGlkIGFuZCBwb3NpdGl2ZSwgYSByZWZlcmVuY2UgaXMgdGFrZW4gYW5kXG5AQCAtNDQ0MCwxMiArNDQ0MCwxNCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0aW50IGVycm9yLCBjcmVhdGVfZXJyb3I7XG4gXHR1bW9kZV90IG1vZGU7XG4gXHRib29sIGdvdF93cml0ZTtcbitcdHVuc2lnbmVkIGludCBzaGFyZWRfZmxhZztcbiBcbiByZXRyeTpcbiBcdG9wZW5fZmxhZyA9IG9wLVx1MDAzZW9wZW5fZmxhZztcbiBcdGdvdF93cml0ZSA9IGZhbHNlO1xuIFx0bW9kZSA9IG9wLVx1MDAzZW1vZGU7XG4gXHRjcmVhdGVfZXJyb3IgPSAwO1xuK1x0c2hhcmVkX2ZsYWcgPSAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSA/IDAgOiBMT09LVVBfU0hBUkVEO1xuIFxuIFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgKE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19XUk9OTFkgfCBPX1JEV1IpKSB7XG4gXHRcdGdvdF93cml0ZSA9ICFtbnRfd2FudF93cml0ZShuZC1cdTAwM2VwYXRoLm1udCk7XG5AQCAtNDQ1NCwxMCArNDQ1NiwxMCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHQgKiBhIGRpZmZlcmVudCBlcnJvcjsgd2UnbGwgYmUgZHJvcHBpbmcgdGhpcyBvbmUgYW55d2F5LlxuIFx0XHQgKi9cbiBcdH1cbi1cdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpXG4tXHRcdGlub2RlX2xvY2soZGlyX2lub2RlKTtcbi1cdGVsc2VcbitcdGlmIChzaGFyZWRfZmxhZylcbiBcdFx0aW5vZGVfbG9ja19zaGFyZWQoZGlyX2lub2RlKTtcbitcdGVsc2VcbitcdFx0aW5vZGVfbG9jayhkaXJfaW5vZGUpO1xuIFxuIFx0aWYgKHVubGlrZWx5KElTX0RFQURESVIoZGlyX2lub2RlKSkpIHtcbiBcdFx0ZGVudHJ5ID0gRVJSX1BUUigtRU5PRU5UKTtcbkBAIC00NTI2LDcgKzQ1MjgsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFxuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlbG9va3VwKGRpcl9pbm9kZSwgZGVudHJ5LFxuLVx0XHRcdFx0XHRcdFx0ICAgICBuZC1cdTAwM2VmbGFncyk7XG4rXHRcdFx0XHRcdFx0XHQgICAgIG5kLVx1MDAzZWZsYWdzIHwgc2hhcmVkX2ZsYWcpO1xuIFx0XHRkX2xvb2t1cF9kb25lKGRlbnRyeSk7XG4gXHRcdGlmICh1bmxpa2VseShyZXMpKSB7XG4gXHRcdFx0aWYgKElTX0VSUihyZXMpKSB7XG5AQCAtNDU3NCwxMCArNDU3NiwxMCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRClcbiBcdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuIFx0fVxuLVx0aWYgKChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHx8IGNyZWF0ZV9lcnJvcilcbi1cdFx0aW5vZGVfdW5sb2NrKGRpcl9pbm9kZSk7XG4tXHRlbHNlXG4rXHRpZiAoc2hhcmVkX2ZsYWcpXG4gXHRcdGlub2RlX3VubG9ja19zaGFyZWQoZGlyX2lub2RlKTtcbitcdGVsc2VcbitcdFx0aW5vZGVfdW5sb2NrKGRpcl9pbm9kZSk7XG4gXG4gXHRpZiAoZ290X3dyaXRlKVxuIFx0XHRtbnRfZHJvcF93cml0ZShuZC1cdTAwM2VwYXRoLm1udCk7XG5kaWZmIC0tZ2l0IGEvZnMvbmZzL3VubGluay5jIGIvZnMvbmZzL3VubGluay5jXG5pbmRleCBiNTdjZmFhNGQ1MTZmLi5jOGQ3MTIyMDRlNjQ5IDEwMDY0NFxuLS0tIGEvZnMvbmZzL3VubGluay5jXG4rKysgYi9mcy9uZnMvdW5saW5rLmNcbkBAIC02Nyw2ICs2Nyw3IEBAIHN0YXRpYyB2b2lkIG5mc19hc3luY191bmxpbmtfcmVsZWFzZSh2b2lkICpjYWxsZGF0YSlcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktXHUwMDNlZF9zYjtcbiBcbiBcdHVwX3JlYWRfbm9uX293bmVyKFx1MDAyNk5GU19JKGRfaW5vZGUoZGVudHJ5LVx1MDAzZWRfcGFyZW50KSktXHUwMDNlcm1kaXJfc2VtKTtcbitcdGRfbG9va3VwX2FjcXVpcmUoZGVudHJ5KTtcbiBcdGRfbG9va3VwX2RvbmUoZGVudHJ5KTtcbiBcdG5mc19mcmVlX3VubGlua2RhdGEoZGF0YSk7XG4gXHRkcHV0KGRlbnRyeSk7XG5AQCAtMTU5LDYgKzE2MCw4IEBAIHN0YXRpYyBpbnQgbmZzX2NhbGxfdW5saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mXG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXHRkYXRhLVx1MDAzZWRlbnRyeSA9IGFsaWFzO1xuK1x0ZF9sb29rdXBfcmVsZWFzZShhbGlhcyk7XG4rXG4gXHRuZnNfZG9fY2FsbF91bmxpbmsoaW5vZGUsIGRhdGEpO1xuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oXG5pbmRleCA0YjFmZjk5NjA4ZTAxLi5lN2UzZWYwNTMxM2I4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaFxuQEAgLTExNiw2ICsxMTYsOCBAQCBzdHJ1Y3QgZGVudHJ5IHtcbiBcdFx0XHRcdFx0ICogcG9zc2libGUhXG4gXHRcdFx0XHRcdCAqL1xuIFxuK1x0LyogbG9ja2RlcCB0cmFja2luZyBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrcyAqL1xuK1x0c3RydWN0IGxvY2tkZXBfbWFwXHRcdGxvb2t1cF9tYXA7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGRfbHJ1O1x0XHQvKiBMUlUgbGlzdCAqL1xuIFx0c3RydWN0IGhsaXN0X25vZGUgZF9zaWI7XHQvKiBjaGlsZCBvZiBwYXJlbnQgbGlzdCAqL1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgZF9jaGlsZHJlbjtcdC8qIG91ciBjaGlsZHJlbiAqL1xuQEAgLTI1Nyw3ICsyNTksOSBAQCBleHRlcm4gdm9pZCBkX2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICopO1xuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvYyhzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IHN0cnVjdCBxc3RyICopO1xuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY19hbm9uKHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTtcbitleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfdHJ5bG9jayhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopO1xuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9zcGxpY2VfYWxpYXMoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7XG4rc3RydWN0IGRlbnRyeSAqZF9kdXBsaWNhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiAvKiB3ZWlyZCBwcm9jZnMgbWVzczsgKk5PVCogZXhwb3J0ZWQgKi9cbiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfc3BsaWNlX2FsaWFzX29wcyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqKTtcbkBAIC01NTIsNiArNTU2LDM2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNpbXBsZV9wb3NpdGl2ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXG4gdW5zaWduZWQgbG9uZyB2ZnNfcHJlc3N1cmVfcmF0aW8odW5zaWduZWQgbG9uZyB2YWwpO1xuIFxuKy8qKlxuKyAqIGRfbG9va3VwX3JlbGVhc2UgLSByZWxlYXNlIG93bmVyc2hpcCBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrXG4rICogQGRlbnRyeTogZGVudHJ5IHRoYXQgaXMgbG9ja2VkXG4rICpcbisgKiBJZiBhbiBpbi1sb29rdXAgZGVudHJ5IGlzIHRvIGJlIHBhc3NlZCB0byBhbm90aGVyIHRocmVhZCB3aGljaFxuKyAqIHdpbGwgZHJvcCB0aGUgaW4tbG9va3VwIGxvY2ssIHRoZW4gZF9sb29rdXBfcmVsZWFzZSgpIG11c3QgYmUgY2FsbGVkXG4rICogdG8gdGVsbCBsb2NrZGVwIHRoYXQgdGhpcyB0aHJlYWQgbm8gbG9jayBob2xkcyB0aGUgbG9jay4gIFRoZVxuKyAqIHRocmVhZCB0aGF0IHJlY2VpdmVzIHRoZSBsb2NrIG11c3QgY2FsbCBkX2xvb2t1cF9hY3F1aXJlKCkgdG9cbisgKiBhY3F1aXJlIHRoZSBsb2NrLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBkX2xvb2t1cF9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbit7XG4rXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSlcbitcdFx0bG9ja19tYXBfcmVsZWFzZShcdTAwMjZkZW50cnktXHUwMDNlbG9va3VwX21hcCk7XG4rfVxuK1xuKy8qKlxuKyAqIGRfbG9va3VwX2FjcXVpcmUgLSBhY3F1aXJlIG93bmVyc2hpcCBvZiBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrXG4rICogQGRlbnRyeTogZGVudHJ5IHRoYXQgaXMgbG9ja2VkXG4rICpcbisgKiBJZiBhbiBpbi1sb29rdXAgZGVudHJ5IHdhcyBwYXNzZWQgdG8gdGhpcyB0aHJlYWQsIHRoZVxuKyAqIGRfbG9va3VwX2FjcXVpcmUoKSBtdXN0IGJlIGNhbGxlZCB0byB0ZWxsIGxvY2tkZXAgdGhhdCB0aGlzXG4rICogdGhyZWFkIG5vdyBvd25zIHRoZSBEQ0FDSEVfUEFSX0xPT0tVUCBsb2NrLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBkX2xvb2t1cF9hY3F1aXJlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbit7XG4rXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSlcbitcdFx0bG9ja19tYXBfYWNxdWlyZV90cnkoXHUwMDI2ZGVudHJ5LVx1MDAzZWxvb2t1cF9tYXApO1xuK31cbitcbiAvKipcbiAgKiBkX2lub2RlIC0gR2V0IHRoZSBhY3R1YWwgaW5vZGUgb2YgdGhpcyBkZW50cnlcbiAgKiBAZGVudHJ5OiBUaGUgZGVudHJ5IHRvIHF1ZXJ5XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uYW1laS5oIGIvaW5jbHVkZS9saW51eC9uYW1laS5oXG5pbmRleCA4NmQ2NTdiMjRmYzZhLi42NWYwZjU3MTI4ODVjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25hbWVpLmhcbkBAIC0zMiw4ICszMiw5IEBAIGVudW0geyBNQVhfTkVTVEVEX0xJTktTID0gOCB9O1xuICNkZWZpbmUgTE9PS1VQX0NSRUFURVx0XHRCSVQoMTcpXHQvKiAuLi4gaW4gb2JqZWN0IGNyZWF0aW9uICovXG4gI2RlZmluZSBMT09LVVBfRVhDTFx0XHRCSVQoMTgpXHQvKiAuLi4gaW4gdGFyZ2V0IG11c3Qgbm90IGV4aXN0ICovXG4gI2RlZmluZSBMT09LVVBfUkVOQU1FX1RBUkdFVFx0QklUKDE5KVx0LyogLi4uIGluIGRlc3RpbmF0aW9uIG9mIHJlbmFtZSgpICovXG4rI2RlZmluZSBMT09LVVBfU0hBUkVEXHRcdEJJVCgyMCkgLyogUGFyZW50IGxvY2sgaXMgaGVsZCBzaGFyZWQgKi9cbiBcbi0vKiA0IHNwYXJlIGJpdHMgZm9yIGludGVudCAqL1xuKy8qIDMgc3BhcmUgYml0cyBmb3IgaW50ZW50ICovXG4gXG4gLyogU2NvcGluZyBmbGFncyBmb3IgbG9va3VwLiAqL1xuICNkZWZpbmUgTE9PS1VQX05PX1NZTUxJTktTXHRCSVQoMjQpIC8qIE5vIHN5bWxpbmsgY3Jvc3NpbmcuICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxNTo1Ny45MDk5NTAwNzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDYyMzkyNzUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEV2YWx1YXRpb246IGRjYWNoZSBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gYXNrZWQgdG8gbG9vayBvdmVyIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBmdXp6aW5nIHBvdGVudGlhbCB3aXRoIHN5emthbGxlci4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG5GaXJzdCwgdGhlIGRpZmYuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpLCBzcGVjaWZpY2FsbHkgdGhlIGRjYWNoZSBhbmQgbmFtZWkgc3Vic3lzdGVtcywgd2l0aCBhIGxpdHRsZSB0b3VjaCBvZiBORlMuIFRoaXMgaXMgKmNyaXRpY2FsKiBpbmZyYXN0cnVjdHVyZTsgd2UncmUgdGFsa2luZyBhYm91dCBwYXRoIGxvb2t1cCwgZGVudHJ5IGFsbG9jYXRpb24sIGxvY2tpbmcsIGFuZCBzb21lIGltcG9ydGFudCBhc3NlcnRpb25zLiBUaGlzIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZXN5c3RlbSwgc28gaXQncyBpbnRlcmVzdGluZy5cblxuVGhlIGBEb2N1bWVudGF0aW9uL2AgY2hhbmdlcyBhcmUgdXN1YWxseSBhIGdvb2Qgc2lnbiB0aGF0IHRoZXkgd2VyZSB0aGlua2luZyBhYm91dCBmdXp6aW5nIGFuZCB0cnlpbmcgdG8ga2VlcCB0aGluZ3MgZWFzaWx5IGF2YWlsYWJsZSBmb3IgdGhvc2UgdGhhdCB3YW50IHRvIGNvbnRyaWJ1dGUuXG5cbkEgZGVlcGVyIGRpdmUgaW50byB0aGUgZGlmZiBzaG93cyBzdWJzdGFudGlhbCBjaGFuZ2VzOiB3ZSBoYXZlIGEgbmV3IGBsb29rdXBfbWFwYCB1bmRlciBsb2NrZGVwLCBuZXcgZnVuY3Rpb25zIGxpa2UgYGRfZHVwbGljYXRlYCwgYGRfYWxsb2NfdHJ5bG9ja2AsIGFuZCBgZF9sb29rdXBfYWNxdWlyZS9yZWxlYXNlYCBhcmUgaW50cm9kdWNlZCwgYF9fZF9hZGRgIGxvZ2ljIGlzIHJlZmFjdG9yZWQsIGFuZCBsb2NrIGhhbmRsaW5nIGluIGBsb29rdXBfb3BlbmAgY2hhbmdlcyBiYXNlZCBvbiBzaGFyZWQgZmxhZ3MuIFRoZXJlIGlzIGV2ZW4gYSBjaGFuZ2UgZnJvbSBgQlVHX09OKCFkX3VuaGFzaGVkKGRlbnRyeSkpYCB0byBgQlVHX09OKGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpYCwgd2hpY2ggaXMgYWx3YXlzIHdvcnRoIGEgbG9vay4gVGhlIG92ZXJhbGwgZ29hbCBzZWVtcyB0byBiZSBlbmhhbmNpbmcgY29uY3VycmVuY3kgYW5kIGhhbmRsaW5nIHNvbWUgbmV3IGNsdXN0ZXIvb3ZlcmxheSBzY2VuYXJpb3MuXG5cblRoZSBtb2RpZmljYXRpb24gb2YgYF9fZF9hbGxvY2AsIGBfX2RfYWRkYCwgYGxvb2t1cF9vcGVuYCBhbmQgYG5mc19hc3luY191bmxpbmtfcmVsZWFzZWAgcmVhbGx5IGNhdWdodCBteSBleWUuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYWxsIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIGZpbGVzeXN0ZW0gY2FsbHMgbGlrZSBgb3BlbmAsIGBsb29rdXBgLCBgdW5saW5rYCwgYW5kIGBta2RpcmAsIHNvLCB0aGF0J3MgYWxyZWFkeSBhIHNpZ25pZmljYW50IHBvaW50IGluIGl0cyBmYXZvci5cblxuKipNeSBhc3Nlc3NtZW50OiBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4qKiBUaGlzIGhhcyBhbGwgdGhlIGhhbGxtYXJrcyBvZiBhIHBhdGNoIHNlcmllcyByaXBlIGZvciBmdXp6aW5nOiBjb3JlIHN1YnN5c3RlbSBtb2RpZmljYXRpb25zIChWRlMvZGNhY2hlKSwgbmV3IGxvY2tpbmcgaW52YXJpYW50cyBpbnRyb2R1Y2VkIHdpdGggbG9ja2RlcCwgdGhlIGFkZGl0aW9uIG9mIGEgbG9ja2RlcCBtYXAsIG1vZGlmaWVkIGFzc2VydGlvbnMsIGNoYW5nZXMgdG8gdGhlIGNvcmUgYF9fZF9hZGRgIGxvZ2ljLCBhbmQgdGhlIGBsb29rdXBfb3BlbmAgc2hhcmVkIGxvY2tpbmcgY2hhbmdlIGlzIHBhcnRpY3VsYXJseSBpbnRyaWd1aW5nLiBUaGVyZSdzIGEgaGlnaCBwcm9iYWJpbGl0eSBvZiBmaW5kaW5nIGludGVyZXN0aW5nIGtlcm5lbCBzdGF0ZXMgb3IgcmFjZSBjb25kaXRpb25zIGhlcmUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgdXN1YWwgc3VzcGVjdHMuIEkgc2hvdWxkIGNoZWNrIGBXb3J0aEZ1enppbmdgLCBgRm9jdXNTeW1ib2xzYCwgYW5kIGBFbmFibGVDb25maWdzYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cyBvciBwcmUtZXhpc3Rpbmcgc2V0dXAgdG8gbWFrZSB0aGlzIGVhc2llci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55IG9idmlvdXMgZW50cnkgcG9pbnRzIGFuZCB0aGF0IEkgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBlbmFibGVkLiBBbHNvLCBhIHF1aWNrIGBncmVwcGVyYCBydW4gZm9yIHRoZSBuZXcgZnVuY3Rpb25zIGxpa2UgYGRfYWxsb2NfdHJ5bG9ja2AsIGFuZCBgZF9kdXBsaWNhdGVgIGlzIGNydWNpYWwgdG8gZ2V0IGEgaG9saXN0aWMgdmlldyBvZiB0aGUgY2FsbGVycy4gVGhpcyB3aWxsIGdpdmUgbWUgYW4gaWRlYSBhYm91dCB0aGUgb3ZlcmFsbCBzY29wZSBhbmQgaWYgdGhpcyBpcyBhIHBhcnQgb2YgYSBsYXJnZXIgcGF0Y2ggc2VyaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA4NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjE2OjE4LjUzMzg4MDI4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk1ODI3OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRfYWxsb2NfdHJ5bG9ja3xkX2R1cGxpY2F0ZXxMT09LVVBfU0hBUkVEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzPTI1PXB1YihjcmF0ZSkgc3RydWN0IEZyZWV6ZUxpc3RlbmVyIHtcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzLTQyLSAgICAvLy8gTnVtYmVyIG9mIGNsZWFyZWQgZHVwbGljYXRlcyB0aGF0IGNhbiBiZSBkZWxldGVkLlxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzOjQzOiAgICBudW1fY2xlYXJlZF9kdXBsaWNhdGVzOiB1NjQsXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtNDQtfVxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnM9ODY9ICAgIGZuIGRvX3dvcmsoXFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycy05Ny1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5yczo5ODogICAgICAgIGlmIGZyZWV6ZS5udW1fY2xlYXJlZF9kdXBsaWNhdGVzIFxcdTAwM2UgMCB7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnM6OTk6ICAgICAgICAgICAgZnJlZXplLm51bV9jbGVhcmVkX2R1cGxpY2F0ZXMgLT0gMTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycy0xMDAtICAgICAgICAgICAgZHJvcChub2RlX3JlZnMpO1xcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtMTA5LSAgICAgICAgaWYgZnJlZXplLmlzX2NsZWFyaW5nIHtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5yczoxMTA6ICAgICAgICAgICAga2VybmVsOjp3YXJuX29uIShmcmVlemUubnVtX2NsZWFyZWRfZHVwbGljYXRlcyAhPSAwKTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycy0xMTEtICAgICAgICAgICAgaWYgZnJlZXplLm51bV9wZW5kaW5nX2R1cGxpY2F0ZXMgXFx1MDAzZSAwIHtcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzPTE4MD0gICAgcHViKGNyYXRlKSBmbiByZXF1ZXN0X2ZyZWV6ZV9ub3RpZihcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzLTI0OS0gICAgICAgICAgICAgICAgICAgICAgICBudW1fcGVuZGluZ19kdXBsaWNhdGVzOiAwLFxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzOjI1MDogICAgICAgICAgICAgICAgICAgICAgICBudW1fY2xlYXJlZF9kdXBsaWNhdGVzOiAwLFxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvZnJlZXplLnJzLTI1MS0gICAgICAgICAgICAgICAgICAgIH0sXFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycy0yNTktICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnM6MjYwOiAgICAgICAgICAgICAgICAgICAgZHVwZS5udW1fY2xlYXJlZF9kdXBsaWNhdGVzICs9IDE7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9mcmVlemUucnMtMjYxLSAgICAgICAgICAgICAgICB9XFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycz0yNzU9ICAgIHB1YihjcmF0ZSkgZm4gZnJlZXplX25vdGlmX2RvbmUoc2VsZjogXFx1MDAyNkFyY1xcdTAwM2NTZWxmXFx1MDAzZSwgcmVhZGVyOiBcXHUwMDI2bXV0IFVzZXJTbGljZVJlYWRlcikgLVxcdTAwM2UgUmVzdWx0XFx1MDAzYygpXFx1MDAzZSB7XFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycy0yOTEtICAgICAgICAgICAgZnJlZXplLm51bV9wZW5kaW5nX2R1cGxpY2F0ZXMgLT0gMTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5yczoyOTI6ICAgICAgICAgICAgZnJlZXplLm51bV9jbGVhcmVkX2R1cGxpY2F0ZXMgKz0gMTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL2ZyZWV6ZS5ycy0yOTMtICAgICAgICB9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF90b3BvbG9neS5jPTQzOTU9c3RydWN0IGVkaWQgKmRybV9kcF9tc3RfZ2V0X2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYy00NDAzLVxcbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9tc3RfdG9wb2xvZ3kuYzo0NDA0OlxcdGVkaWQgPSBkcm1fZWRpZF9kdXBsaWNhdGUoZHJtX2VkaWRfcmF3KGRybV9lZGlkKSk7XFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX21zdF90b3BvbG9neS5jLTQ0MDUtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYz0yOTUwPUVYUE9SVF9TWU1CT0woZHJtX2VkaWRfcmVhZF9zd2l0Y2hlcm9vKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jLTI5NTItLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmM6Mjk1MzogKiBkcm1fZWRpZF9kdXBsaWNhdGUgLSBkdXBsaWNhdGUgYW4gRURJRCBhbmQgdGhlIGV4dGVuc2lvbnNcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYy0yOTU0LSAqIEBlZGlkOiBFRElEIHRvIGR1cGxpY2F0ZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMtMjk1Ny0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYzoyOTU4OnN0cnVjdCBlZGlkICpkcm1fZWRpZF9kdXBsaWNhdGUoY29uc3Qgc3RydWN0IGVkaWQgKmVkaWQpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMtMjk1OS17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYy0yOTY0LX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYzoyOTY1OkVYUE9SVF9TWU1CT0woZHJtX2VkaWRfZHVwbGljYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYy0yOTY2LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wbWRlbWFuZC5jPTU2PXN0YXRpYyBzdHJ1Y3QgaW50ZWxfZ2xvYmFsX3N0YXRlICpcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3BtZGVtYW5kLmM6NTc6aW50ZWxfcG1kZW1hbmRfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBpbnRlbF9nbG9iYWxfb2JqICpvYmopXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wbWRlbWFuZC5jLTU4LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcG1kZW1hbmQuYz03ND1zdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2dsb2JhbF9zdGF0ZV9mdW5jcyBpbnRlbF9wbWRlbWFuZF9mdW5jcyA9IHtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3BtZGVtYW5kLmM6NzU6XFx0LmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9wbWRlbWFuZF9kdXBsaWNhdGVfc3RhdGUsXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wbWRlbWFuZC5jLTc2LVxcdC5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX3BtZGVtYW5kX2Rlc3Ryb3lfc3RhdGUsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5oPTkxPXN0YXRpYyBjb25zdCB1MzIgYTZ4eF9obHNxX2R1cGxpY2F0ZV9jbHVzdGVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5oLTk0LVxcbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmg6OTU6c3RhdGljIGNvbnN0IHUzMiBhNnh4X2hsc3FfMmRfZHVwbGljYXRlX2NsdXN0ZXJbXSA9IHtcXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5oLTk2LVxcdDB4YmQ4MCwgMHhiZDgwLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHVfc3RhdGUuaD0xMzc9c3RhdGljIGNvbnN0IHN0cnVjdCBhNnh4X2RiZ2FoYl9jbHVzdGVyIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmgtMTQ2LVxcdENMVVNURVJfREJHQUhCKENMVVNURVJfU1BfVlMsIDB4MDAwMmUwMDAsIDB4NDEsIGE2eHhfaGxzcV9kdXBsaWNhdGVfY2x1c3RlciksXFxuZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHVfc3RhdGUuaDoxNDc6XFx0Q0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9WUywgMHgwMDAyZjAwMCwgMHg0NSwgYTZ4eF9obHNxXzJkX2R1cGxpY2F0ZV9jbHVzdGVyKSxcXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5oLTE0OC1cXHRDTFVTVEVSX0RCR0FIQihDTFVTVEVSX1NQX1ZTLCAweDAwMDJhMDAwLCAweDIxLCBhNnh4X3NwX2R1cGxpY2F0ZV9jbHVzdGVyKSxcXG4tLVxcbmRyaXZlcnMvbWQvZG0uYz0xMjc0PXN0YXRpYyBzaXplX3QgZG1fZGF4X3JlY292ZXJ5X3dyaXRlKHN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCBwZ29mZl90IHBnb2ZmLFxcbi0tXFxuZHJpdmVycy9tZC9kbS5jLTEyOTctICogd2l0aCB3cml0ZSBCSU9zIGZsYWdnZWQgd2l0aCBCSU9fRU1VTEFURVNfWk9ORV9BUFBFTkQpIGFuZCBhbnkgYmlvIHNlcnZpY2VkXFxuZHJpdmVycy9tZC9kbS5jOjEyOTg6ICogYnkgX19zZW5kX2R1cGxpY2F0ZV9iaW9zKCkuXFxuZHJpdmVycy9tZC9kbS5jLTEyOTktICpcXG4tLVxcbmRyaXZlcnMvbWQvZG0uYz0xNDc4PXN0YXRpYyB2b2lkIGFsbG9jX211bHRpcGxlX2Jpb3Moc3RydWN0IGJpb19saXN0ICpibGlzdCwgc3RydWN0IGNsb25lX2luZm8gKmNpLFxcbi0tXFxuZHJpdmVycy9tZC9kbS5jLTE1MDctXFxuZHJpdmVycy9tZC9kbS5jOjE1MDg6c3RhdGljIHVuc2lnbmVkIGludCBfX3NlbmRfZHVwbGljYXRlX2Jpb3Moc3RydWN0IGNsb25lX2luZm8gKmNpLCBzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSxcXG5kcml2ZXJzL21kL2RtLmMtMTUwOS1cXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBudW1fYmlvcywgdW5zaWduZWQgaW50ICpsZW4pXFxuLS1cXG5kcml2ZXJzL21kL2RtLmM9MTUzNz1zdGF0aWMgdm9pZCBfX3NlbmRfZW1wdHlfZmx1c2goc3RydWN0IGNsb25lX2luZm8gKmNpKVxcbi0tXFxuZHJpdmVycy9tZC9kbS5jLTE1NjYtXFx0XFx0XFx0YXRvbWljX2FkZCh0aS1cXHUwMDNlbnVtX2ZsdXNoX2Jpb3MsIFxcdTAwMjZjaS1cXHUwMDNlaW8tXFx1MDAzZWlvX2NvdW50KTtcXG5kcml2ZXJzL21kL2RtLmM6MTU2NzpcXHRcXHRcXHRiaW9zID0gX19zZW5kX2R1cGxpY2F0ZV9iaW9zKGNpLCB0aSwgdGktXFx1MDAzZW51bV9mbHVzaF9iaW9zLFxcbmRyaXZlcnMvbWQvZG0uYy0xNTY4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLmM9MTYwNj1zdGF0aWMgdm9pZCBfX3NlbmRfYWJub3JtYWxfaW8oc3RydWN0IGNsb25lX2luZm8gKmNpLCBzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSxcXG4tLVxcbmRyaXZlcnMvbWQvZG0uYy0xNjE1LVxcdGF0b21pY19hZGQobnVtX2Jpb3MsIFxcdTAwMjZjaS1cXHUwMDNlaW8tXFx1MDAzZWlvX2NvdW50KTtcXG5kcml2ZXJzL21kL2RtLmM6MTYxNjpcXHRiaW9zID0gX19zZW5kX2R1cGxpY2F0ZV9iaW9zKGNpLCB0aSwgbnVtX2Jpb3MsIFxcdTAwMjZsZW4pO1xcbmRyaXZlcnMvbWQvZG0uYy0xNjE3LVxcdC8qXFxuLS1cXG5kcml2ZXJzL21kL2RtLmM9MTkwMj1zdGF0aWMgdm9pZCBfX3NlbmRfem9uZV9yZXNldF9hbGxfbmF0aXZlKHN0cnVjdCBjbG9uZV9pbmZvICpjaSxcXG4tLVxcbmRyaXZlcnMvbWQvZG0uYy0xOTA3LVxcdGF0b21pY19hZGQoMSwgXFx1MDAyNmNpLVxcdTAwM2Vpby1cXHUwMDNlaW9fY291bnQpO1xcbmRyaXZlcnMvbWQvZG0uYzoxOTA4OlxcdGJpb3MgPSBfX3NlbmRfZHVwbGljYXRlX2Jpb3MoY2ksIHRpLCAxLCBOVUxMKTtcXG5kcml2ZXJzL21kL2RtLmMtMTkwOS1cXHRhdG9taWNfc3ViKDEgLSBiaW9zLCBcXHUwMDI2Y2ktXFx1MDAzZWlvLVxcdTAwM2Vpb19jb3VudCk7XFxuLS1cXG5kcml2ZXJzL3VzYi90eXBlYy9jbGFzcy5jPTQ0OD1zdGF0aWMgaW50IGluY3JlbWVudF9kdXBsaWNhdGVkX3ByaW9yaXR5KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmMtNDYyLVxcbmRyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmM6NDYzOnN0YXRpYyBpbnQgZmluZF9kdXBsaWNhdGVkX3ByaW9yaXR5KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL3VzYi90eXBlYy9jbGFzcy5jLTQ2NC17XFxuLS1cXG5kcml2ZXJzL3VzYi90eXBlYy9jbGFzcy5jPTQ3NT1zdGF0aWMgaW50IHR5cGVjX21vZGVfc2V0X3ByaW9yaXR5KHN0cnVjdCB0eXBlY19hbHRtb2RlICphbHQsIGNvbnN0IHU4IHByaW9yaXR5KVxcbi0tXFxuZHJpdmVycy91c2IvdHlwZWMvY2xhc3MuYy00ODItXFx0d2hpbGUgKHJlcykge1xcbmRyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmM6NDgzOlxcdFxcdHJlcyA9IGRldmljZV9mb3JfZWFjaF9jaGlsZChcXHUwMDI2cG9ydC1cXHUwMDNlZGV2LCBcXHUwMDI2YWx0LCBmaW5kX2R1cGxpY2F0ZWRfcHJpb3JpdHkpO1xcbmRyaXZlcnMvdXNiL3R5cGVjL2NsYXNzLmMtNDg0LVxcdFxcdGlmIChyZXMpIHtcXG4tLVxcbmZzL2RjYWNoZS5jPTIwMDQ9RVhQT1JUX1NZTUJPTChkX2FsbG9jKTtcXG4tLVxcbmZzL2RjYWNoZS5jLTIwMDYtLyoqXFxuZnMvZGNhY2hlLmM6MjAwNzogKiBkX2R1cGxpY2F0ZSAtIGR1cGxpY2F0ZSBhIGRlbnRyeSBmb3IgY29tYmluZWQgYXRvbWljIG9wZXJhdGlvblxcbmZzL2RjYWNoZS5jLTIwMDgtICogQGRlbnRyeTogdGhlIGRlbnRyeSB0byBkdXBsaWNhdGVcXG4tLVxcbmZzL2RjYWNoZS5jLTIwMTctICogRm9yIHRoaXMgdGhleSBuZWVkIHR3byBkZW50cmllcyB3aGljaCB0ZW1wb3JhcmlseSBoYXZlIHRoZSBzYW1lIG5hbWUsXFxuZnMvZGNhY2hlLmM6MjAxODogKiBiZWZvcmUgb25lIGlzIHJlbmFtZWQuICBkX2R1cGxpY2F0ZSgpIHByb3ZpZGVzIGZvciB0aGlzLiAgR2l2ZW4gYVxcbmZzL2RjYWNoZS5jLTIwMTktICogcG9zaXRpdmUgaGFzaGVkIGRlbnRyeSwgaXQgY3JlYXRlcyBhIHNlY29uZCBpbi1sb29rdXAgZGVudHJ5Llxcbi0tXFxuZnMvZGNhY2hlLmMtMjAzMS0gKi9cXG5mcy9kY2FjaGUuYzoyMDMyOnN0cnVjdCBkZW50cnkgKmRfZHVwbGljYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9kY2FjaGUuYy0yMDMzLXtcXG4tLVxcbmZzL2RjYWNoZS5jLTIwNTUtfVxcbmZzL2RjYWNoZS5jOjIwNTY6RVhQT1JUX1NZTUJPTChkX2R1cGxpY2F0ZSk7XFxuZnMvZGNhY2hlLmMtMjA1Ny1cXG4tLVxcbmZzL2RjYWNoZS5jPTI5NzM9RVhQT1JUX1NZTUJPTChkX2FsbG9jX3BhcmFsbGVsKTtcXG4tLVxcbmZzL2RjYWNoZS5jLTI5NzUtLyoqXFxuZnMvZGNhY2hlLmM6Mjk3NjogKiBkX2FsbG9jX3RyeWxvY2soKSAtIGZpbmQgb3IgYWxsb2NhdGUgYSBuZXcgZGVudHJ5XFxuZnMvZGNhY2hlLmMtMjk3Ny0gKiBAcGFyZW50OiBkZW50cnkgb2YgdGhlIHBhcmVudFxcbi0tXFxuZnMvZGNhY2hlLmMtMjk4My0gKiBub3QgZF9pbl9sb29rdXAoKSB0aGVuIHRoYXQgaXMgcmV0dXJuZWQgaW5zdGVhZC5cXG5mcy9kY2FjaGUuYzoyOTg0OiAqIElmIHRoZSBleGlzdGluZyBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSwgZF9hbGxvY190cnlsb2NrKClcXG5mcy9kY2FjaGUuYy0yOTg1LSAqIHJldHVybnMgd2l0aCBlcnJvciAlLUVXT1VMREJMT0NLLlxcbi0tXFxuZnMvZGNhY2hlLmMtMjk5Ni0gKi9cXG5mcy9kY2FjaGUuYzoyOTk3OnN0cnVjdCBkZW50cnkgKmRfYWxsb2NfdHJ5bG9jayhzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXFxuZnMvZGNhY2hlLmMtMjk5OC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHFzdHIgKm5hbWUpXFxuLS1cXG5mcy9kY2FjaGUuYy0zMDA2LX1cXG5mcy9kY2FjaGUuYzozMDA3OkVYUE9SVF9TWU1CT0woZF9hbGxvY190cnlsb2NrKTtcXG5mcy9kY2FjaGUuYy0zMDA4LVxcbi0tXFxuZnMvbmFtZWkuYz0xOTI5PXN0YXRpYyBub2lubGluZSBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfc2xvdyhjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4tLVxcbmZzL25hbWVpLmMtMTkzNS1cXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XFxuZnMvbmFtZWkuYzoxOTM2OlxcdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyB8IExPT0tVUF9TSEFSRUQpO1xcbmZzL25hbWVpLmMtMTkzNy1cXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcXG4tLVxcbmZzL25hbWVpLmM9MTk0MT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX3Nsb3dfa2lsbGFibGUoY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuLS1cXG5mcy9uYW1laS5jLTE5NDktXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlRSKTtcXG5mcy9uYW1laS5jOjE5NTA6XFx0cmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzIHwgTE9PS1VQX1NIQVJFRCk7XFxuZnMvbmFtZWkuYy0xOTUxLVxcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xcbi0tXFxuZnMvbmFtZWkuYz00NDMxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9uYW1laS5jLTQ0NDktXFx0Y3JlYXRlX2Vycm9yID0gMDtcXG5mcy9uYW1laS5jOjQ0NTA6XFx0c2hhcmVkX2ZsYWcgPSAob3Blbl9mbGFnIFxcdTAwMjYgT19DUkVBVCkgPyAwIDogTE9PS1VQX1NIQVJFRDtcXG5mcy9uYW1laS5jLTQ0NTEtXFxuLS1cXG5pbmNsdWRlL2RybS9kcm1fZWRpZC5oPTQ0MT1zdHJ1Y3QgZWRpZCAqZHJtX2dldF9lZGlkX3N3aXRjaGVyb28oc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcixcXG5pbmNsdWRlL2RybS9kcm1fZWRpZC5oLTQ0Mi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7XFxuaW5jbHVkZS9kcm0vZHJtX2VkaWQuaDo0NDM6c3RydWN0IGVkaWQgKmRybV9lZGlkX2R1cGxpY2F0ZShjb25zdCBzdHJ1Y3QgZWRpZCAqZWRpZCk7XFxuaW5jbHVkZS9kcm0vZHJtX2VkaWQuaC00NDQtaW50IGRybV9hZGRfZWRpZF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZWRpZCAqZWRpZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oPTI2MT1leHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTtcXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oOjI2MjpleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfdHJ5bG9jayhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopO1xcbmluY2x1ZGUvbGludXgvZGNhY2hlLmgtMjYzLWV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9zcGxpY2VfYWxpYXMoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7XFxuaW5jbHVkZS9saW51eC9kY2FjaGUuaDoyNjQ6c3RydWN0IGRlbnRyeSAqZF9kdXBsaWNhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oLTI2NS0vKiB3ZWlyZCBwcm9jZnMgbWVzczsgKk5PVCogZXhwb3J0ZWQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvbmFtZWkuaD0xMj1lbnVtIHsgTUFYX05FU1RFRF9MSU5LUyA9IDggfTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmFtZWkuaC0zNC0jZGVmaW5lIExPT0tVUF9SRU5BTUVfVEFSR0VUXFx0QklUKDE5KVxcdC8qIC4uLiBpbiBkZXN0aW5hdGlvbiBvZiByZW5hbWUoKSAqL1xcbmluY2x1ZGUvbGludXgvbmFtZWkuaDozNTojZGVmaW5lIExPT0tVUF9TSEFSRURcXHRcXHRCSVQoMjApIC8qIFBhcmVudCBsb2NrIGlzIGhlbGQgc2hhcmVkICovXFxuaW5jbHVkZS9saW51eC9uYW1laS5oLTM2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxNjoyMS4zMjk3MTUxNDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NDc5MzM1MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guICBJJ3ZlIGdvbmUgdGhyb3VnaCB0aGUgY29kZSBjaGFuZ2VzIGFuZCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZTogYGRfZHVwbGljYXRlYCwgYGRfd2FpdF9sb29rdXBgLCBgZF9hbGxvY19wYXJhbGxlbGAsIGBkX2FsbG9jX3RyeWxvY2tgLCBgX19kX2xvb2t1cF91bmhhc2hgLCBgX19kX2FkZGAsIGBkX3NwbGljZV9hbGlhc19vcHNgLCBgZF9zcGxpY2VfYWxpYXNgLCBgX19kX2FsbG9jYCBmcm9tIGBmcy9kY2FjaGUuY2A7IGBsb29rdXBfc2xvd2AsIGBsb29rdXBfc2xvd19raWxsYWJsZWAsIGFuZCBgbG9va3VwX29wZW5gIGZyb20gYGZzL25hbWVpLmNgOyBhbmQgYG5mc19hc3luY191bmxpbmtfcmVsZWFzZWAgYW5kIGBuZnNfY2FsbF91bmxpbmtgIGZyb20gYGZzL25mcy91bmxpbmsuY2AuIEkgYWxzbyBzZWUgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9kY2FjaGUuaGAgaW52b2x2aW5nIGBkX2xvb2t1cF9yZWxlYXNlYCBhbmQgYGRfbG9va3VwX2FjcXVpcmVgLlxuXG5Ob3csIEkgbmVlZCB0byBmaWx0ZXIgdGhlc2UgZG93biB0byB0aGUgbW9zdCByZWxldmFudCB0YXJnZXRzIGZvciBmdXp6aW5nLiBGdW5jdGlvbnMgbGlrZSBgZF9hbGxvY2AgYXJlIHBvdGVudGlhbGx5IHRvbyB1YmlxdWl0b3VzLCBidXQgIGBkX2FsbG9jX3BhcmFsbGVsYCwgYGRfYWxsb2NfdHJ5bG9ja2AsIGBkX3NwbGljZV9hbGlhc2AsIGBkX2R1cGxpY2F0ZWAsIGBsb29rdXBfc2xvd2AsIGBsb29rdXBfc2xvd19raWxsYWJsZWAsIGBsb29rdXBfb3BlbmAsIGBuZnNfY2FsbF91bmxpbmtgIGFuZCBgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlYCBzZWVtIG1vcmUgdGFyZ2V0ZWQsIGFuZCB0aGF0IGBsb29rdXBfb3BlbmAncyBzcGVjaWZpYyB1c2UgaW4gYE9fQ1JFQVRgIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUuIFRoZSBhaW0gaXMgdG8gZW5zdXJlIHRoZSBmdXp6aW5nIGVmZm9ydCBpcyBmb2N1c2VkIG9uIHRoZSBtb3N0IGludGVyZXN0aW5nIGFuZCBpbXBhY3RmdWwgY29kZSBjaGFuZ2VzLlxuXG5JJ20gYWxzbyBjb25zaWRlcmluZyBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFZGUyBhbmQgZGNhY2hlIGFyZSBjb3JlIGZlYXR1cmVzOyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIHN0cmljdGx5IHJlcXVpcmVkLCBhbHRob3VnaCBgQ09ORklHX0xPQ0tERVBgIGlzIHVzZWQgaWYgbG9ja2RlcCBpcyBlbmFibGVkLCBhbmQgdGhlIE5GUyBjbGllbnQgdXNlcyBgQ09ORklHX05GU19GU2AuICBGb3Igb3B0aW1hbCBmdXp6aW5nLCBJJ2xsIHJlY29tbWVuZCBlbmFibGluZyBgUFJPVkVfTE9DS0lOR2AgYW5kIGBMT0NLREVQYCB0byBleGVyY2lzZSB0aGUgbG9ja2RlcCBpbnRlZ3JhdGlvbnMgcmVsYXRlZCB0byB0aGUgYGRlbnRyeS1cdTAwM2Vsb29rdXBfbWFwYC4gSSdsbCBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIGBDT05GSUdfTkZTX0ZTYCBpcyBzZXQsIHNpbmNlIHRoZSBjaGFuZ2VzIHRvdWNoIE5GUy5cblxuR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIOKAkyBjb3JlIFZGUyBwYXRoIGxvb2t1cCwgcGFyYWxsZWwgZGVudHJ5IGFsbG9jYXRpb24sIHNoYXJlZCBkaXJlY3RvcnkgbG9ja2luZyBkdXJpbmcgbG9va3VwIGFuZCBvcGVuIG9wZXJhdGlvbnMsIGxvY2tkZXAgYW5ub3RhdGlvbiBmb3IgcGFyYWxsZWwgbG9va3VwcywgZF9zcGxpY2VfYWxpYXMgYXNzZXJ0aW9ucywgYW5kIHRoZSBkZW50cnkgaGVscGVycyAtICB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgY3JpdGljYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIHBvdGVudGlhbCBidWdzIGluIHRoZXNlIGFyZWFzIGNvdWxkIGJlIHF1aXRlIGltcGFjdGZ1bC4gVGhlIGZ1enppbmcgc2hvdWxkIHRhcmdldCB0aGUgZm9sbG93aW5nOiBgZF9kdXBsaWNhdGVgLCBgZF9hbGxvY19wYXJhbGxlbGAsIGBkX2FsbG9jX3RyeWxvY2tgLCBgZF9zcGxpY2VfYWxpYXNgLCBgZF9zcGxpY2VfYWxpYXNfb3BzYCwgYGRfd2FpdF9sb29rdXBgLCBgbG9va3VwX3Nsb3dgLCBgbG9va3VwX3Nsb3dfa2lsbGFibGVgLCBgbG9va3VwX29wZW5gLCBgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlYCwgYW5kIGBuZnNfY2FsbF91bmxpbmtgLlxuXG5Ob3csIEknbGwgbmVlZCB0byBkZWZpbmUgdGhlIHBhcmFtZXRlcnMgZm9yIHNldHRpbmcgdGhlIHJlc3VsdHMsIGNvbmZpcm1pbmcgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAsIHdpdGggY2xlYXIgcmVhc29uaW5nIGFib3V0IHdoeSBpdCdzIHdvcnRoIGZ1enppbmcgLSB0aGUgY2hhbmdlcyBpbiBwYXJhbGxlbCBsb29rdXBzLCB0aGUgbG9ja2luZyBtZWNoYW5pc21zLCBzaGFyZWQgZGlyZWN0b3J5IGxvY2tpbmcgaW4gYGxvb2t1cF9zbG93YCBhbmQgYGxvb2t1cF9vcGVuYCwgdGhlIG5ldyBkZW50cnkgaGVscGVycyBzdWNoIGFzIGBkX2R1cGxpY2F0ZWAgYW5kIGBkX2FsbG9jX3RyeWxvY2tgLCBkZW50cnkgbG9ja2RlcCB0cmFja2luZywgYW5kIGFzc2VydGlvbiBjaGFuZ2VzIGluIGBkX3NwbGljZV9hbGlhc19vcHNgLiBJJ2xsIGluY2x1ZGUgdGhlIGlkZW50aWZpZWQgZm9jdXMgc3ltYm9scyBhbmQgdGhlIHN1Z2dlc3RlZCBjb25maWd1cmF0aW9uczogYFBST1ZFX0xPQ0tJTkdgLCBhbmQgYE5GU19GU2AuICBGaW5hbGx5LCBJIHdpbGwgZG91YmxlLWNoZWNrIGFsbCB0aGUgcGFyYW1ldGVycyBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI1MCwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTY6MjkuODA5MDUyMzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMzg5Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJORlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkX2R1cGxpY2F0ZVwiLFxuICAgIFwiZF9hbGxvY19wYXJhbGxlbFwiLFxuICAgIFwiZF9hbGxvY190cnlsb2NrXCIsXG4gICAgXCJkX3NwbGljZV9hbGlhc1wiLFxuICAgIFwiZF9zcGxpY2VfYWxpYXNfb3BzXCIsXG4gICAgXCJkX3dhaXRfbG9va3VwXCIsXG4gICAgXCJsb29rdXBfc2xvd1wiLFxuICAgIFwibG9va3VwX3Nsb3dfa2lsbGFibGVcIixcbiAgICBcImxvb2t1cF9vcGVuXCIsXG4gICAgXCJuZnNfYXN5bmNfdW5saW5rX3JlbGVhc2VcIixcbiAgICBcIm5mc19jYWxsX3VubGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIFZGUyBkY2FjaGUgYW5kIG5hbWVpIGxvZ2ljLCBpbmNsdWRpbmcgcGFyYWxsZWwgbG9va3VwIGxvY2tpbmcsIHNoYXJlZCBkaXJlY3RvcnkgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gbG9va3VwX3Nsb3cgYW5kIGxvb2t1cF9vcGVuLCBsb2NrZGVwIG1hcCB0cmFja2luZyBmb3IgaW4tbG9va3VwIGRlbnRyaWVzLCB1cGRhdGVkIGFzc2VydGlvbnMgaW4gZF9zcGxpY2VfYWxpYXNfb3BzLCBuZXcgZGNhY2hlIGhlbHBlcnMgKGRfZHVwbGljYXRlLCBkX2FsbG9jX3RyeWxvY2spLCBhbmQgTkZTIGFzeW5jaHJvbm91cyB1bmxpbmsgbG9jayB0cmFja2luZy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gY29yZSByZWFjaGFibGUga2VybmVsIHN1YnN5c3RlbXMgYW5kIGRpcmVjdGx5IGFmZmVjdCBjb25jdXJyZW5jeSBhbmQgaW52YXJpYW50IGVuZm9yY2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIk5GU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRfZHVwbGljYXRlXCIsXG4gICAgXCJkX2FsbG9jX3BhcmFsbGVsXCIsXG4gICAgXCJkX2FsbG9jX3RyeWxvY2tcIixcbiAgICBcImRfc3BsaWNlX2FsaWFzXCIsXG4gICAgXCJkX3NwbGljZV9hbGlhc19vcHNcIixcbiAgICBcImRfd2FpdF9sb29rdXBcIixcbiAgICBcImxvb2t1cF9zbG93XCIsXG4gICAgXCJsb29rdXBfc2xvd19raWxsYWJsZVwiLFxuICAgIFwibG9va3VwX29wZW5cIixcbiAgICBcIm5mc19hc3luY191bmxpbmtfcmVsZWFzZVwiLFxuICAgIFwibmZzX2NhbGxfdW5saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvcmUgVkZTIGRjYWNoZSBhbmQgbmFtZWkgbG9naWMsIGluY2x1ZGluZyBwYXJhbGxlbCBsb29rdXAgbG9ja2luZywgc2hhcmVkIGRpcmVjdG9yeSBsb2NraW5nIGZsYWdzIChMT09LVVBfU0hBUkVEKSBpbiBsb29rdXBfc2xvdyBhbmQgbG9va3VwX29wZW4sIGxvY2tkZXAgbWFwIHRyYWNraW5nIGZvciBpbi1sb29rdXAgZGVudHJpZXMsIHVwZGF0ZWQgYXNzZXJ0aW9ucyBpbiBkX3NwbGljZV9hbGlhc19vcHMsIG5ldyBkY2FjaGUgaGVscGVycyAoZF9kdXBsaWNhdGUsIGRfYWxsb2NfdHJ5bG9jayksIGFuZCBORlMgYXN5bmNocm9ub3VzIHVubGluayBsb2NrIHRyYWNraW5nLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIHJlYWNoYWJsZSBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgZGlyZWN0bHkgYWZmZWN0IGNvbmN1cnJlbmN5IGFuZCBpbnZhcmlhbnQgZW5mb3JjZW1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjE2OjI5LjkwMDQ1MDYyNloiLCJTZXEiOjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ4MjIzOTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjE2OjI5LjkwMDkxOTYyNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDk0ODE3Njc4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIExvY2tkZXAgdHJhY2tpbmcgZm9yIHBhcmFsbGVsIGRlbnRyeSBsb29rdXBzIChEQ0FDSEVfUEFSX0xPT0tVUCB2aWEgc3RydWN0IGxvY2tkZXBfbWFwIGluIHN0cnVjdCBkZW50cnkpLCBhZGRzIHRoZSBkX2R1cGxpY2F0ZSBhbmQgZF9hbGxvY190cnlsb2NrIGhlbHBlcnMsIHVwZGF0ZXMgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gVkZTIGxvb2t1cCByb3V0aW5lcyAobG9va3VwX3Nsb3csIGxvb2t1cF9vcGVuKSwgYW5kIGZpeGVzIGZpbGVzeXN0ZW0gZG9jdW1lbnRhdGlvbi5cXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgdHJhbnNmZXJzLiBBbGwgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmVzIChlLmcuLCBzdHJ1Y3QgZGVudHJ5IGluIF9fZF9hbGxvYykgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbi4gQW55IGNvbmN1cnJlbmN5LCBkZWFkbG9jaywgb3IgcmVmY291bnRpbmcgaXNzdWVzIHJlc3VsdGluZyBmcm9tIHRoZXNlIFZGUyBsb2NraW5nL2xvb2t1cCByZWZhY3RvcmluZ3MgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyBzdWNoIGFzIExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkOWExMmVjMWU1ZmUzZjNlNTc3ZDNiNjE4MzZkODZlNjY5OTQzMGVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNDoxNTo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0XG5pbmRleCA2MDg4MGViMGM0OWQxLi40ZTAxNWYxYmYxZjg0IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdFxuQEAgLTEyMDMsMTYgKzEyMDMsMTYgQEAgd2lsbCBmYWlsLXNhZmUuXG4gXG4gLS0tXG4gXG4tKiogbWFuZGF0b3J5KipcbisqKm1hbmRhdG9yeSoqXG4gXG4gbG9va3VwX29uZSgpLCBsb29rdXBfb25lX3VubG9ja2VkKCksIGxvb2t1cF9vbmVfcG9zaXRpdmVfdW5sb2NrZWQoKSBub3dcbiB0YWtlIGEgcXN0ciBpbnN0ZWFkIG9mIGEgbmFtZSBhbmQgbGVuLiAgVGhlc2UsIG5vdCB0aGUgXCJvbmVfbGVuXCJcbiB2ZXJzaW9ucywgc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgYWNjZXNzaW5nIGEgZmlsZXN5c3RlbSBmcm9tIG91dHNpZGVcbi10aGF0IGZpbGVzeXNtdGVtLCB0aHJvdWdoIGEgbW91bnQgcG9pbnQgLSB3aGljaCB3aWxsIGhhdmUgYSBtbnRfaWRtYXAuXG4rdGhhdCBmaWxlc3lzdGVtLCB0aHJvdWdoIGEgbW91bnQgcG9pbnQgLSB3aGljaCB3aWxsIGhhdmUgYSBtbnRfaWRtYXAuXG4gXG4gLS0tXG4gXG4tKiogbWFuZGF0b3J5KipcbisqKm1hbmRhdG9yeSoqXG4gXG4gRnVuY3Rpb25zIHRyeV9sb29rdXBfb25lX2xlbigpLCBsb29rdXBfb25lX2xlbigpLFxuIGxvb2t1cF9vbmVfbGVuX3VubG9ja2VkKCkgYW5kIGxvb2t1cF9wb3NpdGl2ZV91bmxvY2tlZCgpIGhhdmUgYmVlblxuQEAgLTEyMjksNyArMTIyOSw3IEBAIGFscmVhZHkgYmVlbiBwZXJmb3JtZWQgc3VjaCBhcyBhZnRlciB2ZnNfcGF0aF9wYXJlbnRfbG9va3VwKClcbiBcbiAtLS1cbiBcbi0qKiBtYW5kYXRvcnkqKlxuKyoqbWFuZGF0b3J5KipcbiBcbiBkX2hhc2hfYW5kX2xvb2t1cCgpIGlzIG5vIGxvbmdlciBleHBvcnRlZCBvciBhdmFpbGFibGUgb3V0c2lkZSB0aGUgVkZTLlxuIFVzZSB0cnlfbG9va3VwX25vcGVybSgpIGluc3RlYWQuICBUaGlzIGFkZHMgbmFtZSB2YWxpZGF0aW9uIGFuZCB0YWtlc1xuQEAgLTEzNzAsNyArMTM3MCw3IEBAIHNpbWlsYXIuXG4gXG4gLS0tXG4gXG4tKiogbWFuZGF0b3J5KipcbisqKm1hbmRhdG9yeSoqXG4gXG4gbG9ja19yZW5hbWUoKSwgbG9ja19yZW5hbWVfY2hpbGQoKSwgdW5sb2NrX3JlbmFtZSgpIGFyZSBub1xuIGxvbmdlciBhdmFpbGFibGUuICBVc2Ugc3RhcnRfcmVuYW1pbmcoKSBvciBzaW1pbGFyLlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuaW5kZXggZDNhOTNlZWMzOTQ1Zi4uZGU4Zjg1MDIwNTZlOCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG5AQCAtNTA3LDggKzUwNyw4IEBAIG90aGVyd2lzZSBub3RlZC5cbiBcdGRlbnRyeSBiZWZvcmUgdGhlIGZpcnN0IG1rZGlyIHJldHVybnMuXG4gXG4gXHRJZiB0aGVyZSBpcyBhbnkgY2hhbmNlIHRoaXMgY291bGQgaGFwcGVuLCB0aGVuIHRoZSBuZXcgaW5vZGVcbi1cdHNob3VsZCBiZSBkX2Ryb3AoKWVkIGFuZCBhdHRhY2hlZCB3aXRoIGRfc3BsaWNlX2FsaWFzKCkuICBUaGVcbi1cdHJldHVybmVkIGRlbnRyeSAoaWYgYW55KSBzaG91bGQgYmUgcmV0dXJuZWQgYnkgLVx1MDAzZW1rZGlyKCkuXG4rXHRzaG91bGQgYmUgYXR0YWNoZWQgd2l0aCBkX3NwbGljZV9hbGlhcygpLiAgVGhlIHJldHVybmVkXG4rXHRkZW50cnkgKGlmIGFueSkgc2hvdWxkIGJlIHJldHVybmVkIGJ5IC1cdTAwM2Vta2RpcigpLlxuIFxuIGBgcm1kaXJgYFxuIFx0Y2FsbGVkIGJ5IHRoZSBybWRpcigyKSBzeXN0ZW0gY2FsbC4gIE9ubHkgcmVxdWlyZWQgaWYgeW91IHdhbnRcbmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jXG5pbmRleCAxYjFhODFmMTBkYTY3Li4zYWY4YjJhYzY5OWY5IDEwMDY0NFxuLS0tIGEvZnMvZGNhY2hlLmNcbisrKyBiL2ZzL2RjYWNoZS5jXG5AQCAtMzIsNiArMzIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdF9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdF9ibC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdF9scnUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25hbWVpLmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuICNpbmNsdWRlIFwibW91bnQuaFwiXG4gXG5AQCAtMTkwMCw2ICsxOTAxLDcgQEAgRVhQT1JUX1NZTUJPTChkX2ludmFsaWRhdGUpO1xuICBcbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuIHtcbitcdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19sb29rdXBfa2V5O1xuIFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuIFx0Y2hhciAqZG5hbWU7XG4gXHRpbnQgZXJyO1xuQEAgLTE5NTcsNiArMTk1OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4gXHRkZW50cnktXHUwMDNld2FpdGVycyA9IE5VTEw7XG4gXHRJTklUX0hMSVNUX05PREUoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfc2liKTtcbiBcbitcdGxvY2tkZXBfaW5pdF9tYXAoXHUwMDI2ZGVudHJ5LVx1MDAzZWxvb2t1cF9tYXAsIFwiRENBQ0hFX1BBUl9MT09LVVBcIiwgXHUwMDI2X19sb29rdXBfa2V5LCAwKTtcbitcbiBcdGlmIChkZW50cnktXHUwMDNlZF9vcCBcdTAwMjZcdTAwMjYgZGVudHJ5LVx1MDAzZWRfb3AtXHUwMDNlZF9pbml0KSB7XG4gXHRcdGVyciA9IGRlbnRyeS1cdTAwM2VkX29wLVx1MDAzZWRfaW5pdChkZW50cnkpO1xuIFx0XHRpZiAoZXJyKSB7XG5AQCAtMTk5OSw2ICsyMDAzLDU4IEBAIHN0cnVjdCBkZW50cnkgKmRfYWxsb2Moc3RydWN0IGRlbnRyeSAqIHBhcmVudCwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXG4gfVxuIEVYUE9SVF9TWU1CT0woZF9hbGxvYyk7XG4gXG4rLyoqXG4rICogZF9kdXBsaWNhdGUgLSBkdXBsaWNhdGUgYSBkZW50cnkgZm9yIGNvbWJpbmVkIGF0b21pYyBvcGVyYXRpb25cbisgKiBAZGVudHJ5OiB0aGUgZGVudHJ5IHRvIGR1cGxpY2F0ZVxuKyAqXG4rICogU29tZSByZW5hbWUgb3BlcmF0aW9ucyBuZWVkIHRvIGJlIGNvbWJpbmVkIHdpdGggYW5vdGhlciBvcGVyYXRpb25cbisgKiBpbnNpZGUgdGhlIGZpbGVzeXN0ZW0uXG4rICogMS8gQSBjbHVzdGVyIGZpbGVzeXN0ZW0gd2hlbiByZW5hbWluZyB0byBhbiBpbi11c2UgZmlsZSBtaWdodCBuZWVkIHRvXG4rICogICBmaXJzdCBcInNpbGx5LXJlbmFtZVwiIHRoYXQgdGFyZ2V0IG91dCBvZiB0aGUgd2F5IGJlZm9yZSB0aGUgbWFpbiByZW5hbWVcbisgKiAyLyBBIGZpbGVzeXN0ZW0gdGhhdCBzdXBwb3J0cyB3aGl0ZS1vdXQgbWlnaHQgd2FudCB0byBjcmVhdGUgYSB3aGl0ZW91dFxuKyAqICAgaW4gcGxhY2Ugb2YgdGhlIGZpbGUgYmVpbmcgbW92ZWQuXG4rICpcbisgKiBGb3IgdGhpcyB0aGV5IG5lZWQgdHdvIGRlbnRyaWVzIHdoaWNoIHRlbXBvcmFyaWx5IGhhdmUgdGhlIHNhbWUgbmFtZSxcbisgKiBiZWZvcmUgb25lIGlzIHJlbmFtZWQuICBkX2R1cGxpY2F0ZSgpIHByb3ZpZGVzIGZvciB0aGlzLiAgR2l2ZW4gYVxuKyAqIHBvc2l0aXZlIGhhc2hlZCBkZW50cnksIGl0IGNyZWF0ZXMgYSBzZWNvbmQgaW4tbG9va3VwIGRlbnRyeS5cbisgKiBCZWNhdXNlIHRoZSBvcmlnaW5hbCBkZW50cnkgZXhpc3RzLCBubyBvdGhlciB0aHJlYWQgd2lsbCB0cnkgdG9cbisgKiBjcmVhdGUgYW4gaW4tbG9va3VwIGRlbnRyeSwgc28gdGhlcmUgY2FuIGJlIG5vIHJhY2UgaW4gdGhpcyBjcmVhdGUuXG4rICpcbisgKiBUaGUgY2FsbGVyIHNob3VsZCBkX21vdmUoKSB0aGUgb3JpZ2luYWwgdG8gYSBuZXcgbmFtZSwgb2Z0ZW4gdmlhIGFcbisgKiByZW5hbWUgcmVxdWVzdCwgYW5kIHNob3VsZCBjYWxsIGRfbG9va3VwX2RvbmUoKSBvbiB0aGUgbmV3bHkgY3JlYXRlZFxuKyAqIGRlbnRyeS4gIElmIHRoZSBuZXcgaXMgaW5zdGFudGlhdGVkIHRoZW4gdGhlIG9sZCBNVVNUIGVpdGhlciBiZSBtb3ZlZFxuKyAqIG9yIGRyb3BwZWQuXG4rICpcbisgKiBQYXJlbnQgbXVzdCBiZSBsb2NrZWQuXG4rICpcbisgKiBSZXR1cm5zOiBhbiBpbi1sb29rdXAgZGVudHJ5LCBvciAtRU5PTUVNLlxuKyAqL1xuK3N0cnVjdCBkZW50cnkgKmRfZHVwbGljYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbit7XG4rXHR1bnNpZ25lZCBpbnQgaGFzaCA9IGRlbnRyeS1cdTAwM2VkX25hbWUuaGFzaDtcbitcdHN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRlbnRyeS1cdTAwM2VkX3BhcmVudDtcbitcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpiID0gaW5fbG9va3VwX2hhc2gocGFyZW50LCBoYXNoKTtcbitcdHN0cnVjdCBkZW50cnkgKm5ldyA9IF9fZF9hbGxvYyhwYXJlbnQtXHUwMDNlZF9zYiwgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbmFtZSk7XG4rXG4rXHRpZiAodW5saWtlbHkoIW5ldykpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1xuK1x0bmV3LVx1MDAzZWRfZmxhZ3MgfD0gRENBQ0hFX1BBUl9MT09LVVA7XG4rXHRsb2NrX21hcF9hY3F1aXJlX3RyeShcdTAwMjZuZXctXHUwMDNlbG9va3VwX21hcCk7XG4rXHRzcGluX2xvY2soXHUwMDI2cGFyZW50LVx1MDAzZWRfbG9jayk7XG4rXHRuZXctXHUwMDNlZF9wYXJlbnQgPSBkZ2V0X2Rsb2NrKHBhcmVudCk7XG4rXHRobGlzdF9hZGRfaGVhZChcdTAwMjZuZXctXHUwMDNlZF9zaWIsIFx1MDAyNnBhcmVudC1cdTAwM2VkX2NoaWxkcmVuKTtcbitcdGlmIChwYXJlbnQtXHUwMDNlZF9mbGFncyBcdTAwMjYgRENBQ0hFX0RJU0NPTk5FQ1RFRClcbitcdFx0bmV3LVx1MDAzZWRfZmxhZ3MgfD0gRENBQ0hFX0RJU0NPTk5FQ1RFRDtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhcmVudC1cdTAwM2VkX2xvY2spO1xuK1xuK1x0aGxpc3RfYmxfbG9jayhiKTtcbitcdGhsaXN0X2JsX2FkZF9oZWFkKFx1MDAyNm5ldy1cdTAwM2VkX2luX2xvb2t1cF9oYXNoLCBiKTtcbitcdGhsaXN0X2JsX3VubG9jayhiKTtcbitcdHJldHVybiBuZXc7XG4rfVxuK0VYUE9SVF9TWU1CT0woZF9kdXBsaWNhdGUpO1xuK1xuIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfYW5vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbiBcdHJldHVybiBfX2RfYWxsb2Moc2IsIE5VTEwpO1xuQEAgLTIxNjgsNyArMjIyNCw2IEBAIHN0YXRpYyB2b2lkIF9fZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gICogKG9yIG90aGVyd2lzZSBzZXQpIGJ5IHRoZSBjYWxsZXIgdG8gaW5kaWNhdGUgdGhhdCBpdCBpcyBub3dcbiAgKiBpbiB1c2UgYnkgdGhlIGRjYWNoZS5cbiAgKi9cbi0gXG4gdm9pZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiB7XG4gXHRCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZW50cnkpKTtcbkBAIC0yNzUwLDYgKzI4MDUsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGVuZF9kaXJfYWRkKHN0cnVjdCBpbm9kZSAqZGlyLCB1bnNpZ25lZCBpbnQgbilcbiBzdGF0aWMgdm9pZCBkX3dhaXRfbG9va3VwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiB7XG4gXHRpZiAobGlrZWx5KGRfaW5fbG9va3VwKGRlbnRyeSkpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRlbGwgbG9ja2RlcCB3ZSB3aWxsIHdhaXQgZm9yIHRoZSBsb29rdXAgbG9jaywgYWZ0ZXJcbitcdFx0ICogZHJvcHBpbmcgLVx1MDAzZWRfbG9jaywgYnV0IHdvbid0IGFjdHVhbGx5IHRha2UgaXQuXG4rXHRcdCAqL1xuK1x0XHRzcGluX3JlbGVhc2UoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jay5kZXBfbWFwLCAwKTtcbitcdFx0bG9ja19tYXBfc3luYyhcdTAwMjZkZW50cnktXHUwMDNlbG9va3VwX21hcCk7XG4rXHRcdHNwaW5fYWNxdWlyZShcdTAwMjZkZW50cnktXHUwMDNlZF9sb2NrLmRlcF9tYXAsIDAsIDEsIF9USElTX0lQXyk7XG4rXG4gXHRcdGRlbnRyeS1cdTAwM2VkX2ZsYWdzIHw9IERDQUNIRV9MT09LVVBfV0FJVEVSUztcbiBcdFx0d2FpdF92YXJfZXZlbnRfc3BpbmxvY2soXHUwMDI2ZGVudHJ5LVx1MDAzZWRfZmxhZ3MsXG4gXHRcdFx0XHRcdCFkX2luX2xvb2t1cChkZW50cnkpLFxuQEAgLTI3NTcsOCArMjgyMCwxNiBAQCBzdGF0aWMgdm9pZCBkX3dhaXRfbG9va3VwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdH1cbiB9XG4gXG4tc3RydWN0IGRlbnRyeSAqZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4tXHRcdFx0XHRjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbisvKiBXaGF0IHRvIGRvIHdoZW4gX19kX2FsbG9jX3BhcmFsbGVsIGZpbmRzIGEgZF9pbl9sb29rdXAgZGVudHJ5ICovXG4rZW51bSBhbGxvY19wYXJhIHtcbitcdEFMTE9DX1BBUkFfV0FJVCxcbitcdEFMTE9DX1BBUkFfRkFJTCxcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmVcbitzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuK1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbitcdFx0XHRcdCAgZW51bSBhbGxvY19wYXJhIGhvdylcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaGFzaCA9IG5hbWUtXHUwMDNlaGFzaDtcbiBcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpiID0gaW5fbG9va3VwX2hhc2gocGFyZW50LCBoYXNoKTtcbkBAIC0yODMxLDYgKzI5MDIsMTIgQEAgc3RydWN0IGRlbnRyeSAqZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4gXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4gXHRcdFx0Z290byByZXRyeTtcbiBcdFx0fVxuK1x0XHRpZiAodW5saWtlbHkoaG93ID09IEFMTE9DX1BBUkFfRkFJTCkpIHtcbitcdFx0XHQvKiBtdXN0bid0IHdhaXQgZm9yIGNvbmN1cnJlbnQgbG9va3VwIHRvIGNvbXBsZXRlICovXG4rXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4rXHRcdFx0ZHB1dChuZXcpO1xuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FV09VTERCTE9DSyk7XG4rXHRcdH1cbiBcdFx0LypcbiBcdFx0ICogc29tZWJvZHkgaXMgbGlrZWx5IHRvIGJlIHN0aWxsIGRvaW5nIGxvb2t1cCBmb3IgaXQ7XG4gXHRcdCAqIHBpbiBpdCBhbmQgd2FpdCBmb3IgdGhlbSB0byBmaW5pc2hcbkBAIC0yODU4LDE0ICsyOTM1LDc3IEBAIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfcGFyYWxsZWwoc3RydWN0IGRlbnRyeSAqcGFyZW50LFxuIFx0fVxuIFx0aGxpc3RfYmxfYWRkX2hlYWQoXHUwMDI2bmV3LVx1MDAzZWRfaW5fbG9va3VwX2hhc2gsIGIpO1xuIFx0aGxpc3RfYmxfdW5sb2NrKGIpO1xuK1x0bG9ja19tYXBfYWNxdWlyZV90cnkoXHUwMDI2bmV3LVx1MDAzZWxvb2t1cF9tYXApO1xuIFx0cmV0dXJuIG5ldztcbiBtaXNtYXRjaDpcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xvY2spO1xuIFx0ZHB1dChkZW50cnkpO1xuIFx0Z290byByZXRyeTtcbiB9XG4rXG4rLyoqXG4rICogZF9hbGxvY19wYXJhbGxlbCgpIC0gYWxsb2NhdGUgYSBuZXcgZGVudHJ5IGFuZCBlbnN1cmUgdW5pcXVlbmVzc1xuKyAqIEBwYXJlbnQ6IGRlbnRyeSBvZiB0aGUgcGFyZW50XG4rICogQG5hbWU6ICAgbmFtZSBvZiB0aGUgZGVudHJ5IHdpdGhpbiB0aGF0IHBhcmVudC5cbisgKlxuKyAqIEEgbmV3IGRlbnRyeSBpcyBhbGxvY2F0ZWQgYW5kLCBwcm92aWRpbmcgaXQgaXMgdW5pcXVlLCBhZGRlZCB0byB0aGVcbisgKiByZWxldmFudCBpbmRleC5cbisgKiBJZiBhbiBleGlzdGluZyBkZW50cnkgaXMgZm91bmQgd2l0aCB0aGUgc2FtZSBwYXJlbnQvbmFtZSB0aGF0IGlzXG4rICogbm90IGRfaW5fbG9va3VwKCksIHRoZW4gdGhhdCBpcyByZXR1cm5lZCBpbnN0ZWFkLlxuKyAqIElmIHRoZSBleGlzdGluZyBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSwgZF9hbGxvY19wYXJhbGxlbCgpIHdhaXRzIGZvclxuKyAqIHRoYXQgbG9va3VwIHRvIGNvbXBsZXRlIGJlZm9yZSByZXR1cm5pbmcgdGhlIGRlbnRyeSBhbmQgdGhlbiBlbnN1cmVzIHRoZVxuKyAqIG1hdGNoIGlzIHN0aWxsIHZhbGlkLlxuKyAqIFRodXMgaWYgdGhlIHJldHVybmVkIGRlbnRyeSBpcyBkX2luX2xvb2t1cCgpIHRoZW4gdGhlIGNhbGxlciBoYXNcbisgKiBleGNsdXNpdmUgYWNjZXNzIHVudGlsIGl0IGNvbXBsZXRlcyB0aGUgbG9va3VwLlxuKyAqIElmIHRoZSByZXR1cm5lZCBkZW50cnkgaXMgbm90IGRfaW5fbG9va3VwKCkgdGhlbiBhIGxvb2t1cCBoYXNcbisgKiBhbHJlYWR5IGNvbXBsZXRlZC5cbisgKlxuKyAqIFRoZSBAbmFtZSBtdXN0IGFscmVhZHkgaGF2ZSAtXHUwMDNlaGFzaCBzZXQsIGFzIGNhbiBiZSBhY2hpZXZlZFxuKyAqIGJ5IGUuZy4gdHJ5X2xvb2t1cF9ub3Blcm0oKS5cbisgKlxuKyAqIFJldHVybnM6IHRoZSBkZW50cnksIHdoZXRoZXIgZm91bmQgb3IgYWxsb2NhdGVkLCBvciBhbiBlcnJvciAlLUVOT01FTS5cbisgKi9cbitzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3BhcmFsbGVsKHN0cnVjdCBkZW50cnkgKnBhcmVudCxcbitcdFx0XHRcdGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxuK3tcbitcdHJldHVybiBfX2RfYWxsb2NfcGFyYWxsZWwocGFyZW50LCBuYW1lLCBBTExPQ19QQVJBX1dBSVQpO1xuK31cbiBFWFBPUlRfU1lNQk9MKGRfYWxsb2NfcGFyYWxsZWwpO1xuIFxuKy8qKlxuKyAqIGRfYWxsb2NfdHJ5bG9jaygpIC0gZmluZCBvciBhbGxvY2F0ZSBhIG5ldyBkZW50cnlcbisgKiBAcGFyZW50OiBkZW50cnkgb2YgdGhlIHBhcmVudFxuKyAqIEBuYW1lOiAgIG5hbWUgb2YgdGhlIGRlbnRyeSB3aXRoaW4gdGhhdCBwYXJlbnQuXG4rICpcbisgKiBBIG5ldyBkZW50cnkgaXMgYWxsb2NhdGVkIGFuZCwgcHJvdmlkaW5nIGl0IGlzIHVuaXF1ZSwgYWRkZWQgdG8gdGhlXG4rICogcmVsZXZhbnQgaW5kZXguXG4rICogSWYgYW4gZXhpc3RpbmcgZGVudHJ5IGlzIGZvdW5kIHdpdGggdGhlIHNhbWUgcGFyZW50L25hbWUgdGhhdCBpc1xuKyAqIG5vdCBkX2luX2xvb2t1cCgpIHRoZW4gdGhhdCBpcyByZXR1cm5lZCBpbnN0ZWFkLlxuKyAqIElmIHRoZSBleGlzdGluZyBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSwgZF9hbGxvY190cnlsb2NrKClcbisgKiByZXR1cm5zIHdpdGggZXJyb3IgJS1FV09VTERCTE9DSy5cbisgKiBUaHVzIGlmIHRoZSByZXR1cm5lZCBkZW50cnkgaXMgZF9pbl9sb29rdXAoKSB0aGVuIHRoZSBjYWxsZXIgaGFzXG4rICogZXhjbHVzaXZlIGFjY2VzcyB1bnRpbCBpdCBjb21wbGV0ZXMgdGhlIGxvb2t1cC5cbisgKiBJZiB0aGUgcmV0dXJuZWQgZGVudHJ5IGlzIG5vdCBkX2luX2xvb2t1cCgpIHRoZW4gYSBsb29rdXAgaGFzXG4rICogYWxyZWFkeSBjb21wbGV0ZWQuXG4rICpcbisgKiBUaGUgQG5hbWUgbmVlZCBub3QgYWxyZWFkeSBoYXZlIC1cdTAwM2VoYXNoIHNldC5cbisgKlxuKyAqIFJldHVybnM6IHRoZSBkZW50cnksIHdoZXRoZXIgZm91bmQgb3IgYWxsb2NhdGVkLCBvciBhbiBlcnJvclxuKyAqICAgICUtRU5PTUVNLCAlLUVXT1VMREJMT0NLLCAlLUVBQ0NFUyAoZm9yIGEgYmFkIG5hbWUpIG9yXG4rICogICAgYW55dGhpbmcgcmV0dXJuZWQgYnkgLVx1MDAzZWRfaGFzaCgpLlxuKyAqL1xuK3N0cnVjdCBkZW50cnkgKmRfYWxsb2NfdHJ5bG9jayhzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBxc3RyICpuYW1lKVxuK3tcbitcdHN0cnVjdCBkZW50cnkgKmRlO1xuK1xuK1x0ZGUgPSB0cnlfbG9va3VwX25vcGVybShuYW1lLCBwYXJlbnQpO1xuK1x0aWYgKCFkZSlcbitcdFx0ZGUgPSBfX2RfYWxsb2NfcGFyYWxsZWwocGFyZW50LCBuYW1lLCBBTExPQ19QQVJBX0ZBSUwpO1xuK1x0cmV0dXJuIGRlO1xuK31cbitFWFBPUlRfU1lNQk9MKGRfYWxsb2NfdHJ5bG9jayk7XG4rXG4gLypcbiAgKiBNb3ZlIGRlbnRyeSBmcm9tIGluLWxvb2t1cCBzdGF0ZSB0byBidXN5LW5lZ2F0aXZlIG9uZS5cbiAgKlxuQEAgLTI4OTQsNiArMzAzNCw3IEBAIHN0YXRpYyB2b2lkIF9fZF9sb29rdXBfdW5oYXNoKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdGIgPSBpbl9sb29rdXBfaGFzaChkZW50cnktXHUwMDNlZF9wYXJlbnQsIGRlbnRyeS1cdTAwM2VkX25hbWUuaGFzaCk7XG4gXHRobGlzdF9ibF9sb2NrKGIpO1xuIFx0ZGVudHJ5LVx1MDAzZWRfZmxhZ3MgXHUwMDI2PSB+RENBQ0hFX1BBUl9MT09LVVA7XG4rXHRsb2NrX21hcF9yZWxlYXNlKFx1MDAyNmRlbnRyeS1cdTAwM2Vsb29rdXBfbWFwKTtcbiBcdF9faGxpc3RfYmxfZGVsKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2luX2xvb2t1cF9oYXNoKTtcbiBcdGhsaXN0X2JsX3VubG9jayhiKTtcbiBcdGRlbnRyeS1cdTAwM2V3YWl0ZXJzID0gTlVMTDtcbkBAIC0yOTMxLDE1ICszMDcyLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RfYWRkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdH1cbiBcdGlmICh1bmxpa2VseShvcHMpKVxuIFx0XHRkX3NldF9kX29wKGRlbnRyeSwgb3BzKTtcbi1cdGlmIChpbm9kZSkge1xuLVx0XHR1bnNpZ25lZCBhZGRfZmxhZ3MgPSBkX2ZsYWdzX2Zvcl9pbm9kZShpbm9kZSk7XG4tXHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2FsaWFzLCBcdTAwMjZpbm9kZS1cdTAwM2VpX2RlbnRyeSk7XG4tXHRcdHJhd193cml0ZV9zZXFjb3VudF9iZWdpbihcdTAwMjZkZW50cnktXHUwMDNlZF9zZXEpO1xuLVx0XHRfX2Rfc2V0X2lub2RlX2FuZF90eXBlKGRlbnRyeSwgaW5vZGUsIGFkZF9mbGFncyk7XG4tXHRcdHJhd193cml0ZV9zZXFjb3VudF9lbmQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfc2VxKTtcbi1cdFx0ZnNub3RpZnlfdXBkYXRlX2ZsYWdzKGRlbnRyeSk7XG4tXHR9XG4tXHRfX2RfcmVoYXNoKGRlbnRyeSk7XG4rXHRpZiAoaW5vZGUpXG4rXHRcdF9fZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTtcbitcdGlmIChkX3VuaGFzaGVkKGRlbnRyeSkpXG4rXHRcdF9fZF9yZWhhc2goZGVudHJ5KTtcbiBcdGlmIChkaXIpIHtcbiBcdFx0ZW5kX2Rpcl9hZGQoZGlyLCBuKTtcbiBcdFx0X19kX3dha2VfaW5fbG9va3VwX3dhaXRlcnMoZGVudHJ5KTtcbkBAIC0zMjQxLDcgKzMzNzcsNyBAQCBzdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhc19vcHMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0aWYgKElTX0VSUihpbm9kZSkpXG4gXHRcdHJldHVybiBFUlJfQ0FTVChpbm9kZSk7XG4gXG4tXHRCVUdfT04oIWRfdW5oYXNoZWQoZGVudHJ5KSk7XG4rXHRCVUdfT04oZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSk7XG4gXG4gXHRpZiAoIWlub2RlKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0zMjk3LDYgKzM0MzMsOCBAQCBzdHJ1Y3QgZGVudHJ5ICpkX3NwbGljZV9hbGlhc19vcHMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuICAqIEBpbm9kZTogIHRoZSBpbm9kZSB3aGljaCBtYXkgaGF2ZSBhIGRpc2Nvbm5lY3RlZCBkZW50cnlcbiAgKiBAZGVudHJ5OiBhIG5lZ2F0aXZlIGRlbnRyeSB3aGljaCB3ZSB3YW50IHRvIHBvaW50IHRvIHRoZSBpbm9kZS5cbiAgKlxuKyAqIEBkZW50cnkgbXVzdCBiZSBuZWdhdGl2ZSBhbmQgbWF5IGJlIGluLWxvb2t1cCBvciB1bmhhc2hlZCBvciBoYXNoZWQuXG4rICpcbiAgKiBJZiBpbm9kZSBpcyBhIGRpcmVjdG9yeSBhbmQgaGFzIGFuIElTX1JPT1QgYWxpYXMsIHRoZW4gZF9tb3ZlIHRoYXQgaW5cbiAgKiBwbGFjZSBvZiB0aGUgZ2l2ZW4gZGVudHJ5IGFuZCByZXR1cm4gaXQsIGVsc2Ugc2ltcGx5IGRfYWRkIHRoZSBpbm9kZVxuICAqIHRvIHRoZSBkZW50cnkgYW5kIHJldHVybiBOVUxMLlxuQEAgLTMzMDQsMTYgKzM0NDIsMTQgQEAgc3RydWN0IGRlbnRyeSAqZF9zcGxpY2VfYWxpYXNfb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiAgKiBJZiBhIG5vbi1JU19ST09UIGRpcmVjdG9yeSBpcyBmb3VuZCwgdGhlIGZpbGVzeXN0ZW0gaXMgY29ycnVwdCwgYW5kXG4gICogd2Ugc2hvdWxkIGVycm9yIG91dDogZGlyZWN0b3JpZXMgY2FuJ3QgaGF2ZSBtdWx0aXBsZSBhbGlhc2VzLlxuICAqXG4tICogVGhpcyBpcyBuZWVkZWQgaW4gdGhlIGxvb2t1cCByb3V0aW5lIG9mIGFueSBmaWxlc3lzdGVtIHRoYXQgaXMgZXhwb3J0YWJsZVxuLSAqICh2aWEga25mc2QpIHNvIHRoYXQgd2UgY2FuIGJ1aWxkIGRjYWNoZSBwYXRocyB0byBkaXJlY3RvcmllcyBlZmZlY3RpdmVseS5cbisgKiBUaGlzIHNob3VsZCBiZSB1c2VkIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIC1cdTAwM2Vsb29rdXAoKSBhbmQgdG9cbisgKiBpbnN0YW50aWF0ZSB0aGUgcmVzdWx0IG9mIC1cdTAwM2Vta2RpcigpLCBpcyBvZnRlbiB1c2VmdWwgZm9yXG4rICogLVx1MDAzZWF0b21pY19vcGVuLCBhbmQgbWF5IGJlIHVzZWQgdG8gaW5zdGFudGlhdGUgb3RoZXIgb2JqZWN0cy5cbiAgKlxuICAqIElmIGEgZGVudHJ5IHdhcyBmb3VuZCBhbmQgbW92ZWQsIHRoZW4gaXQgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UgTlVMTFxuLSAqIGlzIHJldHVybmVkLiAgVGhpcyBtYXRjaGVzIHRoZSBleHBlY3RlZCByZXR1cm4gdmFsdWUgb2YgLVx1MDAzZWxvb2t1cC5cbisgKiBpcyByZXR1cm5lZC4gIFRoaXMgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIG9mIC1cdTAwM2Vsb29rdXAgYW5kXG4rICogLVx1MDAzZW1rZGlyLlxuICAqXG4tICogQ2x1c3RlciBmaWxlc3lzdGVtcyBtYXkgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggYSBuZWdhdGl2ZSwgaGFzaGVkIGRlbnRyeS5cbi0gKiBJbiB0aGF0IGNhc2UsIHdlIGtub3cgdGhhdCB0aGUgaW5vZGUgd2lsbCBiZSBhIHJlZ3VsYXIgZmlsZSwgYW5kIGFsc28gdGhpc1xuLSAqIHdpbGwgb25seSBvY2N1ciBkdXJpbmcgYXRvbWljX29wZW4uIFNvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSBkZW50cnlcbi0gKiBiZWluZyBhbHJlYWR5IGhhc2hlZCBvbmx5IGluIHRoZSBmaW5hbCBjYXNlLlxuICAqL1xuIHN0cnVjdCBkZW50cnkgKmRfc3BsaWNlX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiB7XG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDIwYTY1MzRlYTNlZmYuLmU5NzhhNzVlYjhhMTQgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4rKysgYi9mcy9uYW1laS5jXG5AQCAtMTkzMyw3ICsxOTMzLDcgQEAgc3RhdGljIG5vaW5saW5lIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9zbG93KGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRpci1cdTAwM2VkX2lub2RlO1xuIFx0c3RydWN0IGRlbnRyeSAqcmVzO1xuIFx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuLVx0cmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzKTtcbitcdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyB8IExPT0tVUF9TSEFSRUQpO1xuIFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XG4gXHRyZXR1cm4gcmVzO1xuIH1cbkBAIC0xOTQ3LDcgKzE5NDcsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX3Nsb3dfa2lsbGFibGUoY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXG4gXHRpZiAoaW5vZGVfbG9ja19zaGFyZWRfa2lsbGFibGUoaW5vZGUpKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVFIpO1xuLVx0cmVzID0gX19sb29rdXBfc2xvdyhuYW1lLCBkaXIsIGZsYWdzKTtcbitcdHJlcyA9IF9fbG9va3VwX3Nsb3cobmFtZSwgZGlyLCBmbGFncyB8IExPT0tVUF9TSEFSRUQpO1xuIFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XG4gXHRyZXR1cm4gcmVzO1xuIH1cbkBAIC0yOTQ2LDggKzI5NDYsOCBAQCBzdHJ1Y3QgZGVudHJ5ICpzdGFydF9kaXJvcChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBxc3RyICpuYW1lLFxuICAqIGVuZF9kaXJvcCAtIHNpZ25hbCBjb21wbGV0aW9uIG9mIGEgZGlyb3BcbiAgKiBAZGU6IHRoZSBkZW50cnkgd2hpY2ggd2FzIHJldHVybmVkIGJ5IHN0YXJ0X2Rpcm9wIG9yIHNpbWlsYXIuXG4gICpcbi0gKiBJZiB0aGUgZGUgaXMgYW4gZXJyb3IsIG5vdGhpbmcgaGFwcGVucy4gT3RoZXJ3aXNlIGFueSBsb2NrIHRha2VuIHRvXG4tICogcHJvdGVjdCB0aGUgZGVudHJ5IGlzIGRyb3BwZWQgYW5kIHRoZSBkZW50cnkgaXRzZWxmIGlzIHJlbGVhc2UgKGRwdXQoKSkuXG4rICogSWYgdGhlIEBkZSBpcyBhbiBlcnJvciwgbm90aGluZyBoYXBwZW5zLiBPdGhlcndpc2UgYW55IGxvY2sgdGFrZW4gdG9cbisgKiBwcm90ZWN0IHRoZSBkZW50cnkgaXMgZHJvcHBlZCBhbmQgdGhlIGRlbnRyeSBpdHNlbGYgaXMgcmVsZWFzZWQgKGRwdXQoKSkuXG4gICovXG4gdm9pZCBlbmRfZGlyb3Aoc3RydWN0IGRlbnRyeSAqZGUpXG4ge1xuQEAgLTMyMTAsNyArMzIxMCw3IEBAIEVYUE9SVF9TWU1CT0wobG9va3VwX29uZSk7XG4gLyoqXG4gICogbG9va3VwX29uZV91bmxvY2tlZCAtIGxvb2t1cCBzaW5nbGUgcGF0aG5hbWUgY29tcG9uZW50XG4gICogQGlkbWFwOlx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBsb29rdXAgaXMgcGVyZm9ybWVkIGZyb21cbi0gKiBAbmFtZTpcdHFzdHIgb2xkaW5nIHBhdGhuYW1lIGNvbXBvbmVudCB0byBsb29rdXBcbisgKiBAbmFtZTpcdHFzdHIgaG9sZGluZyBwYXRobmFtZSBjb21wb25lbnQgdG8gbG9va3VwXG4gICogQGJhc2U6XHRiYXNlIGRpcmVjdG9yeSB0byBsb29rdXAgZnJvbVxuICAqXG4gICogVGhpcyBjYW4gYmUgdXNlZCBmb3IgaW4ta2VybmVsIGZpbGVzeXN0ZW0gY2xpZW50cyBzdWNoIGFzIGZpbGUgc2VydmVycy5cbkBAIC0zMjQzLDcgKzMyNDMsNyBAQCBFWFBPUlRfU1lNQk9MKGxvb2t1cF9vbmVfdW5sb2NrZWQpO1xuIC8qKlxuICAqIGxvb2t1cF9vbmVfcG9zaXRpdmVfa2lsbGFibGUgLSBsb29rdXAgc2luZ2xlIHBhdGhuYW1lIGNvbXBvbmVudFxuICAqIEBpZG1hcDpcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgbG9va3VwIGlzIHBlcmZvcm1lZCBmcm9tXG4tICogQG5hbWU6XHRxc3RyIG9sZGluZyBwYXRobmFtZSBjb21wb25lbnQgdG8gbG9va3VwXG4rICogQG5hbWU6XHRxc3RyIGhvbGRpbmcgcGF0aG5hbWUgY29tcG9uZW50IHRvIGxvb2t1cFxuICAqIEBiYXNlOlx0YmFzZSBkaXJlY3RvcnkgdG8gbG9va3VwIGZyb21cbiAgKlxuICAqIFRoaXMgaGVscGVyIHdpbGwgeWllbGQgRVJSX1BUUigtRU5PRU5UKSBvbiBuZWdhdGl2ZXMuIFRoZSBoZWxwZXIgcmV0dXJuc1xuQEAgLTMyNTksNyArMzI1OSw3IEBAIEVYUE9SVF9TWU1CT0wobG9va3VwX29uZV91bmxvY2tlZCk7XG4gICogdGhlIGlfcndzZW0gaXRzZWxmIGlmIG5lY2Vzc2FyeS4gIElmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgb3JcbiAgKiBkZWxpdmVyZWQsIGl0IHdpbGwgcmV0dXJuICUtRUlOVFIgaWYgdGhlIGxvY2sgaXMgbmVlZGVkLlxuICAqXG4tICogUmV0dXJuczogQSBkZW50cnksIHBvc3NpYmx5IG5lZ2F0aXZlLCBvclxuKyAqIFJldHVybnM6IEEgcG9zaXRpdmUgZGVudHJ5LCBvclxuICAqXHQgICAtIHNhbWUgZXJyb3JzIGFzIGxvb2t1cF9vbmVfdW5sb2NrZWQoKSBvclxuICAqXHQgICAtIEVSUl9QVFIoLUVJTlRSKSBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLlxuICAqL1xuQEAgLTMzODEsNyArMzM4MSw3IEBAIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9ub3Blcm1fcG9zaXRpdmVfdW5sb2NrZWQoc3RydWN0IHFzdHIgKm5hbWUsXG4gRVhQT1JUX1NZTUJPTChsb29rdXBfbm9wZXJtX3Bvc2l0aXZlX3VubG9ja2VkKTtcbiBcbiAvKipcbi0gKiBzdGFydF9jcmVhdGluZyAtIHByZXBhcmUgdG8gY3JlYXRlIGEgZ2l2ZW4gbmFtZSB3aXRoIHBlcm1pc3Npb24gY2hlY2tpbmdcbisgKiBzdGFydF9jcmVhdGluZyAtIHByZXBhcmUgdG8gYWNjZXNzIG9yIGNyZWF0ZSBhIGdpdmVuIG5hbWUgd2l0aCBwZXJtaXNzaW9uIGNoZWNraW5nXG4gICogQGlkbWFwOiAgaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIHByZXBhcmUgdG8gY3JlYXRlIHRoZSBuYW1lXG4gICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgY3JlYXRlZFxuQEAgLTM0MTMsOCArMzQxMyw4IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmcpO1xuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBmaW5kIHRoZSBuYW1lXG4gICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgcmVtb3ZlZFxuICAqXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3Zpbmdcbi0gKiBhbiBvYmplY3QgZnJvbSBhIGRpcmVjdG9yeS4gIFBlcm1pc3Npb24gY2hlY2tpbmcgKE1BWV9FWEVDKSBpcyBwZXJmb3JtZWRcbisgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZyBhbiBvYmplY3RcbisgKiBmcm9tIGEgZGlyZWN0b3J5LiAgUGVybWlzc2lvbiBjaGVja2luZyAoTUFZX0VYRUMpIGlzIHBlcmZvcm1lZFxuICAqIGFnYWluc3QgQGlkbWFwLlxuICAqXG4gICogSWYgdGhlIG5hbWUgZG9lc24ndCBleGlzdCwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuXG5AQCAtMzQ0MCw3ICszNDQwLDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZyk7XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIHByZXBhcmUgdG8gY3JlYXRlIHRoZSBuYW1lXG4gICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgY3JlYXRlZFxuICAqXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcbisgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byBjcmVhdGluZ1xuICAqIGFuIG9iamVjdCBpbiBhIGRpcmVjdG9yeS4gIFBlcm1pc3Npb24gY2hlY2tpbmcgKE1BWV9FWEVDKSBpcyBwZXJmb3JtZWRcbiAgKiBhZ2FpbnN0IEBpZG1hcC5cbiAgKlxuQEAgLTM0NjksNyArMzQ2OSw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmdfa2lsbGFibGUpO1xuICAqIEBwYXJlbnQ6IGRpcmVjdG9yeSBpbiB3aGljaCB0byBmaW5kIHRoZSBuYW1lXG4gICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgcmVtb3ZlZFxuICAqXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gcmVtb3ZpbmdcbisgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xuICAqIGFuIG9iamVjdCBmcm9tIGEgZGlyZWN0b3J5LiAgUGVybWlzc2lvbiBjaGVja2luZyAoTUFZX0VYRUMpIGlzIHBlcmZvcm1lZFxuICAqIGFnYWluc3QgQGlkbWFwLlxuICAqXG5AQCAtMzQ5OSw3ICszNDk5LDcgQEAgRVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZ19raWxsYWJsZSk7XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIHByZXBhcmUgdG8gY3JlYXRlIHRoZSBuYW1lXG4gICogQG5hbWU6ICAgdGhlIG5hbWUgdG8gYmUgY3JlYXRlZFxuICAqXG4tICogTG9ja3MgYXJlIHRha2VuIGFuZCBhIGxvb2t1cCBpbiBwZXJmb3JtZWQgcHJpb3IgdG8gY3JlYXRpbmdcbisgKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGlzIHBlcmZvcm1lZCBwcmlvciB0byBjcmVhdGluZ1xuICAqIGFuIG9iamVjdCBpbiBhIGRpcmVjdG9yeS5cbiAgKlxuICAqIElmIHRoZSBuYW1lIGFscmVhZHkgZXhpc3RzLCBhIHBvc2l0aXZlIGRlbnRyeSBpcyByZXR1cm5lZC5cbkBAIC0zNTIyLDcgKzM1MjIsNyBAQCBFWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX25vcGVybSk7XG4gICogQHBhcmVudDogZGlyZWN0b3J5IGluIHdoaWNoIHRvIGZpbmQgdGhlIG5hbWVcbiAgKiBAbmFtZTogICB0aGUgbmFtZSB0byBiZSByZW1vdmVkXG4gICpcbi0gKiBMb2NrcyBhcmUgdGFrZW4gYW5kIGEgbG9va3VwIGluIHBlcmZvcm1lZCBwcmlvciB0byByZW1vdmluZ1xuKyAqIExvY2tzIGFyZSB0YWtlbiBhbmQgYSBsb29rdXAgaXMgcGVyZm9ybWVkIHByaW9yIHRvIHJlbW92aW5nXG4gICogYW4gb2JqZWN0IGZyb20gYSBkaXJlY3RvcnkuXG4gICpcbiAgKiBJZiB0aGUgbmFtZSBkb2Vzbid0IGV4aXN0LCBhbiBlcnJvciBpcyByZXR1cm5lZC5cbkBAIC0zNTQzLDExICszNTQzLDExIEBAIHN0cnVjdCBkZW50cnkgKnN0YXJ0X3JlbW92aW5nX25vcGVybShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsXG4gRVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZ19ub3Blcm0pO1xuIFxuIC8qKlxuLSAqIHN0YXJ0X2NyZWF0aW5nX2RlbnRyeSAtIHByZXBhcmUgdG8gY3JlYXRlIGEgZ2l2ZW4gZGVudHJ5XG4tICogQHBhcmVudDogZGlyZWN0b3J5IGZyb20gd2hpY2ggZGVudHJ5IHNob3VsZCBiZSByZW1vdmVkXG4tICogQGNoaWxkOiAgdGhlIGRlbnRyeSB0byBiZSByZW1vdmVkXG4rICogc3RhcnRfY3JlYXRpbmdfZGVudHJ5IC0gcHJlcGFyZSB0byBhY2Nlc3Mgb3IgY3JlYXRlIGEgZ2l2ZW4gZGVudHJ5XG4rICogQHBhcmVudDogZGlyZWN0b3J5IG9mIGRlbnRyeVxuKyAqIEBjaGlsZDogIHRoZSBkZW50cnkgdG8gYmUgcHJlcGFyZWRcbiAgKlxuLSAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW4gb3RoZXIgZGlyb3BzIGFuZFxuKyAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW5zdCBvdGhlciBkaXJvcHMgYW5kXG4gICogdGhlIHZhbGlkaXR5IG9mIHRoZSBkZW50cnkgaXMgY2hlY2tlZDogY29ycmVjdCBwYXJlbnQgYW5kIHN0aWxsIGhhc2hlZC5cbiAgKlxuICAqIElmIHRoZSBkZW50cnkgaXMgdmFsaWQgYW5kIG5lZ2F0aXZlIGEgcmVmZXJlbmNlIGlzIHRha2VuIGFuZFxuQEAgLTM1ODAsNyArMzU4MCw3IEBAIEVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmdfZGVudHJ5KTtcbiAgKiBAcGFyZW50OiBkaXJlY3RvcnkgZnJvbSB3aGljaCBkZW50cnkgc2hvdWxkIGJlIHJlbW92ZWRcbiAgKiBAY2hpbGQ6ICB0aGUgZGVudHJ5IHRvIGJlIHJlbW92ZWRcbiAgKlxuLSAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW4gb3RoZXIgZGlyb3BzIGFuZFxuKyAqIEEgbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IHRoZSBkZW50cnkgYWdhaW5zdCBvdGhlciBkaXJvcHMgYW5kXG4gICogdGhlIHZhbGlkaXR5IG9mIHRoZSBkZW50cnkgaXMgY2hlY2tlZDogY29ycmVjdCBwYXJlbnQgYW5kIHN0aWxsIGhhc2hlZC5cbiAgKlxuICAqIElmIHRoZSBkZW50cnkgaXMgdmFsaWQgYW5kIHBvc2l0aXZlLCBhIHJlZmVyZW5jZSBpcyB0YWtlbiBhbmRcbkBAIC00NDQwLDEyICs0NDQwLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvcjtcbiBcdHVtb2RlX3QgbW9kZTtcbiBcdGJvb2wgZ290X3dyaXRlO1xuK1x0dW5zaWduZWQgaW50IHNoYXJlZF9mbGFnO1xuIFxuIHJldHJ5OlxuIFx0b3Blbl9mbGFnID0gb3AtXHUwMDNlb3Blbl9mbGFnO1xuIFx0Z290X3dyaXRlID0gZmFsc2U7XG4gXHRtb2RlID0gb3AtXHUwMDNlbW9kZTtcbiBcdGNyZWF0ZV9lcnJvciA9IDA7XG4rXHRzaGFyZWRfZmxhZyA9IChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpID8gMCA6IExPT0tVUF9TSEFSRUQ7XG4gXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiAoT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSB8IE9fUkRXUikpIHtcbiBcdFx0Z290X3dyaXRlID0gIW1udF93YW50X3dyaXRlKG5kLVx1MDAzZXBhdGgubW50KTtcbkBAIC00NDU0LDEwICs0NDU2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdCAqIGEgZGlmZmVyZW50IGVycm9yOyB3ZSdsbCBiZSBkcm9wcGluZyB0aGlzIG9uZSBhbnl3YXkuXG4gXHRcdCAqL1xuIFx0fVxuLVx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVClcbi1cdFx0aW5vZGVfbG9jayhkaXJfaW5vZGUpO1xuLVx0ZWxzZVxuK1x0aWYgKHNoYXJlZF9mbGFnKVxuIFx0XHRpbm9kZV9sb2NrX3NoYXJlZChkaXJfaW5vZGUpO1xuK1x0ZWxzZVxuK1x0XHRpbm9kZV9sb2NrKGRpcl9pbm9kZSk7XG4gXG4gXHRpZiAodW5saWtlbHkoSVNfREVBRERJUihkaXJfaW5vZGUpKSkge1xuIFx0XHRkZW50cnkgPSBFUlJfUFRSKC1FTk9FTlQpO1xuQEAgLTQ1MjYsNyArNDUyOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSBkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2Vsb29rdXAoZGlyX2lub2RlLCBkZW50cnksXG4tXHRcdFx0XHRcdFx0XHQgICAgIG5kLVx1MDAzZWZsYWdzKTtcbitcdFx0XHRcdFx0XHRcdCAgICAgbmQtXHUwMDNlZmxhZ3MgfCBzaGFyZWRfZmxhZyk7XG4gXHRcdGRfbG9va3VwX2RvbmUoZGVudHJ5KTtcbiBcdFx0aWYgKHVubGlrZWx5KHJlcykpIHtcbiBcdFx0XHRpZiAoSVNfRVJSKHJlcykpIHtcbkBAIC00NTc0LDEwICs0NTc2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuIFx0XHRcdGZzbm90aWZ5X29wZW4oZmlsZSk7XG4gXHR9XG4tXHRpZiAoKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkgfHwgY3JlYXRlX2Vycm9yKVxuLVx0XHRpbm9kZV91bmxvY2soZGlyX2lub2RlKTtcbi1cdGVsc2VcbitcdGlmIChzaGFyZWRfZmxhZylcbiBcdFx0aW5vZGVfdW5sb2NrX3NoYXJlZChkaXJfaW5vZGUpO1xuK1x0ZWxzZVxuK1x0XHRpbm9kZV91bmxvY2soZGlyX2lub2RlKTtcbiBcbiBcdGlmIChnb3Rfd3JpdGUpXG4gXHRcdG1udF9kcm9wX3dyaXRlKG5kLVx1MDAzZXBhdGgubW50KTtcbmRpZmYgLS1naXQgYS9mcy9uZnMvdW5saW5rLmMgYi9mcy9uZnMvdW5saW5rLmNcbmluZGV4IGI1N2NmYWE0ZDUxNmYuLmM4ZDcxMjIwNGU2NDkgMTAwNjQ0XG4tLS0gYS9mcy9uZnMvdW5saW5rLmNcbisrKyBiL2ZzL25mcy91bmxpbmsuY1xuQEAgLTY3LDYgKzY3LDcgQEAgc3RhdGljIHZvaWQgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlKHZvaWQgKmNhbGxkYXRhKVxuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS1cdTAwM2VkX3NiO1xuIFxuIFx0dXBfcmVhZF9ub25fb3duZXIoXHUwMDI2TkZTX0koZF9pbm9kZShkZW50cnktXHUwMDNlZF9wYXJlbnQpKS1cdTAwM2VybWRpcl9zZW0pO1xuK1x0ZF9sb29rdXBfYWNxdWlyZShkZW50cnkpO1xuIFx0ZF9sb29rdXBfZG9uZShkZW50cnkpO1xuIFx0bmZzX2ZyZWVfdW5saW5rZGF0YShkYXRhKTtcbiBcdGRwdXQoZGVudHJ5KTtcbkBAIC0xNTksNiArMTYwLDggQEAgc3RhdGljIGludCBuZnNfY2FsbF91bmxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcdGRhdGEtXHUwMDNlZGVudHJ5ID0gYWxpYXM7XG4rXHRkX2xvb2t1cF9yZWxlYXNlKGFsaWFzKTtcbitcbiBcdG5mc19kb19jYWxsX3VubGluayhpbm9kZSwgZGF0YSk7XG4gXHRyZXR1cm4gMTtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmhcbmluZGV4IDRiMWZmOTk2MDhlMDEuLmU3ZTNlZjA1MzEzYjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oXG5AQCAtMTE2LDYgKzExNiw4IEBAIHN0cnVjdCBkZW50cnkge1xuIFx0XHRcdFx0XHQgKiBwb3NzaWJsZSFcbiBcdFx0XHRcdFx0ICovXG4gXG4rXHQvKiBsb2NrZGVwIHRyYWNraW5nIG9mIERDQUNIRV9QQVJfTE9PS1VQIGxvY2tzICovXG4rXHRzdHJ1Y3QgbG9ja2RlcF9tYXBcdFx0bG9va3VwX21hcDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZF9scnU7XHRcdC8qIExSVSBsaXN0ICovXG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBkX3NpYjtcdC8qIGNoaWxkIG9mIHBhcmVudCBsaXN0ICovXG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZCBkX2NoaWxkcmVuO1x0Lyogb3VyIGNoaWxkcmVuICovXG5AQCAtMjU3LDcgKzI1OSw5IEBAIGV4dGVybiB2b2lkIGRfZGVsZXRlKHN0cnVjdCBkZW50cnkgKik7XG4gZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7XG4gZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jX2Fub24oc3RydWN0IHN1cGVyX2Jsb2NrICopO1xuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY19wYXJhbGxlbChzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IHN0cnVjdCBxc3RyICopO1xuK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY190cnlsb2NrKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7XG4gZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX3NwbGljZV9hbGlhcyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTtcbitzdHJ1Y3QgZGVudHJ5ICpkX2R1cGxpY2F0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIC8qIHdlaXJkIHByb2NmcyBtZXNzOyAqTk9UKiBleHBvcnRlZCAqL1xuIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9zcGxpY2VfYWxpYXNfb3BzKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICopO1xuQEAgLTU1Miw2ICs1NTYsMzYgQEAgc3RhdGljIGlubGluZSBpbnQgc2ltcGxlX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiB1bnNpZ25lZCBsb25nIHZmc19wcmVzc3VyZV9yYXRpbyh1bnNpZ25lZCBsb25nIHZhbCk7XG4gXG4rLyoqXG4rICogZF9sb29rdXBfcmVsZWFzZSAtIHJlbGVhc2Ugb3duZXJzaGlwIG9mIERDQUNIRV9QQVJfTE9PS1VQIGxvY2tcbisgKiBAZGVudHJ5OiBkZW50cnkgdGhhdCBpcyBsb2NrZWRcbisgKlxuKyAqIElmIGFuIGluLWxvb2t1cCBkZW50cnkgaXMgdG8gYmUgcGFzc2VkIHRvIGFub3RoZXIgdGhyZWFkIHdoaWNoXG4rICogd2lsbCBkcm9wIHRoZSBpbi1sb29rdXAgbG9jaywgdGhlbiBkX2xvb2t1cF9yZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWRcbisgKiB0byB0ZWxsIGxvY2tkZXAgdGhhdCB0aGlzIHRocmVhZCBubyBsb2NrIGhvbGRzIHRoZSBsb2NrLiAgVGhlXG4rICogdGhyZWFkIHRoYXQgcmVjZWl2ZXMgdGhlIGxvY2sgbXVzdCBjYWxsIGRfbG9va3VwX2FjcXVpcmUoKSB0b1xuKyAqIGFjcXVpcmUgdGhlIGxvY2suXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGRfbG9va3VwX3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKVxuK1x0XHRsb2NrX21hcF9yZWxlYXNlKFx1MDAyNmRlbnRyeS1cdTAwM2Vsb29rdXBfbWFwKTtcbit9XG4rXG4rLyoqXG4rICogZF9sb29rdXBfYWNxdWlyZSAtIGFjcXVpcmUgb3duZXJzaGlwIG9mIERDQUNIRV9QQVJfTE9PS1VQIGxvY2tcbisgKiBAZGVudHJ5OiBkZW50cnkgdGhhdCBpcyBsb2NrZWRcbisgKlxuKyAqIElmIGFuIGluLWxvb2t1cCBkZW50cnkgd2FzIHBhc3NlZCB0byB0aGlzIHRocmVhZCwgdGhlXG4rICogZF9sb29rdXBfYWNxdWlyZSgpIG11c3QgYmUgY2FsbGVkIHRvIHRlbGwgbG9ja2RlcCB0aGF0IHRoaXNcbisgKiB0aHJlYWQgbm93IG93bnMgdGhlIERDQUNIRV9QQVJfTE9PS1VQIGxvY2suXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGRfbG9va3VwX2FjcXVpcmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKVxuK1x0XHRsb2NrX21hcF9hY3F1aXJlX3RyeShcdTAwMjZkZW50cnktXHUwMDNlbG9va3VwX21hcCk7XG4rfVxuK1xuIC8qKlxuICAqIGRfaW5vZGUgLSBHZXQgdGhlIGFjdHVhbCBpbm9kZSBvZiB0aGlzIGRlbnRyeVxuICAqIEBkZW50cnk6IFRoZSBkZW50cnkgdG8gcXVlcnlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25hbWVpLmggYi9pbmNsdWRlL2xpbnV4L25hbWVpLmhcbmluZGV4IDg2ZDY1N2IyNGZjNmEuLjY1ZjBmNTcxMjg4NWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25hbWVpLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmFtZWkuaFxuQEAgLTMyLDggKzMyLDkgQEAgZW51bSB7IE1BWF9ORVNURURfTElOS1MgPSA4IH07XG4gI2RlZmluZSBMT09LVVBfQ1JFQVRFXHRcdEJJVCgxNylcdC8qIC4uLiBpbiBvYmplY3QgY3JlYXRpb24gKi9cbiAjZGVmaW5lIExPT0tVUF9FWENMXHRcdEJJVCgxOClcdC8qIC4uLiBpbiB0YXJnZXQgbXVzdCBub3QgZXhpc3QgKi9cbiAjZGVmaW5lIExPT0tVUF9SRU5BTUVfVEFSR0VUXHRCSVQoMTkpXHQvKiAuLi4gaW4gZGVzdGluYXRpb24gb2YgcmVuYW1lKCkgKi9cbisjZGVmaW5lIExPT0tVUF9TSEFSRURcdFx0QklUKDIwKSAvKiBQYXJlbnQgbG9jayBpcyBoZWxkIHNoYXJlZCAqL1xuIFxuLS8qIDQgc3BhcmUgYml0cyBmb3IgaW50ZW50ICovXG4rLyogMyBzcGFyZSBiaXRzIGZvciBpbnRlbnQgKi9cbiBcbiAvKiBTY29waW5nIGZsYWdzIGZvciBsb29rdXAuICovXG4gI2RlZmluZSBMT09LVVBfTk9fU1lNTElOS1NcdEJJVCgyNCkgLyogTm8gc3ltbGluayBjcm9zc2luZy4gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjE2OjI5LjkwMDkyMjU5NloiLCJTZXEiOjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3MDkxMDc5MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lIGlmIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHdhcnJhbnRlZC4gTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCBlc3BlY2lhbGx5IHRvIHVzZXJzcGFjZSwgYmVjYXVzZSBmcmFua2x5LCBLTVNBTiBzZXNzaW9ucyBhcmUgcmVzb3VyY2UgaG9ncyBhbmQgSSdkIHByZWZlciB0byBhdm9pZCB0aGVtIGlmIHBvc3NpYmxlLiBUaGUgcnVsZSBpcyBzaW1wbGU6IGlmIEtBU0FOLCBMT0NLREVQLCBvciBhbnkgb3RoZXIgc3RhbmRhcmQgZGV0ZWN0b3IgY2FuIGNhdGNoIHRoZSBidWcsIHdlICpkb24ndCogbmVlZCBLTVNBTi4gV2Ugb25seSBpbnZva2UgdGhlIGJpZyBndW5zIHdoZW4gS01TQU4gaXMgdGhlIG9ubHkgdG9vbCB0aGF0IGNhbiBkbyB0aGUgam9iLlxuXG5TbywgbGV0J3MgcnVuIHRocm91Z2ggdGhlIGNoYW5nZXMgb25lIGJ5IG9uZTpcblxuMS4gICoqRG9jdW1lbnRhdGlvbiBVcGRhdGVzOioqIFR5cG8gZml4ZXMgaW4gYHBvcnRpbmcucnN0YCBhbmQgYHZmcy5yc3RgIC0gbm8gY29uY2VybnMgaGVyZS4gU3RyYWlnaHRmb3J3YXJkIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgbm8gY29kZSBjaGFuZ2VzLiBTYWZlLlxuMi4gICoqYGZzL2RjYWNoZS5jYCBNb2RpZmljYXRpb25zOioqIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gV2UndmUgZ290IGEgbG90IG9mIGNoYW5nZXMgaW4gYGZzL2RjYWNoZS5jYDpcblxuICAgICogICBJbnRyb2R1Y3Rpb24gb2YgYGxvb2t1cF9tYXBgIGFuZCBpdHMgaW5pdGlhbGl6YXRpb24gd2l0aGluIGBfX2RfYWxsb2NgLiBUaGUgYGxvb2t1cF9tYXBgIGlzIGluaXRpYWxpemVkIHdpdGggYGxvY2tkZXBfaW5pdF9tYXBgLCB3aGljaCBzaG91bGQgc2V0IHRoZSBpbml0aWFsIHN0YXRlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBgX19kX2FsbG9jYCBpbml0aWFsaXplcyBldmVyeXRoaW5nLCB0aGUgYGxvb2t1cF9tYXBgIHNob3VsZCBhbHNvIGJlIGluaXRpYWxpemVkLCBhbmQgdGhpcyBkb2VzIG5vdCB3YXJyYW50IEtNU0FOIGZ1enppbmcuIEJ1dCBJIHNob3VsZCBjaGVjayBgX19kX2FsbG9jYCB0byB2ZXJpZnkgdGhhdCBga21lbV9jYWNoZV9hbGxvY19scnVgIGNvcnJlY3RseSBpbml0aWFsaXplcyB0aGUgZmllbGRzLlxuICAgICogICBBIG5ldyBgZF9kdXBsaWNhdGUoKWAgaGVscGVyLCBzb21lIGxvY2tkZXAgYW5ub3RhdGlvbnMsIGFuZCBhIGBkX2FsbG9jX3RyeWxvY2soKWAgZnVuY3Rpb24uIFRoZXNlIHNlZW0gZm9jdXNlZCBvbiBjb25jdXJyZW5jeSBhbmQgbG9ja2luZywgYnV0IGRvbid0IGltbWVkaWF0ZWx5IHNjcmVhbSBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5LlwiXG4gICAgKiAgIENoYW5nZXMgdG8gYF9fZF9sb29rdXBfdW5oYXNoYCwgYF9fZF9hZGRgLCBhbmQgYGRfc3BsaWNlX2FsaWFzX29wc2AuIFRoZXNlIGFwcGVhciB0byBiZSByZWZhY3RvcmluZ3MgYW5kIGltcHJvdmVtZW50cyBhcm91bmQgZGVudHJ5IG1hbmFnZW1lbnQsIHdpdGggc29tZSBsb2NrZGVwLXJlbGF0ZWQgY2hhbmdlcy4gQWdhaW4sIHRoZXNlIGFyZW4ndCBkaXJlY3RseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cbjMuICAqKmBmcy9uYW1laS5jYCBVcGRhdGVzOioqIFByaW1hcmlseSBsb2NrL3VubG9jayBjaGFuZ2VzIHdpdGggYSBiaXQgb2YgcmVmYWN0b3JpbmcgZm9yIGJldHRlciBgTE9PS1VQX1NIQVJFRGAgdXNhZ2UuIE5vIHJlZCBmbGFncyBoZXJlIGVpdGhlci5cbjQuICAqKmBmcy9uZnMvdW5saW5rLmNgIFR3ZWFrczoqKiBTb21lIGxvY2tpbmctcmVsYXRlZCBjaGFuZ2VzIHdpdGggYGRfbG9va3VwX2FjcXVpcmVgIGFuZCBgZF9sb29rdXBfcmVsZWFzZWAuIFRoaXMgaXMgbGlrZWx5IGNvcnJlY3QtbmVzcyByZWxhdGVkIGFuZCBJJ20gbm90IHNlZWluZyBhbnkgbmV3IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3MuXG41LiAgKipIZWFkZXIgZmlsZSBhZGRpdGlvbnM6KiogQWRkaW5nIGBsb29rdXBfbWFwYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgaW4gYGluY2x1ZGUvbGludXgvZGNhY2hlLmhgIGFuZCBgaW5jbHVkZS9saW51eC9uYW1laS5oYC4gVGhlc2UgYXJlIGp1c3QgZGVjbGFyYXRpb25zIGFuZCBkZWZpbml0aW9ucyBhbmQsIGJ5IHRoZW1zZWx2ZXMsIGRvbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzLlxuXG5Ob3csIGxldCdzIHJldHVybiB0byB0aGUgYGxvb2t1cF9tYXBgIGluaXRpYWxpemF0aW9uIGluIGBfX2RfYWxsb2NgLiBTaW5jZSB0aGUgc3RydWN0dXJlIGhhcyBiZWVuIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX2FsbG9jX2xydWAsIHRoaXMgc2hvdWxkIGluaXRpYWxpemUgdGhlIHN0cnVjdHVyZS4gQnV0IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYF9fZF9hbGxvY2AgdG8gYmUgMTAwJSBzdXJlLiBCYXNlZCBvbiBhbiBpbml0aWFsIHJldmlldyBvZiB0aGlzIHBhdGNoLCBJIHRoaW5rIHRoZSBjaGFuZ2VzIGFyZSBnZW5lcmFsbHkgc2FmZSBhbmQgZG9uJ3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgb2J2aW91cyBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhhdCB3b3VsZCAqcmVxdWlyZSogS01TQU4gZnV6emluZy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgX19kX2FsbG9jYCB0cnVseSBpbml0aWFsaXplcyBhbGwgbWVtYmVycywgaW5jbHVkaW5nIGBsb29rdXBfbWFwYC4gSWYgdGhhdCBwYW5zIG91dCwgdGhlbiBJIHdpbGwgY29uc2lkZXIgdGhpcyBwYXRjaCBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI5NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjE3OjA2Ljk5MjAwNTE2NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwODQ3ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fY2FjaGVfYWxsb2MuKmRlbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kY2FjaGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kY2FjaGUuYz0xOTAyPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuLS1cXG5mcy9kY2FjaGUuYy0xOTA4LVxcbmZzL2RjYWNoZS5jOjE5MDk6XFx0ZGVudHJ5ID0ga21lbV9jYWNoZV9hbGxvY19scnUoZGVudHJ5X2NhY2hlLCBcXHUwMDI2c2ItXFx1MDAzZXNfZGVudHJ5X2xydSxcXG5mcy9kY2FjaGUuYy0xOTEwLVxcdFxcdFxcdFxcdCAgICAgIEdGUF9LRVJORUwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxNzowNy4zNjI4NjExNTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg1NDM0MTM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYF9fZF9hbGxvY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byB6b29tIGluIG9uIHRoZSBgX19kX2FsbG9jYCBmdW5jdGlvbi4gSSdtIHRoaW5raW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMTkwMC0xOTcwLiBUaGlzIGFyZWEgc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgZm9yIHRoZSBpc3N1ZSBJJ20gaW52ZXN0aWdhdGluZy4gSSdsbCB1c2UgdGhlIFwicmVhZC1maWxlXCIgdG9vbCBvciBmdW5jdGlvbiB0byBxdWlja2x5IHB1bGwgdXAgdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlIGFuZCBnZXQgYSBkaXJlY3QgbG9vay4gSSBjYW4gdGhlbiBjYXJlZnVsbHkgZXhhbWluZSB0aGUgbG9naWMsIHZhcmlhYmxlIHVzYWdlLCBhbmQgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmNlcm5zIHdpdGhpbiB0aGF0IHNwZWNpZmljIHJhbmdlLiBGb2N1c2luZyBvbiBhIGRlZmluZWQgc2VjdGlvbiBoZWxwcyBzdHJlYW1saW5lIHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE1NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjE3OjEwLjIxNzIwNDkwOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZGNhY2hlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkwMDpcXHQgKi9cXG4xOTAxOlxcdCBcXG4xOTAyOlxcdHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpXFxuMTkwMzpcXHR7XFxuMTkwNDpcXHRcXHRzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fbG9va3VwX2tleTtcXG4xOTA1OlxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcXG4xOTA2OlxcdFxcdGNoYXIgKmRuYW1lO1xcbjE5MDc6XFx0XFx0aW50IGVycjtcXG4xOTA4OlxcdFxcbjE5MDk6XFx0XFx0ZGVudHJ5ID0ga21lbV9jYWNoZV9hbGxvY19scnUoZGVudHJ5X2NhY2hlLCBcXHUwMDI2c2ItXFx1MDAzZXNfZGVudHJ5X2xydSxcXG4xOTEwOlxcdFxcdFxcdFxcdFxcdCAgICAgIEdGUF9LRVJORUwpO1xcbjE5MTE6XFx0XFx0aWYgKCFkZW50cnkpXFxuMTkxMjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xOTEzOlxcdFxcbjE5MTQ6XFx0XFx0LypcXG4xOTE1OlxcdFxcdCAqIFdlIGd1YXJhbnRlZSB0aGF0IHRoZSBpbmxpbmUgbmFtZSBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuXFxuMTkxNjpcXHRcXHQgKiBUaGlzIHdheSB0aGUgbWVtY3B5KCkgZG9uZSBieSB0aGUgbmFtZSBzd2l0Y2hpbmcgaW4gcmVuYW1lXFxuMTkxNzpcXHRcXHQgKiB3aWxsIHN0aWxsIGFsd2F5cyBoYXZlIGEgTlVMIGF0IHRoZSBlbmQsIGV2ZW4gaWYgd2UgbWlnaHRcXG4xOTE4OlxcdFxcdCAqIGJlIG92ZXJ3cml0aW5nIGFuIGludGVybmFsIE5VTCBjaGFyYWN0ZXJcXG4xOTE5OlxcdFxcdCAqL1xcbjE5MjA6XFx0XFx0ZGVudHJ5LVxcdTAwM2VkX3Nob3J0bmFtZS5zdHJpbmdbRE5BTUVfSU5MSU5FX0xFTi0xXSA9IDA7XFxuMTkyMTpcXHRcXHRpZiAodW5saWtlbHkoIW5hbWUpKSB7XFxuMTkyMjpcXHRcXHRcXHRuYW1lID0gXFx1MDAyNnNsYXNoX25hbWU7XFxuMTkyMzpcXHRcXHRcXHRkbmFtZSA9IGRlbnRyeS1cXHUwMDNlZF9zaG9ydG5hbWUuc3RyaW5nO1xcbjE5MjQ6XFx0XFx0fSBlbHNlIGlmIChuYW1lLVxcdTAwM2VsZW4gXFx1MDAzZSBETkFNRV9JTkxJTkVfTEVOLTEpIHtcXG4xOTI1OlxcdFxcdFxcdHN0cnVjdCBleHRlcm5hbF9uYW1lICpwO1xcbjE5MjY6XFx0XFxuMTkyNzpcXHRcXHRcXHRwID0ga21hbGxvY19mbGV4KCpwLCBuYW1lLCBuYW1lLVxcdTAwM2VsZW4gKyAxLFxcbjE5Mjg6XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1JFQ0xBSU1BQkxFKTtcXG4xOTI5OlxcdFxcdFxcdGlmICghcCkge1xcbjE5MzA6XFx0XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKGRlbnRyeV9jYWNoZSwgZGVudHJ5KTsgXFxuMTkzMTpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xOTMyOlxcdFxcdFxcdH1cXG4xOTMzOlxcdFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnAtXFx1MDAzZWNvdW50LCAxKTtcXG4xOTM0OlxcdFxcdFxcdGRuYW1lID0gcC1cXHUwMDNlbmFtZTtcXG4xOTM1OlxcdFxcdH0gZWxzZSAge1xcbjE5MzY6XFx0XFx0XFx0ZG5hbWUgPSBkZW50cnktXFx1MDAzZWRfc2hvcnRuYW1lLnN0cmluZztcXG4xOTM3OlxcdFxcdH1cXHRcXG4xOTM4OlxcdFxcbjE5Mzk6XFx0XFx0ZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5sZW4gPSBuYW1lLVxcdTAwM2VsZW47XFxuMTk0MDpcXHRcXHRkZW50cnktXFx1MDAzZV9fZF9uYW1lLmhhc2ggPSBuYW1lLVxcdTAwM2VoYXNoO1xcbjE5NDE6XFx0XFx0bWVtY3B5KGRuYW1lLCBuYW1lLVxcdTAwM2VuYW1lLCBuYW1lLVxcdTAwM2VsZW4pO1xcbjE5NDI6XFx0XFx0ZG5hbWVbbmFtZS1cXHUwMDNlbGVuXSA9IDA7XFxuMTk0MzpcXHRcXG4xOTQ0OlxcdFxcdC8qIE1ha2Ugc3VyZSB3ZSBhbHdheXMgc2VlIHRoZSB0ZXJtaW5hdGluZyBOVUwgY2hhcmFjdGVyICovXFxuMTk0NTpcXHRcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2ZGVudHJ5LVxcdTAwM2VfX2RfbmFtZS5uYW1lLCBkbmFtZSk7IC8qIF5eXiAqL1xcbjE5NDY6XFx0XFxuMTk0NzpcXHRcXHRkZW50cnktXFx1MDAzZWRfZmxhZ3MgPSAwO1xcbjE5NDg6XFx0XFx0bG9ja3JlZl9pbml0KFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbG9ja3JlZik7XFxuMTk0OTpcXHRcXHRzZXFjb3VudF9zcGlubG9ja19pbml0KFxcdTAwMjZkZW50cnktXFx1MDAzZWRfc2VxLCBcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX2xvY2spO1xcbjE5NTA6XFx0XFx0ZGVudHJ5LVxcdTAwM2VkX2lub2RlID0gTlVMTDtcXG4xOTUxOlxcdFxcdGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQgPSBkZW50cnk7XFxuMTk1MjpcXHRcXHRkZW50cnktXFx1MDAzZWRfc2IgPSBzYjtcXG4xOTUzOlxcdFxcdGRlbnRyeS1cXHUwMDNlZF9vcCA9IHNiLVxcdTAwM2VfX3NfZF9vcDtcXG4xOTU0OlxcdFxcdGRlbnRyeS1cXHUwMDNlZF9mbGFncyA9IHNiLVxcdTAwM2VzX2RfZmxhZ3M7XFxuMTk1NTpcXHRcXHRkZW50cnktXFx1MDAzZWRfZnNkYXRhID0gTlVMTDtcXG4xOTU2OlxcdFxcdElOSVRfSExJU1RfQkxfTk9ERShcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX2hhc2gpO1xcbjE5NTc6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9scnUpO1xcbjE5NTg6XFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfY2hpbGRyZW4pO1xcbjE5NTk6XFx0XFx0ZGVudHJ5LVxcdTAwM2V3YWl0ZXJzID0gTlVMTDtcXG4xOTYwOlxcdFxcdElOSVRfSExJU1RfTk9ERShcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX3NpYik7XFxuMTk2MTpcXHRcXG4xOTYyOlxcdFxcdGxvY2tkZXBfaW5pdF9tYXAoXFx1MDAyNmRlbnRyeS1cXHUwMDNlbG9va3VwX21hcCwgXFxcIkRDQUNIRV9QQVJfTE9PS1VQXFxcIiwgXFx1MDAyNl9fbG9va3VwX2tleSwgMCk7XFxuMTk2MzpcXHRcXG4xOTY0OlxcdFxcdGlmIChkZW50cnktXFx1MDAzZWRfb3AgXFx1MDAyNlxcdTAwMjYgZGVudHJ5LVxcdTAwM2VkX29wLVxcdTAwM2VkX2luaXQpIHtcXG4xOTY1OlxcdFxcdFxcdGVyciA9IGRlbnRyeS1cXHUwMDNlZF9vcC1cXHUwMDNlZF9pbml0KGRlbnRyeSk7XFxuMTk2NjpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMTk2NzpcXHRcXHRcXHRcXHRpZiAoZG5hbWVfZXh0ZXJuYWwoZGVudHJ5KSlcXG4xOTY4OlxcdFxcdFxcdFxcdFxcdGtmcmVlKGV4dGVybmFsX25hbWUoZGVudHJ5KSk7XFxuMTk2OTpcXHRcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoZGVudHJ5X2NhY2hlLCBkZW50cnkpO1xcbjE5NzA6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTk3MTpcXHRcXHRcXHR9XFxuMTk3MjpcXHRcXHR9XFxuMTk3MzpcXHRcXG4xOTc0OlxcdFxcdHRoaXNfY3B1X2luYyhucl9kZW50cnkpO1xcbjE5NzU6XFx0XFxuMTk3NjpcXHRcXHRyZXR1cm4gZGVudHJ5O1xcbjE5Nzc6XFx0fVxcbjE5Nzg6XFx0XFxuMTk3OTpcXHQvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6MTc6MTAuMjE3NDYyNjA4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkxNjUxOTAzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogUGFyYWxsZWwgRGVudHJ5IExvb2t1cCBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcy4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBmbGFnIHRoaXMgcGF0Y2ggZm9yIEtNU0FOIHNjcnV0aW55LiBJIGtub3cgdGhlIGRyaWxsOiB3ZSBoYXZlIHRvIGJlICpyZWFsbHkqIHN1cmUgYWJvdXQgZGF0YSBsZWFrcyB0byB1c2Vyc3BhY2Ugb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZS4gTGV0J3MgcnVuIHRocm91Z2ggdGhhdCBjaGVja2xpc3Q6XG5cbiogICAqKkZpcnN0LCBhcmUgdGhlcmUgYW55IHVzZXItc3BhY2UgZXhwb3N1cmVzPyoqIE5vLiBUaGlzIHBhdGNoIHRvdWNoZXMgZG9jdW1lbnRhdGlvbiBhbmQgZmlsZSBzeXN0ZW0gaW50ZXJuYWxzOiBgZGNhY2hlLmNgLCBgbmFtZWkuY2AsIGBuZnMvdW5saW5rLmNgIGFuZCBhIGZldyBoZWFkZXJzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2UuIFdlJ3JlIGFkZGluZyBgbG9va3VwX21hcGAgdG8gYHN0cnVjdCBkZW50cnlgIGZvciBsb2NrZGVwIGFuZCBzb21lIGhlbHBlciBmdW5jdGlvbnMsIGJ1dCBub3QgZm9yIGRpcmVjdCBjb21tdW5pY2F0aW9uIHdpdGggdXNlci1zcGFjZS5cblxuKiAgICoqTmV4dCwgYXJlIHRoZXJlIGNvbmRpdGlvbmFscyBvciBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIERvZXNuJ3Qgc2VlbSBzby4gVGhlIHBhdGNoIGludHJvZHVjZXMgYERDQUNIRV9QQVJfTE9PS1VQYCB0byBhbGxvdyBwYXJhbGxlbCBsb29rdXBzLiBXZSdyZSBhZGRpbmcgbmV3IGFsbG9jYXRpb24gaGVscGVycyBmb3Igbm9uLWJsb2NraW5nIGxvb2t1cCAoYEFMTE9DX1BBUkFfRkFJTGAsIGBkX2FsbG9jX3RyeWxvY2tgKSBhbmQgYWRkaW5nIGEgYExPT0tVUF9TSEFSRURgIGZsYWcgZm9yIGxvY2tpbmcgdXBkYXRlcy4gQnV0IHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgY2hhbmdlcyB0aGF0IGhpbmdlcyBvbiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgdG8gZGV0ZXJtaW5lIHByb2dyYW0gZmxvdy5cblxuKiAgICoqSG93IGFib3V0IGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXM/KiogV2UncmUgaW50cm9kdWNpbmcgYSBuZXcgZmllbGQgYGxvb2t1cF9tYXBgIGluIGBzdHJ1Y3QgZGVudHJ5YCBhbmQgdXNpbmcgaXQgZm9yIGxvY2tkZXAgaW5zdHJ1bWVudGF0aW9uIGluIHBhcmFsbGVsIGxvb2t1cHMuIEkgc2VlIHNvbWUgbmV3IGRlbnRyeSBhbGxvY2F0aW9ucyBhbmQgcmVmYWN0b3Jpbmcgb2YgYF9fZF9hZGRgIHRvIGNhbGwgYF9fZF9pbnN0YW50aWF0ZWAgZm9yIHBhcmFsbGVsIGxvb2t1cHMuIEhvd2V2ZXIsIGNydWNpYWxseSwgdGhlIG5ldyBhbGxvY2F0aW9ucyB2aWEgYF9fZF9hbGxvY2AgZnVsbHkgaW5pdGlhbGl6ZSBldmVyeXRoaW5nLCBpbmNsdWRpbmcgYGxvY2tkZXBfaW5pdF9tYXAoXHUwMDI2ZGVudHJ5LVx1MDAzZWxvb2t1cF9tYXAsIC4uLilgLlxuXG4qICAgKipGaW5hbGx5LCBpcyB0aGVyZSBhIGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgdmlhIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIGV0Yy4/KiogTm8sIEkgZG9uJ3Qgc2VlIGFueSBjaGFuZ2VzIHRvIGJ1ZmZlciBzaXppbmcsIGJvdW5kcyBjaGVja3MsIG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkJhc2VkIG9uIHRoaXMsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBwYXRjaCAqZG9lc24ndCogaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucy4gQWxsIG9mIHRoZSBuZXcgYWxsb2NhdGlvbnMgaW5pdGlhbGl6ZSB0aGVpciBmaWVsZHMgcHJvcGVybHkuIFRoaXMgaXMgbWFpbmx5IGFib3V0IGxvY2tpbmcsIHBhcmFsbGVsaXNtLCBhbmQgZGVudHJ5IG1hbmFnZW1lbnQuIEFueSBjb25jdXJyZW50IHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3VlcyB0aGF0IEkgY2FuIHNlZSBzaG91bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAsIEtBU0FOLCBvciBrZXJuZWwgYXNzZXJ0cyAoYEJVR19PTmApLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXM6IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSdyZSBnb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY1NCwiT3V0cHV0VG9rZW5zIjoxOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDoxNzoxOS4zODI2NTQ4MTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIExvY2tkZXAgdHJhY2tpbmcgZm9yIHBhcmFsbGVsIGRlbnRyeSBsb29rdXBzIChEQ0FDSEVfUEFSX0xPT0tVUCB2aWEgc3RydWN0IGxvY2tkZXBfbWFwIGluIHN0cnVjdCBkZW50cnkpLCBhZGRzIHRoZSBkX2R1cGxpY2F0ZSBhbmQgZF9hbGxvY190cnlsb2NrIGhlbHBlcnMsIHVwZGF0ZXMgbG9ja2luZyBmbGFncyAoTE9PS1VQX1NIQVJFRCkgaW4gVkZTIGxvb2t1cCByb3V0aW5lcyAobG9va3VwX3Nsb3csIGxvb2t1cF9vcGVuKSwgYW5kIGZpeGVzIGZpbGVzeXN0ZW0gZG9jdW1lbnRhdGlvbi5cXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgdHJhbnNmZXJzLiBBbGwgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmVzIChlLmcuLCBzdHJ1Y3QgZGVudHJ5IGluIF9fZF9hbGxvYykgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbi4gQW55IGNvbmN1cnJlbmN5LCBkZWFkbG9jaywgb3IgcmVmY291bnRpbmcgaXNzdWVzIHJlc3VsdGluZyBmcm9tIHRoZXNlIFZGUyBsb2NraW5nL2xvb2t1cCByZWZhY3RvcmluZ3MgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyBzdWNoIGFzIExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBMb2NrZGVwIHRyYWNraW5nIGZvciBwYXJhbGxlbCBkZW50cnkgbG9va3VwcyAoRENBQ0hFX1BBUl9MT09LVVAgdmlhIHN0cnVjdCBsb2NrZGVwX21hcCBpbiBzdHJ1Y3QgZGVudHJ5KSwgYWRkcyB0aGUgZF9kdXBsaWNhdGUgYW5kIGRfYWxsb2NfdHJ5bG9jayBoZWxwZXJzLCB1cGRhdGVzIGxvY2tpbmcgZmxhZ3MgKExPT0tVUF9TSEFSRUQpIGluIFZGUyBsb29rdXAgcm91dGluZXMgKGxvb2t1cF9zbG93LCBsb29rdXBfb3BlbiksIGFuZCBmaXhlcyBmaWxlc3lzdGVtIGRvY3VtZW50YXRpb24uXFxuXFxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgYm91bmRhcmllcywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBkYXRhIHRyYW5zZmVycy4gQWxsIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IGRlbnRyeSBpbiBfX2RfYWxsb2MpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24uIEFueSBjb25jdXJyZW5jeSwgZGVhZGxvY2ssIG9yIHJlZmNvdW50aW5nIGlzc3VlcyByZXN1bHRpbmcgZnJvbSB0aGVzZSBWRlMgbG9ja2luZy9sb29rdXAgcmVmYWN0b3JpbmdzIGFyZSB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjk4h[1] Phase: Succeeded StartedAt: 2026-09-04 04:17:31 +0000 UTC FinishedAt: 2026-09-04 04:17:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 04:17:31 +0000 UTC FinishedAt: 2026-09-04 04:17:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2] Phase: Succeeded StartedAt: 2026-09-04 04:17:31 +0000 UTC FinishedAt: 2026-09-04 07:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 04:17:31 +0000 UTC FinishedAt: 2026-09-04 07:59:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 04:17:31 +0000 UTC FinishedAt: 2026-09-04 04:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 04:17:31 +0000 UTC FinishedAt: 2026-09-04 04:17:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowwjk4h/series-workflowwjk4h-convert-artifact-285660988/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 04:17:41 +0000 UTC FinishedAt: 2026-09-04 04:33:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 04:17:41 +0000 UTC FinishedAt: 2026-09-04 04:33:33 +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:*f9be1b7f-91d4-4e5a-9f7a-3391a9576c71,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-workflowwjk4h/series-workflowwjk4h-convert-artifact-285660988/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": "bb63dedc-0cec-4f03-a264-eb3941ce53c8", "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-workflowwjk4h/series-workflowwjk4h-build-action-2630576234/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 04:17:41 +0000 UTC FinishedAt: 2026-09-04 04:33:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f9be1b7f-91d4-4e5a-9f7a-3391a9576c71,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-workflowwjk4h/series-workflowwjk4h-convert-artifact-285660988/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": "bb63dedc-0cec-4f03-a264-eb3941ce53c8", "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-workflowwjk4h/series-workflowwjk4h-build-action-2630576234/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 04:33:33 +0000 UTC FinishedAt: 2026-09-04 04:33:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 04:33:33 +0000 UTC FinishedAt: 2026-09-04 04:33:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 04:33:33 +0000 UTC FinishedAt: 2026-09-04 04:33:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 04:33:33 +0000 UTC FinishedAt: 2026-09-04 04:33:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowwjk4h/series-workflowwjk4h-convert-artifact-2516111227/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 04:33:43 +0000 UTC FinishedAt: 2026-09-04 04:35:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 04:33:43 +0000 UTC FinishedAt: 2026-09-04 04:35:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bb63dedc-0cec-4f03-a264-eb3941ce53c8,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-workflowwjk4h/series-workflowwjk4h-build-action-2630576234/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-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 04:35:39 +0000 UTC FinishedAt: 2026-09-04 04:35:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 04:35:39 +0000 UTC FinishedAt: 2026-09-04 04:35:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 04:35:39 +0000 UTC FinishedAt: 2026-09-04 04:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 04:35:39 +0000 UTC FinishedAt: 2026-09-04 04:52:58 +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:*f9be1b7f-91d4-4e5a-9f7a-3391a9576c71,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-workflowwjk4h/series-workflowwjk4h-convert-artifact-2516111227/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": "58b24302-c5e4-42c9-a3cc-151e036e4b12", "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-workflowwjk4h/series-workflowwjk4h-build-action-3621791/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 04:35:39 +0000 UTC FinishedAt: 2026-09-04 04:52:48 +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:*f9be1b7f-91d4-4e5a-9f7a-3391a9576c71,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-workflowwjk4h/series-workflowwjk4h-convert-artifact-2516111227/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": "58b24302-c5e4-42c9-a3cc-151e036e4b12", "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-workflowwjk4h/series-workflowwjk4h-build-action-3621791/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 04:52:58 +0000 UTC FinishedAt: 2026-09-04 04:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 04:52:58 +0000 UTC FinishedAt: 2026-09-04 04:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 04:52:58 +0000 UTC FinishedAt: 2026-09-04 04:54:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 04:52:58 +0000 UTC FinishedAt: 2026-09-04 04:54:44 +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:*58b24302-c5e4-42c9-a3cc-151e036e4b12,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-workflowwjk4h/series-workflowwjk4h-build-action-3621791/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-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 04:54:54 +0000 UTC FinishedAt: 2026-09-04 07:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 04:54:54 +0000 UTC FinishedAt: 2026-09-04 07:59:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*bb63dedc-0cec-4f03-a264-eb3941ce53c8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*58b24302-c5e4-42c9-a3cc-151e036e4b12,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-workflowwjk4h/series-workflowwjk4h-build-action-2630576234/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-workflowwjk4h/series-workflowwjk4h-build-action-3621791/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 04:54:54 +0000 UTC FinishedAt: 2026-09-04 04:55:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 04:54:54 +0000 UTC FinishedAt: 2026-09-04 04:54:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwjk4h/series-workflowwjk4h-convert-artifact-1794548596/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 04:54:54 +0000 UTC FinishedAt: 2026-09-04 04:54:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 04:54:54 +0000 UTC FinishedAt: 2026-09-04 04:54:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 04:54:54 +0000 UTC FinishedAt: 2026-09-04 04:54:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 04:55:04 +0000 UTC FinishedAt: 2026-09-04 07:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjk4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["d_duplicate","d_alloc_parallel","d_alloc_trylock","d_splice_alias","d_splice_alias_ops","d_wait_lookup","lookup_slow","lookup_slow_killable","lookup_open","nfs_async_unlink_release","nfs_call_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89a312991dc6e638a36adc43ccb91dbc25504c04","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","NFS_FS"],"series_id":"f5ed6ab0-6f2e-45e0-a4a7-cc663bcba216","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 04:55:04 +0000 UTC FinishedAt: 2026-09-04 07:58:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bb63dedc-0cec-4f03-a264-eb3941ce53c8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*58b24302-c5e4-42c9-a3cc-151e036e4b12,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-workflowwjk4h/series-workflowwjk4h-build-action-2630576234/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-workflowwjk4h/series-workflowwjk4h-build-action-3621791/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-workflowwjk4h/series-workflowwjk4h-convert-artifact-1794548596/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,}