Name: series-workflowjnh2m Phase: Running StartedAt: 2026-07-08 19:50:53 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[0] Phase: Succeeded StartedAt: 2026-07-08 19:50:53 +0000 UTC FinishedAt: 2026-07-08 20:15:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 19:50:53 +0000 UTC FinishedAt: 2026-07-08 20:15:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "ee1bcf8271eb2e1d191bf97348ddf823c6071fa9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT_KASAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "ee1bcf8271eb2e1d191bf97348ddf823c6071fa9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT_KASAN" ], "series_id": "31571c46-133b-4a27-b854-eb01f403d79f" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile", "bpf_do_misc_fixups", "check_mem_access" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIwOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVRfS0FTQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7LAogICAgJiMzNDtjaGVja19tZW1fYWNjZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgS0FTQU4gc3VwcG9ydCB0byB0aGUgQlBGIEpJVCBjb21waWxlciBvbiB4ODZfNjQsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjA6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxZDZkZGY5NzA2YTg2OWJjNmQyNTVlMWM3ZDBhZTZmYmFkYjc5OWI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAyMDoxNDoxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggYmRhZDkwZjIxMGU0YmYuLjcwNWE5YWI4NWYzYTk1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvS2NvbmZpZ1xuQEAgLTIzMyw2ICYjNDM7MjMzLDcgQEAgY29uZmlnIFg4NlxuIFx0c2VsZWN0IEhBVkVfU0FNUExFX0ZUUkFDRV9ESVJFQ1RcdGlmIFg4Nl82NFxuIFx0c2VsZWN0IEhBVkVfU0FNUExFX0ZUUkFDRV9ESVJFQ1RfTVVMVElcdGlmIFg4Nl82NFxuIFx0c2VsZWN0IEhBVkVfRUJQRl9KSVRcbiYjNDM7XHRzZWxlY3QgSEFWRV9FQlBGX0pJVF9LQVNBTlx0XHRpZiBYODZfNjRcbiBcdHNlbGVjdCBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTXG4gXHRzZWxlY3QgSEFWRV9FSVNBXHRcdFx0aWYgWDg2XzMyXG4gXHRzZWxlY3QgSEFWRV9FWElUX1RIUkVBRFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggZGU3NTE1ZWExYmVhZTguLjY1YTAwZTg0Nzk5Y2QyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0yMSw2ICYjNDM7MjEsMTcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdW53aW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2ZpLmhcdTAwM2VcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9KSVRfS0FTQU4pXG4mIzQzO3ZvaWQgX19hc2FuX2xvYWQxKHZvaWQgKnApO1xuJiM0Mzt2b2lkIF9fYXNhbl9zdG9yZTEodm9pZCAqcCk7XG4mIzQzO3ZvaWQgX19hc2FuX2xvYWQyKHZvaWQgKnApO1xuJiM0Mzt2b2lkIF9fYXNhbl9zdG9yZTIodm9pZCAqcCk7XG4mIzQzO3ZvaWQgX19hc2FuX2xvYWQ0KHZvaWQgKnApO1xuJiM0Mzt2b2lkIF9fYXNhbl9zdG9yZTQodm9pZCAqcCk7XG4mIzQzO3ZvaWQgX19hc2FuX2xvYWQ4KHZvaWQgKnApO1xuJiM0Mzt2b2lkIF9fYXNhbl9zdG9yZTgodm9pZCAqcCk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdGF0aWMgYm9vbCBhbGxfY2FsbGVlX3JlZ3NfdXNlZFs0XSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTtcbiBcbiBzdGF0aWMgdTggKmVtaXRfY29kZSh1OCAqcHRyLCB1MzIgYnl0ZXMsIHVuc2lnbmVkIGludCBsZW4pXG5AQCAtMTExMCw2ICYjNDM7MTEyMSw5MCBAQCBzdGF0aWMgdm9pZCBtYXliZV9lbWl0XzFtb2QodTggKipwcHJvZywgdTMyIHJlZywgYm9vbCBpczY0KVxuIFx0KnBwcm9nID0gcHJvZztcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZW1pdF9rYXNhbl9jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCAqKnBwcm9nLFxuJiM0MztcdFx0XHQgICAgdTMyIGFkZHJfcmVnLCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICppcCxcbiYjNDM7XHRcdFx0ICAgIGJvb2wgaXNfd3JpdGUsIGJvb2wgYWNjZXNzZXNfc3RhY2tfb25seSlcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9KSVRfS0FTQU5cbiYjNDM7XHR1MzIgYnBmX3NpemUgPSBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdHMzMiBvZmYgPSBpbnNuLVx1MDAzZW9mZjtcbiYjNDM7XHR1OCAqcHJvZyA9ICpwcHJvZztcbiYjNDM7XHR2b2lkICprYXNhbl9mdW5jO1xuJiM0MztcbiYjNDM7XHRpZiAoIWVudilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoYWNjZXNzZXNfc3RhY2tfb25seSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBEZXJpdmUgS0FTQU4gY2hlY2sgZnVuY3Rpb24gZnJvbSBhY2Nlc3MgdHlwZSBhbmQgc2l6ZSAqL1xuJiM0MztcdHN3aXRjaCAoYnBmX3NpemUpIHtcbiYjNDM7XHRjYXNlIEJQRl9COlxuJiM0MztcdFx0a2FzYW5fZnVuYyA9IGlzX3dyaXRlID8gX19hc2FuX3N0b3JlMSA6IF9fYXNhbl9sb2FkMTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX0g6XG4mIzQzO1x0XHRrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmUyIDogX19hc2FuX2xvYWQyO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfVzpcbiYjNDM7XHRcdGthc2FuX2Z1bmMgPSBpc193cml0ZSA/IF9fYXNhbl9zdG9yZTQgOiBfX2FzYW5fbG9hZDQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9EVzpcbiYjNDM7XHRcdGthc2FuX2Z1bmMgPSBpc193cml0ZSA/IF9fYXNhbl9zdG9yZTggOiBfX2FzYW5fbG9hZDg7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTYXZlIHJheCAqL1xuJiM0MztcdEVNSVQxKDB4NTApO1xuJiM0MztcdC8qIFNhdmUgcmN4ICovXG4mIzQzO1x0RU1JVDEoMHg1MSk7XG4mIzQzO1x0LyogU2F2ZSByZHggKi9cbiYjNDM7XHRFTUlUMSgweDUyKTtcbiYjNDM7XHQvKiBTYXZlIHJzaSAqL1xuJiM0MztcdEVNSVQxKDB4NTYpO1xuJiM0MztcdC8qIFNhdmUgcmRpICovXG4mIzQzO1x0RU1JVDEoMHg1Nyk7XG4mIzQzO1x0LyogU2F2ZSByOCAqL1xuJiM0MztcdEVNSVQyKDB4NDEsIDB4NTApO1xuJiM0MztcdC8qIFNhdmUgcjkgKi9cbiYjNDM7XHRFTUlUMigweDQxLCAweDUxKTtcbiYjNDM7XG4mIzQzO1x0LyogbW92IHJkaSwgYWRkcl9yZWcgKi9cbiYjNDM7XHRFTUlUX21vdihCUEZfUkVHXzEsIGFkZHJfcmVnKTtcbiYjNDM7XG4mIzQzO1x0LyogYWRkIHJkaSwgb2ZmIChpZiBvZmZzZXQgaXMgbm9uLXplcm8pICovXG4mIzQzO1x0aWYgKG9mZikge1xuJiM0MztcdFx0aWYgKGlzX2ltbTgob2ZmKSkge1xuJiM0MztcdFx0XHQvKiBhZGQgcmRpLCBpbW04ICovXG4mIzQzO1x0XHRcdEVNSVQ0KDB4NDgsIDB4ODMsIDB4QzcsICh1OClvZmYpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0LyogYWRkIHJkaSwgaW1tMzIgKi9cbiYjNDM7XHRcdFx0RU1JVDNfb2ZmMzIoMHg0OCwgMHg4MSwgMHhDNywgb2ZmKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFkanVzdCBpcCB0byBhY2NvdW50IGZvciB0aGUgaW5zdHJ1bWVudGF0aW9uIGdlbmVyYXRlZCBzbyBmYXIgKi9cbiYjNDM7XHRpcCAmIzQzOz0gKHByb2cgLSAqcHByb2cpO1xuJiM0MztcdC8qIFdlIGVtaXQgYSBjYWxsLCBzbyB1cGRhdGUgY2FsbCBkZXB0aCBjb3VudGluZyAqL1xuJiM0MztcdGlwICYjNDM7PSB4ODZfY2FsbF9kZXB0aF9lbWl0X2FjY291bnRpbmcoXHUwMDI2cHJvZywga2FzYW5fZnVuYywgaXApO1xuJiM0MztcdC8qIGNhbGwga2FzYW5fZnVuYyAqL1xuJiM0MztcdGlmIChlbWl0X2NhbGwoXHUwMDI2cHJvZywga2FzYW5fZnVuYywgaXApKVxuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1xuJiM0MztcdEVNSVQyKDB4NDEsIDB4NTkpO1xuJiM0MztcdEVNSVQyKDB4NDEsIDB4NTgpO1xuJiM0MztcdEVNSVQxKDB4NUYpO1xuJiM0MztcdEVNSVQxKDB4NUUpO1xuJiM0MztcdEVNSVQxKDB4NUEpO1xuJiM0MztcdEVNSVQxKDB4NTkpO1xuJiM0MztcdEVNSVQxKDB4NTgpO1xuJiM0MztcbiYjNDM7XHQqcHByb2cgPSBwcm9nO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0JQRl9KSVRfS0FTQU4gKi9cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBMRFg6IGRzdF9yZWcgPSAqKHU4Kikoc3JjX3JlZyAmIzQzOyBvZmYpICovXG4gc3RhdGljIHZvaWQgZW1pdF9sZHgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZywgaW50IG9mZilcbiB7XG5AQCAtMTMxNSw2ICYjNDM7MTQxMCw2NCBAQCBzdGF0aWMgdm9pZCBlbWl0X3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIGluZGV4X3JlZywgaW50XG4gXHQqcHByb2cgPSBwcm9nO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9zdCh1OCAqKnBwcm9nLCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxuJiM0MztcdFx0ICAgIHMzMiBvdXRnb2luZ19hcmdfYmFzZSwgdTE2IG91dGdvaW5nX3JzcClcbiYjNDM7e1xuJiM0MztcdHMzMiBpbW0zMiA9IGluc24tXHUwMDNlaW1tO1xuJiM0MztcdHU4ICpwcm9nID0gKnBwcm9nO1xuJiM0MztcdHMzMiBpbnNuX29mZjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKSB7XG4mIzQzO1x0Y2FzZSBCUEZfQjpcbiYjNDM7XHRcdGlmIChpc19lcmVnKGRzdF9yZWcpKVxuJiM0MztcdFx0XHRFTUlUMigweDQxLCAweEM2KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0RU1JVDEoMHhDNik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9IOlxuJiM0MztcdFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXG4mIzQzO1x0XHRcdEVNSVQzKDB4NjYsIDB4NDEsIDB4QzcpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRFTUlUMigweDY2LCAweEM3KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX1c6XG4mIzQzO1x0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcbiYjNDM7XHRcdFx0RU1JVDIoMHg0MSwgMHhDNyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdEVNSVQxKDB4QzcpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfRFc6XG4mIzQzO1x0XHRpZiAoZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUyBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gLTgpIHtcbiYjNDM7XHRcdFx0LyogQXJnIDY6IHN0b3JlIGltbWVkaWF0ZSBpbiByOSByZWdpc3RlciAqL1xuJiM0MztcdFx0XHRlbWl0X21vdl9pbW02NChcdTAwMjZwcm9nLCBYODZfUkVHX1I5LCBpbW0zMiBcdTAwM2VcdTAwM2UgMzEsXG4mIzQzO1x0XHRcdFx0ICAgICAgICh1MzIpaW1tMzIpO1xuJiM0MztcdFx0XHQqcHByb2cgPSBwcm9nO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHhDNyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4mIzQzO1x0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBcmdzIDcmIzQzOzogcmV2ZXJzZSBCUEYgbmVnYXRpdmUgb2Zmc2V0cyB0b1xuJiM0MztcdFx0ICogeDg2IHBvc2l0aXZlIHJzcCBvZmZzZXRzLlxuJiM0MztcdFx0ICogQlBGIG9mZj0tMTYg4oaSIFtyc3AmIzQzOzBdLCBvZmY9LTI0IOKGkiBbcnNwJiM0Mzs4XSwgLi4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGluc25fb2ZmID0gb3V0Z29pbmdfYXJnX2Jhc2UgLSBvdXRnb2luZ19yc3AgLVxuJiM0MztcdFx0XHRpbnNuX29mZiAtIDE2O1xuJiM0MztcdFx0ZHN0X3JlZyA9IEJQRl9SRUdfRlA7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChpc19pbW04KGluc25fb2ZmKSlcbiYjNDM7XHRcdEVNSVQyKGFkZF8xcmVnKDB4NDAsIGRzdF9yZWcpLCBpbnNuX29mZik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0RU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHg4MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcbiYjNDM7XG4mIzQzO1x0RU1JVChpbW0zMiwgYnBmX3NpemVfdG9feDg2X2J5dGVzKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpKTtcbiYjNDM7XHQqcHByb2cgPSBwcm9nO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGVtaXRfc3RfcjEyKHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgaW50IG9mZiwgaW50IGltbSlcbiB7XG4gXHRlbWl0X3N0X2luZGV4KHBwcm9nLCBzaXplLCBkc3RfcmVnLCBYODZfUkVHX1IxMiwgb2ZmLCBpbW0pO1xuQEAgLTE0MjMsMTcgJiM0MzsxNTc2LDMxIEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfcm13X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3QodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIGRzdF9yZWcsXG4tXHRcdFx0ICAgICB1MzIgc3JjX3JlZywgczE2IG9mZiwgdTggYnBmX3NpemUpXG4mIzQzO3N0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTggKipwcHJvZyxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICppcCwgdTMyIGRzdF9yZWcsXG4mIzQzO1x0XHRcdCAgICAgdTMyIHNyY19yZWcsIGJvb2wgYWNjZXNzZXNfc3RhY2tfb25seSlcbiB7XG4mIzQzO1x0dTMyIGF0b21pY19vcCA9IGluc24tXHUwMDNlaW1tO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuIFx0c3dpdGNoIChhdG9taWNfb3ApIHtcbiBcdGNhc2UgQlBGX0xPQURfQUNROlxuJiM0MztcdFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIHBwcm9nLCBzcmNfcmVnLCBpbnNuLCBpcCwgZmFsc2UsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0LyogZHN0X3JlZyA9IHNtcF9sb2FkX2FjcXVpcmUoc3JjX3JlZyAmIzQzOyBvZmYxNikgKi9cbi1cdFx0ZW1pdF9sZHgocHByb2csIGJwZl9zaXplLCBkc3RfcmVnLCBzcmNfcmVnLCBvZmYpO1xuJiM0MztcdFx0ZW1pdF9sZHgocHByb2csIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksIGRzdF9yZWcsIHNyY19yZWcsXG4mIzQzO1x0XHRcdCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBCUEZfU1RPUkVfUkVMOlxuJiM0MztcdFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIHBwcm9nLCBkc3RfcmVnLCBpbnNuLCBpcCwgdHJ1ZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgYWNjZXNzZXNfc3RhY2tfb25seSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHQvKiBzbXBfc3RvcmVfcmVsZWFzZShkc3RfcmVnICYjNDM7IG9mZjE2LCBzcmNfcmVnKSAqL1xuLVx0XHRlbWl0X3N0eChwcHJvZywgYnBmX3NpemUsIGRzdF9yZWcsIHNyY19yZWcsIG9mZik7XG4mIzQzO1x0XHRlbWl0X3N0eChwcHJvZywgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSwgZHN0X3JlZywgc3JjX3JlZyxcbiYjNDM7XHRcdFx0IGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRwcl9lcnIoXCYjMzQ7YnBmX2ppdDogdW5rbm93biBhdG9taWMgbG9hZC9zdG9yZSBvcGNvZGUgJTAyeFxcblwmIzM0OyxcbkBAIC0xODExLDEwICYjNDM7MTk3OCwxMiBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKlxuIFx0XHRjb25zdCBzMzIgaW1tMzIgPSBpbnNuLVx1MDAzZWltbTtcbiBcdFx0dTMyIGRzdF9yZWcgPSBpbnNuLVx1MDAzZWRzdF9yZWc7XG4gXHRcdHUzMiBzcmNfcmVnID0gaW5zbi1cdTAwM2VzcmNfcmVnO1xuJiM0MztcdFx0Ym9vbCBhY2Nlc3Nlc19zdGFja19vbmx5O1xuIFx0XHR1OCBiMiA9IDAsIGIzID0gMDtcbiBcdFx0dTggKnN0YXJ0X29mX2xkeDtcbiBcdFx0czY0IGptcF9vZmZzZXQ7XG4gXHRcdHMzMiBpbnNuX29mZjtcbiYjNDM7XHRcdGludCBpbnNuX2lkeDtcbiBcdFx0dTggam1wX2NvbmQ7XG4gXHRcdHU4ICpmdW5jO1xuIFx0XHRpbnQgbm9wcztcbkBAIC0xODMxLDYgJiM0MzsyMDAwLDEwIEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqXG4gXHRcdFx0RU1JVF9FTkRCUigpO1xuIFxuIFx0XHRpcCA9IGltYWdlICYjNDM7IGFkZHJzW2kgLSAxXSAmIzQzOyAocHJvZyAtIHRlbXApO1xuJiM0MztcdFx0aW5zbl9pZHggPSBpIC0gMSAmIzQzOyBicGZfcHJvZy1cdTAwM2VhdXgtXHUwMDNlc3VicHJvZ19zdGFydDtcbiYjNDM7XHRcdGFjY2Vzc2VzX3N0YWNrX29ubHkgPVxuJiM0MztcdFx0XHRlbnYgPyAhZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLm5vbl9zdGFja19hY2Nlc3MgOlxuJiM0MztcdFx0XHQgICAgICBmYWxzZTtcbiBcbiBcdFx0c3dpdGNoIChpbnNuLVx1MDAzZWNvZGUpIHtcbiBcdFx0XHQvKiBBTFUgKi9cbkBAIC0yMjA3LDQ5ICYjNDM7MjM4MCwxNyBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKlxuIFx0XHRcdEVNSVRfTEZFTkNFKCk7XG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdFx0LyogU1Q6ICoodTgqKShkc3RfcmVnICYjNDM7IG9mZikgPSBpbW0gKi9cbiBcdFx0Y2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX0I6XG4tXHRcdFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXG4tXHRcdFx0XHRFTUlUMigweDQxLCAweEM2KTtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRFTUlUMSgweEM2KTtcbi1cdFx0XHRnb3RvIHN0O1xuIFx0XHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfSDpcbi1cdFx0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcbi1cdFx0XHRcdEVNSVQzKDB4NjYsIDB4NDEsIDB4QzcpO1xuLVx0XHRcdGVsc2Vcbi1cdFx0XHRcdEVNSVQyKDB4NjYsIDB4QzcpO1xuLVx0XHRcdGdvdG8gc3Q7XG4gXHRcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9XOlxuLVx0XHRcdGlmIChpc19lcmVnKGRzdF9yZWcpKVxuLVx0XHRcdFx0RU1JVDIoMHg0MSwgMHhDNyk7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0RU1JVDEoMHhDNyk7XG4tXHRcdFx0Z290byBzdDtcbiBcdFx0Y2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX0RXOlxuLVx0XHRcdGlmIChkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZW9mZiA9PSAtOCkge1xuLVx0XHRcdFx0LyogQXJnIDY6IHN0b3JlIGltbWVkaWF0ZSBpbiByOSByZWdpc3RlciAqL1xuLVx0XHRcdFx0ZW1pdF9tb3ZfaW1tNjQoXHUwMDI2cHJvZywgWDg2X1JFR19SOSwgaW1tMzIgXHUwMDNlXHUwMDNlIDMxLCAodTMyKWltbTMyKTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cdFx0XHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHhDNyk7XG4tXG4tc3Q6XHRcdFx0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbi1cdFx0XHRpZiAoZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUykge1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIEFyZ3MgNyYjNDM7OiByZXZlcnNlIEJQRiBuZWdhdGl2ZSBvZmZzZXRzIHRvXG4tXHRcdFx0XHQgKiB4ODYgcG9zaXRpdmUgcnNwIG9mZnNldHMuXG4tXHRcdFx0XHQgKiBCUEYgb2ZmPS0xNiDihpIgW3JzcCYjNDM7MF0sIG9mZj0tMjQg4oaSIFtyc3AmIzQzOzhdLCAuLi5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0aW5zbl9vZmYgPSBvdXRnb2luZ19hcmdfYmFzZSAtIG91dGdvaW5nX3JzcCAtIGluc25fb2ZmIC0gMTY7XG4tXHRcdFx0XHRkc3RfcmVnID0gQlBGX1JFR19GUDtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKGlzX2ltbTgoaW5zbl9vZmYpKVxuLVx0XHRcdFx0RU1JVDIoYWRkXzFyZWcoMHg0MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRFTUlUMV9vZmYzMihhZGRfMXJlZygweDgwLCBkc3RfcmVnKSwgaW5zbl9vZmYpO1xuJiM0MztcdFx0XHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXHUwMDI2cHJvZywgZHN0X3JlZywgaW5zbiwgaXAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgdHJ1ZSwgYWNjZXNzZXNfc3RhY2tfb25seSk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcbi1cdFx0XHRFTUlUKGltbTMyLCBicGZfc2l6ZV90b194ODZfYnl0ZXMoQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSkpO1xuJiM0MztcdFx0XHRlbWl0X3N0KFx1MDAyNnByb2csIGluc24sIGRzdF9yZWcsIG91dGdvaW5nX2FyZ19iYXNlLFxuJiM0MztcdFx0XHRcdG91dGdvaW5nX3JzcCk7XG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdFx0LyogU1RYOiAqKHU4KikoZHN0X3JlZyAmIzQzOyBvZmYpID0gc3JjX3JlZyAqL1xuQEAgLTIyNjcsNiAmIzQzOzI0MDgsMTAgQEAgc3Q6XHRcdFx0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbiBcdFx0XHRcdGluc25fb2ZmID0gb3V0Z29pbmdfYXJnX2Jhc2UgLSBvdXRnb2luZ19yc3AgLSBpbnNuX29mZiAtIDE2O1xuIFx0XHRcdFx0ZHN0X3JlZyA9IEJQRl9SRUdfRlA7XG4gXHRcdFx0fVxuJiM0MztcdFx0XHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXHUwMDI2cHJvZywgZHN0X3JlZywgaW5zbiwgaXAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgdHJ1ZSwgYWNjZXNzZXNfc3RhY2tfb25seSk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHRlbWl0X3N0eChcdTAwMjZwcm9nLCBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLCBpbnNuX29mZik7XG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMjQyOCw2ICYjNDM7MjU3MywxMiBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0LyogcG9wdWxhdGUgam1wX29mZnNldCBmb3IgSkFFIGFib3ZlIHRvIGp1bXAgdG8gc3RhcnRfb2ZfbGR4ICovXG4gXHRcdFx0XHRzdGFydF9vZl9sZHggPSBwcm9nO1xuIFx0XHRcdFx0ZW5kX29mX2ptcFstMV0gPSBzdGFydF9vZl9sZHggLSBlbmRfb2Zfam1wO1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBcdTAwMjZwcm9nLCBzcmNfcmVnLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgaW5zbiwgaXAsIGZhbHNlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgYWNjZXNzZXNfc3RhY2tfb25seSk7XG4mIzQzO1x0XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU1TWCB8fFxuIFx0XHRcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU1TWClcbkBAIC0yNDg5LDE1ICYjNDM7MjY0MCwxNiBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdH1cbiBcdFx0XHRmYWxsdGhyb3VnaDtcbiBcdFx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XOlxuLVx0XHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOlxuLVx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSAoQlBGX0FORCB8IEJQRl9GRVRDSCkgfHxcbi1cdFx0XHQgICAgaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9PUiB8IEJQRl9GRVRDSCkgfHxcbi1cdFx0XHQgICAgaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9YT1IgfCBCUEZfRkVUQ0gpKSB7XG4tXHRcdFx0XHRib29sIGlzNjQgPSBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVztcbi1cdFx0XHRcdHUzMiByZWFsX3NyY19yZWcgPSBzcmNfcmVnO1xuLVx0XHRcdFx0dTMyIHJlYWxfZHN0X3JlZyA9IGRzdF9yZWc7XG4tXHRcdFx0XHR1OCAqYnJhbmNoX3RhcmdldDtcbi1cbiYjNDM7XHRcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6IHtcbiYjNDM7XHRcdFx0Ym9vbCBpczY0ID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFc7XG4mIzQzO1x0XHRcdHUzMiByZWFsX3NyY19yZWcgPSBzcmNfcmVnO1xuJiM0MztcdFx0XHR1MzIgcmVhbF9kc3RfcmVnID0gZHN0X3JlZztcbiYjNDM7XHRcdFx0dTggKmJyYW5jaF90YXJnZXQ7XG4mIzQzO1x0XHRcdGJvb2wgaXNfYXRvbWljX2ZldGNoID1cbiYjNDM7XHRcdFx0XHQoaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9BTkQgfCBCUEZfRkVUQ0gpIHx8XG4mIzQzO1x0XHRcdFx0IGluc24tXHUwMDNlaW1tID09IChCUEZfT1IgfCBCUEZfRkVUQ0gpIHx8XG4mIzQzO1x0XHRcdFx0IGluc24tXHUwMDNlaW1tID09IChCUEZfWE9SIHwgQlBGX0ZFVENIKSk7XG4mIzQzO1x0XHRcdGlmIChpc19hdG9taWNfZmV0Y2gpIHtcbiBcdFx0XHRcdC8qXG4gXHRcdFx0XHQgKiBDYW4mIzM5O3QgYmUgaW1wbGVtZW50ZWQgd2l0aCBhIHNpbmdsZSB4ODYgaW5zbi5cbiBcdFx0XHRcdCAqIE5lZWQgdG8gZG8gYSBDTVBYQ0hHIGxvb3AuXG5AQCAtMjUxMCw3ICYjNDM7MjY2MiwxNyBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR18wKVxuIFx0XHRcdFx0XHRyZWFsX2RzdF9yZWcgPSBCUEZfUkVHX0FYO1xuIFxuJiM0MztcdFx0XHRcdGlwICYjNDM7PSAzO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmICghYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKSB7XG4mIzQzO1x0XHRcdFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIFx1MDAyNnByb2csIHJlYWxfZHN0X3JlZyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGluc24sIGlwLCBmYWxzZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xuJiM0MztcdFx0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdFx0YnJhbmNoX3RhcmdldCA9IHByb2c7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKGlzX2F0b21pY19mZXRjaCkge1xuIFx0XHRcdFx0LyogTG9hZCBvbGQgdmFsdWUgKi9cbiBcdFx0XHRcdGVtaXRfbGR4KFx1MDAyNnByb2csIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksXG4gXHRcdFx0XHRcdCBCUEZfUkVHXzAsIHJlYWxfZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuQEAgLTI1NDIsMTUgJiM0MzsyNzA0LDE2IEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChicGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoaW5zbikpXG4tXHRcdFx0XHRlcnIgPSBlbWl0X2F0b21pY19sZF9zdChcdTAwMjZwcm9nLCBpbnNuLVx1MDAzZWltbSwgZHN0X3JlZywgc3JjX3JlZyxcbi1cdFx0XHRcdFx0XHRcdGluc24tXHUwMDNlb2ZmLCBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBlbWl0X2F0b21pY19sZF9zdChlbnYsIFx1MDAyNnByb2csIGluc24sIGlwLFxuJiM0MztcdFx0XHRcdFx0XHRcdGRzdF9yZWcsIHNyY19yZWcsXG4mIzQzO1x0XHRcdFx0XHRcdFx0YWNjZXNzZXNfc3RhY2tfb25seSk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gZW1pdF9hdG9taWNfcm13KFx1MDAyNnByb2csIGluc24tXHUwMDNlaW1tLCBkc3RfcmVnLCBzcmNfcmVnLFxuIFx0XHRcdFx0XHRcdCAgICAgIGluc24tXHUwMDNlb2ZmLCBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHRicmVhaztcbi1cbiYjNDM7XHRcdH1cbiBcdFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9COlxuIFx0XHRjYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfQVRPTUlDIHwgQlBGX0g6XG4gXHRcdFx0aWYgKCFicGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoaW5zbikpIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggNzZiOGI3NjI3YTEwODUuLjg2ODEwMWVmNTAwMmFiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTcyMyw2ICYjNDM7NzIzLDggQEAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhIHtcbiBcdHUxNiBjb25zdF9yZWdfbWFwX21hc2s7XG4gXHR1MTYgY29uc3RfcmVnX3N1YnByb2dfbWFzaztcbiBcdHUzMiBjb25zdF9yZWdfdmFsc1sxMF07XG4mIzQzO1x0LyogaW5zdHJ1Y3Rpb24gY2FuIGFjY2VzcyBub24tc3RhY2sgbWVtb3J5ICovXG4mIzQzO1x0Ym9vbCBub25fc3RhY2tfYWNjZXNzO1xuIH07XG4gXG4gI2RlZmluZSBNQVhfVVNFRF9NQVBTIDY0IC8qIG1heCBudW1iZXIgb2YgbWFwcyBhY2Nlc3NlZCBieSBvbmUgZUJQRiBwcm9ncmFtICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDE0YWNiMjQ1NTc0NmZjLi4xZWJjZDI0N2VmNGUzZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0xMjEwLDEzICYjNDM7MTIxMCwxNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKTtcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4sXG4mIzQzO1x0XHRcdFx0ICAgICBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIHZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXgpO1xuICNlbHNlXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbi1cdFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuJiM0MztcdFx0XHRcdFx0XHQgICB1MzIgb2ZmLFxuJiM0MztcdFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLFxuJiM0MztcdFx0XHRcdFx0XHQgICB1MzIgbGVuLFxuJiM0MztcdFx0XHRcdFx0XHQgICBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpXG4ge1xuIFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9LY29uZmlnIGIva2VybmVsL2JwZi9LY29uZmlnXG5pbmRleCBlYjNkZTM1NzM0ZjA5Mi4uZTFmMzg1MGQyZjVhMDcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvS2NvbmZpZ1xuQEAgLTE3LDYgJiM0MzsxNywxMCBAQCBjb25maWcgSEFWRV9DQlBGX0pJVFxuIGNvbmZpZyBIQVZFX0VCUEZfSklUXG4gXHRib29sXG4gXG4mIzQzOyMgS0FTQU4gc3VwcG9ydCBmb3IgSklUIGNvbXBpbGVyXG4mIzQzO2NvbmZpZyBIQVZFX0VCUEZfSklUX0tBU0FOXG4mIzQzO1x0Ym9vbFxuJiM0MztcbiAjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XG4gIyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cbiBjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxuQEAgLTEwMSw0ICYjNDM7MTA1LDE3IEBAIGNvbmZpZyBCUEZfTFNNXG4gXG4gXHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gXG4mIzQzO2NvbmZpZyBCUEZfSklUX0tBU0FOXG4mIzQzO1x0Ym9vbFxuJiM0MztcdGRlcGVuZHMgb24gSEFWRV9FQlBGX0pJVF9LQVNBTlxuJiM0MztcdGRlcGVuZHMgb24gS0FTQU5fR0VORVJJQ1xuJiM0MztcdGRlcGVuZHMgb24gS0FTQU5fVk1BTExPQ1xuJiM0MztcdGRlcGVuZHMgb24gQlBGX0pJVFxuJiM0MztcdGRlZmF1bHQgeSBpZiBLQVNBTlxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIE1ha2VzIEpJVCBjb21waWxlciBpbnNlcnQgZ2VuZXJpYyBvdXRsaW5lIEtBU0FOIGNoZWNrcyBpbiBCUEZcbiYjNDM7XHQgIHByb2dyYW1zIHdoZW4gdGhleSBhcmUgaW5zZXJ0ZWQgaW4gdGhlIGtlcm5lbC4gVGhpcyBmZWF0dXJlIGlzXG4mIzQzO1x0ICBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgdGhlIG5lZWRlZCBzZXQgb2YgS0FTQU4gYW5kIEJQRlxuJiM0MztcdCAgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGVuYWJsZWQuXG4mIzQzO1xuIGVuZG1lbnUgIyBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xuaW5kZXggNmUxOWEwMzBkYTZmMTMuLjFlMThiOTk5ZjFiNTY1IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY29yZS5jXG5AQCAtMTU5OCw3ICYjNDM7MTU5OCw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChlbnYpXG4tXHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcbiYjNDM7XHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuLCByZXdyaXR0ZW4gLSAxKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShjbG9uZSwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCAxMmE4YTRlYjc1N2YxOC4uZmVlZTFmMzNkZTlkNTUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtMTUyLDEyICYjNDM7MTUyLDI1IEBAIHN0YXRpYyBpbnQgZ2V0X2NhbGxlZV9zdGFja19kZXB0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7c3RhdGljIGJvb2wgaXNfbWVtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9TVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1NUWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX0xEWClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gfHxcbiYjNDM7XHRcdEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTVNYIHx8XG4mIzQzO1x0XHRCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIHNpbmdsZSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuaVtvZmZdIGluc3RydWN0aW9uIHdhcyByZXBsYWNlZCB3aXRoIHRoZSByYW5nZVxuICAqIGluc25pW29mZiwgb2ZmICYjNDM7IGNudCkuICBBZGp1c3QgY29ycmVzcG9uZGluZyBpbnNuX2F1eF9kYXRhIGJ5IGNvcHlpbmdcbiAgKiBbMCwgb2ZmKSBhbmQgW29mZiwgZW5kKSB0byBuZXcgbG9jYXRpb25zLCBzbyB0aGUgcGF0Y2hlZCByYW5nZSBzdGF5cyB6ZXJvXG4gICovXG4gc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHRcdCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLCB1MzIgb2ZmLCB1MzIgY250KVxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLCB1MzIgb2ZmLCB1MzIgY250LFxuJiM0MztcdFx0XHRcdCBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpXG4ge1xuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpkYXRhID0gZW52LVx1MDAzZWluc25fYXV4X2RhdGE7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBuZXdfcHJvZy1cdTAwM2VpbnNuc2k7XG5AQCAtMTcxLDggJiM0MzsxODQsMTQgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdCAqL1xuIFx0ZGF0YVtvZmZdLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSk7XG4gXG4tXHRpZiAoY250ID09IDEpXG4mIzQzO1x0aWYgKGNudCA9PSAxKSB7XG4mIzQzO1x0XHQvKiBBIG5vbi1tZW1vcnkgYWNjZXNzaW5nIGluc24gY291bGQgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGFcbiYjNDM7XHRcdCAqIG1lbW9yeSBhY2Nlc3NpbmcgaW5zbiwgc3lzdGVtYXRpY2FsbHkgbWFyayBpdCBmb3Igbm9uLXN0YWNrXG4mIzQzO1x0XHQgKiBhY2Nlc3NcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGF0YVtvZmZdLm5vbl9zdGFja19hY2Nlc3MgPSBpc19tZW1faW5zbihpbnNuKTtcbiBcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcdHByb2dfbGVuID0gbmV3X3Byb2ctXHUwMDNlbGVuO1xuIFxuIFx0bWVtbW92ZShkYXRhICYjNDM7IG9mZiAmIzQzOyBjbnQgLSAxLCBkYXRhICYjNDM7IG9mZixcbkBAIC0xODIsNyAmIzQzOzIwMSwxOSBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHQvKiBFeHBhbmQgaW5zbmlbb2ZmXSYjMzk7cyBzZWVuIGNvdW50IHRvIHRoZSBwYXRjaGVkIHJhbmdlLiAqL1xuIFx0XHRkYXRhW2ldLnNlZW4gPSBvbGRfc2VlbjtcbiBcdFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGluc25faGFzX2RlZjMyKGluc24gJiM0MzsgaSk7XG4mIzQzO1x0XHRpZiAoaSA9PSBvZmYgJiM0MzsgaW5zbl9vZmZfaW5fcGF0Y2gpIHtcbiYjNDM7XHRcdFx0ZGF0YVtpXS5ub25fc3RhY2tfYWNjZXNzID0gZGF0YVtvZmYgJiM0MzsgY250IC0gMV0ubm9uX3N0YWNrX2FjY2VzcztcbiYjNDM7XHRcdFx0ZGF0YVtvZmYgJiM0MzsgY250IC0gMV0ubm9uX3N0YWNrX2FjY2VzcyA9IGZhbHNlO1xuJiM0MztcdFx0fSBlbHNlIGlmIChpc19tZW1faW5zbihpbnNuICYjNDM7IGkpKSB7XG4mIzQzO1x0XHRcdGRhdGFbaV0ubm9uX3N0YWNrX2FjY2VzcyA9IHRydWU7XG4mIzQzO1x0XHR9XG4gXHR9XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBMYXN0IHNsb3QgaW5zdHJ1Y3Rpb24gY291bGQgYmUgYSBuZXdseSBnZW5lcmF0ZWRcbiYjNDM7XHQgKiBCUEZfU1QvQlBGX0xEWC9CUEZfU1RYXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlzX21lbV9pbnNuKGluc24gJiM0Mzsgb2ZmICYjNDM7IGNudCAtIDEpIFx1MDAyNlx1MDAyNiBpbnNuX29mZl9pbl9wYXRjaCAhPSBjbnQgLSAxKVxuJiM0MztcdFx0ZGF0YVtvZmYgJiM0MzsgY250IC0gMV0ubm9uX3N0YWNrX2FjY2VzcyA9IHRydWU7XG4gXG4gXHQvKlxuIFx0ICogVGhlIGluZGlyZWN0X3RhcmdldCBmbGFnIG9mIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiB3YXMgbW92ZWQgdG8gdGhlIGxhc3Qgb2YgdGhlXG5AQCAtMjQ1LDcgJiM0MzsyNzYsOCBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfcG9rZV9kZXNjcyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsIHUzMiBsZW4pXG4gfVxuIFxuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxuJiM0MztcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbixcbiYjNDM7XHRcdFx0XHQgICAgIHMzMiBpbnNuX29mZl9pbl9wYXRjaClcbiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nO1xuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpuZXdfZGF0YSA9IE5VTEw7XG5AQCAtMjY5LDcgJiM0MzszMDEsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbiBcdFx0XHRcdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW29mZl0ub3JpZ19pZHgpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbi1cdGFkanVzdF9pbnNuX2F1eF9kYXRhKGVudiwgbmV3X3Byb2csIG9mZiwgbGVuKTtcbiYjNDM7XHRhZGp1c3RfaW5zbl9hdXhfZGF0YShlbnYsIG5ld19wcm9nLCBvZmYsIGxlbiwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuIFx0YWRqdXN0X3N1YnByb2dfc3RhcnRzKGVudiwgb2ZmLCBsZW4pO1xuIFx0YWRqdXN0X2luc25fYXJyYXlzKGVudiwgb2ZmLCBsZW4pO1xuIFx0YWRqdXN0X3Bva2VfZGVzY3MobmV3X3Byb2csIG9mZiwgbGVuKTtcbkBAIC02NjgsNyAmIzQzOzcwMCw3IEBAIGludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0cGF0Y2ggPSB6ZXh0X3BhdGNoO1xuIFx0XHRwYXRjaF9sZW4gPSAyO1xuIGFwcGx5X3BhdGNoX2J1ZmZlcjpcbi1cdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgYWRqX2lkeCwgcGF0Y2gsIHBhdGNoX2xlbik7XG4mIzQzO1x0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBhZGpfaWR4LCBwYXRjaCwgcGF0Y2hfbGVuLCAwKTtcbiBcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0ZW52LVx1MDAzZXByb2cgPSBuZXdfcHJvZztcbkBAIC03MTMsNyAmIzQzOzc0NSw3IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZltjbnQmIzQzOyYjNDM7XSA9IEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR18xLFxuIFx0XHRcdFx0XHRcdCAgICAgIC1zdWJwcm9nc1swXS5zdGFja19kZXB0aCk7XG4gXHRcdFx0aW5zbl9idWZbY250JiM0MzsmIzQzO10gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2lbMF07XG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQsIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0XHRlbnYtXHUwMDNlcHJvZyA9IG5ld19wcm9nO1xuQEAgLTczNiw3ICYjNDM7NzY4LDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O3Byb2xvZ3VlIGlzIHRvbyBsb25nXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdFx0fSBlbHNlIGlmIChjbnQpIHtcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC03NTksNiAmIzQzOzc5Miw3IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHtcbiBcdFx0YnBmX2NvbnZlcnRfY3R4X2FjY2Vzc190IGNvbnZlcnRfY3R4X2FjY2VzcztcbiYjNDM7XHRcdHMzMiBpbnNuX29mZl9pbl9wYXRjaCA9IC0xO1xuIFx0XHR1OCBtb2RlO1xuIFxuIFx0XHRpZiAoZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaSAmIzQzOyBkZWx0YV0ubm9zcGVjKSB7XG5AQCAtNzY4LDcgJiM0Mzs4MDIsOCBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9TVF9OT1NQRUMoKTtcbiBcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247XG4gXHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1Zjtcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC04NDEsNyAmIzQzOzg3Niw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247XG4gXHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9TVF9OT1NQRUMoKTtcbiBcdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMCk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTg1NiwxNiAmIzQzOzg5MiwyMCBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aWYgKCFvcHMtXHUwMDNlY29udmVydF9jdHhfYWNjZXNzKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0Y29udmVydF9jdHhfYWNjZXNzID0gb3BzLVx1MDAzZWNvbnZlcnRfY3R4X2FjY2VzcztcbiYjNDM7XHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFBUUl9UT19TT0NLRVQ6XG4gXHRcdGNhc2UgUFRSX1RPX1NPQ0tfQ09NTU9OOlxuIFx0XHRcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl9zb2NrX2NvbnZlcnRfY3R4X2FjY2VzcztcbiYjNDM7XHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFBUUl9UT19UQ1BfU09DSzpcbiBcdFx0XHRjb252ZXJ0X2N0eF9hY2Nlc3MgPSBicGZfdGNwX3NvY2tfY29udmVydF9jdHhfYWNjZXNzO1xuJiM0MztcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IDA7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgUFRSX1RPX1hEUF9TT0NLOlxuIFx0XHRcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl94ZHBfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3M7XG4mIzQzO1x0XHRcdGluc25fb2ZmX2luX3BhdGNoID0gMDtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBQVFJfVE9fQlRGX0lEOlxuIFx0XHRjYXNlIFBUUl9UT19CVEZfSUQgfCBQVFJfVU5UUlVTVEVEOlxuQEAgLTk3MSw3ICYjNDM7MTAxMSw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdFx0XHQgICAgICAgc2l6ZSAqIDgsIDApO1xuIFxuIHBhdGNoX2luc25fYnVmOlxuLVx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuIFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE0NjQsNyAmIzQzOzE1MDUsNyBAQCBzdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdFxuIFx0ICogb25lcyBmb3IgdGhlIGhpZGRlbiBzdWJwcm9nLiBIZW5jZSBhbGwgb2YgdGhlIGFkanVzdG1lbnQgb3BlcmF0aW9uc1xuIFx0ICogaW4gYnBmX3BhdGNoX2luc25fZGF0YSBhcmUgbm8tb3BzLlxuIFx0ICovXG4tXHRwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbiAtIDEsIHBhdGNoLCBsZW4pO1xuJiM0MztcdHByb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuIC0gMSwgcGF0Y2gsIGxlbiwgLTEpO1xuIFx0aWYgKCFwcm9nKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbkBAIC0xNTQ5LDcgJiM0MzsxNTkwLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFxuIFx0XHRcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCAwKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTU2OSw2ICYjNDM7MTYxMSw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRib29sIGlzX3NkaXYgPSBpc2RpdiBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gMTtcbiBcdFx0XHRib29sIGlzX3Ntb2QgPSAhaXNkaXYgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmID09IDE7XG4gXHRcdFx0c3RydWN0IGJwZl9pbnNuICpwYXRjaCA9IGluc25fYnVmO1xuJiM0MztcdFx0XHRzMzIgaW5zbl9vZmZfaW5fcGF0Y2g7XG4gXG4gXHRcdFx0aWYgKGlzX3NkaXYpIHtcbiBcdFx0XHRcdC8qIFtSLFddeCBzZGl2IDAgLVx1MDAzZSAwXG5AQCAtMTU5NSw2ICYjNDM7MTYzOCw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xuIFx0XHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9ICppbnNuO1xuIFx0XHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiYjNDM7XHRcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IGNudCAtIDE7XG4gXHRcdFx0fSBlbHNlIGlmIChpc19zbW9kKSB7XG4gXHRcdFx0XHQvKiBbUixXXXggbW9kIDAgLVx1MDAzZSBbUixXXXggKi9cbiBcdFx0XHRcdC8qIFtSLFddeCBtb2QgLTEgLVx1MDAzZSAwICovXG5AQCAtMTYxMSw2ICYjNDM7MTY1NSw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfTU9WMzJfSU1NKGluc24tXHUwMDNlZHN0X3JlZywgMCk7XG4gXHRcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbiBcdFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSAqaW5zbjtcbiYjNDM7XHRcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IHBhdGNoIC0gaW5zbl9idWYgLSAxO1xuIFxuIFx0XHRcdFx0aWYgKCFpczY0KSB7XG4gXHRcdFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xuQEAgLTE2MjYsMTIgJiM0MzsxNjcxLDE0IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xuIFx0XHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9ICppbnNuO1xuIFx0XHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiYjNDM7XHRcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IGNudCAtIDE7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdC8qIFtSLFddeCBtb2QgMCAtXHUwMDNlIFtSLFddeCAqL1xuIFx0XHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9SQVdfSU5TTigoaXM2NCA/IEJQRl9KTVAgOiBCUEZfSk1QMzIpIHxcbiBcdFx0XHRcdFx0XHRcdEJQRl9KRVEgfCBCUEZfSywgaW5zbi1cdTAwM2VzcmNfcmVnLFxuIFx0XHRcdFx0XHRcdFx0MCwgMSAmIzQzOyAoaXM2NCA/IDAgOiAxKSwgMCk7XG4gXHRcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247XG4mIzQzO1x0XHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSBwYXRjaCAtIGluc25fYnVmIC0gMTtcbiBcbiBcdFx0XHRcdGlmICghaXM2NCkge1xuIFx0XHRcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbkBAIC0xNjQwLDcgJiM0MzsxNjg3LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCBpbnNuX29mZl9pbl9wYXRjaCk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE2NTYsNiAmIzQzOzE3MDQsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdCAgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1gpKSB7XG4gXHRcdFx0c3RydWN0IGJwZl9pbnNuICpwYXRjaCA9IGluc25fYnVmO1xuIFx0XHRcdHU2NCB1YWRkcmVzc19saW1pdCA9IGJwZl9hcmNoX3VhZGRyZXNzX2xpbWl0KCk7XG4mIzQzO1x0XHRcdHMzMiBpbnNuX29mZl9pbl9wYXRjaDtcbiBcbiBcdFx0XHRpZiAoIXVhZGRyZXNzX2xpbWl0KVxuIFx0XHRcdFx0Z290byBuZXh0X2luc247XG5AQCAtMTY2NiwxMSAmIzQzOzE3MTUsMTMgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9SU0gsIEJQRl9SRUdfQVgsIDMyKTtcbiBcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pMRSwgQlBGX1JFR19BWCwgdWFkZHJlc3NfbGltaXQgXHUwMDNlXHUwMDNlIDMyLCAyKTtcbiBcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247XG4mIzQzO1x0XHRcdGluc25fb2ZmX2luX3BhdGNoID0gcGF0Y2ggLSBpbnNuX2J1ZiAtIDE7XG4gXHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XG4gXHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9NT1Y2NF9JTU0oaW5zbi1cdTAwM2Vkc3RfcmVnLCAwKTtcbiBcbiBcdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xNjkwLDcgJiM0MzsxNzQxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMCk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE3NDMsNyAmIzQzOzE3OTUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfTVVMLCBvZmZfcmVnLCAtMSk7XG4gXHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTc4OCw3ICYjNDM7MTg0MSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1Zls2XSA9IEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR18xMCwgQlBGX1JFR19BWCwgc3RhY2tfb2ZmX2NudCk7XG4gXHRcdFx0Y250ID0gNztcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIDMpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xODA5LDcgJiM0MzsxODYzLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGluc25fYnVmWzNdID0gQlBGX1NUWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEwLCBCUEZfUkVHX0FYLCBzdGFja19vZmYpO1xuIFx0XHRcdGNudCA9IDQ7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCAyKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTgzMCw3ICYjNDM7MTg4NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpZiAoY250ID09IDApXG4gXHRcdFx0XHRnb3RvIG5leHRfaW5zbjtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xOTE1LDcgJiM0MzsxOTcxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0XHRcdFx0XHQgbWFwKS1cdTAwM2VpbmRleF9tYXNrKTtcbiBcdFx0XHRpbnNuX2J1ZlsyXSA9ICppbnNuO1xuIFx0XHRcdGNudCA9IDM7XG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTk0OCw3ICYjNDM7MjAwNSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlsyXSA9ICppbnNuO1xuIFx0XHRcdGNudCA9IDM7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTk2Nyw3ICYjNDM7MjAyNSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlsxXSA9ICppbnNuO1xuIFx0XHRcdGNudCA9IDI7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjAwNyw4ICYjNDM7MjA2Niw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdFx0XHR9XG4gXG4tXHRcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLFxuLVx0XHRcdFx0XHRcdFx0ICAgICAgIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShcbiYjNDM7XHRcdFx0XHRcdGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCwgLTEpO1xuIFx0XHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjA5MSw3ICYjNDM7MjE1MCw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRjbnQgPSAzO1xuIFxuIFx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuLVx0XHRcdFx0XHRcdCAgICAgICBjbnQpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTIxMTksNyAmIzQzOzIxNzgsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbMF0gPSBCUEZfQUxVMzJfUkVHKEJQRl9YT1IsIEJQRl9SRUdfMCwgQlBGX1JFR18wKTtcbiBcdFx0XHRjbnQgPSAxO1xuICNlbmRpZlxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMTM3LDcgJiM0MzsyMTk3LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGluc25fYnVmWzJdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG4gXHRcdFx0Y250ID0gMztcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjE3MSw3ICYjNDM7MjIzMiw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZltjbnQmIzQzOyYjNDM7XSA9IEJQRl9KTVBfQSgxKTtcbiBcdFx0XHRpbnNuX2J1ZltjbnQmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjIwMyw3ICYjNDM7MjI2NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdGNudCA9IDE7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMjI5LDcgJiM0MzsyMjkyLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0Y250ID0gMjtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTIyNDUsNyAmIzQzOzIzMDksOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0LyogTG9hZCBJUCBhZGRyZXNzIGZyb20gY3R4IC0gMTYgKi9cbiBcdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIC0xNik7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIDEpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIDEsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjMwMCw3ICYjNDM7MjM2NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlsxMF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUVOT0VOVCk7XG4gXHRcdFx0Y250ID0gMTE7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTIzMTgsNyAmIzQzOzIzODQsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfQVRPTUlDX09QKEJQRl9EVywgQlBGX1hDSEcsIEJQRl9SRUdfMSwgQlBGX1JFR18wLCAwKTtcbiBcdFx0XHRjbnQgPSAyO1xuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMzg2LDcgJiM0MzsyNDUzLDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHQvKiBDb3B5IGZpcnN0IGFjdHVhbCBpbnNuIHRvIHByZXNlcnZlIGl0ICovXG4gXHRcdGluc25fYnVmW2NudCYjNDM7JiM0MztdID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpW3N1YnByb2dfc3RhcnRdO1xuIFxuLVx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBzdWJwcm9nX3N0YXJ0LCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHN1YnByb2dfc3RhcnQsIGluc25fYnVmLCBjbnQsIGNudCAtIDEpO1xuIFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRlbnYtXHUwMDNlcHJvZyA9IHByb2cgPSBuZXdfcHJvZztcbkBAIC0yNDg1LDcgJiM0MzsyNTUyLDcgQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZyAqaW5saW5lX2JwZl9sb29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpbnNuX2J1ZltjbnQmIzQzOyYjNDM7XSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR184LCBCUEZfUkVHXzEwLCByOF9vZmZzZXQpO1xuIFxuIFx0KnRvdGFsX2NudCA9IGNudDtcbi1cdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHBvc2l0aW9uLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBwb3NpdGlvbiwgaW5zbl9idWYsIGNudCwgLTEpO1xuIFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0cmV0dXJuIG5ld19wcm9nO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNTFmNzk2NWQ0MmUzMjQuLjEyNDZjZThmNWYwZjQ2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0zMTQ0LDYgJiM0MzszMTQ0LDExIEBAIHN0YXRpYyB2b2lkIG1hcmtfaW5kaXJlY3RfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgpXG4gXHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpZHhdLmluZGlyZWN0X3RhcmdldCA9IHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBtYXJrX25vbl9zdGFja19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeClcbiYjNDM7e1xuJiM0MztcdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2lkeF0ubm9uX3N0YWNrX2FjY2VzcyA9IHRydWU7XG4mIzQzO31cbiYjNDM7XG4gI2RlZmluZSBMUl9GUkFNRU5PX0JJVFNcdDRcbiAjZGVmaW5lIExSX1NQSV9CSVRTXHQ2XG4gI2RlZmluZSBMUl9FTlRSWV9CSVRTXHQoTFJfU1BJX0JJVFMgJiM0MzsgTFJfRlJBTUVOT19CSVRTICYjNDM7IDEpXG5AQCAtNjMzMyw2ICYjNDM7NjMzOCwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxuIFx0XHRlbHNlXG4gXHRcdFx0Y29lcmNlX3JlZ190b19zaXplX3N4KFx1MDAyNnJlZ3NbdmFsdWVfcmVnbm9dLCBzaXplKTtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19TVEFDSylcbiYjNDM7XHRcdG1hcmtfbm9uX3N0YWNrX2FjY2VzcyhlbnYsIGluc25faWR4KTtcbiYjNDM7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaW5zbl9hcnJheS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuY1xuaW5kZXggMDIyMmE5YTVkMDc2MTQuLjM3YzQwNWZjMmIwZDIzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuY1xuQEAgLTIyNyw0MiAmIzQzOzIyNyw2IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2luY29ycmVjdF9pbmRleCh2b2lkKVxuIFx0Y2hlY2tfbWlkX2luc25faW5kZXgoKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZXRfYnBmX2ppdF9oYXJkZW4oY2hhciAqbGV2ZWwpXG4te1xuLVx0Y2hhciBvbGRfbGV2ZWw7XG4tXHRpbnQgZXJyID0gLTE7XG4tXHRpbnQgZmQgPSAtMTtcbi1cbi1cdGZkID0gb3BlbihcJiMzNDsvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW5cJiMzNDssIE9fUkRXUiB8IE9fTk9OQkxPQ0spO1xuLVx0aWYgKGZkIFx1MDAzYyAwKSB7XG4tXHRcdEFTU0VSVF9GQUlMKFwmIzM0O29wZW4gLi4uL2JwZl9qaXRfaGFyZGVuIHJldHVybmVkICVkIChlcnJubz0lZClcJiMzNDssIGZkLCBlcnJubyk7XG4tXHRcdHJldHVybiAtMTtcbi1cdH1cbi1cbi1cdGVyciA9IHJlYWQoZmQsIFx1MDAyNm9sZF9sZXZlbCwgMSk7XG4tXHRpZiAoZXJyICE9IDEpIHtcbi1cdFx0QVNTRVJUX0ZBSUwoXCYjMzQ7cmVhZCBmcm9tIC4uLi9icGZfaml0X2hhcmRlbiByZXR1cm5lZCAlZCAoZXJybm89JWQpXCYjMzQ7LCBlcnIsIGVycm5vKTtcbi1cdFx0ZXJyID0gLTE7XG4tXHRcdGdvdG8gZW5kO1xuLVx0fVxuLVxuLVx0bHNlZWsoZmQsIDAsIFNFRUtfU0VUKTtcbi1cbi1cdGVyciA9IHdyaXRlKGZkLCBsZXZlbCwgMSk7XG4tXHRpZiAoZXJyICE9IDEpIHtcbi1cdFx0QVNTRVJUX0ZBSUwoXCYjMzQ7d3JpdGUgdG8gLi4uL2JwZl9qaXRfaGFyZGVuIHJldHVybmVkICVkIChlcnJubz0lZClcJiMzNDssIGVyciwgZXJybm8pO1xuLVx0XHRlcnIgPSAtMTtcbi1cdFx0Z290byBlbmQ7XG4tXHR9XG4tXG4tXHRlcnIgPSAwO1xuLVx0KmxldmVsID0gb2xkX2xldmVsO1xuLWVuZDpcbi1cdGlmIChmZCBcdTAwM2U9IDApXG4tXHRcdGNsb3NlKGZkKTtcbi1cdHJldHVybiBlcnI7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIGNoZWNrX2JsaW5kbmVzcyh2b2lkKVxuIHtcbiBcdHN0cnVjdCBicGZfaW5zbiBpbnNuc1tdID0ge1xuQEAgLTI3Miw3ICYjNDM7MjM2LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tfYmxpbmRuZXNzKHZvaWQpXG4gXHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcbiBcdFx0QlBGX0VYSVRfSU5TTigpLFxuIFx0fTtcbi1cdGludCBwcm9nX2ZkID0gLTEsIG1hcF9mZDtcbiYjNDM7XHRpbnQgcHJvZ19mZCA9IC0xLCBtYXBfZmQsIHJldDtcbiBcdHN0cnVjdCBicGZfaW5zbl9hcnJheV92YWx1ZSB2YWwgPSB7fTtcbiBcdGNoYXIgYnBmX2ppdF9oYXJkZW4gPSAmIzM5O0AmIzM5OzsgLyogbm9uLWV4aXpzdGluZyB2YWx1ZSAqL1xuIFx0aW50IGk7XG5AQCAtMjkxLDcgJiM0MzsyNTUsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19ibGluZG5lc3Modm9pZClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuIFx0YnBmX2ppdF9oYXJkZW4gPSAmIzM5OzImIzM5Oztcbi1cdGlmIChzZXRfYnBmX2ppdF9oYXJkZW4oXHUwMDI2YnBmX2ppdF9oYXJkZW4pKSB7XG4mIzQzO1x0cmV0ID0gc2V0X2JwZl9qaXRfaGFyZGVuKFx1MDAyNmJwZl9qaXRfaGFyZGVuKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O3NldCBicGZfaml0X2hhcmRlblwmIzM0OykpIHtcbiBcdFx0YnBmX2ppdF9oYXJkZW4gPSAmIzM5O0AmIzM5OzsgLyogb3BlbiwgcmVhZCBvciB3cml0ZSBmYWlsZWQgPVx1MDAzZSBubyB3cml0ZSB3YXMgZG9uZSAqL1xuIFx0XHRnb3RvIGNsZWFudXA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2thc2FuLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjAwNmI5MmVlMTMxYWNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2thc2FuLmNcbkBAIC0wLDAgJiM0MzsxLDQyNSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRlc3RzIHZhbGlkYXRpbmcgdGhhdCBLQVNBTiByZXBvcnRzIGFyZSBwcm9wZXJseSBpbnN0cnVtZW50ZWQgYW5kXG4mIzQzOyAqIGdlbmVyYXRlZCBvbiBhIHdpZGUgdmFyaWV0eSBvZiBpbnN0cnVjdGlvbnMuIFRoZSBydW5uaW5nIGtlcm5lbCBuZWVkc1xuJiM0MzsgKiBrYXNhbl9tdWx0aV9zaG90IHRvIHJ1biBtdWx0aXBsZSBrYXNhbi1nZW5lcmF0aW5nIHN1YnRlc3RzIGF0IG9uY2VcbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5wcml2X2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtrYXNhbi5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a2FzYW5faGFyZGVuLnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBTVUJURVNUX05BTUVfTUFYX0xFTlx0MTI4XG4mIzQzOyNkZWZpbmUgUFJPR19OQU1FX01BWF9MRU5cdDEyOFxuJiM0MztcbiYjNDM7I2RlZmluZSBNQVhfTE9HX1NJWkVcdFx0KDggKiAxMDI0KVxuJiM0MzsjZGVmaW5lIFJFQURfQ0hVTktfU0laRVx0XHQyNTZcbiYjNDM7XG4mIzQzOyNkZWZpbmUgS0FTQU5fUEFUVEVSTl9TTEFCX1VBRiBcJiMzNDtCVUc6IEtBU0FOOiBzbGFiLXVzZS1hZnRlci1mcmVlIFwmIzM0OyBcXFxuJiM0MztcdFwmIzM0O2luIGJwZl9wcm9nXyUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XyVzXCYjMzQ7XG4mIzQzOyNkZWZpbmUgS0FTQU5fUEFUVEVSTl9SRVBPUlQgXCYjMzQ7JXMgb2Ygc2l6ZSAlZCBhdCBhZGRyXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgY2hhciBrbG9nX2J1ZmZlcltNQVhfTE9HX1NJWkVdO1xuJiM0MztzdGF0aWMgY2hhciByZWNvcmRbTUFYX0xPR19TSVpFXTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB0ZXN0X3NwZWMge1xuJiM0MztcdGNoYXIgKnByb2dfdHlwZTtcbiYjNDM7XHRib29sIGlzX3dyaXRlO1xuJiM0MztcdGJvb2wgb25seV8zMl9vcl82NDtcbiYjNDM7XHRib29sIG5lZWRzX2xvYWRfYWNxX3N0b3JlX3JlbDtcbiYjNDM7XHRib29sIHNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nO1xuJiM0MztcdGJvb2wgc2tpcF9vbl9zdGFja190ZXN0aW5nO1xuJiM0MztcdGludCBydW5fc2l6ZTtcbiYjNDM7XHRib29sIGV4cGVjdF9ub19yZXBvcnQ7XG4mIzQzO1x0Ym9vbCBybmRfaGkzMjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBrYXNhbl93cml0ZV92YWwge1xuJiM0MztcdF9fdTggZGF0YV8xO1xuJiM0MztcdF9fdTE2IGRhdGFfMjtcbiYjNDM7XHRfX3UzMiBkYXRhXzQ7XG4mIzQzO1x0X191NjQgZGF0YV84O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHRlc3RfY3R4IHtcbiYjNDM7XHRfX3U4ICBwcm9nX3RhZ1tCUEZfVEFHX1NJWkVdO1xuJiM0MztcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XG4mIzQzO1x0aW50ICphY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRib29sIHNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsO1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbiYjNDM7XHRjaGFyIHByb2dfbmFtZVtTVUJURVNUX05BTUVfTUFYX0xFTl07XG4mIzQzO1x0aW50IGtsb2dfZmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG9wZW5fa2VybmVsX2xvZ3Modm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKFwmIzM0Oy9kZXYva21zZ1wmIzM0OywgT19SRE9OTFkgfCBPX05PTkJMT0NLKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBza2lwX2tlcm5lbF9sb2dzKGludCBmZClcbiYjNDM7e1xuJiM0MztcdGxzZWVrKGZkLCAwLCBTRUVLX0VORCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmVhZF9rZXJuZWxfbG9ncyhpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IG1heF9sZW4pXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgdG90YWwgPSAwO1xuJiM0MztcdHNzaXplX3QgbjtcbiYjNDM7XG4mIzQzO1x0YnVmWzBdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHR3aGlsZSAoMSkge1xuJiM0MztcdFx0Y2hhciAqbXNnLCAqZW9sO1xuJiM0MztcdFx0c2l6ZV90IGxlbjtcbiYjNDM7XG4mIzQzO1x0XHRuID0gcmVhZChmZCwgcmVjb3JkLCBzaXplb2YocmVjb3JkKSAtIDEpO1xuJiM0MztcdFx0aWYgKG4gXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0aWYgKGVycm5vID09IEVBR0FJTilcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0cmV0dXJuIG47XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZWNvcmRbbl0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBFYWNoIGttc2cgcmVjb3JkIHN0YXJ0cyB3aXRoIHNvbWUgbWV0YWRhdGEsIHNlcGFyYXRlZFxuJiM0MztcdFx0ICogZnJvbSB0aGUgYWN0dWFsIGNvbnRlbnQgYnkgYSBzZW1pLWNvbG9uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG1zZyA9IHN0cmNocihyZWNvcmQsICYjMzk7OyYjMzk7KTtcbiYjNDM7XHRcdGlmICghbXNnKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdG1zZyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRlb2wgPSBzdHJjaHIobXNnLCAmIzM5O1xcbiYjMzk7KTtcbiYjNDM7XHRcdGlmIChlb2wpXG4mIzQzO1x0XHRcdCplb2wgPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcbiYjNDM7XHRcdGxlbiA9IHN0cmxlbihtc2cpO1xuJiM0MztcdFx0aWYgKHRvdGFsICYjNDM7IGxlbiAmIzQzOyAyIFx1MDAzZSBtYXhfbGVuKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdG1lbWNweShidWYgJiM0MzsgdG90YWwsIG1zZywgbGVuKTtcbiYjNDM7XHRcdHRvdGFsICYjNDM7PSBsZW47XG4mIzQzO1x0XHRidWZbdG90YWwmIzQzOyYjNDM7XSA9ICYjMzk7XFxuJiMzOTs7XG4mIzQzO1x0XHRidWZbdG90YWxdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0b3RhbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGVja19rYXNhbl9yZXBvcnRfaW5fa2VybmVsX2xvZ3MoY2hhciAqYnVmLCBzdHJ1Y3QgdGVzdF9jdHggKmN0eCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgYm9vbCBpc193cml0ZSwgaW50IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGFjY2Vzc19sb2dbUkVBRF9DSFVOS19TSVpFXTtcbiYjNDM7XHRjaGFyICprYXNhbl9yZXBvcnRfc3RhcnQ7XG4mIzQzO1x0aW50IG5zaXplO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihhY2Nlc3NfbG9nLCBSRUFEX0NIVU5LX1NJWkUsIEtBU0FOX1BBVFRFUk5fU0xBQl9VQUYsXG4mIzQzO1x0XHQgY3R4LVx1MDAzZXByb2dfdGFnWzBdLCBjdHgtXHUwMDNlcHJvZ190YWdbMV0sIGN0eC1cdTAwM2Vwcm9nX3RhZ1syXSxcbiYjNDM7XHRcdCBjdHgtXHUwMDNlcHJvZ190YWdbM10sIGN0eC1cdTAwM2Vwcm9nX3RhZ1s0XSwgY3R4LVx1MDAzZXByb2dfdGFnWzVdLFxuJiM0MztcdFx0IGN0eC1cdTAwM2Vwcm9nX3RhZ1s2XSwgY3R4LVx1MDAzZXByb2dfdGFnWzddLCBjdHgtXHUwMDNlcHJvZ19uYW1lKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNlYXJjaGVkIGthc2FuIHJlcG9ydCBpcyB2YWxpZCBpZlxuJiM0MztcdCAqIC0gaXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGthc2FuIHBhdHRlcm5cbiYjNDM7XHQgKiAtIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmF1bHR5IGFjY2VzcyBpcyBmb3VuZCBzb21ld2hlcmVcbiYjNDM7XHQgKiAgIGFmdGVyIHRoZSBoZWFkZXIgKG5vdCBuZWNlc3NhcmlseSBvbiB0aGUgdmVyeSBuZXh0IGxpbmUsXG4mIzQzO1x0ICogICBiZWNhdXNlIG90aGVyIGtlcm5lbCBtZXNzYWdlcyBtYXkgaW50ZXJsZWF2ZSlcbiYjNDM7XHQgKiAtIGZhdWx0eSBhY2Nlc3MgcHJvcGVydGllcyBtYXRjaCB0aGUgdGVzdGVkIHR5cGUgYW5kIHNpemVcbiYjNDM7XHQgKi9cbiYjNDM7XHRrYXNhbl9yZXBvcnRfc3RhcnQgPSBzdHJzdHIoYnVmLCBhY2Nlc3NfbG9nKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFrYXNhbl9yZXBvcnRfc3RhcnQpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0bnNpemUgPSBzbnByaW50ZihhY2Nlc3NfbG9nLCBSRUFEX0NIVU5LX1NJWkUsIEtBU0FOX1BBVFRFUk5fUkVQT1JULFxuJiM0MztcdFx0XHQgaXNfd3JpdGUgPyBcJiMzNDtXcml0ZVwmIzM0OyA6IFwmIzM0O1JlYWRcJiMzNDssIHNpemUpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXN0cnN0cihrYXNhbl9yZXBvcnRfc3RhcnQsIGFjY2Vzc19sb2cpKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBleGVjX3N1YnRlc3Qoc3RydWN0IHRlc3RfY3R4ICpjdHgsIHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsXG4mIzQzO1x0XHRcdCBpbnQgYWNjZXNzX3NpemUsIGJvb2wgb25fc3RhY2spXG4mIzQzO3tcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm87XG4mIzQzO1x0dWludDhfdCBidWZbRVRIX0hMRU5dID0gezB9O1xuJiM0MztcdGludCByZXQsIHByb2dfZmQ7XG4mIzQzO1x0X191MzIgaW5mb19sZW47XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2Vwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoY3R4LVx1MDAzZW9iaixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBjdHgtXHUwMDNlcHJvZ19uYW1lKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoY3R4LVx1MDAzZXByb2csIFwmIzM0O2ZpbmQgdGVzdCBwcm9nXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIGluZm9fbGVuKTtcbiYjNDM7XHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC1cdTAwM2Vwcm9nKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChwcm9nX2ZkLCBcJiMzNDtnZXQgcHJvZyBmZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQocHJvZ19mZCwgXHUwMDI2aW5mbywgXHUwMDI2aW5mb19sZW4pO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7ZmV0Y2ggbG9hZGVkIHByb2dyYW0gaW5mb1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bWVtY3B5KGN0eC1cdTAwM2Vwcm9nX3RhZywgaW5mby50YWcsIEJQRl9UQUdfU0laRSk7XG4mIzQzO1xuJiM0MztcdHNraXBfa2VybmVsX2xvZ3MoY3R4LVx1MDAzZWtsb2dfZmQpO1xuJiM0MztcbiYjNDM7XHR0b3B0cy5zeiA9IHNpemVvZihzdHJ1Y3QgYnBmX3Rlc3RfcnVuX29wdHMpO1xuJiM0MztcdHRvcHRzLmRhdGFfc2l6ZV9pbiA9IEVUSF9ITEVOO1xuJiM0MztcdHRvcHRzLmRhdGFfaW4gPSBidWY7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2VhY2Nlc3Nfc2l6ZSlcbiYjNDM7XHRcdCpjdHgtXHUwMDNlYWNjZXNzX3NpemUgPSBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChjdHgtXHUwMDNlcHJvZyksXG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZ0b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtydW4gcHJvZ1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfa2VybmVsX2xvZ3MoY3R4LVx1MDAzZWtsb2dfZmQsIGtsb2dfYnVmZmVyLCBNQVhfTE9HX1NJWkUpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKHJldCwgMCwgXCYjMzQ7cmVhZCBrZXJuZWwgbG9nc1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJldCA9IGNoZWNrX2thc2FuX3JlcG9ydF9pbl9rZXJuZWxfbG9ncyhrbG9nX2J1ZmZlciwgY3R4LFxuJiM0MztcdFx0XHRcdFx0XHR0ZXN0LVx1MDAzZWlzX3dyaXRlLCBhY2Nlc3Nfc2l6ZSk7XG4mIzQzO1x0aWYgKG9uX3N0YWNrIHx8IHRlc3QtXHUwMDNlZXhwZWN0X25vX3JlcG9ydClcbiYjNDM7XHRcdEFTU0VSVF9ORVEocmV0LCAwLCBcJiMzNDtubyByZXBvcnQgc2hvdWxkIGJlIGdlbmVyYXRlZFwmIzM0Oyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0QVNTRVJUX09LKHJldCwgXCYjMzQ7cmVwb3J0IHNob3VsZCBiZSBnZW5lcmF0ZWRcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydW5fc3VidGVzdF93aXRoX3NpemVfYW5kX2xvY2F0aW9uKHN0cnVjdCB0ZXN0X2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgaW50IGFjY2Vzc19zaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGJvb2wgb25fc3RhY2spXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHN1YnRlc3RfbmFtZVtTVUJURVNUX05BTUVfTUFYX0xFTl07XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0LVx1MDAzZXNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nKSB7XG4mIzQzO1x0XHRzbnByaW50ZihzdWJ0ZXN0X25hbWUsIFNVQlRFU1RfTkFNRV9NQVhfTEVOLCBcJiMzNDslc1wmIzM0OyxcbiYjNDM7XHRcdFx0IHRlc3QtXHUwMDNlcHJvZ190eXBlKTtcbiYjNDM7XHRcdHN0cm5jcHkoY3R4LVx1MDAzZXByb2dfbmFtZSwgdGVzdC1cdTAwM2Vwcm9nX3R5cGUsIFBST0dfTkFNRV9NQVhfTEVOKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c25wcmludGYoc3VidGVzdF9uYW1lLCBTVUJURVNUX05BTUVfTUFYX0xFTiwgXCYjMzQ7JXNfJWRfJXNcJiMzNDssXG4mIzQzO1x0XHRcdCB0ZXN0LVx1MDAzZXByb2dfdHlwZSwgYWNjZXNzX3NpemUsXG4mIzQzO1x0XHRcdCBvbl9zdGFjayA/IFwmIzM0O29uX3N0YWNrXCYjMzQ7IDogXCYjMzQ7bm90X29uX3N0YWNrXCYjMzQ7KTtcbiYjNDM7XHRcdHNucHJpbnRmKGN0eC1cdTAwM2Vwcm9nX25hbWUsIFBST0dfTkFNRV9NQVhfTEVOLCBcJiMzNDslc18lc1wmIzM0OyxcbiYjNDM7XHRcdFx0IHRlc3QtXHUwMDNlcHJvZ190eXBlLFxuJiM0MztcdFx0XHQgb25fc3RhY2sgPyBcJiMzNDtvbl9zdGFja1wmIzM0OyA6IFwmIzM0O25vdF9vbl9zdGFja1wmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfX3N0YXJ0X3N1YnRlc3Qoc3VidGVzdF9uYW1lKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3QtXHUwMDNlbmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWwpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGV4ZWNfc3VidGVzdChjdHgsIHRlc3QsIGFjY2Vzc19zaXplLCBvbl9zdGFjayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCxcbiYjNDM7XHRcdFx0XHQgIGludCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX3N1YnRlc3Rfd2l0aF9zaXplX2FuZF9sb2NhdGlvbihjdHgsIHRlc3QsIHNpemUsIGZhbHNlKTtcbiYjNDM7XHRpZiAoIXRlc3QtXHUwMDNlc2tpcF9vbl9zdGFja190ZXN0aW5nKVxuJiM0MztcdFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplX2FuZF9sb2NhdGlvbihjdHgsIHRlc3QsIHNpemUsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydW5fc3VidGVzdChzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0LVx1MDAzZXNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nKSB7XG4mIzQzO1x0XHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCB0ZXN0LVx1MDAzZXJ1bl9zaXplKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdC1cdTAwM2Vvbmx5XzMyX29yXzY0KSB7XG4mIzQzO1x0XHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCAxKTtcbiYjNDM7XHRcdHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShjdHgsIHRlc3QsIDIpO1xuJiM0MztcdH1cbiYjNDM7XHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCA0KTtcbiYjNDM7XHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCA4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX2JsaW5kaW5nX3N1YnRlc3Qodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X3NwZWMgYmxpbmRpbmdfc3BlYyA9IHtcbiYjNDM7XHRcdC5wcm9nX3R5cGUgPSBcJiMzNDtzdF9ibGluZGVkXCYjMzQ7LFxuJiM0MztcdFx0LmlzX3dyaXRlID0gdHJ1ZSxcbiYjNDM7XHR9O1xuJiM0MztcdGNoYXIgYnBmX2ppdF9oYXJkZW4gPSAmIzM5OzImIzM5OztcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5faGFyZGVuICpza2VsO1xuJiM0MztcdHN0cnVjdCB0ZXN0X2N0eCAqY3R4O1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c3RfYmxpbmRlZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGN0eCA9IGNhbGxvYygxLCBzaXplb2YoKmN0eCkpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihjdHgsIFwmIzM0O2FsbG9jIGJsaW5kaW5nIGN0eFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0Y3R4LVx1MDAzZWtsb2dfZmQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldF9icGZfaml0X2hhcmRlbihcdTAwMjZicGZfaml0X2hhcmRlbikpXG4mIzQzO1x0XHRnb3RvIGZyZWVfY3R4O1xuJiM0MztcbiYjNDM7XHRza2VsID0ga2FzYW5faGFyZGVuX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O29wZW4gYW5kIGxvYWQgYmxpbmRlZCBwcm9nXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZWtsb2dfZmQgPSBvcGVuX2tlcm5lbF9sb2dzKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfRkQoY3R4LVx1MDAzZWtsb2dfZmQsIFwmIzM0O29wZW4ga2VybmVsIGxvZ3NcJiMzNDspKVxuJiM0MztcdFx0Z290byBkZXN0cm95O1xuJiM0MztcbiYjNDM7XHRjdHgtXHUwMDNlb2JqID0gc2tlbC1cdTAwM2VvYmo7XG4mIzQzO1x0c3RybmNweShjdHgtXHUwMDNlcHJvZ19uYW1lLCBcJiMzNDtzdF9ibGluZGVkXCYjMzQ7LCBQUk9HX05BTUVfTUFYX0xFTik7XG4mIzQzO1xuJiM0MztcdGV4ZWNfc3VidGVzdChjdHgsIFx1MDAyNmJsaW5kaW5nX3NwZWMsIDEsIGZhbHNlKTtcbiYjNDM7XG4mIzQzO2Rlc3Ryb3k6XG4mIzQzO1x0Y2xvc2UoY3R4LVx1MDAzZWtsb2dfZmQpO1xuJiM0MztcdGthc2FuX2hhcmRlbl9fZGVzdHJveShza2VsKTtcbiYjNDM7cmVzdG9yZTpcbiYjNDM7XHRzZXRfYnBmX2ppdF9oYXJkZW4oXHUwMDI2YnBmX2ppdF9oYXJkZW4pO1xuJiM0MztmcmVlX2N0eDpcbiYjNDM7XHRmcmVlKGN0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0LnByb2dfdHlwZSA9IFwmIzM0O3N0XCYjMzQ7LFxuJiM0MztcdFx0LmlzX3dyaXRlID0gdHJ1ZVxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnByb2dfdHlwZSA9IFwmIzM0O3N0eFwmIzM0OyxcbiYjNDM7XHRcdC5pc193cml0ZSA9IHRydWVcbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5wcm9nX3R5cGUgPSBcJiMzNDtsZHhcJiMzNDssXG4mIzQzO1x0XHQuaXNfd3JpdGUgPSBmYWxzZVxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnByb2dfdHlwZSA9IFwmIzM0O3NpbXBsZV9hdG9taWNcJiMzNDssXG4mIzQzO1x0XHQuaXNfd3JpdGUgPSBmYWxzZSxcbiYjNDM7XHRcdC5vbmx5XzMyX29yXzY0ID0gdHJ1ZVxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnByb2dfdHlwZSA9IFwmIzM0O2xvYWRfYWNxdWlyZVwmIzM0OyxcbiYjNDM7XHRcdC5pc193cml0ZSA9IGZhbHNlLFxuJiM0MztcdFx0Lm5lZWRzX2xvYWRfYWNxX3N0b3JlX3JlbCA9IHRydWVcbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5wcm9nX3R5cGUgPSBcJiMzNDtzdG9yZV9yZWxlYXNlXCYjMzQ7LFxuJiM0MztcdFx0LmlzX3dyaXRlID0gdHJ1ZSxcbiYjNDM7XHRcdC5uZWVkc19sb2FkX2FjcV9zdG9yZV9yZWwgPSB0cnVlXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQucHJvZ190eXBlID0gXCYjMzQ7bGR4X3BhdGNoZWRcJiMzNDssXG4mIzQzO1x0XHQuaXNfd3JpdGUgPSBmYWxzZSxcbiYjNDM7XHRcdC5za2lwX211bHRpX3NpemVfdGVzdGluZyA9IHRydWUsXG4mIzQzO1x0XHQuc2tpcF9vbl9zdGFja190ZXN0aW5nID0gdHJ1ZSxcbiYjNDM7XHRcdC5ydW5fc2l6ZSA9IDQsXG4mIzQzO1x0XHQucm5kX2hpMzIgPSB0cnVlXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQucHJvZ190eXBlID0gXCYjMzQ7bGR4X3BhdGNoZWRfb25fc3RhY2tcJiMzNDssXG4mIzQzO1x0XHQuaXNfd3JpdGUgPSBmYWxzZSxcbiYjNDM7XHRcdC5za2lwX211bHRpX3NpemVfdGVzdGluZyA9IHRydWUsXG4mIzQzO1x0XHQuc2tpcF9vbl9zdGFja190ZXN0aW5nID0gdHJ1ZSxcbiYjNDM7XHRcdC5ydW5fc2l6ZSA9IDQsXG4mIzQzO1x0XHQuZXhwZWN0X25vX3JlcG9ydCA9IHRydWUsXG4mIzQzO1x0XHQucm5kX2hpMzIgPSB0cnVlXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQucHJvZ190eXBlID0gXCYjMzQ7dmVyaWZpZXJfcGF0aHNfc3RhY2tfYW5kX25vbl9zdGFja1wmIzM0OyxcbiYjNDM7XHRcdC5pc193cml0ZSA9IHRydWUsXG4mIzQzO1x0XHQuc2tpcF9tdWx0aV9zaXplX3Rlc3RpbmcgPSB0cnVlLFxuJiM0MztcdFx0LnNraXBfb25fc3RhY2tfdGVzdGluZyA9IHRydWUsXG4mIzQzO1x0XHQucnVuX3NpemUgPSAxXG4mIzQzO1x0fVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2thc2FuKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0O1xuJiM0MztcdHN0cnVjdCB0ZXN0X2N0eCAqY3R4O1xuJiM0MztcdHN0cnVjdCBrYXNhbiAqc2tlbDtcbiYjNDM7XHRfX3UzMiBrZXkgPSAwO1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGN0eCA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHRlc3RfY3R4KSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGN0eCwgXCYjMzQ7YWxsb2MgdGVzdCBjdHhcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlzX2ppdF9lbmFibGVkKCkgfHwgIWdldF9rYXNhbl9qaXRfZW5hYmxlZCgpKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRnb3RvIGVuZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBrYXNhbl9fb3BlbigpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtvcGVuIHByb2dcJiMzNDspKVxuJiM0MztcdFx0Z290byBlbmQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xuJiM0MztcbiYjNDM7XHRcdGlmICghdGVzdHNbaV0ucm5kX2hpMzIpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShza2VsLVx1MDAzZW9iaixcbiYjNDM7XHRcdFx0XHRcdFx0XHR0ZXN0c1tpXS5wcm9nX3R5cGUpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0tfUFRSKHByb2csIFwmIzM0O2ZpbmQgcm5kX2hpMzIgcHJvZ1wmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gZGVzdHJveTtcbiYjNDM7XHRcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgQlBGX0ZfVEVTVF9STkRfSEkzMik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhrYXNhbl9fbG9hZChza2VsKSwgXCYjMzQ7bG9hZCBwcm9nXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZGVzdHJveTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZW9iaiA9IHNrZWwtXHUwMDNlb2JqO1xuJiM0MztcdGN0eC1cdTAwM2VhY2Nlc3Nfc2l6ZSA9IFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWFjY2Vzc19zaXplO1xuJiM0MztcdGN0eC1cdTAwM2Vza2lwX2xvYWRfYWNxX3N0b3JlX3JlbCA9IHNrZWwtXHUwMDNlZGF0YS1cdTAwM2Vza2lwX2xvYWRfYWNxX3N0b3JlX3JlbF90ZXN0cztcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZWtsb2dfZmQgPSBvcGVuX2tlcm5lbF9sb2dzKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfRkQoY3R4LVx1MDAzZWtsb2dfZmQsIFwmIzM0O29wZW4ga2VybmVsIGxvZ3NcJiMzNDspKVxuJiM0MztcdFx0Z290byBkZXN0cm95O1xuJiM0MztcbiYjNDM7XHQvKiBGaWxsIG1hcCB3aXRoIHJlY29nbml6YWJsZSB2YWx1ZXMgKi9cbiYjNDM7XHRyZXQgPSBicGZfbWFwX19sb29rdXBfZWxlbShza2VsLVx1MDAzZW1hcHMudGVzdF9tYXAsIFx1MDAyNmtleSwgc2l6ZW9mKGtleSksXG4mIzQzO1x0XHRcdFx0ICAgXHUwMDI2dmFsLCBzaXplb2YodmFsKSwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtnZXQgbWFwXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xvc2U7XG4mIzQzO1x0dmFsLmRhdGFfMSA9IDB4QUE7XG4mIzQzO1x0dmFsLmRhdGFfMiA9IDB4QkJCQjtcbiYjNDM7XHR2YWwuZGF0YV80ID0gMHhDQ0NDQ0NDQztcbiYjNDM7XHR2YWwuZGF0YV84ID0gMHhEREREREREREREREREREREO1xuJiM0MztcdHJldCA9IGJwZl9tYXBfX3VwZGF0ZV9lbGVtKHNrZWwtXHUwMDNlbWFwcy50ZXN0X21hcCwgXHUwMDI2a2V5LCBzaXplb2Yoa2V5KSxcbiYjNDM7XHRcdFx0XHQgICBcdTAwMjZ2YWwsIHNpemVvZih2YWwpLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O3NldCBtYXBcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbG9zZTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh0ZXN0cyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR0ZXN0ID0gXHUwMDI2dGVzdHNbaV07XG4mIzQzO1x0XHRydW5fc3VidGVzdChjdHgsIHRlc3QpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCbGluZGluZyBzdWJ0ZXN0IGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgYXMgaXQgbmVlZHMgdGhlXG4mIzQzO1x0ICogY29ycmVzcG9uZGluZyBwcm9ncmFtIHRvIGJlIGxvYWRlZCB3aXRoIGJwZl9qaXRfaGFyZGVuIHJhaXNlZFxuJiM0MztcdCAqL1xuJiM0MztcdHJ1bl9ibGluZGluZ19zdWJ0ZXN0KCk7XG4mIzQzO1xuJiM0MztjbG9zZTpcbiYjNDM7XHRjbG9zZShjdHgtXHUwMDNla2xvZ19mZCk7XG4mIzQzO2Rlc3Ryb3k6XG4mIzQzO1x0a2FzYW5fX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO2VuZDpcbiYjNDM7XHRmcmVlKGN0eCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rYXNhbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgyZGRjZTMwNTlhZWUxXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW4uY1xuQEAgLTAsMCAmIzQzOzEsMzk0IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX21pc2MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiYjNDM7XG4mIzQzO2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07XG4mIzQzO2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTtcbiYjNDM7XG4mIzQzO2ludCBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBrYXNhbl93cml0ZV92YWwge1xuJiM0MztcdF9fdTggZGF0YV8xO1xuJiM0MztcdF9fdTE2IGRhdGFfMjtcbiYjNDM7XHRfX3UzMiBkYXRhXzQ7XG4mIzQzO1x0X191NjQgZGF0YV84O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0MztcdF9fdHlwZShrZXksIF9fdTMyKTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrYXNhbl93cml0ZV92YWwpO1xuJiM0Mzt9IHRlc3RfbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGN4L2luZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCBzdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdHZhbC5kYXRhXzEgPSAweEFBO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0dmFsLmRhdGFfMiA9IDB4QUE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDQ6XG4mIzQzO1x0XHR2YWwuZGF0YV80ID0gMHhBQTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgODpcbiYjNDM7XHRcdHZhbC5kYXRhXzggPSAweEFBO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y3gvaW5ncmVzc1wmIzM0OylcbiYjNDM7aW50IHN0X25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4mIzQzO1x0X191MzIga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0dmFsLVx1MDAzZWRhdGFfMSA9IDB4QUE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDI6XG4mIzQzO1x0XHR2YWwtXHUwMDNlZGF0YV8yID0gMHhBQTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdHZhbC1cdTAwM2VkYXRhXzQgPSAweEFBO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA4OlxuJiM0MztcdFx0dmFsLVx1MDAzZWRhdGFfOCA9IDB4QUE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgc3R4X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0dmFsLmRhdGFfMSA9IGFjY2Vzc19zaXplO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0dmFsLmRhdGFfMiA9IGFjY2Vzc19zaXplO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA0OlxuJiM0MztcdFx0dmFsLmRhdGFfNCA9IGFjY2Vzc19zaXplO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA4OlxuJiM0MztcdFx0dmFsLmRhdGFfOCA9IGFjY2Vzc19zaXplO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y3gvaW5ncmVzc1wmIzM0OylcbiYjNDM7aW50IHN0eF9ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuJiM0MztcdF9fdTMyIGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdHZhbC1cdTAwM2VkYXRhXzEgPSBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHZhbC1cdTAwM2VkYXRhXzIgPSBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdHZhbC1cdTAwM2VkYXRhXzQgPSBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgODpcbiYjNDM7XHRcdHZhbC1cdTAwM2VkYXRhXzggPSBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGN4L2luZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCBsZHhfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbiYjNDM7XHRjYXNlIDE6XG4mIzQzO1x0XHRfX3NpbmsodmFsLmRhdGFfMSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDI6XG4mIzQzO1x0XHRfX3NpbmsodmFsLmRhdGFfMik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDQ6XG4mIzQzO1x0XHRfX3NpbmsodmFsLmRhdGFfNCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDg6XG4mIzQzO1x0XHRfX3NpbmsodmFsLmRhdGFfOCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgbGR4X25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4mIzQzO1x0X191MzIga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0X19zaW5rKHZhbC1cdTAwM2VkYXRhXzEpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0X19zaW5rKHZhbC1cdTAwM2VkYXRhXzIpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA0OlxuJiM0MztcdFx0X19zaW5rKHZhbC1cdTAwM2VkYXRhXzQpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA4OlxuJiM0MztcdFx0X19zaW5rKHZhbC1cdTAwM2VkYXRhXzgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y3gvaW5ncmVzc1wmIzM0OylcbiYjNDM7aW50IGxkeF9wYXRjaGVkKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcbiYjNDM7XHRfX3UzMiBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRlc3RfbWFwLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdF9fc2luayh2YWwtXHUwMDNlZGF0YV80KTtcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgbGR4X3BhdGNoZWRfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdF9fc2luayh2YWwuZGF0YV80KTtcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgc2ltcGxlX2F0b21pY19vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnZhbC5kYXRhXzQsIDQpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA4OlxuJiM0MztcdFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2dmFsLmRhdGFfOCwgOCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgc2ltcGxlX2F0b21pY19ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuJiM0MztcdF9fdTMyIGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzQsIDQpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA4OlxuJiM0MztcdFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2dmFsLVx1MDAzZWRhdGFfOCwgOCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmZGVmIF9fQlBGX0ZFQVRVUkVfTE9BRF9BQ1FfU1RPUkVfUkVMXG4mIzQzO2Jvb2wgc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWxfdGVzdHMgU0VDKFwmIzM0Oy5kYXRhXCYjMzQ7KSA9IDA7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGN4L2luZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCBsb2FkX2FjcXVpcmVfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbiYjNDM7XHRjYXNlIDE6XG4mIzQzO1x0XHRfX2F0b21pY19sb2FkX24oXHUwMDI2dmFsLmRhdGFfMSwgX19BVE9NSUNfQUNRVUlSRSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDI6XG4mIzQzO1x0XHRfX2F0b21pY19sb2FkX24oXHUwMDI2dmFsLmRhdGFfMiwgX19BVE9NSUNfQUNRVUlSRSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDQ6XG4mIzQzO1x0XHRfX2F0b21pY19sb2FkX24oXHUwMDI2dmFsLmRhdGFfNCwgX19BVE9NSUNfQUNRVUlSRSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDg6XG4mIzQzO1x0XHRfX2F0b21pY19sb2FkX24oXHUwMDI2dmFsLmRhdGFfOCwgX19BVE9NSUNfQUNRVUlSRSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgbG9hZF9hY3F1aXJlX25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4mIzQzO1x0X191MzIga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzEsIF9fQVRPTUlDX0FDUVVJUkUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzIsIF9fQVRPTUlDX0FDUVVJUkUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA0OlxuJiM0MztcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzQsIF9fQVRPTUlDX0FDUVVJUkUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA4OlxuJiM0MztcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzgsIF9fQVRPTUlDX0FDUVVJUkUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y3gvaW5ncmVzc1wmIzM0OylcbiYjNDM7aW50IHN0b3JlX3JlbGVhc2Vfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbiYjNDM7XHRjYXNlIDE6XG4mIzQzO1x0XHRfX2F0b21pY19zdG9yZV9uKFx1MDAyNnZhbC5kYXRhXzEsIDB4QUEsIF9fQVRPTUlDX1JFTEVBU0UpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0X19hdG9taWNfc3RvcmVfbihcdTAwMjZ2YWwuZGF0YV8yLCAweEJCQkIsIF9fQVRPTUlDX1JFTEVBU0UpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA0OlxuJiM0MztcdFx0X19hdG9taWNfc3RvcmVfbihcdTAwMjZ2YWwuZGF0YV80LCAweENDQ0NDQ0NDLCBfX0FUT01JQ19SRUxFQVNFKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgODpcbiYjNDM7XHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLmRhdGFfOCwgMHhERERERERERERERERERERELFxuJiM0MztcdFx0XHRcdCBfX0FUT01JQ19SRUxFQVNFKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGN4L2luZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCBzdG9yZV9yZWxlYXNlX25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4mIzQzO1x0X191MzIga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0X19hdG9taWNfc3RvcmVfbihcdTAwMjZ2YWwtXHUwMDNlZGF0YV8xLCAweEFBLCBfX0FUT01JQ19SRUxFQVNFKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLVx1MDAzZWRhdGFfMiwgMHhCQkJCLCBfX0FUT01JQ19SRUxFQVNFKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLVx1MDAzZWRhdGFfNCwgMHhDQ0NDQ0NDQywgX19BVE9NSUNfUkVMRUFTRSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDg6XG4mIzQzO1x0XHRfX2F0b21pY19zdG9yZV9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzgsIDB4RERERERERERERERERERERCxcbiYjNDM7XHRcdFx0XHQgX19BVE9NSUNfUkVMRUFTRSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0Mztib29sIHNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsX3Rlc3RzIFNFQyhcJiMzNDsuZGF0YVwmIzM0OykgPSAxO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y3gvaW5ncmVzc1wmIzM0OylcbiYjNDM7aW50IHZlcmlmaWVyX3BhdGhzX3N0YWNrX2FuZF9ub25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCBzdGFja192YWwgPSB7fTtcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4mIzQzO1x0dm9pZCAqcHRyO1xuJiM0MztcdF9fdTMyIGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGFjY2Vzc19zaXplKVxuJiM0MztcdFx0cHRyID0gdmFsO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHB0ciA9IFx1MDAyNnN0YWNrX3ZhbDtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZigqdmFsKSk7XG4mIzQzO1x0KihfX3U4ICopcHRyID0gMHhBQTtcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2YoKnZhbCkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuX2hhcmRlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuX2hhcmRlbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgwOGQ3ZGE2NDQyMTYyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmNcbkBAIC0wLDAgJiM0MzsxLDQxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzO2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07XG4mIzQzO2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBrYXNhbl93cml0ZV92YWwge1xuJiM0MztcdF9fdTggZGF0YV8xO1xuJiM0MztcdF9fdTE2IGRhdGFfMjtcbiYjNDM7XHRfX3UzMiBkYXRhXzQ7XG4mIzQzO1x0X191NjQgZGF0YV84O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0MztcdF9fdHlwZShrZXksIF9fdTMyKTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrYXNhbl93cml0ZV92YWwpO1xuJiM0Mzt9IHRlc3RfbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGN4L2luZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCBzdF9ibGluZGVkKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcbiYjNDM7XHRfX3UzMiBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRlc3RfbWFwLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHZhbC1cdTAwM2VkYXRhXzEgPSAweEFBO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbmluZGV4IDMwZjFjZDIzMDkzY2JlLi41ZDZhODM0ZjdkNzU3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC0yNzEsNiAmIzQzOzI3MSwyNiBAQCBfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19wdXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KHN0cnVjdCBwcm9nX3Rlc3RfbWVtYmVyXG4gXHQgKi9cbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQlBGX0pJVF9LQVNBTlxuJiM0MztcbiYjNDM7ZXh0ZXJuIHZvaWQga2FzYW5fcG9pc29uKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCB1OCB2YWx1ZSwgYm9vbCBpbml0KTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgS0FTQU5fU0xBQl9GUkVFIDB4RkJcbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2b2lkICptZW0sIHUzMiBtZW1fX3N6KVxuJiM0Mzt7XG4mIzQzO1x0a2FzYW5fcG9pc29uKG1lbSwgbWVtX19zeiwgS0FTQU5fU0xBQl9GUkVFLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opXG4mIzQzO3tcbiYjNDM7XHRrYXNhbl9wb2lzb24obWVtLCBtZW1fX3N6LCAweDAwLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opIHsgfVxuJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIHUzMiBtZW1fX3N6KSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIF9fYnBmX2tmdW5jIHN0cnVjdCBicGZfdGVzdG1vZF9jdHggKlxuIGJwZl90ZXN0bW9kX2N0eF9jcmVhdGUoaW50ICplcnIpXG4ge1xuQEAgLTc0MCw2ICYjNDM7NzYwLDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzEpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2thc2FuX3BvaXNvbilcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbilcbiBCVEZfS0ZVTkNTX0VORChicGZfdGVzdG1vZF9jb21tb25fa2Z1bmNfaWRzKVxuIFxuIEJURl9JRF9MSVNUKGJwZl90ZXN0bW9kX2R0b3JfaWRzKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xuaW5kZXggYzk3MGU3NzkzZGZjYmMuLjczN2Y2NjhiMzVlMjNiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcbkBAIC01MTksNiAmIzQzOzUxOSwzOCBAQCBib29sIGlzX2ppdF9lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gZW5hYmxlZDtcbiB9XG4gXG4mIzQzO2ludCBzZXRfYnBmX2ppdF9oYXJkZW4oY2hhciAqbGV2ZWwpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIG9sZF9sZXZlbDtcbiYjNDM7XHRpbnQgZXJyID0gLTE7XG4mIzQzO1x0aW50IGZkID0gLTE7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihcJiMzNDsvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW5cJiMzNDssIE9fUkRXUiB8IE9fTk9OQkxPQ0spO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcmVhZChmZCwgXHUwMDI2b2xkX2xldmVsLCAxKTtcbiYjNDM7XHRpZiAoZXJyICE9IDEpIHtcbiYjNDM7XHRcdGVyciA9IC0xO1xuJiM0MztcdFx0Z290byBlbmQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsc2VlayhmZCwgMCwgU0VFS19TRVQpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB3cml0ZShmZCwgbGV2ZWwsIDEpO1xuJiM0MztcdGlmIChlcnIgIT0gMSkge1xuJiM0MztcdFx0ZXJyID0gLTE7XG4mIzQzO1x0XHRnb3RvIGVuZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IDA7XG4mIzQzO1x0KmxldmVsID0gb2xkX2xldmVsO1xuJiM0MztlbmQ6XG4mIzQzO1x0aWYgKGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBzdGFja19tcHJvdGVjdCh2b2lkKVxuIHtcbiBcdHZvaWQgKmJ1ZjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmhcbmluZGV4IDJlZGM2ZmI3ZmM1MjEyLi5lMDA2NDJhZmU4NmY0MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oXG5AQCAtNTksNiAmIzQzOzU5LDcgQEAgc3RydWN0IGJwZl9pbnNuO1xuIGludCBnZXRfeGxhdGVkX3Byb2dyYW0oaW50IGZkX3Byb2csIHN0cnVjdCBicGZfaW5zbiAqKmJ1ZiwgX191MzIgKmNudCk7XG4gaW50IHRlc3RpbmdfcHJvZ19mbGFncyh2b2lkKTtcbiBib29sIGlzX2ppdF9lbmFibGVkKHZvaWQpO1xuJiM0MztpbnQgc2V0X2JwZl9qaXRfaGFyZGVuKGNoYXIgKmxldmVsKTtcbiBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZCk7XG4gXG4gI2VuZGlmIC8qIF9fVEVTVElOR19IRUxQRVJTX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jXG5pbmRleCBmOTk3ZDdlYzhmZDA4Ni4uMTEyMDFiNjVhM2Q0YjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmNcbkBAIC0xNDIsMyAmIzQzOzE0Miw4IEBAIGJvb2wgZ2V0X3VucHJpdl9kaXNhYmxlZCh2b2lkKVxuIFx0fVxuIFx0cmV0dXJuIG1pdGlnYXRpb25zX29mZjtcbiB9XG4mIzQzO1xuJiM0Mztib29sIGdldF9rYXNhbl9qaXRfZW5hYmxlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNvbmZpZ19jb250YWlucyhcJiMzNDtDT05GSUdfQlBGX0pJVF9LQVNBTj15XCYjMzQ7KSA9PSAxO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuaFxuaW5kZXggMTUxZjY3MzI5NjY1MjIuLmJjNWY0Yzk1M2M5ZDZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oXG5AQCAtNSwzICYjNDM7NSw0IEBAXG4gI2RlZmluZSBVTlBSSVZfU1lTQ1RMIFwmIzM0O2tlcm5lbC91bnByaXZpbGVnZWRfYnBmX2Rpc2FibGVkXCYjMzQ7XG4gXG4gYm9vbCBnZXRfdW5wcml2X2Rpc2FibGVkKHZvaWQpO1xuJiM0Mztib29sIGdldF9rYXNhbl9qaXRfZW5hYmxlZCh2b2lkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMDoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUX0tBU0FOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfZG9fbWlzY19maXh1cHMmIzM0OywKICAgICYjMzQ7Y2hlY2tfbWVtX2FjY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIEtBU0FOIHN1cHBvcnQgdG8gdGhlIEJQRiBKSVQgY29tcGlsZXIgb24geDg2XzY0LCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZDZkZGY5NzA2YTg2OWJjNmQyNTVlMWM3ZDBhZTZmYmFkYjc5OWI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAyMDoxNDoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGJkYWQ5MGYyMTBlNGJmLi43MDVhOWFiODVmM2E5NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0yMzMsNiAmIzQzOzIzMyw3IEBAIGNvbmZpZyBYODYKIAlzZWxlY3QgSEFWRV9TQU1QTEVfRlRSQUNFX0RJUkVDVAlpZiBYODZfNjQKIAlzZWxlY3QgSEFWRV9TQU1QTEVfRlRSQUNFX0RJUkVDVF9NVUxUSQlpZiBYODZfNjQKIAlzZWxlY3QgSEFWRV9FQlBGX0pJVAomIzQzOwlzZWxlY3QgSEFWRV9FQlBGX0pJVF9LQVNBTgkJaWYgWDg2XzY0CiAJc2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MKIAlzZWxlY3QgSEFWRV9FSVNBCQkJaWYgWDg2XzMyCiAJc2VsZWN0IEhBVkVfRVhJVF9USFJFQUQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwppbmRleCBkZTc1MTVlYTFiZWFlOC4uNjVhMDBlODQ3OTljZDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTIxLDYgJiM0MzsyMSwxNyBAQAogI2luY2x1ZGUgJmx0O2FzbS91bndpbmQuaCZndDsKICNpbmNsdWRlICZsdDthc20vY2ZpLmgmZ3Q7CiAKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX0pJVF9LQVNBTikKJiM0Mzt2b2lkIF9fYXNhbl9sb2FkMSh2b2lkICpwKTsKJiM0Mzt2b2lkIF9fYXNhbl9zdG9yZTEodm9pZCAqcCk7CiYjNDM7dm9pZCBfX2FzYW5fbG9hZDIodm9pZCAqcCk7CiYjNDM7dm9pZCBfX2FzYW5fc3RvcmUyKHZvaWQgKnApOwomIzQzO3ZvaWQgX19hc2FuX2xvYWQ0KHZvaWQgKnApOwomIzQzO3ZvaWQgX19hc2FuX3N0b3JlNCh2b2lkICpwKTsKJiM0Mzt2b2lkIF9fYXNhbl9sb2FkOCh2b2lkICpwKTsKJiM0Mzt2b2lkIF9fYXNhbl9zdG9yZTgodm9pZCAqcCk7CiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgYm9vbCBhbGxfY2FsbGVlX3JlZ3NfdXNlZFs0XSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTsKIAogc3RhdGljIHU4ICplbWl0X2NvZGUodTggKnB0ciwgdTMyIGJ5dGVzLCB1bnNpZ25lZCBpbnQgbGVuKQpAQCAtMTExMCw2ICYjNDM7MTEyMSw5MCBAQCBzdGF0aWMgdm9pZCBtYXliZV9lbWl0XzFtb2QodTggKipwcHJvZywgdTMyIHJlZywgYm9vbCBpczY0KQogCSpwcHJvZyA9IHByb2c7CiB9CiAKJiM0MztzdGF0aWMgaW50IGVtaXRfa2FzYW5fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTggKipwcHJvZywKJiM0MzsJCQkgICAgdTMyIGFkZHJfcmVnLCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICppcCwKJiM0MzsJCQkgICAgYm9vbCBpc193cml0ZSwgYm9vbCBhY2Nlc3Nlc19zdGFja19vbmx5KQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9KSVRfS0FTQU4KJiM0MzsJdTMyIGJwZl9zaXplID0gQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CXMzMiBvZmYgPSBpbnNuLSZndDtvZmY7CiYjNDM7CXU4ICpwcm9nID0gKnBwcm9nOwomIzQzOwl2b2lkICprYXNhbl9mdW5jOwomIzQzOwomIzQzOwlpZiAoIWVudikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoYWNjZXNzZXNfc3RhY2tfb25seSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBEZXJpdmUgS0FTQU4gY2hlY2sgZnVuY3Rpb24gZnJvbSBhY2Nlc3MgdHlwZSBhbmQgc2l6ZSAqLwomIzQzOwlzd2l0Y2ggKGJwZl9zaXplKSB7CiYjNDM7CWNhc2UgQlBGX0I6CiYjNDM7CQlrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmUxIDogX19hc2FuX2xvYWQxOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0g6CiYjNDM7CQlrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmUyIDogX19hc2FuX2xvYWQyOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX1c6CiYjNDM7CQlrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmU0IDogX19hc2FuX2xvYWQ0OwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0RXOgomIzQzOwkJa2FzYW5fZnVuYyA9IGlzX3dyaXRlID8gX19hc2FuX3N0b3JlOCA6IF9fYXNhbl9sb2FkODsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU2F2ZSByYXggKi8KJiM0MzsJRU1JVDEoMHg1MCk7CiYjNDM7CS8qIFNhdmUgcmN4ICovCiYjNDM7CUVNSVQxKDB4NTEpOwomIzQzOwkvKiBTYXZlIHJkeCAqLwomIzQzOwlFTUlUMSgweDUyKTsKJiM0MzsJLyogU2F2ZSByc2kgKi8KJiM0MzsJRU1JVDEoMHg1Nik7CiYjNDM7CS8qIFNhdmUgcmRpICovCiYjNDM7CUVNSVQxKDB4NTcpOwomIzQzOwkvKiBTYXZlIHI4ICovCiYjNDM7CUVNSVQyKDB4NDEsIDB4NTApOwomIzQzOwkvKiBTYXZlIHI5ICovCiYjNDM7CUVNSVQyKDB4NDEsIDB4NTEpOwomIzQzOwomIzQzOwkvKiBtb3YgcmRpLCBhZGRyX3JlZyAqLwomIzQzOwlFTUlUX21vdihCUEZfUkVHXzEsIGFkZHJfcmVnKTsKJiM0MzsKJiM0MzsJLyogYWRkIHJkaSwgb2ZmIChpZiBvZmZzZXQgaXMgbm9uLXplcm8pICovCiYjNDM7CWlmIChvZmYpIHsKJiM0MzsJCWlmIChpc19pbW04KG9mZikpIHsKJiM0MzsJCQkvKiBhZGQgcmRpLCBpbW04ICovCiYjNDM7CQkJRU1JVDQoMHg0OCwgMHg4MywgMHhDNywgKHU4KW9mZik7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCS8qIGFkZCByZGksIGltbTMyICovCiYjNDM7CQkJRU1JVDNfb2ZmMzIoMHg0OCwgMHg4MSwgMHhDNywgb2ZmKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBZGp1c3QgaXAgdG8gYWNjb3VudCBmb3IgdGhlIGluc3RydW1lbnRhdGlvbiBnZW5lcmF0ZWQgc28gZmFyICovCiYjNDM7CWlwICYjNDM7PSAocHJvZyAtICpwcHJvZyk7CiYjNDM7CS8qIFdlIGVtaXQgYSBjYWxsLCBzbyB1cGRhdGUgY2FsbCBkZXB0aCBjb3VudGluZyAqLwomIzQzOwlpcCAmIzQzOz0geDg2X2NhbGxfZGVwdGhfZW1pdF9hY2NvdW50aW5nKCZhbXA7cHJvZywga2FzYW5fZnVuYywgaXApOwomIzQzOwkvKiBjYWxsIGthc2FuX2Z1bmMgKi8KJiM0MzsJaWYgKGVtaXRfY2FsbCgmYW1wO3Byb2csIGthc2FuX2Z1bmMsIGlwKSkKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwomIzQzOwlFTUlUMigweDQxLCAweDU5KTsKJiM0MzsJRU1JVDIoMHg0MSwgMHg1OCk7CiYjNDM7CUVNSVQxKDB4NUYpOwomIzQzOwlFTUlUMSgweDVFKTsKJiM0MzsJRU1JVDEoMHg1QSk7CiYjNDM7CUVNSVQxKDB4NTkpOwomIzQzOwlFTUlUMSgweDU4KTsKJiM0MzsKJiM0MzsJKnBwcm9nID0gcHJvZzsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0JQRl9KSVRfS0FTQU4gKi8KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogTERYOiBkc3RfcmVnID0gKih1OCopKHNyY19yZWcgJiM0Mzsgb2ZmKSAqLwogc3RhdGljIHZvaWQgZW1pdF9sZHgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZywgaW50IG9mZikKIHsKQEAgLTEzMTUsNiAmIzQzOzE0MTAsNjQgQEAgc3RhdGljIHZvaWQgZW1pdF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBpbmRleF9yZWcsIGludAogCSpwcHJvZyA9IHByb2c7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBlbWl0X3N0KHU4ICoqcHByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IGRzdF9yZWcsCiYjNDM7CQkgICAgczMyIG91dGdvaW5nX2FyZ19iYXNlLCB1MTYgb3V0Z29pbmdfcnNwKQomIzQzO3sKJiM0MzsJczMyIGltbTMyID0gaW5zbi0mZ3Q7aW1tOwomIzQzOwl1OCAqcHJvZyA9ICpwcHJvZzsKJiM0MzsJczMyIGluc25fb2ZmOwomIzQzOwomIzQzOwlzd2l0Y2ggKEJQRl9TSVpFKGluc24tJmd0O2NvZGUpKSB7CiYjNDM7CWNhc2UgQlBGX0I6CiYjNDM7CQlpZiAoaXNfZXJlZyhkc3RfcmVnKSkKJiM0MzsJCQlFTUlUMigweDQxLCAweEM2KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlFTUlUMSgweEM2KTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9IOgomIzQzOwkJaWYgKGlzX2VyZWcoZHN0X3JlZykpCiYjNDM7CQkJRU1JVDMoMHg2NiwgMHg0MSwgMHhDNyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJRU1JVDIoMHg2NiwgMHhDNyk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfVzoKJiM0MzsJCWlmIChpc19lcmVnKGRzdF9yZWcpKQomIzQzOwkJCUVNSVQyKDB4NDEsIDB4QzcpOwomIzQzOwkJZWxzZQomIzQzOwkJCUVNSVQxKDB4QzcpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0RXOgomIzQzOwkJaWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMgJmFtcDsmYW1wOyBpbnNuLSZndDtvZmYgPT0gLTgpIHsKJiM0MzsJCQkvKiBBcmcgNjogc3RvcmUgaW1tZWRpYXRlIGluIHI5IHJlZ2lzdGVyICovCiYjNDM7CQkJZW1pdF9tb3ZfaW1tNjQoJmFtcDtwcm9nLCBYODZfUkVHX1I5LCBpbW0zMiAmZ3Q7Jmd0OyAzMSwKJiM0MzsJCQkJICAgICAgICh1MzIpaW1tMzIpOwomIzQzOwkJCSpwcHJvZyA9IHByb2c7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwkJRU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4QzcpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW5zbl9vZmYgPSBpbnNuLSZndDtvZmY7CiYjNDM7CWlmIChkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TKSB7CiYjNDM7CQkvKgomIzQzOwkJICogQXJncyA3JiM0Mzs6IHJldmVyc2UgQlBGIG5lZ2F0aXZlIG9mZnNldHMgdG8KJiM0MzsJCSAqIHg4NiBwb3NpdGl2ZSByc3Agb2Zmc2V0cy4KJiM0MzsJCSAqIEJQRiBvZmY9LTE2IOKGkiBbcnNwJiM0MzswXSwgb2ZmPS0yNCDihpIgW3JzcCYjNDM7OF0sIC4uLgomIzQzOwkJICovCiYjNDM7CQlpbnNuX29mZiA9IG91dGdvaW5nX2FyZ19iYXNlIC0gb3V0Z29pbmdfcnNwIC0KJiM0MzsJCQlpbnNuX29mZiAtIDE2OwomIzQzOwkJZHN0X3JlZyA9IEJQRl9SRUdfRlA7CiYjNDM7CX0KJiM0MzsJaWYgKGlzX2ltbTgoaW5zbl9vZmYpKQomIzQzOwkJRU1JVDIoYWRkXzFyZWcoMHg0MCwgZHN0X3JlZyksIGluc25fb2ZmKTsKJiM0MzsJZWxzZQomIzQzOwkJRU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHg4MCwgZHN0X3JlZyksIGluc25fb2ZmKTsKJiM0MzsKJiM0MzsJRU1JVChpbW0zMiwgYnBmX3NpemVfdG9feDg2X2J5dGVzKEJQRl9TSVpFKGluc24tJmd0O2NvZGUpKSk7CiYjNDM7CSpwcHJvZyA9IHByb2c7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgZW1pdF9zdF9yMTIodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCBpbnQgb2ZmLCBpbnQgaW1tKQogewogCWVtaXRfc3RfaW5kZXgocHByb2csIHNpemUsIGRzdF9yZWcsIFg4Nl9SRUdfUjEyLCBvZmYsIGltbSk7CkBAIC0xNDIzLDE3ICYjNDM7MTU3NiwzMSBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtd19pbmRleCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgc2l6ZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgZHN0X3JlZywKLQkJCSAgICAgdTMyIHNyY19yZWcsIHMxNiBvZmYsIHU4IGJwZl9zaXplKQomIzQzO3N0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTggKipwcHJvZywKJiM0MzsJCQkgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTggKmlwLCB1MzIgZHN0X3JlZywKJiM0MzsJCQkgICAgIHUzMiBzcmNfcmVnLCBib29sIGFjY2Vzc2VzX3N0YWNrX29ubHkpCiB7CiYjNDM7CXUzMiBhdG9taWNfb3AgPSBpbnNuLSZndDtpbW07CiYjNDM7CWludCBlcnI7CiYjNDM7CiAJc3dpdGNoIChhdG9taWNfb3ApIHsKIAljYXNlIEJQRl9MT0FEX0FDUToKJiM0MzsJCWVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBwcHJvZywgc3JjX3JlZywgaW5zbiwgaXAsIGZhbHNlLAomIzQzOwkJCQkgICAgICAgYWNjZXNzZXNfc3RhY2tfb25seSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiAJCS8qIGRzdF9yZWcgPSBzbXBfbG9hZF9hY3F1aXJlKHNyY19yZWcgJiM0Mzsgb2ZmMTYpICovCi0JCWVtaXRfbGR4KHBwcm9nLCBicGZfc2l6ZSwgZHN0X3JlZywgc3JjX3JlZywgb2ZmKTsKJiM0MzsJCWVtaXRfbGR4KHBwcm9nLCBCUEZfU0laRShpbnNuLSZndDtjb2RlKSwgZHN0X3JlZywgc3JjX3JlZywKJiM0MzsJCQkgaW5zbi0mZ3Q7b2ZmKTsKIAkJYnJlYWs7CiAJY2FzZSBCUEZfU1RPUkVfUkVMOgomIzQzOwkJZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIHBwcm9nLCBkc3RfcmVnLCBpbnNuLCBpcCwgdHJ1ZSwKJiM0MzsJCQkJICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwogCQkvKiBzbXBfc3RvcmVfcmVsZWFzZShkc3RfcmVnICYjNDM7IG9mZjE2LCBzcmNfcmVnKSAqLwotCQllbWl0X3N0eChwcHJvZywgYnBmX3NpemUsIGRzdF9yZWcsIHNyY19yZWcsIG9mZik7CiYjNDM7CQllbWl0X3N0eChwcHJvZywgQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSksIGRzdF9yZWcsIHNyY19yZWcsCiYjNDM7CQkJIGluc24tJmd0O29mZik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX2VycigmIzM0O2JwZl9qaXQ6IHVua25vd24gYXRvbWljIGxvYWQvc3RvcmUgb3Bjb2RlICUwMnhcbiYjMzQ7LApAQCAtMTgxMSwxMCAmIzQzOzE5NzgsMTIgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICoKIAkJY29uc3QgczMyIGltbTMyID0gaW5zbi0mZ3Q7aW1tOwogCQl1MzIgZHN0X3JlZyA9IGluc24tJmd0O2RzdF9yZWc7CiAJCXUzMiBzcmNfcmVnID0gaW5zbi0mZ3Q7c3JjX3JlZzsKJiM0MzsJCWJvb2wgYWNjZXNzZXNfc3RhY2tfb25seTsKIAkJdTggYjIgPSAwLCBiMyA9IDA7CiAJCXU4ICpzdGFydF9vZl9sZHg7CiAJCXM2NCBqbXBfb2Zmc2V0OwogCQlzMzIgaW5zbl9vZmY7CiYjNDM7CQlpbnQgaW5zbl9pZHg7CiAJCXU4IGptcF9jb25kOwogCQl1OCAqZnVuYzsKIAkJaW50IG5vcHM7CkBAIC0xODMxLDYgJiM0MzsyMDAwLDEwIEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqCiAJCQlFTUlUX0VOREJSKCk7CiAKIAkJaXAgPSBpbWFnZSAmIzQzOyBhZGRyc1tpIC0gMV0gJiM0MzsgKHByb2cgLSB0ZW1wKTsKJiM0MzsJCWluc25faWR4ID0gaSAtIDEgJiM0MzsgYnBmX3Byb2ctJmd0O2F1eC0mZ3Q7c3VicHJvZ19zdGFydDsKJiM0MzsJCWFjY2Vzc2VzX3N0YWNrX29ubHkgPQomIzQzOwkJCWVudiA/ICFlbnYtJmd0O2luc25fYXV4X2RhdGFbaW5zbl9pZHhdLm5vbl9zdGFja19hY2Nlc3MgOgomIzQzOwkJCSAgICAgIGZhbHNlOwogCiAJCXN3aXRjaCAoaW5zbi0mZ3Q7Y29kZSkgewogCQkJLyogQUxVICovCkBAIC0yMjA3LDQ5ICYjNDM7MjM4MCwxNyBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKgogCQkJRU1JVF9MRkVOQ0UoKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBTVDogKih1OCopKGRzdF9yZWcgJiM0Mzsgb2ZmKSA9IGltbSAqLwogCQljYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfQjoKLQkJCWlmIChpc19lcmVnKGRzdF9yZWcpKQotCQkJCUVNSVQyKDB4NDEsIDB4QzYpOwotCQkJZWxzZQotCQkJCUVNSVQxKDB4QzYpOwotCQkJZ290byBzdDsKIAkJY2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX0g6Ci0JCQlpZiAoaXNfZXJlZyhkc3RfcmVnKSkKLQkJCQlFTUlUMygweDY2LCAweDQxLCAweEM3KTsKLQkJCWVsc2UKLQkJCQlFTUlUMigweDY2LCAweEM3KTsKLQkJCWdvdG8gc3Q7CiAJCWNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9XOgotCQkJaWYgKGlzX2VyZWcoZHN0X3JlZykpCi0JCQkJRU1JVDIoMHg0MSwgMHhDNyk7Ci0JCQllbHNlCi0JCQkJRU1JVDEoMHhDNyk7Ci0JCQlnb3RvIHN0OwogCQljYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfRFc6Ci0JCQlpZiAoZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUyAmYW1wOyZhbXA7IGluc24tJmd0O29mZiA9PSAtOCkgewotCQkJCS8qIEFyZyA2OiBzdG9yZSBpbW1lZGlhdGUgaW4gcjkgcmVnaXN0ZXIgKi8KLQkJCQllbWl0X21vdl9pbW02NCgmYW1wO3Byb2csIFg4Nl9SRUdfUjksIGltbTMyICZndDsmZ3Q7IDMxLCAodTMyKWltbTMyKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCUVNSVQyKGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpLCAweEM3KTsKLQotc3Q6CQkJaW5zbl9vZmYgPSBpbnNuLSZndDtvZmY7Ci0JCQlpZiAoZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUykgewotCQkJCS8qCi0JCQkJICogQXJncyA3JiM0Mzs6IHJldmVyc2UgQlBGIG5lZ2F0aXZlIG9mZnNldHMgdG8KLQkJCQkgKiB4ODYgcG9zaXRpdmUgcnNwIG9mZnNldHMuCi0JCQkJICogQlBGIG9mZj0tMTYg4oaSIFtyc3AmIzQzOzBdLCBvZmY9LTI0IOKGkiBbcnNwJiM0Mzs4XSwgLi4uCi0JCQkJICovCi0JCQkJaW5zbl9vZmYgPSBvdXRnb2luZ19hcmdfYmFzZSAtIG91dGdvaW5nX3JzcCAtIGluc25fb2ZmIC0gMTY7Ci0JCQkJZHN0X3JlZyA9IEJQRl9SRUdfRlA7Ci0JCQl9Ci0JCQlpZiAoaXNfaW1tOChpbnNuX29mZikpCi0JCQkJRU1JVDIoYWRkXzFyZWcoMHg0MCwgZHN0X3JlZyksIGluc25fb2ZmKTsKLQkJCWVsc2UKLQkJCQlFTUlUMV9vZmYzMihhZGRfMXJlZygweDgwLCBkc3RfcmVnKSwgaW5zbl9vZmYpOwomIzQzOwkJCWVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCAmYW1wO3Byb2csIGRzdF9yZWcsIGluc24sIGlwLAomIzQzOwkJCQkJICAgICAgIHRydWUsIGFjY2Vzc2VzX3N0YWNrX29ubHkpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiAKLQkJCUVNSVQoaW1tMzIsIGJwZl9zaXplX3RvX3g4Nl9ieXRlcyhCUEZfU0laRShpbnNuLSZndDtjb2RlKSkpOwomIzQzOwkJCWVtaXRfc3QoJmFtcDtwcm9nLCBpbnNuLCBkc3RfcmVnLCBvdXRnb2luZ19hcmdfYmFzZSwKJiM0MzsJCQkJb3V0Z29pbmdfcnNwKTsKIAkJCWJyZWFrOwogCiAJCQkvKiBTVFg6ICoodTgqKShkc3RfcmVnICYjNDM7IG9mZikgPSBzcmNfcmVnICovCkBAIC0yMjY3LDYgJiM0MzsyNDA4LDEwIEBAIHN0OgkJCWluc25fb2ZmID0gaW5zbi0mZ3Q7b2ZmOwogCQkJCWluc25fb2ZmID0gb3V0Z29pbmdfYXJnX2Jhc2UgLSBvdXRnb2luZ19yc3AgLSBpbnNuX29mZiAtIDE2OwogCQkJCWRzdF9yZWcgPSBCUEZfUkVHX0ZQOwogCQkJfQomIzQzOwkJCWVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCAmYW1wO3Byb2csIGRzdF9yZWcsIGluc24sIGlwLAomIzQzOwkJCQkJICAgICAgIHRydWUsIGFjY2Vzc2VzX3N0YWNrX29ubHkpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiAJCQllbWl0X3N0eCgmYW1wO3Byb2csIEJQRl9TSVpFKGluc24tJmd0O2NvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLCBpbnNuX29mZik7CiAJCQlicmVhazsKIApAQCAtMjQyOCw2ICYjNDM7MjU3MywxMiBAQCBzdDoJCQlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKIAkJCQkvKiBwb3B1bGF0ZSBqbXBfb2Zmc2V0IGZvciBKQUUgYWJvdmUgdG8ganVtcCB0byBzdGFydF9vZl9sZHggKi8KIAkJCQlzdGFydF9vZl9sZHggPSBwcm9nOwogCQkJCWVuZF9vZl9qbXBbLTFdID0gc3RhcnRfb2ZfbGR4IC0gZW5kX29mX2ptcDsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQllcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgJmFtcDtwcm9nLCBzcmNfcmVnLAomIzQzOwkJCQkJCSAgICAgICBpbnNuLCBpcCwgZmFsc2UsCiYjNDM7CQkJCQkJICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpOwomIzQzOwkJCQlpZiAoZXJyKQomIzQzOwkJCQkJcmV0dXJuIGVycjsKIAkJCX0KIAkJCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1ggfHwKIAkJCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfTUVNU1gpCkBAIC0yNDg5LDE1ICYjNDM7MjY0MCwxNiBAQCBzdDoJCQlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKIAkJCX0KIAkJCWZhbGx0aHJvdWdoOwogCQljYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1c6Ci0JCWNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6Ci0JCQlpZiAoaW5zbi0mZ3Q7aW1tID09IChCUEZfQU5EIHwgQlBGX0ZFVENIKSB8fAotCQkJICAgIGluc24tJmd0O2ltbSA9PSAoQlBGX09SIHwgQlBGX0ZFVENIKSB8fAotCQkJICAgIGluc24tJmd0O2ltbSA9PSAoQlBGX1hPUiB8IEJQRl9GRVRDSCkpIHsKLQkJCQlib29sIGlzNjQgPSBCUEZfU0laRShpbnNuLSZndDtjb2RlKSA9PSBCUEZfRFc7Ci0JCQkJdTMyIHJlYWxfc3JjX3JlZyA9IHNyY19yZWc7Ci0JCQkJdTMyIHJlYWxfZHN0X3JlZyA9IGRzdF9yZWc7Ci0JCQkJdTggKmJyYW5jaF90YXJnZXQ7Ci0KJiM0MzsJCWNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6IHsKJiM0MzsJCQlib29sIGlzNjQgPSBCUEZfU0laRShpbnNuLSZndDtjb2RlKSA9PSBCUEZfRFc7CiYjNDM7CQkJdTMyIHJlYWxfc3JjX3JlZyA9IHNyY19yZWc7CiYjNDM7CQkJdTMyIHJlYWxfZHN0X3JlZyA9IGRzdF9yZWc7CiYjNDM7CQkJdTggKmJyYW5jaF90YXJnZXQ7CiYjNDM7CQkJYm9vbCBpc19hdG9taWNfZmV0Y2ggPQomIzQzOwkJCQkoaW5zbi0mZ3Q7aW1tID09IChCUEZfQU5EIHwgQlBGX0ZFVENIKSB8fAomIzQzOwkJCQkgaW5zbi0mZ3Q7aW1tID09IChCUEZfT1IgfCBCUEZfRkVUQ0gpIHx8CiYjNDM7CQkJCSBpbnNuLSZndDtpbW0gPT0gKEJQRl9YT1IgfCBCUEZfRkVUQ0gpKTsKJiM0MzsJCQlpZiAoaXNfYXRvbWljX2ZldGNoKSB7CiAJCQkJLyoKIAkJCQkgKiBDYW4mIzM5O3QgYmUgaW1wbGVtZW50ZWQgd2l0aCBhIHNpbmdsZSB4ODYgaW5zbi4KIAkJCQkgKiBOZWVkIHRvIGRvIGEgQ01QWENIRyBsb29wLgpAQCAtMjUxMCw3ICYjNDM7MjY2MiwxNyBAQCBzdDoJCQlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKIAkJCQlpZiAoZHN0X3JlZyA9PSBCUEZfUkVHXzApCiAJCQkJCXJlYWxfZHN0X3JlZyA9IEJQRl9SRUdfQVg7CiAKJiM0MzsJCQkJaXAgJiM0Mzs9IDM7CiYjNDM7CQkJfQomIzQzOwkJCWlmICghYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKSB7CiYjNDM7CQkJCWVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCAmYW1wO3Byb2csIHJlYWxfZHN0X3JlZywKJiM0MzsJCQkJCQkgICAgICAgaW5zbiwgaXAsIGZhbHNlLAomIzQzOwkJCQkJCSAgICAgICBhY2Nlc3Nlc19zdGFja19vbmx5KTsKJiM0MzsJCQkJaWYgKGVycikKJiM0MzsJCQkJCXJldHVybiBlcnI7CiAJCQkJYnJhbmNoX3RhcmdldCA9IHByb2c7CiYjNDM7CQkJfQomIzQzOwkJCWlmIChpc19hdG9taWNfZmV0Y2gpIHsKIAkJCQkvKiBMb2FkIG9sZCB2YWx1ZSAqLwogCQkJCWVtaXRfbGR4KCZhbXA7cHJvZywgQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSksCiAJCQkJCSBCUEZfUkVHXzAsIHJlYWxfZHN0X3JlZywgaW5zbi0mZ3Q7b2ZmKTsKQEAgLTI1NDIsMTUgJiM0MzsyNzA0LDE2IEBAIHN0OgkJCWluc25fb2ZmID0gaW5zbi0mZ3Q7b2ZmOwogCQkJfQogCiAJCQlpZiAoYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKQotCQkJCWVyciA9IGVtaXRfYXRvbWljX2xkX3N0KCZhbXA7cHJvZywgaW5zbi0mZ3Q7aW1tLCBkc3RfcmVnLCBzcmNfcmVnLAotCQkJCQkJCWluc24tJmd0O29mZiwgQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkpOwomIzQzOwkJCQllcnIgPSBlbWl0X2F0b21pY19sZF9zdChlbnYsICZhbXA7cHJvZywgaW5zbiwgaXAsCiYjNDM7CQkJCQkJCWRzdF9yZWcsIHNyY19yZWcsCiYjNDM7CQkJCQkJCWFjY2Vzc2VzX3N0YWNrX29ubHkpOwogCQkJZWxzZQogCQkJCWVyciA9IGVtaXRfYXRvbWljX3JtdygmYW1wO3Byb2csIGluc24tJmd0O2ltbSwgZHN0X3JlZywgc3JjX3JlZywKIAkJCQkJCSAgICAgIGluc24tJmd0O29mZiwgQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQkJYnJlYWs7Ci0KJiM0MzsJCX0KIAkJY2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9COgogCQljYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfQVRPTUlDIHwgQlBGX0g6CiAJCQlpZiAoIWJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKaW5kZXggNzZiOGI3NjI3YTEwODUuLjg2ODEwMWVmNTAwMmFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTcyMyw2ICYjNDM7NzIzLDggQEAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhIHsKIAl1MTYgY29uc3RfcmVnX21hcF9tYXNrOwogCXUxNiBjb25zdF9yZWdfc3VicHJvZ19tYXNrOwogCXUzMiBjb25zdF9yZWdfdmFsc1sxMF07CiYjNDM7CS8qIGluc3RydWN0aW9uIGNhbiBhY2Nlc3Mgbm9uLXN0YWNrIG1lbW9yeSAqLwomIzQzOwlib29sIG5vbl9zdGFja19hY2Nlc3M7CiB9OwogCiAjZGVmaW5lIE1BWF9VU0VEX01BUFMgNjQgLyogbWF4IG51bWJlciBvZiBtYXBzIGFjY2Vzc2VkIGJ5IG9uZSBlQlBGIHByb2dyYW0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCmluZGV4IDE0YWNiMjQ1NTc0NmZjLi4xZWJjZDI0N2VmNGUzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCkBAIC0xMjEwLDEzICYjNDM7MTIxMCwxNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsCiAKICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbik7CiYjNDM7CQkJCSAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbiwKJiM0MzsJCQkJICAgICBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpOwogc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpicGZfZHVwX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7CiB2b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCSAgICAgICBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXgpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsCi0JCQkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiYjNDM7CQkJCQkJICAgdTMyIG9mZiwKJiM0MzsJCQkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLAomIzQzOwkJCQkJCSAgIHUzMiBsZW4sCiYjNDM7CQkJCQkJICAgczMyIGluc25fb2ZmX2luX3BhdGNoKQogewogCXJldHVybiBFUlJfUFRSKC1FTk9UU1VQUCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL0tjb25maWcgYi9rZXJuZWwvYnBmL0tjb25maWcKaW5kZXggZWIzZGUzNTczNGYwOTIuLmUxZjM4NTBkMmY1YTA3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9LY29uZmlnCkBAIC0xNyw2ICYjNDM7MTcsMTAgQEAgY29uZmlnIEhBVkVfQ0JQRl9KSVQKIGNvbmZpZyBIQVZFX0VCUEZfSklUCiAJYm9vbAogCiYjNDM7IyBLQVNBTiBzdXBwb3J0IGZvciBKSVQgY29tcGlsZXIKJiM0Mztjb25maWcgSEFWRV9FQlBGX0pJVF9LQVNBTgomIzQzOwlib29sCiYjNDM7CiAjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5CiAjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LgogY29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQKQEAgLTEwMSw0ICYjNDM7MTA1LDE3IEBAIGNvbmZpZyBCUEZfTFNNCiAKIAkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCiAKJiM0Mztjb25maWcgQlBGX0pJVF9LQVNBTgomIzQzOwlib29sCiYjNDM7CWRlcGVuZHMgb24gSEFWRV9FQlBGX0pJVF9LQVNBTgomIzQzOwlkZXBlbmRzIG9uIEtBU0FOX0dFTkVSSUMKJiM0MzsJZGVwZW5kcyBvbiBLQVNBTl9WTUFMTE9DCiYjNDM7CWRlcGVuZHMgb24gQlBGX0pJVAomIzQzOwlkZWZhdWx0IHkgaWYgS0FTQU4KJiM0MzsJaGVscAomIzQzOwkgIE1ha2VzIEpJVCBjb21waWxlciBpbnNlcnQgZ2VuZXJpYyBvdXRsaW5lIEtBU0FOIGNoZWNrcyBpbiBCUEYKJiM0MzsJICBwcm9ncmFtcyB3aGVuIHRoZXkgYXJlIGluc2VydGVkIGluIHRoZSBrZXJuZWwuIFRoaXMgZmVhdHVyZSBpcwomIzQzOwkgIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBpZiB0aGUgbmVlZGVkIHNldCBvZiBLQVNBTiBhbmQgQlBGCiYjNDM7CSAgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGVuYWJsZWQuCiYjNDM7CiBlbmRtZW51ICMgJiMzNDtCUEYgc3Vic3lzdGVtJiMzNDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmMKaW5kZXggNmUxOWEwMzBkYTZmMTMuLjFlMThiOTk5ZjFiNTY1IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2NvcmUuYwpAQCAtMTU5OCw3ICYjNDM7MTU5OCw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwCiAJCQljb250aW51ZTsKIAogCQlpZiAoZW52KQotCQkJdG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTsKJiM0MzsJCQl0bXAgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4sIHJld3JpdHRlbiAtIDEpOwogCQllbHNlCiAJCQl0bXAgPSBicGZfcGF0Y2hfaW5zbl9zaW5nbGUoY2xvbmUsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmMKaW5kZXggMTJhOGE0ZWI3NTdmMTguLmZlZWUxZjMzZGU5ZDU1IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZml4dXBzLmMKQEAgLTE1MiwxMiAmIzQzOzE1MiwyNSBAQCBzdGF0aWMgaW50IGdldF9jYWxsZWVfc3RhY2tfZGVwdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIH0KICNlbmRpZgogCiYjNDM7c3RhdGljIGJvb2wgaXNfbWVtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKQomIzQzO3sKJiM0MzsJaWYgKEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKSAhPSBCUEZfU1QgJmFtcDsmYW1wOwomIzQzOwkgICAgQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpICE9IEJQRl9TVFggJmFtcDsmYW1wOwomIzQzOwkgICAgQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpICE9IEJQRl9MRFgpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX01FTSB8fAomIzQzOwkJQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX01FTVNYIHx8CiYjNDM7CQlCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfQVRPTUlDKTsKJiM0Mzt9CiYjNDM7CiAvKiBzaW5nbGUgZW52LSZndDtwcm9nLSZndDtpbnNuaVtvZmZdIGluc3RydWN0aW9uIHdhcyByZXBsYWNlZCB3aXRoIHRoZSByYW5nZQogICogaW5zbmlbb2ZmLCBvZmYgJiM0MzsgY250KS4gIEFkanVzdCBjb3JyZXNwb25kaW5nIGluc25fYXV4X2RhdGEgYnkgY29weWluZwogICogWzAsIG9mZikgYW5kIFtvZmYsIGVuZCkgdG8gbmV3IGxvY2F0aW9ucywgc28gdGhlIHBhdGNoZWQgcmFuZ2Ugc3RheXMgemVybwogICovCiBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJCSBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLCB1MzIgb2ZmLCB1MzIgY250KQomIzQzOwkJCQkgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZywgdTMyIG9mZiwgdTMyIGNudCwKJiM0MzsJCQkJIHMzMiBpbnNuX29mZl9pbl9wYXRjaCkKIHsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmRhdGEgPSBlbnYtJmd0O2luc25fYXV4X2RhdGE7CiAJc3RydWN0IGJwZl9pbnNuICppbnNuID0gbmV3X3Byb2ctJmd0O2luc25zaTsKQEAgLTE3MSw4ICYjNDM7MTg0LDE0IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJICovCiAJZGF0YVtvZmZdLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSk7CiAKLQlpZiAoY250ID09IDEpCiYjNDM7CWlmIChjbnQgPT0gMSkgewomIzQzOwkJLyogQSBub24tbWVtb3J5IGFjY2Vzc2luZyBpbnNuIGNvdWxkIGhhdmUgYmVlbiByZXBsYWNlZCBieSBhCiYjNDM7CQkgKiBtZW1vcnkgYWNjZXNzaW5nIGluc24sIHN5c3RlbWF0aWNhbGx5IG1hcmsgaXQgZm9yIG5vbi1zdGFjawomIzQzOwkJICogYWNjZXNzCiYjNDM7CQkgKi8KJiM0MzsJCWRhdGFbb2ZmXS5ub25fc3RhY2tfYWNjZXNzID0gaXNfbWVtX2luc24oaW5zbik7CiAJCXJldHVybjsKJiM0MzsJfQogCXByb2dfbGVuID0gbmV3X3Byb2ctJmd0O2xlbjsKIAogCW1lbW1vdmUoZGF0YSAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSwgZGF0YSAmIzQzOyBvZmYsCkBAIC0xODIsNyAmIzQzOzIwMSwxOSBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkvKiBFeHBhbmQgaW5zbmlbb2ZmXSYjMzk7cyBzZWVuIGNvdW50IHRvIHRoZSBwYXRjaGVkIHJhbmdlLiAqLwogCQlkYXRhW2ldLnNlZW4gPSBvbGRfc2VlbjsKIAkJZGF0YVtpXS56ZXh0X2RzdCA9IGluc25faGFzX2RlZjMyKGluc24gJiM0MzsgaSk7CiYjNDM7CQlpZiAoaSA9PSBvZmYgJiM0MzsgaW5zbl9vZmZfaW5fcGF0Y2gpIHsKJiM0MzsJCQlkYXRhW2ldLm5vbl9zdGFja19hY2Nlc3MgPSBkYXRhW29mZiAmIzQzOyBjbnQgLSAxXS5ub25fc3RhY2tfYWNjZXNzOwomIzQzOwkJCWRhdGFbb2ZmICYjNDM7IGNudCAtIDFdLm5vbl9zdGFja19hY2Nlc3MgPSBmYWxzZTsKJiM0MzsJCX0gZWxzZSBpZiAoaXNfbWVtX2luc24oaW5zbiAmIzQzOyBpKSkgewomIzQzOwkJCWRhdGFbaV0ubm9uX3N0YWNrX2FjY2VzcyA9IHRydWU7CiYjNDM7CQl9CiAJfQomIzQzOwkvKgomIzQzOwkgKiBMYXN0IHNsb3QgaW5zdHJ1Y3Rpb24gY291bGQgYmUgYSBuZXdseSBnZW5lcmF0ZWQKJiM0MzsJICogQlBGX1NUL0JQRl9MRFgvQlBGX1NUWAomIzQzOwkgKi8KJiM0MzsJaWYgKGlzX21lbV9pbnNuKGluc24gJiM0Mzsgb2ZmICYjNDM7IGNudCAtIDEpICZhbXA7JmFtcDsgaW5zbl9vZmZfaW5fcGF0Y2ggIT0gY250IC0gMSkKJiM0MzsJCWRhdGFbb2ZmICYjNDM7IGNudCAtIDFdLm5vbl9zdGFja19hY2Nlc3MgPSB0cnVlOwogCiAJLyoKIAkgKiBUaGUgaW5kaXJlY3RfdGFyZ2V0IGZsYWcgb2YgdGhlIG9yaWdpbmFsIGluc3RydWN0aW9uIHdhcyBtb3ZlZCB0byB0aGUgbGFzdCBvZiB0aGUKQEAgLTI0NSw3ICYjNDM7Mjc2LDggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKQogfQogCiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pCiYjNDM7CQkJCSAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbiwKJiM0MzsJCQkJICAgICBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpCiB7CiAJc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZzsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm5ld19kYXRhID0gTlVMTDsKQEAgLTI2OSw3ICYjNDM7MzAxLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsCiAJCQkJZW52LSZndDtpbnNuX2F1eF9kYXRhW29mZl0ub3JpZ19pZHgpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JYWRqdXN0X2luc25fYXV4X2RhdGEoZW52LCBuZXdfcHJvZywgb2ZmLCBsZW4pOwomIzQzOwlhZGp1c3RfaW5zbl9hdXhfZGF0YShlbnYsIG5ld19wcm9nLCBvZmYsIGxlbiwgaW5zbl9vZmZfaW5fcGF0Y2gpOwogCWFkanVzdF9zdWJwcm9nX3N0YXJ0cyhlbnYsIG9mZiwgbGVuKTsKIAlhZGp1c3RfaW5zbl9hcnJheXMoZW52LCBvZmYsIGxlbik7CiAJYWRqdXN0X3Bva2VfZGVzY3MobmV3X3Byb2csIG9mZiwgbGVuKTsKQEAgLTY2OCw3ICYjNDM7NzAwLDcgQEAgaW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQlwYXRjaCA9IHpleHRfcGF0Y2g7CiAJCXBhdGNoX2xlbiA9IDI7CiBhcHBseV9wYXRjaF9idWZmZXI6Ci0JCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4pOwomIzQzOwkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgYWRqX2lkeCwgcGF0Y2gsIHBhdGNoX2xlbiwgMCk7CiAJCWlmICghbmV3X3Byb2cpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJZW52LSZndDtwcm9nID0gbmV3X3Byb2c7CkBAIC03MTMsNyAmIzQzOzc0NSw3IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWluc25fYnVmW2NudCYjNDM7JiM0MztdID0gQlBGX1NUWF9NRU0oQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzEsCiAJCQkJCQkgICAgICAtc3VicHJvZ3NbMF0uc3RhY2tfZGVwdGgpOwogCQkJaW5zbl9idWZbY250JiM0MzsmIzQzO10gPSBlbnYtJmd0O3Byb2ctJmd0O2luc25zaVswXTsKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQsIDEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCWVudi0mZ3Q7cHJvZyA9IG5ld19wcm9nOwpAQCAtNzM2LDcgJiM0Mzs3NjgsOCBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQl2ZXJpZmllcl9idWcoZW52LCAmIzM0O3Byb2xvZ3VlIGlzIHRvbyBsb25nJiMzNDspOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0gZWxzZSBpZiAoY250KSB7Ci0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LAomIzQzOwkJCQkJCSAgICAgICBjbnQgLSAxKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTc1OSw2ICYjNDM7NzkyLDcgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHsKIAkJYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc190IGNvbnZlcnRfY3R4X2FjY2VzczsKJiM0MzsJCXMzMiBpbnNuX29mZl9pbl9wYXRjaCA9IC0xOwogCQl1OCBtb2RlOwogCiAJCWlmIChlbnYtJmd0O2luc25fYXV4X2RhdGFbaSAmIzQzOyBkZWx0YV0ubm9zcGVjKSB7CkBAIC03NjgsNyAmIzQzOzgwMiw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCSpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfU1RfTk9TUEVDKCk7CiAJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247CiAJCQljbnQgPSBwYXRjaCAtIGluc25fYnVmOwotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgY250IC0gMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC04NDEsNyAmIzQzOzg3Niw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCSpwYXRjaCYjNDM7JiM0MzsgPSAqaW5zbjsKIAkJCSpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfU1RfTk9TUEVDKCk7CiAJCQljbnQgPSBwYXRjaCAtIGluc25fYnVmOwotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgMCk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC04NTYsMTYgJiM0Mzs4OTIsMjAgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJaWYgKCFvcHMtJmd0O2NvbnZlcnRfY3R4X2FjY2VzcykKIAkJCQljb250aW51ZTsKIAkJCWNvbnZlcnRfY3R4X2FjY2VzcyA9IG9wcy0mZ3Q7Y29udmVydF9jdHhfYWNjZXNzOwomIzQzOwkJCWluc25fb2ZmX2luX3BhdGNoID0gMDsKIAkJCWJyZWFrOwogCQljYXNlIFBUUl9UT19TT0NLRVQ6CiAJCWNhc2UgUFRSX1RPX1NPQ0tfQ09NTU9OOgogCQkJY29udmVydF9jdHhfYWNjZXNzID0gYnBmX3NvY2tfY29udmVydF9jdHhfYWNjZXNzOwomIzQzOwkJCWluc25fb2ZmX2luX3BhdGNoID0gMDsKIAkJCWJyZWFrOwogCQljYXNlIFBUUl9UT19UQ1BfU09DSzoKIAkJCWNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl90Y3Bfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3M7CiYjNDM7CQkJaW5zbl9vZmZfaW5fcGF0Y2ggPSAwOwogCQkJYnJlYWs7CiAJCWNhc2UgUFRSX1RPX1hEUF9TT0NLOgogCQkJY29udmVydF9jdHhfYWNjZXNzID0gYnBmX3hkcF9zb2NrX2NvbnZlcnRfY3R4X2FjY2VzczsKJiM0MzsJCQlpbnNuX29mZl9pbl9wYXRjaCA9IDA7CiAJCQlicmVhazsKIAkJY2FzZSBQVFJfVE9fQlRGX0lEOgogCQljYXNlIFBUUl9UT19CVEZfSUQgfCBQVFJfVU5UUlVTVEVEOgpAQCAtOTcxLDcgJiM0MzsxMDExLDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCQkJICAgICAgIHNpemUgKiA4LCAwKTsKIAogcGF0Y2hfaW5zbl9idWY6Ci0JCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCwKJiM0MzsJCQkJCSAgICAgICBpbnNuX29mZl9pbl9wYXRjaCk7CiAJCWlmICghbmV3X3Byb2cpCiAJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTQ2NCw3ICYjNDM7MTUwNSw3IEBAIHN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0CiAJICogb25lcyBmb3IgdGhlIGhpZGRlbiBzdWJwcm9nLiBIZW5jZSBhbGwgb2YgdGhlIGFkanVzdG1lbnQgb3BlcmF0aW9ucwogCSAqIGluIGJwZl9wYXRjaF9pbnNuX2RhdGEgYXJlIG5vLW9wcy4KIAkgKi8KLQlwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuIC0gMSwgcGF0Y2gsIGxlbik7CiYjNDM7CXByb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgZW52LSZndDtwcm9nLSZndDtsZW4gLSAxLCBwYXRjaCwgbGVuLCAtMSk7CiAJaWYgKCFwcm9nKQogCQlyZXR1cm4gLUVOT01FTTsKIAllbnYtJmd0O3Byb2cgPSBwcm9nOwpAQCAtMTU0OSw3ICYjNDM7MTU5MCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAogCQkJY250ID0gcGF0Y2ggLSBpbnNuX2J1ZjsKIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgMCk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xNTY5LDYgJiM0MzsxNjExLDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJYm9vbCBpc19zZGl2ID0gaXNkaXYgJmFtcDsmYW1wOyBpbnNuLSZndDtvZmYgPT0gMTsKIAkJCWJvb2wgaXNfc21vZCA9ICFpc2RpdiAmYW1wOyZhbXA7IGluc24tJmd0O29mZiA9PSAxOwogCQkJc3RydWN0IGJwZl9pbnNuICpwYXRjaCA9IGluc25fYnVmOwomIzQzOwkJCXMzMiBpbnNuX29mZl9pbl9wYXRjaDsKIAogCQkJaWYgKGlzX3NkaXYpIHsKIAkJCQkvKiBbUixXXXggc2RpdiAwIC0mZ3Q7IDAKQEAgLTE1OTUsNiAmIzQzOzE2MzgsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkJKnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7CiAJCQkJKnBhdGNoJiM0MzsmIzQzOyA9ICppbnNuOwogCQkJCWNudCA9IHBhdGNoIC0gaW5zbl9idWY7CiYjNDM7CQkJCWluc25fb2ZmX2luX3BhdGNoID0gY250IC0gMTsKIAkJCX0gZWxzZSBpZiAoaXNfc21vZCkgewogCQkJCS8qIFtSLFddeCBtb2QgMCAtJmd0OyBbUixXXXggKi8KIAkJCQkvKiBbUixXXXggbW9kIC0xIC0mZ3Q7IDAgKi8KQEAgLTE2MTEsNiAmIzQzOzE2NTUsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkJKnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9NT1YzMl9JTU0oaW5zbi0mZ3Q7ZHN0X3JlZywgMCk7CiAJCQkJKnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7CiAJCQkJKnBhdGNoJiM0MzsmIzQzOyA9ICppbnNuOwomIzQzOwkJCQlpbnNuX29mZl9pbl9wYXRjaCA9IHBhdGNoIC0gaW5zbl9idWYgLSAxOwogCiAJCQkJaWYgKCFpczY0KSB7CiAJCQkJCSpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpOwpAQCAtMTYyNiwxMiAmIzQzOzE2NzEsMTQgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCSpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpOwogCQkJCSpwYXRjaCYjNDM7JiM0MzsgPSAqaW5zbjsKIAkJCQljbnQgPSBwYXRjaCAtIGluc25fYnVmOwomIzQzOwkJCQlpbnNuX29mZl9pbl9wYXRjaCA9IGNudCAtIDE7CiAJCQl9IGVsc2UgewogCQkJCS8qIFtSLFddeCBtb2QgMCAtJmd0OyBbUixXXXggKi8KIAkJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX1JBV19JTlNOKChpczY0ID8gQlBGX0pNUCA6IEJQRl9KTVAzMikgfAogCQkJCQkJCUJQRl9KRVEgfCBCUEZfSywgaW5zbi0mZ3Q7c3JjX3JlZywKIAkJCQkJCQkwLCAxICYjNDM7IChpczY0ID8gMCA6IDEpLCAwKTsKIAkJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247CiYjNDM7CQkJCWluc25fb2ZmX2luX3BhdGNoID0gcGF0Y2ggLSBpbnNuX2J1ZiAtIDE7CiAKIAkJCQlpZiAoIWlzNjQpIHsKIAkJCQkJKnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7CkBAIC0xNjQwLDcgJiM0MzsxNjg3LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCWNudCA9IHBhdGNoIC0gaW5zbl9idWY7CiAJCQl9CiAKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIGluc25fb2ZmX2luX3BhdGNoKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE2NTYsNiAmIzQzOzE3MDQsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCSAgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTVNYKSkgewogCQkJc3RydWN0IGJwZl9pbnNuICpwYXRjaCA9IGluc25fYnVmOwogCQkJdTY0IHVhZGRyZXNzX2xpbWl0ID0gYnBmX2FyY2hfdWFkZHJlc3NfbGltaXQoKTsKJiM0MzsJCQlzMzIgaW5zbl9vZmZfaW5fcGF0Y2g7CiAKIAkJCWlmICghdWFkZHJlc3NfbGltaXQpCiAJCQkJZ290byBuZXh0X2luc247CkBAIC0xNjY2LDExICYjNDM7MTcxNSwxMyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfUlNILCBCUEZfUkVHX0FYLCAzMik7CiAJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pMRSwgQlBGX1JFR19BWCwgdWFkZHJlc3NfbGltaXQgJmd0OyZndDsgMzIsIDIpOwogCQkJKnBhdGNoJiM0MzsmIzQzOyA9ICppbnNuOwomIzQzOwkJCWluc25fb2ZmX2luX3BhdGNoID0gcGF0Y2ggLSBpbnNuX2J1ZiAtIDE7CiAJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTsKIAkJCSpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfTU9WNjRfSU1NKGluc24tJmd0O2RzdF9yZWcsIDApOwogCiAJCQljbnQgPSBwYXRjaCAtIGluc25fYnVmOwotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTY5MCw3ICYjNDM7MTc0MSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCX0KIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgMCk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xNzQzLDcgJiM0MzsxNzk1LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCSpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9NVUwsIG9mZl9yZWcsIC0xKTsKIAkJCWNudCA9IHBhdGNoIC0gaW5zbl9idWY7CiAKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIC0xKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE3ODgsNyAmIzQzOzE4NDEsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlpbnNuX2J1Zls2XSA9IEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR18xMCwgQlBGX1JFR19BWCwgc3RhY2tfb2ZmX2NudCk7CiAJCQljbnQgPSA3OwogCi0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKJiM0MzsJCQkJCQkgICAgICAgY250LCAzKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE4MDksNyAmIzQzOzE4NjMsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlpbnNuX2J1ZlszXSA9IEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR18xMCwgQlBGX1JFR19BWCwgc3RhY2tfb2ZmKTsKIAkJCWNudCA9IDQ7CiAKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIDIpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTgzMCw3ICYjNDM7MTg4NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWlmIChjbnQgPT0gMCkKIAkJCQlnb3RvIG5leHRfaW5zbjsKIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgY250IC0gMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xOTE1LDcgJiM0MzsxOTcxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCQkJCQkgbWFwKS0mZ3Q7aW5kZXhfbWFzayk7CiAJCQlpbnNuX2J1ZlsyXSA9ICppbnNuOwogCQkJY250ID0gMzsKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIGNudCAtIDEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTk0OCw3ICYjNDM7MjAwNSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWluc25fYnVmWzJdID0gKmluc247CiAJCQljbnQgPSAzOwogCi0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKJiM0MzsJCQkJCQkgICAgICAgY250LCBjbnQgLSAxKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE5NjcsNyAmIzQzOzIwMjUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlpbnNuX2J1ZlsxXSA9ICppbnNuOwogCQkJY250ID0gMjsKIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgY250IC0gMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yMDA3LDggJiM0MzsyMDY2LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCQl9CiAKLQkJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLAotCQkJCQkJCSAgICAgICBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKAomIzQzOwkJCQkJZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250LCAtMSk7CiAJCQkJaWYgKCFuZXdfcHJvZykKIAkJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIwOTEsNyAmIzQzOzIxNTAsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQljbnQgPSAzOwogCiAJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKLQkJCQkJCSAgICAgICBjbnQpOwomIzQzOwkJCQkJCSAgICAgICBjbnQsIC0xKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIxMTksNyAmIzQzOzIxNzgsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlpbnNuX2J1ZlswXSA9IEJQRl9BTFUzMl9SRUcoQlBGX1hPUiwgQlBGX1JFR18wLCBCUEZfUkVHXzApOwogCQkJY250ID0gMTsKICNlbmRpZgotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgLTEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjEzNyw3ICYjNDM7MjE5Nyw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWluc25fYnVmWzJdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7CiAJCQljbnQgPSAzOwogCi0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKJiM0MzsJCQkJCQkgICAgICAgY250LCAtMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yMTcxLDcgJiM0MzsyMjMyLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJaW5zbl9idWZbY250JiM0MzsmIzQzO10gPSBCUEZfSk1QX0EoMSk7CiAJCQlpbnNuX2J1ZltjbnQmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTsKIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgLTEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjIwMyw3ICYjNDM7MjI2NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCQljbnQgPSAxOwogCQkJfQogCi0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKJiM0MzsJCQkJCQkgICAgICAgY250LCAtMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yMjI5LDcgJiM0MzsyMjkyLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCWNudCA9IDI7CiAJCQl9CiAKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIC0xKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIyNDUsNyAmIzQzOzIzMDksOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkvKiBMb2FkIElQIGFkZHJlc3MgZnJvbSBjdHggLSAxNiAqLwogCQkJaW5zbl9idWZbMF0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAtMTYpOwogCi0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgMSk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIDEsIC0xKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIzMDAsNyAmIzQzOzIzNjUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlpbnNuX2J1ZlsxMF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUVOT0VOVCk7CiAJCQljbnQgPSAxMTsKIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgLTEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjMxOCw3ICYjNDM7MjM4NCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWluc25fYnVmWzFdID0gQlBGX0FUT01JQ19PUChCUEZfRFcsIEJQRl9YQ0hHLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCwgMCk7CiAJCQljbnQgPSAyOwogCi0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKJiM0MzsJCQkJCQkgICAgICAgY250LCAtMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yMzg2LDcgJiM0MzsyNDUzLDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkvKiBDb3B5IGZpcnN0IGFjdHVhbCBpbnNuIHRvIHByZXNlcnZlIGl0ICovCiAJCWluc25fYnVmW2NudCYjNDM7JiM0MztdID0gZW52LSZndDtwcm9nLSZndDtpbnNuc2lbc3VicHJvZ19zdGFydF07CiAKLQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgc3VicHJvZ19zdGFydCwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBzdWJwcm9nX3N0YXJ0LCBpbnNuX2J1ZiwgY250LCBjbnQgLSAxKTsKIAkJaWYgKCFuZXdfcHJvZykKIAkJCXJldHVybiAtRU5PTUVNOwogCQllbnYtJmd0O3Byb2cgPSBwcm9nID0gbmV3X3Byb2c7CkBAIC0yNDg1LDcgJiM0MzsyNTUyLDcgQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZyAqaW5saW5lX2JwZl9sb29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJaW5zbl9idWZbY250JiM0MzsmIzQzO10gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfOCwgQlBGX1JFR18xMCwgcjhfb2Zmc2V0KTsKIAogCSp0b3RhbF9jbnQgPSBjbnQ7Ci0JbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgcG9zaXRpb24sIGluc25fYnVmLCBjbnQpOwomIzQzOwluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBwb3NpdGlvbiwgaW5zbl9idWYsIGNudCwgLTEpOwogCWlmICghbmV3X3Byb2cpCiAJCXJldHVybiBuZXdfcHJvZzsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDUxZjc5NjVkNDJlMzI0Li4xMjQ2Y2U4ZjVmMGY0NiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMzE0NCw2ICYjNDM7MzE0NCwxMSBAQCBzdGF0aWMgdm9pZCBtYXJrX2luZGlyZWN0X3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4KQogCWVudi0mZ3Q7aW5zbl9hdXhfZGF0YVtpZHhdLmluZGlyZWN0X3RhcmdldCA9IHRydWU7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBtYXJrX25vbl9zdGFja19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCkKJiM0Mzt7CiYjNDM7CWVudi0mZ3Q7aW5zbl9hdXhfZGF0YVtpZHhdLm5vbl9zdGFja19hY2Nlc3MgPSB0cnVlOwomIzQzO30KJiM0MzsKICNkZWZpbmUgTFJfRlJBTUVOT19CSVRTCTQKICNkZWZpbmUgTFJfU1BJX0JJVFMJNgogI2RlZmluZSBMUl9FTlRSWV9CSVRTCShMUl9TUElfQklUUyAmIzQzOyBMUl9GUkFNRU5PX0JJVFMgJiM0MzsgMSkKQEAgLTYzMzMsNiAmIzQzOzYzMzgsMTAgQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGIKIAkJZWxzZQogCQkJY29lcmNlX3JlZ190b19zaXplX3N4KCZhbXA7cmVnc1t2YWx1ZV9yZWdub10sIHNpemUpOwogCX0KJiM0MzsKJiM0MzsJaWYgKCFlcnIgJmFtcDsmYW1wOyByZWctJmd0O3R5cGUgIT0gUFRSX1RPX1NUQUNLKQomIzQzOwkJbWFya19ub25fc3RhY2tfYWNjZXNzKGVudiwgaW5zbl9pZHgpOwomIzQzOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaW5zbl9hcnJheS5jCmluZGV4IDAyMjJhOWE1ZDA3NjE0Li4zN2M0MDVmYzJiMGQyMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaW5zbl9hcnJheS5jCkBAIC0yMjcsNDIgJiM0MzsyMjcsNiBAQCBzdGF0aWMgdm9pZCBjaGVja19pbmNvcnJlY3RfaW5kZXgodm9pZCkKIAljaGVja19taWRfaW5zbl9pbmRleCgpOwogfQogCi1zdGF0aWMgaW50IHNldF9icGZfaml0X2hhcmRlbihjaGFyICpsZXZlbCkKLXsKLQljaGFyIG9sZF9sZXZlbDsKLQlpbnQgZXJyID0gLTE7Ci0JaW50IGZkID0gLTE7Ci0KLQlmZCA9IG9wZW4oJiMzNDsvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4mIzM0OywgT19SRFdSIHwgT19OT05CTE9DSyk7Ci0JaWYgKGZkICZsdDsgMCkgewotCQlBU1NFUlRfRkFJTCgmIzM0O29wZW4gLi4uL2JwZl9qaXRfaGFyZGVuIHJldHVybmVkICVkIChlcnJubz0lZCkmIzM0OywgZmQsIGVycm5vKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWVyciA9IHJlYWQoZmQsICZhbXA7b2xkX2xldmVsLCAxKTsKLQlpZiAoZXJyICE9IDEpIHsKLQkJQVNTRVJUX0ZBSUwoJiMzNDtyZWFkIGZyb20gLi4uL2JwZl9qaXRfaGFyZGVuIHJldHVybmVkICVkIChlcnJubz0lZCkmIzM0OywgZXJyLCBlcnJubyk7Ci0JCWVyciA9IC0xOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlsc2VlayhmZCwgMCwgU0VFS19TRVQpOwotCi0JZXJyID0gd3JpdGUoZmQsIGxldmVsLCAxKTsKLQlpZiAoZXJyICE9IDEpIHsKLQkJQVNTRVJUX0ZBSUwoJiMzNDt3cml0ZSB0byAuLi4vYnBmX2ppdF9oYXJkZW4gcmV0dXJuZWQgJWQgKGVycm5vPSVkKSYjMzQ7LCBlcnIsIGVycm5vKTsKLQkJZXJyID0gLTE7Ci0JCWdvdG8gZW5kOwotCX0KLQotCWVyciA9IDA7Ci0JKmxldmVsID0gb2xkX2xldmVsOwotZW5kOgotCWlmIChmZCAmZ3Q7PSAwKQotCQljbG9zZShmZCk7Ci0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIHZvaWQgY2hlY2tfYmxpbmRuZXNzKHZvaWQpCiB7CiAJc3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7CkBAIC0yNzIsNyAmIzQzOzIzNiw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2JsaW5kbmVzcyh2b2lkKQogCQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMSksCiAJCUJQRl9FWElUX0lOU04oKSwKIAl9OwotCWludCBwcm9nX2ZkID0gLTEsIG1hcF9mZDsKJiM0MzsJaW50IHByb2dfZmQgPSAtMSwgbWFwX2ZkLCByZXQ7CiAJc3RydWN0IGJwZl9pbnNuX2FycmF5X3ZhbHVlIHZhbCA9IHt9OwogCWNoYXIgYnBmX2ppdF9oYXJkZW4gPSAmIzM5O0AmIzM5OzsgLyogbm9uLWV4aXpzdGluZyB2YWx1ZSAqLwogCWludCBpOwpAQCAtMjkxLDcgJiM0MzsyNTUsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19ibGluZG5lc3Modm9pZCkKIAkJZ290byBjbGVhbnVwOwogCiAJYnBmX2ppdF9oYXJkZW4gPSAmIzM5OzImIzM5OzsKLQlpZiAoc2V0X2JwZl9qaXRfaGFyZGVuKCZhbXA7YnBmX2ppdF9oYXJkZW4pKSB7CiYjNDM7CXJldCA9IHNldF9icGZfaml0X2hhcmRlbigmYW1wO2JwZl9qaXRfaGFyZGVuKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O3NldCBicGZfaml0X2hhcmRlbiYjMzQ7KSkgewogCQlicGZfaml0X2hhcmRlbiA9ICYjMzk7QCYjMzk7OyAvKiBvcGVuLCByZWFkIG9yIHdyaXRlIGZhaWxlZCA9Jmd0OyBubyB3cml0ZSB3YXMgZG9uZSAqLwogCQlnb3RvIGNsZWFudXA7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2thc2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmYwMDZiOTJlZTEzMWFjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uYwpAQCAtMCwwICYjNDM7MSw0MjUgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRlc3RzIHZhbGlkYXRpbmcgdGhhdCBLQVNBTiByZXBvcnRzIGFyZSBwcm9wZXJseSBpbnN0cnVtZW50ZWQgYW5kCiYjNDM7ICogZ2VuZXJhdGVkIG9uIGEgd2lkZSB2YXJpZXR5IG9mIGluc3RydWN0aW9ucy4gVGhlIHJ1bm5pbmcga2VybmVsIG5lZWRzCiYjNDM7ICoga2FzYW5fbXVsdGlfc2hvdCB0byBydW4gbXVsdGlwbGUga2FzYW4tZ2VuZXJhdGluZyBzdWJ0ZXN0cyBhdCBvbmNlCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5wcml2X2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2thc2FuLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrYXNhbl9oYXJkZW4uc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFNVQlRFU1RfTkFNRV9NQVhfTEVOCTEyOAomIzQzOyNkZWZpbmUgUFJPR19OQU1FX01BWF9MRU4JMTI4CiYjNDM7CiYjNDM7I2RlZmluZSBNQVhfTE9HX1NJWkUJCSg4ICogMTAyNCkKJiM0MzsjZGVmaW5lIFJFQURfQ0hVTktfU0laRQkJMjU2CiYjNDM7CiYjNDM7I2RlZmluZSBLQVNBTl9QQVRURVJOX1NMQUJfVUFGICYjMzQ7QlVHOiBLQVNBTjogc2xhYi11c2UtYWZ0ZXItZnJlZSAmIzM0OyBcCiYjNDM7CSYjMzQ7aW4gYnBmX3Byb2dfJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhfJXMmIzM0OwomIzQzOyNkZWZpbmUgS0FTQU5fUEFUVEVSTl9SRVBPUlQgJiMzNDslcyBvZiBzaXplICVkIGF0IGFkZHImIzM0OwomIzQzOwomIzQzO3N0YXRpYyBjaGFyIGtsb2dfYnVmZmVyW01BWF9MT0dfU0laRV07CiYjNDM7c3RhdGljIGNoYXIgcmVjb3JkW01BWF9MT0dfU0laRV07CiYjNDM7CiYjNDM7c3RydWN0IHRlc3Rfc3BlYyB7CiYjNDM7CWNoYXIgKnByb2dfdHlwZTsKJiM0MzsJYm9vbCBpc193cml0ZTsKJiM0MzsJYm9vbCBvbmx5XzMyX29yXzY0OwomIzQzOwlib29sIG5lZWRzX2xvYWRfYWNxX3N0b3JlX3JlbDsKJiM0MzsJYm9vbCBza2lwX211bHRpX3NpemVfdGVzdGluZzsKJiM0MzsJYm9vbCBza2lwX29uX3N0YWNrX3Rlc3Rpbmc7CiYjNDM7CWludCBydW5fc2l6ZTsKJiM0MzsJYm9vbCBleHBlY3Rfbm9fcmVwb3J0OwomIzQzOwlib29sIHJuZF9oaTMyOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB7CiYjNDM7CV9fdTggZGF0YV8xOwomIzQzOwlfX3UxNiBkYXRhXzI7CiYjNDM7CV9fdTMyIGRhdGFfNDsKJiM0MzsJX191NjQgZGF0YV84OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHRlc3RfY3R4IHsKJiM0MzsJX191OCAgcHJvZ190YWdbQlBGX1RBR19TSVpFXTsKJiM0MzsJc3RydWN0IGJwZl9vYmplY3QgKm9iajsKJiM0MzsJaW50ICphY2Nlc3Nfc2l6ZTsKJiM0MzsJYm9vbCBza2lwX2xvYWRfYWNxX3N0b3JlX3JlbDsKJiM0MzsJc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nOwomIzQzOwljaGFyIHByb2dfbmFtZVtTVUJURVNUX05BTUVfTUFYX0xFTl07CiYjNDM7CWludCBrbG9nX2ZkOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBvcGVuX2tlcm5lbF9sb2dzKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CWZkID0gb3BlbigmIzM0Oy9kZXYva21zZyYjMzQ7LCBPX1JET05MWSB8IE9fTk9OQkxPQ0spOwomIzQzOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNraXBfa2VybmVsX2xvZ3MoaW50IGZkKQomIzQzO3sKJiM0MzsJbHNlZWsoZmQsIDAsIFNFRUtfRU5EKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByZWFkX2tlcm5lbF9sb2dzKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgbWF4X2xlbikKJiM0Mzt7CiYjNDM7CXNpemVfdCB0b3RhbCA9IDA7CiYjNDM7CXNzaXplX3QgbjsKJiM0MzsKJiM0MzsJYnVmWzBdID0gJiMzOTtcMCYjMzk7OwomIzQzOwl3aGlsZSAoMSkgewomIzQzOwkJY2hhciAqbXNnLCAqZW9sOwomIzQzOwkJc2l6ZV90IGxlbjsKJiM0MzsKJiM0MzsJCW4gPSByZWFkKGZkLCByZWNvcmQsIHNpemVvZihyZWNvcmQpIC0gMSk7CiYjNDM7CQlpZiAobiAmbHQ7IDApIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRUFHQUlOKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCQlyZXR1cm4gbjsKJiM0MzsJCX0KJiM0MzsJCXJlY29yZFtuXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBFYWNoIGttc2cgcmVjb3JkIHN0YXJ0cyB3aXRoIHNvbWUgbWV0YWRhdGEsIHNlcGFyYXRlZAomIzQzOwkJICogZnJvbSB0aGUgYWN0dWFsIGNvbnRlbnQgYnkgYSBzZW1pLWNvbG9uCiYjNDM7CQkgKi8KJiM0MzsJCW1zZyA9IHN0cmNocihyZWNvcmQsICYjMzk7OyYjMzk7KTsKJiM0MzsJCWlmICghbXNnKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJbXNnJiM0MzsmIzQzOzsKJiM0MzsJCWVvbCA9IHN0cmNocihtc2csICYjMzk7XG4mIzM5Oyk7CiYjNDM7CQlpZiAoZW9sKQomIzQzOwkJCSplb2wgPSAmIzM5O1wwJiMzOTs7CiYjNDM7CiYjNDM7CQlsZW4gPSBzdHJsZW4obXNnKTsKJiM0MzsJCWlmICh0b3RhbCAmIzQzOyBsZW4gJiM0MzsgMiAmZ3Q7IG1heF9sZW4pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQltZW1jcHkoYnVmICYjNDM7IHRvdGFsLCBtc2csIGxlbik7CiYjNDM7CQl0b3RhbCAmIzQzOz0gbGVuOwomIzQzOwkJYnVmW3RvdGFsJiM0MzsmIzQzO10gPSAmIzM5O1xuJiMzOTs7CiYjNDM7CQlidWZbdG90YWxdID0gJiMzOTtcMCYjMzk7OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0b3RhbDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjaGVja19rYXNhbl9yZXBvcnRfaW5fa2VybmVsX2xvZ3MoY2hhciAqYnVmLCBzdHJ1Y3QgdGVzdF9jdHggKmN0eCwKJiM0MzsJCQkJCSAgICAgYm9vbCBpc193cml0ZSwgaW50IHNpemUpCiYjNDM7ewomIzQzOwljaGFyIGFjY2Vzc19sb2dbUkVBRF9DSFVOS19TSVpFXTsKJiM0MzsJY2hhciAqa2FzYW5fcmVwb3J0X3N0YXJ0OwomIzQzOwlpbnQgbnNpemU7CiYjNDM7CiYjNDM7CXNucHJpbnRmKGFjY2Vzc19sb2csIFJFQURfQ0hVTktfU0laRSwgS0FTQU5fUEFUVEVSTl9TTEFCX1VBRiwKJiM0MzsJCSBjdHgtJmd0O3Byb2dfdGFnWzBdLCBjdHgtJmd0O3Byb2dfdGFnWzFdLCBjdHgtJmd0O3Byb2dfdGFnWzJdLAomIzQzOwkJIGN0eC0mZ3Q7cHJvZ190YWdbM10sIGN0eC0mZ3Q7cHJvZ190YWdbNF0sIGN0eC0mZ3Q7cHJvZ190YWdbNV0sCiYjNDM7CQkgY3R4LSZndDtwcm9nX3RhZ1s2XSwgY3R4LSZndDtwcm9nX3RhZ1s3XSwgY3R4LSZndDtwcm9nX25hbWUpOwomIzQzOwkvKgomIzQzOwkgKiBTZWFyY2hlZCBrYXNhbiByZXBvcnQgaXMgdmFsaWQgaWYKJiM0MzsJICogLSBpdCBjb250YWlucyB0aGUgZXhwZWN0ZWQga2FzYW4gcGF0dGVybgomIzQzOwkgKiAtIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmF1bHR5IGFjY2VzcyBpcyBmb3VuZCBzb21ld2hlcmUKJiM0MzsJICogICBhZnRlciB0aGUgaGVhZGVyIChub3QgbmVjZXNzYXJpbHkgb24gdGhlIHZlcnkgbmV4dCBsaW5lLAomIzQzOwkgKiAgIGJlY2F1c2Ugb3RoZXIga2VybmVsIG1lc3NhZ2VzIG1heSBpbnRlcmxlYXZlKQomIzQzOwkgKiAtIGZhdWx0eSBhY2Nlc3MgcHJvcGVydGllcyBtYXRjaCB0aGUgdGVzdGVkIHR5cGUgYW5kIHNpemUKJiM0MzsJICovCiYjNDM7CWthc2FuX3JlcG9ydF9zdGFydCA9IHN0cnN0cihidWYsIGFjY2Vzc19sb2cpOwomIzQzOwomIzQzOwlpZiAoIWthc2FuX3JlcG9ydF9zdGFydCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwluc2l6ZSA9IHNucHJpbnRmKGFjY2Vzc19sb2csIFJFQURfQ0hVTktfU0laRSwgS0FTQU5fUEFUVEVSTl9SRVBPUlQsCiYjNDM7CQkJIGlzX3dyaXRlID8gJiMzNDtXcml0ZSYjMzQ7IDogJiMzNDtSZWFkJiMzNDssIHNpemUpOwomIzQzOwomIzQzOwlpZiAoIXN0cnN0cihrYXNhbl9yZXBvcnRfc3RhcnQsIGFjY2Vzc19sb2cpKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBleGVjX3N1YnRlc3Qoc3RydWN0IHRlc3RfY3R4ICpjdHgsIHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsCiYjNDM7CQkJIGludCBhY2Nlc3Nfc2l6ZSwgYm9vbCBvbl9zdGFjaykKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7CiYjNDM7CXN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm87CiYjNDM7CXVpbnQ4X3QgYnVmW0VUSF9ITEVOXSA9IHswfTsKJiM0MzsJaW50IHJldCwgcHJvZ19mZDsKJiM0MzsJX191MzIgaW5mb19sZW47CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGN0eC0mZ3Q7b2JqLAomIzQzOwkJCQkJCSAgICAgY3R4LSZndDtwcm9nX25hbWUpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoY3R4LSZndDtwcm9nLCAmIzM0O2ZpbmQgdGVzdCBwcm9nJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpbmZvX2xlbiA9IHNpemVvZihpbmZvKTsKJiM0MzsJbWVtc2V0KCZhbXA7aW5mbywgMCwgaW5mb19sZW4pOwomIzQzOwlwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC0mZ3Q7cHJvZyk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKHByb2dfZmQsICYjMzQ7Z2V0IHByb2cgZmQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CXJldCA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHByb2dfZmQsICZhbXA7aW5mbywgJmFtcDtpbmZvX2xlbik7CiYjNDM7CWlmICghQVNTRVJUX09LKHJldCwgJiMzNDtmZXRjaCBsb2FkZWQgcHJvZ3JhbSBpbmZvJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwltZW1jcHkoY3R4LSZndDtwcm9nX3RhZywgaW5mby50YWcsIEJQRl9UQUdfU0laRSk7CiYjNDM7CiYjNDM7CXNraXBfa2VybmVsX2xvZ3MoY3R4LSZndDtrbG9nX2ZkKTsKJiM0MzsKJiM0MzsJdG9wdHMuc3ogPSBzaXplb2Yoc3RydWN0IGJwZl90ZXN0X3J1bl9vcHRzKTsKJiM0MzsJdG9wdHMuZGF0YV9zaXplX2luID0gRVRIX0hMRU47CiYjNDM7CXRvcHRzLmRhdGFfaW4gPSBidWY7CiYjNDM7CWlmIChjdHgtJmd0O2FjY2Vzc19zaXplKQomIzQzOwkJKmN0eC0mZ3Q7YWNjZXNzX3NpemUgPSBhY2Nlc3Nfc2l6ZTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoY3R4LSZndDtwcm9nKSwKJiM0MzsJCQkJICAgICAmYW1wO3RvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O3J1biBwcm9nJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyZXQgPSByZWFkX2tlcm5lbF9sb2dzKGN0eC0mZ3Q7a2xvZ19mZCwga2xvZ19idWZmZXIsIE1BWF9MT0dfU0laRSk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHJldCwgMCwgJiMzNDtyZWFkIGtlcm5lbCBsb2dzJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyZXQgPSBjaGVja19rYXNhbl9yZXBvcnRfaW5fa2VybmVsX2xvZ3Moa2xvZ19idWZmZXIsIGN0eCwKJiM0MzsJCQkJCQl0ZXN0LSZndDtpc193cml0ZSwgYWNjZXNzX3NpemUpOwomIzQzOwlpZiAob25fc3RhY2sgfHwgdGVzdC0mZ3Q7ZXhwZWN0X25vX3JlcG9ydCkKJiM0MzsJCUFTU0VSVF9ORVEocmV0LCAwLCAmIzM0O25vIHJlcG9ydCBzaG91bGQgYmUgZ2VuZXJhdGVkJiMzNDspOwomIzQzOwllbHNlCiYjNDM7CQlBU1NFUlRfT0socmV0LCAmIzM0O3JlcG9ydCBzaG91bGQgYmUgZ2VuZXJhdGVkJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydW5fc3VidGVzdF93aXRoX3NpemVfYW5kX2xvY2F0aW9uKHN0cnVjdCB0ZXN0X2N0eCAqY3R4LAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsCiYjNDM7CQkJCQkgICAgICAgaW50IGFjY2Vzc19zaXplLAomIzQzOwkJCQkJICAgICAgIGJvb2wgb25fc3RhY2spCiYjNDM7ewomIzQzOwljaGFyIHN1YnRlc3RfbmFtZVtTVUJURVNUX05BTUVfTUFYX0xFTl07CiYjNDM7CiYjNDM7CWlmICh0ZXN0LSZndDtza2lwX211bHRpX3NpemVfdGVzdGluZykgewomIzQzOwkJc25wcmludGYoc3VidGVzdF9uYW1lLCBTVUJURVNUX05BTUVfTUFYX0xFTiwgJiMzNDslcyYjMzQ7LAomIzQzOwkJCSB0ZXN0LSZndDtwcm9nX3R5cGUpOwomIzQzOwkJc3RybmNweShjdHgtJmd0O3Byb2dfbmFtZSwgdGVzdC0mZ3Q7cHJvZ190eXBlLCBQUk9HX05BTUVfTUFYX0xFTik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzbnByaW50ZihzdWJ0ZXN0X25hbWUsIFNVQlRFU1RfTkFNRV9NQVhfTEVOLCAmIzM0OyVzXyVkXyVzJiMzNDssCiYjNDM7CQkJIHRlc3QtJmd0O3Byb2dfdHlwZSwgYWNjZXNzX3NpemUsCiYjNDM7CQkJIG9uX3N0YWNrID8gJiMzNDtvbl9zdGFjayYjMzQ7IDogJiMzNDtub3Rfb25fc3RhY2smIzM0Oyk7CiYjNDM7CQlzbnByaW50ZihjdHgtJmd0O3Byb2dfbmFtZSwgUFJPR19OQU1FX01BWF9MRU4sICYjMzQ7JXNfJXMmIzM0OywKJiM0MzsJCQkgdGVzdC0mZ3Q7cHJvZ190eXBlLAomIzQzOwkJCSBvbl9zdGFjayA/ICYjMzQ7b25fc3RhY2smIzM0OyA6ICYjMzQ7bm90X29uX3N0YWNrJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghdGVzdF9fc3RhcnRfc3VidGVzdChzdWJ0ZXN0X25hbWUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAodGVzdC0mZ3Q7bmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsICZhbXA7JmFtcDsgY3R4LSZndDtza2lwX2xvYWRfYWNxX3N0b3JlX3JlbCkgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWV4ZWNfc3VidGVzdChjdHgsIHRlc3QsIGFjY2Vzc19zaXplLCBvbl9zdGFjayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwKJiM0MzsJCQkJICBpbnQgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZV9hbmRfbG9jYXRpb24oY3R4LCB0ZXN0LCBzaXplLCBmYWxzZSk7CiYjNDM7CWlmICghdGVzdC0mZ3Q7c2tpcF9vbl9zdGFja190ZXN0aW5nKQomIzQzOwkJcnVuX3N1YnRlc3Rfd2l0aF9zaXplX2FuZF9sb2NhdGlvbihjdHgsIHRlc3QsIHNpemUsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydW5fc3VidGVzdChzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0LSZndDtza2lwX211bHRpX3NpemVfdGVzdGluZykgewomIzQzOwkJcnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgdGVzdC0mZ3Q7cnVuX3NpemUpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghdGVzdC0mZ3Q7b25seV8zMl9vcl82NCkgewomIzQzOwkJcnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgMSk7CiYjNDM7CQlydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCAyKTsKJiM0MzsJfQomIzQzOwlydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCA0KTsKJiM0MzsJcnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgOCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ1bl9ibGluZGluZ19zdWJ0ZXN0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9zcGVjIGJsaW5kaW5nX3NwZWMgPSB7CiYjNDM7CQkucHJvZ190eXBlID0gJiMzNDtzdF9ibGluZGVkJiMzNDssCiYjNDM7CQkuaXNfd3JpdGUgPSB0cnVlLAomIzQzOwl9OwomIzQzOwljaGFyIGJwZl9qaXRfaGFyZGVuID0gJiMzOTsyJiMzOTs7CiYjNDM7CXN0cnVjdCBrYXNhbl9oYXJkZW4gKnNrZWw7CiYjNDM7CXN0cnVjdCB0ZXN0X2N0eCAqY3R4OwomIzQzOwomIzQzOwlpZiAoIXRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzdF9ibGluZGVkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwljdHggPSBjYWxsb2MoMSwgc2l6ZW9mKCpjdHgpKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGN0eCwgJiMzNDthbGxvYyBibGluZGluZyBjdHgmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWN0eC0mZ3Q7a2xvZ19mZCA9IC0xOwomIzQzOwomIzQzOwlpZiAoc2V0X2JwZl9qaXRfaGFyZGVuKCZhbXA7YnBmX2ppdF9oYXJkZW4pKQomIzQzOwkJZ290byBmcmVlX2N0eDsKJiM0MzsKJiM0MzsJc2tlbCA9IGthc2FuX2hhcmRlbl9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtvcGVuIGFuZCBsb2FkIGJsaW5kZWQgcHJvZyYjMzQ7KSkKJiM0MzsJCWdvdG8gcmVzdG9yZTsKJiM0MzsKJiM0MzsJY3R4LSZndDtrbG9nX2ZkID0gb3Blbl9rZXJuZWxfbG9ncygpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjdHgtJmd0O2tsb2dfZmQsICYjMzQ7b3BlbiBrZXJuZWwgbG9ncyYjMzQ7KSkKJiM0MzsJCWdvdG8gZGVzdHJveTsKJiM0MzsKJiM0MzsJY3R4LSZndDtvYmogPSBza2VsLSZndDtvYmo7CiYjNDM7CXN0cm5jcHkoY3R4LSZndDtwcm9nX25hbWUsICYjMzQ7c3RfYmxpbmRlZCYjMzQ7LCBQUk9HX05BTUVfTUFYX0xFTik7CiYjNDM7CiYjNDM7CWV4ZWNfc3VidGVzdChjdHgsICZhbXA7YmxpbmRpbmdfc3BlYywgMSwgZmFsc2UpOwomIzQzOwomIzQzO2Rlc3Ryb3k6CiYjNDM7CWNsb3NlKGN0eC0mZ3Q7a2xvZ19mZCk7CiYjNDM7CWthc2FuX2hhcmRlbl9fZGVzdHJveShza2VsKTsKJiM0MztyZXN0b3JlOgomIzQzOwlzZXRfYnBmX2ppdF9oYXJkZW4oJmFtcDticGZfaml0X2hhcmRlbik7CiYjNDM7ZnJlZV9jdHg6CiYjNDM7CWZyZWUoY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB0ZXN0X3NwZWMgdGVzdHNbXSA9IHsKJiM0MzsJewomIzQzOwkJLnByb2dfdHlwZSA9ICYjMzQ7c3QmIzM0OywKJiM0MzsJCS5pc193cml0ZSA9IHRydWUKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLnByb2dfdHlwZSA9ICYjMzQ7c3R4JiMzNDssCiYjNDM7CQkuaXNfd3JpdGUgPSB0cnVlCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5wcm9nX3R5cGUgPSAmIzM0O2xkeCYjMzQ7LAomIzQzOwkJLmlzX3dyaXRlID0gZmFsc2UKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLnByb2dfdHlwZSA9ICYjMzQ7c2ltcGxlX2F0b21pYyYjMzQ7LAomIzQzOwkJLmlzX3dyaXRlID0gZmFsc2UsCiYjNDM7CQkub25seV8zMl9vcl82NCA9IHRydWUKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLnByb2dfdHlwZSA9ICYjMzQ7bG9hZF9hY3F1aXJlJiMzNDssCiYjNDM7CQkuaXNfd3JpdGUgPSBmYWxzZSwKJiM0MzsJCS5uZWVkc19sb2FkX2FjcV9zdG9yZV9yZWwgPSB0cnVlCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5wcm9nX3R5cGUgPSAmIzM0O3N0b3JlX3JlbGVhc2UmIzM0OywKJiM0MzsJCS5pc193cml0ZSA9IHRydWUsCiYjNDM7CQkubmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsID0gdHJ1ZQomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkucHJvZ190eXBlID0gJiMzNDtsZHhfcGF0Y2hlZCYjMzQ7LAomIzQzOwkJLmlzX3dyaXRlID0gZmFsc2UsCiYjNDM7CQkuc2tpcF9tdWx0aV9zaXplX3Rlc3RpbmcgPSB0cnVlLAomIzQzOwkJLnNraXBfb25fc3RhY2tfdGVzdGluZyA9IHRydWUsCiYjNDM7CQkucnVuX3NpemUgPSA0LAomIzQzOwkJLnJuZF9oaTMyID0gdHJ1ZQomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkucHJvZ190eXBlID0gJiMzNDtsZHhfcGF0Y2hlZF9vbl9zdGFjayYjMzQ7LAomIzQzOwkJLmlzX3dyaXRlID0gZmFsc2UsCiYjNDM7CQkuc2tpcF9tdWx0aV9zaXplX3Rlc3RpbmcgPSB0cnVlLAomIzQzOwkJLnNraXBfb25fc3RhY2tfdGVzdGluZyA9IHRydWUsCiYjNDM7CQkucnVuX3NpemUgPSA0LAomIzQzOwkJLmV4cGVjdF9ub19yZXBvcnQgPSB0cnVlLAomIzQzOwkJLnJuZF9oaTMyID0gdHJ1ZQomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkucHJvZ190eXBlID0gJiMzNDt2ZXJpZmllcl9wYXRoc19zdGFja19hbmRfbm9uX3N0YWNrJiMzNDssCiYjNDM7CQkuaXNfd3JpdGUgPSB0cnVlLAomIzQzOwkJLnNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nID0gdHJ1ZSwKJiM0MzsJCS5za2lwX29uX3N0YWNrX3Rlc3RpbmcgPSB0cnVlLAomIzQzOwkJLnJ1bl9zaXplID0gMQomIzQzOwl9CiYjNDM7fTsKJiM0MzsKJiM0Mzt2b2lkIHRlc3Rfa2FzYW4odm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsOwomIzQzOwlzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0OwomIzQzOwlzdHJ1Y3QgdGVzdF9jdHggKmN0eDsKJiM0MzsJc3RydWN0IGthc2FuICpza2VsOwomIzQzOwlfX3UzMiBrZXkgPSAwOwomIzQzOwlpbnQgaSwgcmV0OwomIzQzOwomIzQzOwljdHggPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB0ZXN0X2N0eCkpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoY3R4LCAmIzM0O2FsbG9jIHRlc3QgY3R4JiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIWlzX2ppdF9lbmFibGVkKCkgfHwgIWdldF9rYXNhbl9qaXRfZW5hYmxlZCgpKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIGVuZDsKJiM0MzsJfQomIzQzOwomIzQzOwlza2VsID0ga2FzYW5fX29wZW4oKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7b3BlbiBwcm9nJiMzNDspKQomIzQzOwkJZ290byBlbmQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHRlc3RzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZzsKJiM0MzsKJiM0MzsJCWlmICghdGVzdHNbaV0ucm5kX2hpMzIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoc2tlbC0mZ3Q7b2JqLAomIzQzOwkJCQkJCQl0ZXN0c1tpXS5wcm9nX3R5cGUpOwomIzQzOwkJaWYgKCFBU1NFUlRfT0tfUFRSKHByb2csICYjMzQ7ZmluZCBybmRfaGkzMiBwcm9nJiMzNDspKQomIzQzOwkJCWdvdG8gZGVzdHJveTsKJiM0MzsJCWJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgQlBGX0ZfVEVTVF9STkRfSEkzMik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0soa2FzYW5fX2xvYWQoc2tlbCksICYjMzQ7bG9hZCBwcm9nJiMzNDspKQomIzQzOwkJZ290byBkZXN0cm95OwomIzQzOwomIzQzOwljdHgtJmd0O29iaiA9IHNrZWwtJmd0O29iajsKJiM0MzsJY3R4LSZndDthY2Nlc3Nfc2l6ZSA9ICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDthY2Nlc3Nfc2l6ZTsKJiM0MzsJY3R4LSZndDtza2lwX2xvYWRfYWNxX3N0b3JlX3JlbCA9IHNrZWwtJmd0O2RhdGEtJmd0O3NraXBfbG9hZF9hY3Ffc3RvcmVfcmVsX3Rlc3RzOwomIzQzOwomIzQzOwljdHgtJmd0O2tsb2dfZmQgPSBvcGVuX2tlcm5lbF9sb2dzKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKGN0eC0mZ3Q7a2xvZ19mZCwgJiMzNDtvcGVuIGtlcm5lbCBsb2dzJiMzNDspKQomIzQzOwkJZ290byBkZXN0cm95OwomIzQzOwomIzQzOwkvKiBGaWxsIG1hcCB3aXRoIHJlY29nbml6YWJsZSB2YWx1ZXMgKi8KJiM0MzsJcmV0ID0gYnBmX21hcF9fbG9va3VwX2VsZW0oc2tlbC0mZ3Q7bWFwcy50ZXN0X21hcCwgJmFtcDtrZXksIHNpemVvZihrZXkpLAomIzQzOwkJCQkgICAmYW1wO3ZhbCwgc2l6ZW9mKHZhbCksIDApOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7Z2V0IG1hcCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xvc2U7CiYjNDM7CXZhbC5kYXRhXzEgPSAweEFBOwomIzQzOwl2YWwuZGF0YV8yID0gMHhCQkJCOwomIzQzOwl2YWwuZGF0YV80ID0gMHhDQ0NDQ0NDQzsKJiM0MzsJdmFsLmRhdGFfOCA9IDB4RERERERERERERERERERERDsKJiM0MzsJcmV0ID0gYnBmX21hcF9fdXBkYXRlX2VsZW0oc2tlbC0mZ3Q7bWFwcy50ZXN0X21hcCwgJmFtcDtrZXksIHNpemVvZihrZXkpLAomIzQzOwkJCQkgICAmYW1wO3ZhbCwgc2l6ZW9mKHZhbCksIDApOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7c2V0IG1hcCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xvc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHRlc3RzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXRlc3QgPSAmYW1wO3Rlc3RzW2ldOwomIzQzOwkJcnVuX3N1YnRlc3QoY3R4LCB0ZXN0KTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCbGluZGluZyBzdWJ0ZXN0IGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgYXMgaXQgbmVlZHMgdGhlCiYjNDM7CSAqIGNvcnJlc3BvbmRpbmcgcHJvZ3JhbSB0byBiZSBsb2FkZWQgd2l0aCBicGZfaml0X2hhcmRlbiByYWlzZWQKJiM0MzsJICovCiYjNDM7CXJ1bl9ibGluZGluZ19zdWJ0ZXN0KCk7CiYjNDM7CiYjNDM7Y2xvc2U6CiYjNDM7CWNsb3NlKGN0eC0mZ3Q7a2xvZ19mZCk7CiYjNDM7ZGVzdHJveToKJiM0MzsJa2FzYW5fX2Rlc3Ryb3koc2tlbCk7CiYjNDM7ZW5kOgomIzQzOwlmcmVlKGN0eCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uODJkZGNlMzA1OWFlZTEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW4uYwpAQCAtMCwwICYjNDM7MSwzOTQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiYjNDM7CiYjNDM7ZXh0ZXJuIHZvaWQgYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTsKJiM0MztleHRlcm4gdm9pZCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07CiYjNDM7CiYjNDM7aW50IGFjY2Vzc19zaXplOwomIzQzOwomIzQzO3N0cnVjdCBrYXNhbl93cml0ZV92YWwgewomIzQzOwlfX3U4IGRhdGFfMTsKJiM0MzsJX191MTYgZGF0YV8yOwomIzQzOwlfX3UzMiBkYXRhXzQ7CiYjNDM7CV9fdTY0IGRhdGFfODsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3UzMik7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IGthc2FuX3dyaXRlX3ZhbCk7CiYjNDM7fSB0ZXN0X21hcCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MztTRUMoJiMzNDt0Y3gvaW5ncmVzcyYjMzQ7KQomIzQzO2ludCBzdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3BvaXNvbigmYW1wO3ZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJc3dpdGNoIChhY2Nlc3Nfc2l6ZSkgewomIzQzOwljYXNlIDE6CiYjNDM7CQl2YWwuZGF0YV8xID0gMHhBQTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDI6CiYjNDM7CQl2YWwuZGF0YV8yID0gMHhBQTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDQ6CiYjNDM7CQl2YWwuZGF0YV80ID0gMHhBQTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDg6CiYjNDM7CQl2YWwuZGF0YV84ID0gMHhBQTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWJwZl9rZnVuY19rYXNhbl91bnBvaXNvbigmYW1wO3ZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjeC9pbmdyZXNzJiMzNDspCiYjNDM7aW50IHN0X25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7CiYjNDM7CV9fdTMyIGtleSA9IDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDt0ZXN0X21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJc3dpdGNoIChhY2Nlc3Nfc2l6ZSkgewomIzQzOwljYXNlIDE6CiYjNDM7CQl2YWwtJmd0O2RhdGFfMSA9IDB4QUE7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAyOgomIzQzOwkJdmFsLSZndDtkYXRhXzIgPSAweEFBOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgNDoKJiM0MzsJCXZhbC0mZ3Q7ZGF0YV80ID0gMHhBQTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDg6CiYjNDM7CQl2YWwtJmd0O2RhdGFfOCA9IDB4QUE7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgc3R4X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsOwomIzQzOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fcG9pc29uKCZhbXA7dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlzd2l0Y2ggKGFjY2Vzc19zaXplKSB7CiYjNDM7CWNhc2UgMToKJiM0MzsJCXZhbC5kYXRhXzEgPSBhY2Nlc3Nfc2l6ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDI6CiYjNDM7CQl2YWwuZGF0YV8yID0gYWNjZXNzX3NpemU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA0OgomIzQzOwkJdmFsLmRhdGFfNCA9IGFjY2Vzc19zaXplOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgODoKJiM0MzsJCXZhbC5kYXRhXzggPSBhY2Nlc3Nfc2l6ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWJwZl9rZnVuY19rYXNhbl91bnBvaXNvbigmYW1wO3ZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjeC9pbmdyZXNzJiMzNDspCiYjNDM7aW50IHN0eF9ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsOwomIzQzOwlfX3UzMiBrZXkgPSAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGVzdF9tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXN3aXRjaCAoYWNjZXNzX3NpemUpIHsKJiM0MzsJY2FzZSAxOgomIzQzOwkJdmFsLSZndDtkYXRhXzEgPSBhY2Nlc3Nfc2l6ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDI6CiYjNDM7CQl2YWwtJmd0O2RhdGFfMiA9IGFjY2Vzc19zaXplOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgNDoKJiM0MzsJCXZhbC0mZ3Q7ZGF0YV80ID0gYWNjZXNzX3NpemU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA4OgomIzQzOwkJdmFsLSZndDtkYXRhXzggPSBhY2Nlc3Nfc2l6ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0Y3gvaW5ncmVzcyYjMzQ7KQomIzQzO2ludCBsZHhfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24oJmFtcDt2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXN3aXRjaCAoYWNjZXNzX3NpemUpIHsKJiM0MzsJY2FzZSAxOgomIzQzOwkJX19zaW5rKHZhbC5kYXRhXzEpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgMjoKJiM0MzsJCV9fc2luayh2YWwuZGF0YV8yKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDQ6CiYjNDM7CQlfX3NpbmsodmFsLmRhdGFfNCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA4OgomIzQzOwkJX19zaW5rKHZhbC5kYXRhXzgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKCZhbXA7dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgbGR4X25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7CiYjNDM7CV9fdTMyIGtleSA9IDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDt0ZXN0X21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJc3dpdGNoIChhY2Nlc3Nfc2l6ZSkgewomIzQzOwljYXNlIDE6CiYjNDM7CQlfX3NpbmsodmFsLSZndDtkYXRhXzEpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgMjoKJiM0MzsJCV9fc2luayh2YWwtJmd0O2RhdGFfMik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA0OgomIzQzOwkJX19zaW5rKHZhbC0mZ3Q7ZGF0YV80KTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDg6CiYjNDM7CQlfX3NpbmsodmFsLSZndDtkYXRhXzgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjeC9pbmdyZXNzJiMzNDspCiYjNDM7aW50IGxkeF9wYXRjaGVkKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDsKJiM0MzsJX191MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3Rlc3RfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlfX3NpbmsodmFsLSZndDtkYXRhXzQpOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgbGR4X3BhdGNoZWRfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24oJmFtcDt2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CV9fc2luayh2YWwuZGF0YV80KTsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKCZhbXA7dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgc2ltcGxlX2F0b21pY19vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3BvaXNvbigmYW1wO3ZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJc3dpdGNoIChhY2Nlc3Nfc2l6ZSkgewomIzQzOwljYXNlIDQ6CiYjNDM7CQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO3ZhbC5kYXRhXzQsIDQpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgODoKJiM0MzsJCV9fc3luY19mZXRjaF9hbmRfYWRkKCZhbXA7dmFsLmRhdGFfOCwgOCk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oJmFtcDt2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0Y3gvaW5ncmVzcyYjMzQ7KQomIzQzO2ludCBzaW1wbGVfYXRvbWljX25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7CiYjNDM7CV9fdTMyIGtleSA9IDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDt0ZXN0X21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJc3dpdGNoIChhY2Nlc3Nfc2l6ZSkgewomIzQzOwljYXNlIDQ6CiYjNDM7CQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO3ZhbC0mZ3Q7ZGF0YV80LCA0KTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDg6CiYjNDM7CQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO3ZhbC0mZ3Q7ZGF0YV84LCA4KTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjaWZkZWYgX19CUEZfRkVBVFVSRV9MT0FEX0FDUV9TVE9SRV9SRUwKJiM0Mztib29sIHNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsX3Rlc3RzIFNFQygmIzM0Oy5kYXRhJiMzNDspID0gMDsKJiM0MzsKJiM0MztTRUMoJiMzNDt0Y3gvaW5ncmVzcyYjMzQ7KQomIzQzO2ludCBsb2FkX2FjcXVpcmVfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24oJmFtcDt2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXN3aXRjaCAoYWNjZXNzX3NpemUpIHsKJiM0MzsJY2FzZSAxOgomIzQzOwkJX19hdG9taWNfbG9hZF9uKCZhbXA7dmFsLmRhdGFfMSwgX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAyOgomIzQzOwkJX19hdG9taWNfbG9hZF9uKCZhbXA7dmFsLmRhdGFfMiwgX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA0OgomIzQzOwkJX19hdG9taWNfbG9hZF9uKCZhbXA7dmFsLmRhdGFfNCwgX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA4OgomIzQzOwkJX19hdG9taWNfbG9hZF9uKCZhbXA7dmFsLmRhdGFfOCwgX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oJmFtcDt2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0Y3gvaW5ncmVzcyYjMzQ7KQomIzQzO2ludCBsb2FkX2FjcXVpcmVfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDsKJiM0MzsJX191MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3Rlc3RfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlzd2l0Y2ggKGFjY2Vzc19zaXplKSB7CiYjNDM7CWNhc2UgMToKJiM0MzsJCV9fYXRvbWljX2xvYWRfbigmYW1wO3ZhbC0mZ3Q7ZGF0YV8xLCBfX0FUT01JQ19BQ1FVSVJFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDI6CiYjNDM7CQlfX2F0b21pY19sb2FkX24oJmFtcDt2YWwtJmd0O2RhdGFfMiwgX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA0OgomIzQzOwkJX19hdG9taWNfbG9hZF9uKCZhbXA7dmFsLSZndDtkYXRhXzQsIF9fQVRPTUlDX0FDUVVJUkUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgODoKJiM0MzsJCV9fYXRvbWljX2xvYWRfbigmYW1wO3ZhbC0mZ3Q7ZGF0YV84LCBfX0FUT01JQ19BQ1FVSVJFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0Y3gvaW5ncmVzcyYjMzQ7KQomIzQzO2ludCBzdG9yZV9yZWxlYXNlX29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsOwomIzQzOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fcG9pc29uKCZhbXA7dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlzd2l0Y2ggKGFjY2Vzc19zaXplKSB7CiYjNDM7CWNhc2UgMToKJiM0MzsJCV9fYXRvbWljX3N0b3JlX24oJmFtcDt2YWwuZGF0YV8xLCAweEFBLCBfX0FUT01JQ19SRUxFQVNFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDI6CiYjNDM7CQlfX2F0b21pY19zdG9yZV9uKCZhbXA7dmFsLmRhdGFfMiwgMHhCQkJCLCBfX0FUT01JQ19SRUxFQVNFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDQ6CiYjNDM7CQlfX2F0b21pY19zdG9yZV9uKCZhbXA7dmFsLmRhdGFfNCwgMHhDQ0NDQ0NDQywgX19BVE9NSUNfUkVMRUFTRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA4OgomIzQzOwkJX19hdG9taWNfc3RvcmVfbigmYW1wO3ZhbC5kYXRhXzgsIDB4RERERERERERERERERERERCwKJiM0MzsJCQkJIF9fQVRPTUlDX1JFTEVBU0UpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKCZhbXA7dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgc3RvcmVfcmVsZWFzZV9ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsOwomIzQzOwlfX3UzMiBrZXkgPSAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGVzdF9tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXN3aXRjaCAoYWNjZXNzX3NpemUpIHsKJiM0MzsJY2FzZSAxOgomIzQzOwkJX19hdG9taWNfc3RvcmVfbigmYW1wO3ZhbC0mZ3Q7ZGF0YV8xLCAweEFBLCBfX0FUT01JQ19SRUxFQVNFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDI6CiYjNDM7CQlfX2F0b21pY19zdG9yZV9uKCZhbXA7dmFsLSZndDtkYXRhXzIsIDB4QkJCQiwgX19BVE9NSUNfUkVMRUFTRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA0OgomIzQzOwkJX19hdG9taWNfc3RvcmVfbigmYW1wO3ZhbC0mZ3Q7ZGF0YV80LCAweENDQ0NDQ0NDLCBfX0FUT01JQ19SRUxFQVNFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDg6CiYjNDM7CQlfX2F0b21pY19zdG9yZV9uKCZhbXA7dmFsLSZndDtkYXRhXzgsIDB4RERERERERERERERERERERCwKJiM0MzsJCQkJIF9fQVRPTUlDX1JFTEVBU0UpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7Ym9vbCBza2lwX2xvYWRfYWNxX3N0b3JlX3JlbF90ZXN0cyBTRUMoJiMzNDsuZGF0YSYjMzQ7KSA9IDE7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgdmVyaWZpZXJfcGF0aHNfc3RhY2tfYW5kX25vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHN0YWNrX3ZhbCA9IHt9OwomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7CiYjNDM7CXZvaWQgKnB0cjsKJiM0MzsJX191MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3Rlc3RfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChhY2Nlc3Nfc2l6ZSkKJiM0MzsJCXB0ciA9IHZhbDsKJiM0MzsJZWxzZQomIzQzOwkJcHRyID0gJmFtcDtzdGFja192YWw7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2YoKnZhbCkpOwomIzQzOwkqKF9fdTggKilwdHIgPSAweEFBOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2YoKnZhbCkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBMSUNFTlNFW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgwOGQ3ZGE2NDQyMTYyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuX2hhcmRlbi5jCkBAIC0wLDAgJiM0MzsxLDQxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7ZXh0ZXJuIHZvaWQgYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTsKJiM0MztleHRlcm4gdm9pZCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07CiYjNDM7CiYjNDM7c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB7CiYjNDM7CV9fdTggZGF0YV8xOwomIzQzOwlfX3UxNiBkYXRhXzI7CiYjNDM7CV9fdTMyIGRhdGFfNDsKJiM0MzsJX191NjQgZGF0YV84OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7CV9fdHlwZShrZXksIF9fdTMyKTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKTsKJiM0Mzt9IHRlc3RfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO1NFQygmIzM0O3RjeC9pbmdyZXNzJiMzNDspCiYjNDM7aW50IHN0X2JsaW5kZWQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsOwomIzQzOwlfX3UzMiBrZXkgPSAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGVzdF9tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXZhbC0mZ3Q7ZGF0YV8xID0gMHhBQTsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgTElDRU5TRVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKaW5kZXggMzBmMWNkMjMwOTNjYmUuLjVkNmE4MzRmN2Q3NTc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKQEAgLTI3MSw2ICYjNDM7MjcxLDI2IEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3Qoc3RydWN0IHByb2dfdGVzdF9tZW1iZXIKIAkgKi8KIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfQlBGX0pJVF9LQVNBTgomIzQzOwomIzQzO2V4dGVybiB2b2lkIGthc2FuX3BvaXNvbihjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwgdTggdmFsdWUsIGJvb2wgaW5pdCk7CiYjNDM7CiYjNDM7I2RlZmluZSBLQVNBTl9TTEFCX0ZSRUUgMHhGQgomIzQzOwomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2b2lkICptZW0sIHUzMiBtZW1fX3N6KQomIzQzO3sKJiM0MzsJa2FzYW5fcG9pc29uKG1lbSwgbWVtX19zeiwgS0FTQU5fU0xBQl9GUkVFLCBmYWxzZSk7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opCiYjNDM7ewomIzQzOwlrYXNhbl9wb2lzb24obWVtLCBtZW1fX3N6LCAweDAwLCBmYWxzZSk7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opIHsgfQomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opIHsgfQomIzQzOyNlbmRpZgomIzQzOwogX19icGZfa2Z1bmMgc3RydWN0IGJwZl90ZXN0bW9kX2N0eCAqCiBicGZfdGVzdG1vZF9jdHhfY3JlYXRlKGludCAqZXJyKQogewpAQCAtNzQwLDYgJiM0Mzs3NjAsOCBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTsKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7CiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19rYXNhbl9wb2lzb24pCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbikKIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpCiAKIEJURl9JRF9MSVNUKGJwZl90ZXN0bW9kX2R0b3JfaWRzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jCmluZGV4IGM5NzBlNzc5M2RmY2JjLi43MzdmNjY4YjM1ZTIzYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYwpAQCAtNTE5LDYgJiM0Mzs1MTksMzggQEAgYm9vbCBpc19qaXRfZW5hYmxlZCh2b2lkKQogCXJldHVybiBlbmFibGVkOwogfQogCiYjNDM7aW50IHNldF9icGZfaml0X2hhcmRlbihjaGFyICpsZXZlbCkKJiM0Mzt7CiYjNDM7CWNoYXIgb2xkX2xldmVsOwomIzQzOwlpbnQgZXJyID0gLTE7CiYjNDM7CWludCBmZCA9IC0xOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oJiMzNDsvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4mIzM0OywgT19SRFdSIHwgT19OT05CTE9DSyk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWVyciA9IHJlYWQoZmQsICZhbXA7b2xkX2xldmVsLCAxKTsKJiM0MzsJaWYgKGVyciAhPSAxKSB7CiYjNDM7CQllcnIgPSAtMTsKJiM0MzsJCWdvdG8gZW5kOwomIzQzOwl9CiYjNDM7CiYjNDM7CWxzZWVrKGZkLCAwLCBTRUVLX1NFVCk7CiYjNDM7CiYjNDM7CWVyciA9IHdyaXRlKGZkLCBsZXZlbCwgMSk7CiYjNDM7CWlmIChlcnIgIT0gMSkgewomIzQzOwkJZXJyID0gLTE7CiYjNDM7CQlnb3RvIGVuZDsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSAwOwomIzQzOwkqbGV2ZWwgPSBvbGRfbGV2ZWw7CiYjNDM7ZW5kOgomIzQzOwlpZiAoZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZCkKIHsKIAl2b2lkICpidWY7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmgKaW5kZXggMmVkYzZmYjdmYzUyMTIuLmUwMDY0MmFmZTg2ZjQwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oCkBAIC01OSw2ICYjNDM7NTksNyBAQCBzdHJ1Y3QgYnBmX2luc247CiBpbnQgZ2V0X3hsYXRlZF9wcm9ncmFtKGludCBmZF9wcm9nLCBzdHJ1Y3QgYnBmX2luc24gKipidWYsIF9fdTMyICpjbnQpOwogaW50IHRlc3RpbmdfcHJvZ19mbGFncyh2b2lkKTsKIGJvb2wgaXNfaml0X2VuYWJsZWQodm9pZCk7CiYjNDM7aW50IHNldF9icGZfaml0X2hhcmRlbihjaGFyICpsZXZlbCk7CiBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZCk7CiAKICNlbmRpZiAvKiBfX1RFU1RJTkdfSEVMUEVSU19IICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jCmluZGV4IGY5OTdkN2VjOGZkMDg2Li4xMTIwMWI2NWEzZDRiNSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmMKQEAgLTE0MiwzICYjNDM7MTQyLDggQEAgYm9vbCBnZXRfdW5wcml2X2Rpc2FibGVkKHZvaWQpCiAJfQogCXJldHVybiBtaXRpZ2F0aW9uc19vZmY7CiB9CiYjNDM7CiYjNDM7Ym9vbCBnZXRfa2FzYW5faml0X2VuYWJsZWQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjb25maWdfY29udGFpbnMoJiMzNDtDT05GSUdfQlBGX0pJVF9LQVNBTj15JiMzNDspID09IDE7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuaAppbmRleCAxNTFmNjczMjk2NjUyMi4uYmM1ZjRjOTUzYzlkNmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oCkBAIC01LDMgJiM0Mzs1LDQgQEAKICNkZWZpbmUgVU5QUklWX1NZU0NUTCAmIzM0O2tlcm5lbC91bnByaXZpbGVnZWRfYnBmX2Rpc2FibGVkJiMzNDsKIAogYm9vbCBnZXRfdW5wcml2X2Rpc2FibGVkKHZvaWQpOwomIzQzO2Jvb2wgZ2V0X2thc2FuX2ppdF9lbmFibGVkKHZvaWQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM3NwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEwMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLQVNBTiBTdXBwb3J0IGZvciBCUEYgSklUIENvbXBpbGVyKioKCk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNpbmcgS0FTQU4gc3VwcG9ydCBmb3IgdGhlIEJQRiBKSVQgY29tcGlsZXIgb24geDg2XzY0LiBJdCBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBhIG5ldyBgQ09ORklHX0JQRl9KSVRfS0FTQU5gIGFuZCBgQ09ORklHX0hBVkVfRUJQRl9KSVRfS0FTQU5gLCBzb21lIG1vZGlmaWNhdGlvbnMgdG8gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgZm9yIGVtaXR0aW5nIEtBU0FOIGNoZWNrcyBkdXJpbmcgSklUIGNvbXBpbGF0aW9uLCBhbmQgc29tZSBhZGp1c3RtZW50cyBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIHRyYWNrIG1lbW9yeSBhY2Nlc3Nlcy4gV2UgYWxzbyBoYXZlIG5ldyB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW4uY2AsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLgoKVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gYSBjb3JlIHBhcnQgb2YgdGhlIGtlcm5lbCDigJMgdGhlIEJQRiBKSVQgY29tcGlsZXIuIEl0JiMzOTtzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUsIHdoaWNoIGlzIGEgc3Ryb25nIGluZGljYXRvci4gU28sIGJhc2VkIG9uIHRoYXQsIHRoZSBmaXJzdCB0aGluZyBpcyB0byBtYXJrIGBXb3J0aEZ1enppbmdgIGFzIGB0cnVlYC4KCk5vdywgd2UgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuICBXZSBoYXZlIHRoZSBuZXcgYEJQRl9KSVRfS0FTQU5gLCBhbmQgdGhlIGV4aXN0aW5nIGBIQVZFX0VCUEZfSklUX0tBU0FOYCwgYnV0IHdlIGNhbiYjMzk7dCBmb3JnZXQgYEtBU0FOX0dFTkVSSUNgLCBgS0FTQU5fVk1BTExPQ2AsIGBCUEZfSklUYCBhbmQgdGhlIGJhc2UgYEtBU0FOYC4KCk5leHQsIHdlIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMuIEluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCB3ZSBoYXZlIGBlbWl0X2thc2FuX2NoZWNrYCwgYGVtaXRfc3RgLCBgZW1pdF9hdG9taWNfbGRfc3RgLCBhbmQgYGRvX2ppdGAuIEluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgd2Ugc2VlIGBhZGp1c3RfaW5zbl9hdXhfZGF0YWAsIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCwgYGJwZl9kb19taXNjX2ZpeHVwc2AsIGFuZCBgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzYC4gRmluYWxseSwgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2Agd2UgaGF2ZSBgbWFya19ub25fc3RhY2tfYWNjZXNzYCBhbmQgYGNoZWNrX21lbV9hY2Nlc3NgLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgd2hpY2ggb2YgdGhlc2UgY2FuIGJlIGRpcmVjdGx5IGxldmVyYWdlZC4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBgZW1pdF9rYXNhbl9jaGVja2AsIGBlbWl0X3N0YCwgYGVtaXRfYXRvbWljX2xkX3N0YCwgYW5kIGBkb19qaXRgIGFyZSBzdGF0aWMgd2l0aGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiAgU28sIHRob3NlIGFyZSBvdXQuCgpCdXQgYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBgYnBmX2RvX21pc2NfZml4dXBzYCwgYGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3Nlc2AsIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AgaW4gYGtlcm5lbC9icGYvKmAgc2VlbSBwcm9taXNpbmcuIEFsc28sIHdlIGhhdmUgYGJwZl9pbnRfaml0X2NvbXBpbGVgLCB3aGljaCBjYWxscyBgZG9faml0YCB3aGljaCwgd2hpbGUgc3RhdGljLCBpcyBjb3JlIHRvIHRoZSBKSVQgY29tcGlsYXRpb24gcHJvY2Vzcy4KCldhaXQsIGlzIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBleHBvcnRlZD8gIExldCBtZSBxdWlja2x5IGNoZWNrLi4uIHllcywgaXQgaXMhICBFeGNlbGxlbnQuCgpTbywgbGV0JiMzOTtzIHVzZSBgYnBmX3BhdGNoX2luc25fZGF0YWAsIGBicGZfZG9fbWlzY19maXh1cHNgLCBhbmQgYGJwZl9pbnRfaml0X2NvbXBpbGVgLgoKQWxyaWdodCwgSSBzaG91bGQgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4gIFdlIHdpbGwgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4gIE91ciBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGBbJiMzNDticGZfcGF0Y2hfaW5zbl9kYXRhJiMzNDssICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDssICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7XWAuIE91ciBgRW5hYmxlQ29uZmlnc2Agd2lsbCBiZSBgWyYjMzQ7QlBGX0pJVF9LQVNBTiYjMzQ7LCAmIzM0O0tBU0FOX0dFTkVSSUMmIzM0OywgJiMzNDtLQVNBTl9WTUFMTE9DJiMzNDssICYjMzQ7QlBGX0pJVCYjMzQ7LCAmIzM0O0tBU0FOJiMzNDtdYC4gRmluYWxseSwgdGhlIGBSZWFzb25pbmdgIHdpbGwgYmU6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgS0FTQU4gc3VwcG9ydCB0byB0aGUgQlBGIEpJVCBjb21waWxlciBvbiB4ODZfNjQsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgbG9naWMuJiMzNDsKCkhtbSwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgYEtBU0FOX0dFTkVSSUNgIGFuZCBgS0FTQU5fVk1BTExPQ2AgYXJlIHVzdWFsbHkgZW5hYmxlZCBpbiBLQVNBTiBidWlsZHMuIExldCBtZSBjaGVjayBpZiBvbmx5IGBCUEZfSklUX0tBU0FOYCBpcyBlbm91Z2guIFllcywgYEJQRl9KSVRfS0FTQU5gIGRlcGVuZHMgb24gYEhBVkVfRUJQRl9KSVRfS0FTQU5gLCBgS0FTQU5fR0VORVJJQ2AsIGBLQVNBTl9WTUFMTE9DYCwgYW5kIGBCUEZfSklUYC4KCk9rYXksIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgZXZlcnl0aGluZyBsb29rcyBjb3JyZWN0LiBZZXAsIGFsbCBnb29kCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz00MDAyPXN0cnVjdCB4NjRfaml0X2RhdGEge1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDEzLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMTQ6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDE1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDYzMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipKSVQgQ29tcGlsYXRpb24gLSBFbnRyeSBQb2ludCBhbmQgUGF0Y2hpbmcqKgoKQWxyaWdodCwgc28gYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIHRoZSBKdXN0LUluLVRpbWUgY29tcGlsZXIgb24geDg2LCBnb3QgaXQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIGJlZ2lucy4gTm93LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gaG93IHRoZSBpbnN0cnVjdGlvbnMgYXJlIGFjdHVhbGx5IGhhbmRsZWQuIExvb2tzIGxpa2UgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYGJwZl9wYXRjaF9pbnNuX2RhdGFgIG5leHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGF0YSB3aXRoaW4gaW5zdHJ1Y3Rpb25zIGdldHMgbW9kaWZpZWQgb3IgYWx0ZXJlZCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uIGFuZCBwYXRjaGluZyBwcm9jZXNzLiBLbm93aW5nIGhvdyBpdCYjMzk7cyBoYW5kbGVkIGlzIGVzc2VudGlhbCB0byBvcHRpbWl6aW5nIHRoZSBnZW5lcmF0ZWQgY29kZSwgcmlnaHQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3BhdGNoX2luc25fZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9maXh1cHMuYz0yNjQ9c3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjc3LVxua2VybmVsL2JwZi9maXh1cHMuYzoyNzg6c3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI3OS1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTYxND1pbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy03MDItYXBwbHlfcGF0Y2hfYnVmZmVyOlxua2VybmVsL2JwZi9maXh1cHMuYzo3MDM6XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4sIDApO1xua2VybmVsL2JwZi9maXh1cHMuYy03MDQtXHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz03MjA9aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzQ3LVx0XHRcdGluc25fYnVmW2NudCYjNDM7JiM0MztdID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpWzBdO1xua2VybmVsL2JwZi9maXh1cHMuYzo3NDg6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCwgMSk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0OS1cdFx0XHRpZiAoIW5ld19wcm9nKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzcwLVx0XHR9IGVsc2UgaWYgKGNudCkge1xua2VybmVsL2JwZi9maXh1cHMuYzo3NzE6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzcyLVx0XHRcdFx0XHRcdCAgICAgICBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwNC1cdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xua2VybmVsL2JwZi9maXh1cHMuYzo4MDU6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwNi1cdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTg3OC1cdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xua2VybmVsL2JwZi9maXh1cHMuYzo4Nzk6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTg4MC1cdFx0XHRcdFx0XHQgICAgICAgY250LCAwKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwMTMtcGF0Y2hfaW5zbl9idWY6XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEwMTQ6XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwMTUtXHRcdFx0XHRcdCAgICAgICBpbnNuX29mZl9pbl9wYXRjaCk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNDkzPXN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA1LVx0ICogb25lcyBmb3IgdGhlIGhpZGRlbiBzdWJwcm9nLiBIZW5jZSBhbGwgb2YgdGhlIGFkanVzdG1lbnQgb3BlcmF0aW9uc1xua2VybmVsL2JwZi9maXh1cHMuYzoxNTA2Olx0ICogaW4gYnBmX3BhdGNoX2luc25fZGF0YSBhcmUgbm8tb3BzLlxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA3LVx0ICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE1MDg6XHRwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbiAtIDEsIHBhdGNoLCBsZW4sIC0xKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwOS1cdGlmICghcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE1MjI9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTU5Mi1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTU5MzpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMTU5NC1cdFx0XHRcdFx0XHQgICAgICAgY250LCAwKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE2ODktXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE2OTA6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE2OTEtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTcyMi1cdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xua2VybmVsL2JwZi9maXh1cHMuYzoxNzIzOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzI0LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIGluc25fb2ZmX2luX3BhdGNoKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NDMtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE3NDQ6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NDUtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMCk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNzk3LVxua2VybmVsL2JwZi9maXh1cHMuYzoxNzk4Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzk5LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NDMtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE4NDQ6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NDUtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMyk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xODY1LVxua2VybmVsL2JwZi9maXh1cHMuYzoxODY2Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0xODY3LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIDIpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTg4Ny1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTg4ODpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg4OS1cdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE5NzMtXHRcdFx0Y250ID0gMztcbmtlcm5lbC9icGYvZml4dXBzLmM6MTk3NDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMTk3NS1cdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMDctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMDg6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMDktXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgY250IC0gMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMDI3LVxua2VybmVsL2JwZi9maXh1cHMuYzoyMDI4Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDI5LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjA2OC1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjA2OTpcdFx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShcbmtlcm5lbC9icGYvZml4dXBzLmMtMjA3MC1cdFx0XHRcdFx0ZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250LCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMTUxLVxua2VybmVsL2JwZi9maXh1cHMuYzoyMTUyOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTUzLVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxODAtI2VuZGlmXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxODE6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxODItXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjE5OS1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjIwMDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMjIwMS1cdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMjM0LVxua2VybmVsL2JwZi9maXh1cHMuYzoyMjM1Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjM2LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyNjg6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjktXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5NC1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjI5NTpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5Ni1cdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMzExLVxua2VybmVsL2JwZi9maXh1cHMuYzoyMzEyOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzEzLVx0XHRcdFx0XHRcdCAgICAgICAxLCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMzY3LVxua2VybmVsL2JwZi9maXh1cHMuYzoyMzY4Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzY5LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzODYtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzODc6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzODgtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ1NS1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjQ1NjpcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgc3VicHJvZ19zdGFydCwgaW5zbl9idWYsIGNudCwgY250IC0gMSk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NTctXHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yNDYzLVx0XHQgKiB0byBpbnNuIGFmdGVyIEJQRl9TVCB0aGF0IGluaXRzIG1heV9nb3RvIGNvdW50Llxua2VybmVsL2JwZi9maXh1cHMuYzoyNDY0Olx0XHQgKiBBZGp1c3RtZW50IHdpbGwgc3VjY2VlZCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBkaWRuJiMzOTt0IGZhaWwuXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NjUtXHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MjQ5Mz1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICppbmxpbmVfYnBmX2xvb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1NTQtXHQqdG90YWxfY250ID0gY250O1xua2VybmVsL2JwZi9maXh1cHMuYzoyNTU1Olx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgcG9zaXRpb24sIGluc25fYnVmLCBjbnQsIC0xKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMjU1Ni1cdGlmICghbmV3X3Byb2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5ODYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gYmVzdCBhcHByb2FjaCBmdXp6aW5nIHRoZSBCUEYgc3Vic3lzdGVtLiBJIHNlZSB0aGF0IGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBpcyBkZWZpbmVkIGFuZCBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAuIEkgd2FzIGNvbnNpZGVyaW5nIGZvY3VzaW5nIG9uIGl0LCBhbG9uZyB3aXRoIGBicGZfZG9fbWlzY19maXh1cHNgIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAuCgpIYW5nIG9uLCBgYnBmX3BhdGNoX2luc25fZGF0YWAgaXNuJiMzOTt0IGFjdHVhbGx5IGV4cG9ydGVkIGFzIGEgbW9kdWxlIHN5bWJvbCwgaXQmIzM5O3MganVzdCBhIGdsb2JhbCBmdW5jdGlvbi4gSXQgY291bGQgc3RpbGwgYmUgZnV6emVkIGlmIHN5emthbGxlciBjYW4gcmVhY2ggaXQgc29tZWhvdywgYnV0IGlkZWFsbHksIEkgd2FudCB0byB0YXJnZXQgdGhlIEJQRiB2ZXJpZmllciBvciB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MgZGlyZWN0bHkuCgpUaGVyZWZvcmUsIEkgdGhpbmsgYSBtdWNoIGJldHRlciBzZXQgb2YgZm9jdXMgc3ltYm9scyBhcmU6CiogICBgYnBmX2ludF9qaXRfY29tcGlsZWAgKHRoZSBKSVQgZW50cnkgcG9pbnQpCiogICBgYnBmX3BhdGNoX2luc25fZGF0YWAKKiAgIGBicGZfZG9fbWlzY19maXh1cHNgICh0aGUgZml4dXAgZW50cnkgcG9pbnQpCiogICBgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzYAoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBhbmQgdGhlbiBJIHdpbGwgZm9jdXMgb24gYGJwZl9pbnRfaml0X2NvbXBpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NvcmUuYz0yNjIwPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjI2LVx0aWYgKCFicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKVxua2VybmVsL2JwZi9jb3JlLmM6MjYyNzpcdFx0cmV0dXJuIGJwZl9pbnRfaml0X2NvbXBpbGUoZW52LCBwcm9nKTtcbmtlcm5lbC9icGYvY29yZS5jLTI2MjgtXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjY0OC1cbmtlcm5lbC9icGYvY29yZS5jOjI2NDk6XHRwcm9nID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xua2VybmVsL2JwZi9jb3JlLmMtMjY1MC1cdGlmIChwcm9nLVx1MDAzZWppdGVkKSB7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjY2Nz1zdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpmcCxcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjg2LVx0ICogYmxpbmRpbmcgaXMgYWN0aXZlLiBIb3dldmVyLCBpbiBjYXNlIG9mIGVycm9yIGR1cmluZ1xua2VybmVsL2JwZi9jb3JlLmM6MjY4NzpcdCAqIGJsaW5kaW5nLCBicGZfaW50X2ppdF9jb21waWxlKCkgbXVzdCBhbHdheXMgcmV0dXJuIGFcbmtlcm5lbC9icGYvY29yZS5jLTI2ODgtXHQgKiB2YWxpZCBwcm9ncmFtLCB3aGljaCBpbiB0aGlzIGNhc2Ugd291bGQgc2ltcGx5IG5vdFxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMyMDk9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90YWlsX2NhbGxfcHJvdG8gPSB7XG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzIyMS0vKiBTdHViIGZvciBKSVRzIHRoYXQgb25seSBzdXBwb3J0IGNCUEYuIGVCUEYgcHJvZ3JhbXMgYXJlIGludGVycHJldGVkLlxua2VybmVsL2JwZi9jb3JlLmM6MzIyMjogKiBJdCBpcyBlbmNvdXJhZ2VkIHRvIGltcGxlbWVudCBicGZfaW50X2ppdF9jb21waWxlKCkgaW5zdGVhZCwgc28gdGhhdFxua2VybmVsL2JwZi9jb3JlLmMtMzIyMy0gKiBlQlBGIGFuZCBpbXBsaWNpdGx5IGFsc28gY0JQRiBjYW4gZ2V0IEpJVGVkIVxua2VybmVsL2JwZi9jb3JlLmMtMzIyNC0gKi9cbmtlcm5lbC9icGYvY29yZS5jOjMyMjU6c3RydWN0IGJwZl9wcm9nICogX193ZWFrIGJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxua2VybmVsL2JwZi9jb3JlLmMtMzIyNi17XG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzIzMC0vKiBTdHViIGZvciBKSVRzIHRoYXQgc3VwcG9ydCBlQlBGLiBBbGwgY0JQRiBjb2RlIGdldHMgdHJhbnNmb3JtZWQgaW50b1xua2VybmVsL2JwZi9jb3JlLmM6MzIzMTogKiBlQlBGIGJ5IHRoZSBrZXJuZWwgYW5kIGlzIGxhdGVyIGNvbXBpbGVkIGJ5IGJwZl9pbnRfaml0X2NvbXBpbGUoKS5cbmtlcm5lbC9icGYvY29yZS5jLTMyMzItICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUyMTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkZvY3VzaW5nIG9uIEJQRiBKSVQgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0IGRyaWxsaW5nIGRvd24uIFRoYXQmIzM5O3MgYSBzb2xpZCBzeW1ib2wgdG8gYW5jaG9yIG9uLiBOb3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIGBicGZfZG9fbWlzY19maXh1cHNgLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgY29tcGlsYXRpb24gcHJvY2Vzcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvbXBpbGVyIG1hbmFnZXMgdGhvc2UgJiMzNDttaXNjZWxsYW5lb3VzJiMzNDsgYXNwZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9maXh1cHMuYz0xNDkzPXN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNTIxLSAqL1xua2VybmVsL2JwZi9maXh1cHMuYzoxNTIyOmludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUyMy17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NzM5PWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTkzMy1cdGlmIChyZXQgPT0gMClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTkzNDpcdFx0cmV0ID0gYnBmX2RvX21pc2NfZml4dXBzKGVudik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk5MzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjUzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEJQRiBJbnN0cnVjdGlvbiBQYXRjaGluZyoqCgpBbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGBicGZfZG9fbWlzY19maXh1cHNgIGlzIGFub3RoZXIgcG90ZW50aWFsIGtleSBmb2N1cyBwb2ludCBmb3IgdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBzZWUgaG93IGl0IGZpdHMgaW4gd2l0aCB0aGUgYnJvYWRlciBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBicGZfcGF0Y2hfaW5zbl9kYXRhYC4gVW5kZXJzdGFuZGluZyBob3cgdGhhdCByb3V0aW5lIHdvcmtzIGlzIGNydWNpYWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyByb2xlIGluIHRoZSBwcm9jZXNzLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBCUEYgc3lzdGVtLiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gdHJhY2UgaXQgYmFjayB1cCB0aGUgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wYXRjaF9pbnNuX2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NvcmUuYz0xNTU0PXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTE1NjgtXG5rZXJuZWwvYnBmL2NvcmUuYzoxNTY5Olx0LyogbWFrZSBzdXJlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBwYXRjaGVzIHRoZSBjb3JyZWN0IHByb2cgKi9cbmtlcm5lbC9icGYvY29yZS5jLTE1NzAtXHRpZiAoZW52KVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTE2MDAtXHRcdGlmIChlbnYpXG5rZXJuZWwvYnBmL2NvcmUuYzoxNjAxOlx0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbiwgcmV3cml0dGVuIC0gMSk7XG5rZXJuZWwvYnBmL2NvcmUuYy0xNjAyLVx0XHRlbHNlXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0yNjQ9c3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjc3LVxua2VybmVsL2JwZi9maXh1cHMuYzoyNzg6c3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI3OS1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTYxND1pbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy03MDItYXBwbHlfcGF0Y2hfYnVmZmVyOlxua2VybmVsL2JwZi9maXh1cHMuYzo3MDM6XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4sIDApO1xua2VybmVsL2JwZi9maXh1cHMuYy03MDQtXHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz03MjA9aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzQ3LVx0XHRcdGluc25fYnVmW2NudCYjNDM7JiM0MztdID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpWzBdO1xua2VybmVsL2JwZi9maXh1cHMuYzo3NDg6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCwgMSk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0OS1cdFx0XHRpZiAoIW5ld19wcm9nKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzcwLVx0XHR9IGVsc2UgaWYgKGNudCkge1xua2VybmVsL2JwZi9maXh1cHMuYzo3NzE6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzcyLVx0XHRcdFx0XHRcdCAgICAgICBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwNC1cdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xua2VybmVsL2JwZi9maXh1cHMuYzo4MDU6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwNi1cdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTg3OC1cdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xua2VybmVsL2JwZi9maXh1cHMuYzo4Nzk6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTg4MC1cdFx0XHRcdFx0XHQgICAgICAgY250LCAwKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwMTMtcGF0Y2hfaW5zbl9idWY6XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEwMTQ6XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwMTUtXHRcdFx0XHRcdCAgICAgICBpbnNuX29mZl9pbl9wYXRjaCk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNDkzPXN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA1LVx0ICogb25lcyBmb3IgdGhlIGhpZGRlbiBzdWJwcm9nLiBIZW5jZSBhbGwgb2YgdGhlIGFkanVzdG1lbnQgb3BlcmF0aW9uc1xua2VybmVsL2JwZi9maXh1cHMuYzoxNTA2Olx0ICogaW4gYnBmX3BhdGNoX2luc25fZGF0YSBhcmUgbm8tb3BzLlxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA3LVx0ICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE1MDg6XHRwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbiAtIDEsIHBhdGNoLCBsZW4sIC0xKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwOS1cdGlmICghcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE1MjI9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTU5Mi1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTU5MzpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMTU5NC1cdFx0XHRcdFx0XHQgICAgICAgY250LCAwKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE2ODktXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE2OTA6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE2OTEtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTcyMi1cdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xua2VybmVsL2JwZi9maXh1cHMuYzoxNzIzOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzI0LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIGluc25fb2ZmX2luX3BhdGNoKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NDMtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE3NDQ6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NDUtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMCk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNzk3LVxua2VybmVsL2JwZi9maXh1cHMuYzoxNzk4Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzk5LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NDMtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE4NDQ6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NDUtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMyk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xODY1LVxua2VybmVsL2JwZi9maXh1cHMuYzoxODY2Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0xODY3LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIDIpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTg4Ny1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTg4ODpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg4OS1cdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE5NzMtXHRcdFx0Y250ID0gMztcbmtlcm5lbC9icGYvZml4dXBzLmM6MTk3NDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMTk3NS1cdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMDctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMDg6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMDktXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgY250IC0gMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMDI3LVxua2VybmVsL2JwZi9maXh1cHMuYzoyMDI4Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDI5LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjA2OC1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjA2OTpcdFx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShcbmtlcm5lbC9icGYvZml4dXBzLmMtMjA3MC1cdFx0XHRcdFx0ZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250LCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMTUxLVxua2VybmVsL2JwZi9maXh1cHMuYzoyMTUyOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTUzLVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxODAtI2VuZGlmXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxODE6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxODItXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjE5OS1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjIwMDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMjIwMS1cdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMjM0LVxua2VybmVsL2JwZi9maXh1cHMuYzoyMjM1Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjM2LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyNjg6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjktXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5NC1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjI5NTpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5Ni1cdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMzExLVxua2VybmVsL2JwZi9maXh1cHMuYzoyMzEyOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzEzLVx0XHRcdFx0XHRcdCAgICAgICAxLCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMzY3LVxua2VybmVsL2JwZi9maXh1cHMuYzoyMzY4Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzY5LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzODYtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzODc6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzODgtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ1NS1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjQ1NjpcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgc3VicHJvZ19zdGFydCwgaW5zbl9idWYsIGNudCwgY250IC0gMSk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NTctXHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yNDYzLVx0XHQgKiB0byBpbnNuIGFmdGVyIEJQRl9TVCB0aGF0IGluaXRzIG1heV9nb3RvIGNvdW50Llxua2VybmVsL2JwZi9maXh1cHMuYzoyNDY0Olx0XHQgKiBBZGp1c3RtZW50IHdpbGwgc3VjY2VlZCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBkaWRuJiMzOTt0IGZhaWwuXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NjUtXHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MjQ5Mz1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICppbmxpbmVfYnBmX2xvb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1NTQtXHQqdG90YWxfY250ID0gY250O1xua2VybmVsL2JwZi9maXh1cHMuYzoyNTU1Olx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgcG9zaXRpb24sIGluc25fYnVmLCBjbnQsIC0xKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMjU1Ni1cdGlmICghbmV3X3Byb2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTk2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFwcHJvYWNoIHRvIEFuYWx5emluZyBCUEYgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgKmJwZlxfcGF0Y2hcX2luc25cX2RhdGEqIGlzIGNsZWFybHkgYSBmcmVxdWVudGx5LXVzZWQgZnVuY3Rpb24gaW4gdGhpcyBzcGFjZTsgdGhhdCBqdW1wcyBvdXQgaW1tZWRpYXRlbHkuIEkgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzLCB0aG91Z2gsIGFuZCBJIHRoaW5rIHRoZSBiZXN0IHBhdGggZm9yd2FyZCBpbnZvbHZlcyBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGNvbXBpbGF0aW9uIHBpcGVsaW5lIOKAkyBzcGVjaWZpY2FsbHksICpicGZcX2ludFxfaml0XF9jb21waWxlKiwgKmJwZlxfZG9cX21pc2NcX2ZpeHVwcyosIGFuZCAqYnBmXF9jb252ZXJ0XF9jdHhcX2FjY2Vzc2VzKi4gVGhleSBzZWVtIGxpa2UgZ29vZCBlbnRyeSBwb2ludHMgZm9yIG1vcmUgaW4tZGVwdGggZnV6emluZy4KCkkgcXVpY2tseSBjaGVja2VkIHRoZSBzb3VyY2UgZm9yICpicGZcX3BhdGNoXF9pbnNuXF9kYXRhKiB0byBjb25maXJtIG15IGludHVpdGlvbiBhbmQgcmVtaW5kIG15c2VsZiBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIuIFllcywgaXQmIzM5O3MgZGVmaW5lZCBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AgYW5kIGV4cG9ydGVkIGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYC4gSXQgaXMgbm90IGV4cG9ydGVkIHRvIG1vZHVsZXMgd2hpY2ggc3VnZ2VzdHMgaXQgaXMgaW50ZXJuYWwuIFRoZSBjb25jZXJuIGlzIHRoYXQgU3l6a2FsbGVyIGNhbiBzdGlsbCByZWFjaCBpdCB0aHJvdWdoIGRpcmVjdCBzcGVjaWZpY2F0aW9uOyBob3dldmVyLCBpdCBpcyBiZXR0ZXIgdG8gdGFyZ2V0IHRoZSBtb3JlIGdlbmVyYWwgZW50cnkgcG9pbnRzIG9mIHRoZSBCUEYgc3Vic3lzdGVtLgoKVGhlcmVmb3JlLCBteSBmb2N1cyBmb3IgaW5pdGlhbCBhbmFseXNpcyB3aWxsIGJlICpicGZcX2ludFxfaml0XF9jb21waWxlKiwgKmJwZlxfZG9cX21pc2NcX2ZpeHVwcyosIGFuZCAqYnBmXF9jb252ZXJ0XF9jdHhcX2FjY2Vzc2VzKi4gTXkgZmlyc3QgdGFyZ2V0LCBsZXQmIzM5O3MgZXhwbG9yZSAqYnBmXF9jb252ZXJ0XF9jdHhcX2FjY2Vzc2VzKi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9maXh1cHMuYz02MTQ9aW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzE5LSAqL1xua2VybmVsL2JwZi9maXh1cHMuYzo3MjA6aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9maXh1cHMuYy03MjEte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTczOT1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk5MzAtXHRcdC8qIHByb2dyYW0gaXMgdmFsaWQsIGNvbnZlcnQgKih1MzIqKShjdHggJiM0Mzsgb2ZmKSBhY2Nlc3NlcyAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5OTMxOlx0XHRyZXQgPSBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTkzMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk5NDkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkZvY3VzaW5nIG9uIE1lbW9yeSBBY2Nlc3MgaW4gQlBGKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBkaWdnaW5nIGludG8gYGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3Nlc2AgbWlnaHQgYmUgYW5vdGhlciBwcm9kdWN0aXZlIGF2ZW51ZSB0byBleHBsb3JlLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBtZW1vcnkgYWNjZXNzIHRyYW5zbGF0aW9ucyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBnbyBkaXJlY3RseSB0byBgY2hlY2tfbWVtX2FjY2Vzc2AuIFRoYXQgZnVuY3Rpb24gcHJvYmFibHkgaGFzIHRoZSBjcml0aWNhbCBjaGVja3MgbmVlZGVkIHRvIGVuZm9yY2UgbWVtb3J5IHNhZmV0eSB3aXRoaW4gdGhlIEJQRiBwcm9ncmFtLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgbG9naWMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX21lbV9hY2Nlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTU9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDItICogY2FuIGJlOiBQVFJfVE9fTUFQX1ZBTFVFLCBQVFJfVE9fQ1RYLCBQVFJfVE9fU1RBQ0ssIFBUUl9UT19TT0NLRVQuIFRoZXNlIGFyZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzogKiBmb3VyIHBvaW50ZXIgdHlwZXMgcmVjb2duaXplZCBieSBjaGVja19tZW1fYWNjZXNzKCkgZnVuY3Rpb24uXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0LSAqXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTg0Nz1zdGF0aWMgYm9vbCBpc19keW5wdHJfcmVnX3ZhbGlkX3VuaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTctXHQgKiBlcnJvciBiZWNhdXNlIHRoaXMganVzdCBtZWFucyB0aGUgc3RhY2sgc3RhdGUgaGFzbiYjMzk7dCBiZWVuIHVwZGF0ZWQgeWV0Llxua2VybmVsL2JwZi92ZXJpZmllci5jOjg1ODpcdCAqIFdlIHdpbGwgZG8gY2hlY2tfbWVtX2FjY2VzcyB0byBjaGVjayBhbmQgdXBkYXRlIHN0YWNrIGJvdW5kcyBsYXRlci5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTktXHQgKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAwMz1zdGF0aWMgYm9vbCBpc19pdGVyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwOS1cdC8qIEZvciAtRVJBTkdFIChpLmUuIHNwaSBub3QgZmFsbGluZyBpbnRvIGFsbG9jYXRlZCBzdGFjayBzbG90cyksIHdlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAxMDpcdCAqIHdpbGwgZG8gY2hlY2tfbWVtX2FjY2VzcyB0byBjaGVjayBhbmQgdXBkYXRlIHN0YWNrIGJvdW5kcyBsYXRlciwgc29cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDExLVx0ICogcmV0dXJuIHRydWUgZm9yIHRoYXQgY2FzZS5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0OD1zdGF0aWMgYm9vbCBpc19pcnFfZmxhZ19yZWdfdmFsaWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNTQtXHQvKiBGb3IgLUVSQU5HRSAoaS5lLiBzcGkgbm90IGZhbGxpbmcgaW50byBhbGxvY2F0ZWQgc3RhY2sgc2xvdHMpLCB3ZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNTU6XHQgKiB3aWxsIGRvIGNoZWNrX21lbV9hY2Nlc3MgdG8gY2hlY2sgYW5kIHVwZGF0ZSBzdGFjayBib3VuZHMgbGF0ZXIsIHNvXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1Ni1cdCAqIHJldHVybiB0cnVlIGZvciB0aGF0IGNhc2UuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM0MTg9c3RhdGljIHZvaWQgc2NydWJfc3BlY2lhbF9zbG90KHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0MzAtLyogY2hlY2tfc3RhY2tfe3JlYWQsd3JpdGV9X2ZpeGVkX29mZiBmdW5jdGlvbnMgdHJhY2sgc3BpbGwvZmlsbCBvZiByZWdpc3RlcnMsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzQzMTogKiBzdGFjayBib3VuZGFyeSBhbmQgYWxpZ25tZW50IGFyZSBjaGVja2VkIGluIGNoZWNrX21lbV9hY2Nlc3MoKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0MzItICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQxNTA9c3RhdGljIGludCBjaGVja19tYXBfYWNjZXNzX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDE3MS0vKiBjaGVjayByZWFkL3dyaXRlIGludG8gbWVtb3J5IHJlZ2lvbiAoZS5nLiwgbWFwIHZhbHVlLCByaW5nYnVmIHNhbXBsZSwgZXRjKSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjQxNzI6c3RhdGljIGludCBfX2NoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MTczLVx0XHRcdCAgICAgIGludCBvZmYsIGludCBzaXplLCB1MzIgbWVtX3NpemUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQyMTA9c3RhdGljIGludCBjaGVja19tZW1fcmVnaW9uX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MjMzLVx0fVxua2VybmVsL2JwZi92ZXJpZmllci5jOjQyMzQ6XHRlcnIgPSBfX2NoZWNrX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCByZWdfc21pbihyZWcpICYjNDM7IG9mZiwgc2l6ZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MjM1LVx0XHRcdFx0IG1lbV9zaXplLCB6ZXJvX3NpemVfYWxsb3dlZCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQyNTAtXHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDI1MTpcdGVyciA9IF9fY2hlY2tfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHJlZ191bWF4KHJlZykgJiM0Mzsgb2ZmLCBzaXplLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQyNTItXHRcdFx0XHQgbWVtX3NpemUsIHplcm9fc2l6ZV9hbGxvd2VkKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDY2MT1zdGF0aWMgaW50IGNoZWNrX3BhY2tldF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubywgaW50IG9mZixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDY3NC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0Njc1Olx0LyogX19jaGVja19tZW1fYWNjZXNzIGhhcyBtYWRlIHN1cmUgXCYjMzQ7b2ZmICYjNDM7IHNpemUgLSAxXCYjMzQ7IGlzIHdpdGhpbiB1MTYuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDY3Ni1cdCAqIHJlZ191bWF4KHJlZykgY2FuJiMzOTt0IGJlIGJpZ2dlciB0aGFuIE1BWF9QQUNLRVRfT0ZGIHdoaWNoIGlzIDB4ZmZmZixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Njc3LVx0ICogb3RoZXJ3aXNlIGZpbmRfZ29vZF9wa3RfcG9pbnRlcnMgd291bGQgaGF2ZSByZWZ1c2VkIHRvIHNldCByYW5nZSBpbmZvXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDY3ODpcdCAqIHRoYXQgX19jaGVja19tZW1fYWNjZXNzIHdvdWxkIGhhdmUgcmVqZWN0ZWQgdGhpcyBwa3QgYWNjZXNzLlxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ2NzktXHQgKiBUaGVyZWZvcmUsIFwmIzM0O29mZiAmIzQzOyByZWdfdW1heChyZWcpICYjNDM7IHNpemUgLSAxXCYjMzQ7IHdvbiYjMzk7dCBvdmVyZmxvdyB1MzIuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTYwNjE9c3RhdGljIHZvaWQgYWRkX3NjYWxhcl90b19yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsIHM2NCB2YWwpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYwODMtICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA4NDpzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYwODUtXHRcdFx0ICAgIGludCBvZmYsIGludCBicGZfc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjM1MT1zdGF0aWMgaW50IGNoZWNrX2xvYWRfbWVtKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM4My1cdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjYzODQ6XHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVx1MDAzZWluc25faWR4LCByZWdzICYjNDM7IGluc24tXHUwMDNlc3JjX3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi1cdTAwM2VzcmNfcmVnKSwgaW5zbi1cdTAwM2VvZmYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM4NS1cdFx0XHQgICAgICAgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSwgQlBGX1JFQUQsIGluc24tXHUwMDNlZHN0X3JlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjM5ND1zdGF0aWMgaW50IGNoZWNrX3N0b3JlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MjMtXHQvKiBDaGVjayBpZiAoZHN0X3JlZyAmIzQzOyBvZmYpIGlzIHdyaXRlYWJsZS4gKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDI0Olx0ZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgcmVncyAmIzQzOyBpbnNuLVx1MDAzZWRzdF9yZWcsIGFyZ25vX2Zyb21fcmVnKGluc24tXHUwMDNlZHN0X3JlZyksIGluc24tXHUwMDNlb2ZmLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MjUtXHRcdFx0ICAgICAgIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksIEJQRl9XUklURSwgaW5zbi1cdTAwM2VzcmNfcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NDMyPXN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTAxLVx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjUwMjpcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIGRzdF9yZWcsIGFyZ25vX2Zyb21fcmVnKGluc24tXHUwMDNlZHN0X3JlZyksIGluc24tXHUwMDNlb2ZmLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1MDMtXHRcdFx0ICAgICAgIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksIEJQRl9SRUFELCAtMSwgdHJ1ZSwgZmFsc2UpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY1MDQtXHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgbG9hZF9yZWcgXHUwMDNlPSAwKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1MDU6XHRcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIGRzdF9yZWcsIGFyZ25vX2Zyb21fcmVnKGluc24tXHUwMDNlZHN0X3JlZyksXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUwNi1cdFx0XHRcdCAgICAgICBpbnNuLVx1MDAzZW9mZiwgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUxNi1cdC8qIENoZWNrIHdoZXRoZXIgd2UgY2FuIHdyaXRlIGludG8gdGhlIHNhbWUgbWVtb3J5LiAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY1MTc6XHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVx1MDAzZWluc25faWR4LCBkc3RfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVx1MDAzZWRzdF9yZWcpLCBpbnNuLVx1MDAzZW9mZixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTE4LVx0XHRcdCAgICAgICBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpLCBCUEZfV1JJVEUsIC0xLCB0cnVlLCBmYWxzZSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTcyNDg9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyODQtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJQRl9EWU5QVFJfU0laRTsgaSAmIzQzOz0gOCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjcyODU6XHRcdFx0ZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGluc25faWR4LCByZWcsIGFyZ25vLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyODYtXHRcdFx0XHRcdCAgICAgICBpLCBCUEZfRFcsIEJQRl9XUklURSwgLTEsIGZhbHNlLCBmYWxzZSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTczNjg9c3RhdGljIGludCBwcm9jZXNzX2l0ZXJfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sIGludCBpbnNuX2lkeCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzQwNS1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfc2xvdHMgKiA4OyBpICYjNDM7PSBCUEZfUkVHX1NJWkUpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NDA2Olx0XHRcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBpbnNuX2lkeCwgcmVnLCBhcmdubyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NDA3LVx0XHRcdFx0XHQgICAgICAgaSwgQlBGX0RXLCBCUEZfV1JJVEUsIC0xLCBmYWxzZSwgZmFsc2UpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDE3NT1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAyNjEtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtZXRhLmFjY2Vzc19zaXplOyBpJiM0MzsmIzQzOykge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMjYyOlx0XHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgaW5zbl9pZHgsIHJlZ3MgJiM0MzsgbWV0YS5yZWdubywgYXJnbm9fZnJvbV9yZWcobWV0YS5yZWdubyksIGksIEJQRl9CLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMjYzLVx0XHRcdFx0ICAgICAgIEJQRl9XUklURSwgLTEsIGZhbHNlLCBmYWxzZSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNTA5LVx0XHRcdFx0ICogaXQgd2lsbCBjb25mdXNlIHRoZSBjaGVjayBvZiBQVFJfVE9fQlRGX0lEIGluXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA1MTA6XHRcdFx0XHQgKiBjaGVja19tZW1fYWNjZXNzKCkuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA1MTEtXHRcdFx0XHQgKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0Mzg9c3RhdGljIGludCBwcm9jZXNzX2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNDY1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNDY2Olx0XHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVx1MDAzZWluc25faWR4LCByZWcsIGFyZ25vLCAwLCBCUEZfRFcsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0NjctXHRcdFx0XHQgICAgICAgQlBGX1dSSVRFLCAtMSwgZmFsc2UsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcyNDE9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI3OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzI3OTpcdFx0ZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgY3VyX3JlZ3MoZW52KSAmIzQzOyBpbnNuLVx1MDAzZWRzdF9yZWcsIGFyZ25vX2Zyb21fcmVnKGluc24tXHUwMDNlZHN0X3JlZyksXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyODAtXHRcdFx0XHQgICAgICAgaW5zbi1cdTAwM2VvZmYsIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMjE3CgkJCQkJCQlvdXRwdXQ6IDEwNAoJCQkJCQkJdGhvdWdodHM6IDI3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgdGhlIGZ1bmN0aW9uIGBjaGVja19tZW1fYWNjZXNzYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkgc3ltYm9sIHRvIGZvY3VzIG9uIGhlcmUsIHRoYXQmIzM5O3MgYSBnb29kIGZpbmQuIExldCYjMzk7cyBnZXQgdGhpcyBhbmFseXNpcyBkb3duIGNvbmNpc2VseS4KClRoZSBwYXRjaCYjMzk7cyBvdmVyYWxsIHdvcnRoaW5lc3MgZm9yIGZ1enppbmcgaXMgZGVmaW5pdGVseSAqdHJ1ZSouIFRoZSBpbXBvcnRhbnQgZnVuY3Rpb24gc3ltYm9scyB0aGF0IGFyZSBtb2RpZmllZCwgYWNjb3JkaW5nIHRvIG15IHJldmlldyBvZiB0aGUgY2hhbmdlcywgYXJlIGBicGZfaW50X2ppdF9jb21waWxlYCwgYGJwZl9kb19taXNjX2ZpeHVwc2AsIGFuZCAqZXNwZWNpYWxseSogYGNoZWNrX21lbV9hY2Nlc3NgLgoKTm93LCB0aGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQlBGX0pJVF9LQVNBTmAsIGVuYWJsaW5nIEtBU0FOIHN1cHBvcnQgZm9yIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIHg4Nl82NCwgd2hpY2ggaXMgdW5kZW5pYWJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBjb3JlIGtlcm5lbCBsb2dpYy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGdvb2QgY2hhbmdlIHRvIGZ1enouCgpBaCwgYnV0IGhvbGQgb24sIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIGxpc3RpbmcgZXhjZXNzaXZlbHkgZ2VuZXJpYyBjb25maWd1cmF0aW9ucywgYXMgd2UgcHJvYmFibHkgaGF2ZSB0aG9zZSBlbmFibGVkIGJ5IGRlZmF1bHQuIFNvLCB0aGF0IG1lYW5zIEkgbmVlZCB0byByZWZpbmUgdGhlIGNvbmZpZyBsaXN0LiBgS0FTQU5fR0VORVJJQ2AsIGBLQVNBTl9WTUFMTE9DYCwgYEJQRl9KSVRgLCBhbmQgYEtBU0FOYCBhcmUgYWxsIGJyb2FkIGFuZCBsaWtlbHkgYWxyZWFkeSBlbmFibGVkLCBiYXNlZCBvbiBteSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBjb25maWd1cmF0aW9ucy4KClNvLCBJIG5lZWQgdG8gZm9jdXMgKnNwZWNpZmljYWxseSogb24gdGhvc2UgY29uZmlndXJhdGlvbnMgdGhhdCBkaXJlY3RseSBpbXBhY3QgdGhlIG1vZGlmaWVkIGNvZGUuIEdvb2QsIEkgc2VlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoICppcyogYEJQRl9KSVRfS0FTQU5gLiBUaGF0IGFwcGVhcnMgdG8gYmUgc3VmZmljaWVudC4gVGhhdCYjMzk7cyB0aGUgbmV3IGNvbmZpZyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaC4KCkFscmlnaHQsIHRoYXQgY292ZXJzIGV2ZXJ5dGhpbmcuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVF9LQVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDssCiAgICAmIzM0O2NoZWNrX21lbV9hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBLQVNBTiBzdXBwb3J0IHRvIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIHg4Nl82NCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVF9LQVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDssCiAgICAmIzM0O2NoZWNrX21lbV9hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBLQVNBTiBzdXBwb3J0IHRvIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIHg4Nl82NCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIwOjE0OjE3LjUwODM4MDcyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjkxNTIwNjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRfS0FTQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfZG9fbWlzY19maXh1cHNcIixcbiAgICBcImNoZWNrX21lbV9hY2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEtBU0FOIHN1cHBvcnQgdG8gdGhlIEJQRiBKSVQgY29tcGlsZXIgb24geDg2XzY0LCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMDoxNDoxNy41MDgzODkyMzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjgxOTYzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxZDZkZGY5NzA2YTg2OWJjNmQyNTVlMWM3ZDBhZTZmYmFkYjc5OWI4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDggMjA6MTQ6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcXG5pbmRleCBiZGFkOTBmMjEwZTRiZi4uNzA1YTlhYjg1ZjNhOTUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvS2NvbmZpZ1xcbisrKyBiL2FyY2gveDg2L0tjb25maWdcXG5AQCAtMjMzLDYgKzIzMyw3IEBAIGNvbmZpZyBYODZcXG4gXFx0c2VsZWN0IEhBVkVfU0FNUExFX0ZUUkFDRV9ESVJFQ1RcXHRpZiBYODZfNjRcXG4gXFx0c2VsZWN0IEhBVkVfU0FNUExFX0ZUUkFDRV9ESVJFQ1RfTVVMVElcXHRpZiBYODZfNjRcXG4gXFx0c2VsZWN0IEhBVkVfRUJQRl9KSVRcXG4rXFx0c2VsZWN0IEhBVkVfRUJQRl9KSVRfS0FTQU5cXHRcXHRpZiBYODZfNjRcXG4gXFx0c2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1NcXG4gXFx0c2VsZWN0IEhBVkVfRUlTQVxcdFxcdFxcdGlmIFg4Nl8zMlxcbiBcXHRzZWxlY3QgSEFWRV9FWElUX1RIUkVBRFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5pbmRleCBkZTc1MTVlYTFiZWFlOC4uNjVhMDBlODQ3OTljZDIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTIxLDYgKzIxLDE3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdW53aW5kLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vY2ZpLmhcXHUwMDNlXFxuIFxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX0pJVF9LQVNBTilcXG4rdm9pZCBfX2FzYW5fbG9hZDEodm9pZCAqcCk7XFxuK3ZvaWQgX19hc2FuX3N0b3JlMSh2b2lkICpwKTtcXG4rdm9pZCBfX2FzYW5fbG9hZDIodm9pZCAqcCk7XFxuK3ZvaWQgX19hc2FuX3N0b3JlMih2b2lkICpwKTtcXG4rdm9pZCBfX2FzYW5fbG9hZDQodm9pZCAqcCk7XFxuK3ZvaWQgX19hc2FuX3N0b3JlNCh2b2lkICpwKTtcXG4rdm9pZCBfX2FzYW5fbG9hZDgodm9pZCAqcCk7XFxuK3ZvaWQgX19hc2FuX3N0b3JlOCh2b2lkICpwKTtcXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgYm9vbCBhbGxfY2FsbGVlX3JlZ3NfdXNlZFs0XSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTtcXG4gXFxuIHN0YXRpYyB1OCAqZW1pdF9jb2RlKHU4ICpwdHIsIHUzMiBieXRlcywgdW5zaWduZWQgaW50IGxlbilcXG5AQCAtMTExMCw2ICsxMTIxLDkwIEBAIHN0YXRpYyB2b2lkIG1heWJlX2VtaXRfMW1vZCh1OCAqKnBwcm9nLCB1MzIgcmVnLCBib29sIGlzNjQpXFxuIFxcdCpwcHJvZyA9IHByb2c7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZW1pdF9rYXNhbl9jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCAqKnBwcm9nLFxcbitcXHRcXHRcXHQgICAgdTMyIGFkZHJfcmVnLCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICppcCxcXG4rXFx0XFx0XFx0ICAgIGJvb2wgaXNfd3JpdGUsIGJvb2wgYWNjZXNzZXNfc3RhY2tfb25seSlcXG4re1xcbisjaWZkZWYgQ09ORklHX0JQRl9KSVRfS0FTQU5cXG4rXFx0dTMyIGJwZl9zaXplID0gQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSk7XFxuK1xcdHMzMiBvZmYgPSBpbnNuLVxcdTAwM2VvZmY7XFxuK1xcdHU4ICpwcm9nID0gKnBwcm9nO1xcbitcXHR2b2lkICprYXNhbl9mdW5jO1xcbitcXG4rXFx0aWYgKCFlbnYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGFjY2Vzc2VzX3N0YWNrX29ubHkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogRGVyaXZlIEtBU0FOIGNoZWNrIGZ1bmN0aW9uIGZyb20gYWNjZXNzIHR5cGUgYW5kIHNpemUgKi9cXG4rXFx0c3dpdGNoIChicGZfc2l6ZSkge1xcbitcXHRjYXNlIEJQRl9COlxcbitcXHRcXHRrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmUxIDogX19hc2FuX2xvYWQxO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfSDpcXG4rXFx0XFx0a2FzYW5fZnVuYyA9IGlzX3dyaXRlID8gX19hc2FuX3N0b3JlMiA6IF9fYXNhbl9sb2FkMjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1c6XFxuK1xcdFxcdGthc2FuX2Z1bmMgPSBpc193cml0ZSA/IF9fYXNhbl9zdG9yZTQgOiBfX2FzYW5fbG9hZDQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9EVzpcXG4rXFx0XFx0a2FzYW5fZnVuYyA9IGlzX3dyaXRlID8gX19hc2FuX3N0b3JlOCA6IF9fYXNhbl9sb2FkODtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTYXZlIHJheCAqL1xcbitcXHRFTUlUMSgweDUwKTtcXG4rXFx0LyogU2F2ZSByY3ggKi9cXG4rXFx0RU1JVDEoMHg1MSk7XFxuK1xcdC8qIFNhdmUgcmR4ICovXFxuK1xcdEVNSVQxKDB4NTIpO1xcbitcXHQvKiBTYXZlIHJzaSAqL1xcbitcXHRFTUlUMSgweDU2KTtcXG4rXFx0LyogU2F2ZSByZGkgKi9cXG4rXFx0RU1JVDEoMHg1Nyk7XFxuK1xcdC8qIFNhdmUgcjggKi9cXG4rXFx0RU1JVDIoMHg0MSwgMHg1MCk7XFxuK1xcdC8qIFNhdmUgcjkgKi9cXG4rXFx0RU1JVDIoMHg0MSwgMHg1MSk7XFxuK1xcbitcXHQvKiBtb3YgcmRpLCBhZGRyX3JlZyAqL1xcbitcXHRFTUlUX21vdihCUEZfUkVHXzEsIGFkZHJfcmVnKTtcXG4rXFxuK1xcdC8qIGFkZCByZGksIG9mZiAoaWYgb2Zmc2V0IGlzIG5vbi16ZXJvKSAqL1xcbitcXHRpZiAob2ZmKSB7XFxuK1xcdFxcdGlmIChpc19pbW04KG9mZikpIHtcXG4rXFx0XFx0XFx0LyogYWRkIHJkaSwgaW1tOCAqL1xcbitcXHRcXHRcXHRFTUlUNCgweDQ4LCAweDgzLCAweEM3LCAodTgpb2ZmKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0LyogYWRkIHJkaSwgaW1tMzIgKi9cXG4rXFx0XFx0XFx0RU1JVDNfb2ZmMzIoMHg0OCwgMHg4MSwgMHhDNywgb2ZmKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBBZGp1c3QgaXAgdG8gYWNjb3VudCBmb3IgdGhlIGluc3RydW1lbnRhdGlvbiBnZW5lcmF0ZWQgc28gZmFyICovXFxuK1xcdGlwICs9IChwcm9nIC0gKnBwcm9nKTtcXG4rXFx0LyogV2UgZW1pdCBhIGNhbGwsIHNvIHVwZGF0ZSBjYWxsIGRlcHRoIGNvdW50aW5nICovXFxuK1xcdGlwICs9IHg4Nl9jYWxsX2RlcHRoX2VtaXRfYWNjb3VudGluZyhcXHUwMDI2cHJvZywga2FzYW5fZnVuYywgaXApO1xcbitcXHQvKiBjYWxsIGthc2FuX2Z1bmMgKi9cXG4rXFx0aWYgKGVtaXRfY2FsbChcXHUwMDI2cHJvZywga2FzYW5fZnVuYywgaXApKVxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdEVNSVQyKDB4NDEsIDB4NTkpO1xcbitcXHRFTUlUMigweDQxLCAweDU4KTtcXG4rXFx0RU1JVDEoMHg1Rik7XFxuK1xcdEVNSVQxKDB4NUUpO1xcbitcXHRFTUlUMSgweDVBKTtcXG4rXFx0RU1JVDEoMHg1OSk7XFxuK1xcdEVNSVQxKDB4NTgpO1xcbitcXG4rXFx0KnBwcm9nID0gcHJvZztcXG4rI2VuZGlmIC8qIENPTkZJR19CUEZfSklUX0tBU0FOICovXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKiBMRFg6IGRzdF9yZWcgPSAqKHU4Kikoc3JjX3JlZyArIG9mZikgKi9cXG4gc3RhdGljIHZvaWQgZW1pdF9sZHgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZywgaW50IG9mZilcXG4ge1xcbkBAIC0xMzE1LDYgKzE0MTAsNjQgQEAgc3RhdGljIHZvaWQgZW1pdF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBpbmRleF9yZWcsIGludFxcbiBcXHQqcHByb2cgPSBwcm9nO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBlbWl0X3N0KHU4ICoqcHByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IGRzdF9yZWcsXFxuK1xcdFxcdCAgICBzMzIgb3V0Z29pbmdfYXJnX2Jhc2UsIHUxNiBvdXRnb2luZ19yc3ApXFxuK3tcXG4rXFx0czMyIGltbTMyID0gaW5zbi1cXHUwMDNlaW1tO1xcbitcXHR1OCAqcHJvZyA9ICpwcHJvZztcXG4rXFx0czMyIGluc25fb2ZmO1xcbitcXG4rXFx0c3dpdGNoIChCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSkge1xcbitcXHRjYXNlIEJQRl9COlxcbitcXHRcXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcXG4rXFx0XFx0XFx0RU1JVDIoMHg0MSwgMHhDNik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0RU1JVDEoMHhDNik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9IOlxcbitcXHRcXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcXG4rXFx0XFx0XFx0RU1JVDMoMHg2NiwgMHg0MSwgMHhDNyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0RU1JVDIoMHg2NiwgMHhDNyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9XOlxcbitcXHRcXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcXG4rXFx0XFx0XFx0RU1JVDIoMHg0MSwgMHhDNyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0RU1JVDEoMHhDNyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9EVzpcXG4rXFx0XFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlb2ZmID09IC04KSB7XFxuK1xcdFxcdFxcdC8qIEFyZyA2OiBzdG9yZSBpbW1lZGlhdGUgaW4gcjkgcmVnaXN0ZXIgKi9cXG4rXFx0XFx0XFx0ZW1pdF9tb3ZfaW1tNjQoXFx1MDAyNnByb2csIFg4Nl9SRUdfUjksIGltbTMyIFxcdTAwM2VcXHUwMDNlIDMxLFxcbitcXHRcXHRcXHRcXHQgICAgICAgKHUzMilpbW0zMik7XFxuK1xcdFxcdFxcdCpwcHJvZyA9IHByb2c7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHRcXHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHhDNyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG4rXFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQXJncyA3KzogcmV2ZXJzZSBCUEYgbmVnYXRpdmUgb2Zmc2V0cyB0b1xcbitcXHRcXHQgKiB4ODYgcG9zaXRpdmUgcnNwIG9mZnNldHMuXFxuK1xcdFxcdCAqIEJQRiBvZmY9LTE2IOKGkiBbcnNwKzBdLCBvZmY9LTI0IOKGkiBbcnNwKzhdLCAuLi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGluc25fb2ZmID0gb3V0Z29pbmdfYXJnX2Jhc2UgLSBvdXRnb2luZ19yc3AgLVxcbitcXHRcXHRcXHRpbnNuX29mZiAtIDE2O1xcbitcXHRcXHRkc3RfcmVnID0gQlBGX1JFR19GUDtcXG4rXFx0fVxcbitcXHRpZiAoaXNfaW1tOChpbnNuX29mZikpXFxuK1xcdFxcdEVNSVQyKGFkZF8xcmVnKDB4NDAsIGRzdF9yZWcpLCBpbnNuX29mZik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0RU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHg4MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcXG4rXFxuK1xcdEVNSVQoaW1tMzIsIGJwZl9zaXplX3RvX3g4Nl9ieXRlcyhCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSkpO1xcbitcXHQqcHByb2cgPSBwcm9nO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBlbWl0X3N0X3IxMih1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIGludCBvZmYsIGludCBpbW0pXFxuIHtcXG4gXFx0ZW1pdF9zdF9pbmRleChwcHJvZywgc2l6ZSwgZHN0X3JlZywgWDg2X1JFR19SMTIsIG9mZiwgaW1tKTtcXG5AQCAtMTQyMywxNyArMTU3NiwzMSBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtd19pbmRleCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgc2l6ZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3QodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIGRzdF9yZWcsXFxuLVxcdFxcdFxcdCAgICAgdTMyIHNyY19yZWcsIHMxNiBvZmYsIHU4IGJwZl9zaXplKVxcbitzdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHU4ICoqcHByb2csXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqaXAsIHUzMiBkc3RfcmVnLFxcbitcXHRcXHRcXHQgICAgIHUzMiBzcmNfcmVnLCBib29sIGFjY2Vzc2VzX3N0YWNrX29ubHkpXFxuIHtcXG4rXFx0dTMyIGF0b21pY19vcCA9IGluc24tXFx1MDAzZWltbTtcXG4rXFx0aW50IGVycjtcXG4rXFxuIFxcdHN3aXRjaCAoYXRvbWljX29wKSB7XFxuIFxcdGNhc2UgQlBGX0xPQURfQUNROlxcbitcXHRcXHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgcHByb2csIHNyY19yZWcsIGluc24sIGlwLCBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHQvKiBkc3RfcmVnID0gc21wX2xvYWRfYWNxdWlyZShzcmNfcmVnICsgb2ZmMTYpICovXFxuLVxcdFxcdGVtaXRfbGR4KHBwcm9nLCBicGZfc2l6ZSwgZHN0X3JlZywgc3JjX3JlZywgb2ZmKTtcXG4rXFx0XFx0ZW1pdF9sZHgocHByb2csIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLFxcbitcXHRcXHRcXHQgaW5zbi1cXHUwMDNlb2ZmKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQlBGX1NUT1JFX1JFTDpcXG4rXFx0XFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIHBwcm9nLCBkc3RfcmVnLCBpbnNuLCBpcCwgdHJ1ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHQvKiBzbXBfc3RvcmVfcmVsZWFzZShkc3RfcmVnICsgb2ZmMTYsIHNyY19yZWcpICovXFxuLVxcdFxcdGVtaXRfc3R4KHBwcm9nLCBicGZfc2l6ZSwgZHN0X3JlZywgc3JjX3JlZywgb2ZmKTtcXG4rXFx0XFx0ZW1pdF9zdHgocHByb2csIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLFxcbitcXHRcXHRcXHQgaW5zbi1cXHUwMDNlb2ZmKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHByX2VycihcXFwiYnBmX2ppdDogdW5rbm93biBhdG9taWMgbG9hZC9zdG9yZSBvcGNvZGUgJTAyeFxcXFxuXFxcIixcXG5AQCAtMTgxMSwxMCArMTk3OCwxMiBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKlxcbiBcXHRcXHRjb25zdCBzMzIgaW1tMzIgPSBpbnNuLVxcdTAwM2VpbW07XFxuIFxcdFxcdHUzMiBkc3RfcmVnID0gaW5zbi1cXHUwMDNlZHN0X3JlZztcXG4gXFx0XFx0dTMyIHNyY19yZWcgPSBpbnNuLVxcdTAwM2VzcmNfcmVnO1xcbitcXHRcXHRib29sIGFjY2Vzc2VzX3N0YWNrX29ubHk7XFxuIFxcdFxcdHU4IGIyID0gMCwgYjMgPSAwO1xcbiBcXHRcXHR1OCAqc3RhcnRfb2ZfbGR4O1xcbiBcXHRcXHRzNjQgam1wX29mZnNldDtcXG4gXFx0XFx0czMyIGluc25fb2ZmO1xcbitcXHRcXHRpbnQgaW5zbl9pZHg7XFxuIFxcdFxcdHU4IGptcF9jb25kO1xcbiBcXHRcXHR1OCAqZnVuYztcXG4gXFx0XFx0aW50IG5vcHM7XFxuQEAgLTE4MzEsNiArMjAwMCwxMCBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKlxcbiBcXHRcXHRcXHRFTUlUX0VOREJSKCk7XFxuIFxcbiBcXHRcXHRpcCA9IGltYWdlICsgYWRkcnNbaSAtIDFdICsgKHByb2cgLSB0ZW1wKTtcXG4rXFx0XFx0aW5zbl9pZHggPSBpIC0gMSArIGJwZl9wcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXN1YnByb2dfc3RhcnQ7XFxuK1xcdFxcdGFjY2Vzc2VzX3N0YWNrX29ubHkgPVxcbitcXHRcXHRcXHRlbnYgPyAhZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc3RhY2tfYWNjZXNzIDpcXG4rXFx0XFx0XFx0ICAgICAgZmFsc2U7XFxuIFxcbiBcXHRcXHRzd2l0Y2ggKGluc24tXFx1MDAzZWNvZGUpIHtcXG4gXFx0XFx0XFx0LyogQUxVICovXFxuQEAgLTIyMDcsNDkgKzIzODAsMTcgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICpcXG4gXFx0XFx0XFx0RU1JVF9MRkVOQ0UoKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRcXHQvKiBTVDogKih1OCopKGRzdF9yZWcgKyBvZmYpID0gaW1tICovXFxuIFxcdFxcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9COlxcbi1cXHRcXHRcXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcXG4tXFx0XFx0XFx0XFx0RU1JVDIoMHg0MSwgMHhDNik7XFxuLVxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0RU1JVDEoMHhDNik7XFxuLVxcdFxcdFxcdGdvdG8gc3Q7XFxuIFxcdFxcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9IOlxcbi1cXHRcXHRcXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcXG4tXFx0XFx0XFx0XFx0RU1JVDMoMHg2NiwgMHg0MSwgMHhDNyk7XFxuLVxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0RU1JVDIoMHg2NiwgMHhDNyk7XFxuLVxcdFxcdFxcdGdvdG8gc3Q7XFxuIFxcdFxcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9XOlxcbi1cXHRcXHRcXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcXG4tXFx0XFx0XFx0XFx0RU1JVDIoMHg0MSwgMHhDNyk7XFxuLVxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0RU1JVDEoMHhDNyk7XFxuLVxcdFxcdFxcdGdvdG8gc3Q7XFxuIFxcdFxcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9EVzpcXG4tXFx0XFx0XFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlb2ZmID09IC04KSB7XFxuLVxcdFxcdFxcdFxcdC8qIEFyZyA2OiBzdG9yZSBpbW1lZGlhdGUgaW4gcjkgcmVnaXN0ZXIgKi9cXG4tXFx0XFx0XFx0XFx0ZW1pdF9tb3ZfaW1tNjQoXFx1MDAyNnByb2csIFg4Nl9SRUdfUjksIGltbTMyIFxcdTAwM2VcXHUwMDNlIDMxLCAodTMyKWltbTMyKTtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0RU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4QzcpO1xcbi1cXG4tc3Q6XFx0XFx0XFx0aW5zbl9vZmYgPSBpbnNuLVxcdTAwM2VvZmY7XFxuLVxcdFxcdFxcdGlmIChkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TKSB7XFxuLVxcdFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdFxcdCAqIEFyZ3MgNys6IHJldmVyc2UgQlBGIG5lZ2F0aXZlIG9mZnNldHMgdG9cXG4tXFx0XFx0XFx0XFx0ICogeDg2IHBvc2l0aXZlIHJzcCBvZmZzZXRzLlxcbi1cXHRcXHRcXHRcXHQgKiBCUEYgb2ZmPS0xNiDihpIgW3JzcCswXSwgb2ZmPS0yNCDihpIgW3JzcCs4XSwgLi4uXFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHRpbnNuX29mZiA9IG91dGdvaW5nX2FyZ19iYXNlIC0gb3V0Z29pbmdfcnNwIC0gaW5zbl9vZmYgLSAxNjtcXG4tXFx0XFx0XFx0XFx0ZHN0X3JlZyA9IEJQRl9SRUdfRlA7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKGlzX2ltbTgoaW5zbl9vZmYpKVxcbi1cXHRcXHRcXHRcXHRFTUlUMihhZGRfMXJlZygweDQwLCBkc3RfcmVnKSwgaW5zbl9vZmYpO1xcbi1cXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdEVNSVQxX29mZjMyKGFkZF8xcmVnKDB4ODAsIGRzdF9yZWcpLCBpbnNuX29mZik7XFxuK1xcdFxcdFxcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBcXHUwMDI2cHJvZywgZHN0X3JlZywgaW5zbiwgaXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB0cnVlLCBhY2Nlc3Nlc19zdGFja19vbmx5KTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdFxcdFxcdEVNSVQoaW1tMzIsIGJwZl9zaXplX3RvX3g4Nl9ieXRlcyhCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSkpO1xcbitcXHRcXHRcXHRlbWl0X3N0KFxcdTAwMjZwcm9nLCBpbnNuLCBkc3RfcmVnLCBvdXRnb2luZ19hcmdfYmFzZSxcXG4rXFx0XFx0XFx0XFx0b3V0Z29pbmdfcnNwKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRcXHRcXHQvKiBTVFg6ICoodTgqKShkc3RfcmVnICsgb2ZmKSA9IHNyY19yZWcgKi9cXG5AQCAtMjI2Nyw2ICsyNDA4LDEwIEBAIHN0OlxcdFxcdFxcdGluc25fb2ZmID0gaW5zbi1cXHUwMDNlb2ZmO1xcbiBcXHRcXHRcXHRcXHRpbnNuX29mZiA9IG91dGdvaW5nX2FyZ19iYXNlIC0gb3V0Z29pbmdfcnNwIC0gaW5zbl9vZmYgLSAxNjtcXG4gXFx0XFx0XFx0XFx0ZHN0X3JlZyA9IEJQRl9SRUdfRlA7XFxuIFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIFxcdTAwMjZwcm9nLCBkc3RfcmVnLCBpbnNuLCBpcCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHRydWUsIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHRlbWl0X3N0eChcXHUwMDI2cHJvZywgQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSksIGRzdF9yZWcsIHNyY19yZWcsIGluc25fb2ZmKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbkBAIC0yNDI4LDYgKzI1NzMsMTIgQEAgc3Q6XFx0XFx0XFx0aW5zbl9vZmYgPSBpbnNuLVxcdTAwM2VvZmY7XFxuIFxcdFxcdFxcdFxcdC8qIHBvcHVsYXRlIGptcF9vZmZzZXQgZm9yIEpBRSBhYm92ZSB0byBqdW1wIHRvIHN0YXJ0X29mX2xkeCAqL1xcbiBcXHRcXHRcXHRcXHRzdGFydF9vZl9sZHggPSBwcm9nO1xcbiBcXHRcXHRcXHRcXHRlbmRfb2Zfam1wWy0xXSA9IHN0YXJ0X29mX2xkeCAtIGVuZF9vZl9qbXA7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBcXHUwMDI2cHJvZywgc3JjX3JlZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGluc24sIGlwLCBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xcbitcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1ggfHxcXG4gXFx0XFx0XFx0ICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU1TWClcXG5AQCAtMjQ4OSwxNSArMjY0MCwxNiBAQCBzdDpcXHRcXHRcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4gXFx0XFx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XOlxcbi1cXHRcXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOlxcbi1cXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlaW1tID09IChCUEZfQU5EIHwgQlBGX0ZFVENIKSB8fFxcbi1cXHRcXHRcXHQgICAgaW5zbi1cXHUwMDNlaW1tID09IChCUEZfT1IgfCBCUEZfRkVUQ0gpIHx8XFxuLVxcdFxcdFxcdCAgICBpbnNuLVxcdTAwM2VpbW0gPT0gKEJQRl9YT1IgfCBCUEZfRkVUQ0gpKSB7XFxuLVxcdFxcdFxcdFxcdGJvb2wgaXM2NCA9IEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9EVztcXG4tXFx0XFx0XFx0XFx0dTMyIHJlYWxfc3JjX3JlZyA9IHNyY19yZWc7XFxuLVxcdFxcdFxcdFxcdHUzMiByZWFsX2RzdF9yZWcgPSBkc3RfcmVnO1xcbi1cXHRcXHRcXHRcXHR1OCAqYnJhbmNoX3RhcmdldDtcXG4tXFxuK1xcdFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6IHtcXG4rXFx0XFx0XFx0Ym9vbCBpczY0ID0gQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0RXO1xcbitcXHRcXHRcXHR1MzIgcmVhbF9zcmNfcmVnID0gc3JjX3JlZztcXG4rXFx0XFx0XFx0dTMyIHJlYWxfZHN0X3JlZyA9IGRzdF9yZWc7XFxuK1xcdFxcdFxcdHU4ICpicmFuY2hfdGFyZ2V0O1xcbitcXHRcXHRcXHRib29sIGlzX2F0b21pY19mZXRjaCA9XFxuK1xcdFxcdFxcdFxcdChpbnNuLVxcdTAwM2VpbW0gPT0gKEJQRl9BTkQgfCBCUEZfRkVUQ0gpIHx8XFxuK1xcdFxcdFxcdFxcdCBpbnNuLVxcdTAwM2VpbW0gPT0gKEJQRl9PUiB8IEJQRl9GRVRDSCkgfHxcXG4rXFx0XFx0XFx0XFx0IGluc24tXFx1MDAzZWltbSA9PSAoQlBGX1hPUiB8IEJQRl9GRVRDSCkpO1xcbitcXHRcXHRcXHRpZiAoaXNfYXRvbWljX2ZldGNoKSB7XFxuIFxcdFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdFxcdCAqIENhbid0IGJlIGltcGxlbWVudGVkIHdpdGggYSBzaW5nbGUgeDg2IGluc24uXFxuIFxcdFxcdFxcdFxcdCAqIE5lZWQgdG8gZG8gYSBDTVBYQ0hHIGxvb3AuXFxuQEAgLTI1MTAsNyArMjY2MiwxNyBAQCBzdDpcXHRcXHRcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG4gXFx0XFx0XFx0XFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR18wKVxcbiBcXHRcXHRcXHRcXHRcXHRyZWFsX2RzdF9yZWcgPSBCUEZfUkVHX0FYO1xcbiBcXG4rXFx0XFx0XFx0XFx0aXAgKz0gMztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoIWJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSkge1xcbitcXHRcXHRcXHRcXHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXFx1MDAyNnByb2csIHJlYWxfZHN0X3JlZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGluc24sIGlwLCBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xcbitcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHRcXHRicmFuY2hfdGFyZ2V0ID0gcHJvZztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoaXNfYXRvbWljX2ZldGNoKSB7XFxuIFxcdFxcdFxcdFxcdC8qIExvYWQgb2xkIHZhbHVlICovXFxuIFxcdFxcdFxcdFxcdGVtaXRfbGR4KFxcdTAwMjZwcm9nLCBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSxcXG4gXFx0XFx0XFx0XFx0XFx0IEJQRl9SRUdfMCwgcmVhbF9kc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYpO1xcbkBAIC0yNTQyLDE1ICsyNzA0LDE2IEBAIHN0OlxcdFxcdFxcdGluc25fb2ZmID0gaW5zbi1cXHUwMDNlb2ZmO1xcbiBcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKVxcbi1cXHRcXHRcXHRcXHRlcnIgPSBlbWl0X2F0b21pY19sZF9zdChcXHUwMDI2cHJvZywgaW5zbi1cXHUwMDNlaW1tLCBkc3RfcmVnLCBzcmNfcmVnLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VvZmYsIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gZW1pdF9hdG9taWNfbGRfc3QoZW52LCBcXHUwMDI2cHJvZywgaW5zbiwgaXAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGRzdF9yZWcsIHNyY19yZWcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xcbiBcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdGVyciA9IGVtaXRfYXRvbWljX3JtdyhcXHUwMDI2cHJvZywgaW5zbi1cXHUwMDNlaW1tLCBkc3RfcmVnLCBzcmNfcmVnLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnNuLVxcdTAwM2VvZmYsIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcbitcXHRcXHR9XFxuIFxcdFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfQjpcXG4gXFx0XFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9IOlxcbiBcXHRcXHRcXHRpZiAoIWJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSkge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbmluZGV4IDc2YjhiNzYyN2ExMDg1Li44NjgxMDFlZjUwMDJhYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbkBAIC03MjMsNiArNzIzLDggQEAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhIHtcXG4gXFx0dTE2IGNvbnN0X3JlZ19tYXBfbWFzaztcXG4gXFx0dTE2IGNvbnN0X3JlZ19zdWJwcm9nX21hc2s7XFxuIFxcdHUzMiBjb25zdF9yZWdfdmFsc1sxMF07XFxuK1xcdC8qIGluc3RydWN0aW9uIGNhbiBhY2Nlc3Mgbm9uLXN0YWNrIG1lbW9yeSAqL1xcbitcXHRib29sIG5vbl9zdGFja19hY2Nlc3M7XFxuIH07XFxuIFxcbiAjZGVmaW5lIE1BWF9VU0VEX01BUFMgNjQgLyogbWF4IG51bWJlciBvZiBtYXBzIGFjY2Vzc2VkIGJ5IG9uZSBlQlBGIHByb2dyYW0gKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5pbmRleCAxNGFjYjI0NTU3NDZmYy4uMWViY2QyNDdlZjRlM2YgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5AQCAtMTIxMCwxMyArMTIxMCwxNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXFxuIFxcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxcbi1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pO1xcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgczMyIGluc25fb2ZmX2luX3BhdGNoKTtcXG4gc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpicGZfZHVwX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuIHZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KTtcXG4gI2Vsc2VcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbilcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdTMyIG9mZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdTMyIGxlbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgczMyIGluc25fb2ZmX2luX3BhdGNoKVxcbiB7XFxuIFxcdHJldHVybiBFUlJfUFRSKC1FTk9UU1VQUCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9LY29uZmlnIGIva2VybmVsL2JwZi9LY29uZmlnXFxuaW5kZXggZWIzZGUzNTczNGYwOTIuLmUxZjM4NTBkMmY1YTA3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvS2NvbmZpZ1xcbisrKyBiL2tlcm5lbC9icGYvS2NvbmZpZ1xcbkBAIC0xNyw2ICsxNywxMCBAQCBjb25maWcgSEFWRV9DQlBGX0pJVFxcbiBjb25maWcgSEFWRV9FQlBGX0pJVFxcbiBcXHRib29sXFxuIFxcbisjIEtBU0FOIHN1cHBvcnQgZm9yIEpJVCBjb21waWxlclxcbitjb25maWcgSEFWRV9FQlBGX0pJVF9LQVNBTlxcbitcXHRib29sXFxuK1xcbiAjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XFxuICMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXFxuIGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXFxuQEAgLTEwMSw0ICsxMDUsMTcgQEAgY29uZmlnIEJQRl9MU01cXG4gXFxuIFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cXG4gXFxuK2NvbmZpZyBCUEZfSklUX0tBU0FOXFxuK1xcdGJvb2xcXG4rXFx0ZGVwZW5kcyBvbiBIQVZFX0VCUEZfSklUX0tBU0FOXFxuK1xcdGRlcGVuZHMgb24gS0FTQU5fR0VORVJJQ1xcbitcXHRkZXBlbmRzIG9uIEtBU0FOX1ZNQUxMT0NcXG4rXFx0ZGVwZW5kcyBvbiBCUEZfSklUXFxuK1xcdGRlZmF1bHQgeSBpZiBLQVNBTlxcbitcXHRoZWxwXFxuK1xcdCAgTWFrZXMgSklUIGNvbXBpbGVyIGluc2VydCBnZW5lcmljIG91dGxpbmUgS0FTQU4gY2hlY2tzIGluIEJQRlxcbitcXHQgIHByb2dyYW1zIHdoZW4gdGhleSBhcmUgaW5zZXJ0ZWQgaW4gdGhlIGtlcm5lbC4gVGhpcyBmZWF0dXJlIGlzXFxuK1xcdCAgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIHRoZSBuZWVkZWQgc2V0IG9mIEtBU0FOIGFuZCBCUEZcXG4rXFx0ICBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgZW5hYmxlZC5cXG4rXFxuIGVuZG1lbnUgIyBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xcbmluZGV4IDZlMTlhMDMwZGE2ZjEzLi4xZTE4Yjk5OWYxYjU2NSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xcbisrKyBiL2tlcm5lbC9icGYvY29yZS5jXFxuQEAgLTE1OTgsNyArMTU5OCw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aWYgKGVudilcXG4tXFx0XFx0XFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcXG4rXFx0XFx0XFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuLCByZXdyaXR0ZW4gLSAxKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHR0bXAgPSBicGZfcGF0Y2hfaW5zbl9zaW5nbGUoY2xvbmUsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuaW5kZXggMTJhOGE0ZWI3NTdmMTguLmZlZWUxZjMzZGU5ZDU1IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuQEAgLTE1MiwxMiArMTUyLDI1IEBAIHN0YXRpYyBpbnQgZ2V0X2NhbGxlZV9zdGFja19kZXB0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiB9XFxuICNlbmRpZlxcbiBcXG4rc3RhdGljIGJvb2wgaXNfbWVtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbit7XFxuK1xcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1NUIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1NUWCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9MRFgpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX01FTSB8fFxcbitcXHRcXHRCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggfHxcXG4rXFx0XFx0QlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyk7XFxuK31cXG4rXFxuIC8qIHNpbmdsZSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25pW29mZl0gaW5zdHJ1Y3Rpb24gd2FzIHJlcGxhY2VkIHdpdGggdGhlIHJhbmdlXFxuICAqIGluc25pW29mZiwgb2ZmICsgY250KS4gIEFkanVzdCBjb3JyZXNwb25kaW5nIGluc25fYXV4X2RhdGEgYnkgY29weWluZ1xcbiAgKiBbMCwgb2ZmKSBhbmQgW29mZiwgZW5kKSB0byBuZXcgbG9jYXRpb25zLCBzbyB0aGUgcGF0Y2hlZCByYW5nZSBzdGF5cyB6ZXJvXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZywgdTMyIG9mZiwgdTMyIGNudClcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csIHUzMiBvZmYsIHUzMiBjbnQsXFxuK1xcdFxcdFxcdFxcdCBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpkYXRhID0gZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhO1xcbiBcXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBuZXdfcHJvZy1cXHUwMDNlaW5zbnNpO1xcbkBAIC0xNzEsOCArMTg0LDE0IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdCAqL1xcbiBcXHRkYXRhW29mZl0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICsgb2ZmICsgY250IC0gMSk7XFxuIFxcbi1cXHRpZiAoY250ID09IDEpXFxuK1xcdGlmIChjbnQgPT0gMSkge1xcbitcXHRcXHQvKiBBIG5vbi1tZW1vcnkgYWNjZXNzaW5nIGluc24gY291bGQgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGFcXG4rXFx0XFx0ICogbWVtb3J5IGFjY2Vzc2luZyBpbnNuLCBzeXN0ZW1hdGljYWxseSBtYXJrIGl0IGZvciBub24tc3RhY2tcXG4rXFx0XFx0ICogYWNjZXNzXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkYXRhW29mZl0ubm9uX3N0YWNrX2FjY2VzcyA9IGlzX21lbV9pbnNuKGluc24pO1xcbiBcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFx0cHJvZ19sZW4gPSBuZXdfcHJvZy1cXHUwMDNlbGVuO1xcbiBcXG4gXFx0bWVtbW92ZShkYXRhICsgb2ZmICsgY250IC0gMSwgZGF0YSArIG9mZixcXG5AQCAtMTgyLDcgKzIwMSwxOSBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHQvKiBFeHBhbmQgaW5zbmlbb2ZmXSdzIHNlZW4gY291bnQgdG8gdGhlIHBhdGNoZWQgcmFuZ2UuICovXFxuIFxcdFxcdGRhdGFbaV0uc2VlbiA9IG9sZF9zZWVuO1xcbiBcXHRcXHRkYXRhW2ldLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiArIGkpO1xcbitcXHRcXHRpZiAoaSA9PSBvZmYgKyBpbnNuX29mZl9pbl9wYXRjaCkge1xcbitcXHRcXHRcXHRkYXRhW2ldLm5vbl9zdGFja19hY2Nlc3MgPSBkYXRhW29mZiArIGNudCAtIDFdLm5vbl9zdGFja19hY2Nlc3M7XFxuK1xcdFxcdFxcdGRhdGFbb2ZmICsgY250IC0gMV0ubm9uX3N0YWNrX2FjY2VzcyA9IGZhbHNlO1xcbitcXHRcXHR9IGVsc2UgaWYgKGlzX21lbV9pbnNuKGluc24gKyBpKSkge1xcbitcXHRcXHRcXHRkYXRhW2ldLm5vbl9zdGFja19hY2Nlc3MgPSB0cnVlO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4rXFx0LypcXG4rXFx0ICogTGFzdCBzbG90IGluc3RydWN0aW9uIGNvdWxkIGJlIGEgbmV3bHkgZ2VuZXJhdGVkXFxuK1xcdCAqIEJQRl9TVC9CUEZfTERYL0JQRl9TVFhcXG4rXFx0ICovXFxuK1xcdGlmIChpc19tZW1faW5zbihpbnNuICsgb2ZmICsgY250IC0gMSkgXFx1MDAyNlxcdTAwMjYgaW5zbl9vZmZfaW5fcGF0Y2ggIT0gY250IC0gMSlcXG4rXFx0XFx0ZGF0YVtvZmYgKyBjbnQgLSAxXS5ub25fc3RhY2tfYWNjZXNzID0gdHJ1ZTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBpbmRpcmVjdF90YXJnZXQgZmxhZyBvZiB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gd2FzIG1vdmVkIHRvIHRoZSBsYXN0IG9mIHRoZVxcbkBAIC0yNDUsNyArMjc2LDggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxcbiB9XFxuIFxcbiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcXG4tXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgczMyIGluc25fb2ZmX2luX3BhdGNoKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2c7XFxuIFxcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqbmV3X2RhdGEgPSBOVUxMO1xcbkBAIC0yNjksNyArMzAxLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxuIFxcdFxcdFxcdFxcdGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtvZmZdLm9yaWdfaWR4KTtcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4tXFx0YWRqdXN0X2luc25fYXV4X2RhdGEoZW52LCBuZXdfcHJvZywgb2ZmLCBsZW4pO1xcbitcXHRhZGp1c3RfaW5zbl9hdXhfZGF0YShlbnYsIG5ld19wcm9nLCBvZmYsIGxlbiwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xcbiBcXHRhZGp1c3Rfc3VicHJvZ19zdGFydHMoZW52LCBvZmYsIGxlbik7XFxuIFxcdGFkanVzdF9pbnNuX2FycmF5cyhlbnYsIG9mZiwgbGVuKTtcXG4gXFx0YWRqdXN0X3Bva2VfZGVzY3MobmV3X3Byb2csIG9mZiwgbGVuKTtcXG5AQCAtNjY4LDcgKzcwMCw3IEBAIGludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0cGF0Y2ggPSB6ZXh0X3BhdGNoO1xcbiBcXHRcXHRwYXRjaF9sZW4gPSAyO1xcbiBhcHBseV9wYXRjaF9idWZmZXI6XFxuLVxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4pO1xcbitcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBhZGpfaWR4LCBwYXRjaCwgcGF0Y2hfbGVuLCAwKTtcXG4gXFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IG5ld19wcm9nO1xcbkBAIC03MTMsNyArNzQ1LDcgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRpbnNuX2J1ZltjbnQrK10gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgLXN1YnByb2dzWzBdLnN0YWNrX2RlcHRoKTtcXG4gXFx0XFx0XFx0aW5zbl9idWZbY250KytdID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VpbnNuc2lbMF07XFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LCAxKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IG5ld19wcm9nO1xcbkBAIC03MzYsNyArNzY4LDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHR2ZXJpZmllcl9idWcoZW52LCBcXFwicHJvbG9ndWUgaXMgdG9vIGxvbmdcXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdFxcdH0gZWxzZSBpZiAoY250KSB7XFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250IC0gMSk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtNzU5LDYgKzc5Miw3IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpbnNuX2NudDsgaSsrLCBpbnNuKyspIHtcXG4gXFx0XFx0YnBmX2NvbnZlcnRfY3R4X2FjY2Vzc190IGNvbnZlcnRfY3R4X2FjY2VzcztcXG4rXFx0XFx0czMyIGluc25fb2ZmX2luX3BhdGNoID0gLTE7XFxuIFxcdFxcdHU4IG1vZGU7XFxuIFxcbiBcXHRcXHRpZiAoZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2kgKyBkZWx0YV0ubm9zcGVjKSB7XFxuQEAgLTc2OCw3ICs4MDIsOCBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdCpwYXRjaCsrID0gQlBGX1NUX05PU1BFQygpO1xcbiBcXHRcXHRcXHQqcGF0Y2grKyA9ICppbnNuO1xcbiBcXHRcXHRcXHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC04NDEsNyArODc2LDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHQqcGF0Y2grKyA9ICppbnNuO1xcbiBcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9TVF9OT1NQRUMoKTtcXG4gXFx0XFx0XFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMCk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtODU2LDE2ICs4OTIsMjAgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRpZiAoIW9wcy1cXHUwMDNlY29udmVydF9jdHhfYWNjZXNzKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0Y29udmVydF9jdHhfYWNjZXNzID0gb3BzLVxcdTAwM2Vjb252ZXJ0X2N0eF9hY2Nlc3M7XFxuK1xcdFxcdFxcdGluc25fb2ZmX2luX3BhdGNoID0gMDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgUFRSX1RPX1NPQ0tFVDpcXG4gXFx0XFx0Y2FzZSBQVFJfVE9fU09DS19DT01NT046XFxuIFxcdFxcdFxcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl9zb2NrX2NvbnZlcnRfY3R4X2FjY2VzcztcXG4rXFx0XFx0XFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBQVFJfVE9fVENQX1NPQ0s6XFxuIFxcdFxcdFxcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl90Y3Bfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3M7XFxuK1xcdFxcdFxcdGluc25fb2ZmX2luX3BhdGNoID0gMDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgUFRSX1RPX1hEUF9TT0NLOlxcbiBcXHRcXHRcXHRjb252ZXJ0X2N0eF9hY2Nlc3MgPSBicGZfeGRwX3NvY2tfY29udmVydF9jdHhfYWNjZXNzO1xcbitcXHRcXHRcXHRpbnNuX29mZl9pbl9wYXRjaCA9IDA7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFBUUl9UT19CVEZfSUQ6XFxuIFxcdFxcdGNhc2UgUFRSX1RPX0JURl9JRCB8IFBUUl9VTlRSVVNURUQ6XFxuQEAgLTk3MSw3ICsxMDExLDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc2l6ZSAqIDgsIDApO1xcbiBcXG4gcGF0Y2hfaW5zbl9idWY6XFxuLVxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGluc25fb2ZmX2luX3BhdGNoKTtcXG4gXFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0xNDY0LDcgKzE1MDUsNyBAQCBzdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdFxcbiBcXHQgKiBvbmVzIGZvciB0aGUgaGlkZGVuIHN1YnByb2cuIEhlbmNlIGFsbCBvZiB0aGUgYWRqdXN0bWVudCBvcGVyYXRpb25zXFxuIFxcdCAqIGluIGJwZl9wYXRjaF9pbnNuX2RhdGEgYXJlIG5vLW9wcy5cXG4gXFx0ICovXFxuLVxcdHByb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW4gLSAxLCBwYXRjaCwgbGVuKTtcXG4rXFx0cHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbiAtIDEsIHBhdGNoLCBsZW4sIC0xKTtcXG4gXFx0aWYgKCFwcm9nKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0ZW52LVxcdTAwM2Vwcm9nID0gcHJvZztcXG5AQCAtMTU0OSw3ICsxNTkwLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXG4gXFx0XFx0XFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcXG4gXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIDApO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTE1NjksNiArMTYxMSw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0Ym9vbCBpc19zZGl2ID0gaXNkaXYgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlb2ZmID09IDE7XFxuIFxcdFxcdFxcdGJvb2wgaXNfc21vZCA9ICFpc2RpdiBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgPT0gMTtcXG4gXFx0XFx0XFx0c3RydWN0IGJwZl9pbnNuICpwYXRjaCA9IGluc25fYnVmO1xcbitcXHRcXHRcXHRzMzIgaW5zbl9vZmZfaW5fcGF0Y2g7XFxuIFxcbiBcXHRcXHRcXHRpZiAoaXNfc2Rpdikge1xcbiBcXHRcXHRcXHRcXHQvKiBbUixXXXggc2RpdiAwIC1cXHUwMDNlIDBcXG5AQCAtMTU5NSw2ICsxNjM4LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XFxuIFxcdFxcdFxcdFxcdCpwYXRjaCsrID0gKmluc247XFxuIFxcdFxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxuK1xcdFxcdFxcdFxcdGluc25fb2ZmX2luX3BhdGNoID0gY250IC0gMTtcXG4gXFx0XFx0XFx0fSBlbHNlIGlmIChpc19zbW9kKSB7XFxuIFxcdFxcdFxcdFxcdC8qIFtSLFddeCBtb2QgMCAtXFx1MDAzZSBbUixXXXggKi9cXG4gXFx0XFx0XFx0XFx0LyogW1IsV114IG1vZCAtMSAtXFx1MDAzZSAwICovXFxuQEAgLTE2MTEsNiArMTY1NSw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0XFx0KnBhdGNoKysgPSBCUEZfTU9WMzJfSU1NKGluc24tXFx1MDAzZWRzdF9yZWcsIDApO1xcbiBcXHRcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XFxuIFxcdFxcdFxcdFxcdCpwYXRjaCsrID0gKmluc247XFxuK1xcdFxcdFxcdFxcdGluc25fb2ZmX2luX3BhdGNoID0gcGF0Y2ggLSBpbnNuX2J1ZiAtIDE7XFxuIFxcbiBcXHRcXHRcXHRcXHRpZiAoIWlzNjQpIHtcXG4gXFx0XFx0XFx0XFx0XFx0KnBhdGNoKysgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xcbkBAIC0xNjI2LDEyICsxNjcxLDE0IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0XFx0KnBhdGNoKysgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xcbiBcXHRcXHRcXHRcXHQqcGF0Y2grKyA9ICppbnNuO1xcbiBcXHRcXHRcXHRcXHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xcbitcXHRcXHRcXHRcXHRpbnNuX29mZl9pbl9wYXRjaCA9IGNudCAtIDE7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFxcdC8qIFtSLFddeCBtb2QgMCAtXFx1MDAzZSBbUixXXXggKi9cXG4gXFx0XFx0XFx0XFx0KnBhdGNoKysgPSBCUEZfUkFXX0lOU04oKGlzNjQgPyBCUEZfSk1QIDogQlBGX0pNUDMyKSB8XFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdEJQRl9KRVEgfCBCUEZfSywgaW5zbi1cXHUwMDNlc3JjX3JlZyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0MCwgMSArIChpczY0ID8gMCA6IDEpLCAwKTtcXG4gXFx0XFx0XFx0XFx0KnBhdGNoKysgPSAqaW5zbjtcXG4rXFx0XFx0XFx0XFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSBwYXRjaCAtIGluc25fYnVmIC0gMTtcXG4gXFxuIFxcdFxcdFxcdFxcdGlmICghaXM2NCkge1xcbiBcXHRcXHRcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XFxuQEAgLTE2NDAsNyArMTY4Nyw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0XFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTE2NTYsNiArMTcwNCw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0ICAgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1gpKSB7XFxuIFxcdFxcdFxcdHN0cnVjdCBicGZfaW5zbiAqcGF0Y2ggPSBpbnNuX2J1ZjtcXG4gXFx0XFx0XFx0dTY0IHVhZGRyZXNzX2xpbWl0ID0gYnBmX2FyY2hfdWFkZHJlc3NfbGltaXQoKTtcXG4rXFx0XFx0XFx0czMyIGluc25fb2ZmX2luX3BhdGNoO1xcbiBcXG4gXFx0XFx0XFx0aWYgKCF1YWRkcmVzc19saW1pdClcXG4gXFx0XFx0XFx0XFx0Z290byBuZXh0X2luc247XFxuQEAgLTE2NjYsMTEgKzE3MTUsMTMgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9BTFU2NF9JTU0oQlBGX1JTSCwgQlBGX1JFR19BWCwgMzIpO1xcbiBcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KTEUsIEJQRl9SRUdfQVgsIHVhZGRyZXNzX2xpbWl0IFxcdTAwM2VcXHUwMDNlIDMyLCAyKTtcXG4gXFx0XFx0XFx0KnBhdGNoKysgPSAqaW5zbjtcXG4rXFx0XFx0XFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSBwYXRjaCAtIGluc25fYnVmIC0gMTtcXG4gXFx0XFx0XFx0KnBhdGNoKysgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xcbiBcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9NT1Y2NF9JTU0oaW5zbi1cXHUwMDNlZHN0X3JlZywgMCk7XFxuIFxcbiBcXHRcXHRcXHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBpbnNuX29mZl9pbl9wYXRjaCk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMTY5MCw3ICsxNzQxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMCk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMTc0Myw3ICsxNzk1LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9BTFU2NF9JTU0oQlBGX01VTCwgb2ZmX3JlZywgLTEpO1xcbiBcXHRcXHRcXHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTE3ODgsNyArMTg0MSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0aW5zbl9idWZbNl0gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfQVgsIHN0YWNrX29mZl9jbnQpO1xcbiBcXHRcXHRcXHRjbnQgPSA3O1xcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMyk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMTgwOSw3ICsxODYzLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRpbnNuX2J1ZlszXSA9IEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR18xMCwgQlBGX1JFR19BWCwgc3RhY2tfb2ZmKTtcXG4gXFx0XFx0XFx0Y250ID0gNDtcXG4gXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIDIpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTE4MzAsNyArMTg4NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0aWYgKGNudCA9PSAwKVxcbiBcXHRcXHRcXHRcXHRnb3RvIG5leHRfaW5zbjtcXG4gXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIGNudCAtIDEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTE5MTUsNyArMTk3MSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG1hcCktXFx1MDAzZWluZGV4X21hc2spO1xcbiBcXHRcXHRcXHRpbnNuX2J1ZlsyXSA9ICppbnNuO1xcbiBcXHRcXHRcXHRjbnQgPSAzO1xcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0xOTQ4LDcgKzIwMDUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdGluc25fYnVmWzJdID0gKmluc247XFxuIFxcdFxcdFxcdGNudCA9IDM7XFxuIFxcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0xOTY3LDcgKzIwMjUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdGluc25fYnVmWzFdID0gKmluc247XFxuIFxcdFxcdFxcdGNudCA9IDI7XFxuIFxcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0yMDA3LDggKzIwNjYsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHRcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKFxcbitcXHRcXHRcXHRcXHRcXHRlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCwgLTEpO1xcbiBcXHRcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTIwOTEsNyArMjE1MCw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0Y250ID0gMztcXG4gXFxuIFxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAtMSk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMjExOSw3ICsyMTc4LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRpbnNuX2J1ZlswXSA9IEJQRl9BTFUzMl9SRUcoQlBGX1hPUiwgQlBGX1JFR18wLCBCUEZfUkVHXzApO1xcbiBcXHRcXHRcXHRjbnQgPSAxO1xcbiAjZW5kaWZcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTIxMzcsNyArMjE5Nyw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTtcXG4gXFx0XFx0XFx0Y250ID0gMztcXG4gXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0yMTcxLDcgKzIyMzIsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdGluc25fYnVmW2NudCsrXSA9IEJQRl9KTVBfQSgxKTtcXG4gXFx0XFx0XFx0aW5zbl9idWZbY250KytdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FSU5WQUwpO1xcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTIyMDMsNyArMjI2NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0XFx0Y250ID0gMTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTIyMjksNyArMjI5Miw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0XFx0Y250ID0gMjtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTIyNDUsNyArMjMwOSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0LyogTG9hZCBJUCBhZGRyZXNzIGZyb20gY3R4IC0gMTYgKi9cXG4gXFx0XFx0XFx0aW5zbl9idWZbMF0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAtMTYpO1xcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgMSk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICAxLCAtMSk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMjMwMCw3ICsyMzY1LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRpbnNuX2J1ZlsxMF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUVOT0VOVCk7XFxuIFxcdFxcdFxcdGNudCA9IDExO1xcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTIzMTgsNyArMjM4NCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0aW5zbl9idWZbMV0gPSBCUEZfQVRPTUlDX09QKEJQRl9EVywgQlBGX1hDSEcsIEJQRl9SRUdfMSwgQlBGX1JFR18wLCAwKTtcXG4gXFx0XFx0XFx0Y250ID0gMjtcXG4gXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0yMzg2LDcgKzI0NTMsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdC8qIENvcHkgZmlyc3QgYWN0dWFsIGluc24gdG8gcHJlc2VydmUgaXQgKi9cXG4gXFx0XFx0aW5zbl9idWZbY250KytdID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VpbnNuc2lbc3VicHJvZ19zdGFydF07XFxuIFxcbi1cXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBzdWJwcm9nX3N0YXJ0LCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgc3VicHJvZ19zdGFydCwgaW5zbl9idWYsIGNudCwgY250IC0gMSk7XFxuIFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRcXHRlbnYtXFx1MDAzZXByb2cgPSBwcm9nID0gbmV3X3Byb2c7XFxuQEAgLTI0ODUsNyArMjU1Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmlubGluZV9icGZfbG9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRpbnNuX2J1ZltjbnQrK10gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfOCwgQlBGX1JFR18xMCwgcjhfb2Zmc2V0KTtcXG4gXFxuIFxcdCp0b3RhbF9jbnQgPSBjbnQ7XFxuLVxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHBvc2l0aW9uLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgcG9zaXRpb24sIGluc25fYnVmLCBjbnQsIC0xKTtcXG4gXFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0cmV0dXJuIG5ld19wcm9nO1xcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggNTFmNzk2NWQ0MmUzMjQuLjEyNDZjZThmNWYwZjQ2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC0zMTQ0LDYgKzMxNDQsMTEgQEAgc3RhdGljIHZvaWQgbWFya19pbmRpcmVjdF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeClcXG4gXFx0ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2lkeF0uaW5kaXJlY3RfdGFyZ2V0ID0gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbWFya19ub25fc3RhY2tfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgpXFxuK3tcXG4rXFx0ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2lkeF0ubm9uX3N0YWNrX2FjY2VzcyA9IHRydWU7XFxuK31cXG4rXFxuICNkZWZpbmUgTFJfRlJBTUVOT19CSVRTXFx0NFxcbiAjZGVmaW5lIExSX1NQSV9CSVRTXFx0NlxcbiAjZGVmaW5lIExSX0VOVFJZX0JJVFNcXHQoTFJfU1BJX0JJVFMgKyBMUl9GUkFNRU5PX0JJVFMgKyAxKVxcbkBAIC02MzMzLDYgKzYzMzgsMTAgQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRjb2VyY2VfcmVnX3RvX3NpemVfc3goXFx1MDAyNnJlZ3NbdmFsdWVfcmVnbm9dLCBzaXplKTtcXG4gXFx0fVxcbitcXG4rXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlICE9IFBUUl9UT19TVEFDSylcXG4rXFx0XFx0bWFya19ub25fc3RhY2tfYWNjZXNzKGVudiwgaW5zbl9pZHgpO1xcbitcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmNcXG5pbmRleCAwMjIyYTlhNWQwNzYxNC4uMzdjNDA1ZmMyYjBkMjMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmNcXG5AQCAtMjI3LDQyICsyMjcsNiBAQCBzdGF0aWMgdm9pZCBjaGVja19pbmNvcnJlY3RfaW5kZXgodm9pZClcXG4gXFx0Y2hlY2tfbWlkX2luc25faW5kZXgoKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzZXRfYnBmX2ppdF9oYXJkZW4oY2hhciAqbGV2ZWwpXFxuLXtcXG4tXFx0Y2hhciBvbGRfbGV2ZWw7XFxuLVxcdGludCBlcnIgPSAtMTtcXG4tXFx0aW50IGZkID0gLTE7XFxuLVxcbi1cXHRmZCA9IG9wZW4oXFxcIi9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlblxcXCIsIE9fUkRXUiB8IE9fTk9OQkxPQ0spO1xcbi1cXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdEFTU0VSVF9GQUlMKFxcXCJvcGVuIC4uLi9icGZfaml0X2hhcmRlbiByZXR1cm5lZCAlZCAoZXJybm89JWQpXFxcIiwgZmQsIGVycm5vKTtcXG4tXFx0XFx0cmV0dXJuIC0xO1xcbi1cXHR9XFxuLVxcbi1cXHRlcnIgPSByZWFkKGZkLCBcXHUwMDI2b2xkX2xldmVsLCAxKTtcXG4tXFx0aWYgKGVyciAhPSAxKSB7XFxuLVxcdFxcdEFTU0VSVF9GQUlMKFxcXCJyZWFkIGZyb20gLi4uL2JwZl9qaXRfaGFyZGVuIHJldHVybmVkICVkIChlcnJubz0lZClcXFwiLCBlcnIsIGVycm5vKTtcXG4tXFx0XFx0ZXJyID0gLTE7XFxuLVxcdFxcdGdvdG8gZW5kO1xcbi1cXHR9XFxuLVxcbi1cXHRsc2VlayhmZCwgMCwgU0VFS19TRVQpO1xcbi1cXG4tXFx0ZXJyID0gd3JpdGUoZmQsIGxldmVsLCAxKTtcXG4tXFx0aWYgKGVyciAhPSAxKSB7XFxuLVxcdFxcdEFTU0VSVF9GQUlMKFxcXCJ3cml0ZSB0byAuLi4vYnBmX2ppdF9oYXJkZW4gcmV0dXJuZWQgJWQgKGVycm5vPSVkKVxcXCIsIGVyciwgZXJybm8pO1xcbi1cXHRcXHRlcnIgPSAtMTtcXG4tXFx0XFx0Z290byBlbmQ7XFxuLVxcdH1cXG4tXFxuLVxcdGVyciA9IDA7XFxuLVxcdCpsZXZlbCA9IG9sZF9sZXZlbDtcXG4tZW5kOlxcbi1cXHRpZiAoZmQgXFx1MDAzZT0gMClcXG4tXFx0XFx0Y2xvc2UoZmQpO1xcbi1cXHRyZXR1cm4gZXJyO1xcbi19XFxuLVxcbiBzdGF0aWMgdm9pZCBjaGVja19ibGluZG5lc3Modm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2luc24gaW5zbnNbXSA9IHtcXG5AQCAtMjcyLDcgKzIzNiw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2JsaW5kbmVzcyh2b2lkKVxcbiBcXHRcXHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMSksXFxuIFxcdFxcdEJQRl9FWElUX0lOU04oKSxcXG4gXFx0fTtcXG4tXFx0aW50IHByb2dfZmQgPSAtMSwgbWFwX2ZkO1xcbitcXHRpbnQgcHJvZ19mZCA9IC0xLCBtYXBfZmQsIHJldDtcXG4gXFx0c3RydWN0IGJwZl9pbnNuX2FycmF5X3ZhbHVlIHZhbCA9IHt9O1xcbiBcXHRjaGFyIGJwZl9qaXRfaGFyZGVuID0gJ0AnOyAvKiBub24tZXhpenN0aW5nIHZhbHVlICovXFxuIFxcdGludCBpO1xcbkBAIC0yOTEsNyArMjU1LDggQEAgc3RhdGljIHZvaWQgY2hlY2tfYmxpbmRuZXNzKHZvaWQpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuIFxcdGJwZl9qaXRfaGFyZGVuID0gJzInO1xcbi1cXHRpZiAoc2V0X2JwZl9qaXRfaGFyZGVuKFxcdTAwMjZicGZfaml0X2hhcmRlbikpIHtcXG4rXFx0cmV0ID0gc2V0X2JwZl9qaXRfaGFyZGVuKFxcdTAwMjZicGZfaml0X2hhcmRlbik7XFxuK1xcdGlmICghQVNTRVJUX09LKHJldCwgXFxcInNldCBicGZfaml0X2hhcmRlblxcXCIpKSB7XFxuIFxcdFxcdGJwZl9qaXRfaGFyZGVuID0gJ0AnOyAvKiBvcGVuLCByZWFkIG9yIHdyaXRlIGZhaWxlZCA9XFx1MDAzZSBubyB3cml0ZSB3YXMgZG9uZSAqL1xcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2thc2FuLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mMDA2YjkyZWUxMzFhY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rYXNhbi5jXFxuQEAgLTAsMCArMSw0MjUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXFxuK1xcbisvKlxcbisgKiBUZXN0cyB2YWxpZGF0aW5nIHRoYXQgS0FTQU4gcmVwb3J0cyBhcmUgcHJvcGVybHkgaW5zdHJ1bWVudGVkIGFuZFxcbisgKiBnZW5lcmF0ZWQgb24gYSB3aWRlIHZhcmlldHkgb2YgaW5zdHJ1Y3Rpb25zLiBUaGUgcnVubmluZyBrZXJuZWwgbmVlZHNcXG4rICoga2FzYW5fbXVsdGlfc2hvdCB0byBydW4gbXVsdGlwbGUga2FzYW4tZ2VuZXJhdGluZyBzdWJ0ZXN0cyBhdCBvbmNlXFxuKyAqL1xcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9ldGhlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bnByaXZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwia2FzYW4uc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia2FzYW5faGFyZGVuLnNrZWwuaFxcXCJcXG4rXFxuKyNkZWZpbmUgU1VCVEVTVF9OQU1FX01BWF9MRU5cXHQxMjhcXG4rI2RlZmluZSBQUk9HX05BTUVfTUFYX0xFTlxcdDEyOFxcbitcXG4rI2RlZmluZSBNQVhfTE9HX1NJWkVcXHRcXHQoOCAqIDEwMjQpXFxuKyNkZWZpbmUgUkVBRF9DSFVOS19TSVpFXFx0XFx0MjU2XFxuK1xcbisjZGVmaW5lIEtBU0FOX1BBVFRFUk5fU0xBQl9VQUYgXFxcIkJVRzogS0FTQU46IHNsYWItdXNlLWFmdGVyLWZyZWUgXFxcIiBcXFxcXFxuK1xcdFxcXCJpbiBicGZfcHJvZ18lMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeF8lc1xcXCJcXG4rI2RlZmluZSBLQVNBTl9QQVRURVJOX1JFUE9SVCBcXFwiJXMgb2Ygc2l6ZSAlZCBhdCBhZGRyXFxcIlxcbitcXG4rc3RhdGljIGNoYXIga2xvZ19idWZmZXJbTUFYX0xPR19TSVpFXTtcXG4rc3RhdGljIGNoYXIgcmVjb3JkW01BWF9MT0dfU0laRV07XFxuK1xcbitzdHJ1Y3QgdGVzdF9zcGVjIHtcXG4rXFx0Y2hhciAqcHJvZ190eXBlO1xcbitcXHRib29sIGlzX3dyaXRlO1xcbitcXHRib29sIG9ubHlfMzJfb3JfNjQ7XFxuK1xcdGJvb2wgbmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsO1xcbitcXHRib29sIHNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nO1xcbitcXHRib29sIHNraXBfb25fc3RhY2tfdGVzdGluZztcXG4rXFx0aW50IHJ1bl9zaXplO1xcbitcXHRib29sIGV4cGVjdF9ub19yZXBvcnQ7XFxuK1xcdGJvb2wgcm5kX2hpMzI7XFxuK307XFxuK1xcbitzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHtcXG4rXFx0X191OCBkYXRhXzE7XFxuK1xcdF9fdTE2IGRhdGFfMjtcXG4rXFx0X191MzIgZGF0YV80O1xcbitcXHRfX3U2NCBkYXRhXzg7XFxuK307XFxuK1xcbitzdHJ1Y3QgdGVzdF9jdHgge1xcbitcXHRfX3U4ICBwcm9nX3RhZ1tCUEZfVEFHX1NJWkVdO1xcbitcXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xcbitcXHRpbnQgKmFjY2Vzc19zaXplO1xcbitcXHRib29sIHNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsO1xcbitcXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XFxuK1xcdGNoYXIgcHJvZ19uYW1lW1NVQlRFU1RfTkFNRV9NQVhfTEVOXTtcXG4rXFx0aW50IGtsb2dfZmQ7XFxuK307XFxuK1xcbitzdGF0aWMgaW50IG9wZW5fa2VybmVsX2xvZ3Modm9pZClcXG4re1xcbitcXHRpbnQgZmQ7XFxuK1xcbitcXHRmZCA9IG9wZW4oXFxcIi9kZXYva21zZ1xcXCIsIE9fUkRPTkxZIHwgT19OT05CTE9DSyk7XFxuK1xcbitcXHRyZXR1cm4gZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNraXBfa2VybmVsX2xvZ3MoaW50IGZkKVxcbit7XFxuK1xcdGxzZWVrKGZkLCAwLCBTRUVLX0VORCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmVhZF9rZXJuZWxfbG9ncyhpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IG1heF9sZW4pXFxuK3tcXG4rXFx0c2l6ZV90IHRvdGFsID0gMDtcXG4rXFx0c3NpemVfdCBuO1xcbitcXG4rXFx0YnVmWzBdID0gJ1xcXFwwJztcXG4rXFx0d2hpbGUgKDEpIHtcXG4rXFx0XFx0Y2hhciAqbXNnLCAqZW9sO1xcbitcXHRcXHRzaXplX3QgbGVuO1xcbitcXG4rXFx0XFx0biA9IHJlYWQoZmQsIHJlY29yZCwgc2l6ZW9mKHJlY29yZCkgLSAxKTtcXG4rXFx0XFx0aWYgKG4gXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGlmIChlcnJubyA9PSBFQUdBSU4pXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRyZXR1cm4gbjtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZWNvcmRbbl0gPSAnXFxcXDAnO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRWFjaCBrbXNnIHJlY29yZCBzdGFydHMgd2l0aCBzb21lIG1ldGFkYXRhLCBzZXBhcmF0ZWRcXG4rXFx0XFx0ICogZnJvbSB0aGUgYWN0dWFsIGNvbnRlbnQgYnkgYSBzZW1pLWNvbG9uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtc2cgPSBzdHJjaHIocmVjb3JkLCAnOycpO1xcbitcXHRcXHRpZiAoIW1zZylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdG1zZysrO1xcbitcXHRcXHRlb2wgPSBzdHJjaHIobXNnLCAnXFxcXG4nKTtcXG4rXFx0XFx0aWYgKGVvbClcXG4rXFx0XFx0XFx0KmVvbCA9ICdcXFxcMCc7XFxuK1xcbitcXHRcXHRsZW4gPSBzdHJsZW4obXNnKTtcXG4rXFx0XFx0aWYgKHRvdGFsICsgbGVuICsgMiBcXHUwMDNlIG1heF9sZW4pXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRtZW1jcHkoYnVmICsgdG90YWwsIG1zZywgbGVuKTtcXG4rXFx0XFx0dG90YWwgKz0gbGVuO1xcbitcXHRcXHRidWZbdG90YWwrK10gPSAnXFxcXG4nO1xcbitcXHRcXHRidWZbdG90YWxdID0gJ1xcXFwwJztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRvdGFsO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGNoZWNrX2thc2FuX3JlcG9ydF9pbl9rZXJuZWxfbG9ncyhjaGFyICpidWYsIHN0cnVjdCB0ZXN0X2N0eCAqY3R4LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgaXNfd3JpdGUsIGludCBzaXplKVxcbit7XFxuK1xcdGNoYXIgYWNjZXNzX2xvZ1tSRUFEX0NIVU5LX1NJWkVdO1xcbitcXHRjaGFyICprYXNhbl9yZXBvcnRfc3RhcnQ7XFxuK1xcdGludCBuc2l6ZTtcXG4rXFxuK1xcdHNucHJpbnRmKGFjY2Vzc19sb2csIFJFQURfQ0hVTktfU0laRSwgS0FTQU5fUEFUVEVSTl9TTEFCX1VBRixcXG4rXFx0XFx0IGN0eC1cXHUwMDNlcHJvZ190YWdbMF0sIGN0eC1cXHUwMDNlcHJvZ190YWdbMV0sIGN0eC1cXHUwMDNlcHJvZ190YWdbMl0sXFxuK1xcdFxcdCBjdHgtXFx1MDAzZXByb2dfdGFnWzNdLCBjdHgtXFx1MDAzZXByb2dfdGFnWzRdLCBjdHgtXFx1MDAzZXByb2dfdGFnWzVdLFxcbitcXHRcXHQgY3R4LVxcdTAwM2Vwcm9nX3RhZ1s2XSwgY3R4LVxcdTAwM2Vwcm9nX3RhZ1s3XSwgY3R4LVxcdTAwM2Vwcm9nX25hbWUpO1xcbitcXHQvKlxcbitcXHQgKiBTZWFyY2hlZCBrYXNhbiByZXBvcnQgaXMgdmFsaWQgaWZcXG4rXFx0ICogLSBpdCBjb250YWlucyB0aGUgZXhwZWN0ZWQga2FzYW4gcGF0dGVyblxcbitcXHQgKiAtIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmF1bHR5IGFjY2VzcyBpcyBmb3VuZCBzb21ld2hlcmVcXG4rXFx0ICogICBhZnRlciB0aGUgaGVhZGVyIChub3QgbmVjZXNzYXJpbHkgb24gdGhlIHZlcnkgbmV4dCBsaW5lLFxcbitcXHQgKiAgIGJlY2F1c2Ugb3RoZXIga2VybmVsIG1lc3NhZ2VzIG1heSBpbnRlcmxlYXZlKVxcbitcXHQgKiAtIGZhdWx0eSBhY2Nlc3MgcHJvcGVydGllcyBtYXRjaCB0aGUgdGVzdGVkIHR5cGUgYW5kIHNpemVcXG4rXFx0ICovXFxuK1xcdGthc2FuX3JlcG9ydF9zdGFydCA9IHN0cnN0cihidWYsIGFjY2Vzc19sb2cpO1xcbitcXG4rXFx0aWYgKCFrYXNhbl9yZXBvcnRfc3RhcnQpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0bnNpemUgPSBzbnByaW50ZihhY2Nlc3NfbG9nLCBSRUFEX0NIVU5LX1NJWkUsIEtBU0FOX1BBVFRFUk5fUkVQT1JULFxcbitcXHRcXHRcXHQgaXNfd3JpdGUgPyBcXFwiV3JpdGVcXFwiIDogXFxcIlJlYWRcXFwiLCBzaXplKTtcXG4rXFxuK1xcdGlmICghc3Ryc3RyKGthc2FuX3JlcG9ydF9zdGFydCwgYWNjZXNzX2xvZykpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGV4ZWNfc3VidGVzdChzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCxcXG4rXFx0XFx0XFx0IGludCBhY2Nlc3Nfc2l6ZSwgYm9vbCBvbl9zdGFjaylcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xcbitcXHRzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBpbmZvO1xcbitcXHR1aW50OF90IGJ1ZltFVEhfSExFTl0gPSB7MH07XFxuK1xcdGludCByZXQsIHByb2dfZmQ7XFxuK1xcdF9fdTMyIGluZm9fbGVuO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2Vwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoY3R4LVxcdTAwM2VvYmosXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgY3R4LVxcdTAwM2Vwcm9nX25hbWUpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoY3R4LVxcdTAwM2Vwcm9nLCBcXFwiZmluZCB0ZXN0IHByb2dcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XFxuK1xcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgaW5mb19sZW4pO1xcbitcXHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC1cXHUwMDNlcHJvZyk7XFxuK1xcdGlmICghQVNTRVJUX09LX0ZEKHByb2dfZmQsIFxcXCJnZXQgcHJvZyBmZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHJldCA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHByb2dfZmQsIFxcdTAwMjZpbmZvLCBcXHUwMDI2aW5mb19sZW4pO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJmZXRjaCBsb2FkZWQgcHJvZ3JhbSBpbmZvXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0bWVtY3B5KGN0eC1cXHUwMDNlcHJvZ190YWcsIGluZm8udGFnLCBCUEZfVEFHX1NJWkUpO1xcbitcXG4rXFx0c2tpcF9rZXJuZWxfbG9ncyhjdHgtXFx1MDAzZWtsb2dfZmQpO1xcbitcXG4rXFx0dG9wdHMuc3ogPSBzaXplb2Yoc3RydWN0IGJwZl90ZXN0X3J1bl9vcHRzKTtcXG4rXFx0dG9wdHMuZGF0YV9zaXplX2luID0gRVRIX0hMRU47XFxuK1xcdHRvcHRzLmRhdGFfaW4gPSBidWY7XFxuK1xcdGlmIChjdHgtXFx1MDAzZWFjY2Vzc19zaXplKVxcbitcXHRcXHQqY3R4LVxcdTAwM2VhY2Nlc3Nfc2l6ZSA9IGFjY2Vzc19zaXplO1xcbitcXHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChjdHgtXFx1MDAzZXByb2cpLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZ0b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LKHJldCwgXFxcInJ1biBwcm9nXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJldCA9IHJlYWRfa2VybmVsX2xvZ3MoY3R4LVxcdTAwM2VrbG9nX2ZkLCBrbG9nX2J1ZmZlciwgTUFYX0xPR19TSVpFKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UocmV0LCAwLCBcXFwicmVhZCBrZXJuZWwgbG9nc1xcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyZXQgPSBjaGVja19rYXNhbl9yZXBvcnRfaW5fa2VybmVsX2xvZ3Moa2xvZ19idWZmZXIsIGN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dGVzdC1cXHUwMDNlaXNfd3JpdGUsIGFjY2Vzc19zaXplKTtcXG4rXFx0aWYgKG9uX3N0YWNrIHx8IHRlc3QtXFx1MDAzZWV4cGVjdF9ub19yZXBvcnQpXFxuK1xcdFxcdEFTU0VSVF9ORVEocmV0LCAwLCBcXFwibm8gcmVwb3J0IHNob3VsZCBiZSBnZW5lcmF0ZWRcXFwiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRBU1NFUlRfT0socmV0LCBcXFwicmVwb3J0IHNob3VsZCBiZSBnZW5lcmF0ZWRcXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnVuX3N1YnRlc3Rfd2l0aF9zaXplX2FuZF9sb2NhdGlvbihzdHJ1Y3QgdGVzdF9jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgYWNjZXNzX3NpemUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBib29sIG9uX3N0YWNrKVxcbit7XFxuK1xcdGNoYXIgc3VidGVzdF9uYW1lW1NVQlRFU1RfTkFNRV9NQVhfTEVOXTtcXG4rXFxuK1xcdGlmICh0ZXN0LVxcdTAwM2Vza2lwX211bHRpX3NpemVfdGVzdGluZykge1xcbitcXHRcXHRzbnByaW50ZihzdWJ0ZXN0X25hbWUsIFNVQlRFU1RfTkFNRV9NQVhfTEVOLCBcXFwiJXNcXFwiLFxcbitcXHRcXHRcXHQgdGVzdC1cXHUwMDNlcHJvZ190eXBlKTtcXG4rXFx0XFx0c3RybmNweShjdHgtXFx1MDAzZXByb2dfbmFtZSwgdGVzdC1cXHUwMDNlcHJvZ190eXBlLCBQUk9HX05BTUVfTUFYX0xFTik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHNucHJpbnRmKHN1YnRlc3RfbmFtZSwgU1VCVEVTVF9OQU1FX01BWF9MRU4sIFxcXCIlc18lZF8lc1xcXCIsXFxuK1xcdFxcdFxcdCB0ZXN0LVxcdTAwM2Vwcm9nX3R5cGUsIGFjY2Vzc19zaXplLFxcbitcXHRcXHRcXHQgb25fc3RhY2sgPyBcXFwib25fc3RhY2tcXFwiIDogXFxcIm5vdF9vbl9zdGFja1xcXCIpO1xcbitcXHRcXHRzbnByaW50ZihjdHgtXFx1MDAzZXByb2dfbmFtZSwgUFJPR19OQU1FX01BWF9MRU4sIFxcXCIlc18lc1xcXCIsXFxuK1xcdFxcdFxcdCB0ZXN0LVxcdTAwM2Vwcm9nX3R5cGUsXFxuK1xcdFxcdFxcdCBvbl9zdGFjayA/IFxcXCJvbl9zdGFja1xcXCIgOiBcXFwibm90X29uX3N0YWNrXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghdGVzdF9fc3RhcnRfc3VidGVzdChzdWJ0ZXN0X25hbWUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAodGVzdC1cXHUwMDNlbmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsIFxcdTAwMjZcXHUwMDI2IGN0eC1cXHUwMDNlc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWwpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGV4ZWNfc3VidGVzdChjdHgsIHRlc3QsIGFjY2Vzc19zaXplLCBvbl9zdGFjayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCxcXG4rXFx0XFx0XFx0XFx0ICBpbnQgc2l6ZSlcXG4re1xcbitcXHRydW5fc3VidGVzdF93aXRoX3NpemVfYW5kX2xvY2F0aW9uKGN0eCwgdGVzdCwgc2l6ZSwgZmFsc2UpO1xcbitcXHRpZiAoIXRlc3QtXFx1MDAzZXNraXBfb25fc3RhY2tfdGVzdGluZylcXG4rXFx0XFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplX2FuZF9sb2NhdGlvbihjdHgsIHRlc3QsIHNpemUsIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydW5fc3VidGVzdChzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4re1xcbitcXHRpZiAodGVzdC1cXHUwMDNlc2tpcF9tdWx0aV9zaXplX3Rlc3RpbmcpIHtcXG4rXFx0XFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgdGVzdC1cXHUwMDNlcnVuX3NpemUpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghdGVzdC1cXHUwMDNlb25seV8zMl9vcl82NCkge1xcbitcXHRcXHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCAxKTtcXG4rXFx0XFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgMik7XFxuK1xcdH1cXG4rXFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgNCk7XFxuK1xcdHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShjdHgsIHRlc3QsIDgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydW5fYmxpbmRpbmdfc3VidGVzdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X3NwZWMgYmxpbmRpbmdfc3BlYyA9IHtcXG4rXFx0XFx0LnByb2dfdHlwZSA9IFxcXCJzdF9ibGluZGVkXFxcIixcXG4rXFx0XFx0LmlzX3dyaXRlID0gdHJ1ZSxcXG4rXFx0fTtcXG4rXFx0Y2hhciBicGZfaml0X2hhcmRlbiA9ICcyJztcXG4rXFx0c3RydWN0IGthc2FuX2hhcmRlbiAqc2tlbDtcXG4rXFx0c3RydWN0IHRlc3RfY3R4ICpjdHg7XFxuK1xcbitcXHRpZiAoIXRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInN0X2JsaW5kZWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y3R4ID0gY2FsbG9jKDEsIHNpemVvZigqY3R4KSk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihjdHgsIFxcXCJhbGxvYyBibGluZGluZyBjdHhcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRjdHgtXFx1MDAzZWtsb2dfZmQgPSAtMTtcXG4rXFxuK1xcdGlmIChzZXRfYnBmX2ppdF9oYXJkZW4oXFx1MDAyNmJwZl9qaXRfaGFyZGVuKSlcXG4rXFx0XFx0Z290byBmcmVlX2N0eDtcXG4rXFxuK1xcdHNrZWwgPSBrYXNhbl9oYXJkZW5fX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJvcGVuIGFuZCBsb2FkIGJsaW5kZWQgcHJvZ1xcXCIpKVxcbitcXHRcXHRnb3RvIHJlc3RvcmU7XFxuK1xcbitcXHRjdHgtXFx1MDAzZWtsb2dfZmQgPSBvcGVuX2tlcm5lbF9sb2dzKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX0ZEKGN0eC1cXHUwMDNla2xvZ19mZCwgXFxcIm9wZW4ga2VybmVsIGxvZ3NcXFwiKSlcXG4rXFx0XFx0Z290byBkZXN0cm95O1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VvYmogPSBza2VsLVxcdTAwM2VvYmo7XFxuK1xcdHN0cm5jcHkoY3R4LVxcdTAwM2Vwcm9nX25hbWUsIFxcXCJzdF9ibGluZGVkXFxcIiwgUFJPR19OQU1FX01BWF9MRU4pO1xcbitcXG4rXFx0ZXhlY19zdWJ0ZXN0KGN0eCwgXFx1MDAyNmJsaW5kaW5nX3NwZWMsIDEsIGZhbHNlKTtcXG4rXFxuK2Rlc3Ryb3k6XFxuK1xcdGNsb3NlKGN0eC1cXHUwMDNla2xvZ19mZCk7XFxuK1xcdGthc2FuX2hhcmRlbl9fZGVzdHJveShza2VsKTtcXG4rcmVzdG9yZTpcXG4rXFx0c2V0X2JwZl9qaXRfaGFyZGVuKFxcdTAwMjZicGZfaml0X2hhcmRlbik7XFxuK2ZyZWVfY3R4OlxcbitcXHRmcmVlKGN0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XFxuK1xcdHtcXG4rXFx0XFx0LnByb2dfdHlwZSA9IFxcXCJzdFxcXCIsXFxuK1xcdFxcdC5pc193cml0ZSA9IHRydWVcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQucHJvZ190eXBlID0gXFxcInN0eFxcXCIsXFxuK1xcdFxcdC5pc193cml0ZSA9IHRydWVcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQucHJvZ190eXBlID0gXFxcImxkeFxcXCIsXFxuK1xcdFxcdC5pc193cml0ZSA9IGZhbHNlXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnByb2dfdHlwZSA9IFxcXCJzaW1wbGVfYXRvbWljXFxcIixcXG4rXFx0XFx0LmlzX3dyaXRlID0gZmFsc2UsXFxuK1xcdFxcdC5vbmx5XzMyX29yXzY0ID0gdHJ1ZVxcbitcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5wcm9nX3R5cGUgPSBcXFwibG9hZF9hY3F1aXJlXFxcIixcXG4rXFx0XFx0LmlzX3dyaXRlID0gZmFsc2UsXFxuK1xcdFxcdC5uZWVkc19sb2FkX2FjcV9zdG9yZV9yZWwgPSB0cnVlXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnByb2dfdHlwZSA9IFxcXCJzdG9yZV9yZWxlYXNlXFxcIixcXG4rXFx0XFx0LmlzX3dyaXRlID0gdHJ1ZSxcXG4rXFx0XFx0Lm5lZWRzX2xvYWRfYWNxX3N0b3JlX3JlbCA9IHRydWVcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQucHJvZ190eXBlID0gXFxcImxkeF9wYXRjaGVkXFxcIixcXG4rXFx0XFx0LmlzX3dyaXRlID0gZmFsc2UsXFxuK1xcdFxcdC5za2lwX211bHRpX3NpemVfdGVzdGluZyA9IHRydWUsXFxuK1xcdFxcdC5za2lwX29uX3N0YWNrX3Rlc3RpbmcgPSB0cnVlLFxcbitcXHRcXHQucnVuX3NpemUgPSA0LFxcbitcXHRcXHQucm5kX2hpMzIgPSB0cnVlXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnByb2dfdHlwZSA9IFxcXCJsZHhfcGF0Y2hlZF9vbl9zdGFja1xcXCIsXFxuK1xcdFxcdC5pc193cml0ZSA9IGZhbHNlLFxcbitcXHRcXHQuc2tpcF9tdWx0aV9zaXplX3Rlc3RpbmcgPSB0cnVlLFxcbitcXHRcXHQuc2tpcF9vbl9zdGFja190ZXN0aW5nID0gdHJ1ZSxcXG4rXFx0XFx0LnJ1bl9zaXplID0gNCxcXG4rXFx0XFx0LmV4cGVjdF9ub19yZXBvcnQgPSB0cnVlLFxcbitcXHRcXHQucm5kX2hpMzIgPSB0cnVlXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnByb2dfdHlwZSA9IFxcXCJ2ZXJpZmllcl9wYXRoc19zdGFja19hbmRfbm9uX3N0YWNrXFxcIixcXG4rXFx0XFx0LmlzX3dyaXRlID0gdHJ1ZSxcXG4rXFx0XFx0LnNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nID0gdHJ1ZSxcXG4rXFx0XFx0LnNraXBfb25fc3RhY2tfdGVzdGluZyA9IHRydWUsXFxuK1xcdFxcdC5ydW5fc2l6ZSA9IDFcXG4rXFx0fVxcbit9O1xcbitcXG4rdm9pZCB0ZXN0X2thc2FuKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XFxuK1xcdHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3Q7XFxuK1xcdHN0cnVjdCB0ZXN0X2N0eCAqY3R4O1xcbitcXHRzdHJ1Y3Qga2FzYW4gKnNrZWw7XFxuK1xcdF9fdTMyIGtleSA9IDA7XFxuK1xcdGludCBpLCByZXQ7XFxuK1xcbitcXHRjdHggPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB0ZXN0X2N0eCkpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoY3R4LCBcXFwiYWxsb2MgdGVzdCBjdHhcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFpc19qaXRfZW5hYmxlZCgpIHx8ICFnZXRfa2FzYW5faml0X2VuYWJsZWQoKSkge1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdGdvdG8gZW5kO1xcbitcXHR9XFxuK1xcbitcXHRza2VsID0ga2FzYW5fX29wZW4oKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJvcGVuIHByb2dcXFwiKSlcXG4rXFx0XFx0Z290byBlbmQ7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh0ZXN0cyk7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XFxuK1xcbitcXHRcXHRpZiAoIXRlc3RzW2ldLnJuZF9oaTMyKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShza2VsLVxcdTAwM2VvYmosXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdHRlc3RzW2ldLnByb2dfdHlwZSk7XFxuK1xcdFxcdGlmICghQVNTRVJUX09LX1BUUihwcm9nLCBcXFwiZmluZCBybmRfaGkzMiBwcm9nXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gZGVzdHJveTtcXG4rXFx0XFx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBCUEZfRl9URVNUX1JORF9ISTMyKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0soa2FzYW5fX2xvYWQoc2tlbCksIFxcXCJsb2FkIHByb2dcXFwiKSlcXG4rXFx0XFx0Z290byBkZXN0cm95O1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VvYmogPSBza2VsLVxcdTAwM2VvYmo7XFxuK1xcdGN0eC1cXHUwMDNlYWNjZXNzX3NpemUgPSBcXHUwMDI2c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VhY2Nlc3Nfc2l6ZTtcXG4rXFx0Y3R4LVxcdTAwM2Vza2lwX2xvYWRfYWNxX3N0b3JlX3JlbCA9IHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsX3Rlc3RzO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VrbG9nX2ZkID0gb3Blbl9rZXJuZWxfbG9ncygpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRChjdHgtXFx1MDAzZWtsb2dfZmQsIFxcXCJvcGVuIGtlcm5lbCBsb2dzXFxcIikpXFxuK1xcdFxcdGdvdG8gZGVzdHJveTtcXG4rXFxuK1xcdC8qIEZpbGwgbWFwIHdpdGggcmVjb2duaXphYmxlIHZhbHVlcyAqL1xcbitcXHRyZXQgPSBicGZfbWFwX19sb29rdXBfZWxlbShza2VsLVxcdTAwM2VtYXBzLnRlc3RfbWFwLCBcXHUwMDI2a2V5LCBzaXplb2Yoa2V5KSxcXG4rXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCksIDApO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJnZXQgbWFwXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xvc2U7XFxuK1xcdHZhbC5kYXRhXzEgPSAweEFBO1xcbitcXHR2YWwuZGF0YV8yID0gMHhCQkJCO1xcbitcXHR2YWwuZGF0YV80ID0gMHhDQ0NDQ0NDQztcXG4rXFx0dmFsLmRhdGFfOCA9IDB4RERERERERERERERERERERDtcXG4rXFx0cmV0ID0gYnBmX21hcF9fdXBkYXRlX2VsZW0oc2tlbC1cXHUwMDNlbWFwcy50ZXN0X21hcCwgXFx1MDAyNmtleSwgc2l6ZW9mKGtleSksXFxuK1xcdFxcdFxcdFxcdCAgIFxcdTAwMjZ2YWwsIHNpemVvZih2YWwpLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwic2V0IG1hcFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsb3NlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpKyspIHtcXG4rXFx0XFx0dGVzdCA9IFxcdTAwMjZ0ZXN0c1tpXTtcXG4rXFx0XFx0cnVuX3N1YnRlc3QoY3R4LCB0ZXN0KTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQmxpbmRpbmcgc3VidGVzdCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGFzIGl0IG5lZWRzIHRoZVxcbitcXHQgKiBjb3JyZXNwb25kaW5nIHByb2dyYW0gdG8gYmUgbG9hZGVkIHdpdGggYnBmX2ppdF9oYXJkZW4gcmFpc2VkXFxuK1xcdCAqL1xcbitcXHRydW5fYmxpbmRpbmdfc3VidGVzdCgpO1xcbitcXG4rY2xvc2U6XFxuK1xcdGNsb3NlKGN0eC1cXHUwMDNla2xvZ19mZCk7XFxuK2Rlc3Ryb3k6XFxuK1xcdGthc2FuX19kZXN0cm95KHNrZWwpO1xcbitlbmQ6XFxuK1xcdGZyZWUoY3R4KTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rYXNhbi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODJkZGNlMzA1OWFlZTFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuLmNcXG5AQCAtMCwwICsxLDM5NCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfbWlzYy5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbitcXG4rZXh0ZXJuIHZvaWQgYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTtcXG4rZXh0ZXJuIHZvaWQgYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZvaWQgKm1lbSwgX191MzIgbWVtX19zeikgX19rc3ltO1xcbitcXG4raW50IGFjY2Vzc19zaXplO1xcbitcXG4rc3RydWN0IGthc2FuX3dyaXRlX3ZhbCB7XFxuK1xcdF9fdTggZGF0YV8xO1xcbitcXHRfX3UxNiBkYXRhXzI7XFxuK1xcdF9fdTMyIGRhdGFfNDtcXG4rXFx0X191NjQgZGF0YV84O1xcbit9O1xcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuK1xcdF9fdHlwZShrZXksIF9fdTMyKTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKTtcXG4rfSB0ZXN0X21hcCBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitTRUMoXFxcInRjeC9pbmdyZXNzXFxcIilcXG4raW50IHN0X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdHZhbC5kYXRhXzEgPSAweEFBO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHR2YWwuZGF0YV8yID0gMHhBQTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgNDpcXG4rXFx0XFx0dmFsLmRhdGFfNCA9IDB4QUE7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDg6XFxuK1xcdFxcdHZhbC5kYXRhXzggPSAweEFBO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwidGN4L2luZ3Jlc3NcXFwiKVxcbitpbnQgc3Rfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XFxuK1xcdF9fdTMyIGtleSA9IDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ0ZXN0X21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0dmFsLVxcdTAwM2VkYXRhXzEgPSAweEFBO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHR2YWwtXFx1MDAzZWRhdGFfMiA9IDB4QUE7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDQ6XFxuK1xcdFxcdHZhbC1cXHUwMDNlZGF0YV80ID0gMHhBQTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgODpcXG4rXFx0XFx0dmFsLVxcdTAwM2VkYXRhXzggPSAweEFBO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCBzdHhfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xcbitcXG4rXFx0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0dmFsLmRhdGFfMSA9IGFjY2Vzc19zaXplO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHR2YWwuZGF0YV8yID0gYWNjZXNzX3NpemU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDQ6XFxuK1xcdFxcdHZhbC5kYXRhXzQgPSBhY2Nlc3Nfc2l6ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgODpcXG4rXFx0XFx0dmFsLmRhdGFfOCA9IGFjY2Vzc19zaXplO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwidGN4L2luZ3Jlc3NcXFwiKVxcbitpbnQgc3R4X25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xcbitcXHRfX3UzMiBrZXkgPSAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2dGVzdF9tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdHZhbC1cXHUwMDNlZGF0YV8xID0gYWNjZXNzX3NpemU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdHZhbC1cXHUwMDNlZGF0YV8yID0gYWNjZXNzX3NpemU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDQ6XFxuK1xcdFxcdHZhbC1cXHUwMDNlZGF0YV80ID0gYWNjZXNzX3NpemU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDg6XFxuK1xcdFxcdHZhbC1cXHUwMDNlZGF0YV84ID0gYWNjZXNzX3NpemU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInRjeC9pbmdyZXNzXFxcIilcXG4raW50IGxkeF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XFxuK1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFxcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcXG4rXFx0Y2FzZSAxOlxcbitcXHRcXHRfX3NpbmsodmFsLmRhdGFfMSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdF9fc2luayh2YWwuZGF0YV8yKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgNDpcXG4rXFx0XFx0X19zaW5rKHZhbC5kYXRhXzQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA4OlxcbitcXHRcXHRfX3NpbmsodmFsLmRhdGFfOCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCBsZHhfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XFxuK1xcdF9fdTMyIGtleSA9IDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ0ZXN0X21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0X19zaW5rKHZhbC1cXHUwMDNlZGF0YV8xKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgMjpcXG4rXFx0XFx0X19zaW5rKHZhbC1cXHUwMDNlZGF0YV8yKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgNDpcXG4rXFx0XFx0X19zaW5rKHZhbC1cXHUwMDNlZGF0YV80KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgODpcXG4rXFx0XFx0X19zaW5rKHZhbC1cXHUwMDNlZGF0YV84KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwidGN4L2luZ3Jlc3NcXFwiKVxcbitpbnQgbGR4X3BhdGNoZWQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcXG4rXFx0X191MzIga2V5ID0gMDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnRlc3RfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdF9fc2luayh2YWwtXFx1MDAzZWRhdGFfNCk7XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCBsZHhfcGF0Y2hlZF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XFxuK1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFxcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdF9fc2luayh2YWwuZGF0YV80KTtcXG4rXFx0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFxcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCBzaW1wbGVfYXRvbWljX29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xcbitcXHRjYXNlIDQ6XFxuK1xcdFxcdF9fc3luY19mZXRjaF9hbmRfYWRkKFxcdTAwMjZ2YWwuZGF0YV80LCA0KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgODpcXG4rXFx0XFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNnZhbC5kYXRhXzgsIDgpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwidGN4L2luZ3Jlc3NcXFwiKVxcbitpbnQgc2ltcGxlX2F0b21pY19ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcXG4rXFx0X191MzIga2V5ID0gMDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnRlc3RfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcXG4rXFx0Y2FzZSA0OlxcbitcXHRcXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcXHUwMDI2dmFsLVxcdTAwM2VkYXRhXzQsIDQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA4OlxcbitcXHRcXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcXHUwMDI2dmFsLVxcdTAwM2VkYXRhXzgsIDgpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rI2lmZGVmIF9fQlBGX0ZFQVRVUkVfTE9BRF9BQ1FfU1RPUkVfUkVMXFxuK2Jvb2wgc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWxfdGVzdHMgU0VDKFxcXCIuZGF0YVxcXCIpID0gMDtcXG4rXFxuK1NFQyhcXFwidGN4L2luZ3Jlc3NcXFwiKVxcbitpbnQgbG9hZF9hY3F1aXJlX29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdF9fYXRvbWljX2xvYWRfbihcXHUwMDI2dmFsLmRhdGFfMSwgX19BVE9NSUNfQUNRVUlSRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdF9fYXRvbWljX2xvYWRfbihcXHUwMDI2dmFsLmRhdGFfMiwgX19BVE9NSUNfQUNRVUlSRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDQ6XFxuK1xcdFxcdF9fYXRvbWljX2xvYWRfbihcXHUwMDI2dmFsLmRhdGFfNCwgX19BVE9NSUNfQUNRVUlSRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDg6XFxuK1xcdFxcdF9fYXRvbWljX2xvYWRfbihcXHUwMDI2dmFsLmRhdGFfOCwgX19BVE9NSUNfQUNRVUlSRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCBsb2FkX2FjcXVpcmVfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XFxuK1xcdF9fdTMyIGtleSA9IDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ0ZXN0X21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0X19hdG9taWNfbG9hZF9uKFxcdTAwMjZ2YWwtXFx1MDAzZWRhdGFfMSwgX19BVE9NSUNfQUNRVUlSRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdF9fYXRvbWljX2xvYWRfbihcXHUwMDI2dmFsLVxcdTAwM2VkYXRhXzIsIF9fQVRPTUlDX0FDUVVJUkUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA0OlxcbitcXHRcXHRfX2F0b21pY19sb2FkX24oXFx1MDAyNnZhbC1cXHUwMDNlZGF0YV80LCBfX0FUT01JQ19BQ1FVSVJFKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgODpcXG4rXFx0XFx0X19hdG9taWNfbG9hZF9uKFxcdTAwMjZ2YWwtXFx1MDAzZWRhdGFfOCwgX19BVE9NSUNfQUNRVUlSRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInRjeC9pbmdyZXNzXFxcIilcXG4raW50IHN0b3JlX3JlbGVhc2Vfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xcbitcXG4rXFx0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0X19hdG9taWNfc3RvcmVfbihcXHUwMDI2dmFsLmRhdGFfMSwgMHhBQSwgX19BVE9NSUNfUkVMRUFTRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdF9fYXRvbWljX3N0b3JlX24oXFx1MDAyNnZhbC5kYXRhXzIsIDB4QkJCQiwgX19BVE9NSUNfUkVMRUFTRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDQ6XFxuK1xcdFxcdF9fYXRvbWljX3N0b3JlX24oXFx1MDAyNnZhbC5kYXRhXzQsIDB4Q0NDQ0NDQ0MsIF9fQVRPTUlDX1JFTEVBU0UpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA4OlxcbitcXHRcXHRfX2F0b21pY19zdG9yZV9uKFxcdTAwMjZ2YWwuZGF0YV84LCAweEREREREREREREREREREREQsXFxuK1xcdFxcdFxcdFxcdCBfX0FUT01JQ19SRUxFQVNFKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFxcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInRjeC9pbmdyZXNzXFxcIilcXG4raW50IHN0b3JlX3JlbGVhc2Vfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XFxuK1xcdF9fdTMyIGtleSA9IDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ0ZXN0X21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0X19hdG9taWNfc3RvcmVfbihcXHUwMDI2dmFsLVxcdTAwM2VkYXRhXzEsIDB4QUEsIF9fQVRPTUlDX1JFTEVBU0UpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRfX2F0b21pY19zdG9yZV9uKFxcdTAwMjZ2YWwtXFx1MDAzZWRhdGFfMiwgMHhCQkJCLCBfX0FUT01JQ19SRUxFQVNFKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgNDpcXG4rXFx0XFx0X19hdG9taWNfc3RvcmVfbihcXHUwMDI2dmFsLVxcdTAwM2VkYXRhXzQsIDB4Q0NDQ0NDQ0MsIF9fQVRPTUlDX1JFTEVBU0UpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA4OlxcbitcXHRcXHRfX2F0b21pY19zdG9yZV9uKFxcdTAwMjZ2YWwtXFx1MDAzZWRhdGFfOCwgMHhERERERERERERERERERERELFxcbitcXHRcXHRcXHRcXHQgX19BVE9NSUNfUkVMRUFTRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuKyNlbHNlXFxuK2Jvb2wgc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWxfdGVzdHMgU0VDKFxcXCIuZGF0YVxcXCIpID0gMTtcXG4rI2VuZGlmXFxuK1xcbitTRUMoXFxcInRjeC9pbmdyZXNzXFxcIilcXG4raW50IHZlcmlmaWVyX3BhdGhzX3N0YWNrX2FuZF9ub25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgc3RhY2tfdmFsID0ge307XFxuK1xcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcXG4rXFx0dm9pZCAqcHRyO1xcbitcXHRfX3UzMiBrZXkgPSAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2dGVzdF9tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoYWNjZXNzX3NpemUpXFxuK1xcdFxcdHB0ciA9IHZhbDtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwdHIgPSBcXHUwMDI2c3RhY2tfdmFsO1xcbitcXG4rXFx0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZigqdmFsKSk7XFxuK1xcdCooX191OCAqKXB0ciA9IDB4QUE7XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZigqdmFsKSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitjaGFyIExJQ0VOU0VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MDhkN2RhNjQ0MjE2Mlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmNcXG5AQCAtMCwwICsxLDQxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rXFxuK2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07XFxuK2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTtcXG4rXFxuK3N0cnVjdCBrYXNhbl93cml0ZV92YWwge1xcbitcXHRfX3U4IGRhdGFfMTtcXG4rXFx0X191MTYgZGF0YV8yO1xcbitcXHRfX3UzMiBkYXRhXzQ7XFxuK1xcdF9fdTY0IGRhdGFfODtcXG4rfTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbitcXHRfX3R5cGUoa2V5LCBfX3UzMik7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGthc2FuX3dyaXRlX3ZhbCk7XFxuK30gdGVzdF9tYXAgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCBzdF9ibGluZGVkKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XFxuK1xcdF9fdTMyIGtleSA9IDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ0ZXN0X21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHR2YWwtXFx1MDAzZWRhdGFfMSA9IDB4QUE7XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBMSUNFTlNFW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG5pbmRleCAzMGYxY2QyMzA5M2NiZS4uNWQ2YTgzNGY3ZDc1NzUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG5AQCAtMjcxLDYgKzI3MSwyNiBAQCBfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19wdXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KHN0cnVjdCBwcm9nX3Rlc3RfbWVtYmVyXFxuIFxcdCAqL1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0JQRl9KSVRfS0FTQU5cXG4rXFxuK2V4dGVybiB2b2lkIGthc2FuX3BvaXNvbihjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwgdTggdmFsdWUsIGJvb2wgaW5pdCk7XFxuK1xcbisjZGVmaW5lIEtBU0FOX1NMQUJfRlJFRSAweEZCXFxuK1xcbitfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCB1MzIgbWVtX19zeilcXG4re1xcbitcXHRrYXNhbl9wb2lzb24obWVtLCBtZW1fX3N6LCBLQVNBTl9TTEFCX0ZSRUUsIGZhbHNlKTtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odm9pZCAqbWVtLCB1MzIgbWVtX19zeilcXG4re1xcbitcXHRrYXNhbl9wb2lzb24obWVtLCBtZW1fX3N6LCAweDAwLCBmYWxzZSk7XFxuK31cXG4rI2Vsc2VcXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opIHsgfVxcbitfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIHUzMiBtZW1fX3N6KSB7IH1cXG4rI2VuZGlmXFxuK1xcbiBfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfY3R4ICpcXG4gYnBmX3Rlc3Rtb2RfY3R4X2NyZWF0ZShpbnQgKmVycilcXG4ge1xcbkBAIC03NDAsNiArNzYwLDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzEpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2thc2FuX3BvaXNvbilcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbilcXG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcXG4gXFxuIEJURl9JRF9MSVNUKGJwZl90ZXN0bW9kX2R0b3JfaWRzKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcXG5pbmRleCBjOTcwZTc3OTNkZmNiYy4uNzM3ZjY2OGIzNWUyM2IgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXFxuQEAgLTUxOSw2ICs1MTksMzggQEAgYm9vbCBpc19qaXRfZW5hYmxlZCh2b2lkKVxcbiBcXHRyZXR1cm4gZW5hYmxlZDtcXG4gfVxcbiBcXG4raW50IHNldF9icGZfaml0X2hhcmRlbihjaGFyICpsZXZlbClcXG4re1xcbitcXHRjaGFyIG9sZF9sZXZlbDtcXG4rXFx0aW50IGVyciA9IC0xO1xcbitcXHRpbnQgZmQgPSAtMTtcXG4rXFxuK1xcdGZkID0gb3BlbihcXFwiL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuXFxcIiwgT19SRFdSIHwgT19OT05CTE9DSyk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGVyciA9IHJlYWQoZmQsIFxcdTAwMjZvbGRfbGV2ZWwsIDEpO1xcbitcXHRpZiAoZXJyICE9IDEpIHtcXG4rXFx0XFx0ZXJyID0gLTE7XFxuK1xcdFxcdGdvdG8gZW5kO1xcbitcXHR9XFxuK1xcbitcXHRsc2VlayhmZCwgMCwgU0VFS19TRVQpO1xcbitcXG4rXFx0ZXJyID0gd3JpdGUoZmQsIGxldmVsLCAxKTtcXG4rXFx0aWYgKGVyciAhPSAxKSB7XFxuK1xcdFxcdGVyciA9IC0xO1xcbitcXHRcXHRnb3RvIGVuZDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gMDtcXG4rXFx0KmxldmVsID0gb2xkX2xldmVsO1xcbitlbmQ6XFxuK1xcdGlmIChmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuIGludCBzdGFja19tcHJvdGVjdCh2b2lkKVxcbiB7XFxuIFxcdHZvaWQgKmJ1ZjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oXFxuaW5kZXggMmVkYzZmYjdmYzUyMTIuLmUwMDY0MmFmZTg2ZjQwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaFxcbkBAIC01OSw2ICs1OSw3IEBAIHN0cnVjdCBicGZfaW5zbjtcXG4gaW50IGdldF94bGF0ZWRfcHJvZ3JhbShpbnQgZmRfcHJvZywgc3RydWN0IGJwZl9pbnNuICoqYnVmLCBfX3UzMiAqY250KTtcXG4gaW50IHRlc3RpbmdfcHJvZ19mbGFncyh2b2lkKTtcXG4gYm9vbCBpc19qaXRfZW5hYmxlZCh2b2lkKTtcXG4raW50IHNldF9icGZfaml0X2hhcmRlbihjaGFyICpsZXZlbCk7XFxuIGludCBzdGFja19tcHJvdGVjdCh2b2lkKTtcXG4gXFxuICNlbmRpZiAvKiBfX1RFU1RJTkdfSEVMUEVSU19IICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmNcXG5pbmRleCBmOTk3ZDdlYzhmZDA4Ni4uMTEyMDFiNjVhM2Q0YjUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuY1xcbkBAIC0xNDIsMyArMTQyLDggQEAgYm9vbCBnZXRfdW5wcml2X2Rpc2FibGVkKHZvaWQpXFxuIFxcdH1cXG4gXFx0cmV0dXJuIG1pdGlnYXRpb25zX29mZjtcXG4gfVxcbitcXG4rYm9vbCBnZXRfa2FzYW5faml0X2VuYWJsZWQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gY29uZmlnX2NvbnRhaW5zKFxcXCJDT05GSUdfQlBGX0pJVF9LQVNBTj15XFxcIikgPT0gMTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oXFxuaW5kZXggMTUxZjY3MzI5NjY1MjIuLmJjNWY0Yzk1M2M5ZDZmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmhcXG5AQCAtNSwzICs1LDQgQEBcXG4gI2RlZmluZSBVTlBSSVZfU1lTQ1RMIFxcXCJrZXJuZWwvdW5wcml2aWxlZ2VkX2JwZl9kaXNhYmxlZFxcXCJcXG4gXFxuIGJvb2wgZ2V0X3VucHJpdl9kaXNhYmxlZCh2b2lkKTtcXG4rYm9vbCBnZXRfa2FzYW5faml0X2VuYWJsZWQodm9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIwOjE0OjE5LjAzNzg1ODMxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxNjIwMjc0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVF9LQVNBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9kb19taXNjX2ZpeHVwc1wiLFxuICAgIFwiY2hlY2tfbWVtX2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgS0FTQU4gc3VwcG9ydCB0byB0aGUgQlBGIEpJVCBjb21waWxlciBvbiB4ODZfNjQsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWQ2ZGRmOTcwNmE4NjliYzZkMjU1ZTFjN2QwYWU2ZmJhZGI3OTliOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMjA6MTQ6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggYmRhZDkwZjIxMGU0YmYuLjcwNWE5YWI4NWYzYTk1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvS2NvbmZpZ1xuKysrIGIvYXJjaC94ODYvS2NvbmZpZ1xuQEAgLTIzMyw2ICsyMzMsNyBAQCBjb25maWcgWDg2XG4gXHRzZWxlY3QgSEFWRV9TQU1QTEVfRlRSQUNFX0RJUkVDVFx0aWYgWDg2XzY0XG4gXHRzZWxlY3QgSEFWRV9TQU1QTEVfRlRSQUNFX0RJUkVDVF9NVUxUSVx0aWYgWDg2XzY0XG4gXHRzZWxlY3QgSEFWRV9FQlBGX0pJVFxuK1x0c2VsZWN0IEhBVkVfRUJQRl9KSVRfS0FTQU5cdFx0aWYgWDg2XzY0XG4gXHRzZWxlY3QgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xuIFx0c2VsZWN0IEhBVkVfRUlTQVx0XHRcdGlmIFg4Nl8zMlxuIFx0c2VsZWN0IEhBVkVfRVhJVF9USFJFQURcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGRlNzUxNWVhMWJlYWU4Li42NWEwMGU4NDc5OWNkMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMjEsNiArMjEsMTcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdW53aW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2ZpLmhcdTAwM2VcbiBcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX0pJVF9LQVNBTilcbit2b2lkIF9fYXNhbl9sb2FkMSh2b2lkICpwKTtcbit2b2lkIF9fYXNhbl9zdG9yZTEodm9pZCAqcCk7XG4rdm9pZCBfX2FzYW5fbG9hZDIodm9pZCAqcCk7XG4rdm9pZCBfX2FzYW5fc3RvcmUyKHZvaWQgKnApO1xuK3ZvaWQgX19hc2FuX2xvYWQ0KHZvaWQgKnApO1xuK3ZvaWQgX19hc2FuX3N0b3JlNCh2b2lkICpwKTtcbit2b2lkIF9fYXNhbl9sb2FkOCh2b2lkICpwKTtcbit2b2lkIF9fYXNhbl9zdG9yZTgodm9pZCAqcCk7XG4rI2VuZGlmXG4rXG4gc3RhdGljIGJvb2wgYWxsX2NhbGxlZV9yZWdzX3VzZWRbNF0gPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX07XG4gXG4gc3RhdGljIHU4ICplbWl0X2NvZGUodTggKnB0ciwgdTMyIGJ5dGVzLCB1bnNpZ25lZCBpbnQgbGVuKVxuQEAgLTExMTAsNiArMTEyMSw5MCBAQCBzdGF0aWMgdm9pZCBtYXliZV9lbWl0XzFtb2QodTggKipwcHJvZywgdTMyIHJlZywgYm9vbCBpczY0KVxuIFx0KnBwcm9nID0gcHJvZztcbiB9XG4gXG4rc3RhdGljIGludCBlbWl0X2thc2FuX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHU4ICoqcHByb2csXG4rXHRcdFx0ICAgIHUzMiBhZGRyX3JlZywgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqaXAsXG4rXHRcdFx0ICAgIGJvb2wgaXNfd3JpdGUsIGJvb2wgYWNjZXNzZXNfc3RhY2tfb25seSlcbit7XG4rI2lmZGVmIENPTkZJR19CUEZfSklUX0tBU0FOXG4rXHR1MzIgYnBmX3NpemUgPSBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpO1xuK1x0czMyIG9mZiA9IGluc24tXHUwMDNlb2ZmO1xuK1x0dTggKnByb2cgPSAqcHByb2c7XG4rXHR2b2lkICprYXNhbl9mdW5jO1xuK1xuK1x0aWYgKCFlbnYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKGFjY2Vzc2VzX3N0YWNrX29ubHkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogRGVyaXZlIEtBU0FOIGNoZWNrIGZ1bmN0aW9uIGZyb20gYWNjZXNzIHR5cGUgYW5kIHNpemUgKi9cbitcdHN3aXRjaCAoYnBmX3NpemUpIHtcbitcdGNhc2UgQlBGX0I6XG4rXHRcdGthc2FuX2Z1bmMgPSBpc193cml0ZSA/IF9fYXNhbl9zdG9yZTEgOiBfX2FzYW5fbG9hZDE7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfSDpcbitcdFx0a2FzYW5fZnVuYyA9IGlzX3dyaXRlID8gX19hc2FuX3N0b3JlMiA6IF9fYXNhbl9sb2FkMjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9XOlxuK1x0XHRrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmU0IDogX19hc2FuX2xvYWQ0O1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0RXOlxuK1x0XHRrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmU4IDogX19hc2FuX2xvYWQ4O1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LyogU2F2ZSByYXggKi9cbitcdEVNSVQxKDB4NTApO1xuK1x0LyogU2F2ZSByY3ggKi9cbitcdEVNSVQxKDB4NTEpO1xuK1x0LyogU2F2ZSByZHggKi9cbitcdEVNSVQxKDB4NTIpO1xuK1x0LyogU2F2ZSByc2kgKi9cbitcdEVNSVQxKDB4NTYpO1xuK1x0LyogU2F2ZSByZGkgKi9cbitcdEVNSVQxKDB4NTcpO1xuK1x0LyogU2F2ZSByOCAqL1xuK1x0RU1JVDIoMHg0MSwgMHg1MCk7XG4rXHQvKiBTYXZlIHI5ICovXG4rXHRFTUlUMigweDQxLCAweDUxKTtcbitcbitcdC8qIG1vdiByZGksIGFkZHJfcmVnICovXG4rXHRFTUlUX21vdihCUEZfUkVHXzEsIGFkZHJfcmVnKTtcbitcbitcdC8qIGFkZCByZGksIG9mZiAoaWYgb2Zmc2V0IGlzIG5vbi16ZXJvKSAqL1xuK1x0aWYgKG9mZikge1xuK1x0XHRpZiAoaXNfaW1tOChvZmYpKSB7XG4rXHRcdFx0LyogYWRkIHJkaSwgaW1tOCAqL1xuK1x0XHRcdEVNSVQ0KDB4NDgsIDB4ODMsIDB4QzcsICh1OClvZmYpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdC8qIGFkZCByZGksIGltbTMyICovXG4rXHRcdFx0RU1JVDNfb2ZmMzIoMHg0OCwgMHg4MSwgMHhDNywgb2ZmKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogQWRqdXN0IGlwIHRvIGFjY291bnQgZm9yIHRoZSBpbnN0cnVtZW50YXRpb24gZ2VuZXJhdGVkIHNvIGZhciAqL1xuK1x0aXAgKz0gKHByb2cgLSAqcHByb2cpO1xuK1x0LyogV2UgZW1pdCBhIGNhbGwsIHNvIHVwZGF0ZSBjYWxsIGRlcHRoIGNvdW50aW5nICovXG4rXHRpcCArPSB4ODZfY2FsbF9kZXB0aF9lbWl0X2FjY291bnRpbmcoXHUwMDI2cHJvZywga2FzYW5fZnVuYywgaXApO1xuK1x0LyogY2FsbCBrYXNhbl9mdW5jICovXG4rXHRpZiAoZW1pdF9jYWxsKFx1MDAyNnByb2csIGthc2FuX2Z1bmMsIGlwKSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRFTUlUMigweDQxLCAweDU5KTtcbitcdEVNSVQyKDB4NDEsIDB4NTgpO1xuK1x0RU1JVDEoMHg1Rik7XG4rXHRFTUlUMSgweDVFKTtcbitcdEVNSVQxKDB4NUEpO1xuK1x0RU1JVDEoMHg1OSk7XG4rXHRFTUlUMSgweDU4KTtcbitcbitcdCpwcHJvZyA9IHByb2c7XG4rI2VuZGlmIC8qIENPTkZJR19CUEZfSklUX0tBU0FOICovXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogTERYOiBkc3RfcmVnID0gKih1OCopKHNyY19yZWcgKyBvZmYpICovXG4gc3RhdGljIHZvaWQgZW1pdF9sZHgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZywgaW50IG9mZilcbiB7XG5AQCAtMTMxNSw2ICsxNDEwLDY0IEBAIHN0YXRpYyB2b2lkIGVtaXRfc3RfaW5kZXgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgaW5kZXhfcmVnLCBpbnRcbiBcdCpwcHJvZyA9IHByb2c7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGVtaXRfc3QodTggKipwcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZyxcbitcdFx0ICAgIHMzMiBvdXRnb2luZ19hcmdfYmFzZSwgdTE2IG91dGdvaW5nX3JzcClcbit7XG4rXHRzMzIgaW1tMzIgPSBpbnNuLVx1MDAzZWltbTtcbitcdHU4ICpwcm9nID0gKnBwcm9nO1xuK1x0czMyIGluc25fb2ZmO1xuK1xuK1x0c3dpdGNoIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKSB7XG4rXHRjYXNlIEJQRl9COlxuK1x0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcbitcdFx0XHRFTUlUMigweDQxLCAweEM2KTtcbitcdFx0ZWxzZVxuK1x0XHRcdEVNSVQxKDB4QzYpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0g6XG4rXHRcdGlmIChpc19lcmVnKGRzdF9yZWcpKVxuK1x0XHRcdEVNSVQzKDB4NjYsIDB4NDEsIDB4QzcpO1xuK1x0XHRlbHNlXG4rXHRcdFx0RU1JVDIoMHg2NiwgMHhDNyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfVzpcbitcdFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXG4rXHRcdFx0RU1JVDIoMHg0MSwgMHhDNyk7XG4rXHRcdGVsc2VcbitcdFx0XHRFTUlUMSgweEM3KTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9EVzpcbitcdFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmID09IC04KSB7XG4rXHRcdFx0LyogQXJnIDY6IHN0b3JlIGltbWVkaWF0ZSBpbiByOSByZWdpc3RlciAqL1xuK1x0XHRcdGVtaXRfbW92X2ltbTY0KFx1MDAyNnByb2csIFg4Nl9SRUdfUjksIGltbTMyIFx1MDAzZVx1MDAzZSAzMSxcbitcdFx0XHRcdCAgICAgICAodTMyKWltbTMyKTtcbitcdFx0XHQqcHByb2cgPSBwcm9nO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHhDNyk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbitcdGlmIChkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEFyZ3MgNys6IHJldmVyc2UgQlBGIG5lZ2F0aXZlIG9mZnNldHMgdG9cbitcdFx0ICogeDg2IHBvc2l0aXZlIHJzcCBvZmZzZXRzLlxuK1x0XHQgKiBCUEYgb2ZmPS0xNiDihpIgW3JzcCswXSwgb2ZmPS0yNCDihpIgW3JzcCs4XSwgLi4uXG4rXHRcdCAqL1xuK1x0XHRpbnNuX29mZiA9IG91dGdvaW5nX2FyZ19iYXNlIC0gb3V0Z29pbmdfcnNwIC1cbitcdFx0XHRpbnNuX29mZiAtIDE2O1xuK1x0XHRkc3RfcmVnID0gQlBGX1JFR19GUDtcbitcdH1cbitcdGlmIChpc19pbW04KGluc25fb2ZmKSlcbitcdFx0RU1JVDIoYWRkXzFyZWcoMHg0MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcbitcdGVsc2VcbitcdFx0RU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHg4MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcbitcbitcdEVNSVQoaW1tMzIsIGJwZl9zaXplX3RvX3g4Nl9ieXRlcyhCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKSk7XG4rXHQqcHByb2cgPSBwcm9nO1xuK31cbitcbiBzdGF0aWMgdm9pZCBlbWl0X3N0X3IxMih1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIGludCBvZmYsIGludCBpbW0pXG4ge1xuIFx0ZW1pdF9zdF9pbmRleChwcHJvZywgc2l6ZSwgZHN0X3JlZywgWDg2X1JFR19SMTIsIG9mZiwgaW1tKTtcbkBAIC0xNDIzLDE3ICsxNTc2LDMxIEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfcm13X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3QodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIGRzdF9yZWcsXG4tXHRcdFx0ICAgICB1MzIgc3JjX3JlZywgczE2IG9mZiwgdTggYnBmX3NpemUpXG4rc3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCAqKnBwcm9nLFxuK1x0XHRcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqaXAsIHUzMiBkc3RfcmVnLFxuK1x0XHRcdCAgICAgdTMyIHNyY19yZWcsIGJvb2wgYWNjZXNzZXNfc3RhY2tfb25seSlcbiB7XG4rXHR1MzIgYXRvbWljX29wID0gaW5zbi1cdTAwM2VpbW07XG4rXHRpbnQgZXJyO1xuK1xuIFx0c3dpdGNoIChhdG9taWNfb3ApIHtcbiBcdGNhc2UgQlBGX0xPQURfQUNROlxuK1x0XHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgcHByb2csIHNyY19yZWcsIGluc24sIGlwLCBmYWxzZSxcbitcdFx0XHRcdCAgICAgICBhY2Nlc3Nlc19zdGFja19vbmx5KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHQvKiBkc3RfcmVnID0gc21wX2xvYWRfYWNxdWlyZShzcmNfcmVnICsgb2ZmMTYpICovXG4tXHRcdGVtaXRfbGR4KHBwcm9nLCBicGZfc2l6ZSwgZHN0X3JlZywgc3JjX3JlZywgb2ZmKTtcbitcdFx0ZW1pdF9sZHgocHByb2csIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksIGRzdF9yZWcsIHNyY19yZWcsXG4rXHRcdFx0IGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9TVE9SRV9SRUw6XG4rXHRcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBwcHJvZywgZHN0X3JlZywgaW5zbiwgaXAsIHRydWUsXG4rXHRcdFx0XHQgICAgICAgYWNjZXNzZXNfc3RhY2tfb25seSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0Lyogc21wX3N0b3JlX3JlbGVhc2UoZHN0X3JlZyArIG9mZjE2LCBzcmNfcmVnKSAqL1xuLVx0XHRlbWl0X3N0eChwcHJvZywgYnBmX3NpemUsIGRzdF9yZWcsIHNyY19yZWcsIG9mZik7XG4rXHRcdGVtaXRfc3R4KHBwcm9nLCBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLFxuK1x0XHRcdCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cHJfZXJyKFwiYnBmX2ppdDogdW5rbm93biBhdG9taWMgbG9hZC9zdG9yZSBvcGNvZGUgJTAyeFxcblwiLFxuQEAgLTE4MTEsMTAgKzE5NzgsMTIgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICpcbiBcdFx0Y29uc3QgczMyIGltbTMyID0gaW5zbi1cdTAwM2VpbW07XG4gXHRcdHUzMiBkc3RfcmVnID0gaW5zbi1cdTAwM2Vkc3RfcmVnO1xuIFx0XHR1MzIgc3JjX3JlZyA9IGluc24tXHUwMDNlc3JjX3JlZztcbitcdFx0Ym9vbCBhY2Nlc3Nlc19zdGFja19vbmx5O1xuIFx0XHR1OCBiMiA9IDAsIGIzID0gMDtcbiBcdFx0dTggKnN0YXJ0X29mX2xkeDtcbiBcdFx0czY0IGptcF9vZmZzZXQ7XG4gXHRcdHMzMiBpbnNuX29mZjtcbitcdFx0aW50IGluc25faWR4O1xuIFx0XHR1OCBqbXBfY29uZDtcbiBcdFx0dTggKmZ1bmM7XG4gXHRcdGludCBub3BzO1xuQEAgLTE4MzEsNiArMjAwMCwxMCBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKlxuIFx0XHRcdEVNSVRfRU5EQlIoKTtcbiBcbiBcdFx0aXAgPSBpbWFnZSArIGFkZHJzW2kgLSAxXSArIChwcm9nIC0gdGVtcCk7XG4rXHRcdGluc25faWR4ID0gaSAtIDEgKyBicGZfcHJvZy1cdTAwM2VhdXgtXHUwMDNlc3VicHJvZ19zdGFydDtcbitcdFx0YWNjZXNzZXNfc3RhY2tfb25seSA9XG4rXHRcdFx0ZW52ID8gIWVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc3RhY2tfYWNjZXNzIDpcbitcdFx0XHQgICAgICBmYWxzZTtcbiBcbiBcdFx0c3dpdGNoIChpbnNuLVx1MDAzZWNvZGUpIHtcbiBcdFx0XHQvKiBBTFUgKi9cbkBAIC0yMjA3LDQ5ICsyMzgwLDE3IEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqXG4gXHRcdFx0RU1JVF9MRkVOQ0UoKTtcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0XHQvKiBTVDogKih1OCopKGRzdF9yZWcgKyBvZmYpID0gaW1tICovXG4gXHRcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9COlxuLVx0XHRcdGlmIChpc19lcmVnKGRzdF9yZWcpKVxuLVx0XHRcdFx0RU1JVDIoMHg0MSwgMHhDNik7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0RU1JVDEoMHhDNik7XG4tXHRcdFx0Z290byBzdDtcbiBcdFx0Y2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX0g6XG4tXHRcdFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXG4tXHRcdFx0XHRFTUlUMygweDY2LCAweDQxLCAweEM3KTtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRFTUlUMigweDY2LCAweEM3KTtcbi1cdFx0XHRnb3RvIHN0O1xuIFx0XHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfVzpcbi1cdFx0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcbi1cdFx0XHRcdEVNSVQyKDB4NDEsIDB4QzcpO1xuLVx0XHRcdGVsc2Vcbi1cdFx0XHRcdEVNSVQxKDB4QzcpO1xuLVx0XHRcdGdvdG8gc3Q7XG4gXHRcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9EVzpcbi1cdFx0XHRpZiAoZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUyBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gLTgpIHtcbi1cdFx0XHRcdC8qIEFyZyA2OiBzdG9yZSBpbW1lZGlhdGUgaW4gcjkgcmVnaXN0ZXIgKi9cbi1cdFx0XHRcdGVtaXRfbW92X2ltbTY0KFx1MDAyNnByb2csIFg4Nl9SRUdfUjksIGltbTMyIFx1MDAzZVx1MDAzZSAzMSwgKHUzMilpbW0zMik7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXHRcdFx0RU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4QzcpO1xuLVxuLXN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4tXHRcdFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMpIHtcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBBcmdzIDcrOiByZXZlcnNlIEJQRiBuZWdhdGl2ZSBvZmZzZXRzIHRvXG4tXHRcdFx0XHQgKiB4ODYgcG9zaXRpdmUgcnNwIG9mZnNldHMuXG4tXHRcdFx0XHQgKiBCUEYgb2ZmPS0xNiDihpIgW3JzcCswXSwgb2ZmPS0yNCDihpIgW3JzcCs4XSwgLi4uXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdGluc25fb2ZmID0gb3V0Z29pbmdfYXJnX2Jhc2UgLSBvdXRnb2luZ19yc3AgLSBpbnNuX29mZiAtIDE2O1xuLVx0XHRcdFx0ZHN0X3JlZyA9IEJQRl9SRUdfRlA7XG4tXHRcdFx0fVxuLVx0XHRcdGlmIChpc19pbW04KGluc25fb2ZmKSlcbi1cdFx0XHRcdEVNSVQyKGFkZF8xcmVnKDB4NDAsIGRzdF9yZWcpLCBpbnNuX29mZik7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0RU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHg4MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcbitcdFx0XHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXHUwMDI2cHJvZywgZHN0X3JlZywgaW5zbiwgaXAsXG4rXHRcdFx0XHRcdCAgICAgICB0cnVlLCBhY2Nlc3Nlc19zdGFja19vbmx5KTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcbi1cdFx0XHRFTUlUKGltbTMyLCBicGZfc2l6ZV90b194ODZfYnl0ZXMoQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSkpO1xuK1x0XHRcdGVtaXRfc3QoXHUwMDI2cHJvZywgaW5zbiwgZHN0X3JlZywgb3V0Z29pbmdfYXJnX2Jhc2UsXG4rXHRcdFx0XHRvdXRnb2luZ19yc3ApO1xuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRcdC8qIFNUWDogKih1OCopKGRzdF9yZWcgKyBvZmYpID0gc3JjX3JlZyAqL1xuQEAgLTIyNjcsNiArMjQwOCwxMCBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0aW5zbl9vZmYgPSBvdXRnb2luZ19hcmdfYmFzZSAtIG91dGdvaW5nX3JzcCAtIGluc25fb2ZmIC0gMTY7XG4gXHRcdFx0XHRkc3RfcmVnID0gQlBGX1JFR19GUDtcbiBcdFx0XHR9XG4rXHRcdFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIFx1MDAyNnByb2csIGRzdF9yZWcsIGluc24sIGlwLFxuK1x0XHRcdFx0XHQgICAgICAgdHJ1ZSwgYWNjZXNzZXNfc3RhY2tfb25seSk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0ZW1pdF9zdHgoXHUwMDI2cHJvZywgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSwgZHN0X3JlZywgc3JjX3JlZywgaW5zbl9vZmYpO1xuIFx0XHRcdGJyZWFrO1xuIFxuQEAgLTI0MjgsNiArMjU3MywxMiBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0LyogcG9wdWxhdGUgam1wX29mZnNldCBmb3IgSkFFIGFib3ZlIHRvIGp1bXAgdG8gc3RhcnRfb2ZfbGR4ICovXG4gXHRcdFx0XHRzdGFydF9vZl9sZHggPSBwcm9nO1xuIFx0XHRcdFx0ZW5kX29mX2ptcFstMV0gPSBzdGFydF9vZl9sZHggLSBlbmRfb2Zfam1wO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXHUwMDI2cHJvZywgc3JjX3JlZyxcbitcdFx0XHRcdFx0XHQgICAgICAgaW5zbiwgaXAsIGZhbHNlLFxuK1x0XHRcdFx0XHRcdCAgICAgICBhY2Nlc3Nlc19zdGFja19vbmx5KTtcbitcdFx0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU1TWCB8fFxuIFx0XHRcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU1TWClcbkBAIC0yNDg5LDE1ICsyNjQwLDE2IEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0fVxuIFx0XHRcdGZhbGx0aHJvdWdoO1xuIFx0XHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1c6XG4tXHRcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6XG4tXHRcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IChCUEZfQU5EIHwgQlBGX0ZFVENIKSB8fFxuLVx0XHRcdCAgICBpbnNuLVx1MDAzZWltbSA9PSAoQlBGX09SIHwgQlBGX0ZFVENIKSB8fFxuLVx0XHRcdCAgICBpbnNuLVx1MDAzZWltbSA9PSAoQlBGX1hPUiB8IEJQRl9GRVRDSCkpIHtcbi1cdFx0XHRcdGJvb2wgaXM2NCA9IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0RXO1xuLVx0XHRcdFx0dTMyIHJlYWxfc3JjX3JlZyA9IHNyY19yZWc7XG4tXHRcdFx0XHR1MzIgcmVhbF9kc3RfcmVnID0gZHN0X3JlZztcbi1cdFx0XHRcdHU4ICpicmFuY2hfdGFyZ2V0O1xuLVxuK1x0XHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOiB7XG4rXHRcdFx0Ym9vbCBpczY0ID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFc7XG4rXHRcdFx0dTMyIHJlYWxfc3JjX3JlZyA9IHNyY19yZWc7XG4rXHRcdFx0dTMyIHJlYWxfZHN0X3JlZyA9IGRzdF9yZWc7XG4rXHRcdFx0dTggKmJyYW5jaF90YXJnZXQ7XG4rXHRcdFx0Ym9vbCBpc19hdG9taWNfZmV0Y2ggPVxuK1x0XHRcdFx0KGluc24tXHUwMDNlaW1tID09IChCUEZfQU5EIHwgQlBGX0ZFVENIKSB8fFxuK1x0XHRcdFx0IGluc24tXHUwMDNlaW1tID09IChCUEZfT1IgfCBCUEZfRkVUQ0gpIHx8XG4rXHRcdFx0XHQgaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9YT1IgfCBCUEZfRkVUQ0gpKTtcbitcdFx0XHRpZiAoaXNfYXRvbWljX2ZldGNoKSB7XG4gXHRcdFx0XHQvKlxuIFx0XHRcdFx0ICogQ2FuJ3QgYmUgaW1wbGVtZW50ZWQgd2l0aCBhIHNpbmdsZSB4ODYgaW5zbi5cbiBcdFx0XHRcdCAqIE5lZWQgdG8gZG8gYSBDTVBYQ0hHIGxvb3AuXG5AQCAtMjUxMCw3ICsyNjYyLDE3IEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0XHRpZiAoZHN0X3JlZyA9PSBCUEZfUkVHXzApXG4gXHRcdFx0XHRcdHJlYWxfZHN0X3JlZyA9IEJQRl9SRUdfQVg7XG4gXG4rXHRcdFx0XHRpcCArPSAzO1xuK1x0XHRcdH1cbitcdFx0XHRpZiAoIWJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSkge1xuK1x0XHRcdFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIFx1MDAyNnByb2csIHJlYWxfZHN0X3JlZyxcbitcdFx0XHRcdFx0XHQgICAgICAgaW5zbiwgaXAsIGZhbHNlLFxuK1x0XHRcdFx0XHRcdCAgICAgICBhY2Nlc3Nlc19zdGFja19vbmx5KTtcbitcdFx0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0XHRicmFuY2hfdGFyZ2V0ID0gcHJvZztcbitcdFx0XHR9XG4rXHRcdFx0aWYgKGlzX2F0b21pY19mZXRjaCkge1xuIFx0XHRcdFx0LyogTG9hZCBvbGQgdmFsdWUgKi9cbiBcdFx0XHRcdGVtaXRfbGR4KFx1MDAyNnByb2csIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksXG4gXHRcdFx0XHRcdCBCUEZfUkVHXzAsIHJlYWxfZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuQEAgLTI1NDIsMTUgKzI3MDQsMTYgQEAgc3Q6XHRcdFx0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbiBcdFx0XHR9XG4gXG4gXHRcdFx0aWYgKGJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSlcbi1cdFx0XHRcdGVyciA9IGVtaXRfYXRvbWljX2xkX3N0KFx1MDAyNnByb2csIGluc24tXHUwMDNlaW1tLCBkc3RfcmVnLCBzcmNfcmVnLFxuLVx0XHRcdFx0XHRcdFx0aW5zbi1cdTAwM2VvZmYsIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpO1xuK1x0XHRcdFx0ZXJyID0gZW1pdF9hdG9taWNfbGRfc3QoZW52LCBcdTAwMjZwcm9nLCBpbnNuLCBpcCxcbitcdFx0XHRcdFx0XHRcdGRzdF9yZWcsIHNyY19yZWcsXG4rXHRcdFx0XHRcdFx0XHRhY2Nlc3Nlc19zdGFja19vbmx5KTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRlcnIgPSBlbWl0X2F0b21pY19ybXcoXHUwMDI2cHJvZywgaW5zbi1cdTAwM2VpbW0sIGRzdF9yZWcsIHNyY19yZWcsXG4gXHRcdFx0XHRcdFx0ICAgICAgaW5zbi1cdTAwM2VvZmYsIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdGJyZWFrO1xuLVxuK1x0XHR9XG4gXHRcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfQjpcbiBcdFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9IOlxuIFx0XHRcdGlmICghYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDc2YjhiNzYyN2ExMDg1Li44NjgxMDFlZjUwMDJhYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC03MjMsNiArNzIzLDggQEAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhIHtcbiBcdHUxNiBjb25zdF9yZWdfbWFwX21hc2s7XG4gXHR1MTYgY29uc3RfcmVnX3N1YnByb2dfbWFzaztcbiBcdHUzMiBjb25zdF9yZWdfdmFsc1sxMF07XG4rXHQvKiBpbnN0cnVjdGlvbiBjYW4gYWNjZXNzIG5vbi1zdGFjayBtZW1vcnkgKi9cbitcdGJvb2wgbm9uX3N0YWNrX2FjY2VzcztcbiB9O1xuIFxuICNkZWZpbmUgTUFYX1VTRURfTUFQUyA2NCAvKiBtYXggbnVtYmVyIG9mIG1hcHMgYWNjZXNzZWQgYnkgb25lIGVCUEYgcHJvZ3JhbSAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5pbmRleCAxNGFjYjI0NTU3NDZmYy4uMWViY2QyNDdlZjRlM2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtMTIxMCwxMyArMTIxMCwxNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKTtcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbixcbitcdFx0XHRcdCAgICAgczMyIGluc25fb2ZmX2luX3BhdGNoKTtcbiBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbiB2b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHQgICAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KTtcbiAjZWxzZVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4tXHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbilcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuK1x0XHRcdFx0XHRcdCAgIHUzMiBvZmYsXG4rXHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCxcbitcdFx0XHRcdFx0XHQgICB1MzIgbGVuLFxuK1x0XHRcdFx0XHRcdCAgIHMzMiBpbnNuX29mZl9pbl9wYXRjaClcbiB7XG4gXHRyZXR1cm4gRVJSX1BUUigtRU5PVFNVUFApO1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL0tjb25maWcgYi9rZXJuZWwvYnBmL0tjb25maWdcbmluZGV4IGViM2RlMzU3MzRmMDkyLi5lMWYzODUwZDJmNWEwNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvS2NvbmZpZ1xuKysrIGIva2VybmVsL2JwZi9LY29uZmlnXG5AQCAtMTcsNiArMTcsMTAgQEAgY29uZmlnIEhBVkVfQ0JQRl9KSVRcbiBjb25maWcgSEFWRV9FQlBGX0pJVFxuIFx0Ym9vbFxuIFxuKyMgS0FTQU4gc3VwcG9ydCBmb3IgSklUIGNvbXBpbGVyXG4rY29uZmlnIEhBVkVfRUJQRl9KSVRfS0FTQU5cbitcdGJvb2xcbitcbiAjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XG4gIyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cbiBjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxuQEAgLTEwMSw0ICsxMDUsMTcgQEAgY29uZmlnIEJQRl9MU01cbiBcbiBcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cbiBcbitjb25maWcgQlBGX0pJVF9LQVNBTlxuK1x0Ym9vbFxuK1x0ZGVwZW5kcyBvbiBIQVZFX0VCUEZfSklUX0tBU0FOXG4rXHRkZXBlbmRzIG9uIEtBU0FOX0dFTkVSSUNcbitcdGRlcGVuZHMgb24gS0FTQU5fVk1BTExPQ1xuK1x0ZGVwZW5kcyBvbiBCUEZfSklUXG4rXHRkZWZhdWx0IHkgaWYgS0FTQU5cbitcdGhlbHBcbitcdCAgTWFrZXMgSklUIGNvbXBpbGVyIGluc2VydCBnZW5lcmljIG91dGxpbmUgS0FTQU4gY2hlY2tzIGluIEJQRlxuK1x0ICBwcm9ncmFtcyB3aGVuIHRoZXkgYXJlIGluc2VydGVkIGluIHRoZSBrZXJuZWwuIFRoaXMgZmVhdHVyZSBpc1xuK1x0ICBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgdGhlIG5lZWRlZCBzZXQgb2YgS0FTQU4gYW5kIEJQRlxuK1x0ICBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgZW5hYmxlZC5cbitcbiBlbmRtZW51ICMgXCJCUEYgc3Vic3lzdGVtXCJcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jXG5pbmRleCA2ZTE5YTAzMGRhNmYxMy4uMWUxOGI5OTlmMWI1NjUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC0xNTk4LDcgKzE1OTgsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAoZW52KVxuLVx0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XG4rXHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuLCByZXdyaXR0ZW4gLSAxKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShjbG9uZSwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCAxMmE4YTRlYjc1N2YxOC4uZmVlZTFmMzNkZTlkNTUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtMTUyLDEyICsxNTIsMjUgQEAgc3RhdGljIGludCBnZXRfY2FsbGVlX3N0YWNrX2RlcHRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gfVxuICNlbmRpZlxuIFxuK3N0YXRpYyBib29sIGlzX21lbV9pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbit7XG4rXHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1NUIFx1MDAyNlx1MDAyNlxuK1x0ICAgIEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9TVFggXHUwMDI2XHUwMDI2XG4rXHQgICAgQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX0xEWClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gfHxcbitcdFx0QlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggfHxcbitcdFx0QlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDKTtcbit9XG4rXG4gLyogc2luZ2xlIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25pW29mZl0gaW5zdHJ1Y3Rpb24gd2FzIHJlcGxhY2VkIHdpdGggdGhlIHJhbmdlXG4gICogaW5zbmlbb2ZmLCBvZmYgKyBjbnQpLiAgQWRqdXN0IGNvcnJlc3BvbmRpbmcgaW5zbl9hdXhfZGF0YSBieSBjb3B5aW5nXG4gICogWzAsIG9mZikgYW5kIFtvZmYsIGVuZCkgdG8gbmV3IGxvY2F0aW9ucywgc28gdGhlIHBhdGNoZWQgcmFuZ2Ugc3RheXMgemVyb1xuICAqL1xuIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0XHQgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZywgdTMyIG9mZiwgdTMyIGNudClcbitcdFx0XHRcdCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLCB1MzIgb2ZmLCB1MzIgY250LFxuK1x0XHRcdFx0IHMzMiBpbnNuX29mZl9pbl9wYXRjaClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmRhdGEgPSBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YTtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IG5ld19wcm9nLVx1MDAzZWluc25zaTtcbkBAIC0xNzEsOCArMTg0LDE0IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHQgKi9cbiBcdGRhdGFbb2ZmXS56ZXh0X2RzdCA9IGluc25faGFzX2RlZjMyKGluc24gKyBvZmYgKyBjbnQgLSAxKTtcbiBcbi1cdGlmIChjbnQgPT0gMSlcbitcdGlmIChjbnQgPT0gMSkge1xuK1x0XHQvKiBBIG5vbi1tZW1vcnkgYWNjZXNzaW5nIGluc24gY291bGQgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGFcbitcdFx0ICogbWVtb3J5IGFjY2Vzc2luZyBpbnNuLCBzeXN0ZW1hdGljYWxseSBtYXJrIGl0IGZvciBub24tc3RhY2tcbitcdFx0ICogYWNjZXNzXG4rXHRcdCAqL1xuK1x0XHRkYXRhW29mZl0ubm9uX3N0YWNrX2FjY2VzcyA9IGlzX21lbV9pbnNuKGluc24pO1xuIFx0XHRyZXR1cm47XG4rXHR9XG4gXHRwcm9nX2xlbiA9IG5ld19wcm9nLVx1MDAzZWxlbjtcbiBcbiBcdG1lbW1vdmUoZGF0YSArIG9mZiArIGNudCAtIDEsIGRhdGEgKyBvZmYsXG5AQCAtMTgyLDcgKzIwMSwxOSBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHQvKiBFeHBhbmQgaW5zbmlbb2ZmXSdzIHNlZW4gY291bnQgdG8gdGhlIHBhdGNoZWQgcmFuZ2UuICovXG4gXHRcdGRhdGFbaV0uc2VlbiA9IG9sZF9zZWVuO1xuIFx0XHRkYXRhW2ldLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiArIGkpO1xuK1x0XHRpZiAoaSA9PSBvZmYgKyBpbnNuX29mZl9pbl9wYXRjaCkge1xuK1x0XHRcdGRhdGFbaV0ubm9uX3N0YWNrX2FjY2VzcyA9IGRhdGFbb2ZmICsgY250IC0gMV0ubm9uX3N0YWNrX2FjY2VzcztcbitcdFx0XHRkYXRhW29mZiArIGNudCAtIDFdLm5vbl9zdGFja19hY2Nlc3MgPSBmYWxzZTtcbitcdFx0fSBlbHNlIGlmIChpc19tZW1faW5zbihpbnNuICsgaSkpIHtcbitcdFx0XHRkYXRhW2ldLm5vbl9zdGFja19hY2Nlc3MgPSB0cnVlO1xuK1x0XHR9XG4gXHR9XG4rXHQvKlxuK1x0ICogTGFzdCBzbG90IGluc3RydWN0aW9uIGNvdWxkIGJlIGEgbmV3bHkgZ2VuZXJhdGVkXG4rXHQgKiBCUEZfU1QvQlBGX0xEWC9CUEZfU1RYXG4rXHQgKi9cbitcdGlmIChpc19tZW1faW5zbihpbnNuICsgb2ZmICsgY250IC0gMSkgXHUwMDI2XHUwMDI2IGluc25fb2ZmX2luX3BhdGNoICE9IGNudCAtIDEpXG4rXHRcdGRhdGFbb2ZmICsgY250IC0gMV0ubm9uX3N0YWNrX2FjY2VzcyA9IHRydWU7XG4gXG4gXHQvKlxuIFx0ICogVGhlIGluZGlyZWN0X3RhcmdldCBmbGFnIG9mIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiB3YXMgbW92ZWQgdG8gdGhlIGxhc3Qgb2YgdGhlXG5AQCAtMjQ1LDcgKzI3Niw4IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9wb2tlX2Rlc2NzKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwgdTMyIGxlbilcbiB9XG4gXG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4tXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXG4rXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4sXG4rXHRcdFx0XHQgICAgIHMzMiBpbnNuX29mZl9pbl9wYXRjaClcbiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nO1xuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpuZXdfZGF0YSA9IE5VTEw7XG5AQCAtMjY5LDcgKzMwMSw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuIFx0XHRcdFx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbb2ZmXS5vcmlnX2lkeCk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuLVx0YWRqdXN0X2luc25fYXV4X2RhdGEoZW52LCBuZXdfcHJvZywgb2ZmLCBsZW4pO1xuK1x0YWRqdXN0X2luc25fYXV4X2RhdGEoZW52LCBuZXdfcHJvZywgb2ZmLCBsZW4sIGluc25fb2ZmX2luX3BhdGNoKTtcbiBcdGFkanVzdF9zdWJwcm9nX3N0YXJ0cyhlbnYsIG9mZiwgbGVuKTtcbiBcdGFkanVzdF9pbnNuX2FycmF5cyhlbnYsIG9mZiwgbGVuKTtcbiBcdGFkanVzdF9wb2tlX2Rlc2NzKG5ld19wcm9nLCBvZmYsIGxlbik7XG5AQCAtNjY4LDcgKzcwMCw3IEBAIGludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0cGF0Y2ggPSB6ZXh0X3BhdGNoO1xuIFx0XHRwYXRjaF9sZW4gPSAyO1xuIGFwcGx5X3BhdGNoX2J1ZmZlcjpcbi1cdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgYWRqX2lkeCwgcGF0Y2gsIHBhdGNoX2xlbik7XG4rXHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4sIDApO1xuIFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRlbnYtXHUwMDNlcHJvZyA9IG5ld19wcm9nO1xuQEAgLTcxMyw3ICs3NDUsNyBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbY250KytdID0gQlBGX1NUWF9NRU0oQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzEsXG4gXHRcdFx0XHRcdFx0ICAgICAgLXN1YnByb2dzWzBdLnN0YWNrX2RlcHRoKTtcbiBcdFx0XHRpbnNuX2J1ZltjbnQrK10gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2lbMF07XG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCwgMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRcdGVudi1cdTAwM2Vwcm9nID0gbmV3X3Byb2c7XG5AQCAtNzM2LDcgKzc2OCw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHR2ZXJpZmllcl9idWcoZW52LCBcInByb2xvZ3VlIGlzIHRvbyBsb25nXCIpO1xuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHR9IGVsc2UgaWYgKGNudCkge1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC03NTksNiArNzkyLDcgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5zbl9jbnQ7IGkrKywgaW5zbisrKSB7XG4gXHRcdGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NfdCBjb252ZXJ0X2N0eF9hY2Nlc3M7XG4rXHRcdHMzMiBpbnNuX29mZl9pbl9wYXRjaCA9IC0xO1xuIFx0XHR1OCBtb2RlO1xuIFxuIFx0XHRpZiAoZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaSArIGRlbHRhXS5ub3NwZWMpIHtcbkBAIC03NjgsNyArODAyLDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdCpwYXRjaCsrID0gQlBGX1NUX05PU1BFQygpO1xuIFx0XHRcdCpwYXRjaCsrID0gKmluc247XG4gXHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1Zjtcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgY250IC0gMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTg0MSw3ICs4NzYsOCBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0KnBhdGNoKysgPSAqaW5zbjtcbiBcdFx0XHQqcGF0Y2grKyA9IEJQRl9TVF9OT1NQRUMoKTtcbiBcdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCAwKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtODU2LDE2ICs4OTIsMjAgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGlmICghb3BzLVx1MDAzZWNvbnZlcnRfY3R4X2FjY2VzcylcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IG9wcy1cdTAwM2Vjb252ZXJ0X2N0eF9hY2Nlc3M7XG4rXHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFBUUl9UT19TT0NLRVQ6XG4gXHRcdGNhc2UgUFRSX1RPX1NPQ0tfQ09NTU9OOlxuIFx0XHRcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl9zb2NrX2NvbnZlcnRfY3R4X2FjY2VzcztcbitcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IDA7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgUFRSX1RPX1RDUF9TT0NLOlxuIFx0XHRcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl90Y3Bfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3M7XG4rXHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFBUUl9UT19YRFBfU09DSzpcbiBcdFx0XHRjb252ZXJ0X2N0eF9hY2Nlc3MgPSBicGZfeGRwX3NvY2tfY29udmVydF9jdHhfYWNjZXNzO1xuK1x0XHRcdGluc25fb2ZmX2luX3BhdGNoID0gMDtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBQVFJfVE9fQlRGX0lEOlxuIFx0XHRjYXNlIFBUUl9UT19CVEZfSUQgfCBQVFJfVU5UUlVTVEVEOlxuQEAgLTk3MSw3ICsxMDExLDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0XHRcdCAgICAgICBzaXplICogOCwgMCk7XG4gXG4gcGF0Y2hfaW5zbl9idWY6XG4tXHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCxcbitcdFx0XHRcdFx0ICAgICAgIGluc25fb2ZmX2luX3BhdGNoKTtcbiBcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xNDY0LDcgKzE1MDUsNyBAQCBzdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdFxuIFx0ICogb25lcyBmb3IgdGhlIGhpZGRlbiBzdWJwcm9nLiBIZW5jZSBhbGwgb2YgdGhlIGFkanVzdG1lbnQgb3BlcmF0aW9uc1xuIFx0ICogaW4gYnBmX3BhdGNoX2luc25fZGF0YSBhcmUgbm8tb3BzLlxuIFx0ICovXG4tXHRwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbiAtIDEsIHBhdGNoLCBsZW4pO1xuK1x0cHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4gLSAxLCBwYXRjaCwgbGVuLCAtMSk7XG4gXHRpZiAoIXByb2cpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0ZW52LVx1MDAzZXByb2cgPSBwcm9nO1xuQEAgLTE1NDksNyArMTU5MCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiBcdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCAwKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTU2OSw2ICsxNjExLDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGJvb2wgaXNfc2RpdiA9IGlzZGl2IFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZW9mZiA9PSAxO1xuIFx0XHRcdGJvb2wgaXNfc21vZCA9ICFpc2RpdiBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gMTtcbiBcdFx0XHRzdHJ1Y3QgYnBmX2luc24gKnBhdGNoID0gaW5zbl9idWY7XG4rXHRcdFx0czMyIGluc25fb2ZmX2luX3BhdGNoO1xuIFxuIFx0XHRcdGlmIChpc19zZGl2KSB7XG4gXHRcdFx0XHQvKiBbUixXXXggc2RpdiAwIC1cdTAwM2UgMFxuQEAgLTE1OTUsNiArMTYzOCw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdCpwYXRjaCsrID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbiBcdFx0XHRcdCpwYXRjaCsrID0gKmluc247XG4gXHRcdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xuK1x0XHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSBjbnQgLSAxO1xuIFx0XHRcdH0gZWxzZSBpZiAoaXNfc21vZCkge1xuIFx0XHRcdFx0LyogW1IsV114IG1vZCAwIC1cdTAwM2UgW1IsV114ICovXG4gXHRcdFx0XHQvKiBbUixXXXggbW9kIC0xIC1cdTAwM2UgMCAqL1xuQEAgLTE2MTEsNiArMTY1NSw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdCpwYXRjaCsrID0gQlBGX01PVjMyX0lNTShpbnNuLVx1MDAzZWRzdF9yZWcsIDApO1xuIFx0XHRcdFx0KnBhdGNoKysgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xuIFx0XHRcdFx0KnBhdGNoKysgPSAqaW5zbjtcbitcdFx0XHRcdGluc25fb2ZmX2luX3BhdGNoID0gcGF0Y2ggLSBpbnNuX2J1ZiAtIDE7XG4gXG4gXHRcdFx0XHRpZiAoIWlzNjQpIHtcbiBcdFx0XHRcdFx0KnBhdGNoKysgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xuQEAgLTE2MjYsMTIgKzE2NzEsMTQgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0KnBhdGNoKysgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xuIFx0XHRcdFx0KnBhdGNoKysgPSAqaW5zbjtcbiBcdFx0XHRcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XG4rXHRcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IGNudCAtIDE7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdC8qIFtSLFddeCBtb2QgMCAtXHUwMDNlIFtSLFddeCAqL1xuIFx0XHRcdFx0KnBhdGNoKysgPSBCUEZfUkFXX0lOU04oKGlzNjQgPyBCUEZfSk1QIDogQlBGX0pNUDMyKSB8XG4gXHRcdFx0XHRcdFx0XHRCUEZfSkVRIHwgQlBGX0ssIGluc24tXHUwMDNlc3JjX3JlZyxcbiBcdFx0XHRcdFx0XHRcdDAsIDEgKyAoaXM2NCA/IDAgOiAxKSwgMCk7XG4gXHRcdFx0XHQqcGF0Y2grKyA9ICppbnNuO1xuK1x0XHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSBwYXRjaCAtIGluc25fYnVmIC0gMTtcbiBcbiBcdFx0XHRcdGlmICghaXM2NCkge1xuIFx0XHRcdFx0XHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XG5AQCAtMTY0MCw3ICsxNjg3LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIGluc25fb2ZmX2luX3BhdGNoKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTY1Niw2ICsxNzA0LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHQgICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTVNYKSkge1xuIFx0XHRcdHN0cnVjdCBicGZfaW5zbiAqcGF0Y2ggPSBpbnNuX2J1ZjtcbiBcdFx0XHR1NjQgdWFkZHJlc3NfbGltaXQgPSBicGZfYXJjaF91YWRkcmVzc19saW1pdCgpO1xuK1x0XHRcdHMzMiBpbnNuX29mZl9pbl9wYXRjaDtcbiBcbiBcdFx0XHRpZiAoIXVhZGRyZXNzX2xpbWl0KVxuIFx0XHRcdFx0Z290byBuZXh0X2luc247XG5AQCAtMTY2NiwxMSArMTcxNSwxMyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0KnBhdGNoKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9SU0gsIEJQRl9SRUdfQVgsIDMyKTtcbiBcdFx0XHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KTEUsIEJQRl9SRUdfQVgsIHVhZGRyZXNzX2xpbWl0IFx1MDAzZVx1MDAzZSAzMiwgMik7XG4gXHRcdFx0KnBhdGNoKysgPSAqaW5zbjtcbitcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IHBhdGNoIC0gaW5zbl9idWYgLSAxO1xuIFx0XHRcdCpwYXRjaCsrID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbiBcdFx0XHQqcGF0Y2grKyA9IEJQRl9NT1Y2NF9JTU0oaW5zbi1cdTAwM2Vkc3RfcmVnLCAwKTtcbiBcbiBcdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCBpbnNuX29mZl9pbl9wYXRjaCk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE2OTAsNyArMTc0MSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMCk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE3NDMsNyArMTc5NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdCpwYXRjaCsrID0gQlBGX0FMVTY0X0lNTShCUEZfTVVMLCBvZmZfcmVnLCAtMSk7XG4gXHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xNzg4LDcgKzE4NDEsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbNl0gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfQVgsIHN0YWNrX29mZl9jbnQpO1xuIFx0XHRcdGNudCA9IDc7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIDMpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xODA5LDcgKzE4NjMsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbM10gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfQVgsIHN0YWNrX29mZik7XG4gXHRcdFx0Y250ID0gNDtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMik7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE4MzAsNyArMTg4NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpZiAoY250ID09IDApXG4gXHRcdFx0XHRnb3RvIG5leHRfaW5zbjtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgY250IC0gMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE5MTUsNyArMTk3MSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdFx0XHRcdFx0IG1hcCktXHUwMDNlaW5kZXhfbWFzayk7XG4gXHRcdFx0aW5zbl9idWZbMl0gPSAqaW5zbjtcbiBcdFx0XHRjbnQgPSAzO1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTk0OCw3ICsyMDA1LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGluc25fYnVmWzJdID0gKmluc247XG4gXHRcdFx0Y250ID0gMztcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgY250IC0gMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE5NjcsNyArMjAyNSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlsxXSA9ICppbnNuO1xuIFx0XHRcdGNudCA9IDI7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMDA3LDggKzIwNjYsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHRcdFx0fVxuIFxuLVx0XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLFxuLVx0XHRcdFx0XHRcdFx0ICAgICAgIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKFxuK1x0XHRcdFx0XHRlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCwgLTEpO1xuIFx0XHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjA5MSw3ICsyMTUwLDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGNudCA9IDM7XG4gXG4gXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1Zixcbi1cdFx0XHRcdFx0XHQgICAgICAgY250KTtcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTIxMTksNyArMjE3OCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9BTFUzMl9SRUcoQlBGX1hPUiwgQlBGX1JFR18wLCBCUEZfUkVHXzApO1xuIFx0XHRcdGNudCA9IDE7XG4gI2VuZGlmXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjEzNyw3ICsyMTk3LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGluc25fYnVmWzJdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG4gXHRcdFx0Y250ID0gMztcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMTcxLDcgKzIyMzIsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbY250KytdID0gQlBGX0pNUF9BKDEpO1xuIFx0XHRcdGluc25fYnVmW2NudCsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMjAzLDcgKzIyNjUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRjbnQgPSAxO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMjI5LDcgKzIyOTIsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRjbnQgPSAyO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMjQ1LDcgKzIzMDksOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0LyogTG9hZCBJUCBhZGRyZXNzIGZyb20gY3R4IC0gMTYgKi9cbiBcdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIC0xNik7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgMSk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgMSwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMzAwLDcgKzIzNjUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbMTBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FTk9FTlQpO1xuIFx0XHRcdGNudCA9IDExO1xuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTIzMTgsNyArMjM4NCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlsxXSA9IEJQRl9BVE9NSUNfT1AoQlBGX0RXLCBCUEZfWENIRywgQlBGX1JFR18xLCBCUEZfUkVHXzAsIDApO1xuIFx0XHRcdGNudCA9IDI7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjM4Niw3ICsyNDUzLDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHQvKiBDb3B5IGZpcnN0IGFjdHVhbCBpbnNuIHRvIHByZXNlcnZlIGl0ICovXG4gXHRcdGluc25fYnVmW2NudCsrXSA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaVtzdWJwcm9nX3N0YXJ0XTtcbiBcbi1cdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgc3VicHJvZ19zdGFydCwgaW5zbl9idWYsIGNudCk7XG4rXHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHN1YnByb2dfc3RhcnQsIGluc25fYnVmLCBjbnQsIGNudCAtIDEpO1xuIFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRlbnYtXHUwMDNlcHJvZyA9IHByb2cgPSBuZXdfcHJvZztcbkBAIC0yNDg1LDcgKzI1NTIsNyBAQCBzdGF0aWMgc3RydWN0IGJwZl9wcm9nICppbmxpbmVfYnBmX2xvb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGluc25fYnVmW2NudCsrXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR184LCBCUEZfUkVHXzEwLCByOF9vZmZzZXQpO1xuIFxuIFx0KnRvdGFsX2NudCA9IGNudDtcbi1cdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHBvc2l0aW9uLCBpbnNuX2J1ZiwgY250KTtcbitcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHBvc2l0aW9uLCBpbnNuX2J1ZiwgY250LCAtMSk7XG4gXHRpZiAoIW5ld19wcm9nKVxuIFx0XHRyZXR1cm4gbmV3X3Byb2c7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA1MWY3OTY1ZDQyZTMyNC4uMTI0NmNlOGY1ZjBmNDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTMxNDQsNiArMzE0NCwxMSBAQCBzdGF0aWMgdm9pZCBtYXJrX2luZGlyZWN0X3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4KVxuIFx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaWR4XS5pbmRpcmVjdF90YXJnZXQgPSB0cnVlO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBtYXJrX25vbl9zdGFja19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeClcbit7XG4rXHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpZHhdLm5vbl9zdGFja19hY2Nlc3MgPSB0cnVlO1xuK31cbitcbiAjZGVmaW5lIExSX0ZSQU1FTk9fQklUU1x0NFxuICNkZWZpbmUgTFJfU1BJX0JJVFNcdDZcbiAjZGVmaW5lIExSX0VOVFJZX0JJVFNcdChMUl9TUElfQklUUyArIExSX0ZSQU1FTk9fQklUUyArIDEpXG5AQCAtNjMzMyw2ICs2MzM4LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiXG4gXHRcdGVsc2VcbiBcdFx0XHRjb2VyY2VfcmVnX3RvX3NpemVfc3goXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIHNpemUpO1xuIFx0fVxuK1xuK1x0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19TVEFDSylcbitcdFx0bWFya19ub25fc3RhY2tfYWNjZXNzKGVudiwgaW5zbl9pZHgpO1xuK1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmNcbmluZGV4IDAyMjJhOWE1ZDA3NjE0Li4zN2M0MDVmYzJiMGQyMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmNcbkBAIC0yMjcsNDIgKzIyNyw2IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2luY29ycmVjdF9pbmRleCh2b2lkKVxuIFx0Y2hlY2tfbWlkX2luc25faW5kZXgoKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZXRfYnBmX2ppdF9oYXJkZW4oY2hhciAqbGV2ZWwpXG4te1xuLVx0Y2hhciBvbGRfbGV2ZWw7XG4tXHRpbnQgZXJyID0gLTE7XG4tXHRpbnQgZmQgPSAtMTtcbi1cbi1cdGZkID0gb3BlbihcIi9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlblwiLCBPX1JEV1IgfCBPX05PTkJMT0NLKTtcbi1cdGlmIChmZCBcdTAwM2MgMCkge1xuLVx0XHRBU1NFUlRfRkFJTChcIm9wZW4gLi4uL2JwZl9qaXRfaGFyZGVuIHJldHVybmVkICVkIChlcnJubz0lZClcIiwgZmQsIGVycm5vKTtcbi1cdFx0cmV0dXJuIC0xO1xuLVx0fVxuLVxuLVx0ZXJyID0gcmVhZChmZCwgXHUwMDI2b2xkX2xldmVsLCAxKTtcbi1cdGlmIChlcnIgIT0gMSkge1xuLVx0XHRBU1NFUlRfRkFJTChcInJlYWQgZnJvbSAuLi4vYnBmX2ppdF9oYXJkZW4gcmV0dXJuZWQgJWQgKGVycm5vPSVkKVwiLCBlcnIsIGVycm5vKTtcbi1cdFx0ZXJyID0gLTE7XG4tXHRcdGdvdG8gZW5kO1xuLVx0fVxuLVxuLVx0bHNlZWsoZmQsIDAsIFNFRUtfU0VUKTtcbi1cbi1cdGVyciA9IHdyaXRlKGZkLCBsZXZlbCwgMSk7XG4tXHRpZiAoZXJyICE9IDEpIHtcbi1cdFx0QVNTRVJUX0ZBSUwoXCJ3cml0ZSB0byAuLi4vYnBmX2ppdF9oYXJkZW4gcmV0dXJuZWQgJWQgKGVycm5vPSVkKVwiLCBlcnIsIGVycm5vKTtcbi1cdFx0ZXJyID0gLTE7XG4tXHRcdGdvdG8gZW5kO1xuLVx0fVxuLVxuLVx0ZXJyID0gMDtcbi1cdCpsZXZlbCA9IG9sZF9sZXZlbDtcbi1lbmQ6XG4tXHRpZiAoZmQgXHUwMDNlPSAwKVxuLVx0XHRjbG9zZShmZCk7XG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBjaGVja19ibGluZG5lc3Modm9pZClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2luc24gaW5zbnNbXSA9IHtcbkBAIC0yNzIsNyArMjM2LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tfYmxpbmRuZXNzKHZvaWQpXG4gXHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcbiBcdFx0QlBGX0VYSVRfSU5TTigpLFxuIFx0fTtcbi1cdGludCBwcm9nX2ZkID0gLTEsIG1hcF9mZDtcbitcdGludCBwcm9nX2ZkID0gLTEsIG1hcF9mZCwgcmV0O1xuIFx0c3RydWN0IGJwZl9pbnNuX2FycmF5X3ZhbHVlIHZhbCA9IHt9O1xuIFx0Y2hhciBicGZfaml0X2hhcmRlbiA9ICdAJzsgLyogbm9uLWV4aXpzdGluZyB2YWx1ZSAqL1xuIFx0aW50IGk7XG5AQCAtMjkxLDcgKzI1NSw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2JsaW5kbmVzcyh2b2lkKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4gXHRicGZfaml0X2hhcmRlbiA9ICcyJztcbi1cdGlmIChzZXRfYnBmX2ppdF9oYXJkZW4oXHUwMDI2YnBmX2ppdF9oYXJkZW4pKSB7XG4rXHRyZXQgPSBzZXRfYnBmX2ppdF9oYXJkZW4oXHUwMDI2YnBmX2ppdF9oYXJkZW4pO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcInNldCBicGZfaml0X2hhcmRlblwiKSkge1xuIFx0XHRicGZfaml0X2hhcmRlbiA9ICdAJzsgLyogb3BlbiwgcmVhZCBvciB3cml0ZSBmYWlsZWQgPVx1MDAzZSBubyB3cml0ZSB3YXMgZG9uZSAqL1xuIFx0XHRnb3RvIGNsZWFudXA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2thc2FuLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjAwNmI5MmVlMTMxYWNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2thc2FuLmNcbkBAIC0wLDAgKzEsNDI1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXG4rXG4rLypcbisgKiBUZXN0cyB2YWxpZGF0aW5nIHRoYXQgS0FTQU4gcmVwb3J0cyBhcmUgcHJvcGVybHkgaW5zdHJ1bWVudGVkIGFuZFxuKyAqIGdlbmVyYXRlZCBvbiBhIHdpZGUgdmFyaWV0eSBvZiBpbnN0cnVjdGlvbnMuIFRoZSBydW5uaW5nIGtlcm5lbCBuZWVkc1xuKyAqIGthc2FuX211bHRpX3Nob3QgdG8gcnVuIG11bHRpcGxlIGthc2FuLWdlbmVyYXRpbmcgc3VidGVzdHMgYXQgb25jZVxuKyAqL1xuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5wcml2X2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwia2FzYW4uc2tlbC5oXCJcbisjaW5jbHVkZSBcImthc2FuX2hhcmRlbi5za2VsLmhcIlxuK1xuKyNkZWZpbmUgU1VCVEVTVF9OQU1FX01BWF9MRU5cdDEyOFxuKyNkZWZpbmUgUFJPR19OQU1FX01BWF9MRU5cdDEyOFxuK1xuKyNkZWZpbmUgTUFYX0xPR19TSVpFXHRcdCg4ICogMTAyNClcbisjZGVmaW5lIFJFQURfQ0hVTktfU0laRVx0XHQyNTZcbitcbisjZGVmaW5lIEtBU0FOX1BBVFRFUk5fU0xBQl9VQUYgXCJCVUc6IEtBU0FOOiBzbGFiLXVzZS1hZnRlci1mcmVlIFwiIFxcXG4rXHRcImluIGJwZl9wcm9nXyUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XyVzXCJcbisjZGVmaW5lIEtBU0FOX1BBVFRFUk5fUkVQT1JUIFwiJXMgb2Ygc2l6ZSAlZCBhdCBhZGRyXCJcbitcbitzdGF0aWMgY2hhciBrbG9nX2J1ZmZlcltNQVhfTE9HX1NJWkVdO1xuK3N0YXRpYyBjaGFyIHJlY29yZFtNQVhfTE9HX1NJWkVdO1xuK1xuK3N0cnVjdCB0ZXN0X3NwZWMge1xuK1x0Y2hhciAqcHJvZ190eXBlO1xuK1x0Ym9vbCBpc193cml0ZTtcbitcdGJvb2wgb25seV8zMl9vcl82NDtcbitcdGJvb2wgbmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsO1xuK1x0Ym9vbCBza2lwX211bHRpX3NpemVfdGVzdGluZztcbitcdGJvb2wgc2tpcF9vbl9zdGFja190ZXN0aW5nO1xuK1x0aW50IHJ1bl9zaXplO1xuK1x0Ym9vbCBleHBlY3Rfbm9fcmVwb3J0O1xuK1x0Ym9vbCBybmRfaGkzMjtcbit9O1xuK1xuK3N0cnVjdCBrYXNhbl93cml0ZV92YWwge1xuK1x0X191OCBkYXRhXzE7XG4rXHRfX3UxNiBkYXRhXzI7XG4rXHRfX3UzMiBkYXRhXzQ7XG4rXHRfX3U2NCBkYXRhXzg7XG4rfTtcbitcbitzdHJ1Y3QgdGVzdF9jdHgge1xuK1x0X191OCAgcHJvZ190YWdbQlBGX1RBR19TSVpFXTtcbitcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XG4rXHRpbnQgKmFjY2Vzc19zaXplO1xuK1x0Ym9vbCBza2lwX2xvYWRfYWNxX3N0b3JlX3JlbDtcbitcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbitcdGNoYXIgcHJvZ19uYW1lW1NVQlRFU1RfTkFNRV9NQVhfTEVOXTtcbitcdGludCBrbG9nX2ZkO1xuK307XG4rXG4rc3RhdGljIGludCBvcGVuX2tlcm5lbF9sb2dzKHZvaWQpXG4re1xuK1x0aW50IGZkO1xuK1xuK1x0ZmQgPSBvcGVuKFwiL2Rldi9rbXNnXCIsIE9fUkRPTkxZIHwgT19OT05CTE9DSyk7XG4rXG4rXHRyZXR1cm4gZmQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNraXBfa2VybmVsX2xvZ3MoaW50IGZkKVxuK3tcbitcdGxzZWVrKGZkLCAwLCBTRUVLX0VORCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmVhZF9rZXJuZWxfbG9ncyhpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IG1heF9sZW4pXG4re1xuK1x0c2l6ZV90IHRvdGFsID0gMDtcbitcdHNzaXplX3QgbjtcbitcbitcdGJ1ZlswXSA9ICdcXDAnO1xuK1x0d2hpbGUgKDEpIHtcbitcdFx0Y2hhciAqbXNnLCAqZW9sO1xuK1x0XHRzaXplX3QgbGVuO1xuK1xuK1x0XHRuID0gcmVhZChmZCwgcmVjb3JkLCBzaXplb2YocmVjb3JkKSAtIDEpO1xuK1x0XHRpZiAobiBcdTAwM2MgMCkge1xuK1x0XHRcdGlmIChlcnJubyA9PSBFQUdBSU4pXG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRyZXR1cm4gbjtcbitcdFx0fVxuK1x0XHRyZWNvcmRbbl0gPSAnXFwwJztcbitcbitcdFx0LypcbitcdFx0ICogRWFjaCBrbXNnIHJlY29yZCBzdGFydHMgd2l0aCBzb21lIG1ldGFkYXRhLCBzZXBhcmF0ZWRcbitcdFx0ICogZnJvbSB0aGUgYWN0dWFsIGNvbnRlbnQgYnkgYSBzZW1pLWNvbG9uXG4rXHRcdCAqL1xuK1x0XHRtc2cgPSBzdHJjaHIocmVjb3JkLCAnOycpO1xuK1x0XHRpZiAoIW1zZylcbitcdFx0XHRjb250aW51ZTtcbitcdFx0bXNnKys7XG4rXHRcdGVvbCA9IHN0cmNocihtc2csICdcXG4nKTtcbitcdFx0aWYgKGVvbClcbitcdFx0XHQqZW9sID0gJ1xcMCc7XG4rXG4rXHRcdGxlbiA9IHN0cmxlbihtc2cpO1xuK1x0XHRpZiAodG90YWwgKyBsZW4gKyAyIFx1MDAzZSBtYXhfbGVuKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRtZW1jcHkoYnVmICsgdG90YWwsIG1zZywgbGVuKTtcbitcdFx0dG90YWwgKz0gbGVuO1xuK1x0XHRidWZbdG90YWwrK10gPSAnXFxuJztcbitcdFx0YnVmW3RvdGFsXSA9ICdcXDAnO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRvdGFsO1xuK31cbitcbitzdGF0aWMgaW50IGNoZWNrX2thc2FuX3JlcG9ydF9pbl9rZXJuZWxfbG9ncyhjaGFyICpidWYsIHN0cnVjdCB0ZXN0X2N0eCAqY3R4LFxuK1x0XHRcdFx0XHQgICAgIGJvb2wgaXNfd3JpdGUsIGludCBzaXplKVxuK3tcbitcdGNoYXIgYWNjZXNzX2xvZ1tSRUFEX0NIVU5LX1NJWkVdO1xuK1x0Y2hhciAqa2FzYW5fcmVwb3J0X3N0YXJ0O1xuK1x0aW50IG5zaXplO1xuK1xuK1x0c25wcmludGYoYWNjZXNzX2xvZywgUkVBRF9DSFVOS19TSVpFLCBLQVNBTl9QQVRURVJOX1NMQUJfVUFGLFxuK1x0XHQgY3R4LVx1MDAzZXByb2dfdGFnWzBdLCBjdHgtXHUwMDNlcHJvZ190YWdbMV0sIGN0eC1cdTAwM2Vwcm9nX3RhZ1syXSxcbitcdFx0IGN0eC1cdTAwM2Vwcm9nX3RhZ1szXSwgY3R4LVx1MDAzZXByb2dfdGFnWzRdLCBjdHgtXHUwMDNlcHJvZ190YWdbNV0sXG4rXHRcdCBjdHgtXHUwMDNlcHJvZ190YWdbNl0sIGN0eC1cdTAwM2Vwcm9nX3RhZ1s3XSwgY3R4LVx1MDAzZXByb2dfbmFtZSk7XG4rXHQvKlxuK1x0ICogU2VhcmNoZWQga2FzYW4gcmVwb3J0IGlzIHZhbGlkIGlmXG4rXHQgKiAtIGl0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBrYXNhbiBwYXR0ZXJuXG4rXHQgKiAtIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmF1bHR5IGFjY2VzcyBpcyBmb3VuZCBzb21ld2hlcmVcbitcdCAqICAgYWZ0ZXIgdGhlIGhlYWRlciAobm90IG5lY2Vzc2FyaWx5IG9uIHRoZSB2ZXJ5IG5leHQgbGluZSxcbitcdCAqICAgYmVjYXVzZSBvdGhlciBrZXJuZWwgbWVzc2FnZXMgbWF5IGludGVybGVhdmUpXG4rXHQgKiAtIGZhdWx0eSBhY2Nlc3MgcHJvcGVydGllcyBtYXRjaCB0aGUgdGVzdGVkIHR5cGUgYW5kIHNpemVcbitcdCAqL1xuK1x0a2FzYW5fcmVwb3J0X3N0YXJ0ID0gc3Ryc3RyKGJ1ZiwgYWNjZXNzX2xvZyk7XG4rXG4rXHRpZiAoIWthc2FuX3JlcG9ydF9zdGFydClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRuc2l6ZSA9IHNucHJpbnRmKGFjY2Vzc19sb2csIFJFQURfQ0hVTktfU0laRSwgS0FTQU5fUEFUVEVSTl9SRVBPUlQsXG4rXHRcdFx0IGlzX3dyaXRlID8gXCJXcml0ZVwiIDogXCJSZWFkXCIsIHNpemUpO1xuK1xuK1x0aWYgKCFzdHJzdHIoa2FzYW5fcmVwb3J0X3N0YXJ0LCBhY2Nlc3NfbG9nKSlcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgZXhlY19zdWJ0ZXN0KHN0cnVjdCB0ZXN0X2N0eCAqY3R4LCBzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LFxuK1x0XHRcdCBpbnQgYWNjZXNzX3NpemUsIGJvb2wgb25fc3RhY2spXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcbitcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm87XG4rXHR1aW50OF90IGJ1ZltFVEhfSExFTl0gPSB7MH07XG4rXHRpbnQgcmV0LCBwcm9nX2ZkO1xuK1x0X191MzIgaW5mb19sZW47XG4rXG4rXHRjdHgtXHUwMDNlcHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGN0eC1cdTAwM2VvYmosXG4rXHRcdFx0XHRcdFx0ICAgICBjdHgtXHUwMDNlcHJvZ19uYW1lKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihjdHgtXHUwMDNlcHJvZywgXCJmaW5kIHRlc3QgcHJvZ1wiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4rXHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgaW5mb19sZW4pO1xuK1x0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChjdHgtXHUwMDNlcHJvZyk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChwcm9nX2ZkLCBcImdldCBwcm9nIGZkXCIpKVxuK1x0XHRyZXR1cm47XG4rXHRyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nX2ZkLCBcdTAwMjZpbmZvLCBcdTAwMjZpbmZvX2xlbik7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwiZmV0Y2ggbG9hZGVkIHByb2dyYW0gaW5mb1wiKSlcbitcdFx0cmV0dXJuO1xuK1x0bWVtY3B5KGN0eC1cdTAwM2Vwcm9nX3RhZywgaW5mby50YWcsIEJQRl9UQUdfU0laRSk7XG4rXG4rXHRza2lwX2tlcm5lbF9sb2dzKGN0eC1cdTAwM2VrbG9nX2ZkKTtcbitcbitcdHRvcHRzLnN6ID0gc2l6ZW9mKHN0cnVjdCBicGZfdGVzdF9ydW5fb3B0cyk7XG4rXHR0b3B0cy5kYXRhX3NpemVfaW4gPSBFVEhfSExFTjtcbitcdHRvcHRzLmRhdGFfaW4gPSBidWY7XG4rXHRpZiAoY3R4LVx1MDAzZWFjY2Vzc19zaXplKVxuK1x0XHQqY3R4LVx1MDAzZWFjY2Vzc19zaXplID0gYWNjZXNzX3NpemU7XG4rXHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChjdHgtXHUwMDNlcHJvZyksXG4rXHRcdFx0XHQgICAgIFx1MDAyNnRvcHRzKTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJydW4gcHJvZ1wiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmV0ID0gcmVhZF9rZXJuZWxfbG9ncyhjdHgtXHUwMDNla2xvZ19mZCwga2xvZ19idWZmZXIsIE1BWF9MT0dfU0laRSk7XG4rXHRpZiAoIUFTU0VSVF9HRShyZXQsIDAsIFwicmVhZCBrZXJuZWwgbG9nc1wiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmV0ID0gY2hlY2tfa2FzYW5fcmVwb3J0X2luX2tlcm5lbF9sb2dzKGtsb2dfYnVmZmVyLCBjdHgsXG4rXHRcdFx0XHRcdFx0dGVzdC1cdTAwM2Vpc193cml0ZSwgYWNjZXNzX3NpemUpO1xuK1x0aWYgKG9uX3N0YWNrIHx8IHRlc3QtXHUwMDNlZXhwZWN0X25vX3JlcG9ydClcbitcdFx0QVNTRVJUX05FUShyZXQsIDAsIFwibm8gcmVwb3J0IHNob3VsZCBiZSBnZW5lcmF0ZWRcIik7XG4rXHRlbHNlXG4rXHRcdEFTU0VSVF9PSyhyZXQsIFwicmVwb3J0IHNob3VsZCBiZSBnZW5lcmF0ZWRcIik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZV9hbmRfbG9jYXRpb24oc3RydWN0IHRlc3RfY3R4ICpjdHgsXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LFxuK1x0XHRcdFx0XHQgICAgICAgaW50IGFjY2Vzc19zaXplLFxuK1x0XHRcdFx0XHQgICAgICAgYm9vbCBvbl9zdGFjaylcbit7XG4rXHRjaGFyIHN1YnRlc3RfbmFtZVtTVUJURVNUX05BTUVfTUFYX0xFTl07XG4rXG4rXHRpZiAodGVzdC1cdTAwM2Vza2lwX211bHRpX3NpemVfdGVzdGluZykge1xuK1x0XHRzbnByaW50ZihzdWJ0ZXN0X25hbWUsIFNVQlRFU1RfTkFNRV9NQVhfTEVOLCBcIiVzXCIsXG4rXHRcdFx0IHRlc3QtXHUwMDNlcHJvZ190eXBlKTtcbitcdFx0c3RybmNweShjdHgtXHUwMDNlcHJvZ19uYW1lLCB0ZXN0LVx1MDAzZXByb2dfdHlwZSwgUFJPR19OQU1FX01BWF9MRU4pO1xuK1x0fSBlbHNlIHtcbitcdFx0c25wcmludGYoc3VidGVzdF9uYW1lLCBTVUJURVNUX05BTUVfTUFYX0xFTiwgXCIlc18lZF8lc1wiLFxuK1x0XHRcdCB0ZXN0LVx1MDAzZXByb2dfdHlwZSwgYWNjZXNzX3NpemUsXG4rXHRcdFx0IG9uX3N0YWNrID8gXCJvbl9zdGFja1wiIDogXCJub3Rfb25fc3RhY2tcIik7XG4rXHRcdHNucHJpbnRmKGN0eC1cdTAwM2Vwcm9nX25hbWUsIFBST0dfTkFNRV9NQVhfTEVOLCBcIiVzXyVzXCIsXG4rXHRcdFx0IHRlc3QtXHUwMDNlcHJvZ190eXBlLFxuK1x0XHRcdCBvbl9zdGFjayA/IFwib25fc3RhY2tcIiA6IFwibm90X29uX3N0YWNrXCIpO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X19zdGFydF9zdWJ0ZXN0KHN1YnRlc3RfbmFtZSkpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICh0ZXN0LVx1MDAzZW5lZWRzX2xvYWRfYWNxX3N0b3JlX3JlbCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZXNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0ZXhlY19zdWJ0ZXN0KGN0eCwgdGVzdCwgYWNjZXNzX3NpemUsIG9uX3N0YWNrKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnVuX3N1YnRlc3Rfd2l0aF9zaXplKHN0cnVjdCB0ZXN0X2N0eCAqY3R4LCBzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LFxuK1x0XHRcdFx0ICBpbnQgc2l6ZSlcbit7XG4rXHRydW5fc3VidGVzdF93aXRoX3NpemVfYW5kX2xvY2F0aW9uKGN0eCwgdGVzdCwgc2l6ZSwgZmFsc2UpO1xuK1x0aWYgKCF0ZXN0LVx1MDAzZXNraXBfb25fc3RhY2tfdGVzdGluZylcbitcdFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplX2FuZF9sb2NhdGlvbihjdHgsIHRlc3QsIHNpemUsIHRydWUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydW5fc3VidGVzdChzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbit7XG4rXHRpZiAodGVzdC1cdTAwM2Vza2lwX211bHRpX3NpemVfdGVzdGluZykge1xuK1x0XHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCB0ZXN0LVx1MDAzZXJ1bl9zaXplKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0LVx1MDAzZW9ubHlfMzJfb3JfNjQpIHtcbitcdFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgMSk7XG4rXHRcdHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShjdHgsIHRlc3QsIDIpO1xuK1x0fVxuK1x0cnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgNCk7XG4rXHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCA4KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnVuX2JsaW5kaW5nX3N1YnRlc3Qodm9pZClcbit7XG4rXHRzdHJ1Y3QgdGVzdF9zcGVjIGJsaW5kaW5nX3NwZWMgPSB7XG4rXHRcdC5wcm9nX3R5cGUgPSBcInN0X2JsaW5kZWRcIixcbitcdFx0LmlzX3dyaXRlID0gdHJ1ZSxcbitcdH07XG4rXHRjaGFyIGJwZl9qaXRfaGFyZGVuID0gJzInO1xuK1x0c3RydWN0IGthc2FuX2hhcmRlbiAqc2tlbDtcbitcdHN0cnVjdCB0ZXN0X2N0eCAqY3R4O1xuK1xuK1x0aWYgKCF0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic3RfYmxpbmRlZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y3R4ID0gY2FsbG9jKDEsIHNpemVvZigqY3R4KSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoY3R4LCBcImFsbG9jIGJsaW5kaW5nIGN0eFwiKSlcbitcdFx0cmV0dXJuO1xuK1x0Y3R4LVx1MDAzZWtsb2dfZmQgPSAtMTtcbitcbitcdGlmIChzZXRfYnBmX2ppdF9oYXJkZW4oXHUwMDI2YnBmX2ppdF9oYXJkZW4pKVxuK1x0XHRnb3RvIGZyZWVfY3R4O1xuK1xuK1x0c2tlbCA9IGthc2FuX2hhcmRlbl9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwib3BlbiBhbmQgbG9hZCBibGluZGVkIHByb2dcIikpXG4rXHRcdGdvdG8gcmVzdG9yZTtcbitcbitcdGN0eC1cdTAwM2VrbG9nX2ZkID0gb3Blbl9rZXJuZWxfbG9ncygpO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoY3R4LVx1MDAzZWtsb2dfZmQsIFwib3BlbiBrZXJuZWwgbG9nc1wiKSlcbitcdFx0Z290byBkZXN0cm95O1xuK1xuK1x0Y3R4LVx1MDAzZW9iaiA9IHNrZWwtXHUwMDNlb2JqO1xuK1x0c3RybmNweShjdHgtXHUwMDNlcHJvZ19uYW1lLCBcInN0X2JsaW5kZWRcIiwgUFJPR19OQU1FX01BWF9MRU4pO1xuK1xuK1x0ZXhlY19zdWJ0ZXN0KGN0eCwgXHUwMDI2YmxpbmRpbmdfc3BlYywgMSwgZmFsc2UpO1xuK1xuK2Rlc3Ryb3k6XG4rXHRjbG9zZShjdHgtXHUwMDNla2xvZ19mZCk7XG4rXHRrYXNhbl9oYXJkZW5fX2Rlc3Ryb3koc2tlbCk7XG4rcmVzdG9yZTpcbitcdHNldF9icGZfaml0X2hhcmRlbihcdTAwMjZicGZfaml0X2hhcmRlbik7XG4rZnJlZV9jdHg6XG4rXHRmcmVlKGN0eCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XG4rXHR7XG4rXHRcdC5wcm9nX3R5cGUgPSBcInN0XCIsXG4rXHRcdC5pc193cml0ZSA9IHRydWVcbitcdH0sXG4rXHR7XG4rXHRcdC5wcm9nX3R5cGUgPSBcInN0eFwiLFxuK1x0XHQuaXNfd3JpdGUgPSB0cnVlXG4rXHR9LFxuK1x0e1xuK1x0XHQucHJvZ190eXBlID0gXCJsZHhcIixcbitcdFx0LmlzX3dyaXRlID0gZmFsc2VcbitcdH0sXG4rXHR7XG4rXHRcdC5wcm9nX3R5cGUgPSBcInNpbXBsZV9hdG9taWNcIixcbitcdFx0LmlzX3dyaXRlID0gZmFsc2UsXG4rXHRcdC5vbmx5XzMyX29yXzY0ID0gdHJ1ZVxuK1x0fSxcbitcdHtcbitcdFx0LnByb2dfdHlwZSA9IFwibG9hZF9hY3F1aXJlXCIsXG4rXHRcdC5pc193cml0ZSA9IGZhbHNlLFxuK1x0XHQubmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsID0gdHJ1ZVxuK1x0fSxcbitcdHtcbitcdFx0LnByb2dfdHlwZSA9IFwic3RvcmVfcmVsZWFzZVwiLFxuK1x0XHQuaXNfd3JpdGUgPSB0cnVlLFxuK1x0XHQubmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsID0gdHJ1ZVxuK1x0fSxcbitcdHtcbitcdFx0LnByb2dfdHlwZSA9IFwibGR4X3BhdGNoZWRcIixcbitcdFx0LmlzX3dyaXRlID0gZmFsc2UsXG4rXHRcdC5za2lwX211bHRpX3NpemVfdGVzdGluZyA9IHRydWUsXG4rXHRcdC5za2lwX29uX3N0YWNrX3Rlc3RpbmcgPSB0cnVlLFxuK1x0XHQucnVuX3NpemUgPSA0LFxuK1x0XHQucm5kX2hpMzIgPSB0cnVlXG4rXHR9LFxuK1x0e1xuK1x0XHQucHJvZ190eXBlID0gXCJsZHhfcGF0Y2hlZF9vbl9zdGFja1wiLFxuK1x0XHQuaXNfd3JpdGUgPSBmYWxzZSxcbitcdFx0LnNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nID0gdHJ1ZSxcbitcdFx0LnNraXBfb25fc3RhY2tfdGVzdGluZyA9IHRydWUsXG4rXHRcdC5ydW5fc2l6ZSA9IDQsXG4rXHRcdC5leHBlY3Rfbm9fcmVwb3J0ID0gdHJ1ZSxcbitcdFx0LnJuZF9oaTMyID0gdHJ1ZVxuK1x0fSxcbitcdHtcbitcdFx0LnByb2dfdHlwZSA9IFwidmVyaWZpZXJfcGF0aHNfc3RhY2tfYW5kX25vbl9zdGFja1wiLFxuK1x0XHQuaXNfd3JpdGUgPSB0cnVlLFxuK1x0XHQuc2tpcF9tdWx0aV9zaXplX3Rlc3RpbmcgPSB0cnVlLFxuK1x0XHQuc2tpcF9vbl9zdGFja190ZXN0aW5nID0gdHJ1ZSxcbitcdFx0LnJ1bl9zaXplID0gMVxuK1x0fVxuK307XG4rXG4rdm9pZCB0ZXN0X2thc2FuKHZvaWQpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4rXHRzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0O1xuK1x0c3RydWN0IHRlc3RfY3R4ICpjdHg7XG4rXHRzdHJ1Y3Qga2FzYW4gKnNrZWw7XG4rXHRfX3UzMiBrZXkgPSAwO1xuK1x0aW50IGksIHJldDtcbitcbitcdGN0eCA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHRlc3RfY3R4KSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoY3R4LCBcImFsbG9jIHRlc3QgY3R4XCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIWlzX2ppdF9lbmFibGVkKCkgfHwgIWdldF9rYXNhbl9qaXRfZW5hYmxlZCgpKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBlbmQ7XG4rXHR9XG4rXG4rXHRza2VsID0ga2FzYW5fX29wZW4oKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcIm9wZW4gcHJvZ1wiKSlcbitcdFx0Z290byBlbmQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RzKTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbitcbitcdFx0aWYgKCF0ZXN0c1tpXS5ybmRfaGkzMilcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKHNrZWwtXHUwMDNlb2JqLFxuK1x0XHRcdFx0XHRcdFx0dGVzdHNbaV0ucHJvZ190eXBlKTtcbitcdFx0aWYgKCFBU1NFUlRfT0tfUFRSKHByb2csIFwiZmluZCBybmRfaGkzMiBwcm9nXCIpKVxuK1x0XHRcdGdvdG8gZGVzdHJveTtcbitcdFx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBCUEZfRl9URVNUX1JORF9ISTMyKTtcbitcdH1cbitcbitcdGlmICghQVNTRVJUX09LKGthc2FuX19sb2FkKHNrZWwpLCBcImxvYWQgcHJvZ1wiKSlcbitcdFx0Z290byBkZXN0cm95O1xuK1xuK1x0Y3R4LVx1MDAzZW9iaiA9IHNrZWwtXHUwMDNlb2JqO1xuK1x0Y3R4LVx1MDAzZWFjY2Vzc19zaXplID0gXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlYWNjZXNzX3NpemU7XG4rXHRjdHgtXHUwMDNlc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWwgPSBza2VsLVx1MDAzZWRhdGEtXHUwMDNlc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWxfdGVzdHM7XG4rXG4rXHRjdHgtXHUwMDNla2xvZ19mZCA9IG9wZW5fa2VybmVsX2xvZ3MoKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKGN0eC1cdTAwM2VrbG9nX2ZkLCBcIm9wZW4ga2VybmVsIGxvZ3NcIikpXG4rXHRcdGdvdG8gZGVzdHJveTtcbitcbitcdC8qIEZpbGwgbWFwIHdpdGggcmVjb2duaXphYmxlIHZhbHVlcyAqL1xuK1x0cmV0ID0gYnBmX21hcF9fbG9va3VwX2VsZW0oc2tlbC1cdTAwM2VtYXBzLnRlc3RfbWFwLCBcdTAwMjZrZXksIHNpemVvZihrZXkpLFxuK1x0XHRcdFx0ICAgXHUwMDI2dmFsLCBzaXplb2YodmFsKSwgMCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwiZ2V0IG1hcFwiKSlcbitcdFx0Z290byBjbG9zZTtcbitcdHZhbC5kYXRhXzEgPSAweEFBO1xuK1x0dmFsLmRhdGFfMiA9IDB4QkJCQjtcbitcdHZhbC5kYXRhXzQgPSAweENDQ0NDQ0NDO1xuK1x0dmFsLmRhdGFfOCA9IDB4RERERERERERERERERERERDtcbitcdHJldCA9IGJwZl9tYXBfX3VwZGF0ZV9lbGVtKHNrZWwtXHUwMDNlbWFwcy50ZXN0X21hcCwgXHUwMDI2a2V5LCBzaXplb2Yoa2V5KSxcbitcdFx0XHRcdCAgIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCksIDApO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcInNldCBtYXBcIikpXG4rXHRcdGdvdG8gY2xvc2U7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RzKTsgaSsrKSB7XG4rXHRcdHRlc3QgPSBcdTAwMjZ0ZXN0c1tpXTtcbitcdFx0cnVuX3N1YnRlc3QoY3R4LCB0ZXN0KTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBCbGluZGluZyBzdWJ0ZXN0IGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgYXMgaXQgbmVlZHMgdGhlXG4rXHQgKiBjb3JyZXNwb25kaW5nIHByb2dyYW0gdG8gYmUgbG9hZGVkIHdpdGggYnBmX2ppdF9oYXJkZW4gcmFpc2VkXG4rXHQgKi9cbitcdHJ1bl9ibGluZGluZ19zdWJ0ZXN0KCk7XG4rXG4rY2xvc2U6XG4rXHRjbG9zZShjdHgtXHUwMDNla2xvZ19mZCk7XG4rZGVzdHJveTpcbitcdGthc2FuX19kZXN0cm95KHNrZWwpO1xuK2VuZDpcbitcdGZyZWUoY3R4KTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW4uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MmRkY2UzMDU5YWVlMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuLmNcbkBAIC0wLDAgKzEsMzk0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbisjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbitcbitleHRlcm4gdm9pZCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZvaWQgKm1lbSwgX191MzIgbWVtX19zeikgX19rc3ltO1xuK2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTtcbitcbitpbnQgYWNjZXNzX3NpemU7XG4rXG4rc3RydWN0IGthc2FuX3dyaXRlX3ZhbCB7XG4rXHRfX3U4IGRhdGFfMTtcbitcdF9fdTE2IGRhdGFfMjtcbitcdF9fdTMyIGRhdGFfNDtcbitcdF9fdTY0IGRhdGFfODtcbit9O1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4rXHRfX3R5cGUoa2V5LCBfX3UzMik7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrYXNhbl93cml0ZV92YWwpO1xuK30gdGVzdF9tYXAgU0VDKFwiLm1hcHNcIik7XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgc3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4rXHRjYXNlIDE6XG4rXHRcdHZhbC5kYXRhXzEgPSAweEFBO1xuK1x0XHRicmVhaztcbitcdGNhc2UgMjpcbitcdFx0dmFsLmRhdGFfMiA9IDB4QUE7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA0OlxuK1x0XHR2YWwuZGF0YV80ID0gMHhBQTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDg6XG4rXHRcdHZhbC5kYXRhXzggPSAweEFBO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgc3Rfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4rXHRfX3UzMiBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuK1x0Y2FzZSAxOlxuK1x0XHR2YWwtXHUwMDNlZGF0YV8xID0gMHhBQTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDI6XG4rXHRcdHZhbC1cdTAwM2VkYXRhXzIgPSAweEFBO1xuK1x0XHRicmVhaztcbitcdGNhc2UgNDpcbitcdFx0dmFsLVx1MDAzZWRhdGFfNCA9IDB4QUE7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA4OlxuK1x0XHR2YWwtXHUwMDNlZGF0YV84ID0gMHhBQTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IHN0eF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbitcdGNhc2UgMTpcbitcdFx0dmFsLmRhdGFfMSA9IGFjY2Vzc19zaXplO1xuK1x0XHRicmVhaztcbitcdGNhc2UgMjpcbitcdFx0dmFsLmRhdGFfMiA9IGFjY2Vzc19zaXplO1xuK1x0XHRicmVhaztcbitcdGNhc2UgNDpcbitcdFx0dmFsLmRhdGFfNCA9IGFjY2Vzc19zaXplO1xuK1x0XHRicmVhaztcbitcdGNhc2UgODpcbitcdFx0dmFsLmRhdGFfOCA9IGFjY2Vzc19zaXplO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgc3R4X25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuK1x0X191MzIga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbitcdGNhc2UgMTpcbitcdFx0dmFsLVx1MDAzZWRhdGFfMSA9IGFjY2Vzc19zaXplO1xuK1x0XHRicmVhaztcbitcdGNhc2UgMjpcbitcdFx0dmFsLVx1MDAzZWRhdGFfMiA9IGFjY2Vzc19zaXplO1xuK1x0XHRicmVhaztcbitcdGNhc2UgNDpcbitcdFx0dmFsLVx1MDAzZWRhdGFfNCA9IGFjY2Vzc19zaXplO1xuK1x0XHRicmVhaztcbitcdGNhc2UgODpcbitcdFx0dmFsLVx1MDAzZWRhdGFfOCA9IGFjY2Vzc19zaXplO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgbGR4X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcbitcbitcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuK1x0Y2FzZSAxOlxuK1x0XHRfX3NpbmsodmFsLmRhdGFfMSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAyOlxuK1x0XHRfX3NpbmsodmFsLmRhdGFfMik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA0OlxuK1x0XHRfX3NpbmsodmFsLmRhdGFfNCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA4OlxuK1x0XHRfX3NpbmsodmFsLmRhdGFfOCk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJ0Y3gvaW5ncmVzc1wiKVxuK2ludCBsZHhfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4rXHRfX3UzMiBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuK1x0Y2FzZSAxOlxuK1x0XHRfX3NpbmsodmFsLVx1MDAzZWRhdGFfMSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAyOlxuK1x0XHRfX3NpbmsodmFsLVx1MDAzZWRhdGFfMik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA0OlxuK1x0XHRfX3NpbmsodmFsLVx1MDAzZWRhdGFfNCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA4OlxuK1x0XHRfX3NpbmsodmFsLVx1MDAzZWRhdGFfOCk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJ0Y3gvaW5ncmVzc1wiKVxuK2ludCBsZHhfcGF0Y2hlZChzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuK1x0X191MzIga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdF9fc2luayh2YWwtXHUwMDNlZGF0YV80KTtcbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgbGR4X3BhdGNoZWRfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRfX3NpbmsodmFsLmRhdGFfNCk7XG4rXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IHNpbXBsZV9hdG9taWNfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4rXHRjYXNlIDQ6XG4rXHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnZhbC5kYXRhXzQsIDQpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgODpcbitcdFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2dmFsLmRhdGFfOCwgOCk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJ0Y3gvaW5ncmVzc1wiKVxuK2ludCBzaW1wbGVfYXRvbWljX25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuK1x0X191MzIga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbitcdGNhc2UgNDpcbitcdFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2dmFsLVx1MDAzZWRhdGFfNCwgNCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA4OlxuK1x0XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZ2YWwtXHUwMDNlZGF0YV84LCA4KTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNpZmRlZiBfX0JQRl9GRUFUVVJFX0xPQURfQUNRX1NUT1JFX1JFTFxuK2Jvb2wgc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWxfdGVzdHMgU0VDKFwiLmRhdGFcIikgPSAwO1xuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IGxvYWRfYWNxdWlyZV9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbitcdGNhc2UgMTpcbitcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC5kYXRhXzEsIF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgMjpcbitcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC5kYXRhXzIsIF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgNDpcbitcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC5kYXRhXzQsIF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgODpcbitcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC5kYXRhXzgsIF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgbG9hZF9hY3F1aXJlX25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuK1x0X191MzIga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbitcdGNhc2UgMTpcbitcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzEsIF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgMjpcbitcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzIsIF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgNDpcbitcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzQsIF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgODpcbitcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzgsIF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgc3RvcmVfcmVsZWFzZV9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbitcdGNhc2UgMTpcbitcdFx0X19hdG9taWNfc3RvcmVfbihcdTAwMjZ2YWwuZGF0YV8xLCAweEFBLCBfX0FUT01JQ19SRUxFQVNFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDI6XG4rXHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLmRhdGFfMiwgMHhCQkJCLCBfX0FUT01JQ19SRUxFQVNFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDQ6XG4rXHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLmRhdGFfNCwgMHhDQ0NDQ0NDQywgX19BVE9NSUNfUkVMRUFTRSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA4OlxuK1x0XHRfX2F0b21pY19zdG9yZV9uKFx1MDAyNnZhbC5kYXRhXzgsIDB4RERERERERERERERERERERCxcbitcdFx0XHRcdCBfX0FUT01JQ19SRUxFQVNFKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IHN0b3JlX3JlbGVhc2Vfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4rXHRfX3UzMiBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuK1x0Y2FzZSAxOlxuK1x0XHRfX2F0b21pY19zdG9yZV9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzEsIDB4QUEsIF9fQVRPTUlDX1JFTEVBU0UpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgMjpcbitcdFx0X19hdG9taWNfc3RvcmVfbihcdTAwMjZ2YWwtXHUwMDNlZGF0YV8yLCAweEJCQkIsIF9fQVRPTUlDX1JFTEVBU0UpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgNDpcbitcdFx0X19hdG9taWNfc3RvcmVfbihcdTAwMjZ2YWwtXHUwMDNlZGF0YV80LCAweENDQ0NDQ0NDLCBfX0FUT01JQ19SRUxFQVNFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDg6XG4rXHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLVx1MDAzZWRhdGFfOCwgMHhERERERERERERERERERERELFxuK1x0XHRcdFx0IF9fQVRPTUlDX1JFTEVBU0UpO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rI2Vsc2Vcbitib29sIHNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsX3Rlc3RzIFNFQyhcIi5kYXRhXCIpID0gMTtcbisjZW5kaWZcbitcbitTRUMoXCJ0Y3gvaW5ncmVzc1wiKVxuK2ludCB2ZXJpZmllcl9wYXRoc19zdGFja19hbmRfbm9uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHN0YWNrX3ZhbCA9IHt9O1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuK1x0dm9pZCAqcHRyO1xuK1x0X191MzIga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoYWNjZXNzX3NpemUpXG4rXHRcdHB0ciA9IHZhbDtcbitcdGVsc2VcbitcdFx0cHRyID0gXHUwMDI2c3RhY2tfdmFsO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZigqdmFsKSk7XG4rXHQqKF9fdTggKilwdHIgPSAweEFBO1xuK1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKCp2YWwpKTtcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIExJQ0VOU0VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODA4ZDdkYTY0NDIxNjJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rYXNhbl9oYXJkZW4uY1xuQEAgLTAsMCArMSw0MSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuK1xuK2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07XG4rZXh0ZXJuIHZvaWQgYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZvaWQgKm1lbSwgX191MzIgbWVtX19zeikgX19rc3ltO1xuK1xuK3N0cnVjdCBrYXNhbl93cml0ZV92YWwge1xuK1x0X191OCBkYXRhXzE7XG4rXHRfX3UxNiBkYXRhXzI7XG4rXHRfX3UzMiBkYXRhXzQ7XG4rXHRfX3U2NCBkYXRhXzg7XG4rfTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgX191MzIpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKTtcbit9IHRlc3RfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IHN0X2JsaW5kZWQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcbitcdF9fdTMyIGtleSA9IDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRlc3RfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHR2YWwtXHUwMDNlZGF0YV8xID0gMHhBQTtcbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBMSUNFTlNFW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbmluZGV4IDMwZjFjZDIzMDkzY2JlLi41ZDZhODM0ZjdkNzU3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC0yNzEsNiArMjcxLDI2IEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3Qoc3RydWN0IHByb2dfdGVzdF9tZW1iZXJcbiBcdCAqL1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0JQRl9KSVRfS0FTQU5cbitcbitleHRlcm4gdm9pZCBrYXNhbl9wb2lzb24oY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIHU4IHZhbHVlLCBib29sIGluaXQpO1xuK1xuKyNkZWZpbmUgS0FTQU5fU0xBQl9GUkVFIDB4RkJcbitcbitfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCB1MzIgbWVtX19zeilcbit7XG4rXHRrYXNhbl9wb2lzb24obWVtLCBtZW1fX3N6LCBLQVNBTl9TTEFCX0ZSRUUsIGZhbHNlKTtcbit9XG4rXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odm9pZCAqbWVtLCB1MzIgbWVtX19zeilcbit7XG4rXHRrYXNhbl9wb2lzb24obWVtLCBtZW1fX3N6LCAweDAwLCBmYWxzZSk7XG4rfVxuKyNlbHNlXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opIHsgfVxuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opIHsgfVxuKyNlbmRpZlxuK1xuIF9fYnBmX2tmdW5jIHN0cnVjdCBicGZfdGVzdG1vZF9jdHggKlxuIGJwZl90ZXN0bW9kX2N0eF9jcmVhdGUoaW50ICplcnIpXG4ge1xuQEAgLTc0MCw2ICs3NjAsOCBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19rYXNhbl9wb2lzb24pXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbilcbiBCVEZfS0ZVTkNTX0VORChicGZfdGVzdG1vZF9jb21tb25fa2Z1bmNfaWRzKVxuIFxuIEJURl9JRF9MSVNUKGJwZl90ZXN0bW9kX2R0b3JfaWRzKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xuaW5kZXggYzk3MGU3NzkzZGZjYmMuLjczN2Y2NjhiMzVlMjNiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcbkBAIC01MTksNiArNTE5LDM4IEBAIGJvb2wgaXNfaml0X2VuYWJsZWQodm9pZClcbiBcdHJldHVybiBlbmFibGVkO1xuIH1cbiBcbitpbnQgc2V0X2JwZl9qaXRfaGFyZGVuKGNoYXIgKmxldmVsKVxuK3tcbitcdGNoYXIgb2xkX2xldmVsO1xuK1x0aW50IGVyciA9IC0xO1xuK1x0aW50IGZkID0gLTE7XG4rXG4rXHRmZCA9IG9wZW4oXCIvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW5cIiwgT19SRFdSIHwgT19OT05CTE9DSyk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGVyciA9IHJlYWQoZmQsIFx1MDAyNm9sZF9sZXZlbCwgMSk7XG4rXHRpZiAoZXJyICE9IDEpIHtcbitcdFx0ZXJyID0gLTE7XG4rXHRcdGdvdG8gZW5kO1xuK1x0fVxuK1xuK1x0bHNlZWsoZmQsIDAsIFNFRUtfU0VUKTtcbitcbitcdGVyciA9IHdyaXRlKGZkLCBsZXZlbCwgMSk7XG4rXHRpZiAoZXJyICE9IDEpIHtcbitcdFx0ZXJyID0gLTE7XG4rXHRcdGdvdG8gZW5kO1xuK1x0fVxuK1xuK1x0ZXJyID0gMDtcbitcdCpsZXZlbCA9IG9sZF9sZXZlbDtcbitlbmQ6XG4rXHRpZiAoZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShmZCk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZClcbiB7XG4gXHR2b2lkICpidWY7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oXG5pbmRleCAyZWRjNmZiN2ZjNTIxMi4uZTAwNjQyYWZlODZmNDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaFxuQEAgLTU5LDYgKzU5LDcgQEAgc3RydWN0IGJwZl9pbnNuO1xuIGludCBnZXRfeGxhdGVkX3Byb2dyYW0oaW50IGZkX3Byb2csIHN0cnVjdCBicGZfaW5zbiAqKmJ1ZiwgX191MzIgKmNudCk7XG4gaW50IHRlc3RpbmdfcHJvZ19mbGFncyh2b2lkKTtcbiBib29sIGlzX2ppdF9lbmFibGVkKHZvaWQpO1xuK2ludCBzZXRfYnBmX2ppdF9oYXJkZW4oY2hhciAqbGV2ZWwpO1xuIGludCBzdGFja19tcHJvdGVjdCh2b2lkKTtcbiBcbiAjZW5kaWYgLyogX19URVNUSU5HX0hFTFBFUlNfSCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmNcbmluZGV4IGY5OTdkN2VjOGZkMDg2Li4xMTIwMWI2NWEzZDRiNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuY1xuQEAgLTE0MiwzICsxNDIsOCBAQCBib29sIGdldF91bnByaXZfZGlzYWJsZWQodm9pZClcbiBcdH1cbiBcdHJldHVybiBtaXRpZ2F0aW9uc19vZmY7XG4gfVxuK1xuK2Jvb2wgZ2V0X2thc2FuX2ppdF9lbmFibGVkKHZvaWQpXG4re1xuK1x0cmV0dXJuIGNvbmZpZ19jb250YWlucyhcIkNPTkZJR19CUEZfSklUX0tBU0FOPXlcIikgPT0gMTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuaFxuaW5kZXggMTUxZjY3MzI5NjY1MjIuLmJjNWY0Yzk1M2M5ZDZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oXG5AQCAtNSwzICs1LDQgQEBcbiAjZGVmaW5lIFVOUFJJVl9TWVNDVEwgXCJrZXJuZWwvdW5wcml2aWxlZ2VkX2JwZl9kaXNhYmxlZFwiXG4gXG4gYm9vbCBnZXRfdW5wcml2X2Rpc2FibGVkKHZvaWQpO1xuK2Jvb2wgZ2V0X2thc2FuX2ppdF9lbmFibGVkKHZvaWQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjA6MTQ6MTkuMDM3ODYwOTMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM0MDczODE5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLQVNBTiBTdXBwb3J0IGZvciBCUEYgSklUIENvbXBpbGVyKipcblxuT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2luZyBLQVNBTiBzdXBwb3J0IGZvciB0aGUgQlBGIEpJVCBjb21waWxlciBvbiB4ODZfNjQuIEl0IGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGEgbmV3IGBDT05GSUdfQlBGX0pJVF9LQVNBTmAgYW5kIGBDT05GSUdfSEFWRV9FQlBGX0pJVF9LQVNBTmAsIHNvbWUgbW9kaWZpY2F0aW9ucyB0byBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCBmb3IgZW1pdHRpbmcgS0FTQU4gY2hlY2tzIGR1cmluZyBKSVQgY29tcGlsYXRpb24sIGFuZCBzb21lIGFkanVzdG1lbnRzIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gdHJhY2sgbWVtb3J5IGFjY2Vzc2VzLiBXZSBhbHNvIGhhdmUgbmV3IHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rYXNhbi5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rYXNhbi5jYCwgd2hpY2ggaXMgZ29vZCB0byBzZWUuXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGEgY29yZSBwYXJ0IG9mIHRoZSBrZXJuZWwg4oCTIHRoZSBCUEYgSklUIGNvbXBpbGVyLiBJdCdzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUsIHdoaWNoIGlzIGEgc3Ryb25nIGluZGljYXRvci4gU28sIGJhc2VkIG9uIHRoYXQsIHRoZSBmaXJzdCB0aGluZyBpcyB0byBtYXJrIGBXb3J0aEZ1enppbmdgIGFzIGB0cnVlYC5cblxuTm93LCB3ZSBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gIFdlIGhhdmUgdGhlIG5ldyBgQlBGX0pJVF9LQVNBTmAsIGFuZCB0aGUgZXhpc3RpbmcgYEhBVkVfRUJQRl9KSVRfS0FTQU5gLCBidXQgd2UgY2FuJ3QgZm9yZ2V0IGBLQVNBTl9HRU5FUklDYCwgYEtBU0FOX1ZNQUxMT0NgLCBgQlBGX0pJVGAgYW5kIHRoZSBiYXNlIGBLQVNBTmAuXG5cbk5leHQsIHdlIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMuIEluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCB3ZSBoYXZlIGBlbWl0X2thc2FuX2NoZWNrYCwgYGVtaXRfc3RgLCBgZW1pdF9hdG9taWNfbGRfc3RgLCBhbmQgYGRvX2ppdGAuIEluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgd2Ugc2VlIGBhZGp1c3RfaW5zbl9hdXhfZGF0YWAsIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCwgYGJwZl9kb19taXNjX2ZpeHVwc2AsIGFuZCBgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzYC4gRmluYWxseSwgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2Agd2UgaGF2ZSBgbWFya19ub25fc3RhY2tfYWNjZXNzYCBhbmQgYGNoZWNrX21lbV9hY2Nlc3NgLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHdoaWNoIG9mIHRoZXNlIGNhbiBiZSBkaXJlY3RseSBsZXZlcmFnZWQuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYGVtaXRfa2FzYW5fY2hlY2tgLCBgZW1pdF9zdGAsIGBlbWl0X2F0b21pY19sZF9zdGAsIGFuZCBgZG9faml0YCBhcmUgc3RhdGljIHdpdGhpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gIFNvLCB0aG9zZSBhcmUgb3V0LlxuXG5CdXQgYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBgYnBmX2RvX21pc2NfZml4dXBzYCwgYGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3Nlc2AsIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AgaW4gYGtlcm5lbC9icGYvKmAgc2VlbSBwcm9taXNpbmcuIEFsc28sIHdlIGhhdmUgYGJwZl9pbnRfaml0X2NvbXBpbGVgLCB3aGljaCBjYWxscyBgZG9faml0YCB3aGljaCwgd2hpbGUgc3RhdGljLCBpcyBjb3JlIHRvIHRoZSBKSVQgY29tcGlsYXRpb24gcHJvY2Vzcy5cblxuV2FpdCwgaXMgYGJwZl9wYXRjaF9pbnNuX2RhdGFgIGV4cG9ydGVkPyAgTGV0IG1lIHF1aWNrbHkgY2hlY2suLi4geWVzLCBpdCBpcyEgIEV4Y2VsbGVudC5cblxuU28sIGxldCdzIHVzZSBgYnBmX3BhdGNoX2luc25fZGF0YWAsIGBicGZfZG9fbWlzY19maXh1cHNgLCBhbmQgYGJwZl9pbnRfaml0X2NvbXBpbGVgLlxuXG5BbHJpZ2h0LCBJIHNob3VsZCBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LiAgV2Ugd2lsbCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiAgT3VyIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYFtcImJwZl9wYXRjaF9pbnNuX2RhdGFcIiwgXCJicGZfZG9fbWlzY19maXh1cHNcIiwgXCJicGZfaW50X2ppdF9jb21waWxlXCJdYC4gT3VyIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGBbXCJCUEZfSklUX0tBU0FOXCIsIFwiS0FTQU5fR0VORVJJQ1wiLCBcIktBU0FOX1ZNQUxMT0NcIiwgXCJCUEZfSklUXCIsIFwiS0FTQU5cIl1gLiBGaW5hbGx5LCB0aGUgYFJlYXNvbmluZ2Agd2lsbCBiZTogXCJUaGUgcGF0Y2ggYWRkcyBLQVNBTiBzdXBwb3J0IHRvIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIHg4Nl82NCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYy5cIlxuXG5IbW0sIG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIGBLQVNBTl9HRU5FUklDYCBhbmQgYEtBU0FOX1ZNQUxMT0NgIGFyZSB1c3VhbGx5IGVuYWJsZWQgaW4gS0FTQU4gYnVpbGRzLiBMZXQgbWUgY2hlY2sgaWYgb25seSBgQlBGX0pJVF9LQVNBTmAgaXMgZW5vdWdoLiBZZXMsIGBCUEZfSklUX0tBU0FOYCBkZXBlbmRzIG9uIGBIQVZFX0VCUEZfSklUX0tBU0FOYCwgYEtBU0FOX0dFTkVSSUNgLCBgS0FTQU5fVk1BTExPQ2AsIGFuZCBgQlBGX0pJVGAuXG5cbk9rYXksIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgZXZlcnl0aGluZyBsb29rcyBjb3JyZWN0LiBZZXAsIGFsbCBnb29kXG5cbiIsIklucHV0VG9rZW5zIjoyODM3NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMDoxNDozMi40NDUyNTAwN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcyMjQ4Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz00MDAyPXN0cnVjdCB4NjRfaml0X2RhdGEge1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMTMtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMTQ6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAxNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIwOjE0OjM0LjMxNzUxMTU3OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Nzg0OTA3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipKSVQgQ29tcGlsYXRpb24gLSBFbnRyeSBQb2ludCBhbmQgUGF0Y2hpbmcqKlxuXG5BbHJpZ2h0LCBzbyBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgdGhlIEp1c3QtSW4tVGltZSBjb21waWxlciBvbiB4ODYsIGdvdCBpdC4gVGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBiZWdpbnMuIE5vdywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGhvdyB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBhY3R1YWxseSBoYW5kbGVkLiBMb29rcyBsaWtlIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBuZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgd2l0aGluIGluc3RydWN0aW9ucyBnZXRzIG1vZGlmaWVkIG9yIGFsdGVyZWQgZHVyaW5nIHRoZSBjb21waWxhdGlvbiBhbmQgcGF0Y2hpbmcgcHJvY2Vzcy4gS25vd2luZyBob3cgaXQncyBoYW5kbGVkIGlzIGVzc2VudGlhbCB0byBvcHRpbWl6aW5nIHRoZSBnZW5lcmF0ZWQgY29kZSwgcmlnaHQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjMwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjA6MTQ6MzcuMjk2MDA2NTI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDg4MDc5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcGF0Y2hfaW5zbl9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvZml4dXBzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9maXh1cHMuYz0yNjQ9c3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yNzctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyNzg6c3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yNzktXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuLFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz02MTQ9aW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03MDItYXBwbHlfcGF0Y2hfYnVmZmVyOlxcbmtlcm5lbC9icGYvZml4dXBzLmM6NzAzOlxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4sIDApO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtNzA0LVxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTcyMD1pbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0Ny1cXHRcXHRcXHRpbnNuX2J1ZltjbnQrK10gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaVswXTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc0ODpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LCAxKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0OS1cXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03NzAtXFx0XFx0fSBlbHNlIGlmIChjbnQpIHtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc3MTpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LFxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzcyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtODA0LVxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxua2VybmVsL2JwZi9maXh1cHMuYzo4MDU6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwNi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtODc4LVxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxua2VybmVsL2JwZi9maXh1cHMuYzo4Nzk6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTg4MC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAwKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTAxMy1wYXRjaF9pbnNuX2J1ZjpcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEwMTQ6XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250LFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTAxNS1cXHRcXHRcXHRcXHRcXHQgICAgICAgaW5zbl9vZmZfaW5fcGF0Y2gpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xNDkzPXN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE1MDUtXFx0ICogb25lcyBmb3IgdGhlIGhpZGRlbiBzdWJwcm9nLiBIZW5jZSBhbGwgb2YgdGhlIGFkanVzdG1lbnQgb3BlcmF0aW9uc1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTUwNjpcXHQgKiBpbiBicGZfcGF0Y2hfaW5zbl9kYXRhIGFyZSBuby1vcHMuXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA3LVxcdCAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTUwODpcXHRwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuIC0gMSwgcGF0Y2gsIGxlbiwgLTEpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwOS1cXHRpZiAoIXByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE1MjI9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNTkyLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTU5MzpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTU5NC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAwKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTY4OS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE2OTA6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE2OTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzIyLVxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzIzOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzI0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIGluc25fb2ZmX2luX3BhdGNoKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTc0My1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE3NDQ6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3OTctXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzk4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzk5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg0My1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE4NDQ6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMyk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NjUtXFxua2VybmVsL2JwZi9maXh1cHMuYzoxODY2OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0xODY3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIDIpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xODg3LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTg4ODpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg4OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTk3My1cXHRcXHRcXHRjbnQgPSAzO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTk3NDpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTk3NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjAwNy1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMDg6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMDktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgY250IC0gMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMjctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDI4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDI5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIGNudCAtIDEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDY4LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjA2OTpcXHRcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDcwLVxcdFxcdFxcdFxcdFxcdGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250LCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxNTEtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMTUyOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTUzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjE4MC0jZW5kaWZcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxODE6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxODItXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTk5LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjIwMDpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjIwMS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMzQtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMjM1OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjM2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI2Ny1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyNjg6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjk0LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjI5NTpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5Ni1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMTEtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMzEyOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzEzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICAxLCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzNjctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMzY4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzY5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjM4Ni1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzODc6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzODgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yNDU1LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjQ1NjpcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBzdWJwcm9nX3N0YXJ0LCBpbnNuX2J1ZiwgY250LCBjbnQgLSAxKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NTctXFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ2My1cXHRcXHQgKiB0byBpbnNuIGFmdGVyIEJQRl9TVCB0aGF0IGluaXRzIG1heV9nb3RvIGNvdW50Llxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjQ2NDpcXHRcXHQgKiBBZGp1c3RtZW50IHdpbGwgc3VjY2VlZCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBkaWRuJ3QgZmFpbC5cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NjUtXFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTI0OTM9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqaW5saW5lX2JwZl9sb29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1NTQtXFx0KnRvdGFsX2NudCA9IGNudDtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjI1NTU6XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgcG9zaXRpb24sIGluc25fYnVmLCBjbnQsIC0xKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1NTYtXFx0aWYgKCFuZXdfcHJvZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjA6MTQ6MzcuODIwOTAyNjEyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxNTY3ODc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBCUEYgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gYmVzdCBhcHByb2FjaCBmdXp6aW5nIHRoZSBCUEYgc3Vic3lzdGVtLiBJIHNlZSB0aGF0IGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBpcyBkZWZpbmVkIGFuZCBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAuIEkgd2FzIGNvbnNpZGVyaW5nIGZvY3VzaW5nIG9uIGl0LCBhbG9uZyB3aXRoIGBicGZfZG9fbWlzY19maXh1cHNgIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAuXG5cbkhhbmcgb24sIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBpc24ndCBhY3R1YWxseSBleHBvcnRlZCBhcyBhIG1vZHVsZSBzeW1ib2wsIGl0J3MganVzdCBhIGdsb2JhbCBmdW5jdGlvbi4gSXQgY291bGQgc3RpbGwgYmUgZnV6emVkIGlmIHN5emthbGxlciBjYW4gcmVhY2ggaXQgc29tZWhvdywgYnV0IGlkZWFsbHksIEkgd2FudCB0byB0YXJnZXQgdGhlIEJQRiB2ZXJpZmllciBvciB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MgZGlyZWN0bHkuXG5cblRoZXJlZm9yZSwgSSB0aGluayBhIG11Y2ggYmV0dGVyIHNldCBvZiBmb2N1cyBzeW1ib2xzIGFyZTpcbiogICBgYnBmX2ludF9qaXRfY29tcGlsZWAgKHRoZSBKSVQgZW50cnkgcG9pbnQpXG4qICAgYGJwZl9wYXRjaF9pbnNuX2RhdGFgXG4qICAgYGJwZl9kb19taXNjX2ZpeHVwc2AgKHRoZSBmaXh1cCBlbnRyeSBwb2ludClcbiogICBgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzYFxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCwgYW5kIHRoZW4gSSB3aWxsIGZvY3VzIG9uIGBicGZfaW50X2ppdF9jb21waWxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5ODYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjA6MTQ6NDMuMzM2NTg1OTc2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NzM1MzIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY29yZS5jPTI2MjA9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjYyNi1cXHRpZiAoIWJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpXFxua2VybmVsL2JwZi9jb3JlLmM6MjYyNzpcXHRcXHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xcbmtlcm5lbC9icGYvY29yZS5jLTI2MjgtXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQ4LVxcbmtlcm5lbC9icGYvY29yZS5jOjI2NDk6XFx0cHJvZyA9IGJwZl9pbnRfaml0X2NvbXBpbGUoZW52LCBwcm9nKTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjUwLVxcdGlmIChwcm9nLVxcdTAwM2VqaXRlZCkge1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjY2Nz1zdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI2ODYtXFx0ICogYmxpbmRpbmcgaXMgYWN0aXZlLiBIb3dldmVyLCBpbiBjYXNlIG9mIGVycm9yIGR1cmluZ1xcbmtlcm5lbC9icGYvY29yZS5jOjI2ODc6XFx0ICogYmxpbmRpbmcsIGJwZl9pbnRfaml0X2NvbXBpbGUoKSBtdXN0IGFsd2F5cyByZXR1cm4gYVxcbmtlcm5lbC9icGYvY29yZS5jLTI2ODgtXFx0ICogdmFsaWQgcHJvZ3JhbSwgd2hpY2ggaW4gdGhpcyBjYXNlIHdvdWxkIHNpbXBseSBub3RcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTMyMDk9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90YWlsX2NhbGxfcHJvdG8gPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjIxLS8qIFN0dWIgZm9yIEpJVHMgdGhhdCBvbmx5IHN1cHBvcnQgY0JQRi4gZUJQRiBwcm9ncmFtcyBhcmUgaW50ZXJwcmV0ZWQuXFxua2VybmVsL2JwZi9jb3JlLmM6MzIyMjogKiBJdCBpcyBlbmNvdXJhZ2VkIHRvIGltcGxlbWVudCBicGZfaW50X2ppdF9jb21waWxlKCkgaW5zdGVhZCwgc28gdGhhdFxcbmtlcm5lbC9icGYvY29yZS5jLTMyMjMtICogZUJQRiBhbmQgaW1wbGljaXRseSBhbHNvIGNCUEYgY2FuIGdldCBKSVRlZCFcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjI0LSAqL1xcbmtlcm5lbC9icGYvY29yZS5jOjMyMjU6c3RydWN0IGJwZl9wcm9nICogX193ZWFrIGJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbmtlcm5lbC9icGYvY29yZS5jLTMyMjYte1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzIzMC0vKiBTdHViIGZvciBKSVRzIHRoYXQgc3VwcG9ydCBlQlBGLiBBbGwgY0JQRiBjb2RlIGdldHMgdHJhbnNmb3JtZWQgaW50b1xcbmtlcm5lbC9icGYvY29yZS5jOjMyMzE6ICogZUJQRiBieSB0aGUga2VybmVsIGFuZCBpcyBsYXRlciBjb21waWxlZCBieSBicGZfaW50X2ppdF9jb21waWxlKCkuXFxua2VybmVsL2JwZi9jb3JlLmMtMzIzMi0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjA6MTQ6NDMuOTAzOTQ2OTU1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgzMzA4NDAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipGb2N1c2luZyBvbiBCUEYgSklUIENvbXBpbGF0aW9uKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0IGRyaWxsaW5nIGRvd24uIFRoYXQncyBhIHNvbGlkIHN5bWJvbCB0byBhbmNob3Igb24uIE5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiBgYnBmX2RvX21pc2NfZml4dXBzYC4gSSdsbCB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgY29tcGlsYXRpb24gcHJvY2Vzcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvbXBpbGVyIG1hbmFnZXMgdGhvc2UgXCJtaXNjZWxsYW5lb3VzXCIgYXNwZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyMTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMDoxNDo0Ni43MzcwMzQyN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4ODYyOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9kb19taXNjX2ZpeHVwc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2ZpeHVwcy5jPTE0OTM9c3RhdGljIGludCBhZGRfaGlkZGVuX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgaW50IGxlbilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUyMS0gKi9cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE1MjI6aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUyMy17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk3Mzk9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk5MzMtXFx0aWYgKHJldCA9PSAwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTkzNDpcXHRcXHRyZXQgPSBicGZfZG9fbWlzY19maXh1cHMoZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk5MzUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIwOjE0OjQ2Ljg1NTkwOTgwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE5NjA4NzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgQlBGIEluc3RydWN0aW9uIFBhdGNoaW5nKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgYnBmX2RvX21pc2NfZml4dXBzYCBpcyBhbm90aGVyIHBvdGVudGlhbCBrZXkgZm9jdXMgcG9pbnQgZm9yIHRoaXMuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBzZWUgaG93IGl0IGZpdHMgaW4gd2l0aCB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5Ob3csIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgYnBmX3BhdGNoX2luc25fZGF0YWAuIFVuZGVyc3RhbmRpbmcgaG93IHRoYXQgcm91dGluZSB3b3JrcyBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgcm9sZSBpbiB0aGUgcHJvY2VzcywgaXRzIGRlcGVuZGVuY2llcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQlBGIHN5c3RlbS4gRnJvbSB0aGVyZSBJJ2xsIGJlIGFibGUgdG8gdHJhY2UgaXQgYmFjayB1cCB0aGUgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NjUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjA6MTQ6NTAuMzc1NTIyNjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzU1MTYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcGF0Y2hfaW5zbl9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY29yZS5jPTE1NTQ9c3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNTY4LVxcbmtlcm5lbC9icGYvY29yZS5jOjE1Njk6XFx0LyogbWFrZSBzdXJlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBwYXRjaGVzIHRoZSBjb3JyZWN0IHByb2cgKi9cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNTcwLVxcdGlmIChlbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNjAwLVxcdFxcdGlmIChlbnYpXFxua2VybmVsL2JwZi9jb3JlLmM6MTYwMTpcXHRcXHRcXHR0bXAgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4sIHJld3JpdHRlbiAtIDEpO1xcbmtlcm5lbC9icGYvY29yZS5jLTE2MDItXFx0XFx0ZWxzZVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0yNjQ9c3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yNzctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyNzg6c3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yNzktXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuLFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz02MTQ9aW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03MDItYXBwbHlfcGF0Y2hfYnVmZmVyOlxcbmtlcm5lbC9icGYvZml4dXBzLmM6NzAzOlxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4sIDApO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtNzA0LVxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTcyMD1pbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0Ny1cXHRcXHRcXHRpbnNuX2J1ZltjbnQrK10gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaVswXTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc0ODpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LCAxKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0OS1cXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03NzAtXFx0XFx0fSBlbHNlIGlmIChjbnQpIHtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc3MTpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LFxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzcyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtODA0LVxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxua2VybmVsL2JwZi9maXh1cHMuYzo4MDU6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwNi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtODc4LVxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxua2VybmVsL2JwZi9maXh1cHMuYzo4Nzk6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTg4MC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAwKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTAxMy1wYXRjaF9pbnNuX2J1ZjpcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEwMTQ6XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250LFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTAxNS1cXHRcXHRcXHRcXHRcXHQgICAgICAgaW5zbl9vZmZfaW5fcGF0Y2gpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xNDkzPXN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE1MDUtXFx0ICogb25lcyBmb3IgdGhlIGhpZGRlbiBzdWJwcm9nLiBIZW5jZSBhbGwgb2YgdGhlIGFkanVzdG1lbnQgb3BlcmF0aW9uc1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTUwNjpcXHQgKiBpbiBicGZfcGF0Y2hfaW5zbl9kYXRhIGFyZSBuby1vcHMuXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA3LVxcdCAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTUwODpcXHRwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuIC0gMSwgcGF0Y2gsIGxlbiwgLTEpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwOS1cXHRpZiAoIXByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE1MjI9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNTkyLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTU5MzpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTU5NC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAwKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTY4OS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE2OTA6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE2OTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzIyLVxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzIzOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzI0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIGluc25fb2ZmX2luX3BhdGNoKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTc0My1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE3NDQ6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3OTctXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzk4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzk5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg0My1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE4NDQ6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMyk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NjUtXFxua2VybmVsL2JwZi9maXh1cHMuYzoxODY2OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0xODY3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIDIpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xODg3LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTg4ODpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg4OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTk3My1cXHRcXHRcXHRjbnQgPSAzO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTk3NDpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTk3NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjAwNy1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMDg6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMDktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgY250IC0gMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMjctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDI4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDI5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIGNudCAtIDEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDY4LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjA2OTpcXHRcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDcwLVxcdFxcdFxcdFxcdFxcdGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250LCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxNTEtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMTUyOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTUzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjE4MC0jZW5kaWZcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxODE6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxODItXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTk5LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjIwMDpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjIwMS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMzQtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMjM1OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjM2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI2Ny1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyNjg6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjk0LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjI5NTpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5Ni1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMTEtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMzEyOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzEzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICAxLCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzNjctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMzY4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzY5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjM4Ni1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzODc6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzODgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yNDU1LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjQ1NjpcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBzdWJwcm9nX3N0YXJ0LCBpbnNuX2J1ZiwgY250LCBjbnQgLSAxKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NTctXFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ2My1cXHRcXHQgKiB0byBpbnNuIGFmdGVyIEJQRl9TVCB0aGF0IGluaXRzIG1heV9nb3RvIGNvdW50Llxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjQ2NDpcXHRcXHQgKiBBZGp1c3RtZW50IHdpbGwgc3VjY2VlZCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBkaWRuJ3QgZmFpbC5cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NjUtXFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTI0OTM9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqaW5saW5lX2JwZl9sb29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1NTQtXFx0KnRvdGFsX2NudCA9IGNudDtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjI1NTU6XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgcG9zaXRpb24sIGluc25fYnVmLCBjbnQsIC0xKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1NTYtXFx0aWYgKCFuZXdfcHJvZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjA6MTQ6NTAuNDk5MDgyNDA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTU5NzEwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXBwcm9hY2ggdG8gQW5hbHl6aW5nIEJQRiBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsICpicGZcXF9wYXRjaFxcX2luc25cXF9kYXRhKiBpcyBjbGVhcmx5IGEgZnJlcXVlbnRseS11c2VkIGZ1bmN0aW9uIGluIHRoaXMgc3BhY2U7IHRoYXQganVtcHMgb3V0IGltbWVkaWF0ZWx5LiBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cywgdGhvdWdoLCBhbmQgSSB0aGluayB0aGUgYmVzdCBwYXRoIGZvcndhcmQgaW52b2x2ZXMgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBjb21waWxhdGlvbiBwaXBlbGluZSDigJMgc3BlY2lmaWNhbGx5LCAqYnBmXFxfaW50XFxfaml0XFxfY29tcGlsZSosICpicGZcXF9kb1xcX21pc2NcXF9maXh1cHMqLCBhbmQgKmJwZlxcX2NvbnZlcnRcXF9jdHhcXF9hY2Nlc3NlcyouIFRoZXkgc2VlbSBsaWtlIGdvb2QgZW50cnkgcG9pbnRzIGZvciBtb3JlIGluLWRlcHRoIGZ1enppbmcuXG5cbkkgcXVpY2tseSBjaGVja2VkIHRoZSBzb3VyY2UgZm9yICpicGZcXF9wYXRjaFxcX2luc25cXF9kYXRhKiB0byBjb25maXJtIG15IGludHVpdGlvbiBhbmQgcmVtaW5kIG15c2VsZiBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIuIFllcywgaXQncyBkZWZpbmVkIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCBhbmQgZXhwb3J0ZWQgaW4gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLiBJdCBpcyBub3QgZXhwb3J0ZWQgdG8gbW9kdWxlcyB3aGljaCBzdWdnZXN0cyBpdCBpcyBpbnRlcm5hbC4gVGhlIGNvbmNlcm4gaXMgdGhhdCBTeXprYWxsZXIgY2FuIHN0aWxsIHJlYWNoIGl0IHRocm91Z2ggZGlyZWN0IHNwZWNpZmljYXRpb247IGhvd2V2ZXIsIGl0IGlzIGJldHRlciB0byB0YXJnZXQgdGhlIG1vcmUgZ2VuZXJhbCBlbnRyeSBwb2ludHMgb2YgdGhlIEJQRiBzdWJzeXN0ZW0uXG5cblRoZXJlZm9yZSwgbXkgZm9jdXMgZm9yIGluaXRpYWwgYW5hbHlzaXMgd2lsbCBiZSAqYnBmXFxfaW50XFxfaml0XFxfY29tcGlsZSosICpicGZcXF9kb1xcX21pc2NcXF9maXh1cHMqLCBhbmQgKmJwZlxcX2NvbnZlcnRcXF9jdHhcXF9hY2Nlc3NlcyouIE15IGZpcnN0IHRhcmdldCwgbGV0J3MgZXhwbG9yZSAqYnBmXFxfY29udmVydFxcX2N0eFxcX2FjY2Vzc2VzKi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxOTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjA6MTQ6NTQuOTk1MDU4MTEzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgxNDM4NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvZml4dXBzLmM9NjE0PWludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzE5LSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6NzIwOmludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTcyMS17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk3Mzk9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk5MzAtXFx0XFx0LyogcHJvZ3JhbSBpcyB2YWxpZCwgY29udmVydCAqKHUzMiopKGN0eCArIG9mZikgYWNjZXNzZXMgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk5MzE6XFx0XFx0cmV0ID0gYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKGVudik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5OTMyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMDoxNDo1NS4xMDMyMDk3NDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU5NTc0NDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipGb2N1c2luZyBvbiBNZW1vcnkgQWNjZXNzIGluIEJQRioqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB0aGF0IGRpZ2dpbmcgaW50byBgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzYCBtaWdodCBiZSBhbm90aGVyIHByb2R1Y3RpdmUgYXZlbnVlIHRvIGV4cGxvcmUuIEl0IHNlZW1zIGxpa2UgaXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gbWVtb3J5IGFjY2VzcyB0cmFuc2xhdGlvbnMgd2l0aGluIHRoZSBCUEYgY29udGV4dC5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGdvIGRpcmVjdGx5IHRvIGBjaGVja19tZW1fYWNjZXNzYC4gVGhhdCBmdW5jdGlvbiBwcm9iYWJseSBoYXMgdGhlIGNyaXRpY2FsIGNoZWNrcyBuZWVkZWQgdG8gZW5mb3JjZSBtZW1vcnkgc2FmZXR5IHdpdGhpbiB0aGUgQlBGIHByb2dyYW0uIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGxvZ2ljIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTk0OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIwOjE0OjU3LjY5ODk2MDYzOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5MDE2NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX21lbV9hY2Nlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTU1PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDItICogY2FuIGJlOiBQVFJfVE9fTUFQX1ZBTFVFLCBQVFJfVE9fQ1RYLCBQVFJfVE9fU1RBQ0ssIFBUUl9UT19TT0NLRVQuIFRoZXNlIGFyZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDM6ICogZm91ciBwb2ludGVyIHR5cGVzIHJlY29nbml6ZWQgYnkgY2hlY2tfbWVtX2FjY2VzcygpIGZ1bmN0aW9uLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQtICpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04NDc9c3RhdGljIGJvb2wgaXNfZHlucHRyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTctXFx0ICogZXJyb3IgYmVjYXVzZSB0aGlzIGp1c3QgbWVhbnMgdGhlIHN0YWNrIHN0YXRlIGhhc24ndCBiZWVuIHVwZGF0ZWQgeWV0Llxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTg6XFx0ICogV2Ugd2lsbCBkbyBjaGVja19tZW1fYWNjZXNzIHRvIGNoZWNrIGFuZCB1cGRhdGUgc3RhY2sgYm91bmRzIGxhdGVyLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTktXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAwMz1zdGF0aWMgYm9vbCBpc19pdGVyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA5LVxcdC8qIEZvciAtRVJBTkdFIChpLmUuIHNwaSBub3QgZmFsbGluZyBpbnRvIGFsbG9jYXRlZCBzdGFjayBzbG90cyksIHdlXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMTA6XFx0ICogd2lsbCBkbyBjaGVja19tZW1fYWNjZXNzIHRvIGNoZWNrIGFuZCB1cGRhdGUgc3RhY2sgYm91bmRzIGxhdGVyLCBzb1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDExLVxcdCAqIHJldHVybiB0cnVlIGZvciB0aGF0IGNhc2UuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0OD1zdGF0aWMgYm9vbCBpc19pcnFfZmxhZ19yZWdfdmFsaWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1NC1cXHQvKiBGb3IgLUVSQU5HRSAoaS5lLiBzcGkgbm90IGZhbGxpbmcgaW50byBhbGxvY2F0ZWQgc3RhY2sgc2xvdHMpLCB3ZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTU1OlxcdCAqIHdpbGwgZG8gY2hlY2tfbWVtX2FjY2VzcyB0byBjaGVjayBhbmQgdXBkYXRlIHN0YWNrIGJvdW5kcyBsYXRlciwgc29cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1Ni1cXHQgKiByZXR1cm4gdHJ1ZSBmb3IgdGhhdCBjYXNlLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM0MTg9c3RhdGljIHZvaWQgc2NydWJfc3BlY2lhbF9zbG90KHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQzMC0vKiBjaGVja19zdGFja197cmVhZCx3cml0ZX1fZml4ZWRfb2ZmIGZ1bmN0aW9ucyB0cmFjayBzcGlsbC9maWxsIG9mIHJlZ2lzdGVycyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzQzMTogKiBzdGFjayBib3VuZGFyeSBhbmQgYWxpZ25tZW50IGFyZSBjaGVja2VkIGluIGNoZWNrX21lbV9hY2Nlc3MoKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDMyLSAqL1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQxNTA9c3RhdGljIGludCBjaGVja19tYXBfYWNjZXNzX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MTcxLS8qIGNoZWNrIHJlYWQvd3JpdGUgaW50byBtZW1vcnkgcmVnaW9uIChlLmcuLCBtYXAgdmFsdWUsIHJpbmdidWYgc2FtcGxlLCBldGMpICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQxNzI6c3RhdGljIGludCBfX2NoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDE3My1cXHRcXHRcXHQgICAgICBpbnQgb2ZmLCBpbnQgc2l6ZSwgdTMyIG1lbV9zaXplLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQyMTA9c3RhdGljIGludCBjaGVja19tZW1fcmVnaW9uX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQyMzMtXFx0fVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MjM0OlxcdGVyciA9IF9fY2hlY2tfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHJlZ19zbWluKHJlZykgKyBvZmYsIHNpemUsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQyMzUtXFx0XFx0XFx0XFx0IG1lbV9zaXplLCB6ZXJvX3NpemVfYWxsb3dlZCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDI1MC1cXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQyNTE6XFx0ZXJyID0gX19jaGVja19tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgcmVnX3VtYXgocmVnKSArIG9mZiwgc2l6ZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDI1Mi1cXHRcXHRcXHRcXHQgbWVtX3NpemUsIHplcm9fc2l6ZV9hbGxvd2VkKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00NjYxPXN0YXRpYyBpbnQgY2hlY2tfcGFja2V0X2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLCBpbnQgb2ZmLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ2NzQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ2NzU6XFx0LyogX19jaGVja19tZW1fYWNjZXNzIGhhcyBtYWRlIHN1cmUgXFxcIm9mZiArIHNpemUgLSAxXFxcIiBpcyB3aXRoaW4gdTE2Llxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Njc2LVxcdCAqIHJlZ191bWF4KHJlZykgY2FuJ3QgYmUgYmlnZ2VyIHRoYW4gTUFYX1BBQ0tFVF9PRkYgd2hpY2ggaXMgMHhmZmZmLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Njc3LVxcdCAqIG90aGVyd2lzZSBmaW5kX2dvb2RfcGt0X3BvaW50ZXJzIHdvdWxkIGhhdmUgcmVmdXNlZCB0byBzZXQgcmFuZ2UgaW5mb1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0Njc4OlxcdCAqIHRoYXQgX19jaGVja19tZW1fYWNjZXNzIHdvdWxkIGhhdmUgcmVqZWN0ZWQgdGhpcyBwa3QgYWNjZXNzLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Njc5LVxcdCAqIFRoZXJlZm9yZSwgXFxcIm9mZiArIHJlZ191bWF4KHJlZykgKyBzaXplIC0gMVxcXCIgd29uJ3Qgb3ZlcmZsb3cgdTMyLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYwNjE9c3RhdGljIHZvaWQgYWRkX3NjYWxhcl90b19yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsIHM2NCB2YWwpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjA4My0gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA4NDpzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MDg1LVxcdFxcdFxcdCAgICBpbnQgb2ZmLCBpbnQgYnBmX3NpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHQsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjM1MT1zdGF0aWMgaW50IGNoZWNrX2xvYWRfbWVtKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzgzLVxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Mzg0OlxcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXFx1MDAzZWluc25faWR4LCByZWdzICsgaW5zbi1cXHUwMDNlc3JjX3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi1cXHUwMDNlc3JjX3JlZyksIGluc24tXFx1MDAzZW9mZixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM4NS1cXHRcXHRcXHQgICAgICAgQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSksIEJQRl9SRUFELCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzOTQ9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MjMtXFx0LyogQ2hlY2sgaWYgKGRzdF9yZWcgKyBvZmYpIGlzIHdyaXRlYWJsZS4gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQyNDpcXHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCwgcmVncyArIGluc24tXFx1MDAzZWRzdF9yZWcsIGFyZ25vX2Zyb21fcmVnKGluc24tXFx1MDAzZWRzdF9yZWcpLCBpbnNuLVxcdTAwM2VvZmYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MjUtXFx0XFx0XFx0ICAgICAgIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpLCBCUEZfV1JJVEUsIGluc24tXFx1MDAzZXNyY19yZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjQzMj1zdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTAxLVxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTAyOlxcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXFx1MDAzZWluc25faWR4LCBkc3RfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVxcdTAwM2Vkc3RfcmVnKSwgaW5zbi1cXHUwMDNlb2ZmLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTAzLVxcdFxcdFxcdCAgICAgICBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSwgQlBGX1JFQUQsIC0xLCB0cnVlLCBmYWxzZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1MDQtXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgbG9hZF9yZWcgXFx1MDAzZT0gMClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjUwNTpcXHRcXHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCwgZHN0X3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi1cXHUwMDNlZHN0X3JlZyksXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1MDYtXFx0XFx0XFx0XFx0ICAgICAgIGluc24tXFx1MDAzZW9mZiwgQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSksXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUxNi1cXHQvKiBDaGVjayB3aGV0aGVyIHdlIGNhbiB3cml0ZSBpbnRvIHRoZSBzYW1lIG1lbW9yeS4gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjUxNzpcXHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCwgZHN0X3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi1cXHUwMDNlZHN0X3JlZyksIGluc24tXFx1MDAzZW9mZixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUxOC1cXHRcXHRcXHQgICAgICAgQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSksIEJQRl9XUklURSwgLTEsIHRydWUsIGZhbHNlKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03MjQ4PXN0YXRpYyBpbnQgcHJvY2Vzc19keW5wdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyODQtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJQRl9EWU5QVFJfU0laRTsgaSArPSA4KSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjcyODU6XFx0XFx0XFx0ZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGluc25faWR4LCByZWcsIGFyZ25vLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03Mjg2LVxcdFxcdFxcdFxcdFxcdCAgICAgICBpLCBCUEZfRFcsIEJQRl9XUklURSwgLTEsIGZhbHNlLCBmYWxzZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzM2OD1zdGF0aWMgaW50IHByb2Nlc3NfaXRlcl9hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubywgaW50IGluc25faWR4LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc0MDUtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3Nsb3RzICogODsgaSArPSBCUEZfUkVHX1NJWkUpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzQwNjpcXHRcXHRcXHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgaW5zbl9pZHgsIHJlZywgYXJnbm8sXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc0MDctXFx0XFx0XFx0XFx0XFx0ICAgICAgIGksIEJQRl9EVywgQlBGX1dSSVRFLCAtMSwgZmFsc2UsIGZhbHNlKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDE3NT1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDI2MS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWV0YS5hY2Nlc3Nfc2l6ZTsgaSsrKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMjYyOlxcdFxcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBpbnNuX2lkeCwgcmVncyArIG1ldGEucmVnbm8sIGFyZ25vX2Zyb21fcmVnKG1ldGEucmVnbm8pLCBpLCBCUEZfQixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAyNjMtXFx0XFx0XFx0XFx0ICAgICAgIEJQRl9XUklURSwgLTEsIGZhbHNlLCBmYWxzZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA1MDktXFx0XFx0XFx0XFx0ICogaXQgd2lsbCBjb25mdXNlIHRoZSBjaGVjayBvZiBQVFJfVE9fQlRGX0lEIGluXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNTEwOlxcdFxcdFxcdFxcdCAqIGNoZWNrX21lbV9hY2Nlc3MoKS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA1MTEtXFx0XFx0XFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0Mzg9c3RhdGljIGludCBwcm9jZXNzX2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0NjUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNDY2OlxcdFxcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXFx1MDAzZWluc25faWR4LCByZWcsIGFyZ25vLCAwLCBCUEZfRFcsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNDY3LVxcdFxcdFxcdFxcdCAgICAgICBCUEZfV1JJVEUsIC0xLCBmYWxzZSwgZmFsc2UpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MjQxPXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI3OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTcyNzk6XFx0XFx0ZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGVudi1cXHUwMDNlaW5zbl9pZHgsIGN1cl9yZWdzKGVudikgKyBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVxcdTAwM2Vkc3RfcmVnKSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyODAtXFx0XFx0XFx0XFx0ICAgICAgIGluc24tXFx1MDAzZW9mZiwgQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIwOjE0OjU4LjIxNzk4NDgxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk0MTM4ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHRoZSBmdW5jdGlvbiBgY2hlY2tfbWVtX2FjY2Vzc2AgaXMgZGVmaW5pdGVseSB0aGUga2V5IHN5bWJvbCB0byBmb2N1cyBvbiBoZXJlLCB0aGF0J3MgYSBnb29kIGZpbmQuIExldCdzIGdldCB0aGlzIGFuYWx5c2lzIGRvd24gY29uY2lzZWx5LlxuXG5UaGUgcGF0Y2gncyBvdmVyYWxsIHdvcnRoaW5lc3MgZm9yIGZ1enppbmcgaXMgZGVmaW5pdGVseSAqdHJ1ZSouIFRoZSBpbXBvcnRhbnQgZnVuY3Rpb24gc3ltYm9scyB0aGF0IGFyZSBtb2RpZmllZCwgYWNjb3JkaW5nIHRvIG15IHJldmlldyBvZiB0aGUgY2hhbmdlcywgYXJlIGBicGZfaW50X2ppdF9jb21waWxlYCwgYGJwZl9kb19taXNjX2ZpeHVwc2AsIGFuZCAqZXNwZWNpYWxseSogYGNoZWNrX21lbV9hY2Nlc3NgLlxuXG5Ob3csIHRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBCUEZfSklUX0tBU0FOYCwgZW5hYmxpbmcgS0FTQU4gc3VwcG9ydCBmb3IgdGhlIEJQRiBKSVQgY29tcGlsZXIgb24geDg2XzY0LCB3aGljaCBpcyB1bmRlbmlhYmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGNvcmUga2VybmVsIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGl0J3MgYSBnb29kIGNoYW5nZSB0byBmdXp6LlxuXG5BaCwgYnV0IGhvbGQgb24sIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIGxpc3RpbmcgZXhjZXNzaXZlbHkgZ2VuZXJpYyBjb25maWd1cmF0aW9ucywgYXMgd2UgcHJvYmFibHkgaGF2ZSB0aG9zZSBlbmFibGVkIGJ5IGRlZmF1bHQuIFNvLCB0aGF0IG1lYW5zIEkgbmVlZCB0byByZWZpbmUgdGhlIGNvbmZpZyBsaXN0LiBgS0FTQU5fR0VORVJJQ2AsIGBLQVNBTl9WTUFMTE9DYCwgYEJQRl9KSVRgLCBhbmQgYEtBU0FOYCBhcmUgYWxsIGJyb2FkIGFuZCBsaWtlbHkgYWxyZWFkeSBlbmFibGVkLCBiYXNlZCBvbiBteSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCdzIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLlxuXG5TbywgSSBuZWVkIHRvIGZvY3VzICpzcGVjaWZpY2FsbHkqIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGlyZWN0bHkgaW1wYWN0IHRoZSBtb2RpZmllZCBjb2RlLiBHb29kLCBJIHNlZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAqaXMqIGBCUEZfSklUX0tBU0FOYC4gVGhhdCBhcHBlYXJzIHRvIGJlIHN1ZmZpY2llbnQuIFRoYXQncyB0aGUgbmV3IGNvbmZpZyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaC5cblxuQWxyaWdodCwgdGhhdCBjb3ZlcnMgZXZlcnl0aGluZy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMjE3LCJPdXRwdXRUb2tlbnMiOjEwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMDoxNTowNC4wMTIxMjc3MzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc3NDcwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRfS0FTQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfZG9fbWlzY19maXh1cHNcIixcbiAgICBcImNoZWNrX21lbV9hY2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEtBU0FOIHN1cHBvcnQgdG8gdGhlIEJQRiBKSVQgY29tcGlsZXIgb24geDg2XzY0LCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRfS0FTQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfZG9fbWlzY19maXh1cHNcIixcbiAgICBcImNoZWNrX21lbV9hY2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEtBU0FOIHN1cHBvcnQgdG8gdGhlIEJQRiBKSVQgY29tcGlsZXIgb24geDg2XzY0LCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjnh2m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 19:50:53 +0000 UTC FinishedAt: 2026-07-08 20:15:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "ee1bcf8271eb2e1d191bf97348ddf823c6071fa9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT_KASAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "ee1bcf8271eb2e1d191bf97348ddf823c6071fa9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT_KASAN" ], "series_id": "31571c46-133b-4a27-b854-eb01f403d79f" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile", "bpf_do_misc_fixups", "check_mem_access" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIwOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVRfS0FTQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7LAogICAgJiMzNDtjaGVja19tZW1fYWNjZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgS0FTQU4gc3VwcG9ydCB0byB0aGUgQlBGIEpJVCBjb21waWxlciBvbiB4ODZfNjQsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjA6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxZDZkZGY5NzA2YTg2OWJjNmQyNTVlMWM3ZDBhZTZmYmFkYjc5OWI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAyMDoxNDoxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggYmRhZDkwZjIxMGU0YmYuLjcwNWE5YWI4NWYzYTk1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvS2NvbmZpZ1xuQEAgLTIzMyw2ICYjNDM7MjMzLDcgQEAgY29uZmlnIFg4NlxuIFx0c2VsZWN0IEhBVkVfU0FNUExFX0ZUUkFDRV9ESVJFQ1RcdGlmIFg4Nl82NFxuIFx0c2VsZWN0IEhBVkVfU0FNUExFX0ZUUkFDRV9ESVJFQ1RfTVVMVElcdGlmIFg4Nl82NFxuIFx0c2VsZWN0IEhBVkVfRUJQRl9KSVRcbiYjNDM7XHRzZWxlY3QgSEFWRV9FQlBGX0pJVF9LQVNBTlx0XHRpZiBYODZfNjRcbiBcdHNlbGVjdCBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTXG4gXHRzZWxlY3QgSEFWRV9FSVNBXHRcdFx0aWYgWDg2XzMyXG4gXHRzZWxlY3QgSEFWRV9FWElUX1RIUkVBRFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggZGU3NTE1ZWExYmVhZTguLjY1YTAwZTg0Nzk5Y2QyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0yMSw2ICYjNDM7MjEsMTcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdW53aW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2ZpLmhcdTAwM2VcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9KSVRfS0FTQU4pXG4mIzQzO3ZvaWQgX19hc2FuX2xvYWQxKHZvaWQgKnApO1xuJiM0Mzt2b2lkIF9fYXNhbl9zdG9yZTEodm9pZCAqcCk7XG4mIzQzO3ZvaWQgX19hc2FuX2xvYWQyKHZvaWQgKnApO1xuJiM0Mzt2b2lkIF9fYXNhbl9zdG9yZTIodm9pZCAqcCk7XG4mIzQzO3ZvaWQgX19hc2FuX2xvYWQ0KHZvaWQgKnApO1xuJiM0Mzt2b2lkIF9fYXNhbl9zdG9yZTQodm9pZCAqcCk7XG4mIzQzO3ZvaWQgX19hc2FuX2xvYWQ4KHZvaWQgKnApO1xuJiM0Mzt2b2lkIF9fYXNhbl9zdG9yZTgodm9pZCAqcCk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdGF0aWMgYm9vbCBhbGxfY2FsbGVlX3JlZ3NfdXNlZFs0XSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTtcbiBcbiBzdGF0aWMgdTggKmVtaXRfY29kZSh1OCAqcHRyLCB1MzIgYnl0ZXMsIHVuc2lnbmVkIGludCBsZW4pXG5AQCAtMTExMCw2ICYjNDM7MTEyMSw5MCBAQCBzdGF0aWMgdm9pZCBtYXliZV9lbWl0XzFtb2QodTggKipwcHJvZywgdTMyIHJlZywgYm9vbCBpczY0KVxuIFx0KnBwcm9nID0gcHJvZztcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZW1pdF9rYXNhbl9jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCAqKnBwcm9nLFxuJiM0MztcdFx0XHQgICAgdTMyIGFkZHJfcmVnLCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICppcCxcbiYjNDM7XHRcdFx0ICAgIGJvb2wgaXNfd3JpdGUsIGJvb2wgYWNjZXNzZXNfc3RhY2tfb25seSlcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9KSVRfS0FTQU5cbiYjNDM7XHR1MzIgYnBmX3NpemUgPSBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdHMzMiBvZmYgPSBpbnNuLVx1MDAzZW9mZjtcbiYjNDM7XHR1OCAqcHJvZyA9ICpwcHJvZztcbiYjNDM7XHR2b2lkICprYXNhbl9mdW5jO1xuJiM0MztcbiYjNDM7XHRpZiAoIWVudilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoYWNjZXNzZXNfc3RhY2tfb25seSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBEZXJpdmUgS0FTQU4gY2hlY2sgZnVuY3Rpb24gZnJvbSBhY2Nlc3MgdHlwZSBhbmQgc2l6ZSAqL1xuJiM0MztcdHN3aXRjaCAoYnBmX3NpemUpIHtcbiYjNDM7XHRjYXNlIEJQRl9COlxuJiM0MztcdFx0a2FzYW5fZnVuYyA9IGlzX3dyaXRlID8gX19hc2FuX3N0b3JlMSA6IF9fYXNhbl9sb2FkMTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX0g6XG4mIzQzO1x0XHRrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmUyIDogX19hc2FuX2xvYWQyO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfVzpcbiYjNDM7XHRcdGthc2FuX2Z1bmMgPSBpc193cml0ZSA/IF9fYXNhbl9zdG9yZTQgOiBfX2FzYW5fbG9hZDQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9EVzpcbiYjNDM7XHRcdGthc2FuX2Z1bmMgPSBpc193cml0ZSA/IF9fYXNhbl9zdG9yZTggOiBfX2FzYW5fbG9hZDg7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTYXZlIHJheCAqL1xuJiM0MztcdEVNSVQxKDB4NTApO1xuJiM0MztcdC8qIFNhdmUgcmN4ICovXG4mIzQzO1x0RU1JVDEoMHg1MSk7XG4mIzQzO1x0LyogU2F2ZSByZHggKi9cbiYjNDM7XHRFTUlUMSgweDUyKTtcbiYjNDM7XHQvKiBTYXZlIHJzaSAqL1xuJiM0MztcdEVNSVQxKDB4NTYpO1xuJiM0MztcdC8qIFNhdmUgcmRpICovXG4mIzQzO1x0RU1JVDEoMHg1Nyk7XG4mIzQzO1x0LyogU2F2ZSByOCAqL1xuJiM0MztcdEVNSVQyKDB4NDEsIDB4NTApO1xuJiM0MztcdC8qIFNhdmUgcjkgKi9cbiYjNDM7XHRFTUlUMigweDQxLCAweDUxKTtcbiYjNDM7XG4mIzQzO1x0LyogbW92IHJkaSwgYWRkcl9yZWcgKi9cbiYjNDM7XHRFTUlUX21vdihCUEZfUkVHXzEsIGFkZHJfcmVnKTtcbiYjNDM7XG4mIzQzO1x0LyogYWRkIHJkaSwgb2ZmIChpZiBvZmZzZXQgaXMgbm9uLXplcm8pICovXG4mIzQzO1x0aWYgKG9mZikge1xuJiM0MztcdFx0aWYgKGlzX2ltbTgob2ZmKSkge1xuJiM0MztcdFx0XHQvKiBhZGQgcmRpLCBpbW04ICovXG4mIzQzO1x0XHRcdEVNSVQ0KDB4NDgsIDB4ODMsIDB4QzcsICh1OClvZmYpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0LyogYWRkIHJkaSwgaW1tMzIgKi9cbiYjNDM7XHRcdFx0RU1JVDNfb2ZmMzIoMHg0OCwgMHg4MSwgMHhDNywgb2ZmKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFkanVzdCBpcCB0byBhY2NvdW50IGZvciB0aGUgaW5zdHJ1bWVudGF0aW9uIGdlbmVyYXRlZCBzbyBmYXIgKi9cbiYjNDM7XHRpcCAmIzQzOz0gKHByb2cgLSAqcHByb2cpO1xuJiM0MztcdC8qIFdlIGVtaXQgYSBjYWxsLCBzbyB1cGRhdGUgY2FsbCBkZXB0aCBjb3VudGluZyAqL1xuJiM0MztcdGlwICYjNDM7PSB4ODZfY2FsbF9kZXB0aF9lbWl0X2FjY291bnRpbmcoXHUwMDI2cHJvZywga2FzYW5fZnVuYywgaXApO1xuJiM0MztcdC8qIGNhbGwga2FzYW5fZnVuYyAqL1xuJiM0MztcdGlmIChlbWl0X2NhbGwoXHUwMDI2cHJvZywga2FzYW5fZnVuYywgaXApKVxuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1xuJiM0MztcdEVNSVQyKDB4NDEsIDB4NTkpO1xuJiM0MztcdEVNSVQyKDB4NDEsIDB4NTgpO1xuJiM0MztcdEVNSVQxKDB4NUYpO1xuJiM0MztcdEVNSVQxKDB4NUUpO1xuJiM0MztcdEVNSVQxKDB4NUEpO1xuJiM0MztcdEVNSVQxKDB4NTkpO1xuJiM0MztcdEVNSVQxKDB4NTgpO1xuJiM0MztcbiYjNDM7XHQqcHByb2cgPSBwcm9nO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0JQRl9KSVRfS0FTQU4gKi9cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBMRFg6IGRzdF9yZWcgPSAqKHU4Kikoc3JjX3JlZyAmIzQzOyBvZmYpICovXG4gc3RhdGljIHZvaWQgZW1pdF9sZHgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZywgaW50IG9mZilcbiB7XG5AQCAtMTMxNSw2ICYjNDM7MTQxMCw2NCBAQCBzdGF0aWMgdm9pZCBlbWl0X3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIGluZGV4X3JlZywgaW50XG4gXHQqcHByb2cgPSBwcm9nO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9zdCh1OCAqKnBwcm9nLCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxuJiM0MztcdFx0ICAgIHMzMiBvdXRnb2luZ19hcmdfYmFzZSwgdTE2IG91dGdvaW5nX3JzcClcbiYjNDM7e1xuJiM0MztcdHMzMiBpbW0zMiA9IGluc24tXHUwMDNlaW1tO1xuJiM0MztcdHU4ICpwcm9nID0gKnBwcm9nO1xuJiM0MztcdHMzMiBpbnNuX29mZjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKSB7XG4mIzQzO1x0Y2FzZSBCUEZfQjpcbiYjNDM7XHRcdGlmIChpc19lcmVnKGRzdF9yZWcpKVxuJiM0MztcdFx0XHRFTUlUMigweDQxLCAweEM2KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0RU1JVDEoMHhDNik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9IOlxuJiM0MztcdFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXG4mIzQzO1x0XHRcdEVNSVQzKDB4NjYsIDB4NDEsIDB4QzcpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRFTUlUMigweDY2LCAweEM3KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX1c6XG4mIzQzO1x0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcbiYjNDM7XHRcdFx0RU1JVDIoMHg0MSwgMHhDNyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdEVNSVQxKDB4QzcpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfRFc6XG4mIzQzO1x0XHRpZiAoZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUyBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gLTgpIHtcbiYjNDM7XHRcdFx0LyogQXJnIDY6IHN0b3JlIGltbWVkaWF0ZSBpbiByOSByZWdpc3RlciAqL1xuJiM0MztcdFx0XHRlbWl0X21vdl9pbW02NChcdTAwMjZwcm9nLCBYODZfUkVHX1I5LCBpbW0zMiBcdTAwM2VcdTAwM2UgMzEsXG4mIzQzO1x0XHRcdFx0ICAgICAgICh1MzIpaW1tMzIpO1xuJiM0MztcdFx0XHQqcHByb2cgPSBwcm9nO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHhDNyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4mIzQzO1x0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBcmdzIDcmIzQzOzogcmV2ZXJzZSBCUEYgbmVnYXRpdmUgb2Zmc2V0cyB0b1xuJiM0MztcdFx0ICogeDg2IHBvc2l0aXZlIHJzcCBvZmZzZXRzLlxuJiM0MztcdFx0ICogQlBGIG9mZj0tMTYg4oaSIFtyc3AmIzQzOzBdLCBvZmY9LTI0IOKGkiBbcnNwJiM0Mzs4XSwgLi4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGluc25fb2ZmID0gb3V0Z29pbmdfYXJnX2Jhc2UgLSBvdXRnb2luZ19yc3AgLVxuJiM0MztcdFx0XHRpbnNuX29mZiAtIDE2O1xuJiM0MztcdFx0ZHN0X3JlZyA9IEJQRl9SRUdfRlA7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChpc19pbW04KGluc25fb2ZmKSlcbiYjNDM7XHRcdEVNSVQyKGFkZF8xcmVnKDB4NDAsIGRzdF9yZWcpLCBpbnNuX29mZik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0RU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHg4MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcbiYjNDM7XG4mIzQzO1x0RU1JVChpbW0zMiwgYnBmX3NpemVfdG9feDg2X2J5dGVzKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpKTtcbiYjNDM7XHQqcHByb2cgPSBwcm9nO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGVtaXRfc3RfcjEyKHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgaW50IG9mZiwgaW50IGltbSlcbiB7XG4gXHRlbWl0X3N0X2luZGV4KHBwcm9nLCBzaXplLCBkc3RfcmVnLCBYODZfUkVHX1IxMiwgb2ZmLCBpbW0pO1xuQEAgLTE0MjMsMTcgJiM0MzsxNTc2LDMxIEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfcm13X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3QodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIGRzdF9yZWcsXG4tXHRcdFx0ICAgICB1MzIgc3JjX3JlZywgczE2IG9mZiwgdTggYnBmX3NpemUpXG4mIzQzO3N0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTggKipwcHJvZyxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICppcCwgdTMyIGRzdF9yZWcsXG4mIzQzO1x0XHRcdCAgICAgdTMyIHNyY19yZWcsIGJvb2wgYWNjZXNzZXNfc3RhY2tfb25seSlcbiB7XG4mIzQzO1x0dTMyIGF0b21pY19vcCA9IGluc24tXHUwMDNlaW1tO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuIFx0c3dpdGNoIChhdG9taWNfb3ApIHtcbiBcdGNhc2UgQlBGX0xPQURfQUNROlxuJiM0MztcdFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIHBwcm9nLCBzcmNfcmVnLCBpbnNuLCBpcCwgZmFsc2UsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0LyogZHN0X3JlZyA9IHNtcF9sb2FkX2FjcXVpcmUoc3JjX3JlZyAmIzQzOyBvZmYxNikgKi9cbi1cdFx0ZW1pdF9sZHgocHByb2csIGJwZl9zaXplLCBkc3RfcmVnLCBzcmNfcmVnLCBvZmYpO1xuJiM0MztcdFx0ZW1pdF9sZHgocHByb2csIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksIGRzdF9yZWcsIHNyY19yZWcsXG4mIzQzO1x0XHRcdCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBCUEZfU1RPUkVfUkVMOlxuJiM0MztcdFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIHBwcm9nLCBkc3RfcmVnLCBpbnNuLCBpcCwgdHJ1ZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgYWNjZXNzZXNfc3RhY2tfb25seSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHQvKiBzbXBfc3RvcmVfcmVsZWFzZShkc3RfcmVnICYjNDM7IG9mZjE2LCBzcmNfcmVnKSAqL1xuLVx0XHRlbWl0X3N0eChwcHJvZywgYnBmX3NpemUsIGRzdF9yZWcsIHNyY19yZWcsIG9mZik7XG4mIzQzO1x0XHRlbWl0X3N0eChwcHJvZywgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSwgZHN0X3JlZywgc3JjX3JlZyxcbiYjNDM7XHRcdFx0IGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRwcl9lcnIoXCYjMzQ7YnBmX2ppdDogdW5rbm93biBhdG9taWMgbG9hZC9zdG9yZSBvcGNvZGUgJTAyeFxcblwmIzM0OyxcbkBAIC0xODExLDEwICYjNDM7MTk3OCwxMiBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKlxuIFx0XHRjb25zdCBzMzIgaW1tMzIgPSBpbnNuLVx1MDAzZWltbTtcbiBcdFx0dTMyIGRzdF9yZWcgPSBpbnNuLVx1MDAzZWRzdF9yZWc7XG4gXHRcdHUzMiBzcmNfcmVnID0gaW5zbi1cdTAwM2VzcmNfcmVnO1xuJiM0MztcdFx0Ym9vbCBhY2Nlc3Nlc19zdGFja19vbmx5O1xuIFx0XHR1OCBiMiA9IDAsIGIzID0gMDtcbiBcdFx0dTggKnN0YXJ0X29mX2xkeDtcbiBcdFx0czY0IGptcF9vZmZzZXQ7XG4gXHRcdHMzMiBpbnNuX29mZjtcbiYjNDM7XHRcdGludCBpbnNuX2lkeDtcbiBcdFx0dTggam1wX2NvbmQ7XG4gXHRcdHU4ICpmdW5jO1xuIFx0XHRpbnQgbm9wcztcbkBAIC0xODMxLDYgJiM0MzsyMDAwLDEwIEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqXG4gXHRcdFx0RU1JVF9FTkRCUigpO1xuIFxuIFx0XHRpcCA9IGltYWdlICYjNDM7IGFkZHJzW2kgLSAxXSAmIzQzOyAocHJvZyAtIHRlbXApO1xuJiM0MztcdFx0aW5zbl9pZHggPSBpIC0gMSAmIzQzOyBicGZfcHJvZy1cdTAwM2VhdXgtXHUwMDNlc3VicHJvZ19zdGFydDtcbiYjNDM7XHRcdGFjY2Vzc2VzX3N0YWNrX29ubHkgPVxuJiM0MztcdFx0XHRlbnYgPyAhZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLm5vbl9zdGFja19hY2Nlc3MgOlxuJiM0MztcdFx0XHQgICAgICBmYWxzZTtcbiBcbiBcdFx0c3dpdGNoIChpbnNuLVx1MDAzZWNvZGUpIHtcbiBcdFx0XHQvKiBBTFUgKi9cbkBAIC0yMjA3LDQ5ICYjNDM7MjM4MCwxNyBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKlxuIFx0XHRcdEVNSVRfTEZFTkNFKCk7XG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdFx0LyogU1Q6ICoodTgqKShkc3RfcmVnICYjNDM7IG9mZikgPSBpbW0gKi9cbiBcdFx0Y2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX0I6XG4tXHRcdFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXG4tXHRcdFx0XHRFTUlUMigweDQxLCAweEM2KTtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRFTUlUMSgweEM2KTtcbi1cdFx0XHRnb3RvIHN0O1xuIFx0XHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfSDpcbi1cdFx0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcbi1cdFx0XHRcdEVNSVQzKDB4NjYsIDB4NDEsIDB4QzcpO1xuLVx0XHRcdGVsc2Vcbi1cdFx0XHRcdEVNSVQyKDB4NjYsIDB4QzcpO1xuLVx0XHRcdGdvdG8gc3Q7XG4gXHRcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9XOlxuLVx0XHRcdGlmIChpc19lcmVnKGRzdF9yZWcpKVxuLVx0XHRcdFx0RU1JVDIoMHg0MSwgMHhDNyk7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0RU1JVDEoMHhDNyk7XG4tXHRcdFx0Z290byBzdDtcbiBcdFx0Y2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX0RXOlxuLVx0XHRcdGlmIChkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZW9mZiA9PSAtOCkge1xuLVx0XHRcdFx0LyogQXJnIDY6IHN0b3JlIGltbWVkaWF0ZSBpbiByOSByZWdpc3RlciAqL1xuLVx0XHRcdFx0ZW1pdF9tb3ZfaW1tNjQoXHUwMDI2cHJvZywgWDg2X1JFR19SOSwgaW1tMzIgXHUwMDNlXHUwMDNlIDMxLCAodTMyKWltbTMyKTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cdFx0XHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHhDNyk7XG4tXG4tc3Q6XHRcdFx0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbi1cdFx0XHRpZiAoZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUykge1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIEFyZ3MgNyYjNDM7OiByZXZlcnNlIEJQRiBuZWdhdGl2ZSBvZmZzZXRzIHRvXG4tXHRcdFx0XHQgKiB4ODYgcG9zaXRpdmUgcnNwIG9mZnNldHMuXG4tXHRcdFx0XHQgKiBCUEYgb2ZmPS0xNiDihpIgW3JzcCYjNDM7MF0sIG9mZj0tMjQg4oaSIFtyc3AmIzQzOzhdLCAuLi5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0aW5zbl9vZmYgPSBvdXRnb2luZ19hcmdfYmFzZSAtIG91dGdvaW5nX3JzcCAtIGluc25fb2ZmIC0gMTY7XG4tXHRcdFx0XHRkc3RfcmVnID0gQlBGX1JFR19GUDtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKGlzX2ltbTgoaW5zbl9vZmYpKVxuLVx0XHRcdFx0RU1JVDIoYWRkXzFyZWcoMHg0MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRFTUlUMV9vZmYzMihhZGRfMXJlZygweDgwLCBkc3RfcmVnKSwgaW5zbl9vZmYpO1xuJiM0MztcdFx0XHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXHUwMDI2cHJvZywgZHN0X3JlZywgaW5zbiwgaXAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgdHJ1ZSwgYWNjZXNzZXNfc3RhY2tfb25seSk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcbi1cdFx0XHRFTUlUKGltbTMyLCBicGZfc2l6ZV90b194ODZfYnl0ZXMoQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSkpO1xuJiM0MztcdFx0XHRlbWl0X3N0KFx1MDAyNnByb2csIGluc24sIGRzdF9yZWcsIG91dGdvaW5nX2FyZ19iYXNlLFxuJiM0MztcdFx0XHRcdG91dGdvaW5nX3JzcCk7XG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdFx0LyogU1RYOiAqKHU4KikoZHN0X3JlZyAmIzQzOyBvZmYpID0gc3JjX3JlZyAqL1xuQEAgLTIyNjcsNiAmIzQzOzI0MDgsMTAgQEAgc3Q6XHRcdFx0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbiBcdFx0XHRcdGluc25fb2ZmID0gb3V0Z29pbmdfYXJnX2Jhc2UgLSBvdXRnb2luZ19yc3AgLSBpbnNuX29mZiAtIDE2O1xuIFx0XHRcdFx0ZHN0X3JlZyA9IEJQRl9SRUdfRlA7XG4gXHRcdFx0fVxuJiM0MztcdFx0XHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXHUwMDI2cHJvZywgZHN0X3JlZywgaW5zbiwgaXAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgdHJ1ZSwgYWNjZXNzZXNfc3RhY2tfb25seSk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHRlbWl0X3N0eChcdTAwMjZwcm9nLCBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLCBpbnNuX29mZik7XG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMjQyOCw2ICYjNDM7MjU3MywxMiBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0LyogcG9wdWxhdGUgam1wX29mZnNldCBmb3IgSkFFIGFib3ZlIHRvIGp1bXAgdG8gc3RhcnRfb2ZfbGR4ICovXG4gXHRcdFx0XHRzdGFydF9vZl9sZHggPSBwcm9nO1xuIFx0XHRcdFx0ZW5kX29mX2ptcFstMV0gPSBzdGFydF9vZl9sZHggLSBlbmRfb2Zfam1wO1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBcdTAwMjZwcm9nLCBzcmNfcmVnLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgaW5zbiwgaXAsIGZhbHNlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgYWNjZXNzZXNfc3RhY2tfb25seSk7XG4mIzQzO1x0XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU1TWCB8fFxuIFx0XHRcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU1TWClcbkBAIC0yNDg5LDE1ICYjNDM7MjY0MCwxNiBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdH1cbiBcdFx0XHRmYWxsdGhyb3VnaDtcbiBcdFx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XOlxuLVx0XHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOlxuLVx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSA9PSAoQlBGX0FORCB8IEJQRl9GRVRDSCkgfHxcbi1cdFx0XHQgICAgaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9PUiB8IEJQRl9GRVRDSCkgfHxcbi1cdFx0XHQgICAgaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9YT1IgfCBCUEZfRkVUQ0gpKSB7XG4tXHRcdFx0XHRib29sIGlzNjQgPSBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVztcbi1cdFx0XHRcdHUzMiByZWFsX3NyY19yZWcgPSBzcmNfcmVnO1xuLVx0XHRcdFx0dTMyIHJlYWxfZHN0X3JlZyA9IGRzdF9yZWc7XG4tXHRcdFx0XHR1OCAqYnJhbmNoX3RhcmdldDtcbi1cbiYjNDM7XHRcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6IHtcbiYjNDM7XHRcdFx0Ym9vbCBpczY0ID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFc7XG4mIzQzO1x0XHRcdHUzMiByZWFsX3NyY19yZWcgPSBzcmNfcmVnO1xuJiM0MztcdFx0XHR1MzIgcmVhbF9kc3RfcmVnID0gZHN0X3JlZztcbiYjNDM7XHRcdFx0dTggKmJyYW5jaF90YXJnZXQ7XG4mIzQzO1x0XHRcdGJvb2wgaXNfYXRvbWljX2ZldGNoID1cbiYjNDM7XHRcdFx0XHQoaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9BTkQgfCBCUEZfRkVUQ0gpIHx8XG4mIzQzO1x0XHRcdFx0IGluc24tXHUwMDNlaW1tID09IChCUEZfT1IgfCBCUEZfRkVUQ0gpIHx8XG4mIzQzO1x0XHRcdFx0IGluc24tXHUwMDNlaW1tID09IChCUEZfWE9SIHwgQlBGX0ZFVENIKSk7XG4mIzQzO1x0XHRcdGlmIChpc19hdG9taWNfZmV0Y2gpIHtcbiBcdFx0XHRcdC8qXG4gXHRcdFx0XHQgKiBDYW4mIzM5O3QgYmUgaW1wbGVtZW50ZWQgd2l0aCBhIHNpbmdsZSB4ODYgaW5zbi5cbiBcdFx0XHRcdCAqIE5lZWQgdG8gZG8gYSBDTVBYQ0hHIGxvb3AuXG5AQCAtMjUxMCw3ICYjNDM7MjY2MiwxNyBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR18wKVxuIFx0XHRcdFx0XHRyZWFsX2RzdF9yZWcgPSBCUEZfUkVHX0FYO1xuIFxuJiM0MztcdFx0XHRcdGlwICYjNDM7PSAzO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmICghYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKSB7XG4mIzQzO1x0XHRcdFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIFx1MDAyNnByb2csIHJlYWxfZHN0X3JlZyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGluc24sIGlwLCBmYWxzZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xuJiM0MztcdFx0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdFx0YnJhbmNoX3RhcmdldCA9IHByb2c7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKGlzX2F0b21pY19mZXRjaCkge1xuIFx0XHRcdFx0LyogTG9hZCBvbGQgdmFsdWUgKi9cbiBcdFx0XHRcdGVtaXRfbGR4KFx1MDAyNnByb2csIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksXG4gXHRcdFx0XHRcdCBCUEZfUkVHXzAsIHJlYWxfZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuQEAgLTI1NDIsMTUgJiM0MzsyNzA0LDE2IEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChicGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoaW5zbikpXG4tXHRcdFx0XHRlcnIgPSBlbWl0X2F0b21pY19sZF9zdChcdTAwMjZwcm9nLCBpbnNuLVx1MDAzZWltbSwgZHN0X3JlZywgc3JjX3JlZyxcbi1cdFx0XHRcdFx0XHRcdGluc24tXHUwMDNlb2ZmLCBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBlbWl0X2F0b21pY19sZF9zdChlbnYsIFx1MDAyNnByb2csIGluc24sIGlwLFxuJiM0MztcdFx0XHRcdFx0XHRcdGRzdF9yZWcsIHNyY19yZWcsXG4mIzQzO1x0XHRcdFx0XHRcdFx0YWNjZXNzZXNfc3RhY2tfb25seSk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gZW1pdF9hdG9taWNfcm13KFx1MDAyNnByb2csIGluc24tXHUwMDNlaW1tLCBkc3RfcmVnLCBzcmNfcmVnLFxuIFx0XHRcdFx0XHRcdCAgICAgIGluc24tXHUwMDNlb2ZmLCBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHRicmVhaztcbi1cbiYjNDM7XHRcdH1cbiBcdFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9COlxuIFx0XHRjYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfQVRPTUlDIHwgQlBGX0g6XG4gXHRcdFx0aWYgKCFicGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoaW5zbikpIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggNzZiOGI3NjI3YTEwODUuLjg2ODEwMWVmNTAwMmFiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTcyMyw2ICYjNDM7NzIzLDggQEAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhIHtcbiBcdHUxNiBjb25zdF9yZWdfbWFwX21hc2s7XG4gXHR1MTYgY29uc3RfcmVnX3N1YnByb2dfbWFzaztcbiBcdHUzMiBjb25zdF9yZWdfdmFsc1sxMF07XG4mIzQzO1x0LyogaW5zdHJ1Y3Rpb24gY2FuIGFjY2VzcyBub24tc3RhY2sgbWVtb3J5ICovXG4mIzQzO1x0Ym9vbCBub25fc3RhY2tfYWNjZXNzO1xuIH07XG4gXG4gI2RlZmluZSBNQVhfVVNFRF9NQVBTIDY0IC8qIG1heCBudW1iZXIgb2YgbWFwcyBhY2Nlc3NlZCBieSBvbmUgZUJQRiBwcm9ncmFtICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDE0YWNiMjQ1NTc0NmZjLi4xZWJjZDI0N2VmNGUzZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0xMjEwLDEzICYjNDM7MTIxMCwxNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKTtcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4sXG4mIzQzO1x0XHRcdFx0ICAgICBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIHZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXgpO1xuICNlbHNlXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbi1cdFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuJiM0MztcdFx0XHRcdFx0XHQgICB1MzIgb2ZmLFxuJiM0MztcdFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLFxuJiM0MztcdFx0XHRcdFx0XHQgICB1MzIgbGVuLFxuJiM0MztcdFx0XHRcdFx0XHQgICBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpXG4ge1xuIFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9LY29uZmlnIGIva2VybmVsL2JwZi9LY29uZmlnXG5pbmRleCBlYjNkZTM1NzM0ZjA5Mi4uZTFmMzg1MGQyZjVhMDcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvS2NvbmZpZ1xuQEAgLTE3LDYgJiM0MzsxNywxMCBAQCBjb25maWcgSEFWRV9DQlBGX0pJVFxuIGNvbmZpZyBIQVZFX0VCUEZfSklUXG4gXHRib29sXG4gXG4mIzQzOyMgS0FTQU4gc3VwcG9ydCBmb3IgSklUIGNvbXBpbGVyXG4mIzQzO2NvbmZpZyBIQVZFX0VCUEZfSklUX0tBU0FOXG4mIzQzO1x0Ym9vbFxuJiM0MztcbiAjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XG4gIyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cbiBjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxuQEAgLTEwMSw0ICYjNDM7MTA1LDE3IEBAIGNvbmZpZyBCUEZfTFNNXG4gXG4gXHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gXG4mIzQzO2NvbmZpZyBCUEZfSklUX0tBU0FOXG4mIzQzO1x0Ym9vbFxuJiM0MztcdGRlcGVuZHMgb24gSEFWRV9FQlBGX0pJVF9LQVNBTlxuJiM0MztcdGRlcGVuZHMgb24gS0FTQU5fR0VORVJJQ1xuJiM0MztcdGRlcGVuZHMgb24gS0FTQU5fVk1BTExPQ1xuJiM0MztcdGRlcGVuZHMgb24gQlBGX0pJVFxuJiM0MztcdGRlZmF1bHQgeSBpZiBLQVNBTlxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIE1ha2VzIEpJVCBjb21waWxlciBpbnNlcnQgZ2VuZXJpYyBvdXRsaW5lIEtBU0FOIGNoZWNrcyBpbiBCUEZcbiYjNDM7XHQgIHByb2dyYW1zIHdoZW4gdGhleSBhcmUgaW5zZXJ0ZWQgaW4gdGhlIGtlcm5lbC4gVGhpcyBmZWF0dXJlIGlzXG4mIzQzO1x0ICBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgdGhlIG5lZWRlZCBzZXQgb2YgS0FTQU4gYW5kIEJQRlxuJiM0MztcdCAgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGVuYWJsZWQuXG4mIzQzO1xuIGVuZG1lbnUgIyBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xuaW5kZXggNmUxOWEwMzBkYTZmMTMuLjFlMThiOTk5ZjFiNTY1IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY29yZS5jXG5AQCAtMTU5OCw3ICYjNDM7MTU5OCw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChlbnYpXG4tXHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcbiYjNDM7XHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuLCByZXdyaXR0ZW4gLSAxKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShjbG9uZSwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCAxMmE4YTRlYjc1N2YxOC4uZmVlZTFmMzNkZTlkNTUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtMTUyLDEyICYjNDM7MTUyLDI1IEBAIHN0YXRpYyBpbnQgZ2V0X2NhbGxlZV9zdGFja19kZXB0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7c3RhdGljIGJvb2wgaXNfbWVtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9TVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1NUWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX0xEWClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gfHxcbiYjNDM7XHRcdEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTVNYIHx8XG4mIzQzO1x0XHRCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIHNpbmdsZSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuaVtvZmZdIGluc3RydWN0aW9uIHdhcyByZXBsYWNlZCB3aXRoIHRoZSByYW5nZVxuICAqIGluc25pW29mZiwgb2ZmICYjNDM7IGNudCkuICBBZGp1c3QgY29ycmVzcG9uZGluZyBpbnNuX2F1eF9kYXRhIGJ5IGNvcHlpbmdcbiAgKiBbMCwgb2ZmKSBhbmQgW29mZiwgZW5kKSB0byBuZXcgbG9jYXRpb25zLCBzbyB0aGUgcGF0Y2hlZCByYW5nZSBzdGF5cyB6ZXJvXG4gICovXG4gc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHRcdCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLCB1MzIgb2ZmLCB1MzIgY250KVxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLCB1MzIgb2ZmLCB1MzIgY250LFxuJiM0MztcdFx0XHRcdCBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpXG4ge1xuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpkYXRhID0gZW52LVx1MDAzZWluc25fYXV4X2RhdGE7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBuZXdfcHJvZy1cdTAwM2VpbnNuc2k7XG5AQCAtMTcxLDggJiM0MzsxODQsMTQgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdCAqL1xuIFx0ZGF0YVtvZmZdLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSk7XG4gXG4tXHRpZiAoY250ID09IDEpXG4mIzQzO1x0aWYgKGNudCA9PSAxKSB7XG4mIzQzO1x0XHQvKiBBIG5vbi1tZW1vcnkgYWNjZXNzaW5nIGluc24gY291bGQgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGFcbiYjNDM7XHRcdCAqIG1lbW9yeSBhY2Nlc3NpbmcgaW5zbiwgc3lzdGVtYXRpY2FsbHkgbWFyayBpdCBmb3Igbm9uLXN0YWNrXG4mIzQzO1x0XHQgKiBhY2Nlc3NcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGF0YVtvZmZdLm5vbl9zdGFja19hY2Nlc3MgPSBpc19tZW1faW5zbihpbnNuKTtcbiBcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcdHByb2dfbGVuID0gbmV3X3Byb2ctXHUwMDNlbGVuO1xuIFxuIFx0bWVtbW92ZShkYXRhICYjNDM7IG9mZiAmIzQzOyBjbnQgLSAxLCBkYXRhICYjNDM7IG9mZixcbkBAIC0xODIsNyAmIzQzOzIwMSwxOSBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHQvKiBFeHBhbmQgaW5zbmlbb2ZmXSYjMzk7cyBzZWVuIGNvdW50IHRvIHRoZSBwYXRjaGVkIHJhbmdlLiAqL1xuIFx0XHRkYXRhW2ldLnNlZW4gPSBvbGRfc2VlbjtcbiBcdFx0ZGF0YVtpXS56ZXh0X2RzdCA9IGluc25faGFzX2RlZjMyKGluc24gJiM0MzsgaSk7XG4mIzQzO1x0XHRpZiAoaSA9PSBvZmYgJiM0MzsgaW5zbl9vZmZfaW5fcGF0Y2gpIHtcbiYjNDM7XHRcdFx0ZGF0YVtpXS5ub25fc3RhY2tfYWNjZXNzID0gZGF0YVtvZmYgJiM0MzsgY250IC0gMV0ubm9uX3N0YWNrX2FjY2VzcztcbiYjNDM7XHRcdFx0ZGF0YVtvZmYgJiM0MzsgY250IC0gMV0ubm9uX3N0YWNrX2FjY2VzcyA9IGZhbHNlO1xuJiM0MztcdFx0fSBlbHNlIGlmIChpc19tZW1faW5zbihpbnNuICYjNDM7IGkpKSB7XG4mIzQzO1x0XHRcdGRhdGFbaV0ubm9uX3N0YWNrX2FjY2VzcyA9IHRydWU7XG4mIzQzO1x0XHR9XG4gXHR9XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBMYXN0IHNsb3QgaW5zdHJ1Y3Rpb24gY291bGQgYmUgYSBuZXdseSBnZW5lcmF0ZWRcbiYjNDM7XHQgKiBCUEZfU1QvQlBGX0xEWC9CUEZfU1RYXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlzX21lbV9pbnNuKGluc24gJiM0Mzsgb2ZmICYjNDM7IGNudCAtIDEpIFx1MDAyNlx1MDAyNiBpbnNuX29mZl9pbl9wYXRjaCAhPSBjbnQgLSAxKVxuJiM0MztcdFx0ZGF0YVtvZmYgJiM0MzsgY250IC0gMV0ubm9uX3N0YWNrX2FjY2VzcyA9IHRydWU7XG4gXG4gXHQvKlxuIFx0ICogVGhlIGluZGlyZWN0X3RhcmdldCBmbGFnIG9mIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiB3YXMgbW92ZWQgdG8gdGhlIGxhc3Qgb2YgdGhlXG5AQCAtMjQ1LDcgJiM0MzsyNzYsOCBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfcG9rZV9kZXNjcyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsIHUzMiBsZW4pXG4gfVxuIFxuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxuJiM0MztcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbixcbiYjNDM7XHRcdFx0XHQgICAgIHMzMiBpbnNuX29mZl9pbl9wYXRjaClcbiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nO1xuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpuZXdfZGF0YSA9IE5VTEw7XG5AQCAtMjY5LDcgJiM0MzszMDEsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbiBcdFx0XHRcdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW29mZl0ub3JpZ19pZHgpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbi1cdGFkanVzdF9pbnNuX2F1eF9kYXRhKGVudiwgbmV3X3Byb2csIG9mZiwgbGVuKTtcbiYjNDM7XHRhZGp1c3RfaW5zbl9hdXhfZGF0YShlbnYsIG5ld19wcm9nLCBvZmYsIGxlbiwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuIFx0YWRqdXN0X3N1YnByb2dfc3RhcnRzKGVudiwgb2ZmLCBsZW4pO1xuIFx0YWRqdXN0X2luc25fYXJyYXlzKGVudiwgb2ZmLCBsZW4pO1xuIFx0YWRqdXN0X3Bva2VfZGVzY3MobmV3X3Byb2csIG9mZiwgbGVuKTtcbkBAIC02NjgsNyAmIzQzOzcwMCw3IEBAIGludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0cGF0Y2ggPSB6ZXh0X3BhdGNoO1xuIFx0XHRwYXRjaF9sZW4gPSAyO1xuIGFwcGx5X3BhdGNoX2J1ZmZlcjpcbi1cdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgYWRqX2lkeCwgcGF0Y2gsIHBhdGNoX2xlbik7XG4mIzQzO1x0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBhZGpfaWR4LCBwYXRjaCwgcGF0Y2hfbGVuLCAwKTtcbiBcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0ZW52LVx1MDAzZXByb2cgPSBuZXdfcHJvZztcbkBAIC03MTMsNyAmIzQzOzc0NSw3IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZltjbnQmIzQzOyYjNDM7XSA9IEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR18xLFxuIFx0XHRcdFx0XHRcdCAgICAgIC1zdWJwcm9nc1swXS5zdGFja19kZXB0aCk7XG4gXHRcdFx0aW5zbl9idWZbY250JiM0MzsmIzQzO10gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2lbMF07XG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQsIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdFx0XHRlbnYtXHUwMDNlcHJvZyA9IG5ld19wcm9nO1xuQEAgLTczNiw3ICYjNDM7NzY4LDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O3Byb2xvZ3VlIGlzIHRvbyBsb25nXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdFx0fSBlbHNlIGlmIChjbnQpIHtcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC03NTksNiAmIzQzOzc5Miw3IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHtcbiBcdFx0YnBmX2NvbnZlcnRfY3R4X2FjY2Vzc190IGNvbnZlcnRfY3R4X2FjY2VzcztcbiYjNDM7XHRcdHMzMiBpbnNuX29mZl9pbl9wYXRjaCA9IC0xO1xuIFx0XHR1OCBtb2RlO1xuIFxuIFx0XHRpZiAoZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaSAmIzQzOyBkZWx0YV0ubm9zcGVjKSB7XG5AQCAtNzY4LDcgJiM0Mzs4MDIsOCBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9TVF9OT1NQRUMoKTtcbiBcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247XG4gXHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1Zjtcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC04NDEsNyAmIzQzOzg3Niw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247XG4gXHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9TVF9OT1NQRUMoKTtcbiBcdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMCk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTg1NiwxNiAmIzQzOzg5MiwyMCBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aWYgKCFvcHMtXHUwMDNlY29udmVydF9jdHhfYWNjZXNzKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0Y29udmVydF9jdHhfYWNjZXNzID0gb3BzLVx1MDAzZWNvbnZlcnRfY3R4X2FjY2VzcztcbiYjNDM7XHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFBUUl9UT19TT0NLRVQ6XG4gXHRcdGNhc2UgUFRSX1RPX1NPQ0tfQ09NTU9OOlxuIFx0XHRcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl9zb2NrX2NvbnZlcnRfY3R4X2FjY2VzcztcbiYjNDM7XHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFBUUl9UT19UQ1BfU09DSzpcbiBcdFx0XHRjb252ZXJ0X2N0eF9hY2Nlc3MgPSBicGZfdGNwX3NvY2tfY29udmVydF9jdHhfYWNjZXNzO1xuJiM0MztcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IDA7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgUFRSX1RPX1hEUF9TT0NLOlxuIFx0XHRcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl94ZHBfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3M7XG4mIzQzO1x0XHRcdGluc25fb2ZmX2luX3BhdGNoID0gMDtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBQVFJfVE9fQlRGX0lEOlxuIFx0XHRjYXNlIFBUUl9UT19CVEZfSUQgfCBQVFJfVU5UUlVTVEVEOlxuQEAgLTk3MSw3ICYjNDM7MTAxMSw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdFx0XHQgICAgICAgc2l6ZSAqIDgsIDApO1xuIFxuIHBhdGNoX2luc25fYnVmOlxuLVx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuIFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE0NjQsNyAmIzQzOzE1MDUsNyBAQCBzdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdFxuIFx0ICogb25lcyBmb3IgdGhlIGhpZGRlbiBzdWJwcm9nLiBIZW5jZSBhbGwgb2YgdGhlIGFkanVzdG1lbnQgb3BlcmF0aW9uc1xuIFx0ICogaW4gYnBmX3BhdGNoX2luc25fZGF0YSBhcmUgbm8tb3BzLlxuIFx0ICovXG4tXHRwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbiAtIDEsIHBhdGNoLCBsZW4pO1xuJiM0MztcdHByb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuIC0gMSwgcGF0Y2gsIGxlbiwgLTEpO1xuIFx0aWYgKCFwcm9nKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbkBAIC0xNTQ5LDcgJiM0MzsxNTkwLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFxuIFx0XHRcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCAwKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTU2OSw2ICYjNDM7MTYxMSw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRib29sIGlzX3NkaXYgPSBpc2RpdiBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gMTtcbiBcdFx0XHRib29sIGlzX3Ntb2QgPSAhaXNkaXYgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmID09IDE7XG4gXHRcdFx0c3RydWN0IGJwZl9pbnNuICpwYXRjaCA9IGluc25fYnVmO1xuJiM0MztcdFx0XHRzMzIgaW5zbl9vZmZfaW5fcGF0Y2g7XG4gXG4gXHRcdFx0aWYgKGlzX3NkaXYpIHtcbiBcdFx0XHRcdC8qIFtSLFddeCBzZGl2IDAgLVx1MDAzZSAwXG5AQCAtMTU5NSw2ICYjNDM7MTYzOCw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xuIFx0XHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9ICppbnNuO1xuIFx0XHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiYjNDM7XHRcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IGNudCAtIDE7XG4gXHRcdFx0fSBlbHNlIGlmIChpc19zbW9kKSB7XG4gXHRcdFx0XHQvKiBbUixXXXggbW9kIDAgLVx1MDAzZSBbUixXXXggKi9cbiBcdFx0XHRcdC8qIFtSLFddeCBtb2QgLTEgLVx1MDAzZSAwICovXG5AQCAtMTYxMSw2ICYjNDM7MTY1NSw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfTU9WMzJfSU1NKGluc24tXHUwMDNlZHN0X3JlZywgMCk7XG4gXHRcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbiBcdFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSAqaW5zbjtcbiYjNDM7XHRcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IHBhdGNoIC0gaW5zbl9idWYgLSAxO1xuIFxuIFx0XHRcdFx0aWYgKCFpczY0KSB7XG4gXHRcdFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xuQEAgLTE2MjYsMTIgJiM0MzsxNjcxLDE0IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xuIFx0XHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9ICppbnNuO1xuIFx0XHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiYjNDM7XHRcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IGNudCAtIDE7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdC8qIFtSLFddeCBtb2QgMCAtXHUwMDNlIFtSLFddeCAqL1xuIFx0XHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9SQVdfSU5TTigoaXM2NCA/IEJQRl9KTVAgOiBCUEZfSk1QMzIpIHxcbiBcdFx0XHRcdFx0XHRcdEJQRl9KRVEgfCBCUEZfSywgaW5zbi1cdTAwM2VzcmNfcmVnLFxuIFx0XHRcdFx0XHRcdFx0MCwgMSAmIzQzOyAoaXM2NCA/IDAgOiAxKSwgMCk7XG4gXHRcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247XG4mIzQzO1x0XHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSBwYXRjaCAtIGluc25fYnVmIC0gMTtcbiBcbiBcdFx0XHRcdGlmICghaXM2NCkge1xuIFx0XHRcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbkBAIC0xNjQwLDcgJiM0MzsxNjg3LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCBpbnNuX29mZl9pbl9wYXRjaCk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE2NTYsNiAmIzQzOzE3MDQsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdCAgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1gpKSB7XG4gXHRcdFx0c3RydWN0IGJwZl9pbnNuICpwYXRjaCA9IGluc25fYnVmO1xuIFx0XHRcdHU2NCB1YWRkcmVzc19saW1pdCA9IGJwZl9hcmNoX3VhZGRyZXNzX2xpbWl0KCk7XG4mIzQzO1x0XHRcdHMzMiBpbnNuX29mZl9pbl9wYXRjaDtcbiBcbiBcdFx0XHRpZiAoIXVhZGRyZXNzX2xpbWl0KVxuIFx0XHRcdFx0Z290byBuZXh0X2luc247XG5AQCAtMTY2NiwxMSAmIzQzOzE3MTUsMTMgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9SU0gsIEJQRl9SRUdfQVgsIDMyKTtcbiBcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pMRSwgQlBGX1JFR19BWCwgdWFkZHJlc3NfbGltaXQgXHUwMDNlXHUwMDNlIDMyLCAyKTtcbiBcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247XG4mIzQzO1x0XHRcdGluc25fb2ZmX2luX3BhdGNoID0gcGF0Y2ggLSBpbnNuX2J1ZiAtIDE7XG4gXHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XG4gXHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9NT1Y2NF9JTU0oaW5zbi1cdTAwM2Vkc3RfcmVnLCAwKTtcbiBcbiBcdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xNjkwLDcgJiM0MzsxNzQxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMCk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE3NDMsNyAmIzQzOzE3OTUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfTVVMLCBvZmZfcmVnLCAtMSk7XG4gXHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTc4OCw3ICYjNDM7MTg0MSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1Zls2XSA9IEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR18xMCwgQlBGX1JFR19BWCwgc3RhY2tfb2ZmX2NudCk7XG4gXHRcdFx0Y250ID0gNztcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIDMpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xODA5LDcgJiM0MzsxODYzLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGluc25fYnVmWzNdID0gQlBGX1NUWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEwLCBCUEZfUkVHX0FYLCBzdGFja19vZmYpO1xuIFx0XHRcdGNudCA9IDQ7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCAyKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTgzMCw3ICYjNDM7MTg4NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpZiAoY250ID09IDApXG4gXHRcdFx0XHRnb3RvIG5leHRfaW5zbjtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xOTE1LDcgJiM0MzsxOTcxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0XHRcdFx0XHQgbWFwKS1cdTAwM2VpbmRleF9tYXNrKTtcbiBcdFx0XHRpbnNuX2J1ZlsyXSA9ICppbnNuO1xuIFx0XHRcdGNudCA9IDM7XG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTk0OCw3ICYjNDM7MjAwNSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlsyXSA9ICppbnNuO1xuIFx0XHRcdGNudCA9IDM7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTk2Nyw3ICYjNDM7MjAyNSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlsxXSA9ICppbnNuO1xuIFx0XHRcdGNudCA9IDI7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjAwNyw4ICYjNDM7MjA2Niw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdFx0XHR9XG4gXG4tXHRcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLFxuLVx0XHRcdFx0XHRcdFx0ICAgICAgIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShcbiYjNDM7XHRcdFx0XHRcdGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCwgLTEpO1xuIFx0XHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjA5MSw3ICYjNDM7MjE1MCw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRjbnQgPSAzO1xuIFxuIFx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuLVx0XHRcdFx0XHRcdCAgICAgICBjbnQpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTIxMTksNyAmIzQzOzIxNzgsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbMF0gPSBCUEZfQUxVMzJfUkVHKEJQRl9YT1IsIEJQRl9SRUdfMCwgQlBGX1JFR18wKTtcbiBcdFx0XHRjbnQgPSAxO1xuICNlbmRpZlxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMTM3LDcgJiM0MzsyMTk3LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGluc25fYnVmWzJdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG4gXHRcdFx0Y250ID0gMztcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjE3MSw3ICYjNDM7MjIzMiw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZltjbnQmIzQzOyYjNDM7XSA9IEJQRl9KTVBfQSgxKTtcbiBcdFx0XHRpbnNuX2J1ZltjbnQmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjIwMyw3ICYjNDM7MjI2NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdGNudCA9IDE7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMjI5LDcgJiM0MzsyMjkyLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0Y250ID0gMjtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTIyNDUsNyAmIzQzOzIzMDksOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0LyogTG9hZCBJUCBhZGRyZXNzIGZyb20gY3R4IC0gMTYgKi9cbiBcdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIC0xNik7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIDEpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIDEsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjMwMCw3ICYjNDM7MjM2NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlsxMF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUVOT0VOVCk7XG4gXHRcdFx0Y250ID0gMTE7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTIzMTgsNyAmIzQzOzIzODQsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfQVRPTUlDX09QKEJQRl9EVywgQlBGX1hDSEcsIEJQRl9SRUdfMSwgQlBGX1JFR18wLCAwKTtcbiBcdFx0XHRjbnQgPSAyO1xuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMzg2LDcgJiM0MzsyNDUzLDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHQvKiBDb3B5IGZpcnN0IGFjdHVhbCBpbnNuIHRvIHByZXNlcnZlIGl0ICovXG4gXHRcdGluc25fYnVmW2NudCYjNDM7JiM0MztdID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpW3N1YnByb2dfc3RhcnRdO1xuIFxuLVx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBzdWJwcm9nX3N0YXJ0LCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHN1YnByb2dfc3RhcnQsIGluc25fYnVmLCBjbnQsIGNudCAtIDEpO1xuIFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRlbnYtXHUwMDNlcHJvZyA9IHByb2cgPSBuZXdfcHJvZztcbkBAIC0yNDg1LDcgJiM0MzsyNTUyLDcgQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZyAqaW5saW5lX2JwZl9sb29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpbnNuX2J1ZltjbnQmIzQzOyYjNDM7XSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR184LCBCUEZfUkVHXzEwLCByOF9vZmZzZXQpO1xuIFxuIFx0KnRvdGFsX2NudCA9IGNudDtcbi1cdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHBvc2l0aW9uLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBwb3NpdGlvbiwgaW5zbl9idWYsIGNudCwgLTEpO1xuIFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0cmV0dXJuIG5ld19wcm9nO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNTFmNzk2NWQ0MmUzMjQuLjEyNDZjZThmNWYwZjQ2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0zMTQ0LDYgJiM0MzszMTQ0LDExIEBAIHN0YXRpYyB2b2lkIG1hcmtfaW5kaXJlY3RfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgpXG4gXHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpZHhdLmluZGlyZWN0X3RhcmdldCA9IHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBtYXJrX25vbl9zdGFja19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeClcbiYjNDM7e1xuJiM0MztcdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2lkeF0ubm9uX3N0YWNrX2FjY2VzcyA9IHRydWU7XG4mIzQzO31cbiYjNDM7XG4gI2RlZmluZSBMUl9GUkFNRU5PX0JJVFNcdDRcbiAjZGVmaW5lIExSX1NQSV9CSVRTXHQ2XG4gI2RlZmluZSBMUl9FTlRSWV9CSVRTXHQoTFJfU1BJX0JJVFMgJiM0MzsgTFJfRlJBTUVOT19CSVRTICYjNDM7IDEpXG5AQCAtNjMzMyw2ICYjNDM7NjMzOCwxMCBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxuIFx0XHRlbHNlXG4gXHRcdFx0Y29lcmNlX3JlZ190b19zaXplX3N4KFx1MDAyNnJlZ3NbdmFsdWVfcmVnbm9dLCBzaXplKTtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19TVEFDSylcbiYjNDM7XHRcdG1hcmtfbm9uX3N0YWNrX2FjY2VzcyhlbnYsIGluc25faWR4KTtcbiYjNDM7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaW5zbl9hcnJheS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuY1xuaW5kZXggMDIyMmE5YTVkMDc2MTQuLjM3YzQwNWZjMmIwZDIzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuY1xuQEAgLTIyNyw0MiAmIzQzOzIyNyw2IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2luY29ycmVjdF9pbmRleCh2b2lkKVxuIFx0Y2hlY2tfbWlkX2luc25faW5kZXgoKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZXRfYnBmX2ppdF9oYXJkZW4oY2hhciAqbGV2ZWwpXG4te1xuLVx0Y2hhciBvbGRfbGV2ZWw7XG4tXHRpbnQgZXJyID0gLTE7XG4tXHRpbnQgZmQgPSAtMTtcbi1cbi1cdGZkID0gb3BlbihcJiMzNDsvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW5cJiMzNDssIE9fUkRXUiB8IE9fTk9OQkxPQ0spO1xuLVx0aWYgKGZkIFx1MDAzYyAwKSB7XG4tXHRcdEFTU0VSVF9GQUlMKFwmIzM0O29wZW4gLi4uL2JwZl9qaXRfaGFyZGVuIHJldHVybmVkICVkIChlcnJubz0lZClcJiMzNDssIGZkLCBlcnJubyk7XG4tXHRcdHJldHVybiAtMTtcbi1cdH1cbi1cbi1cdGVyciA9IHJlYWQoZmQsIFx1MDAyNm9sZF9sZXZlbCwgMSk7XG4tXHRpZiAoZXJyICE9IDEpIHtcbi1cdFx0QVNTRVJUX0ZBSUwoXCYjMzQ7cmVhZCBmcm9tIC4uLi9icGZfaml0X2hhcmRlbiByZXR1cm5lZCAlZCAoZXJybm89JWQpXCYjMzQ7LCBlcnIsIGVycm5vKTtcbi1cdFx0ZXJyID0gLTE7XG4tXHRcdGdvdG8gZW5kO1xuLVx0fVxuLVxuLVx0bHNlZWsoZmQsIDAsIFNFRUtfU0VUKTtcbi1cbi1cdGVyciA9IHdyaXRlKGZkLCBsZXZlbCwgMSk7XG4tXHRpZiAoZXJyICE9IDEpIHtcbi1cdFx0QVNTRVJUX0ZBSUwoXCYjMzQ7d3JpdGUgdG8gLi4uL2JwZl9qaXRfaGFyZGVuIHJldHVybmVkICVkIChlcnJubz0lZClcJiMzNDssIGVyciwgZXJybm8pO1xuLVx0XHRlcnIgPSAtMTtcbi1cdFx0Z290byBlbmQ7XG4tXHR9XG4tXG4tXHRlcnIgPSAwO1xuLVx0KmxldmVsID0gb2xkX2xldmVsO1xuLWVuZDpcbi1cdGlmIChmZCBcdTAwM2U9IDApXG4tXHRcdGNsb3NlKGZkKTtcbi1cdHJldHVybiBlcnI7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIGNoZWNrX2JsaW5kbmVzcyh2b2lkKVxuIHtcbiBcdHN0cnVjdCBicGZfaW5zbiBpbnNuc1tdID0ge1xuQEAgLTI3Miw3ICYjNDM7MjM2LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tfYmxpbmRuZXNzKHZvaWQpXG4gXHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcbiBcdFx0QlBGX0VYSVRfSU5TTigpLFxuIFx0fTtcbi1cdGludCBwcm9nX2ZkID0gLTEsIG1hcF9mZDtcbiYjNDM7XHRpbnQgcHJvZ19mZCA9IC0xLCBtYXBfZmQsIHJldDtcbiBcdHN0cnVjdCBicGZfaW5zbl9hcnJheV92YWx1ZSB2YWwgPSB7fTtcbiBcdGNoYXIgYnBmX2ppdF9oYXJkZW4gPSAmIzM5O0AmIzM5OzsgLyogbm9uLWV4aXpzdGluZyB2YWx1ZSAqL1xuIFx0aW50IGk7XG5AQCAtMjkxLDcgJiM0MzsyNTUsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19ibGluZG5lc3Modm9pZClcbiBcdFx0Z290byBjbGVhbnVwO1xuIFxuIFx0YnBmX2ppdF9oYXJkZW4gPSAmIzM5OzImIzM5Oztcbi1cdGlmIChzZXRfYnBmX2ppdF9oYXJkZW4oXHUwMDI2YnBmX2ppdF9oYXJkZW4pKSB7XG4mIzQzO1x0cmV0ID0gc2V0X2JwZl9qaXRfaGFyZGVuKFx1MDAyNmJwZl9qaXRfaGFyZGVuKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O3NldCBicGZfaml0X2hhcmRlblwmIzM0OykpIHtcbiBcdFx0YnBmX2ppdF9oYXJkZW4gPSAmIzM5O0AmIzM5OzsgLyogb3BlbiwgcmVhZCBvciB3cml0ZSBmYWlsZWQgPVx1MDAzZSBubyB3cml0ZSB3YXMgZG9uZSAqL1xuIFx0XHRnb3RvIGNsZWFudXA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2thc2FuLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjAwNmI5MmVlMTMxYWNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2thc2FuLmNcbkBAIC0wLDAgJiM0MzsxLDQyNSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRlc3RzIHZhbGlkYXRpbmcgdGhhdCBLQVNBTiByZXBvcnRzIGFyZSBwcm9wZXJseSBpbnN0cnVtZW50ZWQgYW5kXG4mIzQzOyAqIGdlbmVyYXRlZCBvbiBhIHdpZGUgdmFyaWV0eSBvZiBpbnN0cnVjdGlvbnMuIFRoZSBydW5uaW5nIGtlcm5lbCBuZWVkc1xuJiM0MzsgKiBrYXNhbl9tdWx0aV9zaG90IHRvIHJ1biBtdWx0aXBsZSBrYXNhbi1nZW5lcmF0aW5nIHN1YnRlc3RzIGF0IG9uY2VcbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5wcml2X2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtrYXNhbi5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a2FzYW5faGFyZGVuLnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBTVUJURVNUX05BTUVfTUFYX0xFTlx0MTI4XG4mIzQzOyNkZWZpbmUgUFJPR19OQU1FX01BWF9MRU5cdDEyOFxuJiM0MztcbiYjNDM7I2RlZmluZSBNQVhfTE9HX1NJWkVcdFx0KDggKiAxMDI0KVxuJiM0MzsjZGVmaW5lIFJFQURfQ0hVTktfU0laRVx0XHQyNTZcbiYjNDM7XG4mIzQzOyNkZWZpbmUgS0FTQU5fUEFUVEVSTl9TTEFCX1VBRiBcJiMzNDtCVUc6IEtBU0FOOiBzbGFiLXVzZS1hZnRlci1mcmVlIFwmIzM0OyBcXFxuJiM0MztcdFwmIzM0O2luIGJwZl9wcm9nXyUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XyVzXCYjMzQ7XG4mIzQzOyNkZWZpbmUgS0FTQU5fUEFUVEVSTl9SRVBPUlQgXCYjMzQ7JXMgb2Ygc2l6ZSAlZCBhdCBhZGRyXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgY2hhciBrbG9nX2J1ZmZlcltNQVhfTE9HX1NJWkVdO1xuJiM0MztzdGF0aWMgY2hhciByZWNvcmRbTUFYX0xPR19TSVpFXTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB0ZXN0X3NwZWMge1xuJiM0MztcdGNoYXIgKnByb2dfdHlwZTtcbiYjNDM7XHRib29sIGlzX3dyaXRlO1xuJiM0MztcdGJvb2wgb25seV8zMl9vcl82NDtcbiYjNDM7XHRib29sIG5lZWRzX2xvYWRfYWNxX3N0b3JlX3JlbDtcbiYjNDM7XHRib29sIHNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nO1xuJiM0MztcdGJvb2wgc2tpcF9vbl9zdGFja190ZXN0aW5nO1xuJiM0MztcdGludCBydW5fc2l6ZTtcbiYjNDM7XHRib29sIGV4cGVjdF9ub19yZXBvcnQ7XG4mIzQzO1x0Ym9vbCBybmRfaGkzMjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBrYXNhbl93cml0ZV92YWwge1xuJiM0MztcdF9fdTggZGF0YV8xO1xuJiM0MztcdF9fdTE2IGRhdGFfMjtcbiYjNDM7XHRfX3UzMiBkYXRhXzQ7XG4mIzQzO1x0X191NjQgZGF0YV84O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHRlc3RfY3R4IHtcbiYjNDM7XHRfX3U4ICBwcm9nX3RhZ1tCUEZfVEFHX1NJWkVdO1xuJiM0MztcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XG4mIzQzO1x0aW50ICphY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRib29sIHNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsO1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbiYjNDM7XHRjaGFyIHByb2dfbmFtZVtTVUJURVNUX05BTUVfTUFYX0xFTl07XG4mIzQzO1x0aW50IGtsb2dfZmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG9wZW5fa2VybmVsX2xvZ3Modm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKFwmIzM0Oy9kZXYva21zZ1wmIzM0OywgT19SRE9OTFkgfCBPX05PTkJMT0NLKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBza2lwX2tlcm5lbF9sb2dzKGludCBmZClcbiYjNDM7e1xuJiM0MztcdGxzZWVrKGZkLCAwLCBTRUVLX0VORCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmVhZF9rZXJuZWxfbG9ncyhpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IG1heF9sZW4pXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgdG90YWwgPSAwO1xuJiM0MztcdHNzaXplX3QgbjtcbiYjNDM7XG4mIzQzO1x0YnVmWzBdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHR3aGlsZSAoMSkge1xuJiM0MztcdFx0Y2hhciAqbXNnLCAqZW9sO1xuJiM0MztcdFx0c2l6ZV90IGxlbjtcbiYjNDM7XG4mIzQzO1x0XHRuID0gcmVhZChmZCwgcmVjb3JkLCBzaXplb2YocmVjb3JkKSAtIDEpO1xuJiM0MztcdFx0aWYgKG4gXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0aWYgKGVycm5vID09IEVBR0FJTilcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0cmV0dXJuIG47XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZWNvcmRbbl0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBFYWNoIGttc2cgcmVjb3JkIHN0YXJ0cyB3aXRoIHNvbWUgbWV0YWRhdGEsIHNlcGFyYXRlZFxuJiM0MztcdFx0ICogZnJvbSB0aGUgYWN0dWFsIGNvbnRlbnQgYnkgYSBzZW1pLWNvbG9uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG1zZyA9IHN0cmNocihyZWNvcmQsICYjMzk7OyYjMzk7KTtcbiYjNDM7XHRcdGlmICghbXNnKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdG1zZyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRlb2wgPSBzdHJjaHIobXNnLCAmIzM5O1xcbiYjMzk7KTtcbiYjNDM7XHRcdGlmIChlb2wpXG4mIzQzO1x0XHRcdCplb2wgPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcbiYjNDM7XHRcdGxlbiA9IHN0cmxlbihtc2cpO1xuJiM0MztcdFx0aWYgKHRvdGFsICYjNDM7IGxlbiAmIzQzOyAyIFx1MDAzZSBtYXhfbGVuKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdG1lbWNweShidWYgJiM0MzsgdG90YWwsIG1zZywgbGVuKTtcbiYjNDM7XHRcdHRvdGFsICYjNDM7PSBsZW47XG4mIzQzO1x0XHRidWZbdG90YWwmIzQzOyYjNDM7XSA9ICYjMzk7XFxuJiMzOTs7XG4mIzQzO1x0XHRidWZbdG90YWxdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0b3RhbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGVja19rYXNhbl9yZXBvcnRfaW5fa2VybmVsX2xvZ3MoY2hhciAqYnVmLCBzdHJ1Y3QgdGVzdF9jdHggKmN0eCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgYm9vbCBpc193cml0ZSwgaW50IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGFjY2Vzc19sb2dbUkVBRF9DSFVOS19TSVpFXTtcbiYjNDM7XHRjaGFyICprYXNhbl9yZXBvcnRfc3RhcnQ7XG4mIzQzO1x0aW50IG5zaXplO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihhY2Nlc3NfbG9nLCBSRUFEX0NIVU5LX1NJWkUsIEtBU0FOX1BBVFRFUk5fU0xBQl9VQUYsXG4mIzQzO1x0XHQgY3R4LVx1MDAzZXByb2dfdGFnWzBdLCBjdHgtXHUwMDNlcHJvZ190YWdbMV0sIGN0eC1cdTAwM2Vwcm9nX3RhZ1syXSxcbiYjNDM7XHRcdCBjdHgtXHUwMDNlcHJvZ190YWdbM10sIGN0eC1cdTAwM2Vwcm9nX3RhZ1s0XSwgY3R4LVx1MDAzZXByb2dfdGFnWzVdLFxuJiM0MztcdFx0IGN0eC1cdTAwM2Vwcm9nX3RhZ1s2XSwgY3R4LVx1MDAzZXByb2dfdGFnWzddLCBjdHgtXHUwMDNlcHJvZ19uYW1lKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNlYXJjaGVkIGthc2FuIHJlcG9ydCBpcyB2YWxpZCBpZlxuJiM0MztcdCAqIC0gaXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGthc2FuIHBhdHRlcm5cbiYjNDM7XHQgKiAtIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmF1bHR5IGFjY2VzcyBpcyBmb3VuZCBzb21ld2hlcmVcbiYjNDM7XHQgKiAgIGFmdGVyIHRoZSBoZWFkZXIgKG5vdCBuZWNlc3NhcmlseSBvbiB0aGUgdmVyeSBuZXh0IGxpbmUsXG4mIzQzO1x0ICogICBiZWNhdXNlIG90aGVyIGtlcm5lbCBtZXNzYWdlcyBtYXkgaW50ZXJsZWF2ZSlcbiYjNDM7XHQgKiAtIGZhdWx0eSBhY2Nlc3MgcHJvcGVydGllcyBtYXRjaCB0aGUgdGVzdGVkIHR5cGUgYW5kIHNpemVcbiYjNDM7XHQgKi9cbiYjNDM7XHRrYXNhbl9yZXBvcnRfc3RhcnQgPSBzdHJzdHIoYnVmLCBhY2Nlc3NfbG9nKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFrYXNhbl9yZXBvcnRfc3RhcnQpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0bnNpemUgPSBzbnByaW50ZihhY2Nlc3NfbG9nLCBSRUFEX0NIVU5LX1NJWkUsIEtBU0FOX1BBVFRFUk5fUkVQT1JULFxuJiM0MztcdFx0XHQgaXNfd3JpdGUgPyBcJiMzNDtXcml0ZVwmIzM0OyA6IFwmIzM0O1JlYWRcJiMzNDssIHNpemUpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXN0cnN0cihrYXNhbl9yZXBvcnRfc3RhcnQsIGFjY2Vzc19sb2cpKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBleGVjX3N1YnRlc3Qoc3RydWN0IHRlc3RfY3R4ICpjdHgsIHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsXG4mIzQzO1x0XHRcdCBpbnQgYWNjZXNzX3NpemUsIGJvb2wgb25fc3RhY2spXG4mIzQzO3tcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm87XG4mIzQzO1x0dWludDhfdCBidWZbRVRIX0hMRU5dID0gezB9O1xuJiM0MztcdGludCByZXQsIHByb2dfZmQ7XG4mIzQzO1x0X191MzIgaW5mb19sZW47XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2Vwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoY3R4LVx1MDAzZW9iaixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBjdHgtXHUwMDNlcHJvZ19uYW1lKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoY3R4LVx1MDAzZXByb2csIFwmIzM0O2ZpbmQgdGVzdCBwcm9nXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIGluZm9fbGVuKTtcbiYjNDM7XHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC1cdTAwM2Vwcm9nKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChwcm9nX2ZkLCBcJiMzNDtnZXQgcHJvZyBmZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQocHJvZ19mZCwgXHUwMDI2aW5mbywgXHUwMDI2aW5mb19sZW4pO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7ZmV0Y2ggbG9hZGVkIHByb2dyYW0gaW5mb1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bWVtY3B5KGN0eC1cdTAwM2Vwcm9nX3RhZywgaW5mby50YWcsIEJQRl9UQUdfU0laRSk7XG4mIzQzO1xuJiM0MztcdHNraXBfa2VybmVsX2xvZ3MoY3R4LVx1MDAzZWtsb2dfZmQpO1xuJiM0MztcbiYjNDM7XHR0b3B0cy5zeiA9IHNpemVvZihzdHJ1Y3QgYnBmX3Rlc3RfcnVuX29wdHMpO1xuJiM0MztcdHRvcHRzLmRhdGFfc2l6ZV9pbiA9IEVUSF9ITEVOO1xuJiM0MztcdHRvcHRzLmRhdGFfaW4gPSBidWY7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2VhY2Nlc3Nfc2l6ZSlcbiYjNDM7XHRcdCpjdHgtXHUwMDNlYWNjZXNzX3NpemUgPSBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChjdHgtXHUwMDNlcHJvZyksXG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZ0b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtydW4gcHJvZ1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfa2VybmVsX2xvZ3MoY3R4LVx1MDAzZWtsb2dfZmQsIGtsb2dfYnVmZmVyLCBNQVhfTE9HX1NJWkUpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKHJldCwgMCwgXCYjMzQ7cmVhZCBrZXJuZWwgbG9nc1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJldCA9IGNoZWNrX2thc2FuX3JlcG9ydF9pbl9rZXJuZWxfbG9ncyhrbG9nX2J1ZmZlciwgY3R4LFxuJiM0MztcdFx0XHRcdFx0XHR0ZXN0LVx1MDAzZWlzX3dyaXRlLCBhY2Nlc3Nfc2l6ZSk7XG4mIzQzO1x0aWYgKG9uX3N0YWNrIHx8IHRlc3QtXHUwMDNlZXhwZWN0X25vX3JlcG9ydClcbiYjNDM7XHRcdEFTU0VSVF9ORVEocmV0LCAwLCBcJiMzNDtubyByZXBvcnQgc2hvdWxkIGJlIGdlbmVyYXRlZFwmIzM0Oyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0QVNTRVJUX09LKHJldCwgXCYjMzQ7cmVwb3J0IHNob3VsZCBiZSBnZW5lcmF0ZWRcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydW5fc3VidGVzdF93aXRoX3NpemVfYW5kX2xvY2F0aW9uKHN0cnVjdCB0ZXN0X2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgaW50IGFjY2Vzc19zaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGJvb2wgb25fc3RhY2spXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHN1YnRlc3RfbmFtZVtTVUJURVNUX05BTUVfTUFYX0xFTl07XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0LVx1MDAzZXNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nKSB7XG4mIzQzO1x0XHRzbnByaW50ZihzdWJ0ZXN0X25hbWUsIFNVQlRFU1RfTkFNRV9NQVhfTEVOLCBcJiMzNDslc1wmIzM0OyxcbiYjNDM7XHRcdFx0IHRlc3QtXHUwMDNlcHJvZ190eXBlKTtcbiYjNDM7XHRcdHN0cm5jcHkoY3R4LVx1MDAzZXByb2dfbmFtZSwgdGVzdC1cdTAwM2Vwcm9nX3R5cGUsIFBST0dfTkFNRV9NQVhfTEVOKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c25wcmludGYoc3VidGVzdF9uYW1lLCBTVUJURVNUX05BTUVfTUFYX0xFTiwgXCYjMzQ7JXNfJWRfJXNcJiMzNDssXG4mIzQzO1x0XHRcdCB0ZXN0LVx1MDAzZXByb2dfdHlwZSwgYWNjZXNzX3NpemUsXG4mIzQzO1x0XHRcdCBvbl9zdGFjayA/IFwmIzM0O29uX3N0YWNrXCYjMzQ7IDogXCYjMzQ7bm90X29uX3N0YWNrXCYjMzQ7KTtcbiYjNDM7XHRcdHNucHJpbnRmKGN0eC1cdTAwM2Vwcm9nX25hbWUsIFBST0dfTkFNRV9NQVhfTEVOLCBcJiMzNDslc18lc1wmIzM0OyxcbiYjNDM7XHRcdFx0IHRlc3QtXHUwMDNlcHJvZ190eXBlLFxuJiM0MztcdFx0XHQgb25fc3RhY2sgPyBcJiMzNDtvbl9zdGFja1wmIzM0OyA6IFwmIzM0O25vdF9vbl9zdGFja1wmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfX3N0YXJ0X3N1YnRlc3Qoc3VidGVzdF9uYW1lKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3QtXHUwMDNlbmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWwpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGV4ZWNfc3VidGVzdChjdHgsIHRlc3QsIGFjY2Vzc19zaXplLCBvbl9zdGFjayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCxcbiYjNDM7XHRcdFx0XHQgIGludCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX3N1YnRlc3Rfd2l0aF9zaXplX2FuZF9sb2NhdGlvbihjdHgsIHRlc3QsIHNpemUsIGZhbHNlKTtcbiYjNDM7XHRpZiAoIXRlc3QtXHUwMDNlc2tpcF9vbl9zdGFja190ZXN0aW5nKVxuJiM0MztcdFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplX2FuZF9sb2NhdGlvbihjdHgsIHRlc3QsIHNpemUsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydW5fc3VidGVzdChzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0LVx1MDAzZXNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nKSB7XG4mIzQzO1x0XHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCB0ZXN0LVx1MDAzZXJ1bl9zaXplKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdC1cdTAwM2Vvbmx5XzMyX29yXzY0KSB7XG4mIzQzO1x0XHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCAxKTtcbiYjNDM7XHRcdHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShjdHgsIHRlc3QsIDIpO1xuJiM0MztcdH1cbiYjNDM7XHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCA0KTtcbiYjNDM7XHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCA4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX2JsaW5kaW5nX3N1YnRlc3Qodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X3NwZWMgYmxpbmRpbmdfc3BlYyA9IHtcbiYjNDM7XHRcdC5wcm9nX3R5cGUgPSBcJiMzNDtzdF9ibGluZGVkXCYjMzQ7LFxuJiM0MztcdFx0LmlzX3dyaXRlID0gdHJ1ZSxcbiYjNDM7XHR9O1xuJiM0MztcdGNoYXIgYnBmX2ppdF9oYXJkZW4gPSAmIzM5OzImIzM5OztcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5faGFyZGVuICpza2VsO1xuJiM0MztcdHN0cnVjdCB0ZXN0X2N0eCAqY3R4O1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c3RfYmxpbmRlZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGN0eCA9IGNhbGxvYygxLCBzaXplb2YoKmN0eCkpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihjdHgsIFwmIzM0O2FsbG9jIGJsaW5kaW5nIGN0eFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0Y3R4LVx1MDAzZWtsb2dfZmQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldF9icGZfaml0X2hhcmRlbihcdTAwMjZicGZfaml0X2hhcmRlbikpXG4mIzQzO1x0XHRnb3RvIGZyZWVfY3R4O1xuJiM0MztcbiYjNDM7XHRza2VsID0ga2FzYW5faGFyZGVuX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O29wZW4gYW5kIGxvYWQgYmxpbmRlZCBwcm9nXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZWtsb2dfZmQgPSBvcGVuX2tlcm5lbF9sb2dzKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfRkQoY3R4LVx1MDAzZWtsb2dfZmQsIFwmIzM0O29wZW4ga2VybmVsIGxvZ3NcJiMzNDspKVxuJiM0MztcdFx0Z290byBkZXN0cm95O1xuJiM0MztcbiYjNDM7XHRjdHgtXHUwMDNlb2JqID0gc2tlbC1cdTAwM2VvYmo7XG4mIzQzO1x0c3RybmNweShjdHgtXHUwMDNlcHJvZ19uYW1lLCBcJiMzNDtzdF9ibGluZGVkXCYjMzQ7LCBQUk9HX05BTUVfTUFYX0xFTik7XG4mIzQzO1xuJiM0MztcdGV4ZWNfc3VidGVzdChjdHgsIFx1MDAyNmJsaW5kaW5nX3NwZWMsIDEsIGZhbHNlKTtcbiYjNDM7XG4mIzQzO2Rlc3Ryb3k6XG4mIzQzO1x0Y2xvc2UoY3R4LVx1MDAzZWtsb2dfZmQpO1xuJiM0MztcdGthc2FuX2hhcmRlbl9fZGVzdHJveShza2VsKTtcbiYjNDM7cmVzdG9yZTpcbiYjNDM7XHRzZXRfYnBmX2ppdF9oYXJkZW4oXHUwMDI2YnBmX2ppdF9oYXJkZW4pO1xuJiM0MztmcmVlX2N0eDpcbiYjNDM7XHRmcmVlKGN0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0LnByb2dfdHlwZSA9IFwmIzM0O3N0XCYjMzQ7LFxuJiM0MztcdFx0LmlzX3dyaXRlID0gdHJ1ZVxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnByb2dfdHlwZSA9IFwmIzM0O3N0eFwmIzM0OyxcbiYjNDM7XHRcdC5pc193cml0ZSA9IHRydWVcbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5wcm9nX3R5cGUgPSBcJiMzNDtsZHhcJiMzNDssXG4mIzQzO1x0XHQuaXNfd3JpdGUgPSBmYWxzZVxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnByb2dfdHlwZSA9IFwmIzM0O3NpbXBsZV9hdG9taWNcJiMzNDssXG4mIzQzO1x0XHQuaXNfd3JpdGUgPSBmYWxzZSxcbiYjNDM7XHRcdC5vbmx5XzMyX29yXzY0ID0gdHJ1ZVxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnByb2dfdHlwZSA9IFwmIzM0O2xvYWRfYWNxdWlyZVwmIzM0OyxcbiYjNDM7XHRcdC5pc193cml0ZSA9IGZhbHNlLFxuJiM0MztcdFx0Lm5lZWRzX2xvYWRfYWNxX3N0b3JlX3JlbCA9IHRydWVcbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5wcm9nX3R5cGUgPSBcJiMzNDtzdG9yZV9yZWxlYXNlXCYjMzQ7LFxuJiM0MztcdFx0LmlzX3dyaXRlID0gdHJ1ZSxcbiYjNDM7XHRcdC5uZWVkc19sb2FkX2FjcV9zdG9yZV9yZWwgPSB0cnVlXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQucHJvZ190eXBlID0gXCYjMzQ7bGR4X3BhdGNoZWRcJiMzNDssXG4mIzQzO1x0XHQuaXNfd3JpdGUgPSBmYWxzZSxcbiYjNDM7XHRcdC5za2lwX211bHRpX3NpemVfdGVzdGluZyA9IHRydWUsXG4mIzQzO1x0XHQuc2tpcF9vbl9zdGFja190ZXN0aW5nID0gdHJ1ZSxcbiYjNDM7XHRcdC5ydW5fc2l6ZSA9IDQsXG4mIzQzO1x0XHQucm5kX2hpMzIgPSB0cnVlXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQucHJvZ190eXBlID0gXCYjMzQ7bGR4X3BhdGNoZWRfb25fc3RhY2tcJiMzNDssXG4mIzQzO1x0XHQuaXNfd3JpdGUgPSBmYWxzZSxcbiYjNDM7XHRcdC5za2lwX211bHRpX3NpemVfdGVzdGluZyA9IHRydWUsXG4mIzQzO1x0XHQuc2tpcF9vbl9zdGFja190ZXN0aW5nID0gdHJ1ZSxcbiYjNDM7XHRcdC5ydW5fc2l6ZSA9IDQsXG4mIzQzO1x0XHQuZXhwZWN0X25vX3JlcG9ydCA9IHRydWUsXG4mIzQzO1x0XHQucm5kX2hpMzIgPSB0cnVlXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQucHJvZ190eXBlID0gXCYjMzQ7dmVyaWZpZXJfcGF0aHNfc3RhY2tfYW5kX25vbl9zdGFja1wmIzM0OyxcbiYjNDM7XHRcdC5pc193cml0ZSA9IHRydWUsXG4mIzQzO1x0XHQuc2tpcF9tdWx0aV9zaXplX3Rlc3RpbmcgPSB0cnVlLFxuJiM0MztcdFx0LnNraXBfb25fc3RhY2tfdGVzdGluZyA9IHRydWUsXG4mIzQzO1x0XHQucnVuX3NpemUgPSAxXG4mIzQzO1x0fVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2thc2FuKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0O1xuJiM0MztcdHN0cnVjdCB0ZXN0X2N0eCAqY3R4O1xuJiM0MztcdHN0cnVjdCBrYXNhbiAqc2tlbDtcbiYjNDM7XHRfX3UzMiBrZXkgPSAwO1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGN0eCA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHRlc3RfY3R4KSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGN0eCwgXCYjMzQ7YWxsb2MgdGVzdCBjdHhcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlzX2ppdF9lbmFibGVkKCkgfHwgIWdldF9rYXNhbl9qaXRfZW5hYmxlZCgpKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRnb3RvIGVuZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBrYXNhbl9fb3BlbigpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtvcGVuIHByb2dcJiMzNDspKVxuJiM0MztcdFx0Z290byBlbmQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xuJiM0MztcbiYjNDM7XHRcdGlmICghdGVzdHNbaV0ucm5kX2hpMzIpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShza2VsLVx1MDAzZW9iaixcbiYjNDM7XHRcdFx0XHRcdFx0XHR0ZXN0c1tpXS5wcm9nX3R5cGUpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0tfUFRSKHByb2csIFwmIzM0O2ZpbmQgcm5kX2hpMzIgcHJvZ1wmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gZGVzdHJveTtcbiYjNDM7XHRcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgQlBGX0ZfVEVTVF9STkRfSEkzMik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhrYXNhbl9fbG9hZChza2VsKSwgXCYjMzQ7bG9hZCBwcm9nXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZGVzdHJveTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZW9iaiA9IHNrZWwtXHUwMDNlb2JqO1xuJiM0MztcdGN0eC1cdTAwM2VhY2Nlc3Nfc2l6ZSA9IFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWFjY2Vzc19zaXplO1xuJiM0MztcdGN0eC1cdTAwM2Vza2lwX2xvYWRfYWNxX3N0b3JlX3JlbCA9IHNrZWwtXHUwMDNlZGF0YS1cdTAwM2Vza2lwX2xvYWRfYWNxX3N0b3JlX3JlbF90ZXN0cztcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZWtsb2dfZmQgPSBvcGVuX2tlcm5lbF9sb2dzKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfRkQoY3R4LVx1MDAzZWtsb2dfZmQsIFwmIzM0O29wZW4ga2VybmVsIGxvZ3NcJiMzNDspKVxuJiM0MztcdFx0Z290byBkZXN0cm95O1xuJiM0MztcbiYjNDM7XHQvKiBGaWxsIG1hcCB3aXRoIHJlY29nbml6YWJsZSB2YWx1ZXMgKi9cbiYjNDM7XHRyZXQgPSBicGZfbWFwX19sb29rdXBfZWxlbShza2VsLVx1MDAzZW1hcHMudGVzdF9tYXAsIFx1MDAyNmtleSwgc2l6ZW9mKGtleSksXG4mIzQzO1x0XHRcdFx0ICAgXHUwMDI2dmFsLCBzaXplb2YodmFsKSwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtnZXQgbWFwXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xvc2U7XG4mIzQzO1x0dmFsLmRhdGFfMSA9IDB4QUE7XG4mIzQzO1x0dmFsLmRhdGFfMiA9IDB4QkJCQjtcbiYjNDM7XHR2YWwuZGF0YV80ID0gMHhDQ0NDQ0NDQztcbiYjNDM7XHR2YWwuZGF0YV84ID0gMHhEREREREREREREREREREREO1xuJiM0MztcdHJldCA9IGJwZl9tYXBfX3VwZGF0ZV9lbGVtKHNrZWwtXHUwMDNlbWFwcy50ZXN0X21hcCwgXHUwMDI2a2V5LCBzaXplb2Yoa2V5KSxcbiYjNDM7XHRcdFx0XHQgICBcdTAwMjZ2YWwsIHNpemVvZih2YWwpLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O3NldCBtYXBcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbG9zZTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh0ZXN0cyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR0ZXN0ID0gXHUwMDI2dGVzdHNbaV07XG4mIzQzO1x0XHRydW5fc3VidGVzdChjdHgsIHRlc3QpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCbGluZGluZyBzdWJ0ZXN0IGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgYXMgaXQgbmVlZHMgdGhlXG4mIzQzO1x0ICogY29ycmVzcG9uZGluZyBwcm9ncmFtIHRvIGJlIGxvYWRlZCB3aXRoIGJwZl9qaXRfaGFyZGVuIHJhaXNlZFxuJiM0MztcdCAqL1xuJiM0MztcdHJ1bl9ibGluZGluZ19zdWJ0ZXN0KCk7XG4mIzQzO1xuJiM0MztjbG9zZTpcbiYjNDM7XHRjbG9zZShjdHgtXHUwMDNla2xvZ19mZCk7XG4mIzQzO2Rlc3Ryb3k6XG4mIzQzO1x0a2FzYW5fX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO2VuZDpcbiYjNDM7XHRmcmVlKGN0eCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rYXNhbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgyZGRjZTMwNTlhZWUxXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW4uY1xuQEAgLTAsMCAmIzQzOzEsMzk0IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX21pc2MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiYjNDM7XG4mIzQzO2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07XG4mIzQzO2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTtcbiYjNDM7XG4mIzQzO2ludCBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBrYXNhbl93cml0ZV92YWwge1xuJiM0MztcdF9fdTggZGF0YV8xO1xuJiM0MztcdF9fdTE2IGRhdGFfMjtcbiYjNDM7XHRfX3UzMiBkYXRhXzQ7XG4mIzQzO1x0X191NjQgZGF0YV84O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0MztcdF9fdHlwZShrZXksIF9fdTMyKTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrYXNhbl93cml0ZV92YWwpO1xuJiM0Mzt9IHRlc3RfbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGN4L2luZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCBzdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdHZhbC5kYXRhXzEgPSAweEFBO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0dmFsLmRhdGFfMiA9IDB4QUE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDQ6XG4mIzQzO1x0XHR2YWwuZGF0YV80ID0gMHhBQTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgODpcbiYjNDM7XHRcdHZhbC5kYXRhXzggPSAweEFBO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y3gvaW5ncmVzc1wmIzM0OylcbiYjNDM7aW50IHN0X25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4mIzQzO1x0X191MzIga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0dmFsLVx1MDAzZWRhdGFfMSA9IDB4QUE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDI6XG4mIzQzO1x0XHR2YWwtXHUwMDNlZGF0YV8yID0gMHhBQTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdHZhbC1cdTAwM2VkYXRhXzQgPSAweEFBO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA4OlxuJiM0MztcdFx0dmFsLVx1MDAzZWRhdGFfOCA9IDB4QUE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgc3R4X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0dmFsLmRhdGFfMSA9IGFjY2Vzc19zaXplO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0dmFsLmRhdGFfMiA9IGFjY2Vzc19zaXplO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA0OlxuJiM0MztcdFx0dmFsLmRhdGFfNCA9IGFjY2Vzc19zaXplO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA4OlxuJiM0MztcdFx0dmFsLmRhdGFfOCA9IGFjY2Vzc19zaXplO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y3gvaW5ncmVzc1wmIzM0OylcbiYjNDM7aW50IHN0eF9ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuJiM0MztcdF9fdTMyIGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdHZhbC1cdTAwM2VkYXRhXzEgPSBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHZhbC1cdTAwM2VkYXRhXzIgPSBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdHZhbC1cdTAwM2VkYXRhXzQgPSBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgODpcbiYjNDM7XHRcdHZhbC1cdTAwM2VkYXRhXzggPSBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGN4L2luZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCBsZHhfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbiYjNDM7XHRjYXNlIDE6XG4mIzQzO1x0XHRfX3NpbmsodmFsLmRhdGFfMSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDI6XG4mIzQzO1x0XHRfX3NpbmsodmFsLmRhdGFfMik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDQ6XG4mIzQzO1x0XHRfX3NpbmsodmFsLmRhdGFfNCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDg6XG4mIzQzO1x0XHRfX3NpbmsodmFsLmRhdGFfOCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgbGR4X25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4mIzQzO1x0X191MzIga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0X19zaW5rKHZhbC1cdTAwM2VkYXRhXzEpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0X19zaW5rKHZhbC1cdTAwM2VkYXRhXzIpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA0OlxuJiM0MztcdFx0X19zaW5rKHZhbC1cdTAwM2VkYXRhXzQpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA4OlxuJiM0MztcdFx0X19zaW5rKHZhbC1cdTAwM2VkYXRhXzgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y3gvaW5ncmVzc1wmIzM0OylcbiYjNDM7aW50IGxkeF9wYXRjaGVkKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcbiYjNDM7XHRfX3UzMiBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRlc3RfbWFwLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdF9fc2luayh2YWwtXHUwMDNlZGF0YV80KTtcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgbGR4X3BhdGNoZWRfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdF9fc2luayh2YWwuZGF0YV80KTtcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgc2ltcGxlX2F0b21pY19vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnZhbC5kYXRhXzQsIDQpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA4OlxuJiM0MztcdFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2dmFsLmRhdGFfOCwgOCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgc2ltcGxlX2F0b21pY19ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuJiM0MztcdF9fdTMyIGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzQsIDQpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA4OlxuJiM0MztcdFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2dmFsLVx1MDAzZWRhdGFfOCwgOCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmZGVmIF9fQlBGX0ZFQVRVUkVfTE9BRF9BQ1FfU1RPUkVfUkVMXG4mIzQzO2Jvb2wgc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWxfdGVzdHMgU0VDKFwmIzM0Oy5kYXRhXCYjMzQ7KSA9IDA7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGN4L2luZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCBsb2FkX2FjcXVpcmVfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbiYjNDM7XHRjYXNlIDE6XG4mIzQzO1x0XHRfX2F0b21pY19sb2FkX24oXHUwMDI2dmFsLmRhdGFfMSwgX19BVE9NSUNfQUNRVUlSRSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDI6XG4mIzQzO1x0XHRfX2F0b21pY19sb2FkX24oXHUwMDI2dmFsLmRhdGFfMiwgX19BVE9NSUNfQUNRVUlSRSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDQ6XG4mIzQzO1x0XHRfX2F0b21pY19sb2FkX24oXHUwMDI2dmFsLmRhdGFfNCwgX19BVE9NSUNfQUNRVUlSRSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDg6XG4mIzQzO1x0XHRfX2F0b21pY19sb2FkX24oXHUwMDI2dmFsLmRhdGFfOCwgX19BVE9NSUNfQUNRVUlSRSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgbG9hZF9hY3F1aXJlX25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4mIzQzO1x0X191MzIga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzEsIF9fQVRPTUlDX0FDUVVJUkUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzIsIF9fQVRPTUlDX0FDUVVJUkUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA0OlxuJiM0MztcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzQsIF9fQVRPTUlDX0FDUVVJUkUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA4OlxuJiM0MztcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzgsIF9fQVRPTUlDX0FDUVVJUkUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y3gvaW5ncmVzc1wmIzM0OylcbiYjNDM7aW50IHN0b3JlX3JlbGVhc2Vfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbiYjNDM7XHRjYXNlIDE6XG4mIzQzO1x0XHRfX2F0b21pY19zdG9yZV9uKFx1MDAyNnZhbC5kYXRhXzEsIDB4QUEsIF9fQVRPTUlDX1JFTEVBU0UpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0X19hdG9taWNfc3RvcmVfbihcdTAwMjZ2YWwuZGF0YV8yLCAweEJCQkIsIF9fQVRPTUlDX1JFTEVBU0UpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA0OlxuJiM0MztcdFx0X19hdG9taWNfc3RvcmVfbihcdTAwMjZ2YWwuZGF0YV80LCAweENDQ0NDQ0NDLCBfX0FUT01JQ19SRUxFQVNFKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgODpcbiYjNDM7XHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLmRhdGFfOCwgMHhERERERERERERERERERERELFxuJiM0MztcdFx0XHRcdCBfX0FUT01JQ19SRUxFQVNFKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGN4L2luZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCBzdG9yZV9yZWxlYXNlX25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4mIzQzO1x0X191MzIga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0X19hdG9taWNfc3RvcmVfbihcdTAwMjZ2YWwtXHUwMDNlZGF0YV8xLCAweEFBLCBfX0FUT01JQ19SRUxFQVNFKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLVx1MDAzZWRhdGFfMiwgMHhCQkJCLCBfX0FUT01JQ19SRUxFQVNFKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLVx1MDAzZWRhdGFfNCwgMHhDQ0NDQ0NDQywgX19BVE9NSUNfUkVMRUFTRSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDg6XG4mIzQzO1x0XHRfX2F0b21pY19zdG9yZV9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzgsIDB4RERERERERERERERERERERCxcbiYjNDM7XHRcdFx0XHQgX19BVE9NSUNfUkVMRUFTRSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0Mztib29sIHNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsX3Rlc3RzIFNFQyhcJiMzNDsuZGF0YVwmIzM0OykgPSAxO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y3gvaW5ncmVzc1wmIzM0OylcbiYjNDM7aW50IHZlcmlmaWVyX3BhdGhzX3N0YWNrX2FuZF9ub25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCBzdGFja192YWwgPSB7fTtcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4mIzQzO1x0dm9pZCAqcHRyO1xuJiM0MztcdF9fdTMyIGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGFjY2Vzc19zaXplKVxuJiM0MztcdFx0cHRyID0gdmFsO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHB0ciA9IFx1MDAyNnN0YWNrX3ZhbDtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZigqdmFsKSk7XG4mIzQzO1x0KihfX3U4ICopcHRyID0gMHhBQTtcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2YoKnZhbCkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuX2hhcmRlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuX2hhcmRlbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgwOGQ3ZGE2NDQyMTYyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmNcbkBAIC0wLDAgJiM0MzsxLDQxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzO2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07XG4mIzQzO2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBrYXNhbl93cml0ZV92YWwge1xuJiM0MztcdF9fdTggZGF0YV8xO1xuJiM0MztcdF9fdTE2IGRhdGFfMjtcbiYjNDM7XHRfX3UzMiBkYXRhXzQ7XG4mIzQzO1x0X191NjQgZGF0YV84O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0MztcdF9fdHlwZShrZXksIF9fdTMyKTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrYXNhbl93cml0ZV92YWwpO1xuJiM0Mzt9IHRlc3RfbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGN4L2luZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCBzdF9ibGluZGVkKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcbiYjNDM7XHRfX3UzMiBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRlc3RfbWFwLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHZhbC1cdTAwM2VkYXRhXzEgPSAweEFBO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbmluZGV4IDMwZjFjZDIzMDkzY2JlLi41ZDZhODM0ZjdkNzU3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC0yNzEsNiAmIzQzOzI3MSwyNiBAQCBfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19wdXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KHN0cnVjdCBwcm9nX3Rlc3RfbWVtYmVyXG4gXHQgKi9cbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQlBGX0pJVF9LQVNBTlxuJiM0MztcbiYjNDM7ZXh0ZXJuIHZvaWQga2FzYW5fcG9pc29uKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCB1OCB2YWx1ZSwgYm9vbCBpbml0KTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgS0FTQU5fU0xBQl9GUkVFIDB4RkJcbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2b2lkICptZW0sIHUzMiBtZW1fX3N6KVxuJiM0Mzt7XG4mIzQzO1x0a2FzYW5fcG9pc29uKG1lbSwgbWVtX19zeiwgS0FTQU5fU0xBQl9GUkVFLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opXG4mIzQzO3tcbiYjNDM7XHRrYXNhbl9wb2lzb24obWVtLCBtZW1fX3N6LCAweDAwLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opIHsgfVxuJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIHUzMiBtZW1fX3N6KSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIF9fYnBmX2tmdW5jIHN0cnVjdCBicGZfdGVzdG1vZF9jdHggKlxuIGJwZl90ZXN0bW9kX2N0eF9jcmVhdGUoaW50ICplcnIpXG4ge1xuQEAgLTc0MCw2ICYjNDM7NzYwLDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzEpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2thc2FuX3BvaXNvbilcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbilcbiBCVEZfS0ZVTkNTX0VORChicGZfdGVzdG1vZF9jb21tb25fa2Z1bmNfaWRzKVxuIFxuIEJURl9JRF9MSVNUKGJwZl90ZXN0bW9kX2R0b3JfaWRzKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xuaW5kZXggYzk3MGU3NzkzZGZjYmMuLjczN2Y2NjhiMzVlMjNiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcbkBAIC01MTksNiAmIzQzOzUxOSwzOCBAQCBib29sIGlzX2ppdF9lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gZW5hYmxlZDtcbiB9XG4gXG4mIzQzO2ludCBzZXRfYnBmX2ppdF9oYXJkZW4oY2hhciAqbGV2ZWwpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIG9sZF9sZXZlbDtcbiYjNDM7XHRpbnQgZXJyID0gLTE7XG4mIzQzO1x0aW50IGZkID0gLTE7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihcJiMzNDsvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW5cJiMzNDssIE9fUkRXUiB8IE9fTk9OQkxPQ0spO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcmVhZChmZCwgXHUwMDI2b2xkX2xldmVsLCAxKTtcbiYjNDM7XHRpZiAoZXJyICE9IDEpIHtcbiYjNDM7XHRcdGVyciA9IC0xO1xuJiM0MztcdFx0Z290byBlbmQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsc2VlayhmZCwgMCwgU0VFS19TRVQpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB3cml0ZShmZCwgbGV2ZWwsIDEpO1xuJiM0MztcdGlmIChlcnIgIT0gMSkge1xuJiM0MztcdFx0ZXJyID0gLTE7XG4mIzQzO1x0XHRnb3RvIGVuZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IDA7XG4mIzQzO1x0KmxldmVsID0gb2xkX2xldmVsO1xuJiM0MztlbmQ6XG4mIzQzO1x0aWYgKGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBzdGFja19tcHJvdGVjdCh2b2lkKVxuIHtcbiBcdHZvaWQgKmJ1ZjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmhcbmluZGV4IDJlZGM2ZmI3ZmM1MjEyLi5lMDA2NDJhZmU4NmY0MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oXG5AQCAtNTksNiAmIzQzOzU5LDcgQEAgc3RydWN0IGJwZl9pbnNuO1xuIGludCBnZXRfeGxhdGVkX3Byb2dyYW0oaW50IGZkX3Byb2csIHN0cnVjdCBicGZfaW5zbiAqKmJ1ZiwgX191MzIgKmNudCk7XG4gaW50IHRlc3RpbmdfcHJvZ19mbGFncyh2b2lkKTtcbiBib29sIGlzX2ppdF9lbmFibGVkKHZvaWQpO1xuJiM0MztpbnQgc2V0X2JwZl9qaXRfaGFyZGVuKGNoYXIgKmxldmVsKTtcbiBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZCk7XG4gXG4gI2VuZGlmIC8qIF9fVEVTVElOR19IRUxQRVJTX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jXG5pbmRleCBmOTk3ZDdlYzhmZDA4Ni4uMTEyMDFiNjVhM2Q0YjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmNcbkBAIC0xNDIsMyAmIzQzOzE0Miw4IEBAIGJvb2wgZ2V0X3VucHJpdl9kaXNhYmxlZCh2b2lkKVxuIFx0fVxuIFx0cmV0dXJuIG1pdGlnYXRpb25zX29mZjtcbiB9XG4mIzQzO1xuJiM0Mztib29sIGdldF9rYXNhbl9qaXRfZW5hYmxlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNvbmZpZ19jb250YWlucyhcJiMzNDtDT05GSUdfQlBGX0pJVF9LQVNBTj15XCYjMzQ7KSA9PSAxO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuaFxuaW5kZXggMTUxZjY3MzI5NjY1MjIuLmJjNWY0Yzk1M2M5ZDZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oXG5AQCAtNSwzICYjNDM7NSw0IEBAXG4gI2RlZmluZSBVTlBSSVZfU1lTQ1RMIFwmIzM0O2tlcm5lbC91bnByaXZpbGVnZWRfYnBmX2Rpc2FibGVkXCYjMzQ7XG4gXG4gYm9vbCBnZXRfdW5wcml2X2Rpc2FibGVkKHZvaWQpO1xuJiM0Mztib29sIGdldF9rYXNhbl9qaXRfZW5hYmxlZCh2b2lkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMDoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUX0tBU0FOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfZG9fbWlzY19maXh1cHMmIzM0OywKICAgICYjMzQ7Y2hlY2tfbWVtX2FjY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIEtBU0FOIHN1cHBvcnQgdG8gdGhlIEJQRiBKSVQgY29tcGlsZXIgb24geDg2XzY0LCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZDZkZGY5NzA2YTg2OWJjNmQyNTVlMWM3ZDBhZTZmYmFkYjc5OWI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAyMDoxNDoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGJkYWQ5MGYyMTBlNGJmLi43MDVhOWFiODVmM2E5NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0yMzMsNiAmIzQzOzIzMyw3IEBAIGNvbmZpZyBYODYKIAlzZWxlY3QgSEFWRV9TQU1QTEVfRlRSQUNFX0RJUkVDVAlpZiBYODZfNjQKIAlzZWxlY3QgSEFWRV9TQU1QTEVfRlRSQUNFX0RJUkVDVF9NVUxUSQlpZiBYODZfNjQKIAlzZWxlY3QgSEFWRV9FQlBGX0pJVAomIzQzOwlzZWxlY3QgSEFWRV9FQlBGX0pJVF9LQVNBTgkJaWYgWDg2XzY0CiAJc2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MKIAlzZWxlY3QgSEFWRV9FSVNBCQkJaWYgWDg2XzMyCiAJc2VsZWN0IEhBVkVfRVhJVF9USFJFQUQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwppbmRleCBkZTc1MTVlYTFiZWFlOC4uNjVhMDBlODQ3OTljZDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTIxLDYgJiM0MzsyMSwxNyBAQAogI2luY2x1ZGUgJmx0O2FzbS91bndpbmQuaCZndDsKICNpbmNsdWRlICZsdDthc20vY2ZpLmgmZ3Q7CiAKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX0pJVF9LQVNBTikKJiM0Mzt2b2lkIF9fYXNhbl9sb2FkMSh2b2lkICpwKTsKJiM0Mzt2b2lkIF9fYXNhbl9zdG9yZTEodm9pZCAqcCk7CiYjNDM7dm9pZCBfX2FzYW5fbG9hZDIodm9pZCAqcCk7CiYjNDM7dm9pZCBfX2FzYW5fc3RvcmUyKHZvaWQgKnApOwomIzQzO3ZvaWQgX19hc2FuX2xvYWQ0KHZvaWQgKnApOwomIzQzO3ZvaWQgX19hc2FuX3N0b3JlNCh2b2lkICpwKTsKJiM0Mzt2b2lkIF9fYXNhbl9sb2FkOCh2b2lkICpwKTsKJiM0Mzt2b2lkIF9fYXNhbl9zdG9yZTgodm9pZCAqcCk7CiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgYm9vbCBhbGxfY2FsbGVlX3JlZ3NfdXNlZFs0XSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTsKIAogc3RhdGljIHU4ICplbWl0X2NvZGUodTggKnB0ciwgdTMyIGJ5dGVzLCB1bnNpZ25lZCBpbnQgbGVuKQpAQCAtMTExMCw2ICYjNDM7MTEyMSw5MCBAQCBzdGF0aWMgdm9pZCBtYXliZV9lbWl0XzFtb2QodTggKipwcHJvZywgdTMyIHJlZywgYm9vbCBpczY0KQogCSpwcHJvZyA9IHByb2c7CiB9CiAKJiM0MztzdGF0aWMgaW50IGVtaXRfa2FzYW5fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTggKipwcHJvZywKJiM0MzsJCQkgICAgdTMyIGFkZHJfcmVnLCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICppcCwKJiM0MzsJCQkgICAgYm9vbCBpc193cml0ZSwgYm9vbCBhY2Nlc3Nlc19zdGFja19vbmx5KQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9KSVRfS0FTQU4KJiM0MzsJdTMyIGJwZl9zaXplID0gQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CXMzMiBvZmYgPSBpbnNuLSZndDtvZmY7CiYjNDM7CXU4ICpwcm9nID0gKnBwcm9nOwomIzQzOwl2b2lkICprYXNhbl9mdW5jOwomIzQzOwomIzQzOwlpZiAoIWVudikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoYWNjZXNzZXNfc3RhY2tfb25seSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBEZXJpdmUgS0FTQU4gY2hlY2sgZnVuY3Rpb24gZnJvbSBhY2Nlc3MgdHlwZSBhbmQgc2l6ZSAqLwomIzQzOwlzd2l0Y2ggKGJwZl9zaXplKSB7CiYjNDM7CWNhc2UgQlBGX0I6CiYjNDM7CQlrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmUxIDogX19hc2FuX2xvYWQxOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0g6CiYjNDM7CQlrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmUyIDogX19hc2FuX2xvYWQyOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX1c6CiYjNDM7CQlrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmU0IDogX19hc2FuX2xvYWQ0OwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0RXOgomIzQzOwkJa2FzYW5fZnVuYyA9IGlzX3dyaXRlID8gX19hc2FuX3N0b3JlOCA6IF9fYXNhbl9sb2FkODsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU2F2ZSByYXggKi8KJiM0MzsJRU1JVDEoMHg1MCk7CiYjNDM7CS8qIFNhdmUgcmN4ICovCiYjNDM7CUVNSVQxKDB4NTEpOwomIzQzOwkvKiBTYXZlIHJkeCAqLwomIzQzOwlFTUlUMSgweDUyKTsKJiM0MzsJLyogU2F2ZSByc2kgKi8KJiM0MzsJRU1JVDEoMHg1Nik7CiYjNDM7CS8qIFNhdmUgcmRpICovCiYjNDM7CUVNSVQxKDB4NTcpOwomIzQzOwkvKiBTYXZlIHI4ICovCiYjNDM7CUVNSVQyKDB4NDEsIDB4NTApOwomIzQzOwkvKiBTYXZlIHI5ICovCiYjNDM7CUVNSVQyKDB4NDEsIDB4NTEpOwomIzQzOwomIzQzOwkvKiBtb3YgcmRpLCBhZGRyX3JlZyAqLwomIzQzOwlFTUlUX21vdihCUEZfUkVHXzEsIGFkZHJfcmVnKTsKJiM0MzsKJiM0MzsJLyogYWRkIHJkaSwgb2ZmIChpZiBvZmZzZXQgaXMgbm9uLXplcm8pICovCiYjNDM7CWlmIChvZmYpIHsKJiM0MzsJCWlmIChpc19pbW04KG9mZikpIHsKJiM0MzsJCQkvKiBhZGQgcmRpLCBpbW04ICovCiYjNDM7CQkJRU1JVDQoMHg0OCwgMHg4MywgMHhDNywgKHU4KW9mZik7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCS8qIGFkZCByZGksIGltbTMyICovCiYjNDM7CQkJRU1JVDNfb2ZmMzIoMHg0OCwgMHg4MSwgMHhDNywgb2ZmKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBZGp1c3QgaXAgdG8gYWNjb3VudCBmb3IgdGhlIGluc3RydW1lbnRhdGlvbiBnZW5lcmF0ZWQgc28gZmFyICovCiYjNDM7CWlwICYjNDM7PSAocHJvZyAtICpwcHJvZyk7CiYjNDM7CS8qIFdlIGVtaXQgYSBjYWxsLCBzbyB1cGRhdGUgY2FsbCBkZXB0aCBjb3VudGluZyAqLwomIzQzOwlpcCAmIzQzOz0geDg2X2NhbGxfZGVwdGhfZW1pdF9hY2NvdW50aW5nKCZhbXA7cHJvZywga2FzYW5fZnVuYywgaXApOwomIzQzOwkvKiBjYWxsIGthc2FuX2Z1bmMgKi8KJiM0MzsJaWYgKGVtaXRfY2FsbCgmYW1wO3Byb2csIGthc2FuX2Z1bmMsIGlwKSkKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwomIzQzOwlFTUlUMigweDQxLCAweDU5KTsKJiM0MzsJRU1JVDIoMHg0MSwgMHg1OCk7CiYjNDM7CUVNSVQxKDB4NUYpOwomIzQzOwlFTUlUMSgweDVFKTsKJiM0MzsJRU1JVDEoMHg1QSk7CiYjNDM7CUVNSVQxKDB4NTkpOwomIzQzOwlFTUlUMSgweDU4KTsKJiM0MzsKJiM0MzsJKnBwcm9nID0gcHJvZzsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0JQRl9KSVRfS0FTQU4gKi8KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogTERYOiBkc3RfcmVnID0gKih1OCopKHNyY19yZWcgJiM0Mzsgb2ZmKSAqLwogc3RhdGljIHZvaWQgZW1pdF9sZHgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZywgaW50IG9mZikKIHsKQEAgLTEzMTUsNiAmIzQzOzE0MTAsNjQgQEAgc3RhdGljIHZvaWQgZW1pdF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBpbmRleF9yZWcsIGludAogCSpwcHJvZyA9IHByb2c7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBlbWl0X3N0KHU4ICoqcHByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IGRzdF9yZWcsCiYjNDM7CQkgICAgczMyIG91dGdvaW5nX2FyZ19iYXNlLCB1MTYgb3V0Z29pbmdfcnNwKQomIzQzO3sKJiM0MzsJczMyIGltbTMyID0gaW5zbi0mZ3Q7aW1tOwomIzQzOwl1OCAqcHJvZyA9ICpwcHJvZzsKJiM0MzsJczMyIGluc25fb2ZmOwomIzQzOwomIzQzOwlzd2l0Y2ggKEJQRl9TSVpFKGluc24tJmd0O2NvZGUpKSB7CiYjNDM7CWNhc2UgQlBGX0I6CiYjNDM7CQlpZiAoaXNfZXJlZyhkc3RfcmVnKSkKJiM0MzsJCQlFTUlUMigweDQxLCAweEM2KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlFTUlUMSgweEM2KTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9IOgomIzQzOwkJaWYgKGlzX2VyZWcoZHN0X3JlZykpCiYjNDM7CQkJRU1JVDMoMHg2NiwgMHg0MSwgMHhDNyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJRU1JVDIoMHg2NiwgMHhDNyk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfVzoKJiM0MzsJCWlmIChpc19lcmVnKGRzdF9yZWcpKQomIzQzOwkJCUVNSVQyKDB4NDEsIDB4QzcpOwomIzQzOwkJZWxzZQomIzQzOwkJCUVNSVQxKDB4QzcpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0RXOgomIzQzOwkJaWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMgJmFtcDsmYW1wOyBpbnNuLSZndDtvZmYgPT0gLTgpIHsKJiM0MzsJCQkvKiBBcmcgNjogc3RvcmUgaW1tZWRpYXRlIGluIHI5IHJlZ2lzdGVyICovCiYjNDM7CQkJZW1pdF9tb3ZfaW1tNjQoJmFtcDtwcm9nLCBYODZfUkVHX1I5LCBpbW0zMiAmZ3Q7Jmd0OyAzMSwKJiM0MzsJCQkJICAgICAgICh1MzIpaW1tMzIpOwomIzQzOwkJCSpwcHJvZyA9IHByb2c7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwkJRU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4QzcpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW5zbl9vZmYgPSBpbnNuLSZndDtvZmY7CiYjNDM7CWlmIChkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TKSB7CiYjNDM7CQkvKgomIzQzOwkJICogQXJncyA3JiM0Mzs6IHJldmVyc2UgQlBGIG5lZ2F0aXZlIG9mZnNldHMgdG8KJiM0MzsJCSAqIHg4NiBwb3NpdGl2ZSByc3Agb2Zmc2V0cy4KJiM0MzsJCSAqIEJQRiBvZmY9LTE2IOKGkiBbcnNwJiM0MzswXSwgb2ZmPS0yNCDihpIgW3JzcCYjNDM7OF0sIC4uLgomIzQzOwkJICovCiYjNDM7CQlpbnNuX29mZiA9IG91dGdvaW5nX2FyZ19iYXNlIC0gb3V0Z29pbmdfcnNwIC0KJiM0MzsJCQlpbnNuX29mZiAtIDE2OwomIzQzOwkJZHN0X3JlZyA9IEJQRl9SRUdfRlA7CiYjNDM7CX0KJiM0MzsJaWYgKGlzX2ltbTgoaW5zbl9vZmYpKQomIzQzOwkJRU1JVDIoYWRkXzFyZWcoMHg0MCwgZHN0X3JlZyksIGluc25fb2ZmKTsKJiM0MzsJZWxzZQomIzQzOwkJRU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHg4MCwgZHN0X3JlZyksIGluc25fb2ZmKTsKJiM0MzsKJiM0MzsJRU1JVChpbW0zMiwgYnBmX3NpemVfdG9feDg2X2J5dGVzKEJQRl9TSVpFKGluc24tJmd0O2NvZGUpKSk7CiYjNDM7CSpwcHJvZyA9IHByb2c7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgZW1pdF9zdF9yMTIodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCBpbnQgb2ZmLCBpbnQgaW1tKQogewogCWVtaXRfc3RfaW5kZXgocHByb2csIHNpemUsIGRzdF9yZWcsIFg4Nl9SRUdfUjEyLCBvZmYsIGltbSk7CkBAIC0xNDIzLDE3ICYjNDM7MTU3NiwzMSBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtd19pbmRleCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgc2l6ZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgZHN0X3JlZywKLQkJCSAgICAgdTMyIHNyY19yZWcsIHMxNiBvZmYsIHU4IGJwZl9zaXplKQomIzQzO3N0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTggKipwcHJvZywKJiM0MzsJCQkgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTggKmlwLCB1MzIgZHN0X3JlZywKJiM0MzsJCQkgICAgIHUzMiBzcmNfcmVnLCBib29sIGFjY2Vzc2VzX3N0YWNrX29ubHkpCiB7CiYjNDM7CXUzMiBhdG9taWNfb3AgPSBpbnNuLSZndDtpbW07CiYjNDM7CWludCBlcnI7CiYjNDM7CiAJc3dpdGNoIChhdG9taWNfb3ApIHsKIAljYXNlIEJQRl9MT0FEX0FDUToKJiM0MzsJCWVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBwcHJvZywgc3JjX3JlZywgaW5zbiwgaXAsIGZhbHNlLAomIzQzOwkJCQkgICAgICAgYWNjZXNzZXNfc3RhY2tfb25seSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiAJCS8qIGRzdF9yZWcgPSBzbXBfbG9hZF9hY3F1aXJlKHNyY19yZWcgJiM0Mzsgb2ZmMTYpICovCi0JCWVtaXRfbGR4KHBwcm9nLCBicGZfc2l6ZSwgZHN0X3JlZywgc3JjX3JlZywgb2ZmKTsKJiM0MzsJCWVtaXRfbGR4KHBwcm9nLCBCUEZfU0laRShpbnNuLSZndDtjb2RlKSwgZHN0X3JlZywgc3JjX3JlZywKJiM0MzsJCQkgaW5zbi0mZ3Q7b2ZmKTsKIAkJYnJlYWs7CiAJY2FzZSBCUEZfU1RPUkVfUkVMOgomIzQzOwkJZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIHBwcm9nLCBkc3RfcmVnLCBpbnNuLCBpcCwgdHJ1ZSwKJiM0MzsJCQkJICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwogCQkvKiBzbXBfc3RvcmVfcmVsZWFzZShkc3RfcmVnICYjNDM7IG9mZjE2LCBzcmNfcmVnKSAqLwotCQllbWl0X3N0eChwcHJvZywgYnBmX3NpemUsIGRzdF9yZWcsIHNyY19yZWcsIG9mZik7CiYjNDM7CQllbWl0X3N0eChwcHJvZywgQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSksIGRzdF9yZWcsIHNyY19yZWcsCiYjNDM7CQkJIGluc24tJmd0O29mZik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX2VycigmIzM0O2JwZl9qaXQ6IHVua25vd24gYXRvbWljIGxvYWQvc3RvcmUgb3Bjb2RlICUwMnhcbiYjMzQ7LApAQCAtMTgxMSwxMCAmIzQzOzE5NzgsMTIgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICoKIAkJY29uc3QgczMyIGltbTMyID0gaW5zbi0mZ3Q7aW1tOwogCQl1MzIgZHN0X3JlZyA9IGluc24tJmd0O2RzdF9yZWc7CiAJCXUzMiBzcmNfcmVnID0gaW5zbi0mZ3Q7c3JjX3JlZzsKJiM0MzsJCWJvb2wgYWNjZXNzZXNfc3RhY2tfb25seTsKIAkJdTggYjIgPSAwLCBiMyA9IDA7CiAJCXU4ICpzdGFydF9vZl9sZHg7CiAJCXM2NCBqbXBfb2Zmc2V0OwogCQlzMzIgaW5zbl9vZmY7CiYjNDM7CQlpbnQgaW5zbl9pZHg7CiAJCXU4IGptcF9jb25kOwogCQl1OCAqZnVuYzsKIAkJaW50IG5vcHM7CkBAIC0xODMxLDYgJiM0MzsyMDAwLDEwIEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqCiAJCQlFTUlUX0VOREJSKCk7CiAKIAkJaXAgPSBpbWFnZSAmIzQzOyBhZGRyc1tpIC0gMV0gJiM0MzsgKHByb2cgLSB0ZW1wKTsKJiM0MzsJCWluc25faWR4ID0gaSAtIDEgJiM0MzsgYnBmX3Byb2ctJmd0O2F1eC0mZ3Q7c3VicHJvZ19zdGFydDsKJiM0MzsJCWFjY2Vzc2VzX3N0YWNrX29ubHkgPQomIzQzOwkJCWVudiA/ICFlbnYtJmd0O2luc25fYXV4X2RhdGFbaW5zbl9pZHhdLm5vbl9zdGFja19hY2Nlc3MgOgomIzQzOwkJCSAgICAgIGZhbHNlOwogCiAJCXN3aXRjaCAoaW5zbi0mZ3Q7Y29kZSkgewogCQkJLyogQUxVICovCkBAIC0yMjA3LDQ5ICYjNDM7MjM4MCwxNyBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKgogCQkJRU1JVF9MRkVOQ0UoKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBTVDogKih1OCopKGRzdF9yZWcgJiM0Mzsgb2ZmKSA9IGltbSAqLwogCQljYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfQjoKLQkJCWlmIChpc19lcmVnKGRzdF9yZWcpKQotCQkJCUVNSVQyKDB4NDEsIDB4QzYpOwotCQkJZWxzZQotCQkJCUVNSVQxKDB4QzYpOwotCQkJZ290byBzdDsKIAkJY2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX0g6Ci0JCQlpZiAoaXNfZXJlZyhkc3RfcmVnKSkKLQkJCQlFTUlUMygweDY2LCAweDQxLCAweEM3KTsKLQkJCWVsc2UKLQkJCQlFTUlUMigweDY2LCAweEM3KTsKLQkJCWdvdG8gc3Q7CiAJCWNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9XOgotCQkJaWYgKGlzX2VyZWcoZHN0X3JlZykpCi0JCQkJRU1JVDIoMHg0MSwgMHhDNyk7Ci0JCQllbHNlCi0JCQkJRU1JVDEoMHhDNyk7Ci0JCQlnb3RvIHN0OwogCQljYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfRFc6Ci0JCQlpZiAoZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUyAmYW1wOyZhbXA7IGluc24tJmd0O29mZiA9PSAtOCkgewotCQkJCS8qIEFyZyA2OiBzdG9yZSBpbW1lZGlhdGUgaW4gcjkgcmVnaXN0ZXIgKi8KLQkJCQllbWl0X21vdl9pbW02NCgmYW1wO3Byb2csIFg4Nl9SRUdfUjksIGltbTMyICZndDsmZ3Q7IDMxLCAodTMyKWltbTMyKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCUVNSVQyKGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpLCAweEM3KTsKLQotc3Q6CQkJaW5zbl9vZmYgPSBpbnNuLSZndDtvZmY7Ci0JCQlpZiAoZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUykgewotCQkJCS8qCi0JCQkJICogQXJncyA3JiM0Mzs6IHJldmVyc2UgQlBGIG5lZ2F0aXZlIG9mZnNldHMgdG8KLQkJCQkgKiB4ODYgcG9zaXRpdmUgcnNwIG9mZnNldHMuCi0JCQkJICogQlBGIG9mZj0tMTYg4oaSIFtyc3AmIzQzOzBdLCBvZmY9LTI0IOKGkiBbcnNwJiM0Mzs4XSwgLi4uCi0JCQkJICovCi0JCQkJaW5zbl9vZmYgPSBvdXRnb2luZ19hcmdfYmFzZSAtIG91dGdvaW5nX3JzcCAtIGluc25fb2ZmIC0gMTY7Ci0JCQkJZHN0X3JlZyA9IEJQRl9SRUdfRlA7Ci0JCQl9Ci0JCQlpZiAoaXNfaW1tOChpbnNuX29mZikpCi0JCQkJRU1JVDIoYWRkXzFyZWcoMHg0MCwgZHN0X3JlZyksIGluc25fb2ZmKTsKLQkJCWVsc2UKLQkJCQlFTUlUMV9vZmYzMihhZGRfMXJlZygweDgwLCBkc3RfcmVnKSwgaW5zbl9vZmYpOwomIzQzOwkJCWVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCAmYW1wO3Byb2csIGRzdF9yZWcsIGluc24sIGlwLAomIzQzOwkJCQkJICAgICAgIHRydWUsIGFjY2Vzc2VzX3N0YWNrX29ubHkpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiAKLQkJCUVNSVQoaW1tMzIsIGJwZl9zaXplX3RvX3g4Nl9ieXRlcyhCUEZfU0laRShpbnNuLSZndDtjb2RlKSkpOwomIzQzOwkJCWVtaXRfc3QoJmFtcDtwcm9nLCBpbnNuLCBkc3RfcmVnLCBvdXRnb2luZ19hcmdfYmFzZSwKJiM0MzsJCQkJb3V0Z29pbmdfcnNwKTsKIAkJCWJyZWFrOwogCiAJCQkvKiBTVFg6ICoodTgqKShkc3RfcmVnICYjNDM7IG9mZikgPSBzcmNfcmVnICovCkBAIC0yMjY3LDYgJiM0MzsyNDA4LDEwIEBAIHN0OgkJCWluc25fb2ZmID0gaW5zbi0mZ3Q7b2ZmOwogCQkJCWluc25fb2ZmID0gb3V0Z29pbmdfYXJnX2Jhc2UgLSBvdXRnb2luZ19yc3AgLSBpbnNuX29mZiAtIDE2OwogCQkJCWRzdF9yZWcgPSBCUEZfUkVHX0ZQOwogCQkJfQomIzQzOwkJCWVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCAmYW1wO3Byb2csIGRzdF9yZWcsIGluc24sIGlwLAomIzQzOwkJCQkJICAgICAgIHRydWUsIGFjY2Vzc2VzX3N0YWNrX29ubHkpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiAJCQllbWl0X3N0eCgmYW1wO3Byb2csIEJQRl9TSVpFKGluc24tJmd0O2NvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLCBpbnNuX29mZik7CiAJCQlicmVhazsKIApAQCAtMjQyOCw2ICYjNDM7MjU3MywxMiBAQCBzdDoJCQlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKIAkJCQkvKiBwb3B1bGF0ZSBqbXBfb2Zmc2V0IGZvciBKQUUgYWJvdmUgdG8ganVtcCB0byBzdGFydF9vZl9sZHggKi8KIAkJCQlzdGFydF9vZl9sZHggPSBwcm9nOwogCQkJCWVuZF9vZl9qbXBbLTFdID0gc3RhcnRfb2ZfbGR4IC0gZW5kX29mX2ptcDsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQllcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgJmFtcDtwcm9nLCBzcmNfcmVnLAomIzQzOwkJCQkJCSAgICAgICBpbnNuLCBpcCwgZmFsc2UsCiYjNDM7CQkJCQkJICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpOwomIzQzOwkJCQlpZiAoZXJyKQomIzQzOwkJCQkJcmV0dXJuIGVycjsKIAkJCX0KIAkJCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1ggfHwKIAkJCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfTUVNU1gpCkBAIC0yNDg5LDE1ICYjNDM7MjY0MCwxNiBAQCBzdDoJCQlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKIAkJCX0KIAkJCWZhbGx0aHJvdWdoOwogCQljYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1c6Ci0JCWNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6Ci0JCQlpZiAoaW5zbi0mZ3Q7aW1tID09IChCUEZfQU5EIHwgQlBGX0ZFVENIKSB8fAotCQkJICAgIGluc24tJmd0O2ltbSA9PSAoQlBGX09SIHwgQlBGX0ZFVENIKSB8fAotCQkJICAgIGluc24tJmd0O2ltbSA9PSAoQlBGX1hPUiB8IEJQRl9GRVRDSCkpIHsKLQkJCQlib29sIGlzNjQgPSBCUEZfU0laRShpbnNuLSZndDtjb2RlKSA9PSBCUEZfRFc7Ci0JCQkJdTMyIHJlYWxfc3JjX3JlZyA9IHNyY19yZWc7Ci0JCQkJdTMyIHJlYWxfZHN0X3JlZyA9IGRzdF9yZWc7Ci0JCQkJdTggKmJyYW5jaF90YXJnZXQ7Ci0KJiM0MzsJCWNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6IHsKJiM0MzsJCQlib29sIGlzNjQgPSBCUEZfU0laRShpbnNuLSZndDtjb2RlKSA9PSBCUEZfRFc7CiYjNDM7CQkJdTMyIHJlYWxfc3JjX3JlZyA9IHNyY19yZWc7CiYjNDM7CQkJdTMyIHJlYWxfZHN0X3JlZyA9IGRzdF9yZWc7CiYjNDM7CQkJdTggKmJyYW5jaF90YXJnZXQ7CiYjNDM7CQkJYm9vbCBpc19hdG9taWNfZmV0Y2ggPQomIzQzOwkJCQkoaW5zbi0mZ3Q7aW1tID09IChCUEZfQU5EIHwgQlBGX0ZFVENIKSB8fAomIzQzOwkJCQkgaW5zbi0mZ3Q7aW1tID09IChCUEZfT1IgfCBCUEZfRkVUQ0gpIHx8CiYjNDM7CQkJCSBpbnNuLSZndDtpbW0gPT0gKEJQRl9YT1IgfCBCUEZfRkVUQ0gpKTsKJiM0MzsJCQlpZiAoaXNfYXRvbWljX2ZldGNoKSB7CiAJCQkJLyoKIAkJCQkgKiBDYW4mIzM5O3QgYmUgaW1wbGVtZW50ZWQgd2l0aCBhIHNpbmdsZSB4ODYgaW5zbi4KIAkJCQkgKiBOZWVkIHRvIGRvIGEgQ01QWENIRyBsb29wLgpAQCAtMjUxMCw3ICYjNDM7MjY2MiwxNyBAQCBzdDoJCQlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKIAkJCQlpZiAoZHN0X3JlZyA9PSBCUEZfUkVHXzApCiAJCQkJCXJlYWxfZHN0X3JlZyA9IEJQRl9SRUdfQVg7CiAKJiM0MzsJCQkJaXAgJiM0Mzs9IDM7CiYjNDM7CQkJfQomIzQzOwkJCWlmICghYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKSB7CiYjNDM7CQkJCWVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCAmYW1wO3Byb2csIHJlYWxfZHN0X3JlZywKJiM0MzsJCQkJCQkgICAgICAgaW5zbiwgaXAsIGZhbHNlLAomIzQzOwkJCQkJCSAgICAgICBhY2Nlc3Nlc19zdGFja19vbmx5KTsKJiM0MzsJCQkJaWYgKGVycikKJiM0MzsJCQkJCXJldHVybiBlcnI7CiAJCQkJYnJhbmNoX3RhcmdldCA9IHByb2c7CiYjNDM7CQkJfQomIzQzOwkJCWlmIChpc19hdG9taWNfZmV0Y2gpIHsKIAkJCQkvKiBMb2FkIG9sZCB2YWx1ZSAqLwogCQkJCWVtaXRfbGR4KCZhbXA7cHJvZywgQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSksCiAJCQkJCSBCUEZfUkVHXzAsIHJlYWxfZHN0X3JlZywgaW5zbi0mZ3Q7b2ZmKTsKQEAgLTI1NDIsMTUgJiM0MzsyNzA0LDE2IEBAIHN0OgkJCWluc25fb2ZmID0gaW5zbi0mZ3Q7b2ZmOwogCQkJfQogCiAJCQlpZiAoYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKQotCQkJCWVyciA9IGVtaXRfYXRvbWljX2xkX3N0KCZhbXA7cHJvZywgaW5zbi0mZ3Q7aW1tLCBkc3RfcmVnLCBzcmNfcmVnLAotCQkJCQkJCWluc24tJmd0O29mZiwgQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkpOwomIzQzOwkJCQllcnIgPSBlbWl0X2F0b21pY19sZF9zdChlbnYsICZhbXA7cHJvZywgaW5zbiwgaXAsCiYjNDM7CQkJCQkJCWRzdF9yZWcsIHNyY19yZWcsCiYjNDM7CQkJCQkJCWFjY2Vzc2VzX3N0YWNrX29ubHkpOwogCQkJZWxzZQogCQkJCWVyciA9IGVtaXRfYXRvbWljX3JtdygmYW1wO3Byb2csIGluc24tJmd0O2ltbSwgZHN0X3JlZywgc3JjX3JlZywKIAkJCQkJCSAgICAgIGluc24tJmd0O29mZiwgQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQkJYnJlYWs7Ci0KJiM0MzsJCX0KIAkJY2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9COgogCQljYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfQVRPTUlDIHwgQlBGX0g6CiAJCQlpZiAoIWJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKaW5kZXggNzZiOGI3NjI3YTEwODUuLjg2ODEwMWVmNTAwMmFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTcyMyw2ICYjNDM7NzIzLDggQEAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhIHsKIAl1MTYgY29uc3RfcmVnX21hcF9tYXNrOwogCXUxNiBjb25zdF9yZWdfc3VicHJvZ19tYXNrOwogCXUzMiBjb25zdF9yZWdfdmFsc1sxMF07CiYjNDM7CS8qIGluc3RydWN0aW9uIGNhbiBhY2Nlc3Mgbm9uLXN0YWNrIG1lbW9yeSAqLwomIzQzOwlib29sIG5vbl9zdGFja19hY2Nlc3M7CiB9OwogCiAjZGVmaW5lIE1BWF9VU0VEX01BUFMgNjQgLyogbWF4IG51bWJlciBvZiBtYXBzIGFjY2Vzc2VkIGJ5IG9uZSBlQlBGIHByb2dyYW0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCmluZGV4IDE0YWNiMjQ1NTc0NmZjLi4xZWJjZDI0N2VmNGUzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCkBAIC0xMjEwLDEzICYjNDM7MTIxMCwxNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsCiAKICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbik7CiYjNDM7CQkJCSAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbiwKJiM0MzsJCQkJICAgICBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpOwogc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpicGZfZHVwX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7CiB2b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCSAgICAgICBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXgpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsCi0JCQkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiYjNDM7CQkJCQkJICAgdTMyIG9mZiwKJiM0MzsJCQkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLAomIzQzOwkJCQkJCSAgIHUzMiBsZW4sCiYjNDM7CQkJCQkJICAgczMyIGluc25fb2ZmX2luX3BhdGNoKQogewogCXJldHVybiBFUlJfUFRSKC1FTk9UU1VQUCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL0tjb25maWcgYi9rZXJuZWwvYnBmL0tjb25maWcKaW5kZXggZWIzZGUzNTczNGYwOTIuLmUxZjM4NTBkMmY1YTA3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9LY29uZmlnCkBAIC0xNyw2ICYjNDM7MTcsMTAgQEAgY29uZmlnIEhBVkVfQ0JQRl9KSVQKIGNvbmZpZyBIQVZFX0VCUEZfSklUCiAJYm9vbAogCiYjNDM7IyBLQVNBTiBzdXBwb3J0IGZvciBKSVQgY29tcGlsZXIKJiM0Mztjb25maWcgSEFWRV9FQlBGX0pJVF9LQVNBTgomIzQzOwlib29sCiYjNDM7CiAjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5CiAjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LgogY29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQKQEAgLTEwMSw0ICYjNDM7MTA1LDE3IEBAIGNvbmZpZyBCUEZfTFNNCiAKIAkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCiAKJiM0Mztjb25maWcgQlBGX0pJVF9LQVNBTgomIzQzOwlib29sCiYjNDM7CWRlcGVuZHMgb24gSEFWRV9FQlBGX0pJVF9LQVNBTgomIzQzOwlkZXBlbmRzIG9uIEtBU0FOX0dFTkVSSUMKJiM0MzsJZGVwZW5kcyBvbiBLQVNBTl9WTUFMTE9DCiYjNDM7CWRlcGVuZHMgb24gQlBGX0pJVAomIzQzOwlkZWZhdWx0IHkgaWYgS0FTQU4KJiM0MzsJaGVscAomIzQzOwkgIE1ha2VzIEpJVCBjb21waWxlciBpbnNlcnQgZ2VuZXJpYyBvdXRsaW5lIEtBU0FOIGNoZWNrcyBpbiBCUEYKJiM0MzsJICBwcm9ncmFtcyB3aGVuIHRoZXkgYXJlIGluc2VydGVkIGluIHRoZSBrZXJuZWwuIFRoaXMgZmVhdHVyZSBpcwomIzQzOwkgIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBpZiB0aGUgbmVlZGVkIHNldCBvZiBLQVNBTiBhbmQgQlBGCiYjNDM7CSAgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGVuYWJsZWQuCiYjNDM7CiBlbmRtZW51ICMgJiMzNDtCUEYgc3Vic3lzdGVtJiMzNDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmMKaW5kZXggNmUxOWEwMzBkYTZmMTMuLjFlMThiOTk5ZjFiNTY1IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2NvcmUuYwpAQCAtMTU5OCw3ICYjNDM7MTU5OCw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwCiAJCQljb250aW51ZTsKIAogCQlpZiAoZW52KQotCQkJdG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTsKJiM0MzsJCQl0bXAgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4sIHJld3JpdHRlbiAtIDEpOwogCQllbHNlCiAJCQl0bXAgPSBicGZfcGF0Y2hfaW5zbl9zaW5nbGUoY2xvbmUsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmMKaW5kZXggMTJhOGE0ZWI3NTdmMTguLmZlZWUxZjMzZGU5ZDU1IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZml4dXBzLmMKQEAgLTE1MiwxMiAmIzQzOzE1MiwyNSBAQCBzdGF0aWMgaW50IGdldF9jYWxsZWVfc3RhY2tfZGVwdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIH0KICNlbmRpZgogCiYjNDM7c3RhdGljIGJvb2wgaXNfbWVtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKQomIzQzO3sKJiM0MzsJaWYgKEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKSAhPSBCUEZfU1QgJmFtcDsmYW1wOwomIzQzOwkgICAgQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpICE9IEJQRl9TVFggJmFtcDsmYW1wOwomIzQzOwkgICAgQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpICE9IEJQRl9MRFgpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX01FTSB8fAomIzQzOwkJQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX01FTVNYIHx8CiYjNDM7CQlCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfQVRPTUlDKTsKJiM0Mzt9CiYjNDM7CiAvKiBzaW5nbGUgZW52LSZndDtwcm9nLSZndDtpbnNuaVtvZmZdIGluc3RydWN0aW9uIHdhcyByZXBsYWNlZCB3aXRoIHRoZSByYW5nZQogICogaW5zbmlbb2ZmLCBvZmYgJiM0MzsgY250KS4gIEFkanVzdCBjb3JyZXNwb25kaW5nIGluc25fYXV4X2RhdGEgYnkgY29weWluZwogICogWzAsIG9mZikgYW5kIFtvZmYsIGVuZCkgdG8gbmV3IGxvY2F0aW9ucywgc28gdGhlIHBhdGNoZWQgcmFuZ2Ugc3RheXMgemVybwogICovCiBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJCSBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLCB1MzIgb2ZmLCB1MzIgY250KQomIzQzOwkJCQkgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZywgdTMyIG9mZiwgdTMyIGNudCwKJiM0MzsJCQkJIHMzMiBpbnNuX29mZl9pbl9wYXRjaCkKIHsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmRhdGEgPSBlbnYtJmd0O2luc25fYXV4X2RhdGE7CiAJc3RydWN0IGJwZl9pbnNuICppbnNuID0gbmV3X3Byb2ctJmd0O2luc25zaTsKQEAgLTE3MSw4ICYjNDM7MTg0LDE0IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJICovCiAJZGF0YVtvZmZdLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSk7CiAKLQlpZiAoY250ID09IDEpCiYjNDM7CWlmIChjbnQgPT0gMSkgewomIzQzOwkJLyogQSBub24tbWVtb3J5IGFjY2Vzc2luZyBpbnNuIGNvdWxkIGhhdmUgYmVlbiByZXBsYWNlZCBieSBhCiYjNDM7CQkgKiBtZW1vcnkgYWNjZXNzaW5nIGluc24sIHN5c3RlbWF0aWNhbGx5IG1hcmsgaXQgZm9yIG5vbi1zdGFjawomIzQzOwkJICogYWNjZXNzCiYjNDM7CQkgKi8KJiM0MzsJCWRhdGFbb2ZmXS5ub25fc3RhY2tfYWNjZXNzID0gaXNfbWVtX2luc24oaW5zbik7CiAJCXJldHVybjsKJiM0MzsJfQogCXByb2dfbGVuID0gbmV3X3Byb2ctJmd0O2xlbjsKIAogCW1lbW1vdmUoZGF0YSAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSwgZGF0YSAmIzQzOyBvZmYsCkBAIC0xODIsNyAmIzQzOzIwMSwxOSBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkvKiBFeHBhbmQgaW5zbmlbb2ZmXSYjMzk7cyBzZWVuIGNvdW50IHRvIHRoZSBwYXRjaGVkIHJhbmdlLiAqLwogCQlkYXRhW2ldLnNlZW4gPSBvbGRfc2VlbjsKIAkJZGF0YVtpXS56ZXh0X2RzdCA9IGluc25faGFzX2RlZjMyKGluc24gJiM0MzsgaSk7CiYjNDM7CQlpZiAoaSA9PSBvZmYgJiM0MzsgaW5zbl9vZmZfaW5fcGF0Y2gpIHsKJiM0MzsJCQlkYXRhW2ldLm5vbl9zdGFja19hY2Nlc3MgPSBkYXRhW29mZiAmIzQzOyBjbnQgLSAxXS5ub25fc3RhY2tfYWNjZXNzOwomIzQzOwkJCWRhdGFbb2ZmICYjNDM7IGNudCAtIDFdLm5vbl9zdGFja19hY2Nlc3MgPSBmYWxzZTsKJiM0MzsJCX0gZWxzZSBpZiAoaXNfbWVtX2luc24oaW5zbiAmIzQzOyBpKSkgewomIzQzOwkJCWRhdGFbaV0ubm9uX3N0YWNrX2FjY2VzcyA9IHRydWU7CiYjNDM7CQl9CiAJfQomIzQzOwkvKgomIzQzOwkgKiBMYXN0IHNsb3QgaW5zdHJ1Y3Rpb24gY291bGQgYmUgYSBuZXdseSBnZW5lcmF0ZWQKJiM0MzsJICogQlBGX1NUL0JQRl9MRFgvQlBGX1NUWAomIzQzOwkgKi8KJiM0MzsJaWYgKGlzX21lbV9pbnNuKGluc24gJiM0Mzsgb2ZmICYjNDM7IGNudCAtIDEpICZhbXA7JmFtcDsgaW5zbl9vZmZfaW5fcGF0Y2ggIT0gY250IC0gMSkKJiM0MzsJCWRhdGFbb2ZmICYjNDM7IGNudCAtIDFdLm5vbl9zdGFja19hY2Nlc3MgPSB0cnVlOwogCiAJLyoKIAkgKiBUaGUgaW5kaXJlY3RfdGFyZ2V0IGZsYWcgb2YgdGhlIG9yaWdpbmFsIGluc3RydWN0aW9uIHdhcyBtb3ZlZCB0byB0aGUgbGFzdCBvZiB0aGUKQEAgLTI0NSw3ICYjNDM7Mjc2LDggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKQogfQogCiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pCiYjNDM7CQkJCSAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbiwKJiM0MzsJCQkJICAgICBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpCiB7CiAJc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZzsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm5ld19kYXRhID0gTlVMTDsKQEAgLTI2OSw3ICYjNDM7MzAxLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsCiAJCQkJZW52LSZndDtpbnNuX2F1eF9kYXRhW29mZl0ub3JpZ19pZHgpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JYWRqdXN0X2luc25fYXV4X2RhdGEoZW52LCBuZXdfcHJvZywgb2ZmLCBsZW4pOwomIzQzOwlhZGp1c3RfaW5zbl9hdXhfZGF0YShlbnYsIG5ld19wcm9nLCBvZmYsIGxlbiwgaW5zbl9vZmZfaW5fcGF0Y2gpOwogCWFkanVzdF9zdWJwcm9nX3N0YXJ0cyhlbnYsIG9mZiwgbGVuKTsKIAlhZGp1c3RfaW5zbl9hcnJheXMoZW52LCBvZmYsIGxlbik7CiAJYWRqdXN0X3Bva2VfZGVzY3MobmV3X3Byb2csIG9mZiwgbGVuKTsKQEAgLTY2OCw3ICYjNDM7NzAwLDcgQEAgaW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQlwYXRjaCA9IHpleHRfcGF0Y2g7CiAJCXBhdGNoX2xlbiA9IDI7CiBhcHBseV9wYXRjaF9idWZmZXI6Ci0JCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4pOwomIzQzOwkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgYWRqX2lkeCwgcGF0Y2gsIHBhdGNoX2xlbiwgMCk7CiAJCWlmICghbmV3X3Byb2cpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJZW52LSZndDtwcm9nID0gbmV3X3Byb2c7CkBAIC03MTMsNyAmIzQzOzc0NSw3IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWluc25fYnVmW2NudCYjNDM7JiM0MztdID0gQlBGX1NUWF9NRU0oQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzEsCiAJCQkJCQkgICAgICAtc3VicHJvZ3NbMF0uc3RhY2tfZGVwdGgpOwogCQkJaW5zbl9idWZbY250JiM0MzsmIzQzO10gPSBlbnYtJmd0O3Byb2ctJmd0O2luc25zaVswXTsKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQsIDEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCWVudi0mZ3Q7cHJvZyA9IG5ld19wcm9nOwpAQCAtNzM2LDcgJiM0Mzs3NjgsOCBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQl2ZXJpZmllcl9idWcoZW52LCAmIzM0O3Byb2xvZ3VlIGlzIHRvbyBsb25nJiMzNDspOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0gZWxzZSBpZiAoY250KSB7Ci0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LAomIzQzOwkJCQkJCSAgICAgICBjbnQgLSAxKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTc1OSw2ICYjNDM7NzkyLDcgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHsKIAkJYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc190IGNvbnZlcnRfY3R4X2FjY2VzczsKJiM0MzsJCXMzMiBpbnNuX29mZl9pbl9wYXRjaCA9IC0xOwogCQl1OCBtb2RlOwogCiAJCWlmIChlbnYtJmd0O2luc25fYXV4X2RhdGFbaSAmIzQzOyBkZWx0YV0ubm9zcGVjKSB7CkBAIC03NjgsNyAmIzQzOzgwMiw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCSpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfU1RfTk9TUEVDKCk7CiAJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247CiAJCQljbnQgPSBwYXRjaCAtIGluc25fYnVmOwotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgY250IC0gMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC04NDEsNyAmIzQzOzg3Niw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCSpwYXRjaCYjNDM7JiM0MzsgPSAqaW5zbjsKIAkJCSpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfU1RfTk9TUEVDKCk7CiAJCQljbnQgPSBwYXRjaCAtIGluc25fYnVmOwotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgMCk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC04NTYsMTYgJiM0Mzs4OTIsMjAgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJaWYgKCFvcHMtJmd0O2NvbnZlcnRfY3R4X2FjY2VzcykKIAkJCQljb250aW51ZTsKIAkJCWNvbnZlcnRfY3R4X2FjY2VzcyA9IG9wcy0mZ3Q7Y29udmVydF9jdHhfYWNjZXNzOwomIzQzOwkJCWluc25fb2ZmX2luX3BhdGNoID0gMDsKIAkJCWJyZWFrOwogCQljYXNlIFBUUl9UT19TT0NLRVQ6CiAJCWNhc2UgUFRSX1RPX1NPQ0tfQ09NTU9OOgogCQkJY29udmVydF9jdHhfYWNjZXNzID0gYnBmX3NvY2tfY29udmVydF9jdHhfYWNjZXNzOwomIzQzOwkJCWluc25fb2ZmX2luX3BhdGNoID0gMDsKIAkJCWJyZWFrOwogCQljYXNlIFBUUl9UT19UQ1BfU09DSzoKIAkJCWNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl90Y3Bfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3M7CiYjNDM7CQkJaW5zbl9vZmZfaW5fcGF0Y2ggPSAwOwogCQkJYnJlYWs7CiAJCWNhc2UgUFRSX1RPX1hEUF9TT0NLOgogCQkJY29udmVydF9jdHhfYWNjZXNzID0gYnBmX3hkcF9zb2NrX2NvbnZlcnRfY3R4X2FjY2VzczsKJiM0MzsJCQlpbnNuX29mZl9pbl9wYXRjaCA9IDA7CiAJCQlicmVhazsKIAkJY2FzZSBQVFJfVE9fQlRGX0lEOgogCQljYXNlIFBUUl9UT19CVEZfSUQgfCBQVFJfVU5UUlVTVEVEOgpAQCAtOTcxLDcgJiM0MzsxMDExLDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCQkJICAgICAgIHNpemUgKiA4LCAwKTsKIAogcGF0Y2hfaW5zbl9idWY6Ci0JCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCwKJiM0MzsJCQkJCSAgICAgICBpbnNuX29mZl9pbl9wYXRjaCk7CiAJCWlmICghbmV3X3Byb2cpCiAJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTQ2NCw3ICYjNDM7MTUwNSw3IEBAIHN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0CiAJICogb25lcyBmb3IgdGhlIGhpZGRlbiBzdWJwcm9nLiBIZW5jZSBhbGwgb2YgdGhlIGFkanVzdG1lbnQgb3BlcmF0aW9ucwogCSAqIGluIGJwZl9wYXRjaF9pbnNuX2RhdGEgYXJlIG5vLW9wcy4KIAkgKi8KLQlwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuIC0gMSwgcGF0Y2gsIGxlbik7CiYjNDM7CXByb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgZW52LSZndDtwcm9nLSZndDtsZW4gLSAxLCBwYXRjaCwgbGVuLCAtMSk7CiAJaWYgKCFwcm9nKQogCQlyZXR1cm4gLUVOT01FTTsKIAllbnYtJmd0O3Byb2cgPSBwcm9nOwpAQCAtMTU0OSw3ICYjNDM7MTU5MCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAogCQkJY250ID0gcGF0Y2ggLSBpbnNuX2J1ZjsKIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgMCk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xNTY5LDYgJiM0MzsxNjExLDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJYm9vbCBpc19zZGl2ID0gaXNkaXYgJmFtcDsmYW1wOyBpbnNuLSZndDtvZmYgPT0gMTsKIAkJCWJvb2wgaXNfc21vZCA9ICFpc2RpdiAmYW1wOyZhbXA7IGluc24tJmd0O29mZiA9PSAxOwogCQkJc3RydWN0IGJwZl9pbnNuICpwYXRjaCA9IGluc25fYnVmOwomIzQzOwkJCXMzMiBpbnNuX29mZl9pbl9wYXRjaDsKIAogCQkJaWYgKGlzX3NkaXYpIHsKIAkJCQkvKiBbUixXXXggc2RpdiAwIC0mZ3Q7IDAKQEAgLTE1OTUsNiAmIzQzOzE2MzgsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkJKnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7CiAJCQkJKnBhdGNoJiM0MzsmIzQzOyA9ICppbnNuOwogCQkJCWNudCA9IHBhdGNoIC0gaW5zbl9idWY7CiYjNDM7CQkJCWluc25fb2ZmX2luX3BhdGNoID0gY250IC0gMTsKIAkJCX0gZWxzZSBpZiAoaXNfc21vZCkgewogCQkJCS8qIFtSLFddeCBtb2QgMCAtJmd0OyBbUixXXXggKi8KIAkJCQkvKiBbUixXXXggbW9kIC0xIC0mZ3Q7IDAgKi8KQEAgLTE2MTEsNiAmIzQzOzE2NTUsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkJKnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9NT1YzMl9JTU0oaW5zbi0mZ3Q7ZHN0X3JlZywgMCk7CiAJCQkJKnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7CiAJCQkJKnBhdGNoJiM0MzsmIzQzOyA9ICppbnNuOwomIzQzOwkJCQlpbnNuX29mZl9pbl9wYXRjaCA9IHBhdGNoIC0gaW5zbl9idWYgLSAxOwogCiAJCQkJaWYgKCFpczY0KSB7CiAJCQkJCSpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpOwpAQCAtMTYyNiwxMiAmIzQzOzE2NzEsMTQgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCSpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpOwogCQkJCSpwYXRjaCYjNDM7JiM0MzsgPSAqaW5zbjsKIAkJCQljbnQgPSBwYXRjaCAtIGluc25fYnVmOwomIzQzOwkJCQlpbnNuX29mZl9pbl9wYXRjaCA9IGNudCAtIDE7CiAJCQl9IGVsc2UgewogCQkJCS8qIFtSLFddeCBtb2QgMCAtJmd0OyBbUixXXXggKi8KIAkJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX1JBV19JTlNOKChpczY0ID8gQlBGX0pNUCA6IEJQRl9KTVAzMikgfAogCQkJCQkJCUJQRl9KRVEgfCBCUEZfSywgaW5zbi0mZ3Q7c3JjX3JlZywKIAkJCQkJCQkwLCAxICYjNDM7IChpczY0ID8gMCA6IDEpLCAwKTsKIAkJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247CiYjNDM7CQkJCWluc25fb2ZmX2luX3BhdGNoID0gcGF0Y2ggLSBpbnNuX2J1ZiAtIDE7CiAKIAkJCQlpZiAoIWlzNjQpIHsKIAkJCQkJKnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7CkBAIC0xNjQwLDcgJiM0MzsxNjg3LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCWNudCA9IHBhdGNoIC0gaW5zbl9idWY7CiAJCQl9CiAKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIGluc25fb2ZmX2luX3BhdGNoKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE2NTYsNiAmIzQzOzE3MDQsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCSAgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTVNYKSkgewogCQkJc3RydWN0IGJwZl9pbnNuICpwYXRjaCA9IGluc25fYnVmOwogCQkJdTY0IHVhZGRyZXNzX2xpbWl0ID0gYnBmX2FyY2hfdWFkZHJlc3NfbGltaXQoKTsKJiM0MzsJCQlzMzIgaW5zbl9vZmZfaW5fcGF0Y2g7CiAKIAkJCWlmICghdWFkZHJlc3NfbGltaXQpCiAJCQkJZ290byBuZXh0X2luc247CkBAIC0xNjY2LDExICYjNDM7MTcxNSwxMyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfUlNILCBCUEZfUkVHX0FYLCAzMik7CiAJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pMRSwgQlBGX1JFR19BWCwgdWFkZHJlc3NfbGltaXQgJmd0OyZndDsgMzIsIDIpOwogCQkJKnBhdGNoJiM0MzsmIzQzOyA9ICppbnNuOwomIzQzOwkJCWluc25fb2ZmX2luX3BhdGNoID0gcGF0Y2ggLSBpbnNuX2J1ZiAtIDE7CiAJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTsKIAkJCSpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfTU9WNjRfSU1NKGluc24tJmd0O2RzdF9yZWcsIDApOwogCiAJCQljbnQgPSBwYXRjaCAtIGluc25fYnVmOwotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTY5MCw3ICYjNDM7MTc0MSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCX0KIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgMCk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xNzQzLDcgJiM0MzsxNzk1LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCSpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9NVUwsIG9mZl9yZWcsIC0xKTsKIAkJCWNudCA9IHBhdGNoIC0gaW5zbl9idWY7CiAKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIC0xKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE3ODgsNyAmIzQzOzE4NDEsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlpbnNuX2J1Zls2XSA9IEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR18xMCwgQlBGX1JFR19BWCwgc3RhY2tfb2ZmX2NudCk7CiAJCQljbnQgPSA3OwogCi0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKJiM0MzsJCQkJCQkgICAgICAgY250LCAzKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE4MDksNyAmIzQzOzE4NjMsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlpbnNuX2J1ZlszXSA9IEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR18xMCwgQlBGX1JFR19BWCwgc3RhY2tfb2ZmKTsKIAkJCWNudCA9IDQ7CiAKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIDIpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTgzMCw3ICYjNDM7MTg4NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWlmIChjbnQgPT0gMCkKIAkJCQlnb3RvIG5leHRfaW5zbjsKIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgY250IC0gMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xOTE1LDcgJiM0MzsxOTcxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCQkJCQkgbWFwKS0mZ3Q7aW5kZXhfbWFzayk7CiAJCQlpbnNuX2J1ZlsyXSA9ICppbnNuOwogCQkJY250ID0gMzsKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIGNudCAtIDEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTk0OCw3ICYjNDM7MjAwNSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWluc25fYnVmWzJdID0gKmluc247CiAJCQljbnQgPSAzOwogCi0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKJiM0MzsJCQkJCQkgICAgICAgY250LCBjbnQgLSAxKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE5NjcsNyAmIzQzOzIwMjUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlpbnNuX2J1ZlsxXSA9ICppbnNuOwogCQkJY250ID0gMjsKIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgY250IC0gMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yMDA3LDggJiM0MzsyMDY2LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCQl9CiAKLQkJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLAotCQkJCQkJCSAgICAgICBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKAomIzQzOwkJCQkJZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250LCAtMSk7CiAJCQkJaWYgKCFuZXdfcHJvZykKIAkJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIwOTEsNyAmIzQzOzIxNTAsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQljbnQgPSAzOwogCiAJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKLQkJCQkJCSAgICAgICBjbnQpOwomIzQzOwkJCQkJCSAgICAgICBjbnQsIC0xKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIxMTksNyAmIzQzOzIxNzgsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlpbnNuX2J1ZlswXSA9IEJQRl9BTFUzMl9SRUcoQlBGX1hPUiwgQlBGX1JFR18wLCBCUEZfUkVHXzApOwogCQkJY250ID0gMTsKICNlbmRpZgotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgLTEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjEzNyw3ICYjNDM7MjE5Nyw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWluc25fYnVmWzJdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7CiAJCQljbnQgPSAzOwogCi0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKJiM0MzsJCQkJCQkgICAgICAgY250LCAtMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yMTcxLDcgJiM0MzsyMjMyLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJaW5zbl9idWZbY250JiM0MzsmIzQzO10gPSBCUEZfSk1QX0EoMSk7CiAJCQlpbnNuX2J1ZltjbnQmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTsKIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgLTEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjIwMyw3ICYjNDM7MjI2NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCQljbnQgPSAxOwogCQkJfQogCi0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKJiM0MzsJCQkJCQkgICAgICAgY250LCAtMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yMjI5LDcgJiM0MzsyMjkyLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCWNudCA9IDI7CiAJCQl9CiAKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIC0xKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIyNDUsNyAmIzQzOzIzMDksOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkvKiBMb2FkIElQIGFkZHJlc3MgZnJvbSBjdHggLSAxNiAqLwogCQkJaW5zbl9idWZbMF0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAtMTYpOwogCi0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgMSk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIDEsIC0xKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIzMDAsNyAmIzQzOzIzNjUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlpbnNuX2J1ZlsxMF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUVOT0VOVCk7CiAJCQljbnQgPSAxMTsKIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgLTEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjMxOCw3ICYjNDM7MjM4NCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWluc25fYnVmWzFdID0gQlBGX0FUT01JQ19PUChCUEZfRFcsIEJQRl9YQ0hHLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCwgMCk7CiAJCQljbnQgPSAyOwogCi0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKJiM0MzsJCQkJCQkgICAgICAgY250LCAtMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yMzg2LDcgJiM0MzsyNDUzLDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkvKiBDb3B5IGZpcnN0IGFjdHVhbCBpbnNuIHRvIHByZXNlcnZlIGl0ICovCiAJCWluc25fYnVmW2NudCYjNDM7JiM0MztdID0gZW52LSZndDtwcm9nLSZndDtpbnNuc2lbc3VicHJvZ19zdGFydF07CiAKLQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgc3VicHJvZ19zdGFydCwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBzdWJwcm9nX3N0YXJ0LCBpbnNuX2J1ZiwgY250LCBjbnQgLSAxKTsKIAkJaWYgKCFuZXdfcHJvZykKIAkJCXJldHVybiAtRU5PTUVNOwogCQllbnYtJmd0O3Byb2cgPSBwcm9nID0gbmV3X3Byb2c7CkBAIC0yNDg1LDcgJiM0MzsyNTUyLDcgQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZyAqaW5saW5lX2JwZl9sb29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJaW5zbl9idWZbY250JiM0MzsmIzQzO10gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfOCwgQlBGX1JFR18xMCwgcjhfb2Zmc2V0KTsKIAogCSp0b3RhbF9jbnQgPSBjbnQ7Ci0JbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgcG9zaXRpb24sIGluc25fYnVmLCBjbnQpOwomIzQzOwluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBwb3NpdGlvbiwgaW5zbl9idWYsIGNudCwgLTEpOwogCWlmICghbmV3X3Byb2cpCiAJCXJldHVybiBuZXdfcHJvZzsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDUxZjc5NjVkNDJlMzI0Li4xMjQ2Y2U4ZjVmMGY0NiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMzE0NCw2ICYjNDM7MzE0NCwxMSBAQCBzdGF0aWMgdm9pZCBtYXJrX2luZGlyZWN0X3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4KQogCWVudi0mZ3Q7aW5zbl9hdXhfZGF0YVtpZHhdLmluZGlyZWN0X3RhcmdldCA9IHRydWU7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBtYXJrX25vbl9zdGFja19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCkKJiM0Mzt7CiYjNDM7CWVudi0mZ3Q7aW5zbl9hdXhfZGF0YVtpZHhdLm5vbl9zdGFja19hY2Nlc3MgPSB0cnVlOwomIzQzO30KJiM0MzsKICNkZWZpbmUgTFJfRlJBTUVOT19CSVRTCTQKICNkZWZpbmUgTFJfU1BJX0JJVFMJNgogI2RlZmluZSBMUl9FTlRSWV9CSVRTCShMUl9TUElfQklUUyAmIzQzOyBMUl9GUkFNRU5PX0JJVFMgJiM0MzsgMSkKQEAgLTYzMzMsNiAmIzQzOzYzMzgsMTAgQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGIKIAkJZWxzZQogCQkJY29lcmNlX3JlZ190b19zaXplX3N4KCZhbXA7cmVnc1t2YWx1ZV9yZWdub10sIHNpemUpOwogCX0KJiM0MzsKJiM0MzsJaWYgKCFlcnIgJmFtcDsmYW1wOyByZWctJmd0O3R5cGUgIT0gUFRSX1RPX1NUQUNLKQomIzQzOwkJbWFya19ub25fc3RhY2tfYWNjZXNzKGVudiwgaW5zbl9pZHgpOwomIzQzOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaW5zbl9hcnJheS5jCmluZGV4IDAyMjJhOWE1ZDA3NjE0Li4zN2M0MDVmYzJiMGQyMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaW5zbl9hcnJheS5jCkBAIC0yMjcsNDIgJiM0MzsyMjcsNiBAQCBzdGF0aWMgdm9pZCBjaGVja19pbmNvcnJlY3RfaW5kZXgodm9pZCkKIAljaGVja19taWRfaW5zbl9pbmRleCgpOwogfQogCi1zdGF0aWMgaW50IHNldF9icGZfaml0X2hhcmRlbihjaGFyICpsZXZlbCkKLXsKLQljaGFyIG9sZF9sZXZlbDsKLQlpbnQgZXJyID0gLTE7Ci0JaW50IGZkID0gLTE7Ci0KLQlmZCA9IG9wZW4oJiMzNDsvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4mIzM0OywgT19SRFdSIHwgT19OT05CTE9DSyk7Ci0JaWYgKGZkICZsdDsgMCkgewotCQlBU1NFUlRfRkFJTCgmIzM0O29wZW4gLi4uL2JwZl9qaXRfaGFyZGVuIHJldHVybmVkICVkIChlcnJubz0lZCkmIzM0OywgZmQsIGVycm5vKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWVyciA9IHJlYWQoZmQsICZhbXA7b2xkX2xldmVsLCAxKTsKLQlpZiAoZXJyICE9IDEpIHsKLQkJQVNTRVJUX0ZBSUwoJiMzNDtyZWFkIGZyb20gLi4uL2JwZl9qaXRfaGFyZGVuIHJldHVybmVkICVkIChlcnJubz0lZCkmIzM0OywgZXJyLCBlcnJubyk7Ci0JCWVyciA9IC0xOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlsc2VlayhmZCwgMCwgU0VFS19TRVQpOwotCi0JZXJyID0gd3JpdGUoZmQsIGxldmVsLCAxKTsKLQlpZiAoZXJyICE9IDEpIHsKLQkJQVNTRVJUX0ZBSUwoJiMzNDt3cml0ZSB0byAuLi4vYnBmX2ppdF9oYXJkZW4gcmV0dXJuZWQgJWQgKGVycm5vPSVkKSYjMzQ7LCBlcnIsIGVycm5vKTsKLQkJZXJyID0gLTE7Ci0JCWdvdG8gZW5kOwotCX0KLQotCWVyciA9IDA7Ci0JKmxldmVsID0gb2xkX2xldmVsOwotZW5kOgotCWlmIChmZCAmZ3Q7PSAwKQotCQljbG9zZShmZCk7Ci0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIHZvaWQgY2hlY2tfYmxpbmRuZXNzKHZvaWQpCiB7CiAJc3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7CkBAIC0yNzIsNyAmIzQzOzIzNiw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2JsaW5kbmVzcyh2b2lkKQogCQlCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMSksCiAJCUJQRl9FWElUX0lOU04oKSwKIAl9OwotCWludCBwcm9nX2ZkID0gLTEsIG1hcF9mZDsKJiM0MzsJaW50IHByb2dfZmQgPSAtMSwgbWFwX2ZkLCByZXQ7CiAJc3RydWN0IGJwZl9pbnNuX2FycmF5X3ZhbHVlIHZhbCA9IHt9OwogCWNoYXIgYnBmX2ppdF9oYXJkZW4gPSAmIzM5O0AmIzM5OzsgLyogbm9uLWV4aXpzdGluZyB2YWx1ZSAqLwogCWludCBpOwpAQCAtMjkxLDcgJiM0MzsyNTUsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19ibGluZG5lc3Modm9pZCkKIAkJZ290byBjbGVhbnVwOwogCiAJYnBmX2ppdF9oYXJkZW4gPSAmIzM5OzImIzM5OzsKLQlpZiAoc2V0X2JwZl9qaXRfaGFyZGVuKCZhbXA7YnBmX2ppdF9oYXJkZW4pKSB7CiYjNDM7CXJldCA9IHNldF9icGZfaml0X2hhcmRlbigmYW1wO2JwZl9qaXRfaGFyZGVuKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O3NldCBicGZfaml0X2hhcmRlbiYjMzQ7KSkgewogCQlicGZfaml0X2hhcmRlbiA9ICYjMzk7QCYjMzk7OyAvKiBvcGVuLCByZWFkIG9yIHdyaXRlIGZhaWxlZCA9Jmd0OyBubyB3cml0ZSB3YXMgZG9uZSAqLwogCQlnb3RvIGNsZWFudXA7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2thc2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmYwMDZiOTJlZTEzMWFjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uYwpAQCAtMCwwICYjNDM7MSw0MjUgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRlc3RzIHZhbGlkYXRpbmcgdGhhdCBLQVNBTiByZXBvcnRzIGFyZSBwcm9wZXJseSBpbnN0cnVtZW50ZWQgYW5kCiYjNDM7ICogZ2VuZXJhdGVkIG9uIGEgd2lkZSB2YXJpZXR5IG9mIGluc3RydWN0aW9ucy4gVGhlIHJ1bm5pbmcga2VybmVsIG5lZWRzCiYjNDM7ICoga2FzYW5fbXVsdGlfc2hvdCB0byBydW4gbXVsdGlwbGUga2FzYW4tZ2VuZXJhdGluZyBzdWJ0ZXN0cyBhdCBvbmNlCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5wcml2X2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2thc2FuLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrYXNhbl9oYXJkZW4uc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFNVQlRFU1RfTkFNRV9NQVhfTEVOCTEyOAomIzQzOyNkZWZpbmUgUFJPR19OQU1FX01BWF9MRU4JMTI4CiYjNDM7CiYjNDM7I2RlZmluZSBNQVhfTE9HX1NJWkUJCSg4ICogMTAyNCkKJiM0MzsjZGVmaW5lIFJFQURfQ0hVTktfU0laRQkJMjU2CiYjNDM7CiYjNDM7I2RlZmluZSBLQVNBTl9QQVRURVJOX1NMQUJfVUFGICYjMzQ7QlVHOiBLQVNBTjogc2xhYi11c2UtYWZ0ZXItZnJlZSAmIzM0OyBcCiYjNDM7CSYjMzQ7aW4gYnBmX3Byb2dfJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhfJXMmIzM0OwomIzQzOyNkZWZpbmUgS0FTQU5fUEFUVEVSTl9SRVBPUlQgJiMzNDslcyBvZiBzaXplICVkIGF0IGFkZHImIzM0OwomIzQzOwomIzQzO3N0YXRpYyBjaGFyIGtsb2dfYnVmZmVyW01BWF9MT0dfU0laRV07CiYjNDM7c3RhdGljIGNoYXIgcmVjb3JkW01BWF9MT0dfU0laRV07CiYjNDM7CiYjNDM7c3RydWN0IHRlc3Rfc3BlYyB7CiYjNDM7CWNoYXIgKnByb2dfdHlwZTsKJiM0MzsJYm9vbCBpc193cml0ZTsKJiM0MzsJYm9vbCBvbmx5XzMyX29yXzY0OwomIzQzOwlib29sIG5lZWRzX2xvYWRfYWNxX3N0b3JlX3JlbDsKJiM0MzsJYm9vbCBza2lwX211bHRpX3NpemVfdGVzdGluZzsKJiM0MzsJYm9vbCBza2lwX29uX3N0YWNrX3Rlc3Rpbmc7CiYjNDM7CWludCBydW5fc2l6ZTsKJiM0MzsJYm9vbCBleHBlY3Rfbm9fcmVwb3J0OwomIzQzOwlib29sIHJuZF9oaTMyOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB7CiYjNDM7CV9fdTggZGF0YV8xOwomIzQzOwlfX3UxNiBkYXRhXzI7CiYjNDM7CV9fdTMyIGRhdGFfNDsKJiM0MzsJX191NjQgZGF0YV84OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHRlc3RfY3R4IHsKJiM0MzsJX191OCAgcHJvZ190YWdbQlBGX1RBR19TSVpFXTsKJiM0MzsJc3RydWN0IGJwZl9vYmplY3QgKm9iajsKJiM0MzsJaW50ICphY2Nlc3Nfc2l6ZTsKJiM0MzsJYm9vbCBza2lwX2xvYWRfYWNxX3N0b3JlX3JlbDsKJiM0MzsJc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nOwomIzQzOwljaGFyIHByb2dfbmFtZVtTVUJURVNUX05BTUVfTUFYX0xFTl07CiYjNDM7CWludCBrbG9nX2ZkOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBvcGVuX2tlcm5lbF9sb2dzKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CWZkID0gb3BlbigmIzM0Oy9kZXYva21zZyYjMzQ7LCBPX1JET05MWSB8IE9fTk9OQkxPQ0spOwomIzQzOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNraXBfa2VybmVsX2xvZ3MoaW50IGZkKQomIzQzO3sKJiM0MzsJbHNlZWsoZmQsIDAsIFNFRUtfRU5EKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByZWFkX2tlcm5lbF9sb2dzKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgbWF4X2xlbikKJiM0Mzt7CiYjNDM7CXNpemVfdCB0b3RhbCA9IDA7CiYjNDM7CXNzaXplX3QgbjsKJiM0MzsKJiM0MzsJYnVmWzBdID0gJiMzOTtcMCYjMzk7OwomIzQzOwl3aGlsZSAoMSkgewomIzQzOwkJY2hhciAqbXNnLCAqZW9sOwomIzQzOwkJc2l6ZV90IGxlbjsKJiM0MzsKJiM0MzsJCW4gPSByZWFkKGZkLCByZWNvcmQsIHNpemVvZihyZWNvcmQpIC0gMSk7CiYjNDM7CQlpZiAobiAmbHQ7IDApIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRUFHQUlOKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCQlyZXR1cm4gbjsKJiM0MzsJCX0KJiM0MzsJCXJlY29yZFtuXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBFYWNoIGttc2cgcmVjb3JkIHN0YXJ0cyB3aXRoIHNvbWUgbWV0YWRhdGEsIHNlcGFyYXRlZAomIzQzOwkJICogZnJvbSB0aGUgYWN0dWFsIGNvbnRlbnQgYnkgYSBzZW1pLWNvbG9uCiYjNDM7CQkgKi8KJiM0MzsJCW1zZyA9IHN0cmNocihyZWNvcmQsICYjMzk7OyYjMzk7KTsKJiM0MzsJCWlmICghbXNnKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJbXNnJiM0MzsmIzQzOzsKJiM0MzsJCWVvbCA9IHN0cmNocihtc2csICYjMzk7XG4mIzM5Oyk7CiYjNDM7CQlpZiAoZW9sKQomIzQzOwkJCSplb2wgPSAmIzM5O1wwJiMzOTs7CiYjNDM7CiYjNDM7CQlsZW4gPSBzdHJsZW4obXNnKTsKJiM0MzsJCWlmICh0b3RhbCAmIzQzOyBsZW4gJiM0MzsgMiAmZ3Q7IG1heF9sZW4pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQltZW1jcHkoYnVmICYjNDM7IHRvdGFsLCBtc2csIGxlbik7CiYjNDM7CQl0b3RhbCAmIzQzOz0gbGVuOwomIzQzOwkJYnVmW3RvdGFsJiM0MzsmIzQzO10gPSAmIzM5O1xuJiMzOTs7CiYjNDM7CQlidWZbdG90YWxdID0gJiMzOTtcMCYjMzk7OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0b3RhbDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjaGVja19rYXNhbl9yZXBvcnRfaW5fa2VybmVsX2xvZ3MoY2hhciAqYnVmLCBzdHJ1Y3QgdGVzdF9jdHggKmN0eCwKJiM0MzsJCQkJCSAgICAgYm9vbCBpc193cml0ZSwgaW50IHNpemUpCiYjNDM7ewomIzQzOwljaGFyIGFjY2Vzc19sb2dbUkVBRF9DSFVOS19TSVpFXTsKJiM0MzsJY2hhciAqa2FzYW5fcmVwb3J0X3N0YXJ0OwomIzQzOwlpbnQgbnNpemU7CiYjNDM7CiYjNDM7CXNucHJpbnRmKGFjY2Vzc19sb2csIFJFQURfQ0hVTktfU0laRSwgS0FTQU5fUEFUVEVSTl9TTEFCX1VBRiwKJiM0MzsJCSBjdHgtJmd0O3Byb2dfdGFnWzBdLCBjdHgtJmd0O3Byb2dfdGFnWzFdLCBjdHgtJmd0O3Byb2dfdGFnWzJdLAomIzQzOwkJIGN0eC0mZ3Q7cHJvZ190YWdbM10sIGN0eC0mZ3Q7cHJvZ190YWdbNF0sIGN0eC0mZ3Q7cHJvZ190YWdbNV0sCiYjNDM7CQkgY3R4LSZndDtwcm9nX3RhZ1s2XSwgY3R4LSZndDtwcm9nX3RhZ1s3XSwgY3R4LSZndDtwcm9nX25hbWUpOwomIzQzOwkvKgomIzQzOwkgKiBTZWFyY2hlZCBrYXNhbiByZXBvcnQgaXMgdmFsaWQgaWYKJiM0MzsJICogLSBpdCBjb250YWlucyB0aGUgZXhwZWN0ZWQga2FzYW4gcGF0dGVybgomIzQzOwkgKiAtIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmF1bHR5IGFjY2VzcyBpcyBmb3VuZCBzb21ld2hlcmUKJiM0MzsJICogICBhZnRlciB0aGUgaGVhZGVyIChub3QgbmVjZXNzYXJpbHkgb24gdGhlIHZlcnkgbmV4dCBsaW5lLAomIzQzOwkgKiAgIGJlY2F1c2Ugb3RoZXIga2VybmVsIG1lc3NhZ2VzIG1heSBpbnRlcmxlYXZlKQomIzQzOwkgKiAtIGZhdWx0eSBhY2Nlc3MgcHJvcGVydGllcyBtYXRjaCB0aGUgdGVzdGVkIHR5cGUgYW5kIHNpemUKJiM0MzsJICovCiYjNDM7CWthc2FuX3JlcG9ydF9zdGFydCA9IHN0cnN0cihidWYsIGFjY2Vzc19sb2cpOwomIzQzOwomIzQzOwlpZiAoIWthc2FuX3JlcG9ydF9zdGFydCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwluc2l6ZSA9IHNucHJpbnRmKGFjY2Vzc19sb2csIFJFQURfQ0hVTktfU0laRSwgS0FTQU5fUEFUVEVSTl9SRVBPUlQsCiYjNDM7CQkJIGlzX3dyaXRlID8gJiMzNDtXcml0ZSYjMzQ7IDogJiMzNDtSZWFkJiMzNDssIHNpemUpOwomIzQzOwomIzQzOwlpZiAoIXN0cnN0cihrYXNhbl9yZXBvcnRfc3RhcnQsIGFjY2Vzc19sb2cpKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBleGVjX3N1YnRlc3Qoc3RydWN0IHRlc3RfY3R4ICpjdHgsIHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsCiYjNDM7CQkJIGludCBhY2Nlc3Nfc2l6ZSwgYm9vbCBvbl9zdGFjaykKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7CiYjNDM7CXN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm87CiYjNDM7CXVpbnQ4X3QgYnVmW0VUSF9ITEVOXSA9IHswfTsKJiM0MzsJaW50IHJldCwgcHJvZ19mZDsKJiM0MzsJX191MzIgaW5mb19sZW47CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGN0eC0mZ3Q7b2JqLAomIzQzOwkJCQkJCSAgICAgY3R4LSZndDtwcm9nX25hbWUpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoY3R4LSZndDtwcm9nLCAmIzM0O2ZpbmQgdGVzdCBwcm9nJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpbmZvX2xlbiA9IHNpemVvZihpbmZvKTsKJiM0MzsJbWVtc2V0KCZhbXA7aW5mbywgMCwgaW5mb19sZW4pOwomIzQzOwlwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC0mZ3Q7cHJvZyk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKHByb2dfZmQsICYjMzQ7Z2V0IHByb2cgZmQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CXJldCA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHByb2dfZmQsICZhbXA7aW5mbywgJmFtcDtpbmZvX2xlbik7CiYjNDM7CWlmICghQVNTRVJUX09LKHJldCwgJiMzNDtmZXRjaCBsb2FkZWQgcHJvZ3JhbSBpbmZvJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwltZW1jcHkoY3R4LSZndDtwcm9nX3RhZywgaW5mby50YWcsIEJQRl9UQUdfU0laRSk7CiYjNDM7CiYjNDM7CXNraXBfa2VybmVsX2xvZ3MoY3R4LSZndDtrbG9nX2ZkKTsKJiM0MzsKJiM0MzsJdG9wdHMuc3ogPSBzaXplb2Yoc3RydWN0IGJwZl90ZXN0X3J1bl9vcHRzKTsKJiM0MzsJdG9wdHMuZGF0YV9zaXplX2luID0gRVRIX0hMRU47CiYjNDM7CXRvcHRzLmRhdGFfaW4gPSBidWY7CiYjNDM7CWlmIChjdHgtJmd0O2FjY2Vzc19zaXplKQomIzQzOwkJKmN0eC0mZ3Q7YWNjZXNzX3NpemUgPSBhY2Nlc3Nfc2l6ZTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoY3R4LSZndDtwcm9nKSwKJiM0MzsJCQkJICAgICAmYW1wO3RvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O3J1biBwcm9nJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyZXQgPSByZWFkX2tlcm5lbF9sb2dzKGN0eC0mZ3Q7a2xvZ19mZCwga2xvZ19idWZmZXIsIE1BWF9MT0dfU0laRSk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHJldCwgMCwgJiMzNDtyZWFkIGtlcm5lbCBsb2dzJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyZXQgPSBjaGVja19rYXNhbl9yZXBvcnRfaW5fa2VybmVsX2xvZ3Moa2xvZ19idWZmZXIsIGN0eCwKJiM0MzsJCQkJCQl0ZXN0LSZndDtpc193cml0ZSwgYWNjZXNzX3NpemUpOwomIzQzOwlpZiAob25fc3RhY2sgfHwgdGVzdC0mZ3Q7ZXhwZWN0X25vX3JlcG9ydCkKJiM0MzsJCUFTU0VSVF9ORVEocmV0LCAwLCAmIzM0O25vIHJlcG9ydCBzaG91bGQgYmUgZ2VuZXJhdGVkJiMzNDspOwomIzQzOwllbHNlCiYjNDM7CQlBU1NFUlRfT0socmV0LCAmIzM0O3JlcG9ydCBzaG91bGQgYmUgZ2VuZXJhdGVkJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydW5fc3VidGVzdF93aXRoX3NpemVfYW5kX2xvY2F0aW9uKHN0cnVjdCB0ZXN0X2N0eCAqY3R4LAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsCiYjNDM7CQkJCQkgICAgICAgaW50IGFjY2Vzc19zaXplLAomIzQzOwkJCQkJICAgICAgIGJvb2wgb25fc3RhY2spCiYjNDM7ewomIzQzOwljaGFyIHN1YnRlc3RfbmFtZVtTVUJURVNUX05BTUVfTUFYX0xFTl07CiYjNDM7CiYjNDM7CWlmICh0ZXN0LSZndDtza2lwX211bHRpX3NpemVfdGVzdGluZykgewomIzQzOwkJc25wcmludGYoc3VidGVzdF9uYW1lLCBTVUJURVNUX05BTUVfTUFYX0xFTiwgJiMzNDslcyYjMzQ7LAomIzQzOwkJCSB0ZXN0LSZndDtwcm9nX3R5cGUpOwomIzQzOwkJc3RybmNweShjdHgtJmd0O3Byb2dfbmFtZSwgdGVzdC0mZ3Q7cHJvZ190eXBlLCBQUk9HX05BTUVfTUFYX0xFTik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzbnByaW50ZihzdWJ0ZXN0X25hbWUsIFNVQlRFU1RfTkFNRV9NQVhfTEVOLCAmIzM0OyVzXyVkXyVzJiMzNDssCiYjNDM7CQkJIHRlc3QtJmd0O3Byb2dfdHlwZSwgYWNjZXNzX3NpemUsCiYjNDM7CQkJIG9uX3N0YWNrID8gJiMzNDtvbl9zdGFjayYjMzQ7IDogJiMzNDtub3Rfb25fc3RhY2smIzM0Oyk7CiYjNDM7CQlzbnByaW50ZihjdHgtJmd0O3Byb2dfbmFtZSwgUFJPR19OQU1FX01BWF9MRU4sICYjMzQ7JXNfJXMmIzM0OywKJiM0MzsJCQkgdGVzdC0mZ3Q7cHJvZ190eXBlLAomIzQzOwkJCSBvbl9zdGFjayA/ICYjMzQ7b25fc3RhY2smIzM0OyA6ICYjMzQ7bm90X29uX3N0YWNrJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghdGVzdF9fc3RhcnRfc3VidGVzdChzdWJ0ZXN0X25hbWUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAodGVzdC0mZ3Q7bmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsICZhbXA7JmFtcDsgY3R4LSZndDtza2lwX2xvYWRfYWNxX3N0b3JlX3JlbCkgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWV4ZWNfc3VidGVzdChjdHgsIHRlc3QsIGFjY2Vzc19zaXplLCBvbl9zdGFjayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwKJiM0MzsJCQkJICBpbnQgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZV9hbmRfbG9jYXRpb24oY3R4LCB0ZXN0LCBzaXplLCBmYWxzZSk7CiYjNDM7CWlmICghdGVzdC0mZ3Q7c2tpcF9vbl9zdGFja190ZXN0aW5nKQomIzQzOwkJcnVuX3N1YnRlc3Rfd2l0aF9zaXplX2FuZF9sb2NhdGlvbihjdHgsIHRlc3QsIHNpemUsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydW5fc3VidGVzdChzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0LSZndDtza2lwX211bHRpX3NpemVfdGVzdGluZykgewomIzQzOwkJcnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgdGVzdC0mZ3Q7cnVuX3NpemUpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghdGVzdC0mZ3Q7b25seV8zMl9vcl82NCkgewomIzQzOwkJcnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgMSk7CiYjNDM7CQlydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCAyKTsKJiM0MzsJfQomIzQzOwlydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCA0KTsKJiM0MzsJcnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgOCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ1bl9ibGluZGluZ19zdWJ0ZXN0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9zcGVjIGJsaW5kaW5nX3NwZWMgPSB7CiYjNDM7CQkucHJvZ190eXBlID0gJiMzNDtzdF9ibGluZGVkJiMzNDssCiYjNDM7CQkuaXNfd3JpdGUgPSB0cnVlLAomIzQzOwl9OwomIzQzOwljaGFyIGJwZl9qaXRfaGFyZGVuID0gJiMzOTsyJiMzOTs7CiYjNDM7CXN0cnVjdCBrYXNhbl9oYXJkZW4gKnNrZWw7CiYjNDM7CXN0cnVjdCB0ZXN0X2N0eCAqY3R4OwomIzQzOwomIzQzOwlpZiAoIXRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzdF9ibGluZGVkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwljdHggPSBjYWxsb2MoMSwgc2l6ZW9mKCpjdHgpKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGN0eCwgJiMzNDthbGxvYyBibGluZGluZyBjdHgmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWN0eC0mZ3Q7a2xvZ19mZCA9IC0xOwomIzQzOwomIzQzOwlpZiAoc2V0X2JwZl9qaXRfaGFyZGVuKCZhbXA7YnBmX2ppdF9oYXJkZW4pKQomIzQzOwkJZ290byBmcmVlX2N0eDsKJiM0MzsKJiM0MzsJc2tlbCA9IGthc2FuX2hhcmRlbl9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtvcGVuIGFuZCBsb2FkIGJsaW5kZWQgcHJvZyYjMzQ7KSkKJiM0MzsJCWdvdG8gcmVzdG9yZTsKJiM0MzsKJiM0MzsJY3R4LSZndDtrbG9nX2ZkID0gb3Blbl9rZXJuZWxfbG9ncygpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjdHgtJmd0O2tsb2dfZmQsICYjMzQ7b3BlbiBrZXJuZWwgbG9ncyYjMzQ7KSkKJiM0MzsJCWdvdG8gZGVzdHJveTsKJiM0MzsKJiM0MzsJY3R4LSZndDtvYmogPSBza2VsLSZndDtvYmo7CiYjNDM7CXN0cm5jcHkoY3R4LSZndDtwcm9nX25hbWUsICYjMzQ7c3RfYmxpbmRlZCYjMzQ7LCBQUk9HX05BTUVfTUFYX0xFTik7CiYjNDM7CiYjNDM7CWV4ZWNfc3VidGVzdChjdHgsICZhbXA7YmxpbmRpbmdfc3BlYywgMSwgZmFsc2UpOwomIzQzOwomIzQzO2Rlc3Ryb3k6CiYjNDM7CWNsb3NlKGN0eC0mZ3Q7a2xvZ19mZCk7CiYjNDM7CWthc2FuX2hhcmRlbl9fZGVzdHJveShza2VsKTsKJiM0MztyZXN0b3JlOgomIzQzOwlzZXRfYnBmX2ppdF9oYXJkZW4oJmFtcDticGZfaml0X2hhcmRlbik7CiYjNDM7ZnJlZV9jdHg6CiYjNDM7CWZyZWUoY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB0ZXN0X3NwZWMgdGVzdHNbXSA9IHsKJiM0MzsJewomIzQzOwkJLnByb2dfdHlwZSA9ICYjMzQ7c3QmIzM0OywKJiM0MzsJCS5pc193cml0ZSA9IHRydWUKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLnByb2dfdHlwZSA9ICYjMzQ7c3R4JiMzNDssCiYjNDM7CQkuaXNfd3JpdGUgPSB0cnVlCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5wcm9nX3R5cGUgPSAmIzM0O2xkeCYjMzQ7LAomIzQzOwkJLmlzX3dyaXRlID0gZmFsc2UKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLnByb2dfdHlwZSA9ICYjMzQ7c2ltcGxlX2F0b21pYyYjMzQ7LAomIzQzOwkJLmlzX3dyaXRlID0gZmFsc2UsCiYjNDM7CQkub25seV8zMl9vcl82NCA9IHRydWUKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLnByb2dfdHlwZSA9ICYjMzQ7bG9hZF9hY3F1aXJlJiMzNDssCiYjNDM7CQkuaXNfd3JpdGUgPSBmYWxzZSwKJiM0MzsJCS5uZWVkc19sb2FkX2FjcV9zdG9yZV9yZWwgPSB0cnVlCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5wcm9nX3R5cGUgPSAmIzM0O3N0b3JlX3JlbGVhc2UmIzM0OywKJiM0MzsJCS5pc193cml0ZSA9IHRydWUsCiYjNDM7CQkubmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsID0gdHJ1ZQomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkucHJvZ190eXBlID0gJiMzNDtsZHhfcGF0Y2hlZCYjMzQ7LAomIzQzOwkJLmlzX3dyaXRlID0gZmFsc2UsCiYjNDM7CQkuc2tpcF9tdWx0aV9zaXplX3Rlc3RpbmcgPSB0cnVlLAomIzQzOwkJLnNraXBfb25fc3RhY2tfdGVzdGluZyA9IHRydWUsCiYjNDM7CQkucnVuX3NpemUgPSA0LAomIzQzOwkJLnJuZF9oaTMyID0gdHJ1ZQomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkucHJvZ190eXBlID0gJiMzNDtsZHhfcGF0Y2hlZF9vbl9zdGFjayYjMzQ7LAomIzQzOwkJLmlzX3dyaXRlID0gZmFsc2UsCiYjNDM7CQkuc2tpcF9tdWx0aV9zaXplX3Rlc3RpbmcgPSB0cnVlLAomIzQzOwkJLnNraXBfb25fc3RhY2tfdGVzdGluZyA9IHRydWUsCiYjNDM7CQkucnVuX3NpemUgPSA0LAomIzQzOwkJLmV4cGVjdF9ub19yZXBvcnQgPSB0cnVlLAomIzQzOwkJLnJuZF9oaTMyID0gdHJ1ZQomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkucHJvZ190eXBlID0gJiMzNDt2ZXJpZmllcl9wYXRoc19zdGFja19hbmRfbm9uX3N0YWNrJiMzNDssCiYjNDM7CQkuaXNfd3JpdGUgPSB0cnVlLAomIzQzOwkJLnNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nID0gdHJ1ZSwKJiM0MzsJCS5za2lwX29uX3N0YWNrX3Rlc3RpbmcgPSB0cnVlLAomIzQzOwkJLnJ1bl9zaXplID0gMQomIzQzOwl9CiYjNDM7fTsKJiM0MzsKJiM0Mzt2b2lkIHRlc3Rfa2FzYW4odm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsOwomIzQzOwlzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0OwomIzQzOwlzdHJ1Y3QgdGVzdF9jdHggKmN0eDsKJiM0MzsJc3RydWN0IGthc2FuICpza2VsOwomIzQzOwlfX3UzMiBrZXkgPSAwOwomIzQzOwlpbnQgaSwgcmV0OwomIzQzOwomIzQzOwljdHggPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB0ZXN0X2N0eCkpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoY3R4LCAmIzM0O2FsbG9jIHRlc3QgY3R4JiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIWlzX2ppdF9lbmFibGVkKCkgfHwgIWdldF9rYXNhbl9qaXRfZW5hYmxlZCgpKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIGVuZDsKJiM0MzsJfQomIzQzOwomIzQzOwlza2VsID0ga2FzYW5fX29wZW4oKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7b3BlbiBwcm9nJiMzNDspKQomIzQzOwkJZ290byBlbmQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHRlc3RzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZzsKJiM0MzsKJiM0MzsJCWlmICghdGVzdHNbaV0ucm5kX2hpMzIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoc2tlbC0mZ3Q7b2JqLAomIzQzOwkJCQkJCQl0ZXN0c1tpXS5wcm9nX3R5cGUpOwomIzQzOwkJaWYgKCFBU1NFUlRfT0tfUFRSKHByb2csICYjMzQ7ZmluZCBybmRfaGkzMiBwcm9nJiMzNDspKQomIzQzOwkJCWdvdG8gZGVzdHJveTsKJiM0MzsJCWJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgQlBGX0ZfVEVTVF9STkRfSEkzMik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0soa2FzYW5fX2xvYWQoc2tlbCksICYjMzQ7bG9hZCBwcm9nJiMzNDspKQomIzQzOwkJZ290byBkZXN0cm95OwomIzQzOwomIzQzOwljdHgtJmd0O29iaiA9IHNrZWwtJmd0O29iajsKJiM0MzsJY3R4LSZndDthY2Nlc3Nfc2l6ZSA9ICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDthY2Nlc3Nfc2l6ZTsKJiM0MzsJY3R4LSZndDtza2lwX2xvYWRfYWNxX3N0b3JlX3JlbCA9IHNrZWwtJmd0O2RhdGEtJmd0O3NraXBfbG9hZF9hY3Ffc3RvcmVfcmVsX3Rlc3RzOwomIzQzOwomIzQzOwljdHgtJmd0O2tsb2dfZmQgPSBvcGVuX2tlcm5lbF9sb2dzKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKGN0eC0mZ3Q7a2xvZ19mZCwgJiMzNDtvcGVuIGtlcm5lbCBsb2dzJiMzNDspKQomIzQzOwkJZ290byBkZXN0cm95OwomIzQzOwomIzQzOwkvKiBGaWxsIG1hcCB3aXRoIHJlY29nbml6YWJsZSB2YWx1ZXMgKi8KJiM0MzsJcmV0ID0gYnBmX21hcF9fbG9va3VwX2VsZW0oc2tlbC0mZ3Q7bWFwcy50ZXN0X21hcCwgJmFtcDtrZXksIHNpemVvZihrZXkpLAomIzQzOwkJCQkgICAmYW1wO3ZhbCwgc2l6ZW9mKHZhbCksIDApOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7Z2V0IG1hcCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xvc2U7CiYjNDM7CXZhbC5kYXRhXzEgPSAweEFBOwomIzQzOwl2YWwuZGF0YV8yID0gMHhCQkJCOwomIzQzOwl2YWwuZGF0YV80ID0gMHhDQ0NDQ0NDQzsKJiM0MzsJdmFsLmRhdGFfOCA9IDB4RERERERERERERERERERERDsKJiM0MzsJcmV0ID0gYnBmX21hcF9fdXBkYXRlX2VsZW0oc2tlbC0mZ3Q7bWFwcy50ZXN0X21hcCwgJmFtcDtrZXksIHNpemVvZihrZXkpLAomIzQzOwkJCQkgICAmYW1wO3ZhbCwgc2l6ZW9mKHZhbCksIDApOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7c2V0IG1hcCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xvc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHRlc3RzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXRlc3QgPSAmYW1wO3Rlc3RzW2ldOwomIzQzOwkJcnVuX3N1YnRlc3QoY3R4LCB0ZXN0KTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCbGluZGluZyBzdWJ0ZXN0IGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgYXMgaXQgbmVlZHMgdGhlCiYjNDM7CSAqIGNvcnJlc3BvbmRpbmcgcHJvZ3JhbSB0byBiZSBsb2FkZWQgd2l0aCBicGZfaml0X2hhcmRlbiByYWlzZWQKJiM0MzsJICovCiYjNDM7CXJ1bl9ibGluZGluZ19zdWJ0ZXN0KCk7CiYjNDM7CiYjNDM7Y2xvc2U6CiYjNDM7CWNsb3NlKGN0eC0mZ3Q7a2xvZ19mZCk7CiYjNDM7ZGVzdHJveToKJiM0MzsJa2FzYW5fX2Rlc3Ryb3koc2tlbCk7CiYjNDM7ZW5kOgomIzQzOwlmcmVlKGN0eCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uODJkZGNlMzA1OWFlZTEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW4uYwpAQCAtMCwwICYjNDM7MSwzOTQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiYjNDM7CiYjNDM7ZXh0ZXJuIHZvaWQgYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTsKJiM0MztleHRlcm4gdm9pZCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07CiYjNDM7CiYjNDM7aW50IGFjY2Vzc19zaXplOwomIzQzOwomIzQzO3N0cnVjdCBrYXNhbl93cml0ZV92YWwgewomIzQzOwlfX3U4IGRhdGFfMTsKJiM0MzsJX191MTYgZGF0YV8yOwomIzQzOwlfX3UzMiBkYXRhXzQ7CiYjNDM7CV9fdTY0IGRhdGFfODsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3UzMik7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IGthc2FuX3dyaXRlX3ZhbCk7CiYjNDM7fSB0ZXN0X21hcCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MztTRUMoJiMzNDt0Y3gvaW5ncmVzcyYjMzQ7KQomIzQzO2ludCBzdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3BvaXNvbigmYW1wO3ZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJc3dpdGNoIChhY2Nlc3Nfc2l6ZSkgewomIzQzOwljYXNlIDE6CiYjNDM7CQl2YWwuZGF0YV8xID0gMHhBQTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDI6CiYjNDM7CQl2YWwuZGF0YV8yID0gMHhBQTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDQ6CiYjNDM7CQl2YWwuZGF0YV80ID0gMHhBQTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDg6CiYjNDM7CQl2YWwuZGF0YV84ID0gMHhBQTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWJwZl9rZnVuY19rYXNhbl91bnBvaXNvbigmYW1wO3ZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjeC9pbmdyZXNzJiMzNDspCiYjNDM7aW50IHN0X25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7CiYjNDM7CV9fdTMyIGtleSA9IDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDt0ZXN0X21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJc3dpdGNoIChhY2Nlc3Nfc2l6ZSkgewomIzQzOwljYXNlIDE6CiYjNDM7CQl2YWwtJmd0O2RhdGFfMSA9IDB4QUE7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAyOgomIzQzOwkJdmFsLSZndDtkYXRhXzIgPSAweEFBOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgNDoKJiM0MzsJCXZhbC0mZ3Q7ZGF0YV80ID0gMHhBQTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDg6CiYjNDM7CQl2YWwtJmd0O2RhdGFfOCA9IDB4QUE7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgc3R4X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsOwomIzQzOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fcG9pc29uKCZhbXA7dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlzd2l0Y2ggKGFjY2Vzc19zaXplKSB7CiYjNDM7CWNhc2UgMToKJiM0MzsJCXZhbC5kYXRhXzEgPSBhY2Nlc3Nfc2l6ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDI6CiYjNDM7CQl2YWwuZGF0YV8yID0gYWNjZXNzX3NpemU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA0OgomIzQzOwkJdmFsLmRhdGFfNCA9IGFjY2Vzc19zaXplOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgODoKJiM0MzsJCXZhbC5kYXRhXzggPSBhY2Nlc3Nfc2l6ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWJwZl9rZnVuY19rYXNhbl91bnBvaXNvbigmYW1wO3ZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjeC9pbmdyZXNzJiMzNDspCiYjNDM7aW50IHN0eF9ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsOwomIzQzOwlfX3UzMiBrZXkgPSAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGVzdF9tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXN3aXRjaCAoYWNjZXNzX3NpemUpIHsKJiM0MzsJY2FzZSAxOgomIzQzOwkJdmFsLSZndDtkYXRhXzEgPSBhY2Nlc3Nfc2l6ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDI6CiYjNDM7CQl2YWwtJmd0O2RhdGFfMiA9IGFjY2Vzc19zaXplOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgNDoKJiM0MzsJCXZhbC0mZ3Q7ZGF0YV80ID0gYWNjZXNzX3NpemU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA4OgomIzQzOwkJdmFsLSZndDtkYXRhXzggPSBhY2Nlc3Nfc2l6ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0Y3gvaW5ncmVzcyYjMzQ7KQomIzQzO2ludCBsZHhfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24oJmFtcDt2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXN3aXRjaCAoYWNjZXNzX3NpemUpIHsKJiM0MzsJY2FzZSAxOgomIzQzOwkJX19zaW5rKHZhbC5kYXRhXzEpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgMjoKJiM0MzsJCV9fc2luayh2YWwuZGF0YV8yKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDQ6CiYjNDM7CQlfX3NpbmsodmFsLmRhdGFfNCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA4OgomIzQzOwkJX19zaW5rKHZhbC5kYXRhXzgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKCZhbXA7dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgbGR4X25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7CiYjNDM7CV9fdTMyIGtleSA9IDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDt0ZXN0X21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJc3dpdGNoIChhY2Nlc3Nfc2l6ZSkgewomIzQzOwljYXNlIDE6CiYjNDM7CQlfX3NpbmsodmFsLSZndDtkYXRhXzEpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgMjoKJiM0MzsJCV9fc2luayh2YWwtJmd0O2RhdGFfMik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA0OgomIzQzOwkJX19zaW5rKHZhbC0mZ3Q7ZGF0YV80KTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDg6CiYjNDM7CQlfX3NpbmsodmFsLSZndDtkYXRhXzgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjeC9pbmdyZXNzJiMzNDspCiYjNDM7aW50IGxkeF9wYXRjaGVkKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDsKJiM0MzsJX191MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3Rlc3RfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlfX3NpbmsodmFsLSZndDtkYXRhXzQpOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgbGR4X3BhdGNoZWRfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24oJmFtcDt2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CV9fc2luayh2YWwuZGF0YV80KTsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKCZhbXA7dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgc2ltcGxlX2F0b21pY19vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3BvaXNvbigmYW1wO3ZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJc3dpdGNoIChhY2Nlc3Nfc2l6ZSkgewomIzQzOwljYXNlIDQ6CiYjNDM7CQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO3ZhbC5kYXRhXzQsIDQpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgODoKJiM0MzsJCV9fc3luY19mZXRjaF9hbmRfYWRkKCZhbXA7dmFsLmRhdGFfOCwgOCk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oJmFtcDt2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0Y3gvaW5ncmVzcyYjMzQ7KQomIzQzO2ludCBzaW1wbGVfYXRvbWljX25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7CiYjNDM7CV9fdTMyIGtleSA9IDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDt0ZXN0X21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJc3dpdGNoIChhY2Nlc3Nfc2l6ZSkgewomIzQzOwljYXNlIDQ6CiYjNDM7CQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO3ZhbC0mZ3Q7ZGF0YV80LCA0KTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDg6CiYjNDM7CQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO3ZhbC0mZ3Q7ZGF0YV84LCA4KTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjaWZkZWYgX19CUEZfRkVBVFVSRV9MT0FEX0FDUV9TVE9SRV9SRUwKJiM0Mztib29sIHNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsX3Rlc3RzIFNFQygmIzM0Oy5kYXRhJiMzNDspID0gMDsKJiM0MzsKJiM0MztTRUMoJiMzNDt0Y3gvaW5ncmVzcyYjMzQ7KQomIzQzO2ludCBsb2FkX2FjcXVpcmVfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24oJmFtcDt2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXN3aXRjaCAoYWNjZXNzX3NpemUpIHsKJiM0MzsJY2FzZSAxOgomIzQzOwkJX19hdG9taWNfbG9hZF9uKCZhbXA7dmFsLmRhdGFfMSwgX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAyOgomIzQzOwkJX19hdG9taWNfbG9hZF9uKCZhbXA7dmFsLmRhdGFfMiwgX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA0OgomIzQzOwkJX19hdG9taWNfbG9hZF9uKCZhbXA7dmFsLmRhdGFfNCwgX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA4OgomIzQzOwkJX19hdG9taWNfbG9hZF9uKCZhbXA7dmFsLmRhdGFfOCwgX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oJmFtcDt2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0Y3gvaW5ncmVzcyYjMzQ7KQomIzQzO2ludCBsb2FkX2FjcXVpcmVfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDsKJiM0MzsJX191MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3Rlc3RfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlzd2l0Y2ggKGFjY2Vzc19zaXplKSB7CiYjNDM7CWNhc2UgMToKJiM0MzsJCV9fYXRvbWljX2xvYWRfbigmYW1wO3ZhbC0mZ3Q7ZGF0YV8xLCBfX0FUT01JQ19BQ1FVSVJFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDI6CiYjNDM7CQlfX2F0b21pY19sb2FkX24oJmFtcDt2YWwtJmd0O2RhdGFfMiwgX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA0OgomIzQzOwkJX19hdG9taWNfbG9hZF9uKCZhbXA7dmFsLSZndDtkYXRhXzQsIF9fQVRPTUlDX0FDUVVJUkUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgODoKJiM0MzsJCV9fYXRvbWljX2xvYWRfbigmYW1wO3ZhbC0mZ3Q7ZGF0YV84LCBfX0FUT01JQ19BQ1FVSVJFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0Y3gvaW5ncmVzcyYjMzQ7KQomIzQzO2ludCBzdG9yZV9yZWxlYXNlX29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsOwomIzQzOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fcG9pc29uKCZhbXA7dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlzd2l0Y2ggKGFjY2Vzc19zaXplKSB7CiYjNDM7CWNhc2UgMToKJiM0MzsJCV9fYXRvbWljX3N0b3JlX24oJmFtcDt2YWwuZGF0YV8xLCAweEFBLCBfX0FUT01JQ19SRUxFQVNFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDI6CiYjNDM7CQlfX2F0b21pY19zdG9yZV9uKCZhbXA7dmFsLmRhdGFfMiwgMHhCQkJCLCBfX0FUT01JQ19SRUxFQVNFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDQ6CiYjNDM7CQlfX2F0b21pY19zdG9yZV9uKCZhbXA7dmFsLmRhdGFfNCwgMHhDQ0NDQ0NDQywgX19BVE9NSUNfUkVMRUFTRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA4OgomIzQzOwkJX19hdG9taWNfc3RvcmVfbigmYW1wO3ZhbC5kYXRhXzgsIDB4RERERERERERERERERERERCwKJiM0MzsJCQkJIF9fQVRPTUlDX1JFTEVBU0UpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKCZhbXA7dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgc3RvcmVfcmVsZWFzZV9ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsOwomIzQzOwlfX3UzMiBrZXkgPSAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGVzdF9tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXN3aXRjaCAoYWNjZXNzX3NpemUpIHsKJiM0MzsJY2FzZSAxOgomIzQzOwkJX19hdG9taWNfc3RvcmVfbigmYW1wO3ZhbC0mZ3Q7ZGF0YV8xLCAweEFBLCBfX0FUT01JQ19SRUxFQVNFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDI6CiYjNDM7CQlfX2F0b21pY19zdG9yZV9uKCZhbXA7dmFsLSZndDtkYXRhXzIsIDB4QkJCQiwgX19BVE9NSUNfUkVMRUFTRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA0OgomIzQzOwkJX19hdG9taWNfc3RvcmVfbigmYW1wO3ZhbC0mZ3Q7ZGF0YV80LCAweENDQ0NDQ0NDLCBfX0FUT01JQ19SRUxFQVNFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDg6CiYjNDM7CQlfX2F0b21pY19zdG9yZV9uKCZhbXA7dmFsLSZndDtkYXRhXzgsIDB4RERERERERERERERERERERCwKJiM0MzsJCQkJIF9fQVRPTUlDX1JFTEVBU0UpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7Ym9vbCBza2lwX2xvYWRfYWNxX3N0b3JlX3JlbF90ZXN0cyBTRUMoJiMzNDsuZGF0YSYjMzQ7KSA9IDE7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgdmVyaWZpZXJfcGF0aHNfc3RhY2tfYW5kX25vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHN0YWNrX3ZhbCA9IHt9OwomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7CiYjNDM7CXZvaWQgKnB0cjsKJiM0MzsJX191MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3Rlc3RfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChhY2Nlc3Nfc2l6ZSkKJiM0MzsJCXB0ciA9IHZhbDsKJiM0MzsJZWxzZQomIzQzOwkJcHRyID0gJmFtcDtzdGFja192YWw7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2YoKnZhbCkpOwomIzQzOwkqKF9fdTggKilwdHIgPSAweEFBOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2YoKnZhbCkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBMSUNFTlNFW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgwOGQ3ZGE2NDQyMTYyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuX2hhcmRlbi5jCkBAIC0wLDAgJiM0MzsxLDQxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7ZXh0ZXJuIHZvaWQgYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTsKJiM0MztleHRlcm4gdm9pZCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07CiYjNDM7CiYjNDM7c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB7CiYjNDM7CV9fdTggZGF0YV8xOwomIzQzOwlfX3UxNiBkYXRhXzI7CiYjNDM7CV9fdTMyIGRhdGFfNDsKJiM0MzsJX191NjQgZGF0YV84OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7CV9fdHlwZShrZXksIF9fdTMyKTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKTsKJiM0Mzt9IHRlc3RfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO1NFQygmIzM0O3RjeC9pbmdyZXNzJiMzNDspCiYjNDM7aW50IHN0X2JsaW5kZWQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsOwomIzQzOwlfX3UzMiBrZXkgPSAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGVzdF9tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXZhbC0mZ3Q7ZGF0YV8xID0gMHhBQTsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgTElDRU5TRVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKaW5kZXggMzBmMWNkMjMwOTNjYmUuLjVkNmE4MzRmN2Q3NTc1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKQEAgLTI3MSw2ICYjNDM7MjcxLDI2IEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3Qoc3RydWN0IHByb2dfdGVzdF9tZW1iZXIKIAkgKi8KIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfQlBGX0pJVF9LQVNBTgomIzQzOwomIzQzO2V4dGVybiB2b2lkIGthc2FuX3BvaXNvbihjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwgdTggdmFsdWUsIGJvb2wgaW5pdCk7CiYjNDM7CiYjNDM7I2RlZmluZSBLQVNBTl9TTEFCX0ZSRUUgMHhGQgomIzQzOwomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2b2lkICptZW0sIHUzMiBtZW1fX3N6KQomIzQzO3sKJiM0MzsJa2FzYW5fcG9pc29uKG1lbSwgbWVtX19zeiwgS0FTQU5fU0xBQl9GUkVFLCBmYWxzZSk7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opCiYjNDM7ewomIzQzOwlrYXNhbl9wb2lzb24obWVtLCBtZW1fX3N6LCAweDAwLCBmYWxzZSk7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opIHsgfQomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opIHsgfQomIzQzOyNlbmRpZgomIzQzOwogX19icGZfa2Z1bmMgc3RydWN0IGJwZl90ZXN0bW9kX2N0eCAqCiBicGZfdGVzdG1vZF9jdHhfY3JlYXRlKGludCAqZXJyKQogewpAQCAtNzQwLDYgJiM0Mzs3NjAsOCBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTsKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7CiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19rYXNhbl9wb2lzb24pCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbikKIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpCiAKIEJURl9JRF9MSVNUKGJwZl90ZXN0bW9kX2R0b3JfaWRzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jCmluZGV4IGM5NzBlNzc5M2RmY2JjLi43MzdmNjY4YjM1ZTIzYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYwpAQCAtNTE5LDYgJiM0Mzs1MTksMzggQEAgYm9vbCBpc19qaXRfZW5hYmxlZCh2b2lkKQogCXJldHVybiBlbmFibGVkOwogfQogCiYjNDM7aW50IHNldF9icGZfaml0X2hhcmRlbihjaGFyICpsZXZlbCkKJiM0Mzt7CiYjNDM7CWNoYXIgb2xkX2xldmVsOwomIzQzOwlpbnQgZXJyID0gLTE7CiYjNDM7CWludCBmZCA9IC0xOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oJiMzNDsvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4mIzM0OywgT19SRFdSIHwgT19OT05CTE9DSyk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWVyciA9IHJlYWQoZmQsICZhbXA7b2xkX2xldmVsLCAxKTsKJiM0MzsJaWYgKGVyciAhPSAxKSB7CiYjNDM7CQllcnIgPSAtMTsKJiM0MzsJCWdvdG8gZW5kOwomIzQzOwl9CiYjNDM7CiYjNDM7CWxzZWVrKGZkLCAwLCBTRUVLX1NFVCk7CiYjNDM7CiYjNDM7CWVyciA9IHdyaXRlKGZkLCBsZXZlbCwgMSk7CiYjNDM7CWlmIChlcnIgIT0gMSkgewomIzQzOwkJZXJyID0gLTE7CiYjNDM7CQlnb3RvIGVuZDsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSAwOwomIzQzOwkqbGV2ZWwgPSBvbGRfbGV2ZWw7CiYjNDM7ZW5kOgomIzQzOwlpZiAoZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZCkKIHsKIAl2b2lkICpidWY7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmgKaW5kZXggMmVkYzZmYjdmYzUyMTIuLmUwMDY0MmFmZTg2ZjQwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oCkBAIC01OSw2ICYjNDM7NTksNyBAQCBzdHJ1Y3QgYnBmX2luc247CiBpbnQgZ2V0X3hsYXRlZF9wcm9ncmFtKGludCBmZF9wcm9nLCBzdHJ1Y3QgYnBmX2luc24gKipidWYsIF9fdTMyICpjbnQpOwogaW50IHRlc3RpbmdfcHJvZ19mbGFncyh2b2lkKTsKIGJvb2wgaXNfaml0X2VuYWJsZWQodm9pZCk7CiYjNDM7aW50IHNldF9icGZfaml0X2hhcmRlbihjaGFyICpsZXZlbCk7CiBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZCk7CiAKICNlbmRpZiAvKiBfX1RFU1RJTkdfSEVMUEVSU19IICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jCmluZGV4IGY5OTdkN2VjOGZkMDg2Li4xMTIwMWI2NWEzZDRiNSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmMKQEAgLTE0MiwzICYjNDM7MTQyLDggQEAgYm9vbCBnZXRfdW5wcml2X2Rpc2FibGVkKHZvaWQpCiAJfQogCXJldHVybiBtaXRpZ2F0aW9uc19vZmY7CiB9CiYjNDM7CiYjNDM7Ym9vbCBnZXRfa2FzYW5faml0X2VuYWJsZWQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjb25maWdfY29udGFpbnMoJiMzNDtDT05GSUdfQlBGX0pJVF9LQVNBTj15JiMzNDspID09IDE7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuaAppbmRleCAxNTFmNjczMjk2NjUyMi4uYmM1ZjRjOTUzYzlkNmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oCkBAIC01LDMgJiM0Mzs1LDQgQEAKICNkZWZpbmUgVU5QUklWX1NZU0NUTCAmIzM0O2tlcm5lbC91bnByaXZpbGVnZWRfYnBmX2Rpc2FibGVkJiMzNDsKIAogYm9vbCBnZXRfdW5wcml2X2Rpc2FibGVkKHZvaWQpOwomIzQzO2Jvb2wgZ2V0X2thc2FuX2ppdF9lbmFibGVkKHZvaWQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM3NwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEwMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLQVNBTiBTdXBwb3J0IGZvciBCUEYgSklUIENvbXBpbGVyKioKCk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNpbmcgS0FTQU4gc3VwcG9ydCBmb3IgdGhlIEJQRiBKSVQgY29tcGlsZXIgb24geDg2XzY0LiBJdCBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBhIG5ldyBgQ09ORklHX0JQRl9KSVRfS0FTQU5gIGFuZCBgQ09ORklHX0hBVkVfRUJQRl9KSVRfS0FTQU5gLCBzb21lIG1vZGlmaWNhdGlvbnMgdG8gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgZm9yIGVtaXR0aW5nIEtBU0FOIGNoZWNrcyBkdXJpbmcgSklUIGNvbXBpbGF0aW9uLCBhbmQgc29tZSBhZGp1c3RtZW50cyBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIHRyYWNrIG1lbW9yeSBhY2Nlc3Nlcy4gV2UgYWxzbyBoYXZlIG5ldyB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW4uY2AsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLgoKVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gYSBjb3JlIHBhcnQgb2YgdGhlIGtlcm5lbCDigJMgdGhlIEJQRiBKSVQgY29tcGlsZXIuIEl0JiMzOTtzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUsIHdoaWNoIGlzIGEgc3Ryb25nIGluZGljYXRvci4gU28sIGJhc2VkIG9uIHRoYXQsIHRoZSBmaXJzdCB0aGluZyBpcyB0byBtYXJrIGBXb3J0aEZ1enppbmdgIGFzIGB0cnVlYC4KCk5vdywgd2UgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuICBXZSBoYXZlIHRoZSBuZXcgYEJQRl9KSVRfS0FTQU5gLCBhbmQgdGhlIGV4aXN0aW5nIGBIQVZFX0VCUEZfSklUX0tBU0FOYCwgYnV0IHdlIGNhbiYjMzk7dCBmb3JnZXQgYEtBU0FOX0dFTkVSSUNgLCBgS0FTQU5fVk1BTExPQ2AsIGBCUEZfSklUYCBhbmQgdGhlIGJhc2UgYEtBU0FOYC4KCk5leHQsIHdlIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMuIEluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCB3ZSBoYXZlIGBlbWl0X2thc2FuX2NoZWNrYCwgYGVtaXRfc3RgLCBgZW1pdF9hdG9taWNfbGRfc3RgLCBhbmQgYGRvX2ppdGAuIEluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgd2Ugc2VlIGBhZGp1c3RfaW5zbl9hdXhfZGF0YWAsIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCwgYGJwZl9kb19taXNjX2ZpeHVwc2AsIGFuZCBgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzYC4gRmluYWxseSwgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2Agd2UgaGF2ZSBgbWFya19ub25fc3RhY2tfYWNjZXNzYCBhbmQgYGNoZWNrX21lbV9hY2Nlc3NgLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgd2hpY2ggb2YgdGhlc2UgY2FuIGJlIGRpcmVjdGx5IGxldmVyYWdlZC4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBgZW1pdF9rYXNhbl9jaGVja2AsIGBlbWl0X3N0YCwgYGVtaXRfYXRvbWljX2xkX3N0YCwgYW5kIGBkb19qaXRgIGFyZSBzdGF0aWMgd2l0aGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiAgU28sIHRob3NlIGFyZSBvdXQuCgpCdXQgYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBgYnBmX2RvX21pc2NfZml4dXBzYCwgYGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3Nlc2AsIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AgaW4gYGtlcm5lbC9icGYvKmAgc2VlbSBwcm9taXNpbmcuIEFsc28sIHdlIGhhdmUgYGJwZl9pbnRfaml0X2NvbXBpbGVgLCB3aGljaCBjYWxscyBgZG9faml0YCB3aGljaCwgd2hpbGUgc3RhdGljLCBpcyBjb3JlIHRvIHRoZSBKSVQgY29tcGlsYXRpb24gcHJvY2Vzcy4KCldhaXQsIGlzIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBleHBvcnRlZD8gIExldCBtZSBxdWlja2x5IGNoZWNrLi4uIHllcywgaXQgaXMhICBFeGNlbGxlbnQuCgpTbywgbGV0JiMzOTtzIHVzZSBgYnBmX3BhdGNoX2luc25fZGF0YWAsIGBicGZfZG9fbWlzY19maXh1cHNgLCBhbmQgYGJwZl9pbnRfaml0X2NvbXBpbGVgLgoKQWxyaWdodCwgSSBzaG91bGQgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4gIFdlIHdpbGwgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4gIE91ciBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGBbJiMzNDticGZfcGF0Y2hfaW5zbl9kYXRhJiMzNDssICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDssICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7XWAuIE91ciBgRW5hYmxlQ29uZmlnc2Agd2lsbCBiZSBgWyYjMzQ7QlBGX0pJVF9LQVNBTiYjMzQ7LCAmIzM0O0tBU0FOX0dFTkVSSUMmIzM0OywgJiMzNDtLQVNBTl9WTUFMTE9DJiMzNDssICYjMzQ7QlBGX0pJVCYjMzQ7LCAmIzM0O0tBU0FOJiMzNDtdYC4gRmluYWxseSwgdGhlIGBSZWFzb25pbmdgIHdpbGwgYmU6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgS0FTQU4gc3VwcG9ydCB0byB0aGUgQlBGIEpJVCBjb21waWxlciBvbiB4ODZfNjQsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgbG9naWMuJiMzNDsKCkhtbSwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgYEtBU0FOX0dFTkVSSUNgIGFuZCBgS0FTQU5fVk1BTExPQ2AgYXJlIHVzdWFsbHkgZW5hYmxlZCBpbiBLQVNBTiBidWlsZHMuIExldCBtZSBjaGVjayBpZiBvbmx5IGBCUEZfSklUX0tBU0FOYCBpcyBlbm91Z2guIFllcywgYEJQRl9KSVRfS0FTQU5gIGRlcGVuZHMgb24gYEhBVkVfRUJQRl9KSVRfS0FTQU5gLCBgS0FTQU5fR0VORVJJQ2AsIGBLQVNBTl9WTUFMTE9DYCwgYW5kIGBCUEZfSklUYC4KCk9rYXksIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgZXZlcnl0aGluZyBsb29rcyBjb3JyZWN0LiBZZXAsIGFsbCBnb29kCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz00MDAyPXN0cnVjdCB4NjRfaml0X2RhdGEge1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDEzLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMTQ6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDE1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDYzMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipKSVQgQ29tcGlsYXRpb24gLSBFbnRyeSBQb2ludCBhbmQgUGF0Y2hpbmcqKgoKQWxyaWdodCwgc28gYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIHRoZSBKdXN0LUluLVRpbWUgY29tcGlsZXIgb24geDg2LCBnb3QgaXQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIGJlZ2lucy4gTm93LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gaG93IHRoZSBpbnN0cnVjdGlvbnMgYXJlIGFjdHVhbGx5IGhhbmRsZWQuIExvb2tzIGxpa2UgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYGJwZl9wYXRjaF9pbnNuX2RhdGFgIG5leHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGF0YSB3aXRoaW4gaW5zdHJ1Y3Rpb25zIGdldHMgbW9kaWZpZWQgb3IgYWx0ZXJlZCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uIGFuZCBwYXRjaGluZyBwcm9jZXNzLiBLbm93aW5nIGhvdyBpdCYjMzk7cyBoYW5kbGVkIGlzIGVzc2VudGlhbCB0byBvcHRpbWl6aW5nIHRoZSBnZW5lcmF0ZWQgY29kZSwgcmlnaHQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3BhdGNoX2luc25fZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9maXh1cHMuYz0yNjQ9c3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjc3LVxua2VybmVsL2JwZi9maXh1cHMuYzoyNzg6c3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI3OS1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTYxND1pbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy03MDItYXBwbHlfcGF0Y2hfYnVmZmVyOlxua2VybmVsL2JwZi9maXh1cHMuYzo3MDM6XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4sIDApO1xua2VybmVsL2JwZi9maXh1cHMuYy03MDQtXHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz03MjA9aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzQ3LVx0XHRcdGluc25fYnVmW2NudCYjNDM7JiM0MztdID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpWzBdO1xua2VybmVsL2JwZi9maXh1cHMuYzo3NDg6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCwgMSk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0OS1cdFx0XHRpZiAoIW5ld19wcm9nKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzcwLVx0XHR9IGVsc2UgaWYgKGNudCkge1xua2VybmVsL2JwZi9maXh1cHMuYzo3NzE6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzcyLVx0XHRcdFx0XHRcdCAgICAgICBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwNC1cdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xua2VybmVsL2JwZi9maXh1cHMuYzo4MDU6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwNi1cdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTg3OC1cdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xua2VybmVsL2JwZi9maXh1cHMuYzo4Nzk6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTg4MC1cdFx0XHRcdFx0XHQgICAgICAgY250LCAwKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwMTMtcGF0Y2hfaW5zbl9idWY6XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEwMTQ6XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwMTUtXHRcdFx0XHRcdCAgICAgICBpbnNuX29mZl9pbl9wYXRjaCk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNDkzPXN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA1LVx0ICogb25lcyBmb3IgdGhlIGhpZGRlbiBzdWJwcm9nLiBIZW5jZSBhbGwgb2YgdGhlIGFkanVzdG1lbnQgb3BlcmF0aW9uc1xua2VybmVsL2JwZi9maXh1cHMuYzoxNTA2Olx0ICogaW4gYnBmX3BhdGNoX2luc25fZGF0YSBhcmUgbm8tb3BzLlxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA3LVx0ICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE1MDg6XHRwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbiAtIDEsIHBhdGNoLCBsZW4sIC0xKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwOS1cdGlmICghcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE1MjI9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTU5Mi1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTU5MzpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMTU5NC1cdFx0XHRcdFx0XHQgICAgICAgY250LCAwKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE2ODktXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE2OTA6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE2OTEtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTcyMi1cdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xua2VybmVsL2JwZi9maXh1cHMuYzoxNzIzOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzI0LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIGluc25fb2ZmX2luX3BhdGNoKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NDMtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE3NDQ6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NDUtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMCk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNzk3LVxua2VybmVsL2JwZi9maXh1cHMuYzoxNzk4Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzk5LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NDMtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE4NDQ6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NDUtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMyk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xODY1LVxua2VybmVsL2JwZi9maXh1cHMuYzoxODY2Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0xODY3LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIDIpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTg4Ny1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTg4ODpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg4OS1cdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE5NzMtXHRcdFx0Y250ID0gMztcbmtlcm5lbC9icGYvZml4dXBzLmM6MTk3NDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMTk3NS1cdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMDctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMDg6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMDktXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgY250IC0gMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMDI3LVxua2VybmVsL2JwZi9maXh1cHMuYzoyMDI4Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDI5LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjA2OC1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjA2OTpcdFx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShcbmtlcm5lbC9icGYvZml4dXBzLmMtMjA3MC1cdFx0XHRcdFx0ZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250LCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMTUxLVxua2VybmVsL2JwZi9maXh1cHMuYzoyMTUyOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTUzLVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxODAtI2VuZGlmXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxODE6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxODItXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjE5OS1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjIwMDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMjIwMS1cdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMjM0LVxua2VybmVsL2JwZi9maXh1cHMuYzoyMjM1Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjM2LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyNjg6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjktXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5NC1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjI5NTpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5Ni1cdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMzExLVxua2VybmVsL2JwZi9maXh1cHMuYzoyMzEyOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzEzLVx0XHRcdFx0XHRcdCAgICAgICAxLCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMzY3LVxua2VybmVsL2JwZi9maXh1cHMuYzoyMzY4Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzY5LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzODYtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzODc6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzODgtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ1NS1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjQ1NjpcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgc3VicHJvZ19zdGFydCwgaW5zbl9idWYsIGNudCwgY250IC0gMSk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NTctXHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yNDYzLVx0XHQgKiB0byBpbnNuIGFmdGVyIEJQRl9TVCB0aGF0IGluaXRzIG1heV9nb3RvIGNvdW50Llxua2VybmVsL2JwZi9maXh1cHMuYzoyNDY0Olx0XHQgKiBBZGp1c3RtZW50IHdpbGwgc3VjY2VlZCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBkaWRuJiMzOTt0IGZhaWwuXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NjUtXHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MjQ5Mz1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICppbmxpbmVfYnBmX2xvb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1NTQtXHQqdG90YWxfY250ID0gY250O1xua2VybmVsL2JwZi9maXh1cHMuYzoyNTU1Olx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgcG9zaXRpb24sIGluc25fYnVmLCBjbnQsIC0xKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMjU1Ni1cdGlmICghbmV3X3Byb2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5ODYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gYmVzdCBhcHByb2FjaCBmdXp6aW5nIHRoZSBCUEYgc3Vic3lzdGVtLiBJIHNlZSB0aGF0IGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBpcyBkZWZpbmVkIGFuZCBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAuIEkgd2FzIGNvbnNpZGVyaW5nIGZvY3VzaW5nIG9uIGl0LCBhbG9uZyB3aXRoIGBicGZfZG9fbWlzY19maXh1cHNgIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAuCgpIYW5nIG9uLCBgYnBmX3BhdGNoX2luc25fZGF0YWAgaXNuJiMzOTt0IGFjdHVhbGx5IGV4cG9ydGVkIGFzIGEgbW9kdWxlIHN5bWJvbCwgaXQmIzM5O3MganVzdCBhIGdsb2JhbCBmdW5jdGlvbi4gSXQgY291bGQgc3RpbGwgYmUgZnV6emVkIGlmIHN5emthbGxlciBjYW4gcmVhY2ggaXQgc29tZWhvdywgYnV0IGlkZWFsbHksIEkgd2FudCB0byB0YXJnZXQgdGhlIEJQRiB2ZXJpZmllciBvciB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MgZGlyZWN0bHkuCgpUaGVyZWZvcmUsIEkgdGhpbmsgYSBtdWNoIGJldHRlciBzZXQgb2YgZm9jdXMgc3ltYm9scyBhcmU6CiogICBgYnBmX2ludF9qaXRfY29tcGlsZWAgKHRoZSBKSVQgZW50cnkgcG9pbnQpCiogICBgYnBmX3BhdGNoX2luc25fZGF0YWAKKiAgIGBicGZfZG9fbWlzY19maXh1cHNgICh0aGUgZml4dXAgZW50cnkgcG9pbnQpCiogICBgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzYAoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBhbmQgdGhlbiBJIHdpbGwgZm9jdXMgb24gYGJwZl9pbnRfaml0X2NvbXBpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NvcmUuYz0yNjIwPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjI2LVx0aWYgKCFicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKVxua2VybmVsL2JwZi9jb3JlLmM6MjYyNzpcdFx0cmV0dXJuIGJwZl9pbnRfaml0X2NvbXBpbGUoZW52LCBwcm9nKTtcbmtlcm5lbC9icGYvY29yZS5jLTI2MjgtXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjY0OC1cbmtlcm5lbC9icGYvY29yZS5jOjI2NDk6XHRwcm9nID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xua2VybmVsL2JwZi9jb3JlLmMtMjY1MC1cdGlmIChwcm9nLVx1MDAzZWppdGVkKSB7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjY2Nz1zdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpmcCxcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjg2LVx0ICogYmxpbmRpbmcgaXMgYWN0aXZlLiBIb3dldmVyLCBpbiBjYXNlIG9mIGVycm9yIGR1cmluZ1xua2VybmVsL2JwZi9jb3JlLmM6MjY4NzpcdCAqIGJsaW5kaW5nLCBicGZfaW50X2ppdF9jb21waWxlKCkgbXVzdCBhbHdheXMgcmV0dXJuIGFcbmtlcm5lbC9icGYvY29yZS5jLTI2ODgtXHQgKiB2YWxpZCBwcm9ncmFtLCB3aGljaCBpbiB0aGlzIGNhc2Ugd291bGQgc2ltcGx5IG5vdFxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMyMDk9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90YWlsX2NhbGxfcHJvdG8gPSB7XG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzIyMS0vKiBTdHViIGZvciBKSVRzIHRoYXQgb25seSBzdXBwb3J0IGNCUEYuIGVCUEYgcHJvZ3JhbXMgYXJlIGludGVycHJldGVkLlxua2VybmVsL2JwZi9jb3JlLmM6MzIyMjogKiBJdCBpcyBlbmNvdXJhZ2VkIHRvIGltcGxlbWVudCBicGZfaW50X2ppdF9jb21waWxlKCkgaW5zdGVhZCwgc28gdGhhdFxua2VybmVsL2JwZi9jb3JlLmMtMzIyMy0gKiBlQlBGIGFuZCBpbXBsaWNpdGx5IGFsc28gY0JQRiBjYW4gZ2V0IEpJVGVkIVxua2VybmVsL2JwZi9jb3JlLmMtMzIyNC0gKi9cbmtlcm5lbC9icGYvY29yZS5jOjMyMjU6c3RydWN0IGJwZl9wcm9nICogX193ZWFrIGJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxua2VybmVsL2JwZi9jb3JlLmMtMzIyNi17XG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzIzMC0vKiBTdHViIGZvciBKSVRzIHRoYXQgc3VwcG9ydCBlQlBGLiBBbGwgY0JQRiBjb2RlIGdldHMgdHJhbnNmb3JtZWQgaW50b1xua2VybmVsL2JwZi9jb3JlLmM6MzIzMTogKiBlQlBGIGJ5IHRoZSBrZXJuZWwgYW5kIGlzIGxhdGVyIGNvbXBpbGVkIGJ5IGJwZl9pbnRfaml0X2NvbXBpbGUoKS5cbmtlcm5lbC9icGYvY29yZS5jLTMyMzItICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUyMTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkZvY3VzaW5nIG9uIEJQRiBKSVQgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0IGRyaWxsaW5nIGRvd24uIFRoYXQmIzM5O3MgYSBzb2xpZCBzeW1ib2wgdG8gYW5jaG9yIG9uLiBOb3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIGBicGZfZG9fbWlzY19maXh1cHNgLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgY29tcGlsYXRpb24gcHJvY2Vzcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvbXBpbGVyIG1hbmFnZXMgdGhvc2UgJiMzNDttaXNjZWxsYW5lb3VzJiMzNDsgYXNwZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9maXh1cHMuYz0xNDkzPXN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNTIxLSAqL1xua2VybmVsL2JwZi9maXh1cHMuYzoxNTIyOmludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUyMy17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NzM5PWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTkzMy1cdGlmIChyZXQgPT0gMClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTkzNDpcdFx0cmV0ID0gYnBmX2RvX21pc2NfZml4dXBzKGVudik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk5MzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjUzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEJQRiBJbnN0cnVjdGlvbiBQYXRjaGluZyoqCgpBbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGBicGZfZG9fbWlzY19maXh1cHNgIGlzIGFub3RoZXIgcG90ZW50aWFsIGtleSBmb2N1cyBwb2ludCBmb3IgdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBzZWUgaG93IGl0IGZpdHMgaW4gd2l0aCB0aGUgYnJvYWRlciBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBicGZfcGF0Y2hfaW5zbl9kYXRhYC4gVW5kZXJzdGFuZGluZyBob3cgdGhhdCByb3V0aW5lIHdvcmtzIGlzIGNydWNpYWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyByb2xlIGluIHRoZSBwcm9jZXNzLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBCUEYgc3lzdGVtLiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gdHJhY2UgaXQgYmFjayB1cCB0aGUgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wYXRjaF9pbnNuX2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NvcmUuYz0xNTU0PXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTE1NjgtXG5rZXJuZWwvYnBmL2NvcmUuYzoxNTY5Olx0LyogbWFrZSBzdXJlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBwYXRjaGVzIHRoZSBjb3JyZWN0IHByb2cgKi9cbmtlcm5lbC9icGYvY29yZS5jLTE1NzAtXHRpZiAoZW52KVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTE2MDAtXHRcdGlmIChlbnYpXG5rZXJuZWwvYnBmL2NvcmUuYzoxNjAxOlx0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbiwgcmV3cml0dGVuIC0gMSk7XG5rZXJuZWwvYnBmL2NvcmUuYy0xNjAyLVx0XHRlbHNlXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0yNjQ9c3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjc3LVxua2VybmVsL2JwZi9maXh1cHMuYzoyNzg6c3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI3OS1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTYxND1pbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy03MDItYXBwbHlfcGF0Y2hfYnVmZmVyOlxua2VybmVsL2JwZi9maXh1cHMuYzo3MDM6XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4sIDApO1xua2VybmVsL2JwZi9maXh1cHMuYy03MDQtXHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz03MjA9aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzQ3LVx0XHRcdGluc25fYnVmW2NudCYjNDM7JiM0MztdID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpWzBdO1xua2VybmVsL2JwZi9maXh1cHMuYzo3NDg6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCwgMSk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0OS1cdFx0XHRpZiAoIW5ld19wcm9nKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzcwLVx0XHR9IGVsc2UgaWYgKGNudCkge1xua2VybmVsL2JwZi9maXh1cHMuYzo3NzE6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzcyLVx0XHRcdFx0XHRcdCAgICAgICBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwNC1cdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xua2VybmVsL2JwZi9maXh1cHMuYzo4MDU6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwNi1cdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTg3OC1cdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xua2VybmVsL2JwZi9maXh1cHMuYzo4Nzk6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTg4MC1cdFx0XHRcdFx0XHQgICAgICAgY250LCAwKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwMTMtcGF0Y2hfaW5zbl9idWY6XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEwMTQ6XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwMTUtXHRcdFx0XHRcdCAgICAgICBpbnNuX29mZl9pbl9wYXRjaCk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNDkzPXN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA1LVx0ICogb25lcyBmb3IgdGhlIGhpZGRlbiBzdWJwcm9nLiBIZW5jZSBhbGwgb2YgdGhlIGFkanVzdG1lbnQgb3BlcmF0aW9uc1xua2VybmVsL2JwZi9maXh1cHMuYzoxNTA2Olx0ICogaW4gYnBmX3BhdGNoX2luc25fZGF0YSBhcmUgbm8tb3BzLlxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA3LVx0ICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE1MDg6XHRwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbiAtIDEsIHBhdGNoLCBsZW4sIC0xKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwOS1cdGlmICghcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE1MjI9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTU5Mi1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTU5MzpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMTU5NC1cdFx0XHRcdFx0XHQgICAgICAgY250LCAwKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE2ODktXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE2OTA6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE2OTEtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTcyMi1cdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xua2VybmVsL2JwZi9maXh1cHMuYzoxNzIzOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzI0LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIGluc25fb2ZmX2luX3BhdGNoKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NDMtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE3NDQ6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NDUtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMCk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNzk3LVxua2VybmVsL2JwZi9maXh1cHMuYzoxNzk4Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzk5LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NDMtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE4NDQ6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NDUtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMyk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xODY1LVxua2VybmVsL2JwZi9maXh1cHMuYzoxODY2Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0xODY3LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIDIpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTg4Ny1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTg4ODpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg4OS1cdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE5NzMtXHRcdFx0Y250ID0gMztcbmtlcm5lbC9icGYvZml4dXBzLmM6MTk3NDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMTk3NS1cdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMDctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMDg6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMDktXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgY250IC0gMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMDI3LVxua2VybmVsL2JwZi9maXh1cHMuYzoyMDI4Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDI5LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjA2OC1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjA2OTpcdFx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShcbmtlcm5lbC9icGYvZml4dXBzLmMtMjA3MC1cdFx0XHRcdFx0ZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250LCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMTUxLVxua2VybmVsL2JwZi9maXh1cHMuYzoyMTUyOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTUzLVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxODAtI2VuZGlmXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxODE6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxODItXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjE5OS1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjIwMDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMjIwMS1cdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMjM0LVxua2VybmVsL2JwZi9maXh1cHMuYzoyMjM1Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjM2LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyNjg6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjktXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5NC1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjI5NTpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5Ni1cdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMzExLVxua2VybmVsL2JwZi9maXh1cHMuYzoyMzEyOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzEzLVx0XHRcdFx0XHRcdCAgICAgICAxLCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMzY3LVxua2VybmVsL2JwZi9maXh1cHMuYzoyMzY4Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzY5LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzODYtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzODc6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzODgtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ1NS1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjQ1NjpcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgc3VicHJvZ19zdGFydCwgaW5zbl9idWYsIGNudCwgY250IC0gMSk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NTctXHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yNDYzLVx0XHQgKiB0byBpbnNuIGFmdGVyIEJQRl9TVCB0aGF0IGluaXRzIG1heV9nb3RvIGNvdW50Llxua2VybmVsL2JwZi9maXh1cHMuYzoyNDY0Olx0XHQgKiBBZGp1c3RtZW50IHdpbGwgc3VjY2VlZCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBkaWRuJiMzOTt0IGZhaWwuXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NjUtXHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MjQ5Mz1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICppbmxpbmVfYnBmX2xvb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1NTQtXHQqdG90YWxfY250ID0gY250O1xua2VybmVsL2JwZi9maXh1cHMuYzoyNTU1Olx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgcG9zaXRpb24sIGluc25fYnVmLCBjbnQsIC0xKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtMjU1Ni1cdGlmICghbmV3X3Byb2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTk2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFwcHJvYWNoIHRvIEFuYWx5emluZyBCUEYgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgKmJwZlxfcGF0Y2hcX2luc25cX2RhdGEqIGlzIGNsZWFybHkgYSBmcmVxdWVudGx5LXVzZWQgZnVuY3Rpb24gaW4gdGhpcyBzcGFjZTsgdGhhdCBqdW1wcyBvdXQgaW1tZWRpYXRlbHkuIEkgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzLCB0aG91Z2gsIGFuZCBJIHRoaW5rIHRoZSBiZXN0IHBhdGggZm9yd2FyZCBpbnZvbHZlcyBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGNvbXBpbGF0aW9uIHBpcGVsaW5lIOKAkyBzcGVjaWZpY2FsbHksICpicGZcX2ludFxfaml0XF9jb21waWxlKiwgKmJwZlxfZG9cX21pc2NcX2ZpeHVwcyosIGFuZCAqYnBmXF9jb252ZXJ0XF9jdHhcX2FjY2Vzc2VzKi4gVGhleSBzZWVtIGxpa2UgZ29vZCBlbnRyeSBwb2ludHMgZm9yIG1vcmUgaW4tZGVwdGggZnV6emluZy4KCkkgcXVpY2tseSBjaGVja2VkIHRoZSBzb3VyY2UgZm9yICpicGZcX3BhdGNoXF9pbnNuXF9kYXRhKiB0byBjb25maXJtIG15IGludHVpdGlvbiBhbmQgcmVtaW5kIG15c2VsZiBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIuIFllcywgaXQmIzM5O3MgZGVmaW5lZCBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AgYW5kIGV4cG9ydGVkIGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYC4gSXQgaXMgbm90IGV4cG9ydGVkIHRvIG1vZHVsZXMgd2hpY2ggc3VnZ2VzdHMgaXQgaXMgaW50ZXJuYWwuIFRoZSBjb25jZXJuIGlzIHRoYXQgU3l6a2FsbGVyIGNhbiBzdGlsbCByZWFjaCBpdCB0aHJvdWdoIGRpcmVjdCBzcGVjaWZpY2F0aW9uOyBob3dldmVyLCBpdCBpcyBiZXR0ZXIgdG8gdGFyZ2V0IHRoZSBtb3JlIGdlbmVyYWwgZW50cnkgcG9pbnRzIG9mIHRoZSBCUEYgc3Vic3lzdGVtLgoKVGhlcmVmb3JlLCBteSBmb2N1cyBmb3IgaW5pdGlhbCBhbmFseXNpcyB3aWxsIGJlICpicGZcX2ludFxfaml0XF9jb21waWxlKiwgKmJwZlxfZG9cX21pc2NcX2ZpeHVwcyosIGFuZCAqYnBmXF9jb252ZXJ0XF9jdHhcX2FjY2Vzc2VzKi4gTXkgZmlyc3QgdGFyZ2V0LCBsZXQmIzM5O3MgZXhwbG9yZSAqYnBmXF9jb252ZXJ0XF9jdHhcX2FjY2Vzc2VzKi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9maXh1cHMuYz02MTQ9aW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzE5LSAqL1xua2VybmVsL2JwZi9maXh1cHMuYzo3MjA6aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9maXh1cHMuYy03MjEte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTczOT1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk5MzAtXHRcdC8qIHByb2dyYW0gaXMgdmFsaWQsIGNvbnZlcnQgKih1MzIqKShjdHggJiM0Mzsgb2ZmKSBhY2Nlc3NlcyAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5OTMxOlx0XHRyZXQgPSBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTkzMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMjA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk5NDkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkZvY3VzaW5nIG9uIE1lbW9yeSBBY2Nlc3MgaW4gQlBGKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBkaWdnaW5nIGludG8gYGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3Nlc2AgbWlnaHQgYmUgYW5vdGhlciBwcm9kdWN0aXZlIGF2ZW51ZSB0byBleHBsb3JlLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBtZW1vcnkgYWNjZXNzIHRyYW5zbGF0aW9ucyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBnbyBkaXJlY3RseSB0byBgY2hlY2tfbWVtX2FjY2Vzc2AuIFRoYXQgZnVuY3Rpb24gcHJvYmFibHkgaGFzIHRoZSBjcml0aWNhbCBjaGVja3MgbmVlZGVkIHRvIGVuZm9yY2UgbWVtb3J5IHNhZmV0eSB3aXRoaW4gdGhlIEJQRiBwcm9ncmFtLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgbG9naWMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX21lbV9hY2Nlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTU9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDItICogY2FuIGJlOiBQVFJfVE9fTUFQX1ZBTFVFLCBQVFJfVE9fQ1RYLCBQVFJfVE9fU1RBQ0ssIFBUUl9UT19TT0NLRVQuIFRoZXNlIGFyZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzogKiBmb3VyIHBvaW50ZXIgdHlwZXMgcmVjb2duaXplZCBieSBjaGVja19tZW1fYWNjZXNzKCkgZnVuY3Rpb24uXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0LSAqXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTg0Nz1zdGF0aWMgYm9vbCBpc19keW5wdHJfcmVnX3ZhbGlkX3VuaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTctXHQgKiBlcnJvciBiZWNhdXNlIHRoaXMganVzdCBtZWFucyB0aGUgc3RhY2sgc3RhdGUgaGFzbiYjMzk7dCBiZWVuIHVwZGF0ZWQgeWV0Llxua2VybmVsL2JwZi92ZXJpZmllci5jOjg1ODpcdCAqIFdlIHdpbGwgZG8gY2hlY2tfbWVtX2FjY2VzcyB0byBjaGVjayBhbmQgdXBkYXRlIHN0YWNrIGJvdW5kcyBsYXRlci5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTktXHQgKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAwMz1zdGF0aWMgYm9vbCBpc19pdGVyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwOS1cdC8qIEZvciAtRVJBTkdFIChpLmUuIHNwaSBub3QgZmFsbGluZyBpbnRvIGFsbG9jYXRlZCBzdGFjayBzbG90cyksIHdlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAxMDpcdCAqIHdpbGwgZG8gY2hlY2tfbWVtX2FjY2VzcyB0byBjaGVjayBhbmQgdXBkYXRlIHN0YWNrIGJvdW5kcyBsYXRlciwgc29cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDExLVx0ICogcmV0dXJuIHRydWUgZm9yIHRoYXQgY2FzZS5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0OD1zdGF0aWMgYm9vbCBpc19pcnFfZmxhZ19yZWdfdmFsaWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNTQtXHQvKiBGb3IgLUVSQU5HRSAoaS5lLiBzcGkgbm90IGZhbGxpbmcgaW50byBhbGxvY2F0ZWQgc3RhY2sgc2xvdHMpLCB3ZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNTU6XHQgKiB3aWxsIGRvIGNoZWNrX21lbV9hY2Nlc3MgdG8gY2hlY2sgYW5kIHVwZGF0ZSBzdGFjayBib3VuZHMgbGF0ZXIsIHNvXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1Ni1cdCAqIHJldHVybiB0cnVlIGZvciB0aGF0IGNhc2UuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM0MTg9c3RhdGljIHZvaWQgc2NydWJfc3BlY2lhbF9zbG90KHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0MzAtLyogY2hlY2tfc3RhY2tfe3JlYWQsd3JpdGV9X2ZpeGVkX29mZiBmdW5jdGlvbnMgdHJhY2sgc3BpbGwvZmlsbCBvZiByZWdpc3RlcnMsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzQzMTogKiBzdGFjayBib3VuZGFyeSBhbmQgYWxpZ25tZW50IGFyZSBjaGVja2VkIGluIGNoZWNrX21lbV9hY2Nlc3MoKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0MzItICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQxNTA9c3RhdGljIGludCBjaGVja19tYXBfYWNjZXNzX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDE3MS0vKiBjaGVjayByZWFkL3dyaXRlIGludG8gbWVtb3J5IHJlZ2lvbiAoZS5nLiwgbWFwIHZhbHVlLCByaW5nYnVmIHNhbXBsZSwgZXRjKSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjQxNzI6c3RhdGljIGludCBfX2NoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MTczLVx0XHRcdCAgICAgIGludCBvZmYsIGludCBzaXplLCB1MzIgbWVtX3NpemUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQyMTA9c3RhdGljIGludCBjaGVja19tZW1fcmVnaW9uX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MjMzLVx0fVxua2VybmVsL2JwZi92ZXJpZmllci5jOjQyMzQ6XHRlcnIgPSBfX2NoZWNrX21lbV9hY2Nlc3MoZW52LCByZWcsIGFyZ25vLCByZWdfc21pbihyZWcpICYjNDM7IG9mZiwgc2l6ZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MjM1LVx0XHRcdFx0IG1lbV9zaXplLCB6ZXJvX3NpemVfYWxsb3dlZCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQyNTAtXHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDI1MTpcdGVyciA9IF9fY2hlY2tfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHJlZ191bWF4KHJlZykgJiM0Mzsgb2ZmLCBzaXplLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQyNTItXHRcdFx0XHQgbWVtX3NpemUsIHplcm9fc2l6ZV9hbGxvd2VkKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDY2MT1zdGF0aWMgaW50IGNoZWNrX3BhY2tldF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubywgaW50IG9mZixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDY3NC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0Njc1Olx0LyogX19jaGVja19tZW1fYWNjZXNzIGhhcyBtYWRlIHN1cmUgXCYjMzQ7b2ZmICYjNDM7IHNpemUgLSAxXCYjMzQ7IGlzIHdpdGhpbiB1MTYuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDY3Ni1cdCAqIHJlZ191bWF4KHJlZykgY2FuJiMzOTt0IGJlIGJpZ2dlciB0aGFuIE1BWF9QQUNLRVRfT0ZGIHdoaWNoIGlzIDB4ZmZmZixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Njc3LVx0ICogb3RoZXJ3aXNlIGZpbmRfZ29vZF9wa3RfcG9pbnRlcnMgd291bGQgaGF2ZSByZWZ1c2VkIHRvIHNldCByYW5nZSBpbmZvXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDY3ODpcdCAqIHRoYXQgX19jaGVja19tZW1fYWNjZXNzIHdvdWxkIGhhdmUgcmVqZWN0ZWQgdGhpcyBwa3QgYWNjZXNzLlxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ2NzktXHQgKiBUaGVyZWZvcmUsIFwmIzM0O29mZiAmIzQzOyByZWdfdW1heChyZWcpICYjNDM7IHNpemUgLSAxXCYjMzQ7IHdvbiYjMzk7dCBvdmVyZmxvdyB1MzIuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTYwNjE9c3RhdGljIHZvaWQgYWRkX3NjYWxhcl90b19yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsIHM2NCB2YWwpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYwODMtICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA4NDpzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYwODUtXHRcdFx0ICAgIGludCBvZmYsIGludCBicGZfc2l6ZSwgZW51bSBicGZfYWNjZXNzX3R5cGUgdCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjM1MT1zdGF0aWMgaW50IGNoZWNrX2xvYWRfbWVtKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM4My1cdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjYzODQ6XHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVx1MDAzZWluc25faWR4LCByZWdzICYjNDM7IGluc24tXHUwMDNlc3JjX3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi1cdTAwM2VzcmNfcmVnKSwgaW5zbi1cdTAwM2VvZmYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM4NS1cdFx0XHQgICAgICAgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSwgQlBGX1JFQUQsIGluc24tXHUwMDNlZHN0X3JlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjM5ND1zdGF0aWMgaW50IGNoZWNrX3N0b3JlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MjMtXHQvKiBDaGVjayBpZiAoZHN0X3JlZyAmIzQzOyBvZmYpIGlzIHdyaXRlYWJsZS4gKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDI0Olx0ZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgcmVncyAmIzQzOyBpbnNuLVx1MDAzZWRzdF9yZWcsIGFyZ25vX2Zyb21fcmVnKGluc24tXHUwMDNlZHN0X3JlZyksIGluc24tXHUwMDNlb2ZmLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MjUtXHRcdFx0ICAgICAgIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksIEJQRl9XUklURSwgaW5zbi1cdTAwM2VzcmNfcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NDMyPXN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTAxLVx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjUwMjpcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIGRzdF9yZWcsIGFyZ25vX2Zyb21fcmVnKGluc24tXHUwMDNlZHN0X3JlZyksIGluc24tXHUwMDNlb2ZmLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1MDMtXHRcdFx0ICAgICAgIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksIEJQRl9SRUFELCAtMSwgdHJ1ZSwgZmFsc2UpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY1MDQtXHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgbG9hZF9yZWcgXHUwMDNlPSAwKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1MDU6XHRcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIGRzdF9yZWcsIGFyZ25vX2Zyb21fcmVnKGluc24tXHUwMDNlZHN0X3JlZyksXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUwNi1cdFx0XHRcdCAgICAgICBpbnNuLVx1MDAzZW9mZiwgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUxNi1cdC8qIENoZWNrIHdoZXRoZXIgd2UgY2FuIHdyaXRlIGludG8gdGhlIHNhbWUgbWVtb3J5LiAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY1MTc6XHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVx1MDAzZWluc25faWR4LCBkc3RfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVx1MDAzZWRzdF9yZWcpLCBpbnNuLVx1MDAzZW9mZixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTE4LVx0XHRcdCAgICAgICBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpLCBCUEZfV1JJVEUsIC0xLCB0cnVlLCBmYWxzZSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTcyNDg9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyODQtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJQRl9EWU5QVFJfU0laRTsgaSAmIzQzOz0gOCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjcyODU6XHRcdFx0ZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGluc25faWR4LCByZWcsIGFyZ25vLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyODYtXHRcdFx0XHRcdCAgICAgICBpLCBCUEZfRFcsIEJQRl9XUklURSwgLTEsIGZhbHNlLCBmYWxzZSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTczNjg9c3RhdGljIGludCBwcm9jZXNzX2l0ZXJfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sIGludCBpbnNuX2lkeCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzQwNS1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfc2xvdHMgKiA4OyBpICYjNDM7PSBCUEZfUkVHX1NJWkUpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NDA2Olx0XHRcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBpbnNuX2lkeCwgcmVnLCBhcmdubyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NDA3LVx0XHRcdFx0XHQgICAgICAgaSwgQlBGX0RXLCBCUEZfV1JJVEUsIC0xLCBmYWxzZSwgZmFsc2UpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDE3NT1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAyNjEtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtZXRhLmFjY2Vzc19zaXplOyBpJiM0MzsmIzQzOykge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMjYyOlx0XHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgaW5zbl9pZHgsIHJlZ3MgJiM0MzsgbWV0YS5yZWdubywgYXJnbm9fZnJvbV9yZWcobWV0YS5yZWdubyksIGksIEJQRl9CLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMjYzLVx0XHRcdFx0ICAgICAgIEJQRl9XUklURSwgLTEsIGZhbHNlLCBmYWxzZSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNTA5LVx0XHRcdFx0ICogaXQgd2lsbCBjb25mdXNlIHRoZSBjaGVjayBvZiBQVFJfVE9fQlRGX0lEIGluXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA1MTA6XHRcdFx0XHQgKiBjaGVja19tZW1fYWNjZXNzKCkuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA1MTEtXHRcdFx0XHQgKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0Mzg9c3RhdGljIGludCBwcm9jZXNzX2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNDY1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNDY2Olx0XHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVx1MDAzZWluc25faWR4LCByZWcsIGFyZ25vLCAwLCBCUEZfRFcsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0NjctXHRcdFx0XHQgICAgICAgQlBGX1dSSVRFLCAtMSwgZmFsc2UsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcyNDE9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI3OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzI3OTpcdFx0ZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgY3VyX3JlZ3MoZW52KSAmIzQzOyBpbnNuLVx1MDAzZWRzdF9yZWcsIGFyZ25vX2Zyb21fcmVnKGluc24tXHUwMDNlZHN0X3JlZyksXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyODAtXHRcdFx0XHQgICAgICAgaW5zbi1cdTAwM2VvZmYsIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMjE3CgkJCQkJCQlvdXRwdXQ6IDEwNAoJCQkJCQkJdGhvdWdodHM6IDI3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgdGhlIGZ1bmN0aW9uIGBjaGVja19tZW1fYWNjZXNzYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkgc3ltYm9sIHRvIGZvY3VzIG9uIGhlcmUsIHRoYXQmIzM5O3MgYSBnb29kIGZpbmQuIExldCYjMzk7cyBnZXQgdGhpcyBhbmFseXNpcyBkb3duIGNvbmNpc2VseS4KClRoZSBwYXRjaCYjMzk7cyBvdmVyYWxsIHdvcnRoaW5lc3MgZm9yIGZ1enppbmcgaXMgZGVmaW5pdGVseSAqdHJ1ZSouIFRoZSBpbXBvcnRhbnQgZnVuY3Rpb24gc3ltYm9scyB0aGF0IGFyZSBtb2RpZmllZCwgYWNjb3JkaW5nIHRvIG15IHJldmlldyBvZiB0aGUgY2hhbmdlcywgYXJlIGBicGZfaW50X2ppdF9jb21waWxlYCwgYGJwZl9kb19taXNjX2ZpeHVwc2AsIGFuZCAqZXNwZWNpYWxseSogYGNoZWNrX21lbV9hY2Nlc3NgLgoKTm93LCB0aGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQlBGX0pJVF9LQVNBTmAsIGVuYWJsaW5nIEtBU0FOIHN1cHBvcnQgZm9yIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIHg4Nl82NCwgd2hpY2ggaXMgdW5kZW5pYWJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBjb3JlIGtlcm5lbCBsb2dpYy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGdvb2QgY2hhbmdlIHRvIGZ1enouCgpBaCwgYnV0IGhvbGQgb24sIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIGxpc3RpbmcgZXhjZXNzaXZlbHkgZ2VuZXJpYyBjb25maWd1cmF0aW9ucywgYXMgd2UgcHJvYmFibHkgaGF2ZSB0aG9zZSBlbmFibGVkIGJ5IGRlZmF1bHQuIFNvLCB0aGF0IG1lYW5zIEkgbmVlZCB0byByZWZpbmUgdGhlIGNvbmZpZyBsaXN0LiBgS0FTQU5fR0VORVJJQ2AsIGBLQVNBTl9WTUFMTE9DYCwgYEJQRl9KSVRgLCBhbmQgYEtBU0FOYCBhcmUgYWxsIGJyb2FkIGFuZCBsaWtlbHkgYWxyZWFkeSBlbmFibGVkLCBiYXNlZCBvbiBteSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBjb25maWd1cmF0aW9ucy4KClNvLCBJIG5lZWQgdG8gZm9jdXMgKnNwZWNpZmljYWxseSogb24gdGhvc2UgY29uZmlndXJhdGlvbnMgdGhhdCBkaXJlY3RseSBpbXBhY3QgdGhlIG1vZGlmaWVkIGNvZGUuIEdvb2QsIEkgc2VlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoICppcyogYEJQRl9KSVRfS0FTQU5gLiBUaGF0IGFwcGVhcnMgdG8gYmUgc3VmZmljaWVudC4gVGhhdCYjMzk7cyB0aGUgbmV3IGNvbmZpZyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaC4KCkFscmlnaHQsIHRoYXQgY292ZXJzIGV2ZXJ5dGhpbmcuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAyMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVF9LQVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDssCiAgICAmIzM0O2NoZWNrX21lbV9hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBLQVNBTiBzdXBwb3J0IHRvIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIHg4Nl82NCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVF9LQVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDssCiAgICAmIzM0O2NoZWNrX21lbV9hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBLQVNBTiBzdXBwb3J0IHRvIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIHg4Nl82NCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIwOjE0OjE3LjUwODM4MDcyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjkxNTIwNjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRfS0FTQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfZG9fbWlzY19maXh1cHNcIixcbiAgICBcImNoZWNrX21lbV9hY2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEtBU0FOIHN1cHBvcnQgdG8gdGhlIEJQRiBKSVQgY29tcGlsZXIgb24geDg2XzY0LCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMDoxNDoxNy41MDgzODkyMzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjgxOTYzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxZDZkZGY5NzA2YTg2OWJjNmQyNTVlMWM3ZDBhZTZmYmFkYjc5OWI4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDggMjA6MTQ6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcXG5pbmRleCBiZGFkOTBmMjEwZTRiZi4uNzA1YTlhYjg1ZjNhOTUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvS2NvbmZpZ1xcbisrKyBiL2FyY2gveDg2L0tjb25maWdcXG5AQCAtMjMzLDYgKzIzMyw3IEBAIGNvbmZpZyBYODZcXG4gXFx0c2VsZWN0IEhBVkVfU0FNUExFX0ZUUkFDRV9ESVJFQ1RcXHRpZiBYODZfNjRcXG4gXFx0c2VsZWN0IEhBVkVfU0FNUExFX0ZUUkFDRV9ESVJFQ1RfTVVMVElcXHRpZiBYODZfNjRcXG4gXFx0c2VsZWN0IEhBVkVfRUJQRl9KSVRcXG4rXFx0c2VsZWN0IEhBVkVfRUJQRl9KSVRfS0FTQU5cXHRcXHRpZiBYODZfNjRcXG4gXFx0c2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1NcXG4gXFx0c2VsZWN0IEhBVkVfRUlTQVxcdFxcdFxcdGlmIFg4Nl8zMlxcbiBcXHRzZWxlY3QgSEFWRV9FWElUX1RIUkVBRFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5pbmRleCBkZTc1MTVlYTFiZWFlOC4uNjVhMDBlODQ3OTljZDIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTIxLDYgKzIxLDE3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdW53aW5kLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vY2ZpLmhcXHUwMDNlXFxuIFxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX0pJVF9LQVNBTilcXG4rdm9pZCBfX2FzYW5fbG9hZDEodm9pZCAqcCk7XFxuK3ZvaWQgX19hc2FuX3N0b3JlMSh2b2lkICpwKTtcXG4rdm9pZCBfX2FzYW5fbG9hZDIodm9pZCAqcCk7XFxuK3ZvaWQgX19hc2FuX3N0b3JlMih2b2lkICpwKTtcXG4rdm9pZCBfX2FzYW5fbG9hZDQodm9pZCAqcCk7XFxuK3ZvaWQgX19hc2FuX3N0b3JlNCh2b2lkICpwKTtcXG4rdm9pZCBfX2FzYW5fbG9hZDgodm9pZCAqcCk7XFxuK3ZvaWQgX19hc2FuX3N0b3JlOCh2b2lkICpwKTtcXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgYm9vbCBhbGxfY2FsbGVlX3JlZ3NfdXNlZFs0XSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTtcXG4gXFxuIHN0YXRpYyB1OCAqZW1pdF9jb2RlKHU4ICpwdHIsIHUzMiBieXRlcywgdW5zaWduZWQgaW50IGxlbilcXG5AQCAtMTExMCw2ICsxMTIxLDkwIEBAIHN0YXRpYyB2b2lkIG1heWJlX2VtaXRfMW1vZCh1OCAqKnBwcm9nLCB1MzIgcmVnLCBib29sIGlzNjQpXFxuIFxcdCpwcHJvZyA9IHByb2c7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZW1pdF9rYXNhbl9jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCAqKnBwcm9nLFxcbitcXHRcXHRcXHQgICAgdTMyIGFkZHJfcmVnLCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHU4ICppcCxcXG4rXFx0XFx0XFx0ICAgIGJvb2wgaXNfd3JpdGUsIGJvb2wgYWNjZXNzZXNfc3RhY2tfb25seSlcXG4re1xcbisjaWZkZWYgQ09ORklHX0JQRl9KSVRfS0FTQU5cXG4rXFx0dTMyIGJwZl9zaXplID0gQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSk7XFxuK1xcdHMzMiBvZmYgPSBpbnNuLVxcdTAwM2VvZmY7XFxuK1xcdHU4ICpwcm9nID0gKnBwcm9nO1xcbitcXHR2b2lkICprYXNhbl9mdW5jO1xcbitcXG4rXFx0aWYgKCFlbnYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGFjY2Vzc2VzX3N0YWNrX29ubHkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogRGVyaXZlIEtBU0FOIGNoZWNrIGZ1bmN0aW9uIGZyb20gYWNjZXNzIHR5cGUgYW5kIHNpemUgKi9cXG4rXFx0c3dpdGNoIChicGZfc2l6ZSkge1xcbitcXHRjYXNlIEJQRl9COlxcbitcXHRcXHRrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmUxIDogX19hc2FuX2xvYWQxO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfSDpcXG4rXFx0XFx0a2FzYW5fZnVuYyA9IGlzX3dyaXRlID8gX19hc2FuX3N0b3JlMiA6IF9fYXNhbl9sb2FkMjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX1c6XFxuK1xcdFxcdGthc2FuX2Z1bmMgPSBpc193cml0ZSA/IF9fYXNhbl9zdG9yZTQgOiBfX2FzYW5fbG9hZDQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9EVzpcXG4rXFx0XFx0a2FzYW5fZnVuYyA9IGlzX3dyaXRlID8gX19hc2FuX3N0b3JlOCA6IF9fYXNhbl9sb2FkODtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTYXZlIHJheCAqL1xcbitcXHRFTUlUMSgweDUwKTtcXG4rXFx0LyogU2F2ZSByY3ggKi9cXG4rXFx0RU1JVDEoMHg1MSk7XFxuK1xcdC8qIFNhdmUgcmR4ICovXFxuK1xcdEVNSVQxKDB4NTIpO1xcbitcXHQvKiBTYXZlIHJzaSAqL1xcbitcXHRFTUlUMSgweDU2KTtcXG4rXFx0LyogU2F2ZSByZGkgKi9cXG4rXFx0RU1JVDEoMHg1Nyk7XFxuK1xcdC8qIFNhdmUgcjggKi9cXG4rXFx0RU1JVDIoMHg0MSwgMHg1MCk7XFxuK1xcdC8qIFNhdmUgcjkgKi9cXG4rXFx0RU1JVDIoMHg0MSwgMHg1MSk7XFxuK1xcbitcXHQvKiBtb3YgcmRpLCBhZGRyX3JlZyAqL1xcbitcXHRFTUlUX21vdihCUEZfUkVHXzEsIGFkZHJfcmVnKTtcXG4rXFxuK1xcdC8qIGFkZCByZGksIG9mZiAoaWYgb2Zmc2V0IGlzIG5vbi16ZXJvKSAqL1xcbitcXHRpZiAob2ZmKSB7XFxuK1xcdFxcdGlmIChpc19pbW04KG9mZikpIHtcXG4rXFx0XFx0XFx0LyogYWRkIHJkaSwgaW1tOCAqL1xcbitcXHRcXHRcXHRFTUlUNCgweDQ4LCAweDgzLCAweEM3LCAodTgpb2ZmKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0LyogYWRkIHJkaSwgaW1tMzIgKi9cXG4rXFx0XFx0XFx0RU1JVDNfb2ZmMzIoMHg0OCwgMHg4MSwgMHhDNywgb2ZmKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBBZGp1c3QgaXAgdG8gYWNjb3VudCBmb3IgdGhlIGluc3RydW1lbnRhdGlvbiBnZW5lcmF0ZWQgc28gZmFyICovXFxuK1xcdGlwICs9IChwcm9nIC0gKnBwcm9nKTtcXG4rXFx0LyogV2UgZW1pdCBhIGNhbGwsIHNvIHVwZGF0ZSBjYWxsIGRlcHRoIGNvdW50aW5nICovXFxuK1xcdGlwICs9IHg4Nl9jYWxsX2RlcHRoX2VtaXRfYWNjb3VudGluZyhcXHUwMDI2cHJvZywga2FzYW5fZnVuYywgaXApO1xcbitcXHQvKiBjYWxsIGthc2FuX2Z1bmMgKi9cXG4rXFx0aWYgKGVtaXRfY2FsbChcXHUwMDI2cHJvZywga2FzYW5fZnVuYywgaXApKVxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdEVNSVQyKDB4NDEsIDB4NTkpO1xcbitcXHRFTUlUMigweDQxLCAweDU4KTtcXG4rXFx0RU1JVDEoMHg1Rik7XFxuK1xcdEVNSVQxKDB4NUUpO1xcbitcXHRFTUlUMSgweDVBKTtcXG4rXFx0RU1JVDEoMHg1OSk7XFxuK1xcdEVNSVQxKDB4NTgpO1xcbitcXG4rXFx0KnBwcm9nID0gcHJvZztcXG4rI2VuZGlmIC8qIENPTkZJR19CUEZfSklUX0tBU0FOICovXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKiBMRFg6IGRzdF9yZWcgPSAqKHU4Kikoc3JjX3JlZyArIG9mZikgKi9cXG4gc3RhdGljIHZvaWQgZW1pdF9sZHgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZywgaW50IG9mZilcXG4ge1xcbkBAIC0xMzE1LDYgKzE0MTAsNjQgQEAgc3RhdGljIHZvaWQgZW1pdF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBpbmRleF9yZWcsIGludFxcbiBcXHQqcHByb2cgPSBwcm9nO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBlbWl0X3N0KHU4ICoqcHByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IGRzdF9yZWcsXFxuK1xcdFxcdCAgICBzMzIgb3V0Z29pbmdfYXJnX2Jhc2UsIHUxNiBvdXRnb2luZ19yc3ApXFxuK3tcXG4rXFx0czMyIGltbTMyID0gaW5zbi1cXHUwMDNlaW1tO1xcbitcXHR1OCAqcHJvZyA9ICpwcHJvZztcXG4rXFx0czMyIGluc25fb2ZmO1xcbitcXG4rXFx0c3dpdGNoIChCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSkge1xcbitcXHRjYXNlIEJQRl9COlxcbitcXHRcXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcXG4rXFx0XFx0XFx0RU1JVDIoMHg0MSwgMHhDNik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0RU1JVDEoMHhDNik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9IOlxcbitcXHRcXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcXG4rXFx0XFx0XFx0RU1JVDMoMHg2NiwgMHg0MSwgMHhDNyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0RU1JVDIoMHg2NiwgMHhDNyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9XOlxcbitcXHRcXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcXG4rXFx0XFx0XFx0RU1JVDIoMHg0MSwgMHhDNyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0RU1JVDEoMHhDNyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9EVzpcXG4rXFx0XFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlb2ZmID09IC04KSB7XFxuK1xcdFxcdFxcdC8qIEFyZyA2OiBzdG9yZSBpbW1lZGlhdGUgaW4gcjkgcmVnaXN0ZXIgKi9cXG4rXFx0XFx0XFx0ZW1pdF9tb3ZfaW1tNjQoXFx1MDAyNnByb2csIFg4Nl9SRUdfUjksIGltbTMyIFxcdTAwM2VcXHUwMDNlIDMxLFxcbitcXHRcXHRcXHRcXHQgICAgICAgKHUzMilpbW0zMik7XFxuK1xcdFxcdFxcdCpwcHJvZyA9IHByb2c7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHRcXHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHhDNyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG4rXFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQXJncyA3KzogcmV2ZXJzZSBCUEYgbmVnYXRpdmUgb2Zmc2V0cyB0b1xcbitcXHRcXHQgKiB4ODYgcG9zaXRpdmUgcnNwIG9mZnNldHMuXFxuK1xcdFxcdCAqIEJQRiBvZmY9LTE2IOKGkiBbcnNwKzBdLCBvZmY9LTI0IOKGkiBbcnNwKzhdLCAuLi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGluc25fb2ZmID0gb3V0Z29pbmdfYXJnX2Jhc2UgLSBvdXRnb2luZ19yc3AgLVxcbitcXHRcXHRcXHRpbnNuX29mZiAtIDE2O1xcbitcXHRcXHRkc3RfcmVnID0gQlBGX1JFR19GUDtcXG4rXFx0fVxcbitcXHRpZiAoaXNfaW1tOChpbnNuX29mZikpXFxuK1xcdFxcdEVNSVQyKGFkZF8xcmVnKDB4NDAsIGRzdF9yZWcpLCBpbnNuX29mZik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0RU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHg4MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcXG4rXFxuK1xcdEVNSVQoaW1tMzIsIGJwZl9zaXplX3RvX3g4Nl9ieXRlcyhCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSkpO1xcbitcXHQqcHByb2cgPSBwcm9nO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBlbWl0X3N0X3IxMih1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIGludCBvZmYsIGludCBpbW0pXFxuIHtcXG4gXFx0ZW1pdF9zdF9pbmRleChwcHJvZywgc2l6ZSwgZHN0X3JlZywgWDg2X1JFR19SMTIsIG9mZiwgaW1tKTtcXG5AQCAtMTQyMywxNyArMTU3NiwzMSBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtd19pbmRleCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgc2l6ZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3QodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIGRzdF9yZWcsXFxuLVxcdFxcdFxcdCAgICAgdTMyIHNyY19yZWcsIHMxNiBvZmYsIHU4IGJwZl9zaXplKVxcbitzdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHU4ICoqcHByb2csXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqaXAsIHUzMiBkc3RfcmVnLFxcbitcXHRcXHRcXHQgICAgIHUzMiBzcmNfcmVnLCBib29sIGFjY2Vzc2VzX3N0YWNrX29ubHkpXFxuIHtcXG4rXFx0dTMyIGF0b21pY19vcCA9IGluc24tXFx1MDAzZWltbTtcXG4rXFx0aW50IGVycjtcXG4rXFxuIFxcdHN3aXRjaCAoYXRvbWljX29wKSB7XFxuIFxcdGNhc2UgQlBGX0xPQURfQUNROlxcbitcXHRcXHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgcHByb2csIHNyY19yZWcsIGluc24sIGlwLCBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHQvKiBkc3RfcmVnID0gc21wX2xvYWRfYWNxdWlyZShzcmNfcmVnICsgb2ZmMTYpICovXFxuLVxcdFxcdGVtaXRfbGR4KHBwcm9nLCBicGZfc2l6ZSwgZHN0X3JlZywgc3JjX3JlZywgb2ZmKTtcXG4rXFx0XFx0ZW1pdF9sZHgocHByb2csIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLFxcbitcXHRcXHRcXHQgaW5zbi1cXHUwMDNlb2ZmKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQlBGX1NUT1JFX1JFTDpcXG4rXFx0XFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIHBwcm9nLCBkc3RfcmVnLCBpbnNuLCBpcCwgdHJ1ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHQvKiBzbXBfc3RvcmVfcmVsZWFzZShkc3RfcmVnICsgb2ZmMTYsIHNyY19yZWcpICovXFxuLVxcdFxcdGVtaXRfc3R4KHBwcm9nLCBicGZfc2l6ZSwgZHN0X3JlZywgc3JjX3JlZywgb2ZmKTtcXG4rXFx0XFx0ZW1pdF9zdHgocHByb2csIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLFxcbitcXHRcXHRcXHQgaW5zbi1cXHUwMDNlb2ZmKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHByX2VycihcXFwiYnBmX2ppdDogdW5rbm93biBhdG9taWMgbG9hZC9zdG9yZSBvcGNvZGUgJTAyeFxcXFxuXFxcIixcXG5AQCAtMTgxMSwxMCArMTk3OCwxMiBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKlxcbiBcXHRcXHRjb25zdCBzMzIgaW1tMzIgPSBpbnNuLVxcdTAwM2VpbW07XFxuIFxcdFxcdHUzMiBkc3RfcmVnID0gaW5zbi1cXHUwMDNlZHN0X3JlZztcXG4gXFx0XFx0dTMyIHNyY19yZWcgPSBpbnNuLVxcdTAwM2VzcmNfcmVnO1xcbitcXHRcXHRib29sIGFjY2Vzc2VzX3N0YWNrX29ubHk7XFxuIFxcdFxcdHU4IGIyID0gMCwgYjMgPSAwO1xcbiBcXHRcXHR1OCAqc3RhcnRfb2ZfbGR4O1xcbiBcXHRcXHRzNjQgam1wX29mZnNldDtcXG4gXFx0XFx0czMyIGluc25fb2ZmO1xcbitcXHRcXHRpbnQgaW5zbl9pZHg7XFxuIFxcdFxcdHU4IGptcF9jb25kO1xcbiBcXHRcXHR1OCAqZnVuYztcXG4gXFx0XFx0aW50IG5vcHM7XFxuQEAgLTE4MzEsNiArMjAwMCwxMCBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKlxcbiBcXHRcXHRcXHRFTUlUX0VOREJSKCk7XFxuIFxcbiBcXHRcXHRpcCA9IGltYWdlICsgYWRkcnNbaSAtIDFdICsgKHByb2cgLSB0ZW1wKTtcXG4rXFx0XFx0aW5zbl9pZHggPSBpIC0gMSArIGJwZl9wcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXN1YnByb2dfc3RhcnQ7XFxuK1xcdFxcdGFjY2Vzc2VzX3N0YWNrX29ubHkgPVxcbitcXHRcXHRcXHRlbnYgPyAhZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc3RhY2tfYWNjZXNzIDpcXG4rXFx0XFx0XFx0ICAgICAgZmFsc2U7XFxuIFxcbiBcXHRcXHRzd2l0Y2ggKGluc24tXFx1MDAzZWNvZGUpIHtcXG4gXFx0XFx0XFx0LyogQUxVICovXFxuQEAgLTIyMDcsNDkgKzIzODAsMTcgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICpcXG4gXFx0XFx0XFx0RU1JVF9MRkVOQ0UoKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRcXHQvKiBTVDogKih1OCopKGRzdF9yZWcgKyBvZmYpID0gaW1tICovXFxuIFxcdFxcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9COlxcbi1cXHRcXHRcXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcXG4tXFx0XFx0XFx0XFx0RU1JVDIoMHg0MSwgMHhDNik7XFxuLVxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0RU1JVDEoMHhDNik7XFxuLVxcdFxcdFxcdGdvdG8gc3Q7XFxuIFxcdFxcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9IOlxcbi1cXHRcXHRcXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcXG4tXFx0XFx0XFx0XFx0RU1JVDMoMHg2NiwgMHg0MSwgMHhDNyk7XFxuLVxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0RU1JVDIoMHg2NiwgMHhDNyk7XFxuLVxcdFxcdFxcdGdvdG8gc3Q7XFxuIFxcdFxcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9XOlxcbi1cXHRcXHRcXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcXG4tXFx0XFx0XFx0XFx0RU1JVDIoMHg0MSwgMHhDNyk7XFxuLVxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0RU1JVDEoMHhDNyk7XFxuLVxcdFxcdFxcdGdvdG8gc3Q7XFxuIFxcdFxcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9EVzpcXG4tXFx0XFx0XFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlb2ZmID09IC04KSB7XFxuLVxcdFxcdFxcdFxcdC8qIEFyZyA2OiBzdG9yZSBpbW1lZGlhdGUgaW4gcjkgcmVnaXN0ZXIgKi9cXG4tXFx0XFx0XFx0XFx0ZW1pdF9tb3ZfaW1tNjQoXFx1MDAyNnByb2csIFg4Nl9SRUdfUjksIGltbTMyIFxcdTAwM2VcXHUwMDNlIDMxLCAodTMyKWltbTMyKTtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0RU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4QzcpO1xcbi1cXG4tc3Q6XFx0XFx0XFx0aW5zbl9vZmYgPSBpbnNuLVxcdTAwM2VvZmY7XFxuLVxcdFxcdFxcdGlmIChkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TKSB7XFxuLVxcdFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdFxcdCAqIEFyZ3MgNys6IHJldmVyc2UgQlBGIG5lZ2F0aXZlIG9mZnNldHMgdG9cXG4tXFx0XFx0XFx0XFx0ICogeDg2IHBvc2l0aXZlIHJzcCBvZmZzZXRzLlxcbi1cXHRcXHRcXHRcXHQgKiBCUEYgb2ZmPS0xNiDihpIgW3JzcCswXSwgb2ZmPS0yNCDihpIgW3JzcCs4XSwgLi4uXFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHRpbnNuX29mZiA9IG91dGdvaW5nX2FyZ19iYXNlIC0gb3V0Z29pbmdfcnNwIC0gaW5zbl9vZmYgLSAxNjtcXG4tXFx0XFx0XFx0XFx0ZHN0X3JlZyA9IEJQRl9SRUdfRlA7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKGlzX2ltbTgoaW5zbl9vZmYpKVxcbi1cXHRcXHRcXHRcXHRFTUlUMihhZGRfMXJlZygweDQwLCBkc3RfcmVnKSwgaW5zbl9vZmYpO1xcbi1cXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdEVNSVQxX29mZjMyKGFkZF8xcmVnKDB4ODAsIGRzdF9yZWcpLCBpbnNuX29mZik7XFxuK1xcdFxcdFxcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBcXHUwMDI2cHJvZywgZHN0X3JlZywgaW5zbiwgaXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB0cnVlLCBhY2Nlc3Nlc19zdGFja19vbmx5KTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdFxcdFxcdEVNSVQoaW1tMzIsIGJwZl9zaXplX3RvX3g4Nl9ieXRlcyhCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSkpO1xcbitcXHRcXHRcXHRlbWl0X3N0KFxcdTAwMjZwcm9nLCBpbnNuLCBkc3RfcmVnLCBvdXRnb2luZ19hcmdfYmFzZSxcXG4rXFx0XFx0XFx0XFx0b3V0Z29pbmdfcnNwKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRcXHRcXHQvKiBTVFg6ICoodTgqKShkc3RfcmVnICsgb2ZmKSA9IHNyY19yZWcgKi9cXG5AQCAtMjI2Nyw2ICsyNDA4LDEwIEBAIHN0OlxcdFxcdFxcdGluc25fb2ZmID0gaW5zbi1cXHUwMDNlb2ZmO1xcbiBcXHRcXHRcXHRcXHRpbnNuX29mZiA9IG91dGdvaW5nX2FyZ19iYXNlIC0gb3V0Z29pbmdfcnNwIC0gaW5zbl9vZmYgLSAxNjtcXG4gXFx0XFx0XFx0XFx0ZHN0X3JlZyA9IEJQRl9SRUdfRlA7XFxuIFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIFxcdTAwMjZwcm9nLCBkc3RfcmVnLCBpbnNuLCBpcCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHRydWUsIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHRlbWl0X3N0eChcXHUwMDI2cHJvZywgQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSksIGRzdF9yZWcsIHNyY19yZWcsIGluc25fb2ZmKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbkBAIC0yNDI4LDYgKzI1NzMsMTIgQEAgc3Q6XFx0XFx0XFx0aW5zbl9vZmYgPSBpbnNuLVxcdTAwM2VvZmY7XFxuIFxcdFxcdFxcdFxcdC8qIHBvcHVsYXRlIGptcF9vZmZzZXQgZm9yIEpBRSBhYm92ZSB0byBqdW1wIHRvIHN0YXJ0X29mX2xkeCAqL1xcbiBcXHRcXHRcXHRcXHRzdGFydF9vZl9sZHggPSBwcm9nO1xcbiBcXHRcXHRcXHRcXHRlbmRfb2Zfam1wWy0xXSA9IHN0YXJ0X29mX2xkeCAtIGVuZF9vZl9qbXA7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBcXHUwMDI2cHJvZywgc3JjX3JlZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGluc24sIGlwLCBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xcbitcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1ggfHxcXG4gXFx0XFx0XFx0ICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU1TWClcXG5AQCAtMjQ4OSwxNSArMjY0MCwxNiBAQCBzdDpcXHRcXHRcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4gXFx0XFx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XOlxcbi1cXHRcXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOlxcbi1cXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlaW1tID09IChCUEZfQU5EIHwgQlBGX0ZFVENIKSB8fFxcbi1cXHRcXHRcXHQgICAgaW5zbi1cXHUwMDNlaW1tID09IChCUEZfT1IgfCBCUEZfRkVUQ0gpIHx8XFxuLVxcdFxcdFxcdCAgICBpbnNuLVxcdTAwM2VpbW0gPT0gKEJQRl9YT1IgfCBCUEZfRkVUQ0gpKSB7XFxuLVxcdFxcdFxcdFxcdGJvb2wgaXM2NCA9IEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9EVztcXG4tXFx0XFx0XFx0XFx0dTMyIHJlYWxfc3JjX3JlZyA9IHNyY19yZWc7XFxuLVxcdFxcdFxcdFxcdHUzMiByZWFsX2RzdF9yZWcgPSBkc3RfcmVnO1xcbi1cXHRcXHRcXHRcXHR1OCAqYnJhbmNoX3RhcmdldDtcXG4tXFxuK1xcdFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6IHtcXG4rXFx0XFx0XFx0Ym9vbCBpczY0ID0gQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0RXO1xcbitcXHRcXHRcXHR1MzIgcmVhbF9zcmNfcmVnID0gc3JjX3JlZztcXG4rXFx0XFx0XFx0dTMyIHJlYWxfZHN0X3JlZyA9IGRzdF9yZWc7XFxuK1xcdFxcdFxcdHU4ICpicmFuY2hfdGFyZ2V0O1xcbitcXHRcXHRcXHRib29sIGlzX2F0b21pY19mZXRjaCA9XFxuK1xcdFxcdFxcdFxcdChpbnNuLVxcdTAwM2VpbW0gPT0gKEJQRl9BTkQgfCBCUEZfRkVUQ0gpIHx8XFxuK1xcdFxcdFxcdFxcdCBpbnNuLVxcdTAwM2VpbW0gPT0gKEJQRl9PUiB8IEJQRl9GRVRDSCkgfHxcXG4rXFx0XFx0XFx0XFx0IGluc24tXFx1MDAzZWltbSA9PSAoQlBGX1hPUiB8IEJQRl9GRVRDSCkpO1xcbitcXHRcXHRcXHRpZiAoaXNfYXRvbWljX2ZldGNoKSB7XFxuIFxcdFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdFxcdCAqIENhbid0IGJlIGltcGxlbWVudGVkIHdpdGggYSBzaW5nbGUgeDg2IGluc24uXFxuIFxcdFxcdFxcdFxcdCAqIE5lZWQgdG8gZG8gYSBDTVBYQ0hHIGxvb3AuXFxuQEAgLTI1MTAsNyArMjY2MiwxNyBAQCBzdDpcXHRcXHRcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG4gXFx0XFx0XFx0XFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR18wKVxcbiBcXHRcXHRcXHRcXHRcXHRyZWFsX2RzdF9yZWcgPSBCUEZfUkVHX0FYO1xcbiBcXG4rXFx0XFx0XFx0XFx0aXAgKz0gMztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoIWJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSkge1xcbitcXHRcXHRcXHRcXHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXFx1MDAyNnByb2csIHJlYWxfZHN0X3JlZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGluc24sIGlwLCBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xcbitcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHRcXHRicmFuY2hfdGFyZ2V0ID0gcHJvZztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoaXNfYXRvbWljX2ZldGNoKSB7XFxuIFxcdFxcdFxcdFxcdC8qIExvYWQgb2xkIHZhbHVlICovXFxuIFxcdFxcdFxcdFxcdGVtaXRfbGR4KFxcdTAwMjZwcm9nLCBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSxcXG4gXFx0XFx0XFx0XFx0XFx0IEJQRl9SRUdfMCwgcmVhbF9kc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYpO1xcbkBAIC0yNTQyLDE1ICsyNzA0LDE2IEBAIHN0OlxcdFxcdFxcdGluc25fb2ZmID0gaW5zbi1cXHUwMDNlb2ZmO1xcbiBcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKVxcbi1cXHRcXHRcXHRcXHRlcnIgPSBlbWl0X2F0b21pY19sZF9zdChcXHUwMDI2cHJvZywgaW5zbi1cXHUwMDNlaW1tLCBkc3RfcmVnLCBzcmNfcmVnLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VvZmYsIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gZW1pdF9hdG9taWNfbGRfc3QoZW52LCBcXHUwMDI2cHJvZywgaW5zbiwgaXAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGRzdF9yZWcsIHNyY19yZWcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xcbiBcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdGVyciA9IGVtaXRfYXRvbWljX3JtdyhcXHUwMDI2cHJvZywgaW5zbi1cXHUwMDNlaW1tLCBkc3RfcmVnLCBzcmNfcmVnLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnNuLVxcdTAwM2VvZmYsIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcbitcXHRcXHR9XFxuIFxcdFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfQjpcXG4gXFx0XFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9IOlxcbiBcXHRcXHRcXHRpZiAoIWJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSkge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbmluZGV4IDc2YjhiNzYyN2ExMDg1Li44NjgxMDFlZjUwMDJhYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbkBAIC03MjMsNiArNzIzLDggQEAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhIHtcXG4gXFx0dTE2IGNvbnN0X3JlZ19tYXBfbWFzaztcXG4gXFx0dTE2IGNvbnN0X3JlZ19zdWJwcm9nX21hc2s7XFxuIFxcdHUzMiBjb25zdF9yZWdfdmFsc1sxMF07XFxuK1xcdC8qIGluc3RydWN0aW9uIGNhbiBhY2Nlc3Mgbm9uLXN0YWNrIG1lbW9yeSAqL1xcbitcXHRib29sIG5vbl9zdGFja19hY2Nlc3M7XFxuIH07XFxuIFxcbiAjZGVmaW5lIE1BWF9VU0VEX01BUFMgNjQgLyogbWF4IG51bWJlciBvZiBtYXBzIGFjY2Vzc2VkIGJ5IG9uZSBlQlBGIHByb2dyYW0gKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5pbmRleCAxNGFjYjI0NTU3NDZmYy4uMWViY2QyNDdlZjRlM2YgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5AQCAtMTIxMCwxMyArMTIxMCwxNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXFxuIFxcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxcbi1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pO1xcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgczMyIGluc25fb2ZmX2luX3BhdGNoKTtcXG4gc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpicGZfZHVwX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuIHZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KTtcXG4gI2Vsc2VcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbilcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdTMyIG9mZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdTMyIGxlbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgczMyIGluc25fb2ZmX2luX3BhdGNoKVxcbiB7XFxuIFxcdHJldHVybiBFUlJfUFRSKC1FTk9UU1VQUCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9LY29uZmlnIGIva2VybmVsL2JwZi9LY29uZmlnXFxuaW5kZXggZWIzZGUzNTczNGYwOTIuLmUxZjM4NTBkMmY1YTA3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvS2NvbmZpZ1xcbisrKyBiL2tlcm5lbC9icGYvS2NvbmZpZ1xcbkBAIC0xNyw2ICsxNywxMCBAQCBjb25maWcgSEFWRV9DQlBGX0pJVFxcbiBjb25maWcgSEFWRV9FQlBGX0pJVFxcbiBcXHRib29sXFxuIFxcbisjIEtBU0FOIHN1cHBvcnQgZm9yIEpJVCBjb21waWxlclxcbitjb25maWcgSEFWRV9FQlBGX0pJVF9LQVNBTlxcbitcXHRib29sXFxuK1xcbiAjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XFxuICMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXFxuIGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXFxuQEAgLTEwMSw0ICsxMDUsMTcgQEAgY29uZmlnIEJQRl9MU01cXG4gXFxuIFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cXG4gXFxuK2NvbmZpZyBCUEZfSklUX0tBU0FOXFxuK1xcdGJvb2xcXG4rXFx0ZGVwZW5kcyBvbiBIQVZFX0VCUEZfSklUX0tBU0FOXFxuK1xcdGRlcGVuZHMgb24gS0FTQU5fR0VORVJJQ1xcbitcXHRkZXBlbmRzIG9uIEtBU0FOX1ZNQUxMT0NcXG4rXFx0ZGVwZW5kcyBvbiBCUEZfSklUXFxuK1xcdGRlZmF1bHQgeSBpZiBLQVNBTlxcbitcXHRoZWxwXFxuK1xcdCAgTWFrZXMgSklUIGNvbXBpbGVyIGluc2VydCBnZW5lcmljIG91dGxpbmUgS0FTQU4gY2hlY2tzIGluIEJQRlxcbitcXHQgIHByb2dyYW1zIHdoZW4gdGhleSBhcmUgaW5zZXJ0ZWQgaW4gdGhlIGtlcm5lbC4gVGhpcyBmZWF0dXJlIGlzXFxuK1xcdCAgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIHRoZSBuZWVkZWQgc2V0IG9mIEtBU0FOIGFuZCBCUEZcXG4rXFx0ICBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgZW5hYmxlZC5cXG4rXFxuIGVuZG1lbnUgIyBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xcbmluZGV4IDZlMTlhMDMwZGE2ZjEzLi4xZTE4Yjk5OWYxYjU2NSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xcbisrKyBiL2tlcm5lbC9icGYvY29yZS5jXFxuQEAgLTE1OTgsNyArMTU5OCw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aWYgKGVudilcXG4tXFx0XFx0XFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcXG4rXFx0XFx0XFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuLCByZXdyaXR0ZW4gLSAxKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHR0bXAgPSBicGZfcGF0Y2hfaW5zbl9zaW5nbGUoY2xvbmUsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuaW5kZXggMTJhOGE0ZWI3NTdmMTguLmZlZWUxZjMzZGU5ZDU1IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuQEAgLTE1MiwxMiArMTUyLDI1IEBAIHN0YXRpYyBpbnQgZ2V0X2NhbGxlZV9zdGFja19kZXB0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiB9XFxuICNlbmRpZlxcbiBcXG4rc3RhdGljIGJvb2wgaXNfbWVtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbit7XFxuK1xcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1NUIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1NUWCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9MRFgpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX01FTSB8fFxcbitcXHRcXHRCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggfHxcXG4rXFx0XFx0QlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyk7XFxuK31cXG4rXFxuIC8qIHNpbmdsZSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25pW29mZl0gaW5zdHJ1Y3Rpb24gd2FzIHJlcGxhY2VkIHdpdGggdGhlIHJhbmdlXFxuICAqIGluc25pW29mZiwgb2ZmICsgY250KS4gIEFkanVzdCBjb3JyZXNwb25kaW5nIGluc25fYXV4X2RhdGEgYnkgY29weWluZ1xcbiAgKiBbMCwgb2ZmKSBhbmQgW29mZiwgZW5kKSB0byBuZXcgbG9jYXRpb25zLCBzbyB0aGUgcGF0Y2hlZCByYW5nZSBzdGF5cyB6ZXJvXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZywgdTMyIG9mZiwgdTMyIGNudClcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csIHUzMiBvZmYsIHUzMiBjbnQsXFxuK1xcdFxcdFxcdFxcdCBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpkYXRhID0gZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhO1xcbiBcXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBuZXdfcHJvZy1cXHUwMDNlaW5zbnNpO1xcbkBAIC0xNzEsOCArMTg0LDE0IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdCAqL1xcbiBcXHRkYXRhW29mZl0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICsgb2ZmICsgY250IC0gMSk7XFxuIFxcbi1cXHRpZiAoY250ID09IDEpXFxuK1xcdGlmIChjbnQgPT0gMSkge1xcbitcXHRcXHQvKiBBIG5vbi1tZW1vcnkgYWNjZXNzaW5nIGluc24gY291bGQgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGFcXG4rXFx0XFx0ICogbWVtb3J5IGFjY2Vzc2luZyBpbnNuLCBzeXN0ZW1hdGljYWxseSBtYXJrIGl0IGZvciBub24tc3RhY2tcXG4rXFx0XFx0ICogYWNjZXNzXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkYXRhW29mZl0ubm9uX3N0YWNrX2FjY2VzcyA9IGlzX21lbV9pbnNuKGluc24pO1xcbiBcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFx0cHJvZ19sZW4gPSBuZXdfcHJvZy1cXHUwMDNlbGVuO1xcbiBcXG4gXFx0bWVtbW92ZShkYXRhICsgb2ZmICsgY250IC0gMSwgZGF0YSArIG9mZixcXG5AQCAtMTgyLDcgKzIwMSwxOSBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHQvKiBFeHBhbmQgaW5zbmlbb2ZmXSdzIHNlZW4gY291bnQgdG8gdGhlIHBhdGNoZWQgcmFuZ2UuICovXFxuIFxcdFxcdGRhdGFbaV0uc2VlbiA9IG9sZF9zZWVuO1xcbiBcXHRcXHRkYXRhW2ldLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiArIGkpO1xcbitcXHRcXHRpZiAoaSA9PSBvZmYgKyBpbnNuX29mZl9pbl9wYXRjaCkge1xcbitcXHRcXHRcXHRkYXRhW2ldLm5vbl9zdGFja19hY2Nlc3MgPSBkYXRhW29mZiArIGNudCAtIDFdLm5vbl9zdGFja19hY2Nlc3M7XFxuK1xcdFxcdFxcdGRhdGFbb2ZmICsgY250IC0gMV0ubm9uX3N0YWNrX2FjY2VzcyA9IGZhbHNlO1xcbitcXHRcXHR9IGVsc2UgaWYgKGlzX21lbV9pbnNuKGluc24gKyBpKSkge1xcbitcXHRcXHRcXHRkYXRhW2ldLm5vbl9zdGFja19hY2Nlc3MgPSB0cnVlO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4rXFx0LypcXG4rXFx0ICogTGFzdCBzbG90IGluc3RydWN0aW9uIGNvdWxkIGJlIGEgbmV3bHkgZ2VuZXJhdGVkXFxuK1xcdCAqIEJQRl9TVC9CUEZfTERYL0JQRl9TVFhcXG4rXFx0ICovXFxuK1xcdGlmIChpc19tZW1faW5zbihpbnNuICsgb2ZmICsgY250IC0gMSkgXFx1MDAyNlxcdTAwMjYgaW5zbl9vZmZfaW5fcGF0Y2ggIT0gY250IC0gMSlcXG4rXFx0XFx0ZGF0YVtvZmYgKyBjbnQgLSAxXS5ub25fc3RhY2tfYWNjZXNzID0gdHJ1ZTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBpbmRpcmVjdF90YXJnZXQgZmxhZyBvZiB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gd2FzIG1vdmVkIHRvIHRoZSBsYXN0IG9mIHRoZVxcbkBAIC0yNDUsNyArMjc2LDggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxcbiB9XFxuIFxcbiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcXG4tXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgczMyIGluc25fb2ZmX2luX3BhdGNoKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2c7XFxuIFxcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqbmV3X2RhdGEgPSBOVUxMO1xcbkBAIC0yNjksNyArMzAxLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxuIFxcdFxcdFxcdFxcdGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtvZmZdLm9yaWdfaWR4KTtcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4tXFx0YWRqdXN0X2luc25fYXV4X2RhdGEoZW52LCBuZXdfcHJvZywgb2ZmLCBsZW4pO1xcbitcXHRhZGp1c3RfaW5zbl9hdXhfZGF0YShlbnYsIG5ld19wcm9nLCBvZmYsIGxlbiwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xcbiBcXHRhZGp1c3Rfc3VicHJvZ19zdGFydHMoZW52LCBvZmYsIGxlbik7XFxuIFxcdGFkanVzdF9pbnNuX2FycmF5cyhlbnYsIG9mZiwgbGVuKTtcXG4gXFx0YWRqdXN0X3Bva2VfZGVzY3MobmV3X3Byb2csIG9mZiwgbGVuKTtcXG5AQCAtNjY4LDcgKzcwMCw3IEBAIGludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0cGF0Y2ggPSB6ZXh0X3BhdGNoO1xcbiBcXHRcXHRwYXRjaF9sZW4gPSAyO1xcbiBhcHBseV9wYXRjaF9idWZmZXI6XFxuLVxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4pO1xcbitcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBhZGpfaWR4LCBwYXRjaCwgcGF0Y2hfbGVuLCAwKTtcXG4gXFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IG5ld19wcm9nO1xcbkBAIC03MTMsNyArNzQ1LDcgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRpbnNuX2J1ZltjbnQrK10gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgLXN1YnByb2dzWzBdLnN0YWNrX2RlcHRoKTtcXG4gXFx0XFx0XFx0aW5zbl9idWZbY250KytdID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VpbnNuc2lbMF07XFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LCAxKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IG5ld19wcm9nO1xcbkBAIC03MzYsNyArNzY4LDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHR2ZXJpZmllcl9idWcoZW52LCBcXFwicHJvbG9ndWUgaXMgdG9vIGxvbmdcXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdFxcdH0gZWxzZSBpZiAoY250KSB7XFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250IC0gMSk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtNzU5LDYgKzc5Miw3IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpbnNuX2NudDsgaSsrLCBpbnNuKyspIHtcXG4gXFx0XFx0YnBmX2NvbnZlcnRfY3R4X2FjY2Vzc190IGNvbnZlcnRfY3R4X2FjY2VzcztcXG4rXFx0XFx0czMyIGluc25fb2ZmX2luX3BhdGNoID0gLTE7XFxuIFxcdFxcdHU4IG1vZGU7XFxuIFxcbiBcXHRcXHRpZiAoZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2kgKyBkZWx0YV0ubm9zcGVjKSB7XFxuQEAgLTc2OCw3ICs4MDIsOCBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdCpwYXRjaCsrID0gQlBGX1NUX05PU1BFQygpO1xcbiBcXHRcXHRcXHQqcGF0Y2grKyA9ICppbnNuO1xcbiBcXHRcXHRcXHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC04NDEsNyArODc2LDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHQqcGF0Y2grKyA9ICppbnNuO1xcbiBcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9TVF9OT1NQRUMoKTtcXG4gXFx0XFx0XFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMCk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtODU2LDE2ICs4OTIsMjAgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRpZiAoIW9wcy1cXHUwMDNlY29udmVydF9jdHhfYWNjZXNzKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0Y29udmVydF9jdHhfYWNjZXNzID0gb3BzLVxcdTAwM2Vjb252ZXJ0X2N0eF9hY2Nlc3M7XFxuK1xcdFxcdFxcdGluc25fb2ZmX2luX3BhdGNoID0gMDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgUFRSX1RPX1NPQ0tFVDpcXG4gXFx0XFx0Y2FzZSBQVFJfVE9fU09DS19DT01NT046XFxuIFxcdFxcdFxcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl9zb2NrX2NvbnZlcnRfY3R4X2FjY2VzcztcXG4rXFx0XFx0XFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBQVFJfVE9fVENQX1NPQ0s6XFxuIFxcdFxcdFxcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl90Y3Bfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3M7XFxuK1xcdFxcdFxcdGluc25fb2ZmX2luX3BhdGNoID0gMDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgUFRSX1RPX1hEUF9TT0NLOlxcbiBcXHRcXHRcXHRjb252ZXJ0X2N0eF9hY2Nlc3MgPSBicGZfeGRwX3NvY2tfY29udmVydF9jdHhfYWNjZXNzO1xcbitcXHRcXHRcXHRpbnNuX29mZl9pbl9wYXRjaCA9IDA7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFBUUl9UT19CVEZfSUQ6XFxuIFxcdFxcdGNhc2UgUFRSX1RPX0JURl9JRCB8IFBUUl9VTlRSVVNURUQ6XFxuQEAgLTk3MSw3ICsxMDExLDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc2l6ZSAqIDgsIDApO1xcbiBcXG4gcGF0Y2hfaW5zbl9idWY6XFxuLVxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGluc25fb2ZmX2luX3BhdGNoKTtcXG4gXFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0xNDY0LDcgKzE1MDUsNyBAQCBzdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdFxcbiBcXHQgKiBvbmVzIGZvciB0aGUgaGlkZGVuIHN1YnByb2cuIEhlbmNlIGFsbCBvZiB0aGUgYWRqdXN0bWVudCBvcGVyYXRpb25zXFxuIFxcdCAqIGluIGJwZl9wYXRjaF9pbnNuX2RhdGEgYXJlIG5vLW9wcy5cXG4gXFx0ICovXFxuLVxcdHByb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW4gLSAxLCBwYXRjaCwgbGVuKTtcXG4rXFx0cHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbiAtIDEsIHBhdGNoLCBsZW4sIC0xKTtcXG4gXFx0aWYgKCFwcm9nKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0ZW52LVxcdTAwM2Vwcm9nID0gcHJvZztcXG5AQCAtMTU0OSw3ICsxNTkwLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXG4gXFx0XFx0XFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcXG4gXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIDApO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTE1NjksNiArMTYxMSw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0Ym9vbCBpc19zZGl2ID0gaXNkaXYgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlb2ZmID09IDE7XFxuIFxcdFxcdFxcdGJvb2wgaXNfc21vZCA9ICFpc2RpdiBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgPT0gMTtcXG4gXFx0XFx0XFx0c3RydWN0IGJwZl9pbnNuICpwYXRjaCA9IGluc25fYnVmO1xcbitcXHRcXHRcXHRzMzIgaW5zbl9vZmZfaW5fcGF0Y2g7XFxuIFxcbiBcXHRcXHRcXHRpZiAoaXNfc2Rpdikge1xcbiBcXHRcXHRcXHRcXHQvKiBbUixXXXggc2RpdiAwIC1cXHUwMDNlIDBcXG5AQCAtMTU5NSw2ICsxNjM4LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XFxuIFxcdFxcdFxcdFxcdCpwYXRjaCsrID0gKmluc247XFxuIFxcdFxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxuK1xcdFxcdFxcdFxcdGluc25fb2ZmX2luX3BhdGNoID0gY250IC0gMTtcXG4gXFx0XFx0XFx0fSBlbHNlIGlmIChpc19zbW9kKSB7XFxuIFxcdFxcdFxcdFxcdC8qIFtSLFddeCBtb2QgMCAtXFx1MDAzZSBbUixXXXggKi9cXG4gXFx0XFx0XFx0XFx0LyogW1IsV114IG1vZCAtMSAtXFx1MDAzZSAwICovXFxuQEAgLTE2MTEsNiArMTY1NSw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0XFx0KnBhdGNoKysgPSBCUEZfTU9WMzJfSU1NKGluc24tXFx1MDAzZWRzdF9yZWcsIDApO1xcbiBcXHRcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XFxuIFxcdFxcdFxcdFxcdCpwYXRjaCsrID0gKmluc247XFxuK1xcdFxcdFxcdFxcdGluc25fb2ZmX2luX3BhdGNoID0gcGF0Y2ggLSBpbnNuX2J1ZiAtIDE7XFxuIFxcbiBcXHRcXHRcXHRcXHRpZiAoIWlzNjQpIHtcXG4gXFx0XFx0XFx0XFx0XFx0KnBhdGNoKysgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xcbkBAIC0xNjI2LDEyICsxNjcxLDE0IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0XFx0KnBhdGNoKysgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xcbiBcXHRcXHRcXHRcXHQqcGF0Y2grKyA9ICppbnNuO1xcbiBcXHRcXHRcXHRcXHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xcbitcXHRcXHRcXHRcXHRpbnNuX29mZl9pbl9wYXRjaCA9IGNudCAtIDE7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFxcdC8qIFtSLFddeCBtb2QgMCAtXFx1MDAzZSBbUixXXXggKi9cXG4gXFx0XFx0XFx0XFx0KnBhdGNoKysgPSBCUEZfUkFXX0lOU04oKGlzNjQgPyBCUEZfSk1QIDogQlBGX0pNUDMyKSB8XFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdEJQRl9KRVEgfCBCUEZfSywgaW5zbi1cXHUwMDNlc3JjX3JlZyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0MCwgMSArIChpczY0ID8gMCA6IDEpLCAwKTtcXG4gXFx0XFx0XFx0XFx0KnBhdGNoKysgPSAqaW5zbjtcXG4rXFx0XFx0XFx0XFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSBwYXRjaCAtIGluc25fYnVmIC0gMTtcXG4gXFxuIFxcdFxcdFxcdFxcdGlmICghaXM2NCkge1xcbiBcXHRcXHRcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XFxuQEAgLTE2NDAsNyArMTY4Nyw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0XFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTE2NTYsNiArMTcwNCw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0ICAgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1gpKSB7XFxuIFxcdFxcdFxcdHN0cnVjdCBicGZfaW5zbiAqcGF0Y2ggPSBpbnNuX2J1ZjtcXG4gXFx0XFx0XFx0dTY0IHVhZGRyZXNzX2xpbWl0ID0gYnBmX2FyY2hfdWFkZHJlc3NfbGltaXQoKTtcXG4rXFx0XFx0XFx0czMyIGluc25fb2ZmX2luX3BhdGNoO1xcbiBcXG4gXFx0XFx0XFx0aWYgKCF1YWRkcmVzc19saW1pdClcXG4gXFx0XFx0XFx0XFx0Z290byBuZXh0X2luc247XFxuQEAgLTE2NjYsMTEgKzE3MTUsMTMgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9BTFU2NF9JTU0oQlBGX1JTSCwgQlBGX1JFR19BWCwgMzIpO1xcbiBcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KTEUsIEJQRl9SRUdfQVgsIHVhZGRyZXNzX2xpbWl0IFxcdTAwM2VcXHUwMDNlIDMyLCAyKTtcXG4gXFx0XFx0XFx0KnBhdGNoKysgPSAqaW5zbjtcXG4rXFx0XFx0XFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSBwYXRjaCAtIGluc25fYnVmIC0gMTtcXG4gXFx0XFx0XFx0KnBhdGNoKysgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xcbiBcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9NT1Y2NF9JTU0oaW5zbi1cXHUwMDNlZHN0X3JlZywgMCk7XFxuIFxcbiBcXHRcXHRcXHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBpbnNuX29mZl9pbl9wYXRjaCk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMTY5MCw3ICsxNzQxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMCk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMTc0Myw3ICsxNzk1LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9BTFU2NF9JTU0oQlBGX01VTCwgb2ZmX3JlZywgLTEpO1xcbiBcXHRcXHRcXHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTE3ODgsNyArMTg0MSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0aW5zbl9idWZbNl0gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfQVgsIHN0YWNrX29mZl9jbnQpO1xcbiBcXHRcXHRcXHRjbnQgPSA3O1xcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMyk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMTgwOSw3ICsxODYzLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRpbnNuX2J1ZlszXSA9IEJQRl9TVFhfTUVNKEJQRl9EVywgQlBGX1JFR18xMCwgQlBGX1JFR19BWCwgc3RhY2tfb2ZmKTtcXG4gXFx0XFx0XFx0Y250ID0gNDtcXG4gXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIDIpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTE4MzAsNyArMTg4NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0aWYgKGNudCA9PSAwKVxcbiBcXHRcXHRcXHRcXHRnb3RvIG5leHRfaW5zbjtcXG4gXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIGNudCAtIDEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTE5MTUsNyArMTk3MSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG1hcCktXFx1MDAzZWluZGV4X21hc2spO1xcbiBcXHRcXHRcXHRpbnNuX2J1ZlsyXSA9ICppbnNuO1xcbiBcXHRcXHRcXHRjbnQgPSAzO1xcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0xOTQ4LDcgKzIwMDUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdGluc25fYnVmWzJdID0gKmluc247XFxuIFxcdFxcdFxcdGNudCA9IDM7XFxuIFxcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0xOTY3LDcgKzIwMjUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdGluc25fYnVmWzFdID0gKmluc247XFxuIFxcdFxcdFxcdGNudCA9IDI7XFxuIFxcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0yMDA3LDggKzIwNjYsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHRcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKFxcbitcXHRcXHRcXHRcXHRcXHRlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCwgLTEpO1xcbiBcXHRcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTIwOTEsNyArMjE1MCw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0Y250ID0gMztcXG4gXFxuIFxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAtMSk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMjExOSw3ICsyMTc4LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRpbnNuX2J1ZlswXSA9IEJQRl9BTFUzMl9SRUcoQlBGX1hPUiwgQlBGX1JFR18wLCBCUEZfUkVHXzApO1xcbiBcXHRcXHRcXHRjbnQgPSAxO1xcbiAjZW5kaWZcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTIxMzcsNyArMjE5Nyw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTtcXG4gXFx0XFx0XFx0Y250ID0gMztcXG4gXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0yMTcxLDcgKzIyMzIsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdGluc25fYnVmW2NudCsrXSA9IEJQRl9KTVBfQSgxKTtcXG4gXFx0XFx0XFx0aW5zbl9idWZbY250KytdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FSU5WQUwpO1xcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTIyMDMsNyArMjI2NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0XFx0Y250ID0gMTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTIyMjksNyArMjI5Miw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0XFx0Y250ID0gMjtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTIyNDUsNyArMjMwOSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0LyogTG9hZCBJUCBhZGRyZXNzIGZyb20gY3R4IC0gMTYgKi9cXG4gXFx0XFx0XFx0aW5zbl9idWZbMF0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAtMTYpO1xcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgMSk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICAxLCAtMSk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMjMwMCw3ICsyMzY1LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRpbnNuX2J1ZlsxMF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUVOT0VOVCk7XFxuIFxcdFxcdFxcdGNudCA9IDExO1xcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTIzMTgsNyArMjM4NCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0aW5zbl9idWZbMV0gPSBCUEZfQVRPTUlDX09QKEJQRl9EVywgQlBGX1hDSEcsIEJQRl9SRUdfMSwgQlBGX1JFR18wLCAwKTtcXG4gXFx0XFx0XFx0Y250ID0gMjtcXG4gXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0yMzg2LDcgKzI0NTMsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdC8qIENvcHkgZmlyc3QgYWN0dWFsIGluc24gdG8gcHJlc2VydmUgaXQgKi9cXG4gXFx0XFx0aW5zbl9idWZbY250KytdID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VpbnNuc2lbc3VicHJvZ19zdGFydF07XFxuIFxcbi1cXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBzdWJwcm9nX3N0YXJ0LCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgc3VicHJvZ19zdGFydCwgaW5zbl9idWYsIGNudCwgY250IC0gMSk7XFxuIFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRcXHRlbnYtXFx1MDAzZXByb2cgPSBwcm9nID0gbmV3X3Byb2c7XFxuQEAgLTI0ODUsNyArMjU1Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmlubGluZV9icGZfbG9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRpbnNuX2J1ZltjbnQrK10gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfOCwgQlBGX1JFR18xMCwgcjhfb2Zmc2V0KTtcXG4gXFxuIFxcdCp0b3RhbF9jbnQgPSBjbnQ7XFxuLVxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHBvc2l0aW9uLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgcG9zaXRpb24sIGluc25fYnVmLCBjbnQsIC0xKTtcXG4gXFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0cmV0dXJuIG5ld19wcm9nO1xcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggNTFmNzk2NWQ0MmUzMjQuLjEyNDZjZThmNWYwZjQ2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC0zMTQ0LDYgKzMxNDQsMTEgQEAgc3RhdGljIHZvaWQgbWFya19pbmRpcmVjdF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeClcXG4gXFx0ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2lkeF0uaW5kaXJlY3RfdGFyZ2V0ID0gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbWFya19ub25fc3RhY2tfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgpXFxuK3tcXG4rXFx0ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2lkeF0ubm9uX3N0YWNrX2FjY2VzcyA9IHRydWU7XFxuK31cXG4rXFxuICNkZWZpbmUgTFJfRlJBTUVOT19CSVRTXFx0NFxcbiAjZGVmaW5lIExSX1NQSV9CSVRTXFx0NlxcbiAjZGVmaW5lIExSX0VOVFJZX0JJVFNcXHQoTFJfU1BJX0JJVFMgKyBMUl9GUkFNRU5PX0JJVFMgKyAxKVxcbkBAIC02MzMzLDYgKzYzMzgsMTAgQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRjb2VyY2VfcmVnX3RvX3NpemVfc3goXFx1MDAyNnJlZ3NbdmFsdWVfcmVnbm9dLCBzaXplKTtcXG4gXFx0fVxcbitcXG4rXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlICE9IFBUUl9UT19TVEFDSylcXG4rXFx0XFx0bWFya19ub25fc3RhY2tfYWNjZXNzKGVudiwgaW5zbl9pZHgpO1xcbitcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmNcXG5pbmRleCAwMjIyYTlhNWQwNzYxNC4uMzdjNDA1ZmMyYjBkMjMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmNcXG5AQCAtMjI3LDQyICsyMjcsNiBAQCBzdGF0aWMgdm9pZCBjaGVja19pbmNvcnJlY3RfaW5kZXgodm9pZClcXG4gXFx0Y2hlY2tfbWlkX2luc25faW5kZXgoKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzZXRfYnBmX2ppdF9oYXJkZW4oY2hhciAqbGV2ZWwpXFxuLXtcXG4tXFx0Y2hhciBvbGRfbGV2ZWw7XFxuLVxcdGludCBlcnIgPSAtMTtcXG4tXFx0aW50IGZkID0gLTE7XFxuLVxcbi1cXHRmZCA9IG9wZW4oXFxcIi9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlblxcXCIsIE9fUkRXUiB8IE9fTk9OQkxPQ0spO1xcbi1cXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdEFTU0VSVF9GQUlMKFxcXCJvcGVuIC4uLi9icGZfaml0X2hhcmRlbiByZXR1cm5lZCAlZCAoZXJybm89JWQpXFxcIiwgZmQsIGVycm5vKTtcXG4tXFx0XFx0cmV0dXJuIC0xO1xcbi1cXHR9XFxuLVxcbi1cXHRlcnIgPSByZWFkKGZkLCBcXHUwMDI2b2xkX2xldmVsLCAxKTtcXG4tXFx0aWYgKGVyciAhPSAxKSB7XFxuLVxcdFxcdEFTU0VSVF9GQUlMKFxcXCJyZWFkIGZyb20gLi4uL2JwZl9qaXRfaGFyZGVuIHJldHVybmVkICVkIChlcnJubz0lZClcXFwiLCBlcnIsIGVycm5vKTtcXG4tXFx0XFx0ZXJyID0gLTE7XFxuLVxcdFxcdGdvdG8gZW5kO1xcbi1cXHR9XFxuLVxcbi1cXHRsc2VlayhmZCwgMCwgU0VFS19TRVQpO1xcbi1cXG4tXFx0ZXJyID0gd3JpdGUoZmQsIGxldmVsLCAxKTtcXG4tXFx0aWYgKGVyciAhPSAxKSB7XFxuLVxcdFxcdEFTU0VSVF9GQUlMKFxcXCJ3cml0ZSB0byAuLi4vYnBmX2ppdF9oYXJkZW4gcmV0dXJuZWQgJWQgKGVycm5vPSVkKVxcXCIsIGVyciwgZXJybm8pO1xcbi1cXHRcXHRlcnIgPSAtMTtcXG4tXFx0XFx0Z290byBlbmQ7XFxuLVxcdH1cXG4tXFxuLVxcdGVyciA9IDA7XFxuLVxcdCpsZXZlbCA9IG9sZF9sZXZlbDtcXG4tZW5kOlxcbi1cXHRpZiAoZmQgXFx1MDAzZT0gMClcXG4tXFx0XFx0Y2xvc2UoZmQpO1xcbi1cXHRyZXR1cm4gZXJyO1xcbi19XFxuLVxcbiBzdGF0aWMgdm9pZCBjaGVja19ibGluZG5lc3Modm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2luc24gaW5zbnNbXSA9IHtcXG5AQCAtMjcyLDcgKzIzNiw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2JsaW5kbmVzcyh2b2lkKVxcbiBcXHRcXHRCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMSksXFxuIFxcdFxcdEJQRl9FWElUX0lOU04oKSxcXG4gXFx0fTtcXG4tXFx0aW50IHByb2dfZmQgPSAtMSwgbWFwX2ZkO1xcbitcXHRpbnQgcHJvZ19mZCA9IC0xLCBtYXBfZmQsIHJldDtcXG4gXFx0c3RydWN0IGJwZl9pbnNuX2FycmF5X3ZhbHVlIHZhbCA9IHt9O1xcbiBcXHRjaGFyIGJwZl9qaXRfaGFyZGVuID0gJ0AnOyAvKiBub24tZXhpenN0aW5nIHZhbHVlICovXFxuIFxcdGludCBpO1xcbkBAIC0yOTEsNyArMjU1LDggQEAgc3RhdGljIHZvaWQgY2hlY2tfYmxpbmRuZXNzKHZvaWQpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFxuIFxcdGJwZl9qaXRfaGFyZGVuID0gJzInO1xcbi1cXHRpZiAoc2V0X2JwZl9qaXRfaGFyZGVuKFxcdTAwMjZicGZfaml0X2hhcmRlbikpIHtcXG4rXFx0cmV0ID0gc2V0X2JwZl9qaXRfaGFyZGVuKFxcdTAwMjZicGZfaml0X2hhcmRlbik7XFxuK1xcdGlmICghQVNTRVJUX09LKHJldCwgXFxcInNldCBicGZfaml0X2hhcmRlblxcXCIpKSB7XFxuIFxcdFxcdGJwZl9qaXRfaGFyZGVuID0gJ0AnOyAvKiBvcGVuLCByZWFkIG9yIHdyaXRlIGZhaWxlZCA9XFx1MDAzZSBubyB3cml0ZSB3YXMgZG9uZSAqL1xcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2thc2FuLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mMDA2YjkyZWUxMzFhY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rYXNhbi5jXFxuQEAgLTAsMCArMSw0MjUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXFxuK1xcbisvKlxcbisgKiBUZXN0cyB2YWxpZGF0aW5nIHRoYXQgS0FTQU4gcmVwb3J0cyBhcmUgcHJvcGVybHkgaW5zdHJ1bWVudGVkIGFuZFxcbisgKiBnZW5lcmF0ZWQgb24gYSB3aWRlIHZhcmlldHkgb2YgaW5zdHJ1Y3Rpb25zLiBUaGUgcnVubmluZyBrZXJuZWwgbmVlZHNcXG4rICoga2FzYW5fbXVsdGlfc2hvdCB0byBydW4gbXVsdGlwbGUga2FzYW4tZ2VuZXJhdGluZyBzdWJ0ZXN0cyBhdCBvbmNlXFxuKyAqL1xcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9ldGhlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bnByaXZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwia2FzYW4uc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia2FzYW5faGFyZGVuLnNrZWwuaFxcXCJcXG4rXFxuKyNkZWZpbmUgU1VCVEVTVF9OQU1FX01BWF9MRU5cXHQxMjhcXG4rI2RlZmluZSBQUk9HX05BTUVfTUFYX0xFTlxcdDEyOFxcbitcXG4rI2RlZmluZSBNQVhfTE9HX1NJWkVcXHRcXHQoOCAqIDEwMjQpXFxuKyNkZWZpbmUgUkVBRF9DSFVOS19TSVpFXFx0XFx0MjU2XFxuK1xcbisjZGVmaW5lIEtBU0FOX1BBVFRFUk5fU0xBQl9VQUYgXFxcIkJVRzogS0FTQU46IHNsYWItdXNlLWFmdGVyLWZyZWUgXFxcIiBcXFxcXFxuK1xcdFxcXCJpbiBicGZfcHJvZ18lMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeF8lc1xcXCJcXG4rI2RlZmluZSBLQVNBTl9QQVRURVJOX1JFUE9SVCBcXFwiJXMgb2Ygc2l6ZSAlZCBhdCBhZGRyXFxcIlxcbitcXG4rc3RhdGljIGNoYXIga2xvZ19idWZmZXJbTUFYX0xPR19TSVpFXTtcXG4rc3RhdGljIGNoYXIgcmVjb3JkW01BWF9MT0dfU0laRV07XFxuK1xcbitzdHJ1Y3QgdGVzdF9zcGVjIHtcXG4rXFx0Y2hhciAqcHJvZ190eXBlO1xcbitcXHRib29sIGlzX3dyaXRlO1xcbitcXHRib29sIG9ubHlfMzJfb3JfNjQ7XFxuK1xcdGJvb2wgbmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsO1xcbitcXHRib29sIHNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nO1xcbitcXHRib29sIHNraXBfb25fc3RhY2tfdGVzdGluZztcXG4rXFx0aW50IHJ1bl9zaXplO1xcbitcXHRib29sIGV4cGVjdF9ub19yZXBvcnQ7XFxuK1xcdGJvb2wgcm5kX2hpMzI7XFxuK307XFxuK1xcbitzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHtcXG4rXFx0X191OCBkYXRhXzE7XFxuK1xcdF9fdTE2IGRhdGFfMjtcXG4rXFx0X191MzIgZGF0YV80O1xcbitcXHRfX3U2NCBkYXRhXzg7XFxuK307XFxuK1xcbitzdHJ1Y3QgdGVzdF9jdHgge1xcbitcXHRfX3U4ICBwcm9nX3RhZ1tCUEZfVEFHX1NJWkVdO1xcbitcXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xcbitcXHRpbnQgKmFjY2Vzc19zaXplO1xcbitcXHRib29sIHNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsO1xcbitcXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XFxuK1xcdGNoYXIgcHJvZ19uYW1lW1NVQlRFU1RfTkFNRV9NQVhfTEVOXTtcXG4rXFx0aW50IGtsb2dfZmQ7XFxuK307XFxuK1xcbitzdGF0aWMgaW50IG9wZW5fa2VybmVsX2xvZ3Modm9pZClcXG4re1xcbitcXHRpbnQgZmQ7XFxuK1xcbitcXHRmZCA9IG9wZW4oXFxcIi9kZXYva21zZ1xcXCIsIE9fUkRPTkxZIHwgT19OT05CTE9DSyk7XFxuK1xcbitcXHRyZXR1cm4gZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNraXBfa2VybmVsX2xvZ3MoaW50IGZkKVxcbit7XFxuK1xcdGxzZWVrKGZkLCAwLCBTRUVLX0VORCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmVhZF9rZXJuZWxfbG9ncyhpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IG1heF9sZW4pXFxuK3tcXG4rXFx0c2l6ZV90IHRvdGFsID0gMDtcXG4rXFx0c3NpemVfdCBuO1xcbitcXG4rXFx0YnVmWzBdID0gJ1xcXFwwJztcXG4rXFx0d2hpbGUgKDEpIHtcXG4rXFx0XFx0Y2hhciAqbXNnLCAqZW9sO1xcbitcXHRcXHRzaXplX3QgbGVuO1xcbitcXG4rXFx0XFx0biA9IHJlYWQoZmQsIHJlY29yZCwgc2l6ZW9mKHJlY29yZCkgLSAxKTtcXG4rXFx0XFx0aWYgKG4gXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGlmIChlcnJubyA9PSBFQUdBSU4pXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRyZXR1cm4gbjtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZWNvcmRbbl0gPSAnXFxcXDAnO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRWFjaCBrbXNnIHJlY29yZCBzdGFydHMgd2l0aCBzb21lIG1ldGFkYXRhLCBzZXBhcmF0ZWRcXG4rXFx0XFx0ICogZnJvbSB0aGUgYWN0dWFsIGNvbnRlbnQgYnkgYSBzZW1pLWNvbG9uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtc2cgPSBzdHJjaHIocmVjb3JkLCAnOycpO1xcbitcXHRcXHRpZiAoIW1zZylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdG1zZysrO1xcbitcXHRcXHRlb2wgPSBzdHJjaHIobXNnLCAnXFxcXG4nKTtcXG4rXFx0XFx0aWYgKGVvbClcXG4rXFx0XFx0XFx0KmVvbCA9ICdcXFxcMCc7XFxuK1xcbitcXHRcXHRsZW4gPSBzdHJsZW4obXNnKTtcXG4rXFx0XFx0aWYgKHRvdGFsICsgbGVuICsgMiBcXHUwMDNlIG1heF9sZW4pXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRtZW1jcHkoYnVmICsgdG90YWwsIG1zZywgbGVuKTtcXG4rXFx0XFx0dG90YWwgKz0gbGVuO1xcbitcXHRcXHRidWZbdG90YWwrK10gPSAnXFxcXG4nO1xcbitcXHRcXHRidWZbdG90YWxdID0gJ1xcXFwwJztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRvdGFsO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGNoZWNrX2thc2FuX3JlcG9ydF9pbl9rZXJuZWxfbG9ncyhjaGFyICpidWYsIHN0cnVjdCB0ZXN0X2N0eCAqY3R4LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgaXNfd3JpdGUsIGludCBzaXplKVxcbit7XFxuK1xcdGNoYXIgYWNjZXNzX2xvZ1tSRUFEX0NIVU5LX1NJWkVdO1xcbitcXHRjaGFyICprYXNhbl9yZXBvcnRfc3RhcnQ7XFxuK1xcdGludCBuc2l6ZTtcXG4rXFxuK1xcdHNucHJpbnRmKGFjY2Vzc19sb2csIFJFQURfQ0hVTktfU0laRSwgS0FTQU5fUEFUVEVSTl9TTEFCX1VBRixcXG4rXFx0XFx0IGN0eC1cXHUwMDNlcHJvZ190YWdbMF0sIGN0eC1cXHUwMDNlcHJvZ190YWdbMV0sIGN0eC1cXHUwMDNlcHJvZ190YWdbMl0sXFxuK1xcdFxcdCBjdHgtXFx1MDAzZXByb2dfdGFnWzNdLCBjdHgtXFx1MDAzZXByb2dfdGFnWzRdLCBjdHgtXFx1MDAzZXByb2dfdGFnWzVdLFxcbitcXHRcXHQgY3R4LVxcdTAwM2Vwcm9nX3RhZ1s2XSwgY3R4LVxcdTAwM2Vwcm9nX3RhZ1s3XSwgY3R4LVxcdTAwM2Vwcm9nX25hbWUpO1xcbitcXHQvKlxcbitcXHQgKiBTZWFyY2hlZCBrYXNhbiByZXBvcnQgaXMgdmFsaWQgaWZcXG4rXFx0ICogLSBpdCBjb250YWlucyB0aGUgZXhwZWN0ZWQga2FzYW4gcGF0dGVyblxcbitcXHQgKiAtIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmF1bHR5IGFjY2VzcyBpcyBmb3VuZCBzb21ld2hlcmVcXG4rXFx0ICogICBhZnRlciB0aGUgaGVhZGVyIChub3QgbmVjZXNzYXJpbHkgb24gdGhlIHZlcnkgbmV4dCBsaW5lLFxcbitcXHQgKiAgIGJlY2F1c2Ugb3RoZXIga2VybmVsIG1lc3NhZ2VzIG1heSBpbnRlcmxlYXZlKVxcbitcXHQgKiAtIGZhdWx0eSBhY2Nlc3MgcHJvcGVydGllcyBtYXRjaCB0aGUgdGVzdGVkIHR5cGUgYW5kIHNpemVcXG4rXFx0ICovXFxuK1xcdGthc2FuX3JlcG9ydF9zdGFydCA9IHN0cnN0cihidWYsIGFjY2Vzc19sb2cpO1xcbitcXG4rXFx0aWYgKCFrYXNhbl9yZXBvcnRfc3RhcnQpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0bnNpemUgPSBzbnByaW50ZihhY2Nlc3NfbG9nLCBSRUFEX0NIVU5LX1NJWkUsIEtBU0FOX1BBVFRFUk5fUkVQT1JULFxcbitcXHRcXHRcXHQgaXNfd3JpdGUgPyBcXFwiV3JpdGVcXFwiIDogXFxcIlJlYWRcXFwiLCBzaXplKTtcXG4rXFxuK1xcdGlmICghc3Ryc3RyKGthc2FuX3JlcG9ydF9zdGFydCwgYWNjZXNzX2xvZykpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGV4ZWNfc3VidGVzdChzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCxcXG4rXFx0XFx0XFx0IGludCBhY2Nlc3Nfc2l6ZSwgYm9vbCBvbl9zdGFjaylcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xcbitcXHRzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBpbmZvO1xcbitcXHR1aW50OF90IGJ1ZltFVEhfSExFTl0gPSB7MH07XFxuK1xcdGludCByZXQsIHByb2dfZmQ7XFxuK1xcdF9fdTMyIGluZm9fbGVuO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2Vwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoY3R4LVxcdTAwM2VvYmosXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgY3R4LVxcdTAwM2Vwcm9nX25hbWUpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoY3R4LVxcdTAwM2Vwcm9nLCBcXFwiZmluZCB0ZXN0IHByb2dcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XFxuK1xcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgaW5mb19sZW4pO1xcbitcXHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC1cXHUwMDNlcHJvZyk7XFxuK1xcdGlmICghQVNTRVJUX09LX0ZEKHByb2dfZmQsIFxcXCJnZXQgcHJvZyBmZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHJldCA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHByb2dfZmQsIFxcdTAwMjZpbmZvLCBcXHUwMDI2aW5mb19sZW4pO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJmZXRjaCBsb2FkZWQgcHJvZ3JhbSBpbmZvXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0bWVtY3B5KGN0eC1cXHUwMDNlcHJvZ190YWcsIGluZm8udGFnLCBCUEZfVEFHX1NJWkUpO1xcbitcXG4rXFx0c2tpcF9rZXJuZWxfbG9ncyhjdHgtXFx1MDAzZWtsb2dfZmQpO1xcbitcXG4rXFx0dG9wdHMuc3ogPSBzaXplb2Yoc3RydWN0IGJwZl90ZXN0X3J1bl9vcHRzKTtcXG4rXFx0dG9wdHMuZGF0YV9zaXplX2luID0gRVRIX0hMRU47XFxuK1xcdHRvcHRzLmRhdGFfaW4gPSBidWY7XFxuK1xcdGlmIChjdHgtXFx1MDAzZWFjY2Vzc19zaXplKVxcbitcXHRcXHQqY3R4LVxcdTAwM2VhY2Nlc3Nfc2l6ZSA9IGFjY2Vzc19zaXplO1xcbitcXHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChjdHgtXFx1MDAzZXByb2cpLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZ0b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LKHJldCwgXFxcInJ1biBwcm9nXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJldCA9IHJlYWRfa2VybmVsX2xvZ3MoY3R4LVxcdTAwM2VrbG9nX2ZkLCBrbG9nX2J1ZmZlciwgTUFYX0xPR19TSVpFKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UocmV0LCAwLCBcXFwicmVhZCBrZXJuZWwgbG9nc1xcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyZXQgPSBjaGVja19rYXNhbl9yZXBvcnRfaW5fa2VybmVsX2xvZ3Moa2xvZ19idWZmZXIsIGN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dGVzdC1cXHUwMDNlaXNfd3JpdGUsIGFjY2Vzc19zaXplKTtcXG4rXFx0aWYgKG9uX3N0YWNrIHx8IHRlc3QtXFx1MDAzZWV4cGVjdF9ub19yZXBvcnQpXFxuK1xcdFxcdEFTU0VSVF9ORVEocmV0LCAwLCBcXFwibm8gcmVwb3J0IHNob3VsZCBiZSBnZW5lcmF0ZWRcXFwiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRBU1NFUlRfT0socmV0LCBcXFwicmVwb3J0IHNob3VsZCBiZSBnZW5lcmF0ZWRcXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnVuX3N1YnRlc3Rfd2l0aF9zaXplX2FuZF9sb2NhdGlvbihzdHJ1Y3QgdGVzdF9jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgYWNjZXNzX3NpemUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBib29sIG9uX3N0YWNrKVxcbit7XFxuK1xcdGNoYXIgc3VidGVzdF9uYW1lW1NVQlRFU1RfTkFNRV9NQVhfTEVOXTtcXG4rXFxuK1xcdGlmICh0ZXN0LVxcdTAwM2Vza2lwX211bHRpX3NpemVfdGVzdGluZykge1xcbitcXHRcXHRzbnByaW50ZihzdWJ0ZXN0X25hbWUsIFNVQlRFU1RfTkFNRV9NQVhfTEVOLCBcXFwiJXNcXFwiLFxcbitcXHRcXHRcXHQgdGVzdC1cXHUwMDNlcHJvZ190eXBlKTtcXG4rXFx0XFx0c3RybmNweShjdHgtXFx1MDAzZXByb2dfbmFtZSwgdGVzdC1cXHUwMDNlcHJvZ190eXBlLCBQUk9HX05BTUVfTUFYX0xFTik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHNucHJpbnRmKHN1YnRlc3RfbmFtZSwgU1VCVEVTVF9OQU1FX01BWF9MRU4sIFxcXCIlc18lZF8lc1xcXCIsXFxuK1xcdFxcdFxcdCB0ZXN0LVxcdTAwM2Vwcm9nX3R5cGUsIGFjY2Vzc19zaXplLFxcbitcXHRcXHRcXHQgb25fc3RhY2sgPyBcXFwib25fc3RhY2tcXFwiIDogXFxcIm5vdF9vbl9zdGFja1xcXCIpO1xcbitcXHRcXHRzbnByaW50ZihjdHgtXFx1MDAzZXByb2dfbmFtZSwgUFJPR19OQU1FX01BWF9MRU4sIFxcXCIlc18lc1xcXCIsXFxuK1xcdFxcdFxcdCB0ZXN0LVxcdTAwM2Vwcm9nX3R5cGUsXFxuK1xcdFxcdFxcdCBvbl9zdGFjayA/IFxcXCJvbl9zdGFja1xcXCIgOiBcXFwibm90X29uX3N0YWNrXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghdGVzdF9fc3RhcnRfc3VidGVzdChzdWJ0ZXN0X25hbWUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAodGVzdC1cXHUwMDNlbmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsIFxcdTAwMjZcXHUwMDI2IGN0eC1cXHUwMDNlc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWwpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGV4ZWNfc3VidGVzdChjdHgsIHRlc3QsIGFjY2Vzc19zaXplLCBvbl9zdGFjayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCxcXG4rXFx0XFx0XFx0XFx0ICBpbnQgc2l6ZSlcXG4re1xcbitcXHRydW5fc3VidGVzdF93aXRoX3NpemVfYW5kX2xvY2F0aW9uKGN0eCwgdGVzdCwgc2l6ZSwgZmFsc2UpO1xcbitcXHRpZiAoIXRlc3QtXFx1MDAzZXNraXBfb25fc3RhY2tfdGVzdGluZylcXG4rXFx0XFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplX2FuZF9sb2NhdGlvbihjdHgsIHRlc3QsIHNpemUsIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydW5fc3VidGVzdChzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4re1xcbitcXHRpZiAodGVzdC1cXHUwMDNlc2tpcF9tdWx0aV9zaXplX3Rlc3RpbmcpIHtcXG4rXFx0XFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgdGVzdC1cXHUwMDNlcnVuX3NpemUpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghdGVzdC1cXHUwMDNlb25seV8zMl9vcl82NCkge1xcbitcXHRcXHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCAxKTtcXG4rXFx0XFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgMik7XFxuK1xcdH1cXG4rXFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgNCk7XFxuK1xcdHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShjdHgsIHRlc3QsIDgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydW5fYmxpbmRpbmdfc3VidGVzdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X3NwZWMgYmxpbmRpbmdfc3BlYyA9IHtcXG4rXFx0XFx0LnByb2dfdHlwZSA9IFxcXCJzdF9ibGluZGVkXFxcIixcXG4rXFx0XFx0LmlzX3dyaXRlID0gdHJ1ZSxcXG4rXFx0fTtcXG4rXFx0Y2hhciBicGZfaml0X2hhcmRlbiA9ICcyJztcXG4rXFx0c3RydWN0IGthc2FuX2hhcmRlbiAqc2tlbDtcXG4rXFx0c3RydWN0IHRlc3RfY3R4ICpjdHg7XFxuK1xcbitcXHRpZiAoIXRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInN0X2JsaW5kZWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y3R4ID0gY2FsbG9jKDEsIHNpemVvZigqY3R4KSk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihjdHgsIFxcXCJhbGxvYyBibGluZGluZyBjdHhcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRjdHgtXFx1MDAzZWtsb2dfZmQgPSAtMTtcXG4rXFxuK1xcdGlmIChzZXRfYnBmX2ppdF9oYXJkZW4oXFx1MDAyNmJwZl9qaXRfaGFyZGVuKSlcXG4rXFx0XFx0Z290byBmcmVlX2N0eDtcXG4rXFxuK1xcdHNrZWwgPSBrYXNhbl9oYXJkZW5fX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJvcGVuIGFuZCBsb2FkIGJsaW5kZWQgcHJvZ1xcXCIpKVxcbitcXHRcXHRnb3RvIHJlc3RvcmU7XFxuK1xcbitcXHRjdHgtXFx1MDAzZWtsb2dfZmQgPSBvcGVuX2tlcm5lbF9sb2dzKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX0ZEKGN0eC1cXHUwMDNla2xvZ19mZCwgXFxcIm9wZW4ga2VybmVsIGxvZ3NcXFwiKSlcXG4rXFx0XFx0Z290byBkZXN0cm95O1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VvYmogPSBza2VsLVxcdTAwM2VvYmo7XFxuK1xcdHN0cm5jcHkoY3R4LVxcdTAwM2Vwcm9nX25hbWUsIFxcXCJzdF9ibGluZGVkXFxcIiwgUFJPR19OQU1FX01BWF9MRU4pO1xcbitcXG4rXFx0ZXhlY19zdWJ0ZXN0KGN0eCwgXFx1MDAyNmJsaW5kaW5nX3NwZWMsIDEsIGZhbHNlKTtcXG4rXFxuK2Rlc3Ryb3k6XFxuK1xcdGNsb3NlKGN0eC1cXHUwMDNla2xvZ19mZCk7XFxuK1xcdGthc2FuX2hhcmRlbl9fZGVzdHJveShza2VsKTtcXG4rcmVzdG9yZTpcXG4rXFx0c2V0X2JwZl9qaXRfaGFyZGVuKFxcdTAwMjZicGZfaml0X2hhcmRlbik7XFxuK2ZyZWVfY3R4OlxcbitcXHRmcmVlKGN0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XFxuK1xcdHtcXG4rXFx0XFx0LnByb2dfdHlwZSA9IFxcXCJzdFxcXCIsXFxuK1xcdFxcdC5pc193cml0ZSA9IHRydWVcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQucHJvZ190eXBlID0gXFxcInN0eFxcXCIsXFxuK1xcdFxcdC5pc193cml0ZSA9IHRydWVcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQucHJvZ190eXBlID0gXFxcImxkeFxcXCIsXFxuK1xcdFxcdC5pc193cml0ZSA9IGZhbHNlXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnByb2dfdHlwZSA9IFxcXCJzaW1wbGVfYXRvbWljXFxcIixcXG4rXFx0XFx0LmlzX3dyaXRlID0gZmFsc2UsXFxuK1xcdFxcdC5vbmx5XzMyX29yXzY0ID0gdHJ1ZVxcbitcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5wcm9nX3R5cGUgPSBcXFwibG9hZF9hY3F1aXJlXFxcIixcXG4rXFx0XFx0LmlzX3dyaXRlID0gZmFsc2UsXFxuK1xcdFxcdC5uZWVkc19sb2FkX2FjcV9zdG9yZV9yZWwgPSB0cnVlXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnByb2dfdHlwZSA9IFxcXCJzdG9yZV9yZWxlYXNlXFxcIixcXG4rXFx0XFx0LmlzX3dyaXRlID0gdHJ1ZSxcXG4rXFx0XFx0Lm5lZWRzX2xvYWRfYWNxX3N0b3JlX3JlbCA9IHRydWVcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQucHJvZ190eXBlID0gXFxcImxkeF9wYXRjaGVkXFxcIixcXG4rXFx0XFx0LmlzX3dyaXRlID0gZmFsc2UsXFxuK1xcdFxcdC5za2lwX211bHRpX3NpemVfdGVzdGluZyA9IHRydWUsXFxuK1xcdFxcdC5za2lwX29uX3N0YWNrX3Rlc3RpbmcgPSB0cnVlLFxcbitcXHRcXHQucnVuX3NpemUgPSA0LFxcbitcXHRcXHQucm5kX2hpMzIgPSB0cnVlXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnByb2dfdHlwZSA9IFxcXCJsZHhfcGF0Y2hlZF9vbl9zdGFja1xcXCIsXFxuK1xcdFxcdC5pc193cml0ZSA9IGZhbHNlLFxcbitcXHRcXHQuc2tpcF9tdWx0aV9zaXplX3Rlc3RpbmcgPSB0cnVlLFxcbitcXHRcXHQuc2tpcF9vbl9zdGFja190ZXN0aW5nID0gdHJ1ZSxcXG4rXFx0XFx0LnJ1bl9zaXplID0gNCxcXG4rXFx0XFx0LmV4cGVjdF9ub19yZXBvcnQgPSB0cnVlLFxcbitcXHRcXHQucm5kX2hpMzIgPSB0cnVlXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnByb2dfdHlwZSA9IFxcXCJ2ZXJpZmllcl9wYXRoc19zdGFja19hbmRfbm9uX3N0YWNrXFxcIixcXG4rXFx0XFx0LmlzX3dyaXRlID0gdHJ1ZSxcXG4rXFx0XFx0LnNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nID0gdHJ1ZSxcXG4rXFx0XFx0LnNraXBfb25fc3RhY2tfdGVzdGluZyA9IHRydWUsXFxuK1xcdFxcdC5ydW5fc2l6ZSA9IDFcXG4rXFx0fVxcbit9O1xcbitcXG4rdm9pZCB0ZXN0X2thc2FuKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XFxuK1xcdHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3Q7XFxuK1xcdHN0cnVjdCB0ZXN0X2N0eCAqY3R4O1xcbitcXHRzdHJ1Y3Qga2FzYW4gKnNrZWw7XFxuK1xcdF9fdTMyIGtleSA9IDA7XFxuK1xcdGludCBpLCByZXQ7XFxuK1xcbitcXHRjdHggPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB0ZXN0X2N0eCkpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoY3R4LCBcXFwiYWxsb2MgdGVzdCBjdHhcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFpc19qaXRfZW5hYmxlZCgpIHx8ICFnZXRfa2FzYW5faml0X2VuYWJsZWQoKSkge1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdGdvdG8gZW5kO1xcbitcXHR9XFxuK1xcbitcXHRza2VsID0ga2FzYW5fX29wZW4oKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJvcGVuIHByb2dcXFwiKSlcXG4rXFx0XFx0Z290byBlbmQ7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh0ZXN0cyk7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XFxuK1xcbitcXHRcXHRpZiAoIXRlc3RzW2ldLnJuZF9oaTMyKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShza2VsLVxcdTAwM2VvYmosXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdHRlc3RzW2ldLnByb2dfdHlwZSk7XFxuK1xcdFxcdGlmICghQVNTRVJUX09LX1BUUihwcm9nLCBcXFwiZmluZCBybmRfaGkzMiBwcm9nXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gZGVzdHJveTtcXG4rXFx0XFx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBCUEZfRl9URVNUX1JORF9ISTMyKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0soa2FzYW5fX2xvYWQoc2tlbCksIFxcXCJsb2FkIHByb2dcXFwiKSlcXG4rXFx0XFx0Z290byBkZXN0cm95O1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VvYmogPSBza2VsLVxcdTAwM2VvYmo7XFxuK1xcdGN0eC1cXHUwMDNlYWNjZXNzX3NpemUgPSBcXHUwMDI2c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VhY2Nlc3Nfc2l6ZTtcXG4rXFx0Y3R4LVxcdTAwM2Vza2lwX2xvYWRfYWNxX3N0b3JlX3JlbCA9IHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsX3Rlc3RzO1xcbitcXG4rXFx0Y3R4LVxcdTAwM2VrbG9nX2ZkID0gb3Blbl9rZXJuZWxfbG9ncygpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRChjdHgtXFx1MDAzZWtsb2dfZmQsIFxcXCJvcGVuIGtlcm5lbCBsb2dzXFxcIikpXFxuK1xcdFxcdGdvdG8gZGVzdHJveTtcXG4rXFxuK1xcdC8qIEZpbGwgbWFwIHdpdGggcmVjb2duaXphYmxlIHZhbHVlcyAqL1xcbitcXHRyZXQgPSBicGZfbWFwX19sb29rdXBfZWxlbShza2VsLVxcdTAwM2VtYXBzLnRlc3RfbWFwLCBcXHUwMDI2a2V5LCBzaXplb2Yoa2V5KSxcXG4rXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCksIDApO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJnZXQgbWFwXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xvc2U7XFxuK1xcdHZhbC5kYXRhXzEgPSAweEFBO1xcbitcXHR2YWwuZGF0YV8yID0gMHhCQkJCO1xcbitcXHR2YWwuZGF0YV80ID0gMHhDQ0NDQ0NDQztcXG4rXFx0dmFsLmRhdGFfOCA9IDB4RERERERERERERERERERERDtcXG4rXFx0cmV0ID0gYnBmX21hcF9fdXBkYXRlX2VsZW0oc2tlbC1cXHUwMDNlbWFwcy50ZXN0X21hcCwgXFx1MDAyNmtleSwgc2l6ZW9mKGtleSksXFxuK1xcdFxcdFxcdFxcdCAgIFxcdTAwMjZ2YWwsIHNpemVvZih2YWwpLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwic2V0IG1hcFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsb3NlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpKyspIHtcXG4rXFx0XFx0dGVzdCA9IFxcdTAwMjZ0ZXN0c1tpXTtcXG4rXFx0XFx0cnVuX3N1YnRlc3QoY3R4LCB0ZXN0KTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQmxpbmRpbmcgc3VidGVzdCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGFzIGl0IG5lZWRzIHRoZVxcbitcXHQgKiBjb3JyZXNwb25kaW5nIHByb2dyYW0gdG8gYmUgbG9hZGVkIHdpdGggYnBmX2ppdF9oYXJkZW4gcmFpc2VkXFxuK1xcdCAqL1xcbitcXHRydW5fYmxpbmRpbmdfc3VidGVzdCgpO1xcbitcXG4rY2xvc2U6XFxuK1xcdGNsb3NlKGN0eC1cXHUwMDNla2xvZ19mZCk7XFxuK2Rlc3Ryb3k6XFxuK1xcdGthc2FuX19kZXN0cm95KHNrZWwpO1xcbitlbmQ6XFxuK1xcdGZyZWUoY3R4KTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rYXNhbi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODJkZGNlMzA1OWFlZTFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuLmNcXG5AQCAtMCwwICsxLDM5NCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfbWlzYy5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbitcXG4rZXh0ZXJuIHZvaWQgYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTtcXG4rZXh0ZXJuIHZvaWQgYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZvaWQgKm1lbSwgX191MzIgbWVtX19zeikgX19rc3ltO1xcbitcXG4raW50IGFjY2Vzc19zaXplO1xcbitcXG4rc3RydWN0IGthc2FuX3dyaXRlX3ZhbCB7XFxuK1xcdF9fdTggZGF0YV8xO1xcbitcXHRfX3UxNiBkYXRhXzI7XFxuK1xcdF9fdTMyIGRhdGFfNDtcXG4rXFx0X191NjQgZGF0YV84O1xcbit9O1xcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuK1xcdF9fdHlwZShrZXksIF9fdTMyKTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKTtcXG4rfSB0ZXN0X21hcCBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitTRUMoXFxcInRjeC9pbmdyZXNzXFxcIilcXG4raW50IHN0X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdHZhbC5kYXRhXzEgPSAweEFBO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHR2YWwuZGF0YV8yID0gMHhBQTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgNDpcXG4rXFx0XFx0dmFsLmRhdGFfNCA9IDB4QUE7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDg6XFxuK1xcdFxcdHZhbC5kYXRhXzggPSAweEFBO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwidGN4L2luZ3Jlc3NcXFwiKVxcbitpbnQgc3Rfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XFxuK1xcdF9fdTMyIGtleSA9IDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ0ZXN0X21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0dmFsLVxcdTAwM2VkYXRhXzEgPSAweEFBO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHR2YWwtXFx1MDAzZWRhdGFfMiA9IDB4QUE7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDQ6XFxuK1xcdFxcdHZhbC1cXHUwMDNlZGF0YV80ID0gMHhBQTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgODpcXG4rXFx0XFx0dmFsLVxcdTAwM2VkYXRhXzggPSAweEFBO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCBzdHhfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xcbitcXG4rXFx0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0dmFsLmRhdGFfMSA9IGFjY2Vzc19zaXplO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHR2YWwuZGF0YV8yID0gYWNjZXNzX3NpemU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDQ6XFxuK1xcdFxcdHZhbC5kYXRhXzQgPSBhY2Nlc3Nfc2l6ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgODpcXG4rXFx0XFx0dmFsLmRhdGFfOCA9IGFjY2Vzc19zaXplO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwidGN4L2luZ3Jlc3NcXFwiKVxcbitpbnQgc3R4X25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xcbitcXHRfX3UzMiBrZXkgPSAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2dGVzdF9tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdHZhbC1cXHUwMDNlZGF0YV8xID0gYWNjZXNzX3NpemU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdHZhbC1cXHUwMDNlZGF0YV8yID0gYWNjZXNzX3NpemU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDQ6XFxuK1xcdFxcdHZhbC1cXHUwMDNlZGF0YV80ID0gYWNjZXNzX3NpemU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDg6XFxuK1xcdFxcdHZhbC1cXHUwMDNlZGF0YV84ID0gYWNjZXNzX3NpemU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInRjeC9pbmdyZXNzXFxcIilcXG4raW50IGxkeF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XFxuK1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFxcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcXG4rXFx0Y2FzZSAxOlxcbitcXHRcXHRfX3NpbmsodmFsLmRhdGFfMSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdF9fc2luayh2YWwuZGF0YV8yKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgNDpcXG4rXFx0XFx0X19zaW5rKHZhbC5kYXRhXzQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA4OlxcbitcXHRcXHRfX3NpbmsodmFsLmRhdGFfOCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCBsZHhfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XFxuK1xcdF9fdTMyIGtleSA9IDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ0ZXN0X21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0X19zaW5rKHZhbC1cXHUwMDNlZGF0YV8xKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgMjpcXG4rXFx0XFx0X19zaW5rKHZhbC1cXHUwMDNlZGF0YV8yKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgNDpcXG4rXFx0XFx0X19zaW5rKHZhbC1cXHUwMDNlZGF0YV80KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgODpcXG4rXFx0XFx0X19zaW5rKHZhbC1cXHUwMDNlZGF0YV84KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwidGN4L2luZ3Jlc3NcXFwiKVxcbitpbnQgbGR4X3BhdGNoZWQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcXG4rXFx0X191MzIga2V5ID0gMDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnRlc3RfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdF9fc2luayh2YWwtXFx1MDAzZWRhdGFfNCk7XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCBsZHhfcGF0Y2hlZF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XFxuK1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFxcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdF9fc2luayh2YWwuZGF0YV80KTtcXG4rXFx0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFxcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCBzaW1wbGVfYXRvbWljX29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xcbitcXHRjYXNlIDQ6XFxuK1xcdFxcdF9fc3luY19mZXRjaF9hbmRfYWRkKFxcdTAwMjZ2YWwuZGF0YV80LCA0KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgODpcXG4rXFx0XFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNnZhbC5kYXRhXzgsIDgpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwidGN4L2luZ3Jlc3NcXFwiKVxcbitpbnQgc2ltcGxlX2F0b21pY19ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcXG4rXFx0X191MzIga2V5ID0gMDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnRlc3RfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcXG4rXFx0Y2FzZSA0OlxcbitcXHRcXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcXHUwMDI2dmFsLVxcdTAwM2VkYXRhXzQsIDQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA4OlxcbitcXHRcXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcXHUwMDI2dmFsLVxcdTAwM2VkYXRhXzgsIDgpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rI2lmZGVmIF9fQlBGX0ZFQVRVUkVfTE9BRF9BQ1FfU1RPUkVfUkVMXFxuK2Jvb2wgc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWxfdGVzdHMgU0VDKFxcXCIuZGF0YVxcXCIpID0gMDtcXG4rXFxuK1NFQyhcXFwidGN4L2luZ3Jlc3NcXFwiKVxcbitpbnQgbG9hZF9hY3F1aXJlX29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdF9fYXRvbWljX2xvYWRfbihcXHUwMDI2dmFsLmRhdGFfMSwgX19BVE9NSUNfQUNRVUlSRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdF9fYXRvbWljX2xvYWRfbihcXHUwMDI2dmFsLmRhdGFfMiwgX19BVE9NSUNfQUNRVUlSRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDQ6XFxuK1xcdFxcdF9fYXRvbWljX2xvYWRfbihcXHUwMDI2dmFsLmRhdGFfNCwgX19BVE9NSUNfQUNRVUlSRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDg6XFxuK1xcdFxcdF9fYXRvbWljX2xvYWRfbihcXHUwMDI2dmFsLmRhdGFfOCwgX19BVE9NSUNfQUNRVUlSRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCBsb2FkX2FjcXVpcmVfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XFxuK1xcdF9fdTMyIGtleSA9IDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ0ZXN0X21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0X19hdG9taWNfbG9hZF9uKFxcdTAwMjZ2YWwtXFx1MDAzZWRhdGFfMSwgX19BVE9NSUNfQUNRVUlSRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdF9fYXRvbWljX2xvYWRfbihcXHUwMDI2dmFsLVxcdTAwM2VkYXRhXzIsIF9fQVRPTUlDX0FDUVVJUkUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA0OlxcbitcXHRcXHRfX2F0b21pY19sb2FkX24oXFx1MDAyNnZhbC1cXHUwMDNlZGF0YV80LCBfX0FUT01JQ19BQ1FVSVJFKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgODpcXG4rXFx0XFx0X19hdG9taWNfbG9hZF9uKFxcdTAwMjZ2YWwtXFx1MDAzZWRhdGFfOCwgX19BVE9NSUNfQUNRVUlSRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInRjeC9pbmdyZXNzXFxcIilcXG4raW50IHN0b3JlX3JlbGVhc2Vfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xcbitcXG4rXFx0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0X19hdG9taWNfc3RvcmVfbihcXHUwMDI2dmFsLmRhdGFfMSwgMHhBQSwgX19BVE9NSUNfUkVMRUFTRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdF9fYXRvbWljX3N0b3JlX24oXFx1MDAyNnZhbC5kYXRhXzIsIDB4QkJCQiwgX19BVE9NSUNfUkVMRUFTRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDQ6XFxuK1xcdFxcdF9fYXRvbWljX3N0b3JlX24oXFx1MDAyNnZhbC5kYXRhXzQsIDB4Q0NDQ0NDQ0MsIF9fQVRPTUlDX1JFTEVBU0UpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA4OlxcbitcXHRcXHRfX2F0b21pY19zdG9yZV9uKFxcdTAwMjZ2YWwuZGF0YV84LCAweEREREREREREREREREREREQsXFxuK1xcdFxcdFxcdFxcdCBfX0FUT01JQ19SRUxFQVNFKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFxcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInRjeC9pbmdyZXNzXFxcIilcXG4raW50IHN0b3JlX3JlbGVhc2Vfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XFxuK1xcdF9fdTMyIGtleSA9IDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ0ZXN0X21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0X19hdG9taWNfc3RvcmVfbihcXHUwMDI2dmFsLVxcdTAwM2VkYXRhXzEsIDB4QUEsIF9fQVRPTUlDX1JFTEVBU0UpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRfX2F0b21pY19zdG9yZV9uKFxcdTAwMjZ2YWwtXFx1MDAzZWRhdGFfMiwgMHhCQkJCLCBfX0FUT01JQ19SRUxFQVNFKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgNDpcXG4rXFx0XFx0X19hdG9taWNfc3RvcmVfbihcXHUwMDI2dmFsLVxcdTAwM2VkYXRhXzQsIDB4Q0NDQ0NDQ0MsIF9fQVRPTUlDX1JFTEVBU0UpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA4OlxcbitcXHRcXHRfX2F0b21pY19zdG9yZV9uKFxcdTAwMjZ2YWwtXFx1MDAzZWRhdGFfOCwgMHhERERERERERERERERERERELFxcbitcXHRcXHRcXHRcXHQgX19BVE9NSUNfUkVMRUFTRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuKyNlbHNlXFxuK2Jvb2wgc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWxfdGVzdHMgU0VDKFxcXCIuZGF0YVxcXCIpID0gMTtcXG4rI2VuZGlmXFxuK1xcbitTRUMoXFxcInRjeC9pbmdyZXNzXFxcIilcXG4raW50IHZlcmlmaWVyX3BhdGhzX3N0YWNrX2FuZF9ub25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgc3RhY2tfdmFsID0ge307XFxuK1xcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcXG4rXFx0dm9pZCAqcHRyO1xcbitcXHRfX3UzMiBrZXkgPSAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2dGVzdF9tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoYWNjZXNzX3NpemUpXFxuK1xcdFxcdHB0ciA9IHZhbDtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwdHIgPSBcXHUwMDI2c3RhY2tfdmFsO1xcbitcXG4rXFx0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZigqdmFsKSk7XFxuK1xcdCooX191OCAqKXB0ciA9IDB4QUE7XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZigqdmFsKSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitjaGFyIExJQ0VOU0VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MDhkN2RhNjQ0MjE2Mlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmNcXG5AQCAtMCwwICsxLDQxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rXFxuK2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07XFxuK2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTtcXG4rXFxuK3N0cnVjdCBrYXNhbl93cml0ZV92YWwge1xcbitcXHRfX3U4IGRhdGFfMTtcXG4rXFx0X191MTYgZGF0YV8yO1xcbitcXHRfX3UzMiBkYXRhXzQ7XFxuK1xcdF9fdTY0IGRhdGFfODtcXG4rfTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbitcXHRfX3R5cGUoa2V5LCBfX3UzMik7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGthc2FuX3dyaXRlX3ZhbCk7XFxuK30gdGVzdF9tYXAgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCBzdF9ibGluZGVkKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XFxuK1xcdF9fdTMyIGtleSA9IDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ0ZXN0X21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHR2YWwtXFx1MDAzZWRhdGFfMSA9IDB4QUE7XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBMSUNFTlNFW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG5pbmRleCAzMGYxY2QyMzA5M2NiZS4uNWQ2YTgzNGY3ZDc1NzUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG5AQCAtMjcxLDYgKzI3MSwyNiBAQCBfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19wdXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KHN0cnVjdCBwcm9nX3Rlc3RfbWVtYmVyXFxuIFxcdCAqL1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0JQRl9KSVRfS0FTQU5cXG4rXFxuK2V4dGVybiB2b2lkIGthc2FuX3BvaXNvbihjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwgdTggdmFsdWUsIGJvb2wgaW5pdCk7XFxuK1xcbisjZGVmaW5lIEtBU0FOX1NMQUJfRlJFRSAweEZCXFxuK1xcbitfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCB1MzIgbWVtX19zeilcXG4re1xcbitcXHRrYXNhbl9wb2lzb24obWVtLCBtZW1fX3N6LCBLQVNBTl9TTEFCX0ZSRUUsIGZhbHNlKTtcXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odm9pZCAqbWVtLCB1MzIgbWVtX19zeilcXG4re1xcbitcXHRrYXNhbl9wb2lzb24obWVtLCBtZW1fX3N6LCAweDAwLCBmYWxzZSk7XFxuK31cXG4rI2Vsc2VcXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opIHsgfVxcbitfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIHUzMiBtZW1fX3N6KSB7IH1cXG4rI2VuZGlmXFxuK1xcbiBfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfY3R4ICpcXG4gYnBmX3Rlc3Rtb2RfY3R4X2NyZWF0ZShpbnQgKmVycilcXG4ge1xcbkBAIC03NDAsNiArNzYwLDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzEpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2thc2FuX3BvaXNvbilcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbilcXG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcXG4gXFxuIEJURl9JRF9MSVNUKGJwZl90ZXN0bW9kX2R0b3JfaWRzKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcXG5pbmRleCBjOTcwZTc3OTNkZmNiYy4uNzM3ZjY2OGIzNWUyM2IgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXFxuQEAgLTUxOSw2ICs1MTksMzggQEAgYm9vbCBpc19qaXRfZW5hYmxlZCh2b2lkKVxcbiBcXHRyZXR1cm4gZW5hYmxlZDtcXG4gfVxcbiBcXG4raW50IHNldF9icGZfaml0X2hhcmRlbihjaGFyICpsZXZlbClcXG4re1xcbitcXHRjaGFyIG9sZF9sZXZlbDtcXG4rXFx0aW50IGVyciA9IC0xO1xcbitcXHRpbnQgZmQgPSAtMTtcXG4rXFxuK1xcdGZkID0gb3BlbihcXFwiL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuXFxcIiwgT19SRFdSIHwgT19OT05CTE9DSyk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGVyciA9IHJlYWQoZmQsIFxcdTAwMjZvbGRfbGV2ZWwsIDEpO1xcbitcXHRpZiAoZXJyICE9IDEpIHtcXG4rXFx0XFx0ZXJyID0gLTE7XFxuK1xcdFxcdGdvdG8gZW5kO1xcbitcXHR9XFxuK1xcbitcXHRsc2VlayhmZCwgMCwgU0VFS19TRVQpO1xcbitcXG4rXFx0ZXJyID0gd3JpdGUoZmQsIGxldmVsLCAxKTtcXG4rXFx0aWYgKGVyciAhPSAxKSB7XFxuK1xcdFxcdGVyciA9IC0xO1xcbitcXHRcXHRnb3RvIGVuZDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gMDtcXG4rXFx0KmxldmVsID0gb2xkX2xldmVsO1xcbitlbmQ6XFxuK1xcdGlmIChmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuIGludCBzdGFja19tcHJvdGVjdCh2b2lkKVxcbiB7XFxuIFxcdHZvaWQgKmJ1ZjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oXFxuaW5kZXggMmVkYzZmYjdmYzUyMTIuLmUwMDY0MmFmZTg2ZjQwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaFxcbkBAIC01OSw2ICs1OSw3IEBAIHN0cnVjdCBicGZfaW5zbjtcXG4gaW50IGdldF94bGF0ZWRfcHJvZ3JhbShpbnQgZmRfcHJvZywgc3RydWN0IGJwZl9pbnNuICoqYnVmLCBfX3UzMiAqY250KTtcXG4gaW50IHRlc3RpbmdfcHJvZ19mbGFncyh2b2lkKTtcXG4gYm9vbCBpc19qaXRfZW5hYmxlZCh2b2lkKTtcXG4raW50IHNldF9icGZfaml0X2hhcmRlbihjaGFyICpsZXZlbCk7XFxuIGludCBzdGFja19tcHJvdGVjdCh2b2lkKTtcXG4gXFxuICNlbmRpZiAvKiBfX1RFU1RJTkdfSEVMUEVSU19IICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmNcXG5pbmRleCBmOTk3ZDdlYzhmZDA4Ni4uMTEyMDFiNjVhM2Q0YjUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuY1xcbkBAIC0xNDIsMyArMTQyLDggQEAgYm9vbCBnZXRfdW5wcml2X2Rpc2FibGVkKHZvaWQpXFxuIFxcdH1cXG4gXFx0cmV0dXJuIG1pdGlnYXRpb25zX29mZjtcXG4gfVxcbitcXG4rYm9vbCBnZXRfa2FzYW5faml0X2VuYWJsZWQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gY29uZmlnX2NvbnRhaW5zKFxcXCJDT05GSUdfQlBGX0pJVF9LQVNBTj15XFxcIikgPT0gMTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oXFxuaW5kZXggMTUxZjY3MzI5NjY1MjIuLmJjNWY0Yzk1M2M5ZDZmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmhcXG5AQCAtNSwzICs1LDQgQEBcXG4gI2RlZmluZSBVTlBSSVZfU1lTQ1RMIFxcXCJrZXJuZWwvdW5wcml2aWxlZ2VkX2JwZl9kaXNhYmxlZFxcXCJcXG4gXFxuIGJvb2wgZ2V0X3VucHJpdl9kaXNhYmxlZCh2b2lkKTtcXG4rYm9vbCBnZXRfa2FzYW5faml0X2VuYWJsZWQodm9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIwOjE0OjE5LjAzNzg1ODMxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxNjIwMjc0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVF9LQVNBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9kb19taXNjX2ZpeHVwc1wiLFxuICAgIFwiY2hlY2tfbWVtX2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgS0FTQU4gc3VwcG9ydCB0byB0aGUgQlBGIEpJVCBjb21waWxlciBvbiB4ODZfNjQsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWQ2ZGRmOTcwNmE4NjliYzZkMjU1ZTFjN2QwYWU2ZmJhZGI3OTliOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMjA6MTQ6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggYmRhZDkwZjIxMGU0YmYuLjcwNWE5YWI4NWYzYTk1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvS2NvbmZpZ1xuKysrIGIvYXJjaC94ODYvS2NvbmZpZ1xuQEAgLTIzMyw2ICsyMzMsNyBAQCBjb25maWcgWDg2XG4gXHRzZWxlY3QgSEFWRV9TQU1QTEVfRlRSQUNFX0RJUkVDVFx0aWYgWDg2XzY0XG4gXHRzZWxlY3QgSEFWRV9TQU1QTEVfRlRSQUNFX0RJUkVDVF9NVUxUSVx0aWYgWDg2XzY0XG4gXHRzZWxlY3QgSEFWRV9FQlBGX0pJVFxuK1x0c2VsZWN0IEhBVkVfRUJQRl9KSVRfS0FTQU5cdFx0aWYgWDg2XzY0XG4gXHRzZWxlY3QgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xuIFx0c2VsZWN0IEhBVkVfRUlTQVx0XHRcdGlmIFg4Nl8zMlxuIFx0c2VsZWN0IEhBVkVfRVhJVF9USFJFQURcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGRlNzUxNWVhMWJlYWU4Li42NWEwMGU4NDc5OWNkMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMjEsNiArMjEsMTcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdW53aW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2ZpLmhcdTAwM2VcbiBcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX0pJVF9LQVNBTilcbit2b2lkIF9fYXNhbl9sb2FkMSh2b2lkICpwKTtcbit2b2lkIF9fYXNhbl9zdG9yZTEodm9pZCAqcCk7XG4rdm9pZCBfX2FzYW5fbG9hZDIodm9pZCAqcCk7XG4rdm9pZCBfX2FzYW5fc3RvcmUyKHZvaWQgKnApO1xuK3ZvaWQgX19hc2FuX2xvYWQ0KHZvaWQgKnApO1xuK3ZvaWQgX19hc2FuX3N0b3JlNCh2b2lkICpwKTtcbit2b2lkIF9fYXNhbl9sb2FkOCh2b2lkICpwKTtcbit2b2lkIF9fYXNhbl9zdG9yZTgodm9pZCAqcCk7XG4rI2VuZGlmXG4rXG4gc3RhdGljIGJvb2wgYWxsX2NhbGxlZV9yZWdzX3VzZWRbNF0gPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX07XG4gXG4gc3RhdGljIHU4ICplbWl0X2NvZGUodTggKnB0ciwgdTMyIGJ5dGVzLCB1bnNpZ25lZCBpbnQgbGVuKVxuQEAgLTExMTAsNiArMTEyMSw5MCBAQCBzdGF0aWMgdm9pZCBtYXliZV9lbWl0XzFtb2QodTggKipwcHJvZywgdTMyIHJlZywgYm9vbCBpczY0KVxuIFx0KnBwcm9nID0gcHJvZztcbiB9XG4gXG4rc3RhdGljIGludCBlbWl0X2thc2FuX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHU4ICoqcHByb2csXG4rXHRcdFx0ICAgIHUzMiBhZGRyX3JlZywgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqaXAsXG4rXHRcdFx0ICAgIGJvb2wgaXNfd3JpdGUsIGJvb2wgYWNjZXNzZXNfc3RhY2tfb25seSlcbit7XG4rI2lmZGVmIENPTkZJR19CUEZfSklUX0tBU0FOXG4rXHR1MzIgYnBmX3NpemUgPSBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpO1xuK1x0czMyIG9mZiA9IGluc24tXHUwMDNlb2ZmO1xuK1x0dTggKnByb2cgPSAqcHByb2c7XG4rXHR2b2lkICprYXNhbl9mdW5jO1xuK1xuK1x0aWYgKCFlbnYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKGFjY2Vzc2VzX3N0YWNrX29ubHkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogRGVyaXZlIEtBU0FOIGNoZWNrIGZ1bmN0aW9uIGZyb20gYWNjZXNzIHR5cGUgYW5kIHNpemUgKi9cbitcdHN3aXRjaCAoYnBmX3NpemUpIHtcbitcdGNhc2UgQlBGX0I6XG4rXHRcdGthc2FuX2Z1bmMgPSBpc193cml0ZSA/IF9fYXNhbl9zdG9yZTEgOiBfX2FzYW5fbG9hZDE7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfSDpcbitcdFx0a2FzYW5fZnVuYyA9IGlzX3dyaXRlID8gX19hc2FuX3N0b3JlMiA6IF9fYXNhbl9sb2FkMjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9XOlxuK1x0XHRrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmU0IDogX19hc2FuX2xvYWQ0O1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0RXOlxuK1x0XHRrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmU4IDogX19hc2FuX2xvYWQ4O1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LyogU2F2ZSByYXggKi9cbitcdEVNSVQxKDB4NTApO1xuK1x0LyogU2F2ZSByY3ggKi9cbitcdEVNSVQxKDB4NTEpO1xuK1x0LyogU2F2ZSByZHggKi9cbitcdEVNSVQxKDB4NTIpO1xuK1x0LyogU2F2ZSByc2kgKi9cbitcdEVNSVQxKDB4NTYpO1xuK1x0LyogU2F2ZSByZGkgKi9cbitcdEVNSVQxKDB4NTcpO1xuK1x0LyogU2F2ZSByOCAqL1xuK1x0RU1JVDIoMHg0MSwgMHg1MCk7XG4rXHQvKiBTYXZlIHI5ICovXG4rXHRFTUlUMigweDQxLCAweDUxKTtcbitcbitcdC8qIG1vdiByZGksIGFkZHJfcmVnICovXG4rXHRFTUlUX21vdihCUEZfUkVHXzEsIGFkZHJfcmVnKTtcbitcbitcdC8qIGFkZCByZGksIG9mZiAoaWYgb2Zmc2V0IGlzIG5vbi16ZXJvKSAqL1xuK1x0aWYgKG9mZikge1xuK1x0XHRpZiAoaXNfaW1tOChvZmYpKSB7XG4rXHRcdFx0LyogYWRkIHJkaSwgaW1tOCAqL1xuK1x0XHRcdEVNSVQ0KDB4NDgsIDB4ODMsIDB4QzcsICh1OClvZmYpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdC8qIGFkZCByZGksIGltbTMyICovXG4rXHRcdFx0RU1JVDNfb2ZmMzIoMHg0OCwgMHg4MSwgMHhDNywgb2ZmKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogQWRqdXN0IGlwIHRvIGFjY291bnQgZm9yIHRoZSBpbnN0cnVtZW50YXRpb24gZ2VuZXJhdGVkIHNvIGZhciAqL1xuK1x0aXAgKz0gKHByb2cgLSAqcHByb2cpO1xuK1x0LyogV2UgZW1pdCBhIGNhbGwsIHNvIHVwZGF0ZSBjYWxsIGRlcHRoIGNvdW50aW5nICovXG4rXHRpcCArPSB4ODZfY2FsbF9kZXB0aF9lbWl0X2FjY291bnRpbmcoXHUwMDI2cHJvZywga2FzYW5fZnVuYywgaXApO1xuK1x0LyogY2FsbCBrYXNhbl9mdW5jICovXG4rXHRpZiAoZW1pdF9jYWxsKFx1MDAyNnByb2csIGthc2FuX2Z1bmMsIGlwKSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRFTUlUMigweDQxLCAweDU5KTtcbitcdEVNSVQyKDB4NDEsIDB4NTgpO1xuK1x0RU1JVDEoMHg1Rik7XG4rXHRFTUlUMSgweDVFKTtcbitcdEVNSVQxKDB4NUEpO1xuK1x0RU1JVDEoMHg1OSk7XG4rXHRFTUlUMSgweDU4KTtcbitcbitcdCpwcHJvZyA9IHByb2c7XG4rI2VuZGlmIC8qIENPTkZJR19CUEZfSklUX0tBU0FOICovXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogTERYOiBkc3RfcmVnID0gKih1OCopKHNyY19yZWcgKyBvZmYpICovXG4gc3RhdGljIHZvaWQgZW1pdF9sZHgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZywgaW50IG9mZilcbiB7XG5AQCAtMTMxNSw2ICsxNDEwLDY0IEBAIHN0YXRpYyB2b2lkIGVtaXRfc3RfaW5kZXgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgaW5kZXhfcmVnLCBpbnRcbiBcdCpwcHJvZyA9IHByb2c7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGVtaXRfc3QodTggKipwcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZyxcbitcdFx0ICAgIHMzMiBvdXRnb2luZ19hcmdfYmFzZSwgdTE2IG91dGdvaW5nX3JzcClcbit7XG4rXHRzMzIgaW1tMzIgPSBpbnNuLVx1MDAzZWltbTtcbitcdHU4ICpwcm9nID0gKnBwcm9nO1xuK1x0czMyIGluc25fb2ZmO1xuK1xuK1x0c3dpdGNoIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKSB7XG4rXHRjYXNlIEJQRl9COlxuK1x0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcbitcdFx0XHRFTUlUMigweDQxLCAweEM2KTtcbitcdFx0ZWxzZVxuK1x0XHRcdEVNSVQxKDB4QzYpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0g6XG4rXHRcdGlmIChpc19lcmVnKGRzdF9yZWcpKVxuK1x0XHRcdEVNSVQzKDB4NjYsIDB4NDEsIDB4QzcpO1xuK1x0XHRlbHNlXG4rXHRcdFx0RU1JVDIoMHg2NiwgMHhDNyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfVzpcbitcdFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXG4rXHRcdFx0RU1JVDIoMHg0MSwgMHhDNyk7XG4rXHRcdGVsc2VcbitcdFx0XHRFTUlUMSgweEM3KTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9EVzpcbitcdFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmID09IC04KSB7XG4rXHRcdFx0LyogQXJnIDY6IHN0b3JlIGltbWVkaWF0ZSBpbiByOSByZWdpc3RlciAqL1xuK1x0XHRcdGVtaXRfbW92X2ltbTY0KFx1MDAyNnByb2csIFg4Nl9SRUdfUjksIGltbTMyIFx1MDAzZVx1MDAzZSAzMSxcbitcdFx0XHRcdCAgICAgICAodTMyKWltbTMyKTtcbitcdFx0XHQqcHByb2cgPSBwcm9nO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHhDNyk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbitcdGlmIChkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEFyZ3MgNys6IHJldmVyc2UgQlBGIG5lZ2F0aXZlIG9mZnNldHMgdG9cbitcdFx0ICogeDg2IHBvc2l0aXZlIHJzcCBvZmZzZXRzLlxuK1x0XHQgKiBCUEYgb2ZmPS0xNiDihpIgW3JzcCswXSwgb2ZmPS0yNCDihpIgW3JzcCs4XSwgLi4uXG4rXHRcdCAqL1xuK1x0XHRpbnNuX29mZiA9IG91dGdvaW5nX2FyZ19iYXNlIC0gb3V0Z29pbmdfcnNwIC1cbitcdFx0XHRpbnNuX29mZiAtIDE2O1xuK1x0XHRkc3RfcmVnID0gQlBGX1JFR19GUDtcbitcdH1cbitcdGlmIChpc19pbW04KGluc25fb2ZmKSlcbitcdFx0RU1JVDIoYWRkXzFyZWcoMHg0MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcbitcdGVsc2VcbitcdFx0RU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHg4MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcbitcbitcdEVNSVQoaW1tMzIsIGJwZl9zaXplX3RvX3g4Nl9ieXRlcyhCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKSk7XG4rXHQqcHByb2cgPSBwcm9nO1xuK31cbitcbiBzdGF0aWMgdm9pZCBlbWl0X3N0X3IxMih1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIGludCBvZmYsIGludCBpbW0pXG4ge1xuIFx0ZW1pdF9zdF9pbmRleChwcHJvZywgc2l6ZSwgZHN0X3JlZywgWDg2X1JFR19SMTIsIG9mZiwgaW1tKTtcbkBAIC0xNDIzLDE3ICsxNTc2LDMxIEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfcm13X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3QodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIGRzdF9yZWcsXG4tXHRcdFx0ICAgICB1MzIgc3JjX3JlZywgczE2IG9mZiwgdTggYnBmX3NpemUpXG4rc3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCAqKnBwcm9nLFxuK1x0XHRcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqaXAsIHUzMiBkc3RfcmVnLFxuK1x0XHRcdCAgICAgdTMyIHNyY19yZWcsIGJvb2wgYWNjZXNzZXNfc3RhY2tfb25seSlcbiB7XG4rXHR1MzIgYXRvbWljX29wID0gaW5zbi1cdTAwM2VpbW07XG4rXHRpbnQgZXJyO1xuK1xuIFx0c3dpdGNoIChhdG9taWNfb3ApIHtcbiBcdGNhc2UgQlBGX0xPQURfQUNROlxuK1x0XHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgcHByb2csIHNyY19yZWcsIGluc24sIGlwLCBmYWxzZSxcbitcdFx0XHRcdCAgICAgICBhY2Nlc3Nlc19zdGFja19vbmx5KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHQvKiBkc3RfcmVnID0gc21wX2xvYWRfYWNxdWlyZShzcmNfcmVnICsgb2ZmMTYpICovXG4tXHRcdGVtaXRfbGR4KHBwcm9nLCBicGZfc2l6ZSwgZHN0X3JlZywgc3JjX3JlZywgb2ZmKTtcbitcdFx0ZW1pdF9sZHgocHByb2csIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksIGRzdF9yZWcsIHNyY19yZWcsXG4rXHRcdFx0IGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9TVE9SRV9SRUw6XG4rXHRcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBwcHJvZywgZHN0X3JlZywgaW5zbiwgaXAsIHRydWUsXG4rXHRcdFx0XHQgICAgICAgYWNjZXNzZXNfc3RhY2tfb25seSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0Lyogc21wX3N0b3JlX3JlbGVhc2UoZHN0X3JlZyArIG9mZjE2LCBzcmNfcmVnKSAqL1xuLVx0XHRlbWl0X3N0eChwcHJvZywgYnBmX3NpemUsIGRzdF9yZWcsIHNyY19yZWcsIG9mZik7XG4rXHRcdGVtaXRfc3R4KHBwcm9nLCBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLFxuK1x0XHRcdCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cHJfZXJyKFwiYnBmX2ppdDogdW5rbm93biBhdG9taWMgbG9hZC9zdG9yZSBvcGNvZGUgJTAyeFxcblwiLFxuQEAgLTE4MTEsMTAgKzE5NzgsMTIgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICpcbiBcdFx0Y29uc3QgczMyIGltbTMyID0gaW5zbi1cdTAwM2VpbW07XG4gXHRcdHUzMiBkc3RfcmVnID0gaW5zbi1cdTAwM2Vkc3RfcmVnO1xuIFx0XHR1MzIgc3JjX3JlZyA9IGluc24tXHUwMDNlc3JjX3JlZztcbitcdFx0Ym9vbCBhY2Nlc3Nlc19zdGFja19vbmx5O1xuIFx0XHR1OCBiMiA9IDAsIGIzID0gMDtcbiBcdFx0dTggKnN0YXJ0X29mX2xkeDtcbiBcdFx0czY0IGptcF9vZmZzZXQ7XG4gXHRcdHMzMiBpbnNuX29mZjtcbitcdFx0aW50IGluc25faWR4O1xuIFx0XHR1OCBqbXBfY29uZDtcbiBcdFx0dTggKmZ1bmM7XG4gXHRcdGludCBub3BzO1xuQEAgLTE4MzEsNiArMjAwMCwxMCBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKlxuIFx0XHRcdEVNSVRfRU5EQlIoKTtcbiBcbiBcdFx0aXAgPSBpbWFnZSArIGFkZHJzW2kgLSAxXSArIChwcm9nIC0gdGVtcCk7XG4rXHRcdGluc25faWR4ID0gaSAtIDEgKyBicGZfcHJvZy1cdTAwM2VhdXgtXHUwMDNlc3VicHJvZ19zdGFydDtcbitcdFx0YWNjZXNzZXNfc3RhY2tfb25seSA9XG4rXHRcdFx0ZW52ID8gIWVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc3RhY2tfYWNjZXNzIDpcbitcdFx0XHQgICAgICBmYWxzZTtcbiBcbiBcdFx0c3dpdGNoIChpbnNuLVx1MDAzZWNvZGUpIHtcbiBcdFx0XHQvKiBBTFUgKi9cbkBAIC0yMjA3LDQ5ICsyMzgwLDE3IEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqXG4gXHRcdFx0RU1JVF9MRkVOQ0UoKTtcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0XHQvKiBTVDogKih1OCopKGRzdF9yZWcgKyBvZmYpID0gaW1tICovXG4gXHRcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9COlxuLVx0XHRcdGlmIChpc19lcmVnKGRzdF9yZWcpKVxuLVx0XHRcdFx0RU1JVDIoMHg0MSwgMHhDNik7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0RU1JVDEoMHhDNik7XG4tXHRcdFx0Z290byBzdDtcbiBcdFx0Y2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX0g6XG4tXHRcdFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXG4tXHRcdFx0XHRFTUlUMygweDY2LCAweDQxLCAweEM3KTtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRFTUlUMigweDY2LCAweEM3KTtcbi1cdFx0XHRnb3RvIHN0O1xuIFx0XHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfVzpcbi1cdFx0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcbi1cdFx0XHRcdEVNSVQyKDB4NDEsIDB4QzcpO1xuLVx0XHRcdGVsc2Vcbi1cdFx0XHRcdEVNSVQxKDB4QzcpO1xuLVx0XHRcdGdvdG8gc3Q7XG4gXHRcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9EVzpcbi1cdFx0XHRpZiAoZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUyBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gLTgpIHtcbi1cdFx0XHRcdC8qIEFyZyA2OiBzdG9yZSBpbW1lZGlhdGUgaW4gcjkgcmVnaXN0ZXIgKi9cbi1cdFx0XHRcdGVtaXRfbW92X2ltbTY0KFx1MDAyNnByb2csIFg4Nl9SRUdfUjksIGltbTMyIFx1MDAzZVx1MDAzZSAzMSwgKHUzMilpbW0zMik7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXHRcdFx0RU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4QzcpO1xuLVxuLXN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4tXHRcdFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMpIHtcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBBcmdzIDcrOiByZXZlcnNlIEJQRiBuZWdhdGl2ZSBvZmZzZXRzIHRvXG4tXHRcdFx0XHQgKiB4ODYgcG9zaXRpdmUgcnNwIG9mZnNldHMuXG4tXHRcdFx0XHQgKiBCUEYgb2ZmPS0xNiDihpIgW3JzcCswXSwgb2ZmPS0yNCDihpIgW3JzcCs4XSwgLi4uXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdGluc25fb2ZmID0gb3V0Z29pbmdfYXJnX2Jhc2UgLSBvdXRnb2luZ19yc3AgLSBpbnNuX29mZiAtIDE2O1xuLVx0XHRcdFx0ZHN0X3JlZyA9IEJQRl9SRUdfRlA7XG4tXHRcdFx0fVxuLVx0XHRcdGlmIChpc19pbW04KGluc25fb2ZmKSlcbi1cdFx0XHRcdEVNSVQyKGFkZF8xcmVnKDB4NDAsIGRzdF9yZWcpLCBpbnNuX29mZik7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0RU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHg4MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcbitcdFx0XHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXHUwMDI2cHJvZywgZHN0X3JlZywgaW5zbiwgaXAsXG4rXHRcdFx0XHRcdCAgICAgICB0cnVlLCBhY2Nlc3Nlc19zdGFja19vbmx5KTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcbi1cdFx0XHRFTUlUKGltbTMyLCBicGZfc2l6ZV90b194ODZfYnl0ZXMoQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSkpO1xuK1x0XHRcdGVtaXRfc3QoXHUwMDI2cHJvZywgaW5zbiwgZHN0X3JlZywgb3V0Z29pbmdfYXJnX2Jhc2UsXG4rXHRcdFx0XHRvdXRnb2luZ19yc3ApO1xuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRcdC8qIFNUWDogKih1OCopKGRzdF9yZWcgKyBvZmYpID0gc3JjX3JlZyAqL1xuQEAgLTIyNjcsNiArMjQwOCwxMCBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0aW5zbl9vZmYgPSBvdXRnb2luZ19hcmdfYmFzZSAtIG91dGdvaW5nX3JzcCAtIGluc25fb2ZmIC0gMTY7XG4gXHRcdFx0XHRkc3RfcmVnID0gQlBGX1JFR19GUDtcbiBcdFx0XHR9XG4rXHRcdFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIFx1MDAyNnByb2csIGRzdF9yZWcsIGluc24sIGlwLFxuK1x0XHRcdFx0XHQgICAgICAgdHJ1ZSwgYWNjZXNzZXNfc3RhY2tfb25seSk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0ZW1pdF9zdHgoXHUwMDI2cHJvZywgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSwgZHN0X3JlZywgc3JjX3JlZywgaW5zbl9vZmYpO1xuIFx0XHRcdGJyZWFrO1xuIFxuQEAgLTI0MjgsNiArMjU3MywxMiBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0LyogcG9wdWxhdGUgam1wX29mZnNldCBmb3IgSkFFIGFib3ZlIHRvIGp1bXAgdG8gc3RhcnRfb2ZfbGR4ICovXG4gXHRcdFx0XHRzdGFydF9vZl9sZHggPSBwcm9nO1xuIFx0XHRcdFx0ZW5kX29mX2ptcFstMV0gPSBzdGFydF9vZl9sZHggLSBlbmRfb2Zfam1wO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXHUwMDI2cHJvZywgc3JjX3JlZyxcbitcdFx0XHRcdFx0XHQgICAgICAgaW5zbiwgaXAsIGZhbHNlLFxuK1x0XHRcdFx0XHRcdCAgICAgICBhY2Nlc3Nlc19zdGFja19vbmx5KTtcbitcdFx0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU1TWCB8fFxuIFx0XHRcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU1TWClcbkBAIC0yNDg5LDE1ICsyNjQwLDE2IEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0fVxuIFx0XHRcdGZhbGx0aHJvdWdoO1xuIFx0XHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1c6XG4tXHRcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6XG4tXHRcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IChCUEZfQU5EIHwgQlBGX0ZFVENIKSB8fFxuLVx0XHRcdCAgICBpbnNuLVx1MDAzZWltbSA9PSAoQlBGX09SIHwgQlBGX0ZFVENIKSB8fFxuLVx0XHRcdCAgICBpbnNuLVx1MDAzZWltbSA9PSAoQlBGX1hPUiB8IEJQRl9GRVRDSCkpIHtcbi1cdFx0XHRcdGJvb2wgaXM2NCA9IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0RXO1xuLVx0XHRcdFx0dTMyIHJlYWxfc3JjX3JlZyA9IHNyY19yZWc7XG4tXHRcdFx0XHR1MzIgcmVhbF9kc3RfcmVnID0gZHN0X3JlZztcbi1cdFx0XHRcdHU4ICpicmFuY2hfdGFyZ2V0O1xuLVxuK1x0XHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOiB7XG4rXHRcdFx0Ym9vbCBpczY0ID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFc7XG4rXHRcdFx0dTMyIHJlYWxfc3JjX3JlZyA9IHNyY19yZWc7XG4rXHRcdFx0dTMyIHJlYWxfZHN0X3JlZyA9IGRzdF9yZWc7XG4rXHRcdFx0dTggKmJyYW5jaF90YXJnZXQ7XG4rXHRcdFx0Ym9vbCBpc19hdG9taWNfZmV0Y2ggPVxuK1x0XHRcdFx0KGluc24tXHUwMDNlaW1tID09IChCUEZfQU5EIHwgQlBGX0ZFVENIKSB8fFxuK1x0XHRcdFx0IGluc24tXHUwMDNlaW1tID09IChCUEZfT1IgfCBCUEZfRkVUQ0gpIHx8XG4rXHRcdFx0XHQgaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9YT1IgfCBCUEZfRkVUQ0gpKTtcbitcdFx0XHRpZiAoaXNfYXRvbWljX2ZldGNoKSB7XG4gXHRcdFx0XHQvKlxuIFx0XHRcdFx0ICogQ2FuJ3QgYmUgaW1wbGVtZW50ZWQgd2l0aCBhIHNpbmdsZSB4ODYgaW5zbi5cbiBcdFx0XHRcdCAqIE5lZWQgdG8gZG8gYSBDTVBYQ0hHIGxvb3AuXG5AQCAtMjUxMCw3ICsyNjYyLDE3IEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0XHRpZiAoZHN0X3JlZyA9PSBCUEZfUkVHXzApXG4gXHRcdFx0XHRcdHJlYWxfZHN0X3JlZyA9IEJQRl9SRUdfQVg7XG4gXG4rXHRcdFx0XHRpcCArPSAzO1xuK1x0XHRcdH1cbitcdFx0XHRpZiAoIWJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSkge1xuK1x0XHRcdFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIFx1MDAyNnByb2csIHJlYWxfZHN0X3JlZyxcbitcdFx0XHRcdFx0XHQgICAgICAgaW5zbiwgaXAsIGZhbHNlLFxuK1x0XHRcdFx0XHRcdCAgICAgICBhY2Nlc3Nlc19zdGFja19vbmx5KTtcbitcdFx0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0XHRicmFuY2hfdGFyZ2V0ID0gcHJvZztcbitcdFx0XHR9XG4rXHRcdFx0aWYgKGlzX2F0b21pY19mZXRjaCkge1xuIFx0XHRcdFx0LyogTG9hZCBvbGQgdmFsdWUgKi9cbiBcdFx0XHRcdGVtaXRfbGR4KFx1MDAyNnByb2csIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksXG4gXHRcdFx0XHRcdCBCUEZfUkVHXzAsIHJlYWxfZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuQEAgLTI1NDIsMTUgKzI3MDQsMTYgQEAgc3Q6XHRcdFx0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbiBcdFx0XHR9XG4gXG4gXHRcdFx0aWYgKGJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSlcbi1cdFx0XHRcdGVyciA9IGVtaXRfYXRvbWljX2xkX3N0KFx1MDAyNnByb2csIGluc24tXHUwMDNlaW1tLCBkc3RfcmVnLCBzcmNfcmVnLFxuLVx0XHRcdFx0XHRcdFx0aW5zbi1cdTAwM2VvZmYsIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpO1xuK1x0XHRcdFx0ZXJyID0gZW1pdF9hdG9taWNfbGRfc3QoZW52LCBcdTAwMjZwcm9nLCBpbnNuLCBpcCxcbitcdFx0XHRcdFx0XHRcdGRzdF9yZWcsIHNyY19yZWcsXG4rXHRcdFx0XHRcdFx0XHRhY2Nlc3Nlc19zdGFja19vbmx5KTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRlcnIgPSBlbWl0X2F0b21pY19ybXcoXHUwMDI2cHJvZywgaW5zbi1cdTAwM2VpbW0sIGRzdF9yZWcsIHNyY19yZWcsXG4gXHRcdFx0XHRcdFx0ICAgICAgaW5zbi1cdTAwM2VvZmYsIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdGJyZWFrO1xuLVxuK1x0XHR9XG4gXHRcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfQjpcbiBcdFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9IOlxuIFx0XHRcdGlmICghYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDc2YjhiNzYyN2ExMDg1Li44NjgxMDFlZjUwMDJhYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC03MjMsNiArNzIzLDggQEAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhIHtcbiBcdHUxNiBjb25zdF9yZWdfbWFwX21hc2s7XG4gXHR1MTYgY29uc3RfcmVnX3N1YnByb2dfbWFzaztcbiBcdHUzMiBjb25zdF9yZWdfdmFsc1sxMF07XG4rXHQvKiBpbnN0cnVjdGlvbiBjYW4gYWNjZXNzIG5vbi1zdGFjayBtZW1vcnkgKi9cbitcdGJvb2wgbm9uX3N0YWNrX2FjY2VzcztcbiB9O1xuIFxuICNkZWZpbmUgTUFYX1VTRURfTUFQUyA2NCAvKiBtYXggbnVtYmVyIG9mIG1hcHMgYWNjZXNzZWQgYnkgb25lIGVCUEYgcHJvZ3JhbSAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5pbmRleCAxNGFjYjI0NTU3NDZmYy4uMWViY2QyNDdlZjRlM2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtMTIxMCwxMyArMTIxMCwxNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKTtcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbixcbitcdFx0XHRcdCAgICAgczMyIGluc25fb2ZmX2luX3BhdGNoKTtcbiBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbiB2b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHQgICAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KTtcbiAjZWxzZVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4tXHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbilcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuK1x0XHRcdFx0XHRcdCAgIHUzMiBvZmYsXG4rXHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCxcbitcdFx0XHRcdFx0XHQgICB1MzIgbGVuLFxuK1x0XHRcdFx0XHRcdCAgIHMzMiBpbnNuX29mZl9pbl9wYXRjaClcbiB7XG4gXHRyZXR1cm4gRVJSX1BUUigtRU5PVFNVUFApO1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL0tjb25maWcgYi9rZXJuZWwvYnBmL0tjb25maWdcbmluZGV4IGViM2RlMzU3MzRmMDkyLi5lMWYzODUwZDJmNWEwNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvS2NvbmZpZ1xuKysrIGIva2VybmVsL2JwZi9LY29uZmlnXG5AQCAtMTcsNiArMTcsMTAgQEAgY29uZmlnIEhBVkVfQ0JQRl9KSVRcbiBjb25maWcgSEFWRV9FQlBGX0pJVFxuIFx0Ym9vbFxuIFxuKyMgS0FTQU4gc3VwcG9ydCBmb3IgSklUIGNvbXBpbGVyXG4rY29uZmlnIEhBVkVfRUJQRl9KSVRfS0FTQU5cbitcdGJvb2xcbitcbiAjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XG4gIyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cbiBjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxuQEAgLTEwMSw0ICsxMDUsMTcgQEAgY29uZmlnIEJQRl9MU01cbiBcbiBcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cbiBcbitjb25maWcgQlBGX0pJVF9LQVNBTlxuK1x0Ym9vbFxuK1x0ZGVwZW5kcyBvbiBIQVZFX0VCUEZfSklUX0tBU0FOXG4rXHRkZXBlbmRzIG9uIEtBU0FOX0dFTkVSSUNcbitcdGRlcGVuZHMgb24gS0FTQU5fVk1BTExPQ1xuK1x0ZGVwZW5kcyBvbiBCUEZfSklUXG4rXHRkZWZhdWx0IHkgaWYgS0FTQU5cbitcdGhlbHBcbitcdCAgTWFrZXMgSklUIGNvbXBpbGVyIGluc2VydCBnZW5lcmljIG91dGxpbmUgS0FTQU4gY2hlY2tzIGluIEJQRlxuK1x0ICBwcm9ncmFtcyB3aGVuIHRoZXkgYXJlIGluc2VydGVkIGluIHRoZSBrZXJuZWwuIFRoaXMgZmVhdHVyZSBpc1xuK1x0ICBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgdGhlIG5lZWRlZCBzZXQgb2YgS0FTQU4gYW5kIEJQRlxuK1x0ICBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgZW5hYmxlZC5cbitcbiBlbmRtZW51ICMgXCJCUEYgc3Vic3lzdGVtXCJcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jXG5pbmRleCA2ZTE5YTAzMGRhNmYxMy4uMWUxOGI5OTlmMWI1NjUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC0xNTk4LDcgKzE1OTgsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAoZW52KVxuLVx0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XG4rXHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuLCByZXdyaXR0ZW4gLSAxKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShjbG9uZSwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCAxMmE4YTRlYjc1N2YxOC4uZmVlZTFmMzNkZTlkNTUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtMTUyLDEyICsxNTIsMjUgQEAgc3RhdGljIGludCBnZXRfY2FsbGVlX3N0YWNrX2RlcHRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gfVxuICNlbmRpZlxuIFxuK3N0YXRpYyBib29sIGlzX21lbV9pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbit7XG4rXHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1NUIFx1MDAyNlx1MDAyNlxuK1x0ICAgIEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9TVFggXHUwMDI2XHUwMDI2XG4rXHQgICAgQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX0xEWClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gfHxcbitcdFx0QlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggfHxcbitcdFx0QlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDKTtcbit9XG4rXG4gLyogc2luZ2xlIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25pW29mZl0gaW5zdHJ1Y3Rpb24gd2FzIHJlcGxhY2VkIHdpdGggdGhlIHJhbmdlXG4gICogaW5zbmlbb2ZmLCBvZmYgKyBjbnQpLiAgQWRqdXN0IGNvcnJlc3BvbmRpbmcgaW5zbl9hdXhfZGF0YSBieSBjb3B5aW5nXG4gICogWzAsIG9mZikgYW5kIFtvZmYsIGVuZCkgdG8gbmV3IGxvY2F0aW9ucywgc28gdGhlIHBhdGNoZWQgcmFuZ2Ugc3RheXMgemVyb1xuICAqL1xuIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0XHQgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZywgdTMyIG9mZiwgdTMyIGNudClcbitcdFx0XHRcdCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLCB1MzIgb2ZmLCB1MzIgY250LFxuK1x0XHRcdFx0IHMzMiBpbnNuX29mZl9pbl9wYXRjaClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmRhdGEgPSBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YTtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IG5ld19wcm9nLVx1MDAzZWluc25zaTtcbkBAIC0xNzEsOCArMTg0LDE0IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHQgKi9cbiBcdGRhdGFbb2ZmXS56ZXh0X2RzdCA9IGluc25faGFzX2RlZjMyKGluc24gKyBvZmYgKyBjbnQgLSAxKTtcbiBcbi1cdGlmIChjbnQgPT0gMSlcbitcdGlmIChjbnQgPT0gMSkge1xuK1x0XHQvKiBBIG5vbi1tZW1vcnkgYWNjZXNzaW5nIGluc24gY291bGQgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGFcbitcdFx0ICogbWVtb3J5IGFjY2Vzc2luZyBpbnNuLCBzeXN0ZW1hdGljYWxseSBtYXJrIGl0IGZvciBub24tc3RhY2tcbitcdFx0ICogYWNjZXNzXG4rXHRcdCAqL1xuK1x0XHRkYXRhW29mZl0ubm9uX3N0YWNrX2FjY2VzcyA9IGlzX21lbV9pbnNuKGluc24pO1xuIFx0XHRyZXR1cm47XG4rXHR9XG4gXHRwcm9nX2xlbiA9IG5ld19wcm9nLVx1MDAzZWxlbjtcbiBcbiBcdG1lbW1vdmUoZGF0YSArIG9mZiArIGNudCAtIDEsIGRhdGEgKyBvZmYsXG5AQCAtMTgyLDcgKzIwMSwxOSBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHQvKiBFeHBhbmQgaW5zbmlbb2ZmXSdzIHNlZW4gY291bnQgdG8gdGhlIHBhdGNoZWQgcmFuZ2UuICovXG4gXHRcdGRhdGFbaV0uc2VlbiA9IG9sZF9zZWVuO1xuIFx0XHRkYXRhW2ldLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiArIGkpO1xuK1x0XHRpZiAoaSA9PSBvZmYgKyBpbnNuX29mZl9pbl9wYXRjaCkge1xuK1x0XHRcdGRhdGFbaV0ubm9uX3N0YWNrX2FjY2VzcyA9IGRhdGFbb2ZmICsgY250IC0gMV0ubm9uX3N0YWNrX2FjY2VzcztcbitcdFx0XHRkYXRhW29mZiArIGNudCAtIDFdLm5vbl9zdGFja19hY2Nlc3MgPSBmYWxzZTtcbitcdFx0fSBlbHNlIGlmIChpc19tZW1faW5zbihpbnNuICsgaSkpIHtcbitcdFx0XHRkYXRhW2ldLm5vbl9zdGFja19hY2Nlc3MgPSB0cnVlO1xuK1x0XHR9XG4gXHR9XG4rXHQvKlxuK1x0ICogTGFzdCBzbG90IGluc3RydWN0aW9uIGNvdWxkIGJlIGEgbmV3bHkgZ2VuZXJhdGVkXG4rXHQgKiBCUEZfU1QvQlBGX0xEWC9CUEZfU1RYXG4rXHQgKi9cbitcdGlmIChpc19tZW1faW5zbihpbnNuICsgb2ZmICsgY250IC0gMSkgXHUwMDI2XHUwMDI2IGluc25fb2ZmX2luX3BhdGNoICE9IGNudCAtIDEpXG4rXHRcdGRhdGFbb2ZmICsgY250IC0gMV0ubm9uX3N0YWNrX2FjY2VzcyA9IHRydWU7XG4gXG4gXHQvKlxuIFx0ICogVGhlIGluZGlyZWN0X3RhcmdldCBmbGFnIG9mIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiB3YXMgbW92ZWQgdG8gdGhlIGxhc3Qgb2YgdGhlXG5AQCAtMjQ1LDcgKzI3Niw4IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9wb2tlX2Rlc2NzKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwgdTMyIGxlbilcbiB9XG4gXG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4tXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXG4rXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4sXG4rXHRcdFx0XHQgICAgIHMzMiBpbnNuX29mZl9pbl9wYXRjaClcbiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nO1xuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpuZXdfZGF0YSA9IE5VTEw7XG5AQCAtMjY5LDcgKzMwMSw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuIFx0XHRcdFx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbb2ZmXS5vcmlnX2lkeCk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuLVx0YWRqdXN0X2luc25fYXV4X2RhdGEoZW52LCBuZXdfcHJvZywgb2ZmLCBsZW4pO1xuK1x0YWRqdXN0X2luc25fYXV4X2RhdGEoZW52LCBuZXdfcHJvZywgb2ZmLCBsZW4sIGluc25fb2ZmX2luX3BhdGNoKTtcbiBcdGFkanVzdF9zdWJwcm9nX3N0YXJ0cyhlbnYsIG9mZiwgbGVuKTtcbiBcdGFkanVzdF9pbnNuX2FycmF5cyhlbnYsIG9mZiwgbGVuKTtcbiBcdGFkanVzdF9wb2tlX2Rlc2NzKG5ld19wcm9nLCBvZmYsIGxlbik7XG5AQCAtNjY4LDcgKzcwMCw3IEBAIGludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0cGF0Y2ggPSB6ZXh0X3BhdGNoO1xuIFx0XHRwYXRjaF9sZW4gPSAyO1xuIGFwcGx5X3BhdGNoX2J1ZmZlcjpcbi1cdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgYWRqX2lkeCwgcGF0Y2gsIHBhdGNoX2xlbik7XG4rXHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4sIDApO1xuIFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRlbnYtXHUwMDNlcHJvZyA9IG5ld19wcm9nO1xuQEAgLTcxMyw3ICs3NDUsNyBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbY250KytdID0gQlBGX1NUWF9NRU0oQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzEsXG4gXHRcdFx0XHRcdFx0ICAgICAgLXN1YnByb2dzWzBdLnN0YWNrX2RlcHRoKTtcbiBcdFx0XHRpbnNuX2J1ZltjbnQrK10gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2lbMF07XG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCwgMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRcdGVudi1cdTAwM2Vwcm9nID0gbmV3X3Byb2c7XG5AQCAtNzM2LDcgKzc2OCw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHR2ZXJpZmllcl9idWcoZW52LCBcInByb2xvZ3VlIGlzIHRvbyBsb25nXCIpO1xuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHR9IGVsc2UgaWYgKGNudCkge1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC03NTksNiArNzkyLDcgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5zbl9jbnQ7IGkrKywgaW5zbisrKSB7XG4gXHRcdGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NfdCBjb252ZXJ0X2N0eF9hY2Nlc3M7XG4rXHRcdHMzMiBpbnNuX29mZl9pbl9wYXRjaCA9IC0xO1xuIFx0XHR1OCBtb2RlO1xuIFxuIFx0XHRpZiAoZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaSArIGRlbHRhXS5ub3NwZWMpIHtcbkBAIC03NjgsNyArODAyLDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdCpwYXRjaCsrID0gQlBGX1NUX05PU1BFQygpO1xuIFx0XHRcdCpwYXRjaCsrID0gKmluc247XG4gXHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1Zjtcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgY250IC0gMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTg0MSw3ICs4NzYsOCBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0KnBhdGNoKysgPSAqaW5zbjtcbiBcdFx0XHQqcGF0Y2grKyA9IEJQRl9TVF9OT1NQRUMoKTtcbiBcdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCAwKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtODU2LDE2ICs4OTIsMjAgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGlmICghb3BzLVx1MDAzZWNvbnZlcnRfY3R4X2FjY2VzcylcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IG9wcy1cdTAwM2Vjb252ZXJ0X2N0eF9hY2Nlc3M7XG4rXHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFBUUl9UT19TT0NLRVQ6XG4gXHRcdGNhc2UgUFRSX1RPX1NPQ0tfQ09NTU9OOlxuIFx0XHRcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl9zb2NrX2NvbnZlcnRfY3R4X2FjY2VzcztcbitcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IDA7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgUFRSX1RPX1RDUF9TT0NLOlxuIFx0XHRcdGNvbnZlcnRfY3R4X2FjY2VzcyA9IGJwZl90Y3Bfc29ja19jb252ZXJ0X2N0eF9hY2Nlc3M7XG4rXHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFBUUl9UT19YRFBfU09DSzpcbiBcdFx0XHRjb252ZXJ0X2N0eF9hY2Nlc3MgPSBicGZfeGRwX3NvY2tfY29udmVydF9jdHhfYWNjZXNzO1xuK1x0XHRcdGluc25fb2ZmX2luX3BhdGNoID0gMDtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBQVFJfVE9fQlRGX0lEOlxuIFx0XHRjYXNlIFBUUl9UT19CVEZfSUQgfCBQVFJfVU5UUlVTVEVEOlxuQEAgLTk3MSw3ICsxMDExLDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0XHRcdCAgICAgICBzaXplICogOCwgMCk7XG4gXG4gcGF0Y2hfaW5zbl9idWY6XG4tXHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCxcbitcdFx0XHRcdFx0ICAgICAgIGluc25fb2ZmX2luX3BhdGNoKTtcbiBcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xNDY0LDcgKzE1MDUsNyBAQCBzdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdFxuIFx0ICogb25lcyBmb3IgdGhlIGhpZGRlbiBzdWJwcm9nLiBIZW5jZSBhbGwgb2YgdGhlIGFkanVzdG1lbnQgb3BlcmF0aW9uc1xuIFx0ICogaW4gYnBmX3BhdGNoX2luc25fZGF0YSBhcmUgbm8tb3BzLlxuIFx0ICovXG4tXHRwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbiAtIDEsIHBhdGNoLCBsZW4pO1xuK1x0cHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4gLSAxLCBwYXRjaCwgbGVuLCAtMSk7XG4gXHRpZiAoIXByb2cpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0ZW52LVx1MDAzZXByb2cgPSBwcm9nO1xuQEAgLTE1NDksNyArMTU5MCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiBcdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCAwKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTU2OSw2ICsxNjExLDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGJvb2wgaXNfc2RpdiA9IGlzZGl2IFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZW9mZiA9PSAxO1xuIFx0XHRcdGJvb2wgaXNfc21vZCA9ICFpc2RpdiBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gMTtcbiBcdFx0XHRzdHJ1Y3QgYnBmX2luc24gKnBhdGNoID0gaW5zbl9idWY7XG4rXHRcdFx0czMyIGluc25fb2ZmX2luX3BhdGNoO1xuIFxuIFx0XHRcdGlmIChpc19zZGl2KSB7XG4gXHRcdFx0XHQvKiBbUixXXXggc2RpdiAwIC1cdTAwM2UgMFxuQEAgLTE1OTUsNiArMTYzOCw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdCpwYXRjaCsrID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbiBcdFx0XHRcdCpwYXRjaCsrID0gKmluc247XG4gXHRcdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xuK1x0XHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSBjbnQgLSAxO1xuIFx0XHRcdH0gZWxzZSBpZiAoaXNfc21vZCkge1xuIFx0XHRcdFx0LyogW1IsV114IG1vZCAwIC1cdTAwM2UgW1IsV114ICovXG4gXHRcdFx0XHQvKiBbUixXXXggbW9kIC0xIC1cdTAwM2UgMCAqL1xuQEAgLTE2MTEsNiArMTY1NSw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdCpwYXRjaCsrID0gQlBGX01PVjMyX0lNTShpbnNuLVx1MDAzZWRzdF9yZWcsIDApO1xuIFx0XHRcdFx0KnBhdGNoKysgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xuIFx0XHRcdFx0KnBhdGNoKysgPSAqaW5zbjtcbitcdFx0XHRcdGluc25fb2ZmX2luX3BhdGNoID0gcGF0Y2ggLSBpbnNuX2J1ZiAtIDE7XG4gXG4gXHRcdFx0XHRpZiAoIWlzNjQpIHtcbiBcdFx0XHRcdFx0KnBhdGNoKysgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xuQEAgLTE2MjYsMTIgKzE2NzEsMTQgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0KnBhdGNoKysgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xuIFx0XHRcdFx0KnBhdGNoKysgPSAqaW5zbjtcbiBcdFx0XHRcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XG4rXHRcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IGNudCAtIDE7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdC8qIFtSLFddeCBtb2QgMCAtXHUwMDNlIFtSLFddeCAqL1xuIFx0XHRcdFx0KnBhdGNoKysgPSBCUEZfUkFXX0lOU04oKGlzNjQgPyBCUEZfSk1QIDogQlBGX0pNUDMyKSB8XG4gXHRcdFx0XHRcdFx0XHRCUEZfSkVRIHwgQlBGX0ssIGluc24tXHUwMDNlc3JjX3JlZyxcbiBcdFx0XHRcdFx0XHRcdDAsIDEgKyAoaXM2NCA/IDAgOiAxKSwgMCk7XG4gXHRcdFx0XHQqcGF0Y2grKyA9ICppbnNuO1xuK1x0XHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSBwYXRjaCAtIGluc25fYnVmIC0gMTtcbiBcbiBcdFx0XHRcdGlmICghaXM2NCkge1xuIFx0XHRcdFx0XHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XG5AQCAtMTY0MCw3ICsxNjg3LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIGluc25fb2ZmX2luX3BhdGNoKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTY1Niw2ICsxNzA0LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHQgICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTVNYKSkge1xuIFx0XHRcdHN0cnVjdCBicGZfaW5zbiAqcGF0Y2ggPSBpbnNuX2J1ZjtcbiBcdFx0XHR1NjQgdWFkZHJlc3NfbGltaXQgPSBicGZfYXJjaF91YWRkcmVzc19saW1pdCgpO1xuK1x0XHRcdHMzMiBpbnNuX29mZl9pbl9wYXRjaDtcbiBcbiBcdFx0XHRpZiAoIXVhZGRyZXNzX2xpbWl0KVxuIFx0XHRcdFx0Z290byBuZXh0X2luc247XG5AQCAtMTY2NiwxMSArMTcxNSwxMyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0KnBhdGNoKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9SU0gsIEJQRl9SRUdfQVgsIDMyKTtcbiBcdFx0XHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KTEUsIEJQRl9SRUdfQVgsIHVhZGRyZXNzX2xpbWl0IFx1MDAzZVx1MDAzZSAzMiwgMik7XG4gXHRcdFx0KnBhdGNoKysgPSAqaW5zbjtcbitcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IHBhdGNoIC0gaW5zbl9idWYgLSAxO1xuIFx0XHRcdCpwYXRjaCsrID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbiBcdFx0XHQqcGF0Y2grKyA9IEJQRl9NT1Y2NF9JTU0oaW5zbi1cdTAwM2Vkc3RfcmVnLCAwKTtcbiBcbiBcdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCBpbnNuX29mZl9pbl9wYXRjaCk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE2OTAsNyArMTc0MSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMCk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE3NDMsNyArMTc5NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdCpwYXRjaCsrID0gQlBGX0FMVTY0X0lNTShCUEZfTVVMLCBvZmZfcmVnLCAtMSk7XG4gXHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xNzg4LDcgKzE4NDEsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbNl0gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfQVgsIHN0YWNrX29mZl9jbnQpO1xuIFx0XHRcdGNudCA9IDc7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIDMpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xODA5LDcgKzE4NjMsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbM10gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfQVgsIHN0YWNrX29mZik7XG4gXHRcdFx0Y250ID0gNDtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMik7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE4MzAsNyArMTg4NSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpZiAoY250ID09IDApXG4gXHRcdFx0XHRnb3RvIG5leHRfaW5zbjtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgY250IC0gMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE5MTUsNyArMTk3MSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdFx0XHRcdFx0IG1hcCktXHUwMDNlaW5kZXhfbWFzayk7XG4gXHRcdFx0aW5zbl9idWZbMl0gPSAqaW5zbjtcbiBcdFx0XHRjbnQgPSAzO1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTk0OCw3ICsyMDA1LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGluc25fYnVmWzJdID0gKmluc247XG4gXHRcdFx0Y250ID0gMztcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgY250IC0gMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE5NjcsNyArMjAyNSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlsxXSA9ICppbnNuO1xuIFx0XHRcdGNudCA9IDI7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMDA3LDggKzIwNjYsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHRcdFx0fVxuIFxuLVx0XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLFxuLVx0XHRcdFx0XHRcdFx0ICAgICAgIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKFxuK1x0XHRcdFx0XHRlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCwgLTEpO1xuIFx0XHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjA5MSw3ICsyMTUwLDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGNudCA9IDM7XG4gXG4gXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1Zixcbi1cdFx0XHRcdFx0XHQgICAgICAgY250KTtcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTIxMTksNyArMjE3OCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9BTFUzMl9SRUcoQlBGX1hPUiwgQlBGX1JFR18wLCBCUEZfUkVHXzApO1xuIFx0XHRcdGNudCA9IDE7XG4gI2VuZGlmXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjEzNyw3ICsyMTk3LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGluc25fYnVmWzJdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG4gXHRcdFx0Y250ID0gMztcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMTcxLDcgKzIyMzIsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbY250KytdID0gQlBGX0pNUF9BKDEpO1xuIFx0XHRcdGluc25fYnVmW2NudCsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMjAzLDcgKzIyNjUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRjbnQgPSAxO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMjI5LDcgKzIyOTIsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRjbnQgPSAyO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMjQ1LDcgKzIzMDksOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0LyogTG9hZCBJUCBhZGRyZXNzIGZyb20gY3R4IC0gMTYgKi9cbiBcdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIC0xNik7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgMSk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgMSwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMzAwLDcgKzIzNjUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbMTBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FTk9FTlQpO1xuIFx0XHRcdGNudCA9IDExO1xuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTIzMTgsNyArMjM4NCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlsxXSA9IEJQRl9BVE9NSUNfT1AoQlBGX0RXLCBCUEZfWENIRywgQlBGX1JFR18xLCBCUEZfUkVHXzAsIDApO1xuIFx0XHRcdGNudCA9IDI7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjM4Niw3ICsyNDUzLDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHQvKiBDb3B5IGZpcnN0IGFjdHVhbCBpbnNuIHRvIHByZXNlcnZlIGl0ICovXG4gXHRcdGluc25fYnVmW2NudCsrXSA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaVtzdWJwcm9nX3N0YXJ0XTtcbiBcbi1cdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgc3VicHJvZ19zdGFydCwgaW5zbl9idWYsIGNudCk7XG4rXHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHN1YnByb2dfc3RhcnQsIGluc25fYnVmLCBjbnQsIGNudCAtIDEpO1xuIFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRlbnYtXHUwMDNlcHJvZyA9IHByb2cgPSBuZXdfcHJvZztcbkBAIC0yNDg1LDcgKzI1NTIsNyBAQCBzdGF0aWMgc3RydWN0IGJwZl9wcm9nICppbmxpbmVfYnBmX2xvb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGluc25fYnVmW2NudCsrXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR184LCBCUEZfUkVHXzEwLCByOF9vZmZzZXQpO1xuIFxuIFx0KnRvdGFsX2NudCA9IGNudDtcbi1cdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHBvc2l0aW9uLCBpbnNuX2J1ZiwgY250KTtcbitcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHBvc2l0aW9uLCBpbnNuX2J1ZiwgY250LCAtMSk7XG4gXHRpZiAoIW5ld19wcm9nKVxuIFx0XHRyZXR1cm4gbmV3X3Byb2c7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA1MWY3OTY1ZDQyZTMyNC4uMTI0NmNlOGY1ZjBmNDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTMxNDQsNiArMzE0NCwxMSBAQCBzdGF0aWMgdm9pZCBtYXJrX2luZGlyZWN0X3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4KVxuIFx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaWR4XS5pbmRpcmVjdF90YXJnZXQgPSB0cnVlO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBtYXJrX25vbl9zdGFja19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeClcbit7XG4rXHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpZHhdLm5vbl9zdGFja19hY2Nlc3MgPSB0cnVlO1xuK31cbitcbiAjZGVmaW5lIExSX0ZSQU1FTk9fQklUU1x0NFxuICNkZWZpbmUgTFJfU1BJX0JJVFNcdDZcbiAjZGVmaW5lIExSX0VOVFJZX0JJVFNcdChMUl9TUElfQklUUyArIExSX0ZSQU1FTk9fQklUUyArIDEpXG5AQCAtNjMzMyw2ICs2MzM4LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiXG4gXHRcdGVsc2VcbiBcdFx0XHRjb2VyY2VfcmVnX3RvX3NpemVfc3goXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIHNpemUpO1xuIFx0fVxuK1xuK1x0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19TVEFDSylcbitcdFx0bWFya19ub25fc3RhY2tfYWNjZXNzKGVudiwgaW5zbl9pZHgpO1xuK1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmNcbmluZGV4IDAyMjJhOWE1ZDA3NjE0Li4zN2M0MDVmYzJiMGQyMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmNcbkBAIC0yMjcsNDIgKzIyNyw2IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2luY29ycmVjdF9pbmRleCh2b2lkKVxuIFx0Y2hlY2tfbWlkX2luc25faW5kZXgoKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZXRfYnBmX2ppdF9oYXJkZW4oY2hhciAqbGV2ZWwpXG4te1xuLVx0Y2hhciBvbGRfbGV2ZWw7XG4tXHRpbnQgZXJyID0gLTE7XG4tXHRpbnQgZmQgPSAtMTtcbi1cbi1cdGZkID0gb3BlbihcIi9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlblwiLCBPX1JEV1IgfCBPX05PTkJMT0NLKTtcbi1cdGlmIChmZCBcdTAwM2MgMCkge1xuLVx0XHRBU1NFUlRfRkFJTChcIm9wZW4gLi4uL2JwZl9qaXRfaGFyZGVuIHJldHVybmVkICVkIChlcnJubz0lZClcIiwgZmQsIGVycm5vKTtcbi1cdFx0cmV0dXJuIC0xO1xuLVx0fVxuLVxuLVx0ZXJyID0gcmVhZChmZCwgXHUwMDI2b2xkX2xldmVsLCAxKTtcbi1cdGlmIChlcnIgIT0gMSkge1xuLVx0XHRBU1NFUlRfRkFJTChcInJlYWQgZnJvbSAuLi4vYnBmX2ppdF9oYXJkZW4gcmV0dXJuZWQgJWQgKGVycm5vPSVkKVwiLCBlcnIsIGVycm5vKTtcbi1cdFx0ZXJyID0gLTE7XG4tXHRcdGdvdG8gZW5kO1xuLVx0fVxuLVxuLVx0bHNlZWsoZmQsIDAsIFNFRUtfU0VUKTtcbi1cbi1cdGVyciA9IHdyaXRlKGZkLCBsZXZlbCwgMSk7XG4tXHRpZiAoZXJyICE9IDEpIHtcbi1cdFx0QVNTRVJUX0ZBSUwoXCJ3cml0ZSB0byAuLi4vYnBmX2ppdF9oYXJkZW4gcmV0dXJuZWQgJWQgKGVycm5vPSVkKVwiLCBlcnIsIGVycm5vKTtcbi1cdFx0ZXJyID0gLTE7XG4tXHRcdGdvdG8gZW5kO1xuLVx0fVxuLVxuLVx0ZXJyID0gMDtcbi1cdCpsZXZlbCA9IG9sZF9sZXZlbDtcbi1lbmQ6XG4tXHRpZiAoZmQgXHUwMDNlPSAwKVxuLVx0XHRjbG9zZShmZCk7XG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBjaGVja19ibGluZG5lc3Modm9pZClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2luc24gaW5zbnNbXSA9IHtcbkBAIC0yNzIsNyArMjM2LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tfYmxpbmRuZXNzKHZvaWQpXG4gXHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcbiBcdFx0QlBGX0VYSVRfSU5TTigpLFxuIFx0fTtcbi1cdGludCBwcm9nX2ZkID0gLTEsIG1hcF9mZDtcbitcdGludCBwcm9nX2ZkID0gLTEsIG1hcF9mZCwgcmV0O1xuIFx0c3RydWN0IGJwZl9pbnNuX2FycmF5X3ZhbHVlIHZhbCA9IHt9O1xuIFx0Y2hhciBicGZfaml0X2hhcmRlbiA9ICdAJzsgLyogbm9uLWV4aXpzdGluZyB2YWx1ZSAqL1xuIFx0aW50IGk7XG5AQCAtMjkxLDcgKzI1NSw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2JsaW5kbmVzcyh2b2lkKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4gXHRicGZfaml0X2hhcmRlbiA9ICcyJztcbi1cdGlmIChzZXRfYnBmX2ppdF9oYXJkZW4oXHUwMDI2YnBmX2ppdF9oYXJkZW4pKSB7XG4rXHRyZXQgPSBzZXRfYnBmX2ppdF9oYXJkZW4oXHUwMDI2YnBmX2ppdF9oYXJkZW4pO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcInNldCBicGZfaml0X2hhcmRlblwiKSkge1xuIFx0XHRicGZfaml0X2hhcmRlbiA9ICdAJzsgLyogb3BlbiwgcmVhZCBvciB3cml0ZSBmYWlsZWQgPVx1MDAzZSBubyB3cml0ZSB3YXMgZG9uZSAqL1xuIFx0XHRnb3RvIGNsZWFudXA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2thc2FuLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjAwNmI5MmVlMTMxYWNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2thc2FuLmNcbkBAIC0wLDAgKzEsNDI1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXG4rXG4rLypcbisgKiBUZXN0cyB2YWxpZGF0aW5nIHRoYXQgS0FTQU4gcmVwb3J0cyBhcmUgcHJvcGVybHkgaW5zdHJ1bWVudGVkIGFuZFxuKyAqIGdlbmVyYXRlZCBvbiBhIHdpZGUgdmFyaWV0eSBvZiBpbnN0cnVjdGlvbnMuIFRoZSBydW5uaW5nIGtlcm5lbCBuZWVkc1xuKyAqIGthc2FuX211bHRpX3Nob3QgdG8gcnVuIG11bHRpcGxlIGthc2FuLWdlbmVyYXRpbmcgc3VidGVzdHMgYXQgb25jZVxuKyAqL1xuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5wcml2X2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwia2FzYW4uc2tlbC5oXCJcbisjaW5jbHVkZSBcImthc2FuX2hhcmRlbi5za2VsLmhcIlxuK1xuKyNkZWZpbmUgU1VCVEVTVF9OQU1FX01BWF9MRU5cdDEyOFxuKyNkZWZpbmUgUFJPR19OQU1FX01BWF9MRU5cdDEyOFxuK1xuKyNkZWZpbmUgTUFYX0xPR19TSVpFXHRcdCg4ICogMTAyNClcbisjZGVmaW5lIFJFQURfQ0hVTktfU0laRVx0XHQyNTZcbitcbisjZGVmaW5lIEtBU0FOX1BBVFRFUk5fU0xBQl9VQUYgXCJCVUc6IEtBU0FOOiBzbGFiLXVzZS1hZnRlci1mcmVlIFwiIFxcXG4rXHRcImluIGJwZl9wcm9nXyUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XyVzXCJcbisjZGVmaW5lIEtBU0FOX1BBVFRFUk5fUkVQT1JUIFwiJXMgb2Ygc2l6ZSAlZCBhdCBhZGRyXCJcbitcbitzdGF0aWMgY2hhciBrbG9nX2J1ZmZlcltNQVhfTE9HX1NJWkVdO1xuK3N0YXRpYyBjaGFyIHJlY29yZFtNQVhfTE9HX1NJWkVdO1xuK1xuK3N0cnVjdCB0ZXN0X3NwZWMge1xuK1x0Y2hhciAqcHJvZ190eXBlO1xuK1x0Ym9vbCBpc193cml0ZTtcbitcdGJvb2wgb25seV8zMl9vcl82NDtcbitcdGJvb2wgbmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsO1xuK1x0Ym9vbCBza2lwX211bHRpX3NpemVfdGVzdGluZztcbitcdGJvb2wgc2tpcF9vbl9zdGFja190ZXN0aW5nO1xuK1x0aW50IHJ1bl9zaXplO1xuK1x0Ym9vbCBleHBlY3Rfbm9fcmVwb3J0O1xuK1x0Ym9vbCBybmRfaGkzMjtcbit9O1xuK1xuK3N0cnVjdCBrYXNhbl93cml0ZV92YWwge1xuK1x0X191OCBkYXRhXzE7XG4rXHRfX3UxNiBkYXRhXzI7XG4rXHRfX3UzMiBkYXRhXzQ7XG4rXHRfX3U2NCBkYXRhXzg7XG4rfTtcbitcbitzdHJ1Y3QgdGVzdF9jdHgge1xuK1x0X191OCAgcHJvZ190YWdbQlBGX1RBR19TSVpFXTtcbitcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XG4rXHRpbnQgKmFjY2Vzc19zaXplO1xuK1x0Ym9vbCBza2lwX2xvYWRfYWNxX3N0b3JlX3JlbDtcbitcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbitcdGNoYXIgcHJvZ19uYW1lW1NVQlRFU1RfTkFNRV9NQVhfTEVOXTtcbitcdGludCBrbG9nX2ZkO1xuK307XG4rXG4rc3RhdGljIGludCBvcGVuX2tlcm5lbF9sb2dzKHZvaWQpXG4re1xuK1x0aW50IGZkO1xuK1xuK1x0ZmQgPSBvcGVuKFwiL2Rldi9rbXNnXCIsIE9fUkRPTkxZIHwgT19OT05CTE9DSyk7XG4rXG4rXHRyZXR1cm4gZmQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNraXBfa2VybmVsX2xvZ3MoaW50IGZkKVxuK3tcbitcdGxzZWVrKGZkLCAwLCBTRUVLX0VORCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmVhZF9rZXJuZWxfbG9ncyhpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IG1heF9sZW4pXG4re1xuK1x0c2l6ZV90IHRvdGFsID0gMDtcbitcdHNzaXplX3QgbjtcbitcbitcdGJ1ZlswXSA9ICdcXDAnO1xuK1x0d2hpbGUgKDEpIHtcbitcdFx0Y2hhciAqbXNnLCAqZW9sO1xuK1x0XHRzaXplX3QgbGVuO1xuK1xuK1x0XHRuID0gcmVhZChmZCwgcmVjb3JkLCBzaXplb2YocmVjb3JkKSAtIDEpO1xuK1x0XHRpZiAobiBcdTAwM2MgMCkge1xuK1x0XHRcdGlmIChlcnJubyA9PSBFQUdBSU4pXG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRyZXR1cm4gbjtcbitcdFx0fVxuK1x0XHRyZWNvcmRbbl0gPSAnXFwwJztcbitcbitcdFx0LypcbitcdFx0ICogRWFjaCBrbXNnIHJlY29yZCBzdGFydHMgd2l0aCBzb21lIG1ldGFkYXRhLCBzZXBhcmF0ZWRcbitcdFx0ICogZnJvbSB0aGUgYWN0dWFsIGNvbnRlbnQgYnkgYSBzZW1pLWNvbG9uXG4rXHRcdCAqL1xuK1x0XHRtc2cgPSBzdHJjaHIocmVjb3JkLCAnOycpO1xuK1x0XHRpZiAoIW1zZylcbitcdFx0XHRjb250aW51ZTtcbitcdFx0bXNnKys7XG4rXHRcdGVvbCA9IHN0cmNocihtc2csICdcXG4nKTtcbitcdFx0aWYgKGVvbClcbitcdFx0XHQqZW9sID0gJ1xcMCc7XG4rXG4rXHRcdGxlbiA9IHN0cmxlbihtc2cpO1xuK1x0XHRpZiAodG90YWwgKyBsZW4gKyAyIFx1MDAzZSBtYXhfbGVuKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRtZW1jcHkoYnVmICsgdG90YWwsIG1zZywgbGVuKTtcbitcdFx0dG90YWwgKz0gbGVuO1xuK1x0XHRidWZbdG90YWwrK10gPSAnXFxuJztcbitcdFx0YnVmW3RvdGFsXSA9ICdcXDAnO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRvdGFsO1xuK31cbitcbitzdGF0aWMgaW50IGNoZWNrX2thc2FuX3JlcG9ydF9pbl9rZXJuZWxfbG9ncyhjaGFyICpidWYsIHN0cnVjdCB0ZXN0X2N0eCAqY3R4LFxuK1x0XHRcdFx0XHQgICAgIGJvb2wgaXNfd3JpdGUsIGludCBzaXplKVxuK3tcbitcdGNoYXIgYWNjZXNzX2xvZ1tSRUFEX0NIVU5LX1NJWkVdO1xuK1x0Y2hhciAqa2FzYW5fcmVwb3J0X3N0YXJ0O1xuK1x0aW50IG5zaXplO1xuK1xuK1x0c25wcmludGYoYWNjZXNzX2xvZywgUkVBRF9DSFVOS19TSVpFLCBLQVNBTl9QQVRURVJOX1NMQUJfVUFGLFxuK1x0XHQgY3R4LVx1MDAzZXByb2dfdGFnWzBdLCBjdHgtXHUwMDNlcHJvZ190YWdbMV0sIGN0eC1cdTAwM2Vwcm9nX3RhZ1syXSxcbitcdFx0IGN0eC1cdTAwM2Vwcm9nX3RhZ1szXSwgY3R4LVx1MDAzZXByb2dfdGFnWzRdLCBjdHgtXHUwMDNlcHJvZ190YWdbNV0sXG4rXHRcdCBjdHgtXHUwMDNlcHJvZ190YWdbNl0sIGN0eC1cdTAwM2Vwcm9nX3RhZ1s3XSwgY3R4LVx1MDAzZXByb2dfbmFtZSk7XG4rXHQvKlxuK1x0ICogU2VhcmNoZWQga2FzYW4gcmVwb3J0IGlzIHZhbGlkIGlmXG4rXHQgKiAtIGl0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBrYXNhbiBwYXR0ZXJuXG4rXHQgKiAtIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmF1bHR5IGFjY2VzcyBpcyBmb3VuZCBzb21ld2hlcmVcbitcdCAqICAgYWZ0ZXIgdGhlIGhlYWRlciAobm90IG5lY2Vzc2FyaWx5IG9uIHRoZSB2ZXJ5IG5leHQgbGluZSxcbitcdCAqICAgYmVjYXVzZSBvdGhlciBrZXJuZWwgbWVzc2FnZXMgbWF5IGludGVybGVhdmUpXG4rXHQgKiAtIGZhdWx0eSBhY2Nlc3MgcHJvcGVydGllcyBtYXRjaCB0aGUgdGVzdGVkIHR5cGUgYW5kIHNpemVcbitcdCAqL1xuK1x0a2FzYW5fcmVwb3J0X3N0YXJ0ID0gc3Ryc3RyKGJ1ZiwgYWNjZXNzX2xvZyk7XG4rXG4rXHRpZiAoIWthc2FuX3JlcG9ydF9zdGFydClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRuc2l6ZSA9IHNucHJpbnRmKGFjY2Vzc19sb2csIFJFQURfQ0hVTktfU0laRSwgS0FTQU5fUEFUVEVSTl9SRVBPUlQsXG4rXHRcdFx0IGlzX3dyaXRlID8gXCJXcml0ZVwiIDogXCJSZWFkXCIsIHNpemUpO1xuK1xuK1x0aWYgKCFzdHJzdHIoa2FzYW5fcmVwb3J0X3N0YXJ0LCBhY2Nlc3NfbG9nKSlcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgZXhlY19zdWJ0ZXN0KHN0cnVjdCB0ZXN0X2N0eCAqY3R4LCBzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LFxuK1x0XHRcdCBpbnQgYWNjZXNzX3NpemUsIGJvb2wgb25fc3RhY2spXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcbitcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm87XG4rXHR1aW50OF90IGJ1ZltFVEhfSExFTl0gPSB7MH07XG4rXHRpbnQgcmV0LCBwcm9nX2ZkO1xuK1x0X191MzIgaW5mb19sZW47XG4rXG4rXHRjdHgtXHUwMDNlcHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGN0eC1cdTAwM2VvYmosXG4rXHRcdFx0XHRcdFx0ICAgICBjdHgtXHUwMDNlcHJvZ19uYW1lKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihjdHgtXHUwMDNlcHJvZywgXCJmaW5kIHRlc3QgcHJvZ1wiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4rXHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgaW5mb19sZW4pO1xuK1x0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChjdHgtXHUwMDNlcHJvZyk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChwcm9nX2ZkLCBcImdldCBwcm9nIGZkXCIpKVxuK1x0XHRyZXR1cm47XG4rXHRyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nX2ZkLCBcdTAwMjZpbmZvLCBcdTAwMjZpbmZvX2xlbik7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwiZmV0Y2ggbG9hZGVkIHByb2dyYW0gaW5mb1wiKSlcbitcdFx0cmV0dXJuO1xuK1x0bWVtY3B5KGN0eC1cdTAwM2Vwcm9nX3RhZywgaW5mby50YWcsIEJQRl9UQUdfU0laRSk7XG4rXG4rXHRza2lwX2tlcm5lbF9sb2dzKGN0eC1cdTAwM2VrbG9nX2ZkKTtcbitcbitcdHRvcHRzLnN6ID0gc2l6ZW9mKHN0cnVjdCBicGZfdGVzdF9ydW5fb3B0cyk7XG4rXHR0b3B0cy5kYXRhX3NpemVfaW4gPSBFVEhfSExFTjtcbitcdHRvcHRzLmRhdGFfaW4gPSBidWY7XG4rXHRpZiAoY3R4LVx1MDAzZWFjY2Vzc19zaXplKVxuK1x0XHQqY3R4LVx1MDAzZWFjY2Vzc19zaXplID0gYWNjZXNzX3NpemU7XG4rXHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChjdHgtXHUwMDNlcHJvZyksXG4rXHRcdFx0XHQgICAgIFx1MDAyNnRvcHRzKTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJydW4gcHJvZ1wiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmV0ID0gcmVhZF9rZXJuZWxfbG9ncyhjdHgtXHUwMDNla2xvZ19mZCwga2xvZ19idWZmZXIsIE1BWF9MT0dfU0laRSk7XG4rXHRpZiAoIUFTU0VSVF9HRShyZXQsIDAsIFwicmVhZCBrZXJuZWwgbG9nc1wiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmV0ID0gY2hlY2tfa2FzYW5fcmVwb3J0X2luX2tlcm5lbF9sb2dzKGtsb2dfYnVmZmVyLCBjdHgsXG4rXHRcdFx0XHRcdFx0dGVzdC1cdTAwM2Vpc193cml0ZSwgYWNjZXNzX3NpemUpO1xuK1x0aWYgKG9uX3N0YWNrIHx8IHRlc3QtXHUwMDNlZXhwZWN0X25vX3JlcG9ydClcbitcdFx0QVNTRVJUX05FUShyZXQsIDAsIFwibm8gcmVwb3J0IHNob3VsZCBiZSBnZW5lcmF0ZWRcIik7XG4rXHRlbHNlXG4rXHRcdEFTU0VSVF9PSyhyZXQsIFwicmVwb3J0IHNob3VsZCBiZSBnZW5lcmF0ZWRcIik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZV9hbmRfbG9jYXRpb24oc3RydWN0IHRlc3RfY3R4ICpjdHgsXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LFxuK1x0XHRcdFx0XHQgICAgICAgaW50IGFjY2Vzc19zaXplLFxuK1x0XHRcdFx0XHQgICAgICAgYm9vbCBvbl9zdGFjaylcbit7XG4rXHRjaGFyIHN1YnRlc3RfbmFtZVtTVUJURVNUX05BTUVfTUFYX0xFTl07XG4rXG4rXHRpZiAodGVzdC1cdTAwM2Vza2lwX211bHRpX3NpemVfdGVzdGluZykge1xuK1x0XHRzbnByaW50ZihzdWJ0ZXN0X25hbWUsIFNVQlRFU1RfTkFNRV9NQVhfTEVOLCBcIiVzXCIsXG4rXHRcdFx0IHRlc3QtXHUwMDNlcHJvZ190eXBlKTtcbitcdFx0c3RybmNweShjdHgtXHUwMDNlcHJvZ19uYW1lLCB0ZXN0LVx1MDAzZXByb2dfdHlwZSwgUFJPR19OQU1FX01BWF9MRU4pO1xuK1x0fSBlbHNlIHtcbitcdFx0c25wcmludGYoc3VidGVzdF9uYW1lLCBTVUJURVNUX05BTUVfTUFYX0xFTiwgXCIlc18lZF8lc1wiLFxuK1x0XHRcdCB0ZXN0LVx1MDAzZXByb2dfdHlwZSwgYWNjZXNzX3NpemUsXG4rXHRcdFx0IG9uX3N0YWNrID8gXCJvbl9zdGFja1wiIDogXCJub3Rfb25fc3RhY2tcIik7XG4rXHRcdHNucHJpbnRmKGN0eC1cdTAwM2Vwcm9nX25hbWUsIFBST0dfTkFNRV9NQVhfTEVOLCBcIiVzXyVzXCIsXG4rXHRcdFx0IHRlc3QtXHUwMDNlcHJvZ190eXBlLFxuK1x0XHRcdCBvbl9zdGFjayA/IFwib25fc3RhY2tcIiA6IFwibm90X29uX3N0YWNrXCIpO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X19zdGFydF9zdWJ0ZXN0KHN1YnRlc3RfbmFtZSkpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICh0ZXN0LVx1MDAzZW5lZWRzX2xvYWRfYWNxX3N0b3JlX3JlbCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZXNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0ZXhlY19zdWJ0ZXN0KGN0eCwgdGVzdCwgYWNjZXNzX3NpemUsIG9uX3N0YWNrKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnVuX3N1YnRlc3Rfd2l0aF9zaXplKHN0cnVjdCB0ZXN0X2N0eCAqY3R4LCBzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LFxuK1x0XHRcdFx0ICBpbnQgc2l6ZSlcbit7XG4rXHRydW5fc3VidGVzdF93aXRoX3NpemVfYW5kX2xvY2F0aW9uKGN0eCwgdGVzdCwgc2l6ZSwgZmFsc2UpO1xuK1x0aWYgKCF0ZXN0LVx1MDAzZXNraXBfb25fc3RhY2tfdGVzdGluZylcbitcdFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplX2FuZF9sb2NhdGlvbihjdHgsIHRlc3QsIHNpemUsIHRydWUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydW5fc3VidGVzdChzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbit7XG4rXHRpZiAodGVzdC1cdTAwM2Vza2lwX211bHRpX3NpemVfdGVzdGluZykge1xuK1x0XHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCB0ZXN0LVx1MDAzZXJ1bl9zaXplKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0LVx1MDAzZW9ubHlfMzJfb3JfNjQpIHtcbitcdFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgMSk7XG4rXHRcdHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShjdHgsIHRlc3QsIDIpO1xuK1x0fVxuK1x0cnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgNCk7XG4rXHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCA4KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnVuX2JsaW5kaW5nX3N1YnRlc3Qodm9pZClcbit7XG4rXHRzdHJ1Y3QgdGVzdF9zcGVjIGJsaW5kaW5nX3NwZWMgPSB7XG4rXHRcdC5wcm9nX3R5cGUgPSBcInN0X2JsaW5kZWRcIixcbitcdFx0LmlzX3dyaXRlID0gdHJ1ZSxcbitcdH07XG4rXHRjaGFyIGJwZl9qaXRfaGFyZGVuID0gJzInO1xuK1x0c3RydWN0IGthc2FuX2hhcmRlbiAqc2tlbDtcbitcdHN0cnVjdCB0ZXN0X2N0eCAqY3R4O1xuK1xuK1x0aWYgKCF0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic3RfYmxpbmRlZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y3R4ID0gY2FsbG9jKDEsIHNpemVvZigqY3R4KSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoY3R4LCBcImFsbG9jIGJsaW5kaW5nIGN0eFwiKSlcbitcdFx0cmV0dXJuO1xuK1x0Y3R4LVx1MDAzZWtsb2dfZmQgPSAtMTtcbitcbitcdGlmIChzZXRfYnBmX2ppdF9oYXJkZW4oXHUwMDI2YnBmX2ppdF9oYXJkZW4pKVxuK1x0XHRnb3RvIGZyZWVfY3R4O1xuK1xuK1x0c2tlbCA9IGthc2FuX2hhcmRlbl9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwib3BlbiBhbmQgbG9hZCBibGluZGVkIHByb2dcIikpXG4rXHRcdGdvdG8gcmVzdG9yZTtcbitcbitcdGN0eC1cdTAwM2VrbG9nX2ZkID0gb3Blbl9rZXJuZWxfbG9ncygpO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoY3R4LVx1MDAzZWtsb2dfZmQsIFwib3BlbiBrZXJuZWwgbG9nc1wiKSlcbitcdFx0Z290byBkZXN0cm95O1xuK1xuK1x0Y3R4LVx1MDAzZW9iaiA9IHNrZWwtXHUwMDNlb2JqO1xuK1x0c3RybmNweShjdHgtXHUwMDNlcHJvZ19uYW1lLCBcInN0X2JsaW5kZWRcIiwgUFJPR19OQU1FX01BWF9MRU4pO1xuK1xuK1x0ZXhlY19zdWJ0ZXN0KGN0eCwgXHUwMDI2YmxpbmRpbmdfc3BlYywgMSwgZmFsc2UpO1xuK1xuK2Rlc3Ryb3k6XG4rXHRjbG9zZShjdHgtXHUwMDNla2xvZ19mZCk7XG4rXHRrYXNhbl9oYXJkZW5fX2Rlc3Ryb3koc2tlbCk7XG4rcmVzdG9yZTpcbitcdHNldF9icGZfaml0X2hhcmRlbihcdTAwMjZicGZfaml0X2hhcmRlbik7XG4rZnJlZV9jdHg6XG4rXHRmcmVlKGN0eCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XG4rXHR7XG4rXHRcdC5wcm9nX3R5cGUgPSBcInN0XCIsXG4rXHRcdC5pc193cml0ZSA9IHRydWVcbitcdH0sXG4rXHR7XG4rXHRcdC5wcm9nX3R5cGUgPSBcInN0eFwiLFxuK1x0XHQuaXNfd3JpdGUgPSB0cnVlXG4rXHR9LFxuK1x0e1xuK1x0XHQucHJvZ190eXBlID0gXCJsZHhcIixcbitcdFx0LmlzX3dyaXRlID0gZmFsc2VcbitcdH0sXG4rXHR7XG4rXHRcdC5wcm9nX3R5cGUgPSBcInNpbXBsZV9hdG9taWNcIixcbitcdFx0LmlzX3dyaXRlID0gZmFsc2UsXG4rXHRcdC5vbmx5XzMyX29yXzY0ID0gdHJ1ZVxuK1x0fSxcbitcdHtcbitcdFx0LnByb2dfdHlwZSA9IFwibG9hZF9hY3F1aXJlXCIsXG4rXHRcdC5pc193cml0ZSA9IGZhbHNlLFxuK1x0XHQubmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsID0gdHJ1ZVxuK1x0fSxcbitcdHtcbitcdFx0LnByb2dfdHlwZSA9IFwic3RvcmVfcmVsZWFzZVwiLFxuK1x0XHQuaXNfd3JpdGUgPSB0cnVlLFxuK1x0XHQubmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsID0gdHJ1ZVxuK1x0fSxcbitcdHtcbitcdFx0LnByb2dfdHlwZSA9IFwibGR4X3BhdGNoZWRcIixcbitcdFx0LmlzX3dyaXRlID0gZmFsc2UsXG4rXHRcdC5za2lwX211bHRpX3NpemVfdGVzdGluZyA9IHRydWUsXG4rXHRcdC5za2lwX29uX3N0YWNrX3Rlc3RpbmcgPSB0cnVlLFxuK1x0XHQucnVuX3NpemUgPSA0LFxuK1x0XHQucm5kX2hpMzIgPSB0cnVlXG4rXHR9LFxuK1x0e1xuK1x0XHQucHJvZ190eXBlID0gXCJsZHhfcGF0Y2hlZF9vbl9zdGFja1wiLFxuK1x0XHQuaXNfd3JpdGUgPSBmYWxzZSxcbitcdFx0LnNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nID0gdHJ1ZSxcbitcdFx0LnNraXBfb25fc3RhY2tfdGVzdGluZyA9IHRydWUsXG4rXHRcdC5ydW5fc2l6ZSA9IDQsXG4rXHRcdC5leHBlY3Rfbm9fcmVwb3J0ID0gdHJ1ZSxcbitcdFx0LnJuZF9oaTMyID0gdHJ1ZVxuK1x0fSxcbitcdHtcbitcdFx0LnByb2dfdHlwZSA9IFwidmVyaWZpZXJfcGF0aHNfc3RhY2tfYW5kX25vbl9zdGFja1wiLFxuK1x0XHQuaXNfd3JpdGUgPSB0cnVlLFxuK1x0XHQuc2tpcF9tdWx0aV9zaXplX3Rlc3RpbmcgPSB0cnVlLFxuK1x0XHQuc2tpcF9vbl9zdGFja190ZXN0aW5nID0gdHJ1ZSxcbitcdFx0LnJ1bl9zaXplID0gMVxuK1x0fVxuK307XG4rXG4rdm9pZCB0ZXN0X2thc2FuKHZvaWQpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4rXHRzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0O1xuK1x0c3RydWN0IHRlc3RfY3R4ICpjdHg7XG4rXHRzdHJ1Y3Qga2FzYW4gKnNrZWw7XG4rXHRfX3UzMiBrZXkgPSAwO1xuK1x0aW50IGksIHJldDtcbitcbitcdGN0eCA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHRlc3RfY3R4KSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoY3R4LCBcImFsbG9jIHRlc3QgY3R4XCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIWlzX2ppdF9lbmFibGVkKCkgfHwgIWdldF9rYXNhbl9qaXRfZW5hYmxlZCgpKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBlbmQ7XG4rXHR9XG4rXG4rXHRza2VsID0ga2FzYW5fX29wZW4oKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcIm9wZW4gcHJvZ1wiKSlcbitcdFx0Z290byBlbmQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RzKTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbitcbitcdFx0aWYgKCF0ZXN0c1tpXS5ybmRfaGkzMilcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKHNrZWwtXHUwMDNlb2JqLFxuK1x0XHRcdFx0XHRcdFx0dGVzdHNbaV0ucHJvZ190eXBlKTtcbitcdFx0aWYgKCFBU1NFUlRfT0tfUFRSKHByb2csIFwiZmluZCBybmRfaGkzMiBwcm9nXCIpKVxuK1x0XHRcdGdvdG8gZGVzdHJveTtcbitcdFx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBCUEZfRl9URVNUX1JORF9ISTMyKTtcbitcdH1cbitcbitcdGlmICghQVNTRVJUX09LKGthc2FuX19sb2FkKHNrZWwpLCBcImxvYWQgcHJvZ1wiKSlcbitcdFx0Z290byBkZXN0cm95O1xuK1xuK1x0Y3R4LVx1MDAzZW9iaiA9IHNrZWwtXHUwMDNlb2JqO1xuK1x0Y3R4LVx1MDAzZWFjY2Vzc19zaXplID0gXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlYWNjZXNzX3NpemU7XG4rXHRjdHgtXHUwMDNlc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWwgPSBza2VsLVx1MDAzZWRhdGEtXHUwMDNlc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWxfdGVzdHM7XG4rXG4rXHRjdHgtXHUwMDNla2xvZ19mZCA9IG9wZW5fa2VybmVsX2xvZ3MoKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKGN0eC1cdTAwM2VrbG9nX2ZkLCBcIm9wZW4ga2VybmVsIGxvZ3NcIikpXG4rXHRcdGdvdG8gZGVzdHJveTtcbitcbitcdC8qIEZpbGwgbWFwIHdpdGggcmVjb2duaXphYmxlIHZhbHVlcyAqL1xuK1x0cmV0ID0gYnBmX21hcF9fbG9va3VwX2VsZW0oc2tlbC1cdTAwM2VtYXBzLnRlc3RfbWFwLCBcdTAwMjZrZXksIHNpemVvZihrZXkpLFxuK1x0XHRcdFx0ICAgXHUwMDI2dmFsLCBzaXplb2YodmFsKSwgMCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwiZ2V0IG1hcFwiKSlcbitcdFx0Z290byBjbG9zZTtcbitcdHZhbC5kYXRhXzEgPSAweEFBO1xuK1x0dmFsLmRhdGFfMiA9IDB4QkJCQjtcbitcdHZhbC5kYXRhXzQgPSAweENDQ0NDQ0NDO1xuK1x0dmFsLmRhdGFfOCA9IDB4RERERERERERERERERERERDtcbitcdHJldCA9IGJwZl9tYXBfX3VwZGF0ZV9lbGVtKHNrZWwtXHUwMDNlbWFwcy50ZXN0X21hcCwgXHUwMDI2a2V5LCBzaXplb2Yoa2V5KSxcbitcdFx0XHRcdCAgIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCksIDApO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcInNldCBtYXBcIikpXG4rXHRcdGdvdG8gY2xvc2U7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RzKTsgaSsrKSB7XG4rXHRcdHRlc3QgPSBcdTAwMjZ0ZXN0c1tpXTtcbitcdFx0cnVuX3N1YnRlc3QoY3R4LCB0ZXN0KTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBCbGluZGluZyBzdWJ0ZXN0IGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgYXMgaXQgbmVlZHMgdGhlXG4rXHQgKiBjb3JyZXNwb25kaW5nIHByb2dyYW0gdG8gYmUgbG9hZGVkIHdpdGggYnBmX2ppdF9oYXJkZW4gcmFpc2VkXG4rXHQgKi9cbitcdHJ1bl9ibGluZGluZ19zdWJ0ZXN0KCk7XG4rXG4rY2xvc2U6XG4rXHRjbG9zZShjdHgtXHUwMDNla2xvZ19mZCk7XG4rZGVzdHJveTpcbitcdGthc2FuX19kZXN0cm95KHNrZWwpO1xuK2VuZDpcbitcdGZyZWUoY3R4KTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW4uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MmRkY2UzMDU5YWVlMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuLmNcbkBAIC0wLDAgKzEsMzk0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbisjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbitcbitleHRlcm4gdm9pZCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZvaWQgKm1lbSwgX191MzIgbWVtX19zeikgX19rc3ltO1xuK2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTtcbitcbitpbnQgYWNjZXNzX3NpemU7XG4rXG4rc3RydWN0IGthc2FuX3dyaXRlX3ZhbCB7XG4rXHRfX3U4IGRhdGFfMTtcbitcdF9fdTE2IGRhdGFfMjtcbitcdF9fdTMyIGRhdGFfNDtcbitcdF9fdTY0IGRhdGFfODtcbit9O1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4rXHRfX3R5cGUoa2V5LCBfX3UzMik7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrYXNhbl93cml0ZV92YWwpO1xuK30gdGVzdF9tYXAgU0VDKFwiLm1hcHNcIik7XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgc3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4rXHRjYXNlIDE6XG4rXHRcdHZhbC5kYXRhXzEgPSAweEFBO1xuK1x0XHRicmVhaztcbitcdGNhc2UgMjpcbitcdFx0dmFsLmRhdGFfMiA9IDB4QUE7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA0OlxuK1x0XHR2YWwuZGF0YV80ID0gMHhBQTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDg6XG4rXHRcdHZhbC5kYXRhXzggPSAweEFBO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgc3Rfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4rXHRfX3UzMiBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuK1x0Y2FzZSAxOlxuK1x0XHR2YWwtXHUwMDNlZGF0YV8xID0gMHhBQTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDI6XG4rXHRcdHZhbC1cdTAwM2VkYXRhXzIgPSAweEFBO1xuK1x0XHRicmVhaztcbitcdGNhc2UgNDpcbitcdFx0dmFsLVx1MDAzZWRhdGFfNCA9IDB4QUE7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA4OlxuK1x0XHR2YWwtXHUwMDNlZGF0YV84ID0gMHhBQTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IHN0eF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbitcdGNhc2UgMTpcbitcdFx0dmFsLmRhdGFfMSA9IGFjY2Vzc19zaXplO1xuK1x0XHRicmVhaztcbitcdGNhc2UgMjpcbitcdFx0dmFsLmRhdGFfMiA9IGFjY2Vzc19zaXplO1xuK1x0XHRicmVhaztcbitcdGNhc2UgNDpcbitcdFx0dmFsLmRhdGFfNCA9IGFjY2Vzc19zaXplO1xuK1x0XHRicmVhaztcbitcdGNhc2UgODpcbitcdFx0dmFsLmRhdGFfOCA9IGFjY2Vzc19zaXplO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgc3R4X25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuK1x0X191MzIga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbitcdGNhc2UgMTpcbitcdFx0dmFsLVx1MDAzZWRhdGFfMSA9IGFjY2Vzc19zaXplO1xuK1x0XHRicmVhaztcbitcdGNhc2UgMjpcbitcdFx0dmFsLVx1MDAzZWRhdGFfMiA9IGFjY2Vzc19zaXplO1xuK1x0XHRicmVhaztcbitcdGNhc2UgNDpcbitcdFx0dmFsLVx1MDAzZWRhdGFfNCA9IGFjY2Vzc19zaXplO1xuK1x0XHRicmVhaztcbitcdGNhc2UgODpcbitcdFx0dmFsLVx1MDAzZWRhdGFfOCA9IGFjY2Vzc19zaXplO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgbGR4X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcbitcbitcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuK1x0Y2FzZSAxOlxuK1x0XHRfX3NpbmsodmFsLmRhdGFfMSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAyOlxuK1x0XHRfX3NpbmsodmFsLmRhdGFfMik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA0OlxuK1x0XHRfX3NpbmsodmFsLmRhdGFfNCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA4OlxuK1x0XHRfX3NpbmsodmFsLmRhdGFfOCk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJ0Y3gvaW5ncmVzc1wiKVxuK2ludCBsZHhfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4rXHRfX3UzMiBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuK1x0Y2FzZSAxOlxuK1x0XHRfX3NpbmsodmFsLVx1MDAzZWRhdGFfMSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAyOlxuK1x0XHRfX3NpbmsodmFsLVx1MDAzZWRhdGFfMik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA0OlxuK1x0XHRfX3NpbmsodmFsLVx1MDAzZWRhdGFfNCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA4OlxuK1x0XHRfX3NpbmsodmFsLVx1MDAzZWRhdGFfOCk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJ0Y3gvaW5ncmVzc1wiKVxuK2ludCBsZHhfcGF0Y2hlZChzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuK1x0X191MzIga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdF9fc2luayh2YWwtXHUwMDNlZGF0YV80KTtcbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgbGR4X3BhdGNoZWRfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRfX3NpbmsodmFsLmRhdGFfNCk7XG4rXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IHNpbXBsZV9hdG9taWNfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4rXHRjYXNlIDQ6XG4rXHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnZhbC5kYXRhXzQsIDQpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgODpcbitcdFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2dmFsLmRhdGFfOCwgOCk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJ0Y3gvaW5ncmVzc1wiKVxuK2ludCBzaW1wbGVfYXRvbWljX25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuK1x0X191MzIga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbitcdGNhc2UgNDpcbitcdFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2dmFsLVx1MDAzZWRhdGFfNCwgNCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA4OlxuK1x0XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZ2YWwtXHUwMDNlZGF0YV84LCA4KTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNpZmRlZiBfX0JQRl9GRUFUVVJFX0xPQURfQUNRX1NUT1JFX1JFTFxuK2Jvb2wgc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWxfdGVzdHMgU0VDKFwiLmRhdGFcIikgPSAwO1xuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IGxvYWRfYWNxdWlyZV9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbitcdGNhc2UgMTpcbitcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC5kYXRhXzEsIF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgMjpcbitcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC5kYXRhXzIsIF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgNDpcbitcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC5kYXRhXzQsIF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgODpcbitcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC5kYXRhXzgsIF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgbG9hZF9hY3F1aXJlX25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuK1x0X191MzIga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbitcdGNhc2UgMTpcbitcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzEsIF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgMjpcbitcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzIsIF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgNDpcbitcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzQsIF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgODpcbitcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzgsIF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgc3RvcmVfcmVsZWFzZV9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbitcdGNhc2UgMTpcbitcdFx0X19hdG9taWNfc3RvcmVfbihcdTAwMjZ2YWwuZGF0YV8xLCAweEFBLCBfX0FUT01JQ19SRUxFQVNFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDI6XG4rXHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLmRhdGFfMiwgMHhCQkJCLCBfX0FUT01JQ19SRUxFQVNFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDQ6XG4rXHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLmRhdGFfNCwgMHhDQ0NDQ0NDQywgX19BVE9NSUNfUkVMRUFTRSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA4OlxuK1x0XHRfX2F0b21pY19zdG9yZV9uKFx1MDAyNnZhbC5kYXRhXzgsIDB4RERERERERERERERERERERCxcbitcdFx0XHRcdCBfX0FUT01JQ19SRUxFQVNFKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IHN0b3JlX3JlbGVhc2Vfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4rXHRfX3UzMiBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuK1x0Y2FzZSAxOlxuK1x0XHRfX2F0b21pY19zdG9yZV9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzEsIDB4QUEsIF9fQVRPTUlDX1JFTEVBU0UpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgMjpcbitcdFx0X19hdG9taWNfc3RvcmVfbihcdTAwMjZ2YWwtXHUwMDNlZGF0YV8yLCAweEJCQkIsIF9fQVRPTUlDX1JFTEVBU0UpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgNDpcbitcdFx0X19hdG9taWNfc3RvcmVfbihcdTAwMjZ2YWwtXHUwMDNlZGF0YV80LCAweENDQ0NDQ0NDLCBfX0FUT01JQ19SRUxFQVNFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDg6XG4rXHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLVx1MDAzZWRhdGFfOCwgMHhERERERERERERERERERERELFxuK1x0XHRcdFx0IF9fQVRPTUlDX1JFTEVBU0UpO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rI2Vsc2Vcbitib29sIHNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsX3Rlc3RzIFNFQyhcIi5kYXRhXCIpID0gMTtcbisjZW5kaWZcbitcbitTRUMoXCJ0Y3gvaW5ncmVzc1wiKVxuK2ludCB2ZXJpZmllcl9wYXRoc19zdGFja19hbmRfbm9uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHN0YWNrX3ZhbCA9IHt9O1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuK1x0dm9pZCAqcHRyO1xuK1x0X191MzIga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoYWNjZXNzX3NpemUpXG4rXHRcdHB0ciA9IHZhbDtcbitcdGVsc2VcbitcdFx0cHRyID0gXHUwMDI2c3RhY2tfdmFsO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZigqdmFsKSk7XG4rXHQqKF9fdTggKilwdHIgPSAweEFBO1xuK1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKCp2YWwpKTtcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIExJQ0VOU0VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODA4ZDdkYTY0NDIxNjJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rYXNhbl9oYXJkZW4uY1xuQEAgLTAsMCArMSw0MSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuK1xuK2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07XG4rZXh0ZXJuIHZvaWQgYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZvaWQgKm1lbSwgX191MzIgbWVtX19zeikgX19rc3ltO1xuK1xuK3N0cnVjdCBrYXNhbl93cml0ZV92YWwge1xuK1x0X191OCBkYXRhXzE7XG4rXHRfX3UxNiBkYXRhXzI7XG4rXHRfX3UzMiBkYXRhXzQ7XG4rXHRfX3U2NCBkYXRhXzg7XG4rfTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgX191MzIpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKTtcbit9IHRlc3RfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IHN0X2JsaW5kZWQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcbitcdF9fdTMyIGtleSA9IDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRlc3RfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHR2YWwtXHUwMDNlZGF0YV8xID0gMHhBQTtcbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBMSUNFTlNFW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbmluZGV4IDMwZjFjZDIzMDkzY2JlLi41ZDZhODM0ZjdkNzU3NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC0yNzEsNiArMjcxLDI2IEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3Qoc3RydWN0IHByb2dfdGVzdF9tZW1iZXJcbiBcdCAqL1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0JQRl9KSVRfS0FTQU5cbitcbitleHRlcm4gdm9pZCBrYXNhbl9wb2lzb24oY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIHU4IHZhbHVlLCBib29sIGluaXQpO1xuK1xuKyNkZWZpbmUgS0FTQU5fU0xBQl9GUkVFIDB4RkJcbitcbitfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCB1MzIgbWVtX19zeilcbit7XG4rXHRrYXNhbl9wb2lzb24obWVtLCBtZW1fX3N6LCBLQVNBTl9TTEFCX0ZSRUUsIGZhbHNlKTtcbit9XG4rXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odm9pZCAqbWVtLCB1MzIgbWVtX19zeilcbit7XG4rXHRrYXNhbl9wb2lzb24obWVtLCBtZW1fX3N6LCAweDAwLCBmYWxzZSk7XG4rfVxuKyNlbHNlXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opIHsgfVxuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opIHsgfVxuKyNlbmRpZlxuK1xuIF9fYnBmX2tmdW5jIHN0cnVjdCBicGZfdGVzdG1vZF9jdHggKlxuIGJwZl90ZXN0bW9kX2N0eF9jcmVhdGUoaW50ICplcnIpXG4ge1xuQEAgLTc0MCw2ICs3NjAsOCBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19rYXNhbl9wb2lzb24pXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbilcbiBCVEZfS0ZVTkNTX0VORChicGZfdGVzdG1vZF9jb21tb25fa2Z1bmNfaWRzKVxuIFxuIEJURl9JRF9MSVNUKGJwZl90ZXN0bW9kX2R0b3JfaWRzKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xuaW5kZXggYzk3MGU3NzkzZGZjYmMuLjczN2Y2NjhiMzVlMjNiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcbkBAIC01MTksNiArNTE5LDM4IEBAIGJvb2wgaXNfaml0X2VuYWJsZWQodm9pZClcbiBcdHJldHVybiBlbmFibGVkO1xuIH1cbiBcbitpbnQgc2V0X2JwZl9qaXRfaGFyZGVuKGNoYXIgKmxldmVsKVxuK3tcbitcdGNoYXIgb2xkX2xldmVsO1xuK1x0aW50IGVyciA9IC0xO1xuK1x0aW50IGZkID0gLTE7XG4rXG4rXHRmZCA9IG9wZW4oXCIvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW5cIiwgT19SRFdSIHwgT19OT05CTE9DSyk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGVyciA9IHJlYWQoZmQsIFx1MDAyNm9sZF9sZXZlbCwgMSk7XG4rXHRpZiAoZXJyICE9IDEpIHtcbitcdFx0ZXJyID0gLTE7XG4rXHRcdGdvdG8gZW5kO1xuK1x0fVxuK1xuK1x0bHNlZWsoZmQsIDAsIFNFRUtfU0VUKTtcbitcbitcdGVyciA9IHdyaXRlKGZkLCBsZXZlbCwgMSk7XG4rXHRpZiAoZXJyICE9IDEpIHtcbitcdFx0ZXJyID0gLTE7XG4rXHRcdGdvdG8gZW5kO1xuK1x0fVxuK1xuK1x0ZXJyID0gMDtcbitcdCpsZXZlbCA9IG9sZF9sZXZlbDtcbitlbmQ6XG4rXHRpZiAoZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShmZCk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZClcbiB7XG4gXHR2b2lkICpidWY7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oXG5pbmRleCAyZWRjNmZiN2ZjNTIxMi4uZTAwNjQyYWZlODZmNDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaFxuQEAgLTU5LDYgKzU5LDcgQEAgc3RydWN0IGJwZl9pbnNuO1xuIGludCBnZXRfeGxhdGVkX3Byb2dyYW0oaW50IGZkX3Byb2csIHN0cnVjdCBicGZfaW5zbiAqKmJ1ZiwgX191MzIgKmNudCk7XG4gaW50IHRlc3RpbmdfcHJvZ19mbGFncyh2b2lkKTtcbiBib29sIGlzX2ppdF9lbmFibGVkKHZvaWQpO1xuK2ludCBzZXRfYnBmX2ppdF9oYXJkZW4oY2hhciAqbGV2ZWwpO1xuIGludCBzdGFja19tcHJvdGVjdCh2b2lkKTtcbiBcbiAjZW5kaWYgLyogX19URVNUSU5HX0hFTFBFUlNfSCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmNcbmluZGV4IGY5OTdkN2VjOGZkMDg2Li4xMTIwMWI2NWEzZDRiNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuY1xuQEAgLTE0MiwzICsxNDIsOCBAQCBib29sIGdldF91bnByaXZfZGlzYWJsZWQodm9pZClcbiBcdH1cbiBcdHJldHVybiBtaXRpZ2F0aW9uc19vZmY7XG4gfVxuK1xuK2Jvb2wgZ2V0X2thc2FuX2ppdF9lbmFibGVkKHZvaWQpXG4re1xuK1x0cmV0dXJuIGNvbmZpZ19jb250YWlucyhcIkNPTkZJR19CUEZfSklUX0tBU0FOPXlcIikgPT0gMTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuaFxuaW5kZXggMTUxZjY3MzI5NjY1MjIuLmJjNWY0Yzk1M2M5ZDZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oXG5AQCAtNSwzICs1LDQgQEBcbiAjZGVmaW5lIFVOUFJJVl9TWVNDVEwgXCJrZXJuZWwvdW5wcml2aWxlZ2VkX2JwZl9kaXNhYmxlZFwiXG4gXG4gYm9vbCBnZXRfdW5wcml2X2Rpc2FibGVkKHZvaWQpO1xuK2Jvb2wgZ2V0X2thc2FuX2ppdF9lbmFibGVkKHZvaWQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjA6MTQ6MTkuMDM3ODYwOTMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM0MDczODE5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLQVNBTiBTdXBwb3J0IGZvciBCUEYgSklUIENvbXBpbGVyKipcblxuT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2luZyBLQVNBTiBzdXBwb3J0IGZvciB0aGUgQlBGIEpJVCBjb21waWxlciBvbiB4ODZfNjQuIEl0IGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGEgbmV3IGBDT05GSUdfQlBGX0pJVF9LQVNBTmAgYW5kIGBDT05GSUdfSEFWRV9FQlBGX0pJVF9LQVNBTmAsIHNvbWUgbW9kaWZpY2F0aW9ucyB0byBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCBmb3IgZW1pdHRpbmcgS0FTQU4gY2hlY2tzIGR1cmluZyBKSVQgY29tcGlsYXRpb24sIGFuZCBzb21lIGFkanVzdG1lbnRzIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gdHJhY2sgbWVtb3J5IGFjY2Vzc2VzLiBXZSBhbHNvIGhhdmUgbmV3IHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rYXNhbi5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rYXNhbi5jYCwgd2hpY2ggaXMgZ29vZCB0byBzZWUuXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGEgY29yZSBwYXJ0IG9mIHRoZSBrZXJuZWwg4oCTIHRoZSBCUEYgSklUIGNvbXBpbGVyLiBJdCdzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUsIHdoaWNoIGlzIGEgc3Ryb25nIGluZGljYXRvci4gU28sIGJhc2VkIG9uIHRoYXQsIHRoZSBmaXJzdCB0aGluZyBpcyB0byBtYXJrIGBXb3J0aEZ1enppbmdgIGFzIGB0cnVlYC5cblxuTm93LCB3ZSBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gIFdlIGhhdmUgdGhlIG5ldyBgQlBGX0pJVF9LQVNBTmAsIGFuZCB0aGUgZXhpc3RpbmcgYEhBVkVfRUJQRl9KSVRfS0FTQU5gLCBidXQgd2UgY2FuJ3QgZm9yZ2V0IGBLQVNBTl9HRU5FUklDYCwgYEtBU0FOX1ZNQUxMT0NgLCBgQlBGX0pJVGAgYW5kIHRoZSBiYXNlIGBLQVNBTmAuXG5cbk5leHQsIHdlIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMuIEluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCB3ZSBoYXZlIGBlbWl0X2thc2FuX2NoZWNrYCwgYGVtaXRfc3RgLCBgZW1pdF9hdG9taWNfbGRfc3RgLCBhbmQgYGRvX2ppdGAuIEluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgd2Ugc2VlIGBhZGp1c3RfaW5zbl9hdXhfZGF0YWAsIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCwgYGJwZl9kb19taXNjX2ZpeHVwc2AsIGFuZCBgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzYC4gRmluYWxseSwgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2Agd2UgaGF2ZSBgbWFya19ub25fc3RhY2tfYWNjZXNzYCBhbmQgYGNoZWNrX21lbV9hY2Nlc3NgLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHdoaWNoIG9mIHRoZXNlIGNhbiBiZSBkaXJlY3RseSBsZXZlcmFnZWQuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYGVtaXRfa2FzYW5fY2hlY2tgLCBgZW1pdF9zdGAsIGBlbWl0X2F0b21pY19sZF9zdGAsIGFuZCBgZG9faml0YCBhcmUgc3RhdGljIHdpdGhpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gIFNvLCB0aG9zZSBhcmUgb3V0LlxuXG5CdXQgYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBgYnBmX2RvX21pc2NfZml4dXBzYCwgYGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3Nlc2AsIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AgaW4gYGtlcm5lbC9icGYvKmAgc2VlbSBwcm9taXNpbmcuIEFsc28sIHdlIGhhdmUgYGJwZl9pbnRfaml0X2NvbXBpbGVgLCB3aGljaCBjYWxscyBgZG9faml0YCB3aGljaCwgd2hpbGUgc3RhdGljLCBpcyBjb3JlIHRvIHRoZSBKSVQgY29tcGlsYXRpb24gcHJvY2Vzcy5cblxuV2FpdCwgaXMgYGJwZl9wYXRjaF9pbnNuX2RhdGFgIGV4cG9ydGVkPyAgTGV0IG1lIHF1aWNrbHkgY2hlY2suLi4geWVzLCBpdCBpcyEgIEV4Y2VsbGVudC5cblxuU28sIGxldCdzIHVzZSBgYnBmX3BhdGNoX2luc25fZGF0YWAsIGBicGZfZG9fbWlzY19maXh1cHNgLCBhbmQgYGJwZl9pbnRfaml0X2NvbXBpbGVgLlxuXG5BbHJpZ2h0LCBJIHNob3VsZCBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LiAgV2Ugd2lsbCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiAgT3VyIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYFtcImJwZl9wYXRjaF9pbnNuX2RhdGFcIiwgXCJicGZfZG9fbWlzY19maXh1cHNcIiwgXCJicGZfaW50X2ppdF9jb21waWxlXCJdYC4gT3VyIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGBbXCJCUEZfSklUX0tBU0FOXCIsIFwiS0FTQU5fR0VORVJJQ1wiLCBcIktBU0FOX1ZNQUxMT0NcIiwgXCJCUEZfSklUXCIsIFwiS0FTQU5cIl1gLiBGaW5hbGx5LCB0aGUgYFJlYXNvbmluZ2Agd2lsbCBiZTogXCJUaGUgcGF0Y2ggYWRkcyBLQVNBTiBzdXBwb3J0IHRvIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIHg4Nl82NCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYy5cIlxuXG5IbW0sIG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIGBLQVNBTl9HRU5FUklDYCBhbmQgYEtBU0FOX1ZNQUxMT0NgIGFyZSB1c3VhbGx5IGVuYWJsZWQgaW4gS0FTQU4gYnVpbGRzLiBMZXQgbWUgY2hlY2sgaWYgb25seSBgQlBGX0pJVF9LQVNBTmAgaXMgZW5vdWdoLiBZZXMsIGBCUEZfSklUX0tBU0FOYCBkZXBlbmRzIG9uIGBIQVZFX0VCUEZfSklUX0tBU0FOYCwgYEtBU0FOX0dFTkVSSUNgLCBgS0FTQU5fVk1BTExPQ2AsIGFuZCBgQlBGX0pJVGAuXG5cbk9rYXksIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgZXZlcnl0aGluZyBsb29rcyBjb3JyZWN0LiBZZXAsIGFsbCBnb29kXG5cbiIsIklucHV0VG9rZW5zIjoyODM3NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMDoxNDozMi40NDUyNTAwN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcyMjQ4Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz00MDAyPXN0cnVjdCB4NjRfaml0X2RhdGEge1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMTMtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwMTQ6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAxNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIwOjE0OjM0LjMxNzUxMTU3OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Nzg0OTA3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipKSVQgQ29tcGlsYXRpb24gLSBFbnRyeSBQb2ludCBhbmQgUGF0Y2hpbmcqKlxuXG5BbHJpZ2h0LCBzbyBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgdGhlIEp1c3QtSW4tVGltZSBjb21waWxlciBvbiB4ODYsIGdvdCBpdC4gVGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBiZWdpbnMuIE5vdywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGhvdyB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBhY3R1YWxseSBoYW5kbGVkLiBMb29rcyBsaWtlIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBuZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgd2l0aGluIGluc3RydWN0aW9ucyBnZXRzIG1vZGlmaWVkIG9yIGFsdGVyZWQgZHVyaW5nIHRoZSBjb21waWxhdGlvbiBhbmQgcGF0Y2hpbmcgcHJvY2Vzcy4gS25vd2luZyBob3cgaXQncyBoYW5kbGVkIGlzIGVzc2VudGlhbCB0byBvcHRpbWl6aW5nIHRoZSBnZW5lcmF0ZWQgY29kZSwgcmlnaHQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjMwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjA6MTQ6MzcuMjk2MDA2NTI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDg4MDc5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcGF0Y2hfaW5zbl9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvZml4dXBzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9maXh1cHMuYz0yNjQ9c3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yNzctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyNzg6c3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yNzktXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuLFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz02MTQ9aW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03MDItYXBwbHlfcGF0Y2hfYnVmZmVyOlxcbmtlcm5lbC9icGYvZml4dXBzLmM6NzAzOlxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4sIDApO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtNzA0LVxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTcyMD1pbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0Ny1cXHRcXHRcXHRpbnNuX2J1ZltjbnQrK10gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaVswXTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc0ODpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LCAxKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0OS1cXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03NzAtXFx0XFx0fSBlbHNlIGlmIChjbnQpIHtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc3MTpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LFxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzcyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtODA0LVxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxua2VybmVsL2JwZi9maXh1cHMuYzo4MDU6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwNi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtODc4LVxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxua2VybmVsL2JwZi9maXh1cHMuYzo4Nzk6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTg4MC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAwKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTAxMy1wYXRjaF9pbnNuX2J1ZjpcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEwMTQ6XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250LFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTAxNS1cXHRcXHRcXHRcXHRcXHQgICAgICAgaW5zbl9vZmZfaW5fcGF0Y2gpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xNDkzPXN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE1MDUtXFx0ICogb25lcyBmb3IgdGhlIGhpZGRlbiBzdWJwcm9nLiBIZW5jZSBhbGwgb2YgdGhlIGFkanVzdG1lbnQgb3BlcmF0aW9uc1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTUwNjpcXHQgKiBpbiBicGZfcGF0Y2hfaW5zbl9kYXRhIGFyZSBuby1vcHMuXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA3LVxcdCAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTUwODpcXHRwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuIC0gMSwgcGF0Y2gsIGxlbiwgLTEpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwOS1cXHRpZiAoIXByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE1MjI9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNTkyLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTU5MzpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTU5NC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAwKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTY4OS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE2OTA6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE2OTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzIyLVxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzIzOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzI0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIGluc25fb2ZmX2luX3BhdGNoKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTc0My1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE3NDQ6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3OTctXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzk4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzk5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg0My1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE4NDQ6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMyk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NjUtXFxua2VybmVsL2JwZi9maXh1cHMuYzoxODY2OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0xODY3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIDIpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xODg3LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTg4ODpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg4OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTk3My1cXHRcXHRcXHRjbnQgPSAzO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTk3NDpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTk3NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjAwNy1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMDg6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMDktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgY250IC0gMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMjctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDI4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDI5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIGNudCAtIDEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDY4LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjA2OTpcXHRcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDcwLVxcdFxcdFxcdFxcdFxcdGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250LCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxNTEtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMTUyOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTUzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjE4MC0jZW5kaWZcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxODE6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxODItXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTk5LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjIwMDpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjIwMS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMzQtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMjM1OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjM2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI2Ny1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyNjg6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjk0LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjI5NTpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5Ni1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMTEtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMzEyOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzEzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICAxLCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzNjctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMzY4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzY5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjM4Ni1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzODc6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzODgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yNDU1LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjQ1NjpcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBzdWJwcm9nX3N0YXJ0LCBpbnNuX2J1ZiwgY250LCBjbnQgLSAxKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NTctXFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ2My1cXHRcXHQgKiB0byBpbnNuIGFmdGVyIEJQRl9TVCB0aGF0IGluaXRzIG1heV9nb3RvIGNvdW50Llxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjQ2NDpcXHRcXHQgKiBBZGp1c3RtZW50IHdpbGwgc3VjY2VlZCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBkaWRuJ3QgZmFpbC5cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NjUtXFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTI0OTM9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqaW5saW5lX2JwZl9sb29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1NTQtXFx0KnRvdGFsX2NudCA9IGNudDtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjI1NTU6XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgcG9zaXRpb24sIGluc25fYnVmLCBjbnQsIC0xKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1NTYtXFx0aWYgKCFuZXdfcHJvZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjA6MTQ6MzcuODIwOTAyNjEyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxNTY3ODc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBCUEYgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gYmVzdCBhcHByb2FjaCBmdXp6aW5nIHRoZSBCUEYgc3Vic3lzdGVtLiBJIHNlZSB0aGF0IGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBpcyBkZWZpbmVkIGFuZCBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAuIEkgd2FzIGNvbnNpZGVyaW5nIGZvY3VzaW5nIG9uIGl0LCBhbG9uZyB3aXRoIGBicGZfZG9fbWlzY19maXh1cHNgIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAuXG5cbkhhbmcgb24sIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBpc24ndCBhY3R1YWxseSBleHBvcnRlZCBhcyBhIG1vZHVsZSBzeW1ib2wsIGl0J3MganVzdCBhIGdsb2JhbCBmdW5jdGlvbi4gSXQgY291bGQgc3RpbGwgYmUgZnV6emVkIGlmIHN5emthbGxlciBjYW4gcmVhY2ggaXQgc29tZWhvdywgYnV0IGlkZWFsbHksIEkgd2FudCB0byB0YXJnZXQgdGhlIEJQRiB2ZXJpZmllciBvciB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MgZGlyZWN0bHkuXG5cblRoZXJlZm9yZSwgSSB0aGluayBhIG11Y2ggYmV0dGVyIHNldCBvZiBmb2N1cyBzeW1ib2xzIGFyZTpcbiogICBgYnBmX2ludF9qaXRfY29tcGlsZWAgKHRoZSBKSVQgZW50cnkgcG9pbnQpXG4qICAgYGJwZl9wYXRjaF9pbnNuX2RhdGFgXG4qICAgYGJwZl9kb19taXNjX2ZpeHVwc2AgKHRoZSBmaXh1cCBlbnRyeSBwb2ludClcbiogICBgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzYFxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCwgYW5kIHRoZW4gSSB3aWxsIGZvY3VzIG9uIGBicGZfaW50X2ppdF9jb21waWxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5ODYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjA6MTQ6NDMuMzM2NTg1OTc2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NzM1MzIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY29yZS5jPTI2MjA9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjYyNi1cXHRpZiAoIWJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpXFxua2VybmVsL2JwZi9jb3JlLmM6MjYyNzpcXHRcXHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xcbmtlcm5lbC9icGYvY29yZS5jLTI2MjgtXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQ4LVxcbmtlcm5lbC9icGYvY29yZS5jOjI2NDk6XFx0cHJvZyA9IGJwZl9pbnRfaml0X2NvbXBpbGUoZW52LCBwcm9nKTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjUwLVxcdGlmIChwcm9nLVxcdTAwM2VqaXRlZCkge1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjY2Nz1zdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI2ODYtXFx0ICogYmxpbmRpbmcgaXMgYWN0aXZlLiBIb3dldmVyLCBpbiBjYXNlIG9mIGVycm9yIGR1cmluZ1xcbmtlcm5lbC9icGYvY29yZS5jOjI2ODc6XFx0ICogYmxpbmRpbmcsIGJwZl9pbnRfaml0X2NvbXBpbGUoKSBtdXN0IGFsd2F5cyByZXR1cm4gYVxcbmtlcm5lbC9icGYvY29yZS5jLTI2ODgtXFx0ICogdmFsaWQgcHJvZ3JhbSwgd2hpY2ggaW4gdGhpcyBjYXNlIHdvdWxkIHNpbXBseSBub3RcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTMyMDk9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90YWlsX2NhbGxfcHJvdG8gPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjIxLS8qIFN0dWIgZm9yIEpJVHMgdGhhdCBvbmx5IHN1cHBvcnQgY0JQRi4gZUJQRiBwcm9ncmFtcyBhcmUgaW50ZXJwcmV0ZWQuXFxua2VybmVsL2JwZi9jb3JlLmM6MzIyMjogKiBJdCBpcyBlbmNvdXJhZ2VkIHRvIGltcGxlbWVudCBicGZfaW50X2ppdF9jb21waWxlKCkgaW5zdGVhZCwgc28gdGhhdFxcbmtlcm5lbC9icGYvY29yZS5jLTMyMjMtICogZUJQRiBhbmQgaW1wbGljaXRseSBhbHNvIGNCUEYgY2FuIGdldCBKSVRlZCFcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjI0LSAqL1xcbmtlcm5lbC9icGYvY29yZS5jOjMyMjU6c3RydWN0IGJwZl9wcm9nICogX193ZWFrIGJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbmtlcm5lbC9icGYvY29yZS5jLTMyMjYte1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzIzMC0vKiBTdHViIGZvciBKSVRzIHRoYXQgc3VwcG9ydCBlQlBGLiBBbGwgY0JQRiBjb2RlIGdldHMgdHJhbnNmb3JtZWQgaW50b1xcbmtlcm5lbC9icGYvY29yZS5jOjMyMzE6ICogZUJQRiBieSB0aGUga2VybmVsIGFuZCBpcyBsYXRlciBjb21waWxlZCBieSBicGZfaW50X2ppdF9jb21waWxlKCkuXFxua2VybmVsL2JwZi9jb3JlLmMtMzIzMi0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjA6MTQ6NDMuOTAzOTQ2OTU1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgzMzA4NDAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipGb2N1c2luZyBvbiBCUEYgSklUIENvbXBpbGF0aW9uKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0IGRyaWxsaW5nIGRvd24uIFRoYXQncyBhIHNvbGlkIHN5bWJvbCB0byBhbmNob3Igb24uIE5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiBgYnBmX2RvX21pc2NfZml4dXBzYC4gSSdsbCB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgY29tcGlsYXRpb24gcHJvY2Vzcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvbXBpbGVyIG1hbmFnZXMgdGhvc2UgXCJtaXNjZWxsYW5lb3VzXCIgYXNwZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyMTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMDoxNDo0Ni43MzcwMzQyN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4ODYyOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9kb19taXNjX2ZpeHVwc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2ZpeHVwcy5jPTE0OTM9c3RhdGljIGludCBhZGRfaGlkZGVuX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgaW50IGxlbilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUyMS0gKi9cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE1MjI6aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUyMy17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk3Mzk9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk5MzMtXFx0aWYgKHJldCA9PSAwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTkzNDpcXHRcXHRyZXQgPSBicGZfZG9fbWlzY19maXh1cHMoZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk5MzUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIwOjE0OjQ2Ljg1NTkwOTgwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE5NjA4NzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgQlBGIEluc3RydWN0aW9uIFBhdGNoaW5nKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgYnBmX2RvX21pc2NfZml4dXBzYCBpcyBhbm90aGVyIHBvdGVudGlhbCBrZXkgZm9jdXMgcG9pbnQgZm9yIHRoaXMuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBzZWUgaG93IGl0IGZpdHMgaW4gd2l0aCB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5Ob3csIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgYnBmX3BhdGNoX2luc25fZGF0YWAuIFVuZGVyc3RhbmRpbmcgaG93IHRoYXQgcm91dGluZSB3b3JrcyBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgcm9sZSBpbiB0aGUgcHJvY2VzcywgaXRzIGRlcGVuZGVuY2llcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQlBGIHN5c3RlbS4gRnJvbSB0aGVyZSBJJ2xsIGJlIGFibGUgdG8gdHJhY2UgaXQgYmFjayB1cCB0aGUgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NjUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjA6MTQ6NTAuMzc1NTIyNjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzU1MTYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcGF0Y2hfaW5zbl9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY29yZS5jPTE1NTQ9c3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNTY4LVxcbmtlcm5lbC9icGYvY29yZS5jOjE1Njk6XFx0LyogbWFrZSBzdXJlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBwYXRjaGVzIHRoZSBjb3JyZWN0IHByb2cgKi9cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNTcwLVxcdGlmIChlbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNjAwLVxcdFxcdGlmIChlbnYpXFxua2VybmVsL2JwZi9jb3JlLmM6MTYwMTpcXHRcXHRcXHR0bXAgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4sIHJld3JpdHRlbiAtIDEpO1xcbmtlcm5lbC9icGYvY29yZS5jLTE2MDItXFx0XFx0ZWxzZVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0yNjQ9c3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yNzctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyNzg6c3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yNzktXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuLFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz02MTQ9aW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03MDItYXBwbHlfcGF0Y2hfYnVmZmVyOlxcbmtlcm5lbC9icGYvZml4dXBzLmM6NzAzOlxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4sIDApO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtNzA0LVxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTcyMD1pbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0Ny1cXHRcXHRcXHRpbnNuX2J1ZltjbnQrK10gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaVswXTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc0ODpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LCAxKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc0OS1cXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03NzAtXFx0XFx0fSBlbHNlIGlmIChjbnQpIHtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc3MTpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LFxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzcyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtODA0LVxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxua2VybmVsL2JwZi9maXh1cHMuYzo4MDU6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwNi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtODc4LVxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxua2VybmVsL2JwZi9maXh1cHMuYzo4Nzk6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTg4MC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAwKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTAxMy1wYXRjaF9pbnNuX2J1ZjpcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEwMTQ6XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250LFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTAxNS1cXHRcXHRcXHRcXHRcXHQgICAgICAgaW5zbl9vZmZfaW5fcGF0Y2gpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xNDkzPXN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE1MDUtXFx0ICogb25lcyBmb3IgdGhlIGhpZGRlbiBzdWJwcm9nLiBIZW5jZSBhbGwgb2YgdGhlIGFkanVzdG1lbnQgb3BlcmF0aW9uc1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTUwNjpcXHQgKiBpbiBicGZfcGF0Y2hfaW5zbl9kYXRhIGFyZSBuby1vcHMuXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA3LVxcdCAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTUwODpcXHRwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuIC0gMSwgcGF0Y2gsIGxlbiwgLTEpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwOS1cXHRpZiAoIXByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE1MjI9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNTkyLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTU5MzpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTU5NC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAwKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTY4OS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE2OTA6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE2OTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzIyLVxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzIzOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzI0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIGluc25fb2ZmX2luX3BhdGNoKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTc0My1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE3NDQ6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3NDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3OTctXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzk4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzk5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg0My1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE4NDQ6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMyk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NjUtXFxua2VybmVsL2JwZi9maXh1cHMuYzoxODY2OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0xODY3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIDIpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xODg3LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTg4ODpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg4OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTk3My1cXHRcXHRcXHRjbnQgPSAzO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTk3NDpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTk3NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjAwNy1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMDg6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMDktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgY250IC0gMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMjctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDI4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDI5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIGNudCAtIDEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDY4LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjA2OTpcXHRcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDcwLVxcdFxcdFxcdFxcdFxcdGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250LCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxNTEtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMTUyOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTUzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjE4MC0jZW5kaWZcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxODE6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxODItXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTk5LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjIwMDpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjIwMS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMzQtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMjM1OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjM2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI2Ny1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyNjg6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjk0LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjI5NTpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5Ni1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMTEtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMzEyOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzEzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICAxLCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzNjctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMzY4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzY5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjM4Ni1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzODc6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzODgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yNDU1LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjQ1NjpcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBzdWJwcm9nX3N0YXJ0LCBpbnNuX2J1ZiwgY250LCBjbnQgLSAxKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NTctXFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ2My1cXHRcXHQgKiB0byBpbnNuIGFmdGVyIEJQRl9TVCB0aGF0IGluaXRzIG1heV9nb3RvIGNvdW50Llxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjQ2NDpcXHRcXHQgKiBBZGp1c3RtZW50IHdpbGwgc3VjY2VlZCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBkaWRuJ3QgZmFpbC5cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NjUtXFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTI0OTM9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqaW5saW5lX2JwZl9sb29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1NTQtXFx0KnRvdGFsX2NudCA9IGNudDtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjI1NTU6XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgcG9zaXRpb24sIGluc25fYnVmLCBjbnQsIC0xKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1NTYtXFx0aWYgKCFuZXdfcHJvZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjA6MTQ6NTAuNDk5MDgyNDA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTU5NzEwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXBwcm9hY2ggdG8gQW5hbHl6aW5nIEJQRiBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsICpicGZcXF9wYXRjaFxcX2luc25cXF9kYXRhKiBpcyBjbGVhcmx5IGEgZnJlcXVlbnRseS11c2VkIGZ1bmN0aW9uIGluIHRoaXMgc3BhY2U7IHRoYXQganVtcHMgb3V0IGltbWVkaWF0ZWx5LiBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cywgdGhvdWdoLCBhbmQgSSB0aGluayB0aGUgYmVzdCBwYXRoIGZvcndhcmQgaW52b2x2ZXMgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBjb21waWxhdGlvbiBwaXBlbGluZSDigJMgc3BlY2lmaWNhbGx5LCAqYnBmXFxfaW50XFxfaml0XFxfY29tcGlsZSosICpicGZcXF9kb1xcX21pc2NcXF9maXh1cHMqLCBhbmQgKmJwZlxcX2NvbnZlcnRcXF9jdHhcXF9hY2Nlc3NlcyouIFRoZXkgc2VlbSBsaWtlIGdvb2QgZW50cnkgcG9pbnRzIGZvciBtb3JlIGluLWRlcHRoIGZ1enppbmcuXG5cbkkgcXVpY2tseSBjaGVja2VkIHRoZSBzb3VyY2UgZm9yICpicGZcXF9wYXRjaFxcX2luc25cXF9kYXRhKiB0byBjb25maXJtIG15IGludHVpdGlvbiBhbmQgcmVtaW5kIG15c2VsZiBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIuIFllcywgaXQncyBkZWZpbmVkIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCBhbmQgZXhwb3J0ZWQgaW4gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLiBJdCBpcyBub3QgZXhwb3J0ZWQgdG8gbW9kdWxlcyB3aGljaCBzdWdnZXN0cyBpdCBpcyBpbnRlcm5hbC4gVGhlIGNvbmNlcm4gaXMgdGhhdCBTeXprYWxsZXIgY2FuIHN0aWxsIHJlYWNoIGl0IHRocm91Z2ggZGlyZWN0IHNwZWNpZmljYXRpb247IGhvd2V2ZXIsIGl0IGlzIGJldHRlciB0byB0YXJnZXQgdGhlIG1vcmUgZ2VuZXJhbCBlbnRyeSBwb2ludHMgb2YgdGhlIEJQRiBzdWJzeXN0ZW0uXG5cblRoZXJlZm9yZSwgbXkgZm9jdXMgZm9yIGluaXRpYWwgYW5hbHlzaXMgd2lsbCBiZSAqYnBmXFxfaW50XFxfaml0XFxfY29tcGlsZSosICpicGZcXF9kb1xcX21pc2NcXF9maXh1cHMqLCBhbmQgKmJwZlxcX2NvbnZlcnRcXF9jdHhcXF9hY2Nlc3NlcyouIE15IGZpcnN0IHRhcmdldCwgbGV0J3MgZXhwbG9yZSAqYnBmXFxfY29udmVydFxcX2N0eFxcX2FjY2Vzc2VzKi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxOTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMjA6MTQ6NTQuOTk1MDU4MTEzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgxNDM4NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvZml4dXBzLmM9NjE0PWludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzE5LSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6NzIwOmludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTcyMS17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk3Mzk9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk5MzAtXFx0XFx0LyogcHJvZ3JhbSBpcyB2YWxpZCwgY29udmVydCAqKHUzMiopKGN0eCArIG9mZikgYWNjZXNzZXMgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk5MzE6XFx0XFx0cmV0ID0gYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKGVudik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5OTMyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMDoxNDo1NS4xMDMyMDk3NDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU5NTc0NDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipGb2N1c2luZyBvbiBNZW1vcnkgQWNjZXNzIGluIEJQRioqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB0aGF0IGRpZ2dpbmcgaW50byBgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzYCBtaWdodCBiZSBhbm90aGVyIHByb2R1Y3RpdmUgYXZlbnVlIHRvIGV4cGxvcmUuIEl0IHNlZW1zIGxpa2UgaXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gbWVtb3J5IGFjY2VzcyB0cmFuc2xhdGlvbnMgd2l0aGluIHRoZSBCUEYgY29udGV4dC5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGdvIGRpcmVjdGx5IHRvIGBjaGVja19tZW1fYWNjZXNzYC4gVGhhdCBmdW5jdGlvbiBwcm9iYWJseSBoYXMgdGhlIGNyaXRpY2FsIGNoZWNrcyBuZWVkZWQgdG8gZW5mb3JjZSBtZW1vcnkgc2FmZXR5IHdpdGhpbiB0aGUgQlBGIHByb2dyYW0uIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGxvZ2ljIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTk0OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIwOjE0OjU3LjY5ODk2MDYzOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5MDE2NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX21lbV9hY2Nlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTU1PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDItICogY2FuIGJlOiBQVFJfVE9fTUFQX1ZBTFVFLCBQVFJfVE9fQ1RYLCBQVFJfVE9fU1RBQ0ssIFBUUl9UT19TT0NLRVQuIFRoZXNlIGFyZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDM6ICogZm91ciBwb2ludGVyIHR5cGVzIHJlY29nbml6ZWQgYnkgY2hlY2tfbWVtX2FjY2VzcygpIGZ1bmN0aW9uLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQtICpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04NDc9c3RhdGljIGJvb2wgaXNfZHlucHRyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTctXFx0ICogZXJyb3IgYmVjYXVzZSB0aGlzIGp1c3QgbWVhbnMgdGhlIHN0YWNrIHN0YXRlIGhhc24ndCBiZWVuIHVwZGF0ZWQgeWV0Llxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTg6XFx0ICogV2Ugd2lsbCBkbyBjaGVja19tZW1fYWNjZXNzIHRvIGNoZWNrIGFuZCB1cGRhdGUgc3RhY2sgYm91bmRzIGxhdGVyLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTktXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAwMz1zdGF0aWMgYm9vbCBpc19pdGVyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA5LVxcdC8qIEZvciAtRVJBTkdFIChpLmUuIHNwaSBub3QgZmFsbGluZyBpbnRvIGFsbG9jYXRlZCBzdGFjayBzbG90cyksIHdlXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMTA6XFx0ICogd2lsbCBkbyBjaGVja19tZW1fYWNjZXNzIHRvIGNoZWNrIGFuZCB1cGRhdGUgc3RhY2sgYm91bmRzIGxhdGVyLCBzb1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDExLVxcdCAqIHJldHVybiB0cnVlIGZvciB0aGF0IGNhc2UuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0OD1zdGF0aWMgYm9vbCBpc19pcnFfZmxhZ19yZWdfdmFsaWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1NC1cXHQvKiBGb3IgLUVSQU5HRSAoaS5lLiBzcGkgbm90IGZhbGxpbmcgaW50byBhbGxvY2F0ZWQgc3RhY2sgc2xvdHMpLCB3ZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTU1OlxcdCAqIHdpbGwgZG8gY2hlY2tfbWVtX2FjY2VzcyB0byBjaGVjayBhbmQgdXBkYXRlIHN0YWNrIGJvdW5kcyBsYXRlciwgc29cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE1Ni1cXHQgKiByZXR1cm4gdHJ1ZSBmb3IgdGhhdCBjYXNlLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM0MTg9c3RhdGljIHZvaWQgc2NydWJfc3BlY2lhbF9zbG90KHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQzMC0vKiBjaGVja19zdGFja197cmVhZCx3cml0ZX1fZml4ZWRfb2ZmIGZ1bmN0aW9ucyB0cmFjayBzcGlsbC9maWxsIG9mIHJlZ2lzdGVycyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzQzMTogKiBzdGFjayBib3VuZGFyeSBhbmQgYWxpZ25tZW50IGFyZSBjaGVja2VkIGluIGNoZWNrX21lbV9hY2Nlc3MoKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDMyLSAqL1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQxNTA9c3RhdGljIGludCBjaGVja19tYXBfYWNjZXNzX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MTcxLS8qIGNoZWNrIHJlYWQvd3JpdGUgaW50byBtZW1vcnkgcmVnaW9uIChlLmcuLCBtYXAgdmFsdWUsIHJpbmdidWYgc2FtcGxlLCBldGMpICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQxNzI6c3RhdGljIGludCBfX2NoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDE3My1cXHRcXHRcXHQgICAgICBpbnQgb2ZmLCBpbnQgc2l6ZSwgdTMyIG1lbV9zaXplLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQyMTA9c3RhdGljIGludCBjaGVja19tZW1fcmVnaW9uX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQyMzMtXFx0fVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MjM0OlxcdGVyciA9IF9fY2hlY2tfbWVtX2FjY2VzcyhlbnYsIHJlZywgYXJnbm8sIHJlZ19zbWluKHJlZykgKyBvZmYsIHNpemUsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQyMzUtXFx0XFx0XFx0XFx0IG1lbV9zaXplLCB6ZXJvX3NpemVfYWxsb3dlZCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDI1MC1cXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQyNTE6XFx0ZXJyID0gX19jaGVja19tZW1fYWNjZXNzKGVudiwgcmVnLCBhcmdubywgcmVnX3VtYXgocmVnKSArIG9mZiwgc2l6ZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDI1Mi1cXHRcXHRcXHRcXHQgbWVtX3NpemUsIHplcm9fc2l6ZV9hbGxvd2VkKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00NjYxPXN0YXRpYyBpbnQgY2hlY2tfcGFja2V0X2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLCBpbnQgb2ZmLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ2NzQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ2NzU6XFx0LyogX19jaGVja19tZW1fYWNjZXNzIGhhcyBtYWRlIHN1cmUgXFxcIm9mZiArIHNpemUgLSAxXFxcIiBpcyB3aXRoaW4gdTE2Llxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Njc2LVxcdCAqIHJlZ191bWF4KHJlZykgY2FuJ3QgYmUgYmlnZ2VyIHRoYW4gTUFYX1BBQ0tFVF9PRkYgd2hpY2ggaXMgMHhmZmZmLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Njc3LVxcdCAqIG90aGVyd2lzZSBmaW5kX2dvb2RfcGt0X3BvaW50ZXJzIHdvdWxkIGhhdmUgcmVmdXNlZCB0byBzZXQgcmFuZ2UgaW5mb1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0Njc4OlxcdCAqIHRoYXQgX19jaGVja19tZW1fYWNjZXNzIHdvdWxkIGhhdmUgcmVqZWN0ZWQgdGhpcyBwa3QgYWNjZXNzLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Njc5LVxcdCAqIFRoZXJlZm9yZSwgXFxcIm9mZiArIHJlZ191bWF4KHJlZykgKyBzaXplIC0gMVxcXCIgd29uJ3Qgb3ZlcmZsb3cgdTMyLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYwNjE9c3RhdGljIHZvaWQgYWRkX3NjYWxhcl90b19yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsIHM2NCB2YWwpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjA4My0gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA4NDpzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MDg1LVxcdFxcdFxcdCAgICBpbnQgb2ZmLCBpbnQgYnBmX3NpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHQsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjM1MT1zdGF0aWMgaW50IGNoZWNrX2xvYWRfbWVtKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzgzLVxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Mzg0OlxcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXFx1MDAzZWluc25faWR4LCByZWdzICsgaW5zbi1cXHUwMDNlc3JjX3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi1cXHUwMDNlc3JjX3JlZyksIGluc24tXFx1MDAzZW9mZixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM4NS1cXHRcXHRcXHQgICAgICAgQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSksIEJQRl9SRUFELCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzOTQ9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MjMtXFx0LyogQ2hlY2sgaWYgKGRzdF9yZWcgKyBvZmYpIGlzIHdyaXRlYWJsZS4gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQyNDpcXHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCwgcmVncyArIGluc24tXFx1MDAzZWRzdF9yZWcsIGFyZ25vX2Zyb21fcmVnKGluc24tXFx1MDAzZWRzdF9yZWcpLCBpbnNuLVxcdTAwM2VvZmYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MjUtXFx0XFx0XFx0ICAgICAgIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpLCBCUEZfV1JJVEUsIGluc24tXFx1MDAzZXNyY19yZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjQzMj1zdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTAxLVxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTAyOlxcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXFx1MDAzZWluc25faWR4LCBkc3RfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVxcdTAwM2Vkc3RfcmVnKSwgaW5zbi1cXHUwMDNlb2ZmLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTAzLVxcdFxcdFxcdCAgICAgICBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSwgQlBGX1JFQUQsIC0xLCB0cnVlLCBmYWxzZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1MDQtXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgbG9hZF9yZWcgXFx1MDAzZT0gMClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjUwNTpcXHRcXHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCwgZHN0X3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi1cXHUwMDNlZHN0X3JlZyksXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1MDYtXFx0XFx0XFx0XFx0ICAgICAgIGluc24tXFx1MDAzZW9mZiwgQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSksXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUxNi1cXHQvKiBDaGVjayB3aGV0aGVyIHdlIGNhbiB3cml0ZSBpbnRvIHRoZSBzYW1lIG1lbW9yeS4gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjUxNzpcXHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCwgZHN0X3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi1cXHUwMDNlZHN0X3JlZyksIGluc24tXFx1MDAzZW9mZixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUxOC1cXHRcXHRcXHQgICAgICAgQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSksIEJQRl9XUklURSwgLTEsIHRydWUsIGZhbHNlKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03MjQ4PXN0YXRpYyBpbnQgcHJvY2Vzc19keW5wdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcyODQtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJQRl9EWU5QVFJfU0laRTsgaSArPSA4KSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjcyODU6XFx0XFx0XFx0ZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGluc25faWR4LCByZWcsIGFyZ25vLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03Mjg2LVxcdFxcdFxcdFxcdFxcdCAgICAgICBpLCBCUEZfRFcsIEJQRl9XUklURSwgLTEsIGZhbHNlLCBmYWxzZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzM2OD1zdGF0aWMgaW50IHByb2Nlc3NfaXRlcl9hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubywgaW50IGluc25faWR4LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc0MDUtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3Nsb3RzICogODsgaSArPSBCUEZfUkVHX1NJWkUpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzQwNjpcXHRcXHRcXHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgaW5zbl9pZHgsIHJlZywgYXJnbm8sXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc0MDctXFx0XFx0XFx0XFx0XFx0ICAgICAgIGksIEJQRl9EVywgQlBGX1dSSVRFLCAtMSwgZmFsc2UsIGZhbHNlKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDE3NT1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDI2MS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWV0YS5hY2Nlc3Nfc2l6ZTsgaSsrKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMjYyOlxcdFxcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBpbnNuX2lkeCwgcmVncyArIG1ldGEucmVnbm8sIGFyZ25vX2Zyb21fcmVnKG1ldGEucmVnbm8pLCBpLCBCUEZfQixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAyNjMtXFx0XFx0XFx0XFx0ICAgICAgIEJQRl9XUklURSwgLTEsIGZhbHNlLCBmYWxzZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA1MDktXFx0XFx0XFx0XFx0ICogaXQgd2lsbCBjb25mdXNlIHRoZSBjaGVjayBvZiBQVFJfVE9fQlRGX0lEIGluXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNTEwOlxcdFxcdFxcdFxcdCAqIGNoZWNrX21lbV9hY2Nlc3MoKS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA1MTEtXFx0XFx0XFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE0Mzg9c3RhdGljIGludCBwcm9jZXNzX2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0NjUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNDY2OlxcdFxcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXFx1MDAzZWluc25faWR4LCByZWcsIGFyZ25vLCAwLCBCUEZfRFcsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNDY3LVxcdFxcdFxcdFxcdCAgICAgICBCUEZfV1JJVEUsIC0xLCBmYWxzZSwgZmFsc2UpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MjQxPXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI3OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTcyNzk6XFx0XFx0ZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGVudi1cXHUwMDNlaW5zbl9pZHgsIGN1cl9yZWdzKGVudikgKyBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVxcdTAwM2Vkc3RfcmVnKSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyODAtXFx0XFx0XFx0XFx0ICAgICAgIGluc24tXFx1MDAzZW9mZiwgQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDIwOjE0OjU4LjIxNzk4NDgxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk0MTM4ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHRoZSBmdW5jdGlvbiBgY2hlY2tfbWVtX2FjY2Vzc2AgaXMgZGVmaW5pdGVseSB0aGUga2V5IHN5bWJvbCB0byBmb2N1cyBvbiBoZXJlLCB0aGF0J3MgYSBnb29kIGZpbmQuIExldCdzIGdldCB0aGlzIGFuYWx5c2lzIGRvd24gY29uY2lzZWx5LlxuXG5UaGUgcGF0Y2gncyBvdmVyYWxsIHdvcnRoaW5lc3MgZm9yIGZ1enppbmcgaXMgZGVmaW5pdGVseSAqdHJ1ZSouIFRoZSBpbXBvcnRhbnQgZnVuY3Rpb24gc3ltYm9scyB0aGF0IGFyZSBtb2RpZmllZCwgYWNjb3JkaW5nIHRvIG15IHJldmlldyBvZiB0aGUgY2hhbmdlcywgYXJlIGBicGZfaW50X2ppdF9jb21waWxlYCwgYGJwZl9kb19taXNjX2ZpeHVwc2AsIGFuZCAqZXNwZWNpYWxseSogYGNoZWNrX21lbV9hY2Nlc3NgLlxuXG5Ob3csIHRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBCUEZfSklUX0tBU0FOYCwgZW5hYmxpbmcgS0FTQU4gc3VwcG9ydCBmb3IgdGhlIEJQRiBKSVQgY29tcGlsZXIgb24geDg2XzY0LCB3aGljaCBpcyB1bmRlbmlhYmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGNvcmUga2VybmVsIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGl0J3MgYSBnb29kIGNoYW5nZSB0byBmdXp6LlxuXG5BaCwgYnV0IGhvbGQgb24sIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIGxpc3RpbmcgZXhjZXNzaXZlbHkgZ2VuZXJpYyBjb25maWd1cmF0aW9ucywgYXMgd2UgcHJvYmFibHkgaGF2ZSB0aG9zZSBlbmFibGVkIGJ5IGRlZmF1bHQuIFNvLCB0aGF0IG1lYW5zIEkgbmVlZCB0byByZWZpbmUgdGhlIGNvbmZpZyBsaXN0LiBgS0FTQU5fR0VORVJJQ2AsIGBLQVNBTl9WTUFMTE9DYCwgYEJQRl9KSVRgLCBhbmQgYEtBU0FOYCBhcmUgYWxsIGJyb2FkIGFuZCBsaWtlbHkgYWxyZWFkeSBlbmFibGVkLCBiYXNlZCBvbiBteSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCdzIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLlxuXG5TbywgSSBuZWVkIHRvIGZvY3VzICpzcGVjaWZpY2FsbHkqIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGlyZWN0bHkgaW1wYWN0IHRoZSBtb2RpZmllZCBjb2RlLiBHb29kLCBJIHNlZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAqaXMqIGBCUEZfSklUX0tBU0FOYC4gVGhhdCBhcHBlYXJzIHRvIGJlIHN1ZmZpY2llbnQuIFRoYXQncyB0aGUgbmV3IGNvbmZpZyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaC5cblxuQWxyaWdodCwgdGhhdCBjb3ZlcnMgZXZlcnl0aGluZy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMjE3LCJPdXRwdXRUb2tlbnMiOjEwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQyMDoxNTowNC4wMTIxMjc3MzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc3NDcwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRfS0FTQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfZG9fbWlzY19maXh1cHNcIixcbiAgICBcImNoZWNrX21lbV9hY2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEtBU0FOIHN1cHBvcnQgdG8gdGhlIEJQRiBKSVQgY29tcGlsZXIgb24geDg2XzY0LCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRfS0FTQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfZG9fbWlzY19maXh1cHNcIixcbiAgICBcImNoZWNrX21lbV9hY2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEtBU0FOIHN1cHBvcnQgdG8gdGhlIEJQRiBKSVQgY29tcGlsZXIgb24geDg2XzY0LCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjnh2m[1] Phase: Succeeded StartedAt: 2026-07-08 20:15:16 +0000 UTC FinishedAt: 2026-07-08 20:15:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 20:15:16 +0000 UTC FinishedAt: 2026-07-08 20:15:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[2] Phase: Running StartedAt: 2026-07-08 20:15:16 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-07-08 20:15:16 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-08 20:15:16 +0000 UTC FinishedAt: 2026-07-08 20:15:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-08 20:15:16 +0000 UTC FinishedAt: 2026-07-08 20:15:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjnh2m/series-workflowjnh2m-convert-artifact-1834733209/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-08 20:15:26 +0000 UTC FinishedAt: 2026-07-08 20:50:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-08 20:15:26 +0000 UTC FinishedAt: 2026-07-08 20:50:53 +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:*0e72c357-0628-4411-a0ca-b40e4a3b48f1,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-workflowjnh2m/series-workflowjnh2m-convert-artifact-1834733209/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": "627b4ad6-4981-4a89-9b00-a99ce497d51a", "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-workflowjnh2m/series-workflowjnh2m-build-action-1716843063/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-08 20:15:26 +0000 UTC FinishedAt: 2026-07-08 20:50:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0e72c357-0628-4411-a0ca-b40e4a3b48f1,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-workflowjnh2m/series-workflowjnh2m-convert-artifact-1834733209/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": "627b4ad6-4981-4a89-9b00-a99ce497d51a", "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-workflowjnh2m/series-workflowjnh2m-build-action-1716843063/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-08 20:50:53 +0000 UTC FinishedAt: 2026-07-08 20:50:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-08 20:50:53 +0000 UTC FinishedAt: 2026-07-08 20:50:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-08 20:50:53 +0000 UTC FinishedAt: 2026-07-08 20:51:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-08 20:50:53 +0000 UTC FinishedAt: 2026-07-08 20:51:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjnh2m/series-workflowjnh2m-convert-artifact-437450092/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-08 20:51:03 +0000 UTC FinishedAt: 2026-07-08 20:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-08 20:51:03 +0000 UTC FinishedAt: 2026-07-08 20:53:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*627b4ad6-4981-4a89-9b00-a99ce497d51a,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-workflowjnh2m/series-workflowjnh2m-build-action-1716843063/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-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-08 20:53:26 +0000 UTC FinishedAt: 2026-07-08 20:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-08 20:53:26 +0000 UTC FinishedAt: 2026-07-08 20:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-08 20:53:26 +0000 UTC FinishedAt: 2026-07-08 21:20:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-08 20:53:26 +0000 UTC FinishedAt: 2026-07-08 21:20:22 +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:*0e72c357-0628-4411-a0ca-b40e4a3b48f1,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-workflowjnh2m/series-workflowjnh2m-convert-artifact-437450092/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": "10a6a834-294a-4cf5-87c1-9ef7f3abf304", "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-workflowjnh2m/series-workflowjnh2m-build-action-681167880/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-08 20:53:26 +0000 UTC FinishedAt: 2026-07-08 21:20:19 +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:*0e72c357-0628-4411-a0ca-b40e4a3b48f1,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-workflowjnh2m/series-workflowjnh2m-convert-artifact-437450092/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": "10a6a834-294a-4cf5-87c1-9ef7f3abf304", "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-workflowjnh2m/series-workflowjnh2m-build-action-681167880/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-08 21:20:22 +0000 UTC FinishedAt: 2026-07-08 21:20:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-08 21:20:22 +0000 UTC FinishedAt: 2026-07-08 21:20:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Running StartedAt: 2026-07-08 21:20:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnh2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups","check_mem_access"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ee1bcf8271eb2e1d191bf97348ddf823c6071fa9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT_KASAN"],"series_id":"31571c46-133b-4a27-b854-eb01f403d79f","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Running StartedAt: 2026-07-08 21:20:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*10a6a834-294a-4cf5-87c1-9ef7f3abf304,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-workflowjnh2m/series-workflowjnh2m-build-action-681167880/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil