Name: series-workflowv28bj Phase: Succeeded StartedAt: 2026-09-02 13:07:47 +0000 UTC FinishedAt: 2026-09-02 17:42:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[0] Phase: Succeeded StartedAt: 2026-09-02 13:07:47 +0000 UTC FinishedAt: 2026-09-02 14:02:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 13:07:47 +0000 UTC FinishedAt: 2026-09-02 14:02:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c300d74d44c27064768a8dea90e67684b00681de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c300d74d44c27064768a8dea90e67684b00681de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "NET" ], "series_id": "cbfca5ca-eca7-4e1b-90cf-a55edf8b3395" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_recv", "io_recvmsg", "io_buffer_get_list", "io_kbuf_commit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fcmVjdm1zZyYjMzQ7LAogICAgJiMzNDtpb19idWZmZXJfZ2V0X2xpc3QmIzM0OywKICAgICYjMzQ7aW9fa2J1Zl9jb21taXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYnVmZmVyIG1hbmFnZW1lbnQgYW5kIGFjY291bnRpbmcgbG9naWMgZm9yIGJ1bmRsZWQgYW5kIHJpbmcgYnVmZmVyIG5ldHdvcmsgcmVjZWl2ZXMgaW4gaW9fdXJpbmcgKGlvX3JlY3YgYW5kIGlvX3JlY3ZfZmluaXNoKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIGBzZWwuYnVmX2xpc3RgIGlzIHByb3Blcmx5IHJldHJpZXZlZCB3aGVuIGBSRVFfRl9CVUZGRVJfUklOR2AgaXMgYWN0aXZlLCBjb3JyZWN0cyB0aGUgYnVmZmVyIGNvdW50IHBhc3NlZCB0byBgaW9fYnVuZGxlX25idWZzKClgIHVzaW5nIGBzZWwtXHUwMDNldmFsYCwgYW5kIHJlbW92ZXMgYW4gaW5hcHByb3ByaWF0ZSBidWZmZXIgY29tbWl0IG9uIHJlY3ljbGUuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGF0aHMuIFBvdGVudGlhbCBlcnJvcnMgd291bGQgaW52b2x2ZSBidWZmZXIgcmluZyBpbmRleCB0cmFja2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9fdXJpbmcgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGJ1ZmZlciBsaXN0IHNlbGVjdGlvbiwgYnVmZmVyIGNvbW1pdHMsIGFuZCBidWZmZXIgYnVuZGxlIGhhbmRsaW5nIGluIHJlY2VpdmUgb3BlcmF0aW9ucyAoSU9SSU5HX09QX1JFQ1YgLyBJT1JJTkdfT1BfUkVDVk1TRykuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU0ZGIzOTE4MGI5YjkzMGVjMDAzOTcxZGVjMzZiNWY3NTQzN2YzMWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDEzOjUzOjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2tidWYuYyBiL2lvX3VyaW5nL2tidWYuY1xuaW5kZXggN2MzMDkxNzNkZDE5NC4uYzRiYWU4ZjAwMTczZSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2tidWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcva2J1Zi5jXG5AQCAtNzYsOCAmIzQzOzc2LDggQEAgYm9vbCBpb19rYnVmX2NvbW1pdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqaW9fYnVmZmVyX2dldF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLVx0XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IGJnaWQpXG4mIzQzO3N0cnVjdCBpb19idWZmZXJfbGlzdCAqaW9fYnVmZmVyX2dldF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgYmdpZClcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKTtcbiBcbmRpZmYgLS1naXQgYS9pb191cmluZy9rYnVmLmggYi9pb191cmluZy9rYnVmLmhcbmluZGV4IDQwMTc3M2UxZWY4MDUuLjcwNzlmMmRlYzllMGUgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9rYnVmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2tidWYuaFxuQEAgLTcxLDYgJiM0Mzs3MSw4IEBAIHN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGJ1Zl9ncm91cCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbiBpbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuIFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG4mIzQzO3N0cnVjdCBpb19idWZmZXJfbGlzdCAqaW9fYnVmZmVyX2dldF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgYmdpZCk7XG4gaW50IGlvX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4gXHRcdCAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwpO1xuIHZvaWQgaW9fZGVzdHJveV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTtcbmRpZmYgLS1naXQgYS9pb191cmluZy9uZXQuYyBiL2lvX3VyaW5nL25ldC5jXG5pbmRleCBmYmU3MTlkODZjNDYzLi5iZmY0NTE0YzAxMDBjIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL25ldC5jXG5AQCAtNDgzLDggJiM0Mzs0ODMsNiBAQCBzdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLCBpbnQgbGVuKVxuIHtcbiBcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9OT19SRUNZQ0xFO1xuLVx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpXG4tXHRcdGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpO1xuIFx0cmV0dXJuIElPVV9SRVRSWTtcbiB9XG4gXG5AQCAtODc3LDcgJiM0Mzs4NzUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4gXHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHtcbiBcdFx0c2l6ZV90IHRoaXNfcmV0ID0gc2VsLVx1MDAzZXZhbCAtIHNyLVx1MDAzZWRvbmVfaW87XG4gXG4tXHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLVx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgdGhpc19yZXQpKTtcbiYjNDM7XHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLVx1MDAzZWJ1Zl9saXN0LFxuJiM0MztcdFx0XHRcdCAgICAgICBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVx1MDAzZXZhbCkpO1xuIFx0XHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxuIFx0XHRcdGNmbGFncyA9IHJlcS1cdTAwM2VjcWUuZmxhZ3MgfCAoY2ZsYWdzIFx1MDAyNiBDUUVfRl9NQVNLKTtcbiBcdFx0aWYgKHNyLVx1MDAzZW1zaG90X2xlbiBcdTAwMjZcdTAwMjYgc2VsLVx1MDAzZXZhbCBcdTAwM2U9IHNyLVx1MDAzZW1zaG90X2xlbilcbkBAIC0xMjIxLDYgJiM0MzsxMjIwLDggQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiBcdFx0XHRnb3RvIG91dF9mcmVlO1xuIFx0XHR9XG4gXHRcdHNyLVx1MDAzZWJ1ZiA9IE5VTEw7XG4mIzQzO1x0fSBlbHNlIGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0JVRkZFUl9SSU5HKSB7XG4mIzQzO1x0XHRzZWwuYnVmX2xpc3QgPSBpb19idWZmZXJfZ2V0X2xpc3QocmVxLVx1MDAzZWN0eCwgc3ItXHUwMDNlYnVmX2dyb3VwKTtcbiBcdH1cbiBcbiBcdGttc2ctXHUwMDNlbXNnLm1zZ19mbGFncyA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fcmVjdiYjMzQ7LAogICAgJiMzNDtpb19yZWN2bXNnJiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcl9nZXRfbGlzdCYjMzQ7LAogICAgJiMzNDtpb19rYnVmX2NvbW1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvX3VyaW5nIG5ldHdvcmtpbmcgbG9naWMsIHNwZWNpZmljYWxseSBidWZmZXIgbGlzdCBzZWxlY3Rpb24sIGJ1ZmZlciBjb21taXRzLCBhbmQgYnVmZmVyIGJ1bmRsZSBoYW5kbGluZyBpbiByZWNlaXZlIG9wZXJhdGlvbnMgKElPUklOR19PUF9SRUNWIC8gSU9SSU5HX09QX1JFQ1ZNU0cpLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNGRiMzkxODBiOWI5MzBlYzAwMzk3MWRlYzM2YjVmNzU0MzdmMzFjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAxMzo1Mzo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2tidWYuYyBiL2lvX3VyaW5nL2tidWYuYwppbmRleCA3YzMwOTE3M2RkMTk0Li5jNGJhZThmMDAxNzNlIDEwMDY0NAotLS0gYS9pb191cmluZy9rYnVmLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcva2J1Zi5jCkBAIC03Niw4ICYjNDM7NzYsOCBAQCBib29sIGlvX2tidWZfY29tbWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqaW9fYnVmZmVyX2dldF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LAotCQkJCQkJCXVuc2lnbmVkIGludCBiZ2lkKQomIzQzO3N0cnVjdCBpb19idWZmZXJfbGlzdCAqaW9fYnVmZmVyX2dldF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LAomIzQzOwkJCQkJICB1bnNpZ25lZCBpbnQgYmdpZCkKIHsKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7Y3R4LSZndDt1cmluZ19sb2NrKTsKIApkaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5oIGIvaW9fdXJpbmcva2J1Zi5oCmluZGV4IDQwMTc3M2UxZWY4MDUuLjcwNzlmMmRlYzllMGUgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2tidWYuaAomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9rYnVmLmgKQEAgLTcxLDYgJiM0Mzs3MSw4IEBAIHN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sCiAJCQkJICB1bnNpZ25lZCBidWZfZ3JvdXAsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7CiBpbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLAogCQkgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7CiYjNDM7c3RydWN0IGlvX2J1ZmZlcl9saXN0ICppb19idWZmZXJfZ2V0X2xpc3Qoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsCiYjNDM7CQkJCQkgIHVuc2lnbmVkIGludCBiZ2lkKTsKIGludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLAogCQkgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsKTsKIHZvaWQgaW9fZGVzdHJveV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTsKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL25ldC5jIGIvaW9fdXJpbmcvbmV0LmMKaW5kZXggZmJlNzE5ZDg2YzQ2My4uYmZmNDUxNGMwMTAwYyAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvbmV0LmMKQEAgLTQ4Myw4ICYjNDM7NDgzLDYgQEAgc3RhdGljIGludCBpb19uZXRfa2J1Zl9yZWN5bGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsCiAJCQkgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLCBpbnQgbGVuKQogewogCXJlcS0mZ3Q7ZmxhZ3MgfD0gUkVRX0ZfQkxfTk9fUkVDWUNMRTsKLQlpZiAocmVxLSZndDtmbGFncyAmYW1wOyBSRVFfRl9CVUZGRVJTX0NPTU1JVCkKLQkJaW9fa2J1Zl9jb21taXQocmVxLCBibCwgbGVuLCBpb19idW5kbGVfbmJ1ZnMoa21zZywgbGVuKSk7CiAJcmV0dXJuIElPVV9SRVRSWTsKIH0KIApAQCAtODc3LDcgJiM0Mzs4NzUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsCiAJaWYgKHNyLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7CiAJCXNpemVfdCB0aGlzX3JldCA9IHNlbC0mZ3Q7dmFsIC0gc3ItJmd0O2RvbmVfaW87CiAKLQkJY2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIHRoaXNfcmV0LCBzZWwtJmd0O2J1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgdGhpc19yZXQpKTsKJiM0MzsJCWNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLSZndDtidWZfbGlzdCwKJiM0MzsJCQkJICAgICAgIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtJmd0O3ZhbCkpOwogCQlpZiAoc3ItJmd0O2ZsYWdzICZhbXA7IElPUklOR19SRUNWX1JFVFJZKQogCQkJY2ZsYWdzID0gcmVxLSZndDtjcWUuZmxhZ3MgfCAoY2ZsYWdzICZhbXA7IENRRV9GX01BU0spOwogCQlpZiAoc3ItJmd0O21zaG90X2xlbiAmYW1wOyZhbXA7IHNlbC0mZ3Q7dmFsICZndDs9IHNyLSZndDttc2hvdF9sZW4pCkBAIC0xMjIxLDYgJiM0MzsxMjIwLDggQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KIAkJc3ItJmd0O2J1ZiA9IE5VTEw7CiYjNDM7CX0gZWxzZSBpZiAocmVxLSZndDtmbGFncyAmYW1wOyBSRVFfRl9CVUZGRVJfUklORykgewomIzQzOwkJc2VsLmJ1Zl9saXN0ID0gaW9fYnVmZmVyX2dldF9saXN0KHJlcS0mZ3Q7Y3R4LCBzci0mZ3Q7YnVmX2dyb3VwKTsKIAl9CiAKIAlrbXNnLSZndDttc2cubXNnX2ZsYWdzID0gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyNwoJCQkJCQkJb3V0cHV0OiAxMDYKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJT19VUklORyBOZXR3b3JrIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgYW5kIHRoZWlyIGltcGFjdC4gSSBzZWUgY2hhbmdlcyBpbiBgaW9fdXJpbmcva2J1Zi5jYCwgYGlvX3VyaW5nL2tidWYuaGAsIGFuZCBgaW9fdXJpbmcvbmV0LmNgLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBuZXR3b3JrIG9wZXJhdGlvbnMsIGxpa2VseSByZWxhdGVkIHRvIHJlY2VpdmUgb3BlcmF0aW9ucyB3aXRoIGJ1ZmZlciBidW5kbGVzIG9yIHRoZSBidWZmZXIgcmluZy4KClRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3BlY2lmaWNzLCBJJiMzOTtsbCBsZXZlcmFnZSBteSB1c3VhbCB0b29sa2l0IOKAkyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHRvIG1ldGljdWxvdXNseSBpbnNwZWN0IGBpb191cmluZy9uZXQuY2AgYW5kIGBpb191cmluZy9rYnVmLmNgLiBJJiMzOTtsbCBhbHNvIGNoZWNrIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIGluY2x1ZGUgZmlsZXMgZm9yIGFueSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBuZXR3b3JrIG9wZXJhdGlvbnMgd2l0aCB0aGUgY2hhbmdlcyB0byBrYnVmIHN0cnVjdHVyZXMuIFRoaXMgc2hvdWxkIHRlbGwgbWUgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB0aGUgaW50ZW50IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzU6XHRcdFx0bmJ1ZnMmIzQzOyYjNDM7O1xuIDQ3NjpcdFx0XHRyZXQgLT0gdGhpc19sZW47XG4gNDc3Olx0XHR9IHdoaWxlIChyZXQpO1xuIDQ3ODpcdFxuIDQ3OTpcdFx0cmV0dXJuIG5idWZzO1xuIDQ4MDpcdH1cbiA0ODE6XHRcbiA0ODI6XHRzdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbiA0ODM6XHRcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLCBpbnQgbGVuKVxuIDQ4NDpcdHtcbiA0ODU6XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9OT19SRUNZQ0xFO1xuIDQ4NjpcdFx0cmV0dXJuIElPVV9SRVRSWTtcbiA0ODc6XHR9XG4gNDg4Olx0XG4gNDg5Olx0c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIDQ5MDpcdFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuIDQ5MTpcdFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwpXG4gNDkyOlx0e1xuIDQ5MzpcdFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcbiA0OTQ6XHRcdGJvb2wgYnVuZGxlX2ZpbmlzaGVkID0gc2VsLVx1MDAzZXZhbCBcdTAwM2M9IDA7XG4gNDk1Olx0XHR1bnNpZ25lZCBpbnQgY2ZsYWdzO1xuIDQ5NjpcdFxuIDQ5NzpcdFx0aWYgKCEoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpKSB7XG4gNDk4Olx0XHRcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0KTtcbiA0OTk6XHRcdFx0Z290byBmaW5pc2g7XG4gNTAwOlx0XHR9XG4gNTAxOlx0XG4gNTAyOlx0XHRjZmxhZ3MgPSBpb19wdXRfa2J1ZnMocmVxLCBzZWwtXHUwMDNldmFsLCBzZWwtXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXHUwMDNldmFsKSk7XG4gNTAzOlx0XG4gNTA0Olx0XHQvKlxuIDUwNTpcdFx0ICogRG9uJiMzOTt0IHN0YXJ0IG5ldyBidW5kbGVzIGlmIHRoZSBidWZmZXIgbGlzdCBpcyBlbXB0eSwgb3IgaWYgdGhlXG4gNTA2Olx0XHQgKiBjdXJyZW50IG9wZXJhdGlvbiBuZWVkZWQgdG8gZ28gdGhyb3VnaCBwb2xsaW5nIHRvIGNvbXBsZXRlLlxuIDUwNzpcdFx0ICovXG4gNTA4Olx0XHRpZiAoYnVuZGxlX2ZpbmlzaGVkIHx8IHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgKFJFUV9GX0JMX0VNUFRZIHwgUkVRX0ZfUE9MTEVEKSlcbiA1MDk6XHRcdFx0Z290byBmaW5pc2g7XG4gNTEwOlx0XG4gNTExOlx0XHQvKlxuIDUxMjpcdFx0ICogRmlsbCBDUUUgZm9yIHRoaXMgcmVjZWl2ZSBhbmQgc2VlIGlmIHdlIHNob3VsZCBrZWVwIHRyeWluZyB0b1xuIDUxMzpcdFx0ICogcmVjZWl2ZSBmcm9tIHRoaXMgc29ja2V0LlxuIDUxNDpcdFx0ICovXG4gNTE1Olx0XHRpZiAoaW9fcmVxX3Bvc3RfY3FlKHJlcSwgc2VsLVx1MDAzZXZhbCwgY2ZsYWdzIHwgSU9SSU5HX0NRRV9GX01PUkUpKSB7XG4gNTE2Olx0XHRcdGlvX21zaG90X3ByZXBfcmV0cnkocmVxLCBrbXNnKTtcbiA1MTc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDUxODpcdFx0fVxuIDUxOTpcdFxuIDUyMDpcdFx0LyogT3RoZXJ3aXNlIHN0b3AgYnVuZGxlIGFuZCB1c2UgdGhlIGN1cnJlbnQgcmVzdWx0LiAqL1xuIDUyMTpcdGZpbmlzaDpcbiA1MjI6XHRcdGlvX3JlcV9zZXRfcmVzKHJlcSwgc2VsLVx1MDAzZXZhbCwgY2ZsYWdzKTtcbiA1MjM6XHRcdHNlbC1cdTAwM2V2YWwgPSBJT1VfQ09NUExFVEU7XG4gNTI0Olx0XHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NzA6XHRcdFx0XHRzci1cdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9NU0hPVF9ET05FO1xuIDg3MTpcdFx0XHRcdG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcbiA4NzI6XHRcdFx0fVxuIDg3MzpcdFx0fVxuIDg3NDpcdFxuIDg3NTpcdFx0aWYgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XG4gODc2Olx0XHRcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cdTAwM2V2YWwgLSBzci1cdTAwM2Vkb25lX2lvO1xuIDg3NzpcdFxuIDg3ODpcdFx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCxcbiA4Nzk6XHRcdFx0XHRcdCAgICAgICBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVx1MDAzZXZhbCkpO1xuIDg4MDpcdFx0XHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxuIDg4MTpcdFx0XHRcdGNmbGFncyA9IHJlcS1cdTAwM2VjcWUuZmxhZ3MgfCAoY2ZsYWdzIFx1MDAyNiBDUUVfRl9NQVNLKTtcbiA4ODI6XHRcdFx0aWYgKHNyLVx1MDAzZW1zaG90X2xlbiBcdTAwMjZcdTAwMjYgc2VsLVx1MDAzZXZhbCBcdTAwM2U9IHNyLVx1MDAzZW1zaG90X2xlbilcbiA4ODM6XHRcdFx0XHRzci1cdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9NU0hPVF9DQVA7XG4gODg0Olx0XHRcdC8qIGJ1bmRsZSB3aXRoIG5vIG1vcmUgaW1tZWRpYXRlIGJ1ZmZlcnMsIHdlJiMzOTtyZSBkb25lICovXG4gODg1Olx0XHRcdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0JMX0VNUFRZKVxuIDg4NjpcdFx0XHRcdGdvdG8gZmluaXNoO1xuIDg4NzpcdFx0XHQvKlxuIDg4ODpcdFx0XHQgKiBJZiBtb3JlIGlzIGF2YWlsYWJsZSBBTkQgaXQgd2FzIGEgZnVsbCB0cmFuc2ZlciwgcmV0cnkgYW5kXG4gODg5Olx0XHRcdCAqIGFwcGVuZCB0byB0aGlzIG9uZVxuIDg5MDpcdFx0XHQgKi9cbiA4OTE6XHRcdFx0aWYgKCEoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWX05PX1JFVFJZKSBcdTAwMjZcdTAwMjZcbiA4OTI6XHRcdFx0ICAgIGttc2ctXHUwMDNlbXNnLm1zZ19pbnEgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHRoaXNfcmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuIDg5MzpcdFx0XHQgICAgIWlvdl9pdGVyX2NvdW50KFx1MDAyNmttc2ctXHUwMDNlbXNnLm1zZ19pdGVyKSkge1xuIDg5NDpcdFx0XHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgPSBjZmxhZ3MgXHUwMDI2IH5DUUVfRl9NQVNLO1xuIDg5NTpcdFx0XHRcdHNyLVx1MDAzZWxlbiA9IGttc2ctXHUwMDNlbXNnLm1zZ19pbnE7XG4gODk2Olx0XHRcdFx0c3ItXHUwMDNlZG9uZV9pbyAmIzQzOz0gdGhpc19yZXQ7XG4gODk3Olx0XHRcdFx0c3ItXHUwMDNlZmxhZ3MgfD0gSU9SSU5HX1JFQ1ZfUkVUUlk7XG4gODk4Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDg5OTpcdFx0XHR9XG4gOTAwOlx0XHR9IGVsc2Uge1xuIDkwMTpcdFx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBzZWwtXHUwMDNldmFsLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuIDkwMjpcdFx0fVxuIDkwMzpcdFxuIDkwNDpcdFx0LypcbiA5MDU6XHRcdCAqIEZpbGwgQ1FFIGZvciB0aGlzIHJlY2VpdmUgYW5kIHNlZSBpZiB3ZSBzaG91bGQga2VlcCB0cnlpbmcgdG9cbiA5MDY6XHRcdCAqIHJlY2VpdmUgZnJvbSB0aGlzIHNvY2tldC5cbiA5MDc6XHRcdCAqL1xuIDkwODpcdFx0aWYgKChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkgXHUwMDI2XHUwMDI2ICFtc2hvdF9maW5pc2hlZCBcdTAwMjZcdTAwMjZcbiA5MDk6XHRcdCAgICBpb19yZXFfcG9zdF9jcWUocmVxLCBzZWwtXHUwMDNldmFsLCBjZmxhZ3MgfCBJT1JJTkdfQ1FFX0ZfTU9SRSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEwOlx0XHRcdHJlcS1cdTAwM2VmbGFncyBcdTAwMjY9IH5SRVFfRl9JTVBPUlRfQlVGRkVSO1xuMTIxMTpcdFx0fVxuMTIxMjpcdFxuMTIxMzpcdHJldHJ5X211bHRpc2hvdDpcbjEyMTQ6XHRcdHNlbC5idWZfbGlzdCA9IE5VTEw7XG4xMjE1Olx0XHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XG4xMjE2Olx0XHRcdHNlbC52YWwgPSBzci1cdTAwM2VsZW47XG4xMjE3Olx0XHRcdHJldCA9IGlvX3JlY3ZfYnVmX3NlbGVjdChyZXEsIGttc2csIFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xuMTIxODpcdFx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSkge1xuMTIxOTpcdFx0XHRcdGttc2ctXHUwMDNlbXNnLm1zZ19pbnEgPSAtMTtcbjEyMjA6XHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuMTIyMTpcdFx0XHR9XG4xMjIyOlx0XHRcdHNyLVx1MDAzZWJ1ZiA9IE5VTEw7XG4xMjIzOlx0XHR9IGVsc2UgaWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQlVGRkVSX1JJTkcpIHtcbjEyMjQ6XHRcdFx0c2VsLmJ1Zl9saXN0ID0gaW9fYnVmZmVyX2dldF9saXN0KHJlcS1cdTAwM2VjdHgsIHNyLVx1MDAzZWJ1Zl9ncm91cCk7XG4xMjI1Olx0XHR9XG4xMjI2Olx0XG4xMjI3Olx0XHRrbXNnLVx1MDAzZW1zZy5tc2dfZmxhZ3MgPSAwO1xuMTIyODpcdFx0a21zZy1cdTAwM2Vtc2cubXNnX2lucSA9IC0xO1xuMTIyOTpcdFxuMTIzMDpcdFx0aWYgKGZsYWdzIFx1MDAyNiBNU0dfV0FJVEFMTClcbjEyMzE6XHRcdFx0bWluX3JldCA9IGlvdl9pdGVyX2NvdW50KFx1MDAyNmttc2ctXHUwMDNlbXNnLm1zZ19pdGVyKTtcbjEyMzI6XHRcbjEyMzM6XHRcdHJldCA9IHNvY2tfcmVjdm1zZyhzb2NrLCBcdTAwMjZrbXNnLVx1MDAzZW1zZywgZmxhZ3MpO1xuMTIzNDpcdFx0aWYgKHJldCBcdTAwM2MgbWluX3JldCkge1xuMTIzNTpcdFx0XHRpZiAocmV0ID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IGZvcmNlX25vbmJsb2NrKSB7XG4xMjM2Olx0XHRcdFx0aW9fa2J1Zl9yZWN5Y2xlKHJlcSwgc2VsLmJ1Zl9saXN0LCBpc3N1ZV9mbGFncyk7XG4xMjM3Olx0XHRcdFx0cmV0dXJuIElPVV9SRVRSWTtcbjEyMzg6XHRcdFx0fVxuMTIzOTpcdFx0XHRpZiAocmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBpb19uZXRfcmV0cnkoc29jaywgZmxhZ3MpKSB7XG4xMjQwOlx0XHRcdFx0c3ItXHUwMDNlbGVuIC09IHJldDtcbjEyNDE6XHRcdFx0XHRzci1cdTAwM2VidWYgJiM0Mzs9IHJldDtcbjEyNDI6XHRcdFx0XHRzci1cdTAwM2Vkb25lX2lvICYjNDM7PSByZXQ7XG4xMjQzOlx0XHRcdFx0cmV0dXJuIGlvX25ldF9rYnVmX3JlY3lsZShyZXEsIHNlbC5idWZfbGlzdCwga21zZywgcmV0KTtcbjEyNDQ6XHRcdFx0fVxuMTI0NTpcdFx0XHRpZiAocmV0ID09IC1FUkVTVEFSVFNZUylcbjEyNDY6XHRcdFx0XHRyZXQgPSAtRUlOVFI7XG4xMjQ3Olx0XHRcdHJlcV9zZXRfZmFpbChyZXEpO1xuMTI0ODpcdFx0fSBlbHNlIGlmICgoZmxhZ3MgXHUwMDI2IE1TR19XQUlUQUxMKSBcdTAwMjZcdTAwMjYgKGttc2ctXHUwMDNlbXNnLm1zZ19mbGFncyBcdTAwMjYgKE1TR19UUlVOQyB8IE1TR19DVFJVTkMpKSkge1xuMTI0OTpcdG91dF9mcmVlOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqQ2hlY2tpbmcgTXkgQ29uZmlndXJhdGlvbjogaW9fdXJpbmcgYW5kIE5ldCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IG15IGNvbmZpZ3VyYXRpb25zIHNldCB1cCBjb3JyZWN0bHksIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgaW9fdXJpbmcgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbmV0d29yayBzdGFjay4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBpb191cmluZzsgdGhhdCYjMzk7cyB0aGUgY29yZS4gU28sIEkgbmVlZCB0byBvcGVuIHVwIEtjb25maWcgYW5kIHZlcmlmeSB0aGUgaW9fdXJpbmcgb3B0aW9ucyBhcmUgZW5hYmxlZCBhcyBJIGV4cGVjdC4gSXQmIzM5O3MgYWxsIGFib3V0IG1ha2luZyBzdXJlIHRoYXQgdGhlIGxvdy1sZXZlbCBjb21wb25lbnRzIGFyZSB3aXJlZCBpbiB0aGUgd2F5IHRoYXQgSSB0aGluayB0aGV5IGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9fVVJJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5NTI9Y29uZmlnIEFJT1xuLS1cbmluaXQvS2NvbmZpZy0xOTU5LVxuaW5pdC9LY29uZmlnOjE5NjA6Y29uZmlnIElPX1VSSU5HXG5pbml0L0tjb25maWctMTk2MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW5pdC9LY29uZmlnPTE5Njk9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xuLS1cbmluaXQvS2NvbmZpZy0xOTgxLVxuaW5pdC9LY29uZmlnOjE5ODI6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxuaW5pdC9LY29uZmlnLTE5ODMtXHR0cmlzdGF0ZSBcJiMzNDtFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODkwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgQnVpbGQgUHJvY2VzcyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBuZXQuY2AgYW5kIGBrYnVmLmNgIGFyZSBjb21waWxlZCBhbmQgbGlua2VkIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBwcm9qZWN0LiBUaGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGJ1aWxkIG1hZ2ljIHVzdWFsbHkgaGFwcGVucy4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIGFuZCBleGFtaW5lIGBpb191cmluZy9NYWtlZmlsZWAuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzcGVjaWZpYyBydWxlcyByZWxhdGVkIHRvIHRob3NlIHNvdXJjZSBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IHRoZXkmIzM5O3JlIGluY2x1ZGVkIGluIHRoZSBidWlsZCBwcm9jZXNzLCB3aGF0IGNvbXBpbGVyIGZsYWdzIGFyZSBiZWluZyB1c2VkLCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUsIGFuZCBob3cgdGhlIGZpbmFsIGV4ZWN1dGFibGVzIG9yIGxpYnJhcmllcyBhcmUgbGlua2VkLiBJdCYjMzk7cyBhbGwgYWJvdXQgdHJhY2luZyB0aGUgcGF0aCBmcm9tIHNvdXJjZSBjb2RlIHRvIHRoZSBmaW5hbCBhcnRpZmFjdCwgbWFraW5nIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBidWlsZCBzdGVwcyB0aG9yb3VnaGx5LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2Ugb2JqZWN0IGZpbGUgY3JlYXRpb24sIGxpbmtpbmcgdG8gbGlicmFyaWVzIChlaXRoZXIgc3RhdGljIG9yIGR5bmFtaWMpLCBhbmQgcGVyaGFwcyBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGZlYXR1cmUgZmxhZ3Mgb3IgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciBpb191cmluZ1xuICAgNDpcdFxuICAgNTpcdGlmZGVmIENPTkZJR19HQ09WX1BST0ZJTEVfVVJJTkdcbiAgIDY6XHRHQ09WX1BST0ZJTEUgOj0geVxuICAgNzpcdGVuZGlmXG4gICA4Olx0XG4gICA5Olx0b2JqLSQoQ09ORklHX0lPX1VSSU5HKVx0XHQmIzQzOz0gaW9fdXJpbmcubyBvcGRlZi5vIGtidWYubyByc3JjLm8gbm90aWYubyBcXFxuICAxMDpcdFx0XHRcdFx0XHR0Y3R4Lm8gZmlsZXRhYmxlLm8gcncubyBwb2xsLm8gXFxcbiAgMTE6XHRcdFx0XHRcdFx0dHcubyB3YWl0Lm8gZXZlbnRmZC5vIHVyaW5nX2NtZC5vIFxcXG4gIDEyOlx0XHRcdFx0XHRcdG9wZW5jbG9zZS5vIHNxcG9sbC5vIHhhdHRyLm8gbm9wLm8gXFxcbiAgMTM6XHRcdFx0XHRcdFx0ZnMubyBzcGxpY2UubyBzeW5jLm8gbXNnX3JpbmcubyBcXFxuICAxNDpcdFx0XHRcdFx0XHRhZHZpc2UubyBvcGVuY2xvc2UubyBzdGF0eC5vIHRpbWVvdXQubyBcXFxuICAxNTpcdFx0XHRcdFx0XHRjYW5jZWwubyB3YWl0aWQubyByZWdpc3Rlci5vIFxcXG4gIDE2Olx0XHRcdFx0XHRcdHRydW5jYXRlLm8gbWVtbWFwLm8gYWxsb2NfY2FjaGUubyBcXFxuICAxNzpcdFx0XHRcdFx0XHRxdWVyeS5vIGxvb3Aub1xuICAxODpcdFxuICAxOTpcdG9iai0kKENPTkZJR19JT19VUklOR19aQ1JYKVx0JiM0Mzs9IHpjcngub1xuICAyMDpcdG9iai0kKENPTkZJR19JT19XUSlcdFx0JiM0Mzs9IGlvLXdxLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUxNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGlvX3VyaW5nIE1ha2VmaWxlKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoZSByZXN0IG9mIHRoZSBgaW9fdXJpbmcvTWFrZWZpbGVgLiBUaGlzIG1lYW5zIEkmIzM5O20gcHJvYmFibHkgcGFzdCB0aGUgaW5pdGlhbCBvdmVydmlldyBhbmQgbGlrZWx5IGhhdmUgYSBzcGVjaWZpYyBhcmVhIG9mIGludGVyZXN0IOKAkyBwZXJoYXBzIGJ1aWxkIG9wdGlvbnMsIGxpbmtpbmcgc3RyYXRlZ2llcywgZGVwZW5kZW5jeSByZXNvbHV0aW9uLCBvciBtYXliZSBldmVuIGNyb3NzLWNvbXBpbGF0aW9uIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2tpbSB0aGUgcmVtYWluaW5nIHNlY3Rpb25zIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLCBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgcGllY2VzIEkgbmVlZC4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBtYWtlZmlsZSBzeW50YXgsIGFzc2Vzc2luZyBpdHMgY2xhcml0eSwgYW5kIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBhcmVhcyBvZiBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGdvdGNoYXMgdGhhdCBtYXkgY29tZSB1cCBkdXJpbmcgbXkgd29yayBvbiBpdC4gSSBhbnRpY2lwYXRlIHRoYXQgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IG5hdmlnYXRlIHRoZSBkb2N1bWVudCBhbmQgZ2FpbiB3aGF0IGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGN1cnJlbnQgdGFzay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjE6XHRvYmotJChDT05GSUdfRlVURVgpXHRcdCYjNDM7PSBmdXRleC5vXG4gIDIyOlx0b2JqLSQoQ09ORklHX0VQT0xMKVx0XHQmIzQzOz0gZXBvbGwub1xuICAyMzpcdG9iai0kKENPTkZJR19ORVRfUlhfQlVTWV9QT0xMKVx0JiM0Mzs9IG5hcGkub1xuICAyNDpcdG9iai0kKENPTkZJR19ORVQpICYjNDM7PSBuZXQubyBjbWRfbmV0Lm9cbiAgMjU6XHRvYmotJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IGZkaW5mby5vXG4gIDI2Olx0b2JqLSQoQ09ORklHX0lPX1VSSU5HX01PQ0tfRklMRSkgJiM0Mzs9IG1vY2tfZmlsZS5vXG4gIDI3Olx0b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRikgJiM0Mzs9IGJwZl9maWx0ZXIub1xuICAyODpcdG9iai0kKENPTkZJR19JT19VUklOR19CUEZfT1BTKSAmIzQzOz0gYnBmLW9wcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NDMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGlvX3VyaW5nIE5ldHdvcmsgSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0gaW50ZXJmYWNlcyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLiBTcGVjaWZpY2FsbHksIG15IHRob3VnaHQgcHJvY2VzcyBpcyBmb2N1c2luZyBvbiB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9uYWxzLiBGcm9tIG15IG9ic2VydmF0aW9ucywgaXQgYXBwZWFycyBgaW9fdXJpbmcvbmV0LmNgIGlzIG9ubHkgYnVpbHQgaWYgYm90aCBgQ09ORklHX0lPX1VSSU5HYCAqYW5kKiBgQ09ORklHX05FVGAgYXJlIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE9uIHRoZSBvdGhlciBoYW5kLCBgaW9fdXJpbmcva2J1Zi5jYCBvbmx5IHJlcXVpcmVzIGBDT05GSUdfSU9fVVJJTkdgLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBJIHNlZSBhIGZldyBrZXkgcGxheWVyczoKCjEuICBgaW9fYnVmZmVyX2dldF9saXN0YCBpbiBgaW9fdXJpbmcva2J1Zi5jYCAtLSBJdCBpcyBubyBsb25nZXIgc3RhdGljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYW5kIHdoeSB0aGlzIGNoYW5nZWQuCjIuICBgaW9fcmVjdmAgaW4gYGlvX3VyaW5nL25ldC5jYCAtLSBUaGlzIGlzIG5vdyBhIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQgc3BlY2lmaWNhbGx5IGZvciBgSU9SSU5HX09QX1JFQ1ZgLiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbiwgc28gSSYjMzk7bGwgd2FudCB0byBzdHVkeSBpdHMgaW1wbGVtZW50YXRpb24gbW9yZSBjbG9zZWx5LgozLiAgYGlvX3NlbmRfZmluaXNoYCwgYGlvX3JlY3ZfZmluaXNoYCwgYW5kIGBpb19uZXRfa2J1Zl9yZWN5bGVgIGFyZSBhbHNvIGluIGBpb191cmluZy9uZXQuY2AuIEkgbm90ZSB0aGF0IHRoZXNlIGFyZSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBhbmQgYXJlIGNhbGxlZCBmcm9tIHRoZSBwcmltYXJ5IG5ldHdvcmstcmVsYXRlZCBjYWxscyBsaWtlIGBpb19yZWN2YCBhbmQgYGlvX3JlY3Ztc2dgLgo0LiAgVGhlbiB0aGVyZSBhcmUgYSBmZXcgb3RoZXIgaGVscGVyIGZ1bmN0aW9ucyBzdWNoIGFzIGBpb19yZWN2X2J1Zl9zZWxlY3RgLCBgaW9fYnVmZmVyc19zZWxlY3RgLCBgaW9fYnVmZmVyc19wZWVrYCwgYGlvX2tidWZfY29tbWl0YCwgYW5kIGBpb19wdXRfa2J1ZnNgLgoKVG8gcmVmaW5lIG15IHVuZGVyc3RhbmRpbmcsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIGFzIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBvciBldmVuIHVzZXItc3BhY2UgbWlnaHQgZGlyZWN0bHkgY2FsbC4gVGhlc2UgYXJlOgoKKiAgIGBpb19yZWN2YAoqICAgYGlvX3JlY3Ztc2dgCiogICBgaW9fYnVmZmVyX2dldF9saXN0YAoqICAgYGlvX2tidWZfY29tbWl0YAoKU28gbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hldGhlciBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zIOKAkyBgaW9fcmVjdmAsIGBpb19yZWN2bXNnYCwgYGlvX3NlbmRgLCBgaW9fa2J1Zl9jb21taXRgLCBvciBgaW9fYnVmZmVyX2dldF9saXN0YCDigJMgYXJlIGFjdHVhbGx5IGV4cG9ydGVkIG9yIGRlY2xhcmVkIGFzIG5vbi1zdGF0aWMgaW4gdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcyAoYGlvX3VyaW5nL25ldC5oYCBvciBgaW9fdXJpbmcva2J1Zi5oYCkuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgaW50ZW5kZWQgdXNhZ2UgYW5kIHNjb3BlLCBhbmQgaG93IHRoZSBuZXR3b3JrIGludGVncmF0aW9uIGlzIG1lYW50IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9OTM9ZW51bSBzcl9yZXRyeV9mbGFncyB7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTExLVxuaW9fdXJpbmcvbmV0LmM6MTEyOnN0cnVjdCBpb19yZWN2emMge1xuaW9fdXJpbmcvbmV0LmMtMTEzLVx0c3RydWN0IGZpbGVcdFx0XHQqZmlsZTtcbi0tXG5pb191cmluZy9uZXQuYz02MjQ9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy03MDAtXG5pb191cmluZy9uZXQuYzo3MDE6c3RhdGljIGludCBpb19yZWN2bXNnX21zaG90X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsXG5pb191cmluZy9uZXQuYy03MDItXHRcdFx0XHQgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2csXG4tLVxuaW9fdXJpbmcvbmV0LmMtNzI0LVxuaW9fdXJpbmcvbmV0LmM6NzI1OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19jb3B5X2hkcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL25ldC5jLTcyNi1cdFx0XHQgICAgICAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2cpXG4tLVxuaW9fdXJpbmcvbmV0LmMtNzQwLVx0fVxuaW9fdXJpbmcvbmV0LmM6NzQxOlx0cmV0dXJuIGlvX3JlY3Ztc2dfbXNob3RfcHJlcChyZXEsIGlvbXNnLCBtc2cubXNnX25hbWVsZW4sXG5pb191cmluZy9uZXQuYy03NDItXHRcdFx0XHRcdG1zZy5tc2dfY29udHJvbGxlbik7XG4tLVxuaW9fdXJpbmcvbmV0LmMtNzQ0LVxuaW9fdXJpbmcvbmV0LmM6NzQ1OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19wcmVwX3NldHVwKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuaW9fdXJpbmcvbmV0LmMtNzQ2LXtcbi0tXG5pb191cmluZy9uZXQuYy03NzItXG5pb191cmluZy9uZXQuYzo3NzM6XHRyZXR1cm4gaW9fcmVjdm1zZ19jb3B5X2hkcihyZXEsIGttc2cpO1xuaW9fdXJpbmcvbmV0LmMtNzc0LX1cbi0tXG5pb191cmluZy9uZXQuYy03NzgtXG5pb191cmluZy9uZXQuYzo3Nzk6aW50IGlvX3JlY3Ztc2dfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuaW9fdXJpbmcvbmV0LmMtNzgwLXtcbi0tXG5pb191cmluZy9uZXQuYy04MzctXHRzci1cdTAwM2Vucl9tdWx0aXNob3RfbG9vcHMgPSAwO1xuaW9fdXJpbmcvbmV0LmM6ODM4Olx0cmV0dXJuIGlvX3JlY3Ztc2dfcHJlcF9zZXR1cChyZXEpO1xuaW9fdXJpbmcvbmV0LmMtODM5LX1cbi0tXG5pb191cmluZy9uZXQuYy04NDUtLypcbmlvX3VyaW5nL25ldC5jOjg0NjogKiBGaW5pc2hlcyBpb19yZWN2IGFuZCBpb19yZWN2bXNnLlxuaW9fdXJpbmcvbmV0LmMtODQ3LSAqXG4tLVxuaW9fdXJpbmcvbmV0LmMtODUwLSAqL1xuaW9fdXJpbmcvbmV0LmM6ODUxOnN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL25ldC5jLTg1Mi1cdFx0XHRcdCAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbi0tXG5pb191cmluZy9uZXQuYy05MzQtXG5pb191cmluZy9uZXQuYzo5MzU6c3RhdGljIGludCBpb19yZWN2bXNnX3ByZXBfbXVsdGlzaG90KHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXG5pb191cmluZy9uZXQuYy05MzYtXHRcdFx0XHQgICAgIHN0cnVjdCBpb19zcl9tc2cgKnNyLCB2b2lkIF9fdXNlciAqKmJ1Zixcbi0tXG5pb191cmluZy9uZXQuYy05NTktXG5pb191cmluZy9uZXQuYzo5NjA6c3RydWN0IGlvX3JlY3Ztc2dfbXVsdGlzaG90X2hkciB7XG5pb191cmluZy9uZXQuYy05NjEtXHRzdHJ1Y3QgaW9fdXJpbmdfcmVjdm1zZ19vdXQgbXNnO1xuLS1cbmlvX3VyaW5nL25ldC5jLTk2NC1cbmlvX3VyaW5nL25ldC5jOjk2NTpzdGF0aWMgaW50IGlvX3JlY3Ztc2dfbXVsdGlzaG90KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpb19zcl9tc2cgKmlvLFxuaW9fdXJpbmcvbmV0LmMtOTY2LVx0XHRcdFx0c3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbi0tXG5pb191cmluZy9uZXQuYy05NzAtXHRpbnQgY29weV9sZW47XG5pb191cmluZy9uZXQuYzo5NzE6XHRzdHJ1Y3QgaW9fcmVjdm1zZ19tdWx0aXNob3RfaGRyIGhkcjtcbmlvX3VyaW5nL25ldC5jLTk3Mi1cbi0tXG5pb191cmluZy9uZXQuYy0xMDA3LVx0LyogZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gZ2FwIGJldHdlZW4gaGRyIGFuZCBzb2NrYWRkcl9zdG9yYWdlICovXG5pb191cmluZy9uZXQuYzoxMDA4Olx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpb19yZWN2bXNnX211bHRpc2hvdF9oZHIsIGFkZHIpICE9XG5pb191cmluZy9uZXQuYy0xMDA5LVx0XHQgICAgIHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfcmVjdm1zZ19vdXQpKTtcbi0tXG5pb191cmluZy9uZXQuYy0xMDE4LVxuaW9fdXJpbmcvbmV0LmM6MTAxOTppbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvbmV0LmMtMTAyMC17XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTA1MS1cdFx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQVBPTExfTVVMVElTSE9UKSB7XG5pb191cmluZy9uZXQuYzoxMDUyOlx0XHRcdHJldCA9IGlvX3JlY3Ztc2dfcHJlcF9tdWx0aXNob3Qoa21zZywgc3IsIFx1MDAyNnNlbC5hZGRyLCBcdTAwMjZsZW4pO1xuaW9fdXJpbmcvbmV0LmMtMTA1My1cdFx0XHRpZiAocmV0KSB7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTA2NC1cdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkge1xuaW9fdXJpbmcvbmV0LmM6MTA2NTpcdFx0cmV0ID0gaW9fcmVjdm1zZ19tdWx0aXNob3Qoc29jaywgc3IsIGttc2csIGZsYWdzLFxuaW9fdXJpbmcvbmV0LmMtMTA2Ni1cdFx0XHRcdFx0ICAgXHUwMDI2bXNob3RfZmluaXNoZWQpO1xuLS1cbmlvX3VyaW5nL25ldC5jLTEwOTktXHRzZWwudmFsID0gcmV0O1xuaW9fdXJpbmcvbmV0LmM6MTEwMDpcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpXG5pb191cmluZy9uZXQuYy0xMTAxLVx0XHRnb3RvIHJldHJ5X211bHRpc2hvdDtcbi0tXG5pb191cmluZy9uZXQuYy0xMTA1LVxuaW9fdXJpbmcvbmV0LmM6MTEwNjpzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbmlvX3VyaW5nL25ldC5jLTExMDctXHRcdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTE3Ny1cbmlvX3VyaW5nL25ldC5jOjExNzg6aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL25ldC5jLTExNzkte1xuLS1cbmlvX3VyaW5nL25ldC5jLTEyMTYtXHRcdHNlbC52YWwgPSBzci1cdTAwM2VsZW47XG5pb191cmluZy9uZXQuYzoxMjE3Olx0XHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcdTAwMjZzZWwsIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5jLTEyMTgtXHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKSB7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTI2MS1cdHNlbC52YWwgPSByZXQ7XG5pb191cmluZy9uZXQuYzoxMjYyOlx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSlcbmlvX3VyaW5nL25ldC5jLTEyNjMtXHRcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xuLS1cbmlvX3VyaW5nL25ldC5jLTEyNjctXG5pb191cmluZy9uZXQuYzoxMjY4OmludCBpb19yZWN2emNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuaW9fdXJpbmcvbmV0LmMtMTI2OS17XG5pb191cmluZy9uZXQuYzoxMjcwOlx0c3RydWN0IGlvX3JlY3Z6YyAqemMgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fcmVjdnpjKTtcbmlvX3VyaW5nL25ldC5jLTEyNzEtXHR1bnNpZ25lZCBpZnFfaWR4O1xuLS1cbmlvX3VyaW5nL25ldC5jLTEyOTUtXG5pb191cmluZy9uZXQuYzoxMjk2OmludCBpb19yZWN2emMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL25ldC5jLTEyOTcte1xuaW9fdXJpbmcvbmV0LmM6MTI5ODpcdHN0cnVjdCBpb19yZWN2emMgKnpjID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3JlY3Z6Yyk7XG5pb191cmluZy9uZXQuYy0xMjk5LVx0c3RydWN0IHNvY2tldCAqc29jaztcbi0tXG5pb191cmluZy9uZXQuaD0zNT1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5oLTM2LVxuaW9fdXJpbmcvbmV0Lmg6Mzc6aW50IGlvX3JlY3Ztc2dfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcbmlvX3VyaW5nL25ldC5oOjM4OmludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvbmV0Lmg6Mzk6aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9uZXQuaC00MC1cbi0tXG5pb191cmluZy9vcGRlZi5jPTU0PWNvbnN0IHN0cnVjdCBpb19pc3N1ZV9kZWYgaW9faXNzdWVfZGVmc1tdID0ge1xuLS1cbmlvX3VyaW5nL29wZGVmLmMtMTU4LVx0XHQuYXN5bmNfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyKSxcbmlvX3VyaW5nL29wZGVmLmM6MTU5Olx0XHQucHJlcFx0XHRcdD0gaW9fcmVjdm1zZ19wcmVwLFxuaW9fdXJpbmcvb3BkZWYuYzoxNjA6XHRcdC5pc3N1ZVx0XHRcdD0gaW9fcmVjdm1zZyxcbmlvX3VyaW5nL29wZGVmLmMtMTYxLSNlbHNlXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy0zMDItXHRcdC5hc3luY19zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCBpb19hc3luY19tc2doZHIpLFxuaW9fdXJpbmcvb3BkZWYuYzozMDM6XHRcdC5wcmVwXHRcdFx0PSBpb19yZWN2bXNnX3ByZXAsXG5pb191cmluZy9vcGRlZi5jOjMwNDpcdFx0Lmlzc3VlXHRcdFx0PSBpb19yZWN2LFxuaW9fdXJpbmcvb3BkZWYuYy0zMDUtI2Vsc2Vcbi0tXG5pb191cmluZy9vcGRlZi5jLTUyOC0jaWYgZGVmaW5lZChDT05GSUdfTkVUKVxuaW9fdXJpbmcvb3BkZWYuYzo1Mjk6XHRcdC5wcmVwXHRcdFx0PSBpb19yZWN2emNfcHJlcCxcbmlvX3VyaW5nL29wZGVmLmM6NTMwOlx0XHQuaXNzdWVcdFx0XHQ9IGlvX3JlY3Z6YyxcbmlvX3VyaW5nL29wZGVmLmMtNTMxLSNlbHNlXG4tLVxuaW9fdXJpbmcvemNyeC5oPTEzMD1zdGF0aWMgaW5saW5lIGludCBpb196Y3J4X2N0cmwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvemNyeC5oLTEzNi1cbmlvX3VyaW5nL3pjcnguaDoxMzc6aW50IGlvX3JlY3Z6YyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL3pjcnguaDoxMzg6aW50IGlvX3JlY3Z6Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xuaW9fdXJpbmcvemNyeC5oLTEzOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MzkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGlvX3VyaW5nIE5ldHdvcmsgUGF0Y2ggQ2hhbmdlcyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgcGF0Y2ggY2hhbmdlcyBtZXRob2RpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzLiBMb29raW5nIGF0IHRoZSBkaWZmczoKCjEuICBgaW9fYnVmZmVyX2dldF9saXN0YCBoYWQgaXRzIGBzdGF0aWMgaW5saW5lYCBtb2RpZmllciByZW1vdmVkIGFuZCBpcyBub3cgZXhwb3NlZCBpbiBgaW9fdXJpbmcva2J1Zi5oYC4gSW50ZXJlc3RpbmcuIFRoaXMgcHJvYmFibHkgd2lkZW5zIGl0cyBzY29wZSBvZiB1c2UsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBuZXcgcG9zc2liaWxpdGllcy4KMi4gIFRoZSBgaW9fbmV0X2tidWZfcmVjeWxlYCBmdW5jdGlvbiBsb3N0IHRoZSBgUkVRX0ZfQlVGRkVSU19DT01NSVRgIGNvbmRpdGlvbmFsIGNoZWNrLCB3aGVyZSBgaW9fa2J1Zl9jb21taXRgIHdhcyBwcmV2aW91c2x5IGNhbGxlZC4gVGhpcyBpcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGNoYW5nZSB0byBidWZmZXIgbWFuYWdlbWVudC4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGhvdyB0aGVzZSBidWZmZXJzIGFyZSBub3cgaGFuZGxlZC4KMy4gIEluIGBpb19yZWN2X2ZpbmlzaGAsIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIHVzZSBgc2VsLSZndDt2YWxgIGluc3RlYWQgb2YgYHRoaXNfcmV0YCB3aXRoIGBpb19idW5kbGVfbmJ1ZnNgLiBUaGlzIGxvb2tzIHJlbGF0ZWQgdG8gaG93IGJ1ZmZlciBidW5kbGVzIGFyZSBiZWluZyBwcm9jZXNzZWQgcG9zdC1yZWNlaXZlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYHNlbGAgc3RydWN0dXJlIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgcmVjZWl2ZSBvcGVyYXRpb24uCjQuICBBbmQsIGNyaXRpY2FsbHksIGBpb19yZWN2YCBub3cgaGFzIGFkZGVkIGhhbmRsaW5nIGZvciBgUkVRX0ZfQlVGRkVSX1JJTkdgLCB3aGVyZSBpdCBvYnRhaW5zIHRoZSBidWZmZXIgbGlzdC4gVGhhdCYjMzk7cyBhIG1ham9yIGNoYW5nZTogYHNlbC5idWZfbGlzdCA9IGlvX2J1ZmZlcl9nZXRfbGlzdChyZXEtJmd0O2N0eCwgc3ItJmd0O2J1Zl9ncm91cCk7YC4KCkdpdmVuIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHJlY2VpdmUgb3BlcmF0aW9ucyB3aXRoIGJ1ZmZlciByaW5ncyBhbmQgYnVuZGxlcywgSSB0aGluayB0aGlzIGFic29sdXRlbHkgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoaXMgaXMgY29yZSBrZXJuZWwgY29kZTsgaXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gYm90aCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBpb191cmluZyBzeXNjYWxscywgc28gaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgpUaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBJJiMzOTtsbCBuZWVkIGBJT19VUklOR2AgYW5kIGBORVRgIGVuYWJsZWQuIFRoYXQgc2hvdWxkbiYjMzk7dCBiZSBhIHByb2JsZW0uCgpOb3csIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgZm9jdXMgc3ltYm9scy4gVGhlIGtleSBmdW5jdGlvbnMgdG8gaW52ZXN0aWdhdGUgYXJlIGBpb19yZWN2YCwgYGlvX3JlY3Ztc2dgLCBgaW9fYnVmZmVyX2dldF9saXN0YCwgYW5kIGBpb19rYnVmX2NvbW1pdGAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVzZSBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgdGhlIG9uZXMgaW4gYGlvX3VyaW5nL2tidWYuY2AgYW5kIGBpb191cmluZy9uZXQuY2AsIGFyZW4mIzM5O3Qgc3RhdGljLiBZZXAsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBgaW9fcmVjdmAsIGBpb19yZWN2bXNnYCwgYGlvX2J1ZmZlcl9nZXRfbGlzdGAsIGFuZCBgaW9fa2J1Zl9jb21taXRgIGFyZSBhbGwgbm9uLXN0YXRpYy4KCkV4Y2VsbGVudC4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGF2ZW51ZSBmb3IgZnV6emluZywgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIHNldCB1cCBhIGZ1enplciBjb25maWd1cmF0aW9uLiBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaW9fa2J1Zl9jb21taXRgIGlzbiYjMzk7dCBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2tidWZfY29tbWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYz0zNj1zdGF0aWMgYm9vbCBpb19rYnVmX2luY19jb21taXQoc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IGxlbilcbi0tXG5pb191cmluZy9rYnVmLmMtNjItXG5pb191cmluZy9rYnVmLmM6NjM6Ym9vbCBpb19rYnVmX2NvbW1pdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL2tidWYuYy02NC1cdFx0ICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBsZW4sIGludCBucilcbi0tXG5pb191cmluZy9rYnVmLmM9MTkzPXN0YXRpYyBzdHJ1Y3QgaW9fYnJfc2VsIGlvX3JpbmdfYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTIyMy1cdGlmIChpb19zaG91bGRfY29tbWl0KHJlcSwgaXNzdWVfZmxhZ3MpKSB7XG5pb191cmluZy9rYnVmLmM6MjI0Olx0XHRpZiAoIWlvX2tidWZfY29tbWl0KHJlcSwgc2VsLmJ1Zl9saXN0LCAqbGVuLCAxKSlcbmlvX3VyaW5nL2tidWYuYy0yMjUtXHRcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRl9NT1JFO1xuLS1cbmlvX3VyaW5nL2tidWYuYz0zNDU9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtMzY2LVx0XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CVUZGRVJTX0NPTU1JVCB8IFJFUV9GX0JMX05PX1JFQ1lDTEU7XG5pb191cmluZy9rYnVmLmM6MzY3Olx0XHRcdGlmICghaW9fa2J1Zl9jb21taXQocmVxLCBzZWwtXHUwMDNlYnVmX2xpc3QsIGFyZy1cdTAwM2VvdXRfbGVuLCByZXQpKVxuaW9fdXJpbmcva2J1Zi5jLTM2OC1cdFx0XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CVUZfTU9SRTtcbi0tXG5pb191cmluZy9rYnVmLmM9NDA3PXN0YXRpYyBpbmxpbmUgYm9vbCBfX2lvX3B1dF9rYnVmX3Jpbmcoc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTQxMi1cdGlmIChibClcbmlvX3VyaW5nL2tidWYuYzo0MTM6XHRcdHJldCA9IGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgbnIpO1xuaW9fdXJpbmcva2J1Zi5jLTQxNC1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0JVRl9NT1JFKSlcbi0tXG5pb191cmluZy9rYnVmLmg9OTE9dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuaW9fdXJpbmcva2J1Zi5oLTkyLVx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpO1xuaW9fdXJpbmcva2J1Zi5oOjkzOmJvb2wgaW9fa2J1Zl9jb21taXQoc3RydWN0IGlvX2tpb2NiICpyZXEsXG5pb191cmluZy9rYnVmLmgtOTQtXHRcdCAgICBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbGVuLCBpbnQgbnIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI2NQoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFzc2Vzc21lbnQgYW5kIEFjdGlvbioqCgpBbHJpZ2h0LCB0aGUgY3VycmVudCBzdGF0ZSBzZWVtcyBzdGFibGU7IG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgYXJlIHBvcHBpbmcgdXAgZnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLiBUaGlzIGxvb2tzIGdvb2QuIEJhc2VkIG9uIG15IGFuYWx5c2lzIGFuZCB0aGUgb3ZlcmFsbCBldmFsdWF0aW9uLCBpdCYjMzk7cyB0aW1lIHRvIHRyaWdnZXIgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGRhdGEsIHRoZSBwcm9jZXNzLCBhbmQgdGhlIGV4cGVjdGVkIG91dGNvbWUuIEl0JiMzOTtzIHRpbWUgdG8gc29saWRpZnkgdGhlIHJlc3VsdHMgb2YgdGhpcyBzdGFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fcmVjdm1zZyYjMzQ7LAogICAgJiMzNDtpb19idWZmZXJfZ2V0X2xpc3QmIzM0OywKICAgICYjMzQ7aW9fa2J1Zl9jb21taXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBpb191cmluZyBuZXR3b3JraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYnVmZmVyIGxpc3Qgc2VsZWN0aW9uLCBidWZmZXIgY29tbWl0cywgYW5kIGJ1ZmZlciBidW5kbGUgaGFuZGxpbmcgaW4gcmVjZWl2ZSBvcGVyYXRpb25zIChJT1JJTkdfT1BfUkVDViAvIElPUklOR19PUF9SRUNWTVNHKS4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19yZWN2JiMzNDssCiAgICAmIzM0O2lvX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyX2dldF9saXN0JiMzNDssCiAgICAmIzM0O2lvX2tidWZfY29tbWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9fdXJpbmcgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGJ1ZmZlciBsaXN0IHNlbGVjdGlvbiwgYnVmZmVyIGNvbW1pdHMsIGFuZCBidWZmZXIgYnVuZGxlIGhhbmRsaW5nIGluIHJlY2VpdmUgb3BlcmF0aW9ucyAoSU9SSU5HX09QX1JFQ1YgLyBJT1JJTkdfT1BfUkVDVk1TRykuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgbWFuYWdlbWVudCBhbmQgYWNjb3VudGluZyBsb2dpYyBmb3IgYnVuZGxlZCBhbmQgcmluZyBidWZmZXIgbmV0d29yayByZWNlaXZlcyBpbiBpb191cmluZyAoaW9fcmVjdiBhbmQgaW9fcmVjdl9maW5pc2gpLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgYHNlbC5idWZfbGlzdGAgaXMgcHJvcGVybHkgcmV0cmlldmVkIHdoZW4gYFJFUV9GX0JVRkZFUl9SSU5HYCBpcyBhY3RpdmUsIGNvcnJlY3RzIHRoZSBidWZmZXIgY291bnQgcGFzc2VkIHRvIGBpb19idW5kbGVfbmJ1ZnMoKWAgdXNpbmcgYHNlbC1cdTAwM2V2YWxgLCBhbmQgcmVtb3ZlcyBhbiBpbmFwcHJvcHJpYXRlIGJ1ZmZlciBjb21taXQgb24gcmVjeWNsZS5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiBwYXRocy4gUG90ZW50aWFsIGVycm9ycyB3b3VsZCBpbnZvbHZlIGJ1ZmZlciByaW5nIGluZGV4IHRyYWNraW5nLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTRkYjM5MTgwYjliOTMwZWMwMDM5NzFkZWMzNmI1Zjc1NDM3ZjMxYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMTM6NTM6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy9rYnVmLmMgYi9pb191cmluZy9rYnVmLmMKaW5kZXggN2MzMDkxNzNkZDE5NC4uYzRiYWU4ZjAwMTczZSAxMDA2NDQKLS0tIGEvaW9fdXJpbmcva2J1Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2tidWYuYwpAQCAtNzYsOCAmIzQzOzc2LDggQEAgYm9vbCBpb19rYnVmX2NvbW1pdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmlvX2J1ZmZlcl9nZXRfbGlzdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKLQkJCQkJCQl1bnNpZ25lZCBpbnQgYmdpZCkKJiM0MztzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmlvX2J1ZmZlcl9nZXRfbGlzdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKJiM0MzsJCQkJCSAgdW5zaWduZWQgaW50IGJnaWQpCiB7CiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2N0eC0mZ3Q7dXJpbmdfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2tidWYuaCBiL2lvX3VyaW5nL2tidWYuaAppbmRleCA0MDE3NzNlMWVmODA1Li43MDc5ZjJkZWM5ZTBlIDEwMDY0NAotLS0gYS9pb191cmluZy9rYnVmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcva2J1Zi5oCkBAIC03MSw2ICYjNDM7NzEsOCBAQCBzdHJ1Y3QgaW9fYnJfc2VsIGlvX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNpemVfdCAqbGVuLAogCQkJCSAgdW5zaWduZWQgYnVmX2dyb3VwLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpOwogaW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZywKIAkJICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpOwomIzQzO3N0cnVjdCBpb19idWZmZXJfbGlzdCAqaW9fYnVmZmVyX2dldF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LAomIzQzOwkJCQkJICB1bnNpZ25lZCBpbnQgYmdpZCk7CiBpbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZywKIAkJICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCk7CiB2b2lkIGlvX2Rlc3Ryb3lfYnVmZmVycyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7CmRpZmYgLS1naXQgYS9pb191cmluZy9uZXQuYyBiL2lvX3VyaW5nL25ldC5jCmluZGV4IGZiZTcxOWQ4NmM0NjMuLmJmZjQ1MTRjMDEwMGMgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL25ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL25ldC5jCkBAIC00ODMsOCAmIzQzOzQ4Myw2IEBAIHN0YXRpYyBpbnQgaW9fbmV0X2tidWZfcmVjeWxlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLAogCQkJICAgICAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IGxlbikKIHsKIAlyZXEtJmd0O2ZsYWdzIHw9IFJFUV9GX0JMX05PX1JFQ1lDTEU7Ci0JaWYgKHJlcS0mZ3Q7ZmxhZ3MgJmFtcDsgUkVRX0ZfQlVGRkVSU19DT01NSVQpCi0JCWlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpOwogCXJldHVybiBJT1VfUkVUUlk7CiB9CiAKQEAgLTg3Nyw3ICYjNDM7ODc1LDggQEAgc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLAogCWlmIChzci0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkgewogCQlzaXplX3QgdGhpc19yZXQgPSBzZWwtJmd0O3ZhbCAtIHNyLSZndDtkb25lX2lvOwogCi0JCWNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLSZndDtidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7CiYjNDM7CQljZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC0mZ3Q7YnVmX2xpc3QsCiYjNDM7CQkJCSAgICAgICBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLSZndDt2YWwpKTsKIAkJaWYgKHNyLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfUkVDVl9SRVRSWSkKIAkJCWNmbGFncyA9IHJlcS0mZ3Q7Y3FlLmZsYWdzIHwgKGNmbGFncyAmYW1wOyBDUUVfRl9NQVNLKTsKIAkJaWYgKHNyLSZndDttc2hvdF9sZW4gJmFtcDsmYW1wOyBzZWwtJmd0O3ZhbCAmZ3Q7PSBzci0mZ3Q7bXNob3RfbGVuKQpAQCAtMTIyMSw2ICYjNDM7MTIyMCw4IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CiAJCXNyLSZndDtidWYgPSBOVUxMOwomIzQzOwl9IGVsc2UgaWYgKHJlcS0mZ3Q7ZmxhZ3MgJmFtcDsgUkVRX0ZfQlVGRkVSX1JJTkcpIHsKJiM0MzsJCXNlbC5idWZfbGlzdCA9IGlvX2J1ZmZlcl9nZXRfbGlzdChyZXEtJmd0O2N0eCwgc3ItJmd0O2J1Zl9ncm91cCk7CiAJfQogCiAJa21zZy0mZ3Q7bXNnLm1zZ19mbGFncyA9IDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogRGl2aW5nIGludG8gaW9fdXJpbmcvbmV0LmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGlzIHBhdGNoIGlzIGhpdHRpbmcgYSBmZXcga2V5IGZpbGVzOiBgaW9fdXJpbmcva2J1Zi5jYCwgYGlvX3VyaW5nL2tidWYuaGAsIGFuZCBgaW9fdXJpbmcvbmV0LmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gYGlvX3VyaW5nL25ldC5jYCwgc28gSSYjMzk7bGwgc3RhcnQgdGhlcmUuIEkmIzM5O2xsIGZpcmUgdXAgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBjb250ZXh0dWFsIHVuZGVyc3RhbmRpbmcgb2YgKmV4YWN0bHkqIHdoYXQmIzM5O3MgYmVpbmcgdHdlYWtlZCBpbiB0aGF0IGZpbGUuIEkgbmVlZCB0byBzZWUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIsIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLCBhbmQgZ2V0IGEgc29saWQgZmVlbCBmb3IgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIHRoZSBuZXR3b3JraW5nIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ3MDpcdFx0Lyogc2hvcnQgdHJhbnNmZXIsIGNvdW50IHNlZ21lbnRzICovXG4gNDcxOlx0XHRuYnVmcyA9IDA7XG4gNDcyOlx0XHRkbyB7XG4gNDczOlx0XHRcdGludCB0aGlzX2xlbiA9IG1pbl90KGludCwgaW92W25idWZzXS5pb3ZfbGVuLCByZXQpO1xuIDQ3NDpcdFxuIDQ3NTpcdFx0XHRuYnVmcyYjNDM7JiM0Mzs7XG4gNDc2Olx0XHRcdHJldCAtPSB0aGlzX2xlbjtcbiA0Nzc6XHRcdH0gd2hpbGUgKHJldCk7XG4gNDc4Olx0XG4gNDc5Olx0XHRyZXR1cm4gbmJ1ZnM7XG4gNDgwOlx0fVxuIDQ4MTpcdFxuIDQ4MjpcdHN0YXRpYyBpbnQgaW9fbmV0X2tidWZfcmVjeWxlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuIDQ4MzpcdFx0XHRcdCAgICAgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCBsZW4pXG4gNDg0Olx0e1xuIDQ4NTpcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX0JMX05PX1JFQ1lDTEU7XG4gNDg2Olx0XHRyZXR1cm4gSU9VX1JFVFJZO1xuIDQ4NzpcdH1cbiA0ODg6XHRcbiA0ODk6XHRzdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4gNDkwOlx0XHRcdFx0XHQgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXG4gNDkxOlx0XHRcdFx0XHQgIHN0cnVjdCBpb19icl9zZWwgKnNlbClcbiA0OTI6XHR7XG4gNDkzOlx0XHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xuIDQ5NDpcdFx0Ym9vbCBidW5kbGVfZmluaXNoZWQgPSBzZWwtXHUwMDNldmFsIFx1MDAzYz0gMDtcbiA0OTU6XHRcdHVuc2lnbmVkIGludCBjZmxhZ3M7XG4gNDk2Olx0XG4gNDk3Olx0XHRpZiAoIShzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkpIHtcbiA0OTg6XHRcdFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBzZWwtXHUwMDNldmFsLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuIDQ5OTpcdFx0XHRnb3RvIGZpbmlzaDtcbiA1MDA6XHRcdH1cbiA1MDE6XHRcbiA1MDI6XHRcdGNmbGFncyA9IGlvX3B1dF9rYnVmcyhyZXEsIHNlbC1cdTAwM2V2YWwsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHNlbC1cdTAwM2V2YWwpKTtcbiA1MDM6XHRcbiA1MDQ6XHRcdC8qXG4gNTA1Olx0XHQgKiBEb24mIzM5O3Qgc3RhcnQgbmV3IGJ1bmRsZXMgaWYgdGhlIGJ1ZmZlciBsaXN0IGlzIGVtcHR5LCBvciBpZiB0aGVcbiA1MDY6XHRcdCAqIGN1cnJlbnQgb3BlcmF0aW9uIG5lZWRlZCB0byBnbyB0aHJvdWdoIHBvbGxpbmcgdG8gY29tcGxldGUuXG4gNTA3Olx0XHQgKi9cbiA1MDg6XHRcdGlmIChidW5kbGVfZmluaXNoZWQgfHwgcmVxLVx1MDAzZWZsYWdzIFx1MDAyNiAoUkVRX0ZfQkxfRU1QVFkgfCBSRVFfRl9QT0xMRUQpKVxuIDUwOTpcdFx0XHRnb3RvIGZpbmlzaDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgzNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGNoYW5nZXMgaW4gYGlvX3VyaW5nL25ldC5jYDoKCioqRGl2aW5nIERlZXBlciBpbnRvIGBpb191cmluZy9uZXQuY2AqKgoKT2theSwgdGltZSB0byByZWFsbHkgc2NydXRpbml6ZSB0aGUgcmVtYWluaW5nIG1vZGlmaWNhdGlvbnMgaW4gYGlvX3VyaW5nL25ldC5jYC4gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb2YgaG93IHRoZXNlIHVwZGF0ZXMgaW50ZWdyYXRlIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBhc3luY2hyb25vdXMgSS9PIGNhcGFiaWxpdGllcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBsaW5lLWJ5LWxpbmUgcmV2aWV3LCBsb29raW5nIGZvciBhbnkgc3VidGxlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGludHJvZHVjZWQuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGV4aXN0aW5nIG5ldHdvcmsgc3RhY2ssIHBhcnRpY3VsYXJseSB0aGUgaGFuZGxpbmcgb2YgY29tcGxldGlvbiBxdWV1ZXMgYW5kIGhvdyB0aGUga2VybmVsIHNjaGVkdWxlcyB0aGVzZSBuZXR3b3JrIG9wZXJhdGlvbnMuIEFyZSB0aGUgbmV3IGRhdGEgc3RydWN0dXJlcyBvcHRpbWFsIGZvciB0aGUgYW50aWNpcGF0ZWQgbmV0d29yayBsb2Fkcz8gQXJlIHRoZXJlIG9wcG9ydHVuaXRpZXMgZm9yIGZ1cnRoZXIgb3B0aW1pemF0aW9uLCBwZXJoYXBzIGJ5IHJlZHVjaW5nIGNvbnRleHQgc3dpdGNoZXMgb3Igb3B0aW1pemluZyBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zPyBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlIGVycm9yIGhhbmRsaW5nIGlzIHJvYnVzdCwgZXNwZWNpYWxseSBpbiBlZGdlIGNhc2VzIGFuZCB3aGVuIHRoZSBzeXN0ZW0gaXMgdW5kZXIgaGVhdnkgbmV0d29yayBzdHJlc3MuIEZpbmFsbHksIEkmIzM5O2xsIGNyb3NzLXJlZmVyZW5jZSB0aGVzZSBjaGFuZ2VzIHdpdGggdGhlIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQgYW55IHJlbGV2YW50IGRpc2N1c3Npb25zIG9uIHRoZSBtYWlsaW5nIGxpc3RzIHRvIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBtaXNzZWQgY29uc2lkZXJhdGlvbnMgb3IgZG9jdW1lbnRlZCBjYXZlYXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NjA6XHRcdFx0Y2ZsYWdzIHw9IElPUklOR19DUUVfRl9TT0NLX05PTkVNUFRZO1xuIDg2MTpcdFxuIDg2MjpcdFx0aWYgKHNlbC1cdTAwM2V2YWwgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVl9NU0hPVF9MSU0pIHtcbiA4NjM6XHRcdFx0LypcbiA4NjQ6XHRcdFx0ICogSWYgc3ItXHUwMDNlbGVuIGhpdHMgemVybywgdGhlIGxpbWl0IGhhcyBiZWVuIHJlYWNoZWQuIE1hcmtcbiA4NjU6XHRcdFx0ICogbXNob3QgYXMgZmluaXNoZWQsIGFuZCBmbGFnIE1TSE9UX0RPTkUgYXMgd2VsbCB0byBwcmV2ZW50XG4gODY2Olx0XHRcdCAqIGEgcG90ZW50aWFsIGJ1bmRsZSBmcm9tIGJlaW5nIHJldHJpZWQuXG4gODY3Olx0XHRcdCAqL1xuIDg2ODpcdFx0XHRzci1cdTAwM2Vtc2hvdF90b3RhbF9sZW4gLT0gbWluX3QoaW50LCBzZWwtXHUwMDNldmFsLCBzci1cdTAwM2Vtc2hvdF90b3RhbF9sZW4pO1xuIDg2OTpcdFx0XHRpZiAoIXNyLVx1MDAzZW1zaG90X3RvdGFsX2xlbikge1xuIDg3MDpcdFx0XHRcdHNyLVx1MDAzZWZsYWdzIHw9IElPUklOR19SRUNWX01TSE9UX0RPTkU7XG4gODcxOlx0XHRcdFx0bXNob3RfZmluaXNoZWQgPSB0cnVlO1xuIDg3MjpcdFx0XHR9XG4gODczOlx0XHR9XG4gODc0Olx0XG4gODc1Olx0XHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHtcbiA4NzY6XHRcdFx0c2l6ZV90IHRoaXNfcmV0ID0gc2VsLVx1MDAzZXZhbCAtIHNyLVx1MDAzZWRvbmVfaW87XG4gODc3Olx0XG4gODc4Olx0XHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLVx1MDAzZWJ1Zl9saXN0LFxuIDg3OTpcdFx0XHRcdFx0ICAgICAgIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXHUwMDNldmFsKSk7XG4gODgwOlx0XHRcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXG4gODgxOlx0XHRcdFx0Y2ZsYWdzID0gcmVxLVx1MDAzZWNxZS5mbGFncyB8IChjZmxhZ3MgXHUwMDI2IENRRV9GX01BU0spO1xuIDg4MjpcdFx0XHRpZiAoc3ItXHUwMDNlbXNob3RfbGVuIFx1MDAyNlx1MDAyNiBzZWwtXHUwMDNldmFsIFx1MDAzZT0gc3ItXHUwMDNlbXNob3RfbGVuKVxuIDg4MzpcdFx0XHRcdHNyLVx1MDAzZWZsYWdzIHw9IElPUklOR19SRUNWX01TSE9UX0NBUDtcbiA4ODQ6XHRcdFx0LyogYnVuZGxlIHdpdGggbm8gbW9yZSBpbW1lZGlhdGUgYnVmZmVycywgd2UmIzM5O3JlIGRvbmUgKi9cbiA4ODU6XHRcdFx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQkxfRU1QVFkpXG4gODg2Olx0XHRcdFx0Z290byBmaW5pc2g7XG4gODg3Olx0XHRcdC8qXG4gODg4Olx0XHRcdCAqIElmIG1vcmUgaXMgYXZhaWxhYmxlIEFORCBpdCB3YXMgYSBmdWxsIHRyYW5zZmVyLCByZXRyeSBhbmRcbiA4ODk6XHRcdFx0ICogYXBwZW5kIHRvIHRoaXMgb25lXG4gODkwOlx0XHRcdCAqL1xuIDg5MTpcdFx0XHRpZiAoIShzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfTk9fUkVUUlkpIFx1MDAyNlx1MDAyNlxuIDg5MjpcdFx0XHQgICAga21zZy1cdTAwM2Vtc2cubXNnX2lucSBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgdGhpc19yZXQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4gODkzOlx0XHRcdCAgICAhaW92X2l0ZXJfY291bnQoXHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIpKSB7XG4gODk0Olx0XHRcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyA9IGNmbGFncyBcdTAwMjYgfkNRRV9GX01BU0s7XG4gODk1Olx0XHRcdFx0c3ItXHUwMDNlbGVuID0ga21zZy1cdTAwM2Vtc2cubXNnX2lucTtcbiA4OTY6XHRcdFx0XHRzci1cdTAwM2Vkb25lX2lvICYjNDM7PSB0aGlzX3JldDtcbiA4OTc6XHRcdFx0XHRzci1cdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9SRVRSWTtcbiA4OTg6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gODk5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg3OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgaW9fdXJpbmcvbmV0LmNgIGZvciBGdXJ0aGVyIEluc2lnaHQqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhpcyBmcm9tIGEgaGlnaCBsZXZlbCwgYW5kIHdoaWxlIEkgdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBhcmNoaXRlY3R1cmUsIEkgZmVlbCBsaWtlIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcsIGEgc3VidGxlIGRldGFpbCBwZXJoYXBzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGlvX3VyaW5nL25ldC5jYC4gU3BlY2lmaWNhbGx5LCBsaW5lcyAxMjAwIHRocm91Z2ggMTI1MCBzZWVtIGxpa2UgYSBsaWtlbHkgc3BvdCB0byBmaW5kIHNvbWUgY3J1Y2lhbCBjb2RlLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGF0IHJhbmdlIGluaXRpYWxseS4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gdW5jb3ZlciB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlIHNwZWNpZmljIGNvZGUsIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbXBsZW1lbnRhdGlvbiBpcyB0aWVkIGluIHdpdGggdGhlIGJyb2FkZXIgYGlvX3VyaW5nYCBmcmFtZXdvcmsuIEhvcGVmdWxseSwgdGhpcyBuYXJyb3dlciBmb2N1cyB3aWxsIGNsYXJpZnkgYW55IGxpbmdlcmluZyBxdWVzdGlvbnMuIEkgc3VzcGVjdCB0aGUga2V5IGlzIHRoZXJlLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjAwOlx0XG4xMjAxOlx0XHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9JTVBPUlRfQlVGRkVSKSB7XG4xMjAyOlx0XHRcdHJldCA9IGlvX2ltcG9ydF9yZWdfYnVmKHJlcSwgXHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIsXG4xMjAzOlx0XHRcdFx0XHRcdCh1NjQpKHVpbnRwdHJfdClzci1cdTAwM2VidWYsIHNyLVx1MDAzZWxlbixcbjEyMDQ6XHRcdFx0XHRcdFx0SVRFUl9ERVNULCBpc3N1ZV9mbGFncyk7XG4xMjA1Olx0XHRcdGlmICh1bmxpa2VseShyZXQpKSB7XG4xMjA2Olx0XHRcdFx0a21zZy1cdTAwM2Vtc2cubXNnX2lucSA9IC0xO1xuMTIwNzpcdFx0XHRcdHNlbC5idWZfbGlzdCA9IE5VTEw7XG4xMjA4Olx0XHRcdFx0Z290byBvdXRfZnJlZTtcbjEyMDk6XHRcdFx0fVxuMTIxMDpcdFx0XHRyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UkVRX0ZfSU1QT1JUX0JVRkZFUjtcbjEyMTE6XHRcdH1cbjEyMTI6XHRcbjEyMTM6XHRyZXRyeV9tdWx0aXNob3Q6XG4xMjE0Olx0XHRzZWwuYnVmX2xpc3QgPSBOVUxMO1xuMTIxNTpcdFx0aWYgKGlvX2RvX2J1ZmZlcl9zZWxlY3QocmVxKSkge1xuMTIxNjpcdFx0XHRzZWwudmFsID0gc3ItXHUwMDNlbGVuO1xuMTIxNzpcdFx0XHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcdTAwMjZzZWwsIGlzc3VlX2ZsYWdzKTtcbjEyMTg6XHRcdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpIHtcbjEyMTk6XHRcdFx0XHRrbXNnLVx1MDAzZW1zZy5tc2dfaW5xID0gLTE7XG4xMjIwOlx0XHRcdFx0Z290byBvdXRfZnJlZTtcbjEyMjE6XHRcdFx0fVxuMTIyMjpcdFx0XHRzci1cdTAwM2VidWYgPSBOVUxMO1xuMTIyMzpcdFx0fSBlbHNlIGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0JVRkZFUl9SSU5HKSB7XG4xMjI0Olx0XHRcdHNlbC5idWZfbGlzdCA9IGlvX2J1ZmZlcl9nZXRfbGlzdChyZXEtXHUwMDNlY3R4LCBzci1cdTAwM2VidWZfZ3JvdXApO1xuMTIyNTpcdFx0fVxuMTIyNjpcdFxuMTIyNzpcdFx0a21zZy1cdTAwM2Vtc2cubXNnX2ZsYWdzID0gMDtcbjEyMjg6XHRcdGttc2ctXHUwMDNlbXNnLm1zZ19pbnEgPSAtMTtcbjEyMjk6XHRcbjEyMzA6XHRcdGlmIChmbGFncyBcdTAwMjYgTVNHX1dBSVRBTEwpXG4xMjMxOlx0XHRcdG1pbl9yZXQgPSBpb3ZfaXRlcl9jb3VudChcdTAwMjZrbXNnLVx1MDAzZW1zZy5tc2dfaXRlcik7XG4xMjMyOlx0XG4xMjMzOlx0XHRyZXQgPSBzb2NrX3JlY3Ztc2coc29jaywgXHUwMDI2a21zZy1cdTAwM2Vtc2csIGZsYWdzKTtcbjEyMzQ6XHRcdGlmIChyZXQgXHUwMDNjIG1pbl9yZXQpIHtcbjEyMzU6XHRcdFx0aWYgKHJldCA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiBmb3JjZV9ub25ibG9jaykge1xuMTIzNjpcdFx0XHRcdGlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpO1xuMTIzNzpcdFx0XHRcdHJldHVybiBJT1VfUkVUUlk7XG4xMjM4Olx0XHRcdH1cbjEyMzk6XHRcdFx0aWYgKHJldCBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgaW9fbmV0X3JldHJ5KHNvY2ssIGZsYWdzKSkge1xuMTI0MDpcdFx0XHRcdHNyLVx1MDAzZWxlbiAtPSByZXQ7XG4xMjQxOlx0XHRcdFx0c3ItXHUwMDNlYnVmICYjNDM7PSByZXQ7XG4xMjQyOlx0XHRcdFx0c3ItXHUwMDNlZG9uZV9pbyAmIzQzOz0gcmV0O1xuMTI0MzpcdFx0XHRcdHJldHVybiBpb19uZXRfa2J1Zl9yZWN5bGUocmVxLCBzZWwuYnVmX2xpc3QsIGttc2csIHJldCk7XG4xMjQ0Olx0XHRcdH1cbjEyNDU6XHRcdFx0aWYgKHJldCA9PSAtRVJFU1RBUlRTWVMpXG4xMjQ2Olx0XHRcdFx0cmV0ID0gLUVJTlRSO1xuMTI0NzpcdFx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbjEyNDg6XHRcdH0gZWxzZSBpZiAoKGZsYWdzIFx1MDAyNiBNU0dfV0FJVEFMTCkgXHUwMDI2XHUwMDI2IChrbXNnLVx1MDAzZW1zZy5tc2dfZmxhZ3MgXHUwMDI2IChNU0dfVFJVTkMgfCBNU0dfQ1RSVU5DKSkpIHtcbjEyNDk6XHRvdXRfZnJlZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIElzc3VlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb21taXQgbWVzc2FnZSBzYXlzLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRoZSBmaXggb3IgdGhlIHByb2JsZW0gdGhpcyBwYXRjaCBhZGRyZXNzZXMgd2lsbCBpbW1lZGlhdGVseSBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLiAKCk5vdywgbGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGFjdHVhbCBjb2RlLiBJIG5lZWQgdG8gZXhhbWluZSBgaW9fYnVuZGxlX25idWZzYCBhbmQgYGlvX3B1dF9rYnVmc2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgdGhlbSB3aXRoaW4gYGlvX3VyaW5nL2tidWYuY2AgYW5kIGBpb191cmluZy9uZXQuY2AuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHVuY292ZXIgc29tZXRoaW5nIHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSBuZXR3b3JrIGJ1ZmZlcnMgd2l0aGluIHRoZSBpb191cmluZyBjb250ZXh0LCBtYXliZSBzb21lIGluZWZmaWNpZW5jeSBvciwgcG90ZW50aWFsbHksIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8ga2J1ZiBtYW5hZ2VtZW50IGFuZCBuZXR3b3JrIG9wZXJhdGlvbnMuIEtub3dpbmcgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGluIHRoZSBjb2RlYmFzZSBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1MDpcdCAqL1xuIDQ1MTpcdHN0YXRpYyBpbnQgaW9fYnVuZGxlX25idWZzKHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCByZXQpXG4gNDUyOlx0e1xuIDQ1MzpcdFx0c3RydWN0IGlvdmVjICppb3Y7XG4gNDU0Olx0XHRpbnQgbmJ1ZnM7XG4gNDU1Olx0XG4gNDU2Olx0XHQvKiBubyBkYXRhIGlzIGFsd2F5cyB6ZXJvIHNlZ21lbnRzLCBhbmQgYSB1YnVmIGlzIGFsd2F5cyAxIHNlZ21lbnQgKi9cbiA0NTc6XHRcdGlmIChyZXQgXHUwMDNjPSAwKVxuIDQ1ODpcdFx0XHRyZXR1cm4gMDtcbiA0NTk6XHRcdGlmIChpdGVyX2lzX3VidWYoXHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIpKVxuIDQ2MDpcdFx0XHRyZXR1cm4gMTtcbiA0NjE6XHRcbiA0NjI6XHRcdGlvdiA9IGttc2ctXHUwMDNldmVjLmlvdmVjO1xuIDQ2MzpcdFx0aWYgKCFpb3YpXG4gNDY0Olx0XHRcdGlvdiA9IFx1MDAyNmttc2ctXHUwMDNlZmFzdF9pb3Y7XG4gNDY1Olx0XG4gNDY2Olx0XHQvKiBpZiBhbGwgZGF0YSB3YXMgdHJhbnNmZXJyZWQsIGl0JiMzOTtzIGJhc2ljIHBvaW50ZXIgbWF0aCAqL1xuIDQ2NzpcdFx0aWYgKCFpb3ZfaXRlcl9jb3VudChcdTAwMjZrbXNnLVx1MDAzZW1zZy5tc2dfaXRlcikpXG4gNDY4Olx0XHRcdHJldHVybiBpdGVyX2lvdihcdTAwMjZrbXNnLVx1MDAzZW1zZy5tc2dfaXRlcikgLSBpb3Y7XG4gNDY5Olx0XG4gNDcwOlx0XHQvKiBzaG9ydCB0cmFuc2ZlciwgY291bnQgc2VnbWVudHMgKi9cbiA0NzE6XHRcdG5idWZzID0gMDtcbiA0NzI6XHRcdGRvIHtcbiA0NzM6XHRcdFx0aW50IHRoaXNfbGVuID0gbWluX3QoaW50LCBpb3ZbbmJ1ZnNdLmlvdl9sZW4sIHJldCk7XG4gNDc0Olx0XG4gNDc1Olx0XHRcdG5idWZzJiM0MzsmIzQzOztcbiA0NzY6XHRcdFx0cmV0IC09IHRoaXNfbGVuO1xuIDQ3NzpcdFx0fSB3aGlsZSAocmV0KTtcbiA0Nzg6XHRcbiA0Nzk6XHRcdHJldHVybiBuYnVmcztcbiA0ODA6XHR9XG4gNDgxOlx0XG4gNDgyOlx0c3RhdGljIGludCBpb19uZXRfa2J1Zl9yZWN5bGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXG4gNDgzOlx0XHRcdFx0ICAgICAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IGxlbilcbiA0ODQ6XHR7XG4gNDg1Olx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQkxfTk9fUkVDWUNMRTtcbiA0ODY6XHRcdHJldHVybiBJT1VfUkVUUlk7XG4gNDg3Olx0fVxuIDQ4ODpcdFxuIDQ4OTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpb19zZW5kX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg1NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGBpb19wdXRfa2J1ZnNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gYGlvX3B1dF9rYnVmc2AuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHBpbnBvaW50IGl0cyBkZWZpbml0aW9uLiBLbm93aW5nIHRoZSBkZWNsYXJhdGlvbiwgaW5jbHVkaW5nIGFueSBhc3NvY2lhdGVkIHN0cnVjdHVyZXMgb3IgdHlwZWRlZnMsIGlzIGNydWNpYWw7IGl0IHNldHMgdGhlIHN0YWdlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIGFuZCBob3cgaXQgbWFuaXB1bGF0ZXMgZGF0YS4gVGhlbiwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSB0cmFjayBkb3duIGV2ZXJ5IHNpbmdsZSBpbnN0YW5jZSB3aGVyZSBgaW9fcHV0X2tidWZzYCBpcyAqdXNlZCrigJQgZXZlcnkgY2FsbCBzaXRlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjYWxsZXIgZnVuY3Rpb25zIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gaXQuIFRoZSBhcmd1bWVudHMgd2lsbCBwcm92aWRlIGluc2lnaHRzIGludG8gd2hhdCBkYXRhIGlzIGJlaW5nIGhhbmRsZWQsIHdoZXJlIGl0IG9yaWdpbmF0ZXMsIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgc3RhZ2VkIGZvciBvdXRwdXQuIEJ5IGZvbGxvd2luZyB0aGVzZSBjYWxsIGNoYWlucywgSSBjYW4gcmVjb25zdHJ1Y3QgdGhlIGRhdGEmIzM5O3Mgam91cm5leSBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgSS9PIHN1YnN5c3RlbS4gVGhpcyB3aWxsIGluZXZpdGFibHkgZXhwb3NlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHJhY2UgY29uZGl0aW9ucywgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgaW4gdGhlIEkvTyBwaXBlbGluZS4gVGhpcyBpcyB3aGVyZSB0aGUgZnVuIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcHV0X2tidWZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYz00MDc9c3RhdGljIGlubGluZSBib29sIF9faW9fcHV0X2tidWZfcmluZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbi0tXG5pb191cmluZy9rYnVmLmMtNDIwLVxuaW9fdXJpbmcva2J1Zi5jOjQyMTp1bnNpZ25lZCBpbnQgX19pb19wdXRfa2J1ZnMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXG5pb191cmluZy9rYnVmLmMtNDIyLVx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpXG4tLVxuaW9fdXJpbmcva2J1Zi5oPTg5PXZvaWQgaW9fa2J1Zl9kcm9wX2xlZ2FjeShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSk7XG5pb191cmluZy9rYnVmLmgtOTAtXG5pb191cmluZy9rYnVmLmg6OTE6dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuaW9fdXJpbmcva2J1Zi5oLTkyLVx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpO1xuLS1cbmlvX3VyaW5nL2tidWYuaD0xMjg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fcHV0X2tidWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBsZW4sXG4tLVxuaW9fdXJpbmcva2J1Zi5oLTEzMi1cdFx0cmV0dXJuIDA7XG5pb191cmluZy9rYnVmLmg6MTMzOlx0cmV0dXJuIF9faW9fcHV0X2tidWZzKHJlcSwgYmwsIGxlbiwgMSk7XG5pb191cmluZy9rYnVmLmgtMTM0LX1cbmlvX3VyaW5nL2tidWYuaC0xMzUtXG5pb191cmluZy9rYnVmLmg6MTM2OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IGxlbixcbmlvX3VyaW5nL2tidWYuaC0xMzctXHRcdFx0XHRcdHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBuYnVmcylcbi0tXG5pb191cmluZy9rYnVmLmgtMTQwLVx0XHRyZXR1cm4gMDtcbmlvX3VyaW5nL2tidWYuaDoxNDE6XHRyZXR1cm4gX19pb19wdXRfa2J1ZnMocmVxLCBibCwgbGVuLCBuYnVmcyk7XG5pb191cmluZy9rYnVmLmgtMTQyLX1cbi0tXG5pb191cmluZy9uZXQuYz00ODk9c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLS1cbmlvX3VyaW5nL25ldC5jLTUwMS1cbmlvX3VyaW5nL25ldC5jOjUwMjpcdGNmbGFncyA9IGlvX3B1dF9rYnVmcyhyZXEsIHNlbC1cdTAwM2V2YWwsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHNlbC1cdTAwM2V2YWwpKTtcbmlvX3VyaW5nL25ldC5jLTUwMy1cbi0tXG5pb191cmluZy9uZXQuYz04NTE9c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLS1cbmlvX3VyaW5nL25ldC5jLTg3Ny1cbmlvX3VyaW5nL25ldC5jOjg3ODpcdFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIHRoaXNfcmV0LCBzZWwtXHUwMDNlYnVmX2xpc3QsXG5pb191cmluZy9uZXQuYy04NzktXHRcdFx0XHQgICAgICAgaW9fYnVuZGxlX25idWZzKGttc2csIHNlbC1cdTAwM2V2YWwpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgzNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgX19pb19wdXRfa2J1ZnNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGBfX2lvX3B1dF9rYnVmc2AgaW4gYGlvX3VyaW5nL2tidWYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBrZXJuZWwgYnVmZmVycyBhcmUgbWFuYWdlZCBhbmQgcHV0IGJhY2sgaW50byB0aGUgcmluZywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIGBpb191cmluZ2AuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGEgY3JpdGljYWwgcGllY2UgaW4gdGhlIHB1enpsZSBvZiBidWZmZXIgcmV1c2UgYW5kIGF2b2lkaW5nIHVubmVjZXNzYXJ5IGFsbG9jYXRpb25zL2RlYWxsb2NhdGlvbnMsIHdoaWNoIGlzIGEga2V5IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb24gaW4gaGlnaC10aHJvdWdocHV0IEkvTy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBlcnJvciBjb25kaXRpb25zLCBzeW5jaHJvbml6YXRpb24gKGlmIGFueSksIGFuZCBhbnkgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZS4gSSBleHBlY3QgaXQgdG8gaW52b2x2ZSBzb21lIGludHJpY2F0ZSBwb2ludGVyIG1hbmlwdWxhdGlvbiBhbmQgbGlrZWx5IHNvbWUgc3VidGxlIHJlZmVyZW5jZSBjb3VudGluZyBvciBmcmVlbGlzdCBtYW5hZ2VtZW50IHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBhbmQgcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbi4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgdHJhY2UgdGhlIGNvZGUgcGF0aCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSBvZiBhIGtlcm5lbCBidWZmZXIgd2l0aGluIGBpb191cmluZ2AuIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhlIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUga2J1ZiBpcyB1cGRhdGVkIG9yIHZhbGlkYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9rYnVmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxMDpcdFx0Ym9vbCByZXQgPSB0cnVlO1xuIDQxMTpcdFxuIDQxMjpcdFx0aWYgKGJsKVxuIDQxMzpcdFx0XHRyZXQgPSBpb19rYnVmX2NvbW1pdChyZXEsIGJsLCBsZW4sIG5yKTtcbiA0MTQ6XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0JVRl9NT1JFKSlcbiA0MTU6XHRcdFx0cmV0ID0gZmFsc2U7XG4gNDE2Olx0XG4gNDE3Olx0XHRyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+KFJFUV9GX0JVRkZFUl9SSU5HIHwgUkVRX0ZfQlVGX01PUkUpO1xuIDQxODpcdFx0cmV0dXJuIHJldDtcbiA0MTk6XHR9XG4gNDIwOlx0XG4gNDIxOlx0dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuIDQyMjpcdFx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpXG4gNDIzOlx0e1xuIDQyNDpcdFx0dW5zaWduZWQgaW50IHJldDtcbiA0MjU6XHRcbiA0MjY6XHRcdHJldCA9IElPUklOR19DUUVfRl9CVUZGRVIgfCAocmVxLVx1MDAzZWJ1Zl9pbmRleCBcdTAwM2NcdTAwM2MgSU9SSU5HX0NRRV9CVUZGRVJfU0hJRlQpO1xuIDQyNzpcdFxuIDQyODpcdFx0aWYgKHVubGlrZWx5KCEocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9CVUZGRVJfUklORykpKSB7XG4gNDI5Olx0XHRcdGlvX2tidWZfZHJvcF9sZWdhY3kocmVxKTtcbiA0MzA6XHRcdFx0cmV0dXJuIHJldDtcbiA0MzE6XHRcdH1cbiA0MzI6XHRcbiA0MzM6XHRcdGlmICghX19pb19wdXRfa2J1Zl9yaW5nKHJlcSwgYmwsIGxlbiwgbmJ1ZnMpKVxuIDQzNDpcdFx0XHRyZXQgfD0gSU9SSU5HX0NRRV9GX0JVRl9NT1JFO1xuIDQzNTpcdFx0cmV0dXJuIHJldDtcbiA0MzY6XHR9XG4gNDM3Olx0XG4gNDM4Olx0c3RhdGljIGludCBpb19yZW1vdmVfYnVmZmVyc19sZWdhY3koc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gNDM5Olx0XHRcdFx0XHQgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbiA0NDA6XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5idWZzKVxuIDQ0MTpcdHtcbiA0NDI6XHRcdHVuc2lnbmVkIGxvbmcgaSA9IDA7XG4gNDQzOlx0XHRzdHJ1Y3QgaW9fYnVmZmVyICpueHQ7XG4gNDQ0Olx0XG4gNDQ1Olx0XHQvKiBwcm90ZWN0cyBpb19idWZmZXJzX2NhY2hlICovXG4gNDQ2Olx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKTtcbiA0NDc6XHRcdFdBUk5fT05fT05DRShibC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9CVUZfUklORyk7XG4gNDQ4Olx0XG4gNDQ5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYnVmcyBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2YmwtXHUwMDNlYnVmX2xpc3QpOyBpJiM0MzsmIzQzOykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzY5CgkJCQkJCQlvdXRwdXQ6IDE4MAoJCQkJCQkJdGhvdWdodHM6IDEwOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgaW9fdXJpbmcgTmV0d29yayBSZWNlaXZlIEJ1ZmZlciBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGltcHJvdmluZyB0aGUgbWFuYWdlbWVudCBvZiBuZXR3b3JrIHJlY2VpdmUgYnVmZmVycyB3aXRoaW4gdGhlIGlvX3VyaW5nIGZyYW1ld29yay4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBhcHBlYXJzIHRvIGJlIGEgZ29vZCwgdGFyZ2V0ZWQgY2hhbmdlIHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSBidWZmZXIgcmluZ3MgYW5kIGJ1bmRsZSBvcGVyYXRpb25zIGluIHRoZSBuZXR3b3JrIGNvbnRleHQuCgpGaXJzdGx5LCBgaW9fYnVmZmVyX2dldF9saXN0YCBpcyBiZWluZyBtYWRlIHZpc2libGUgdG8gYG5ldC5jYCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgd2UgbmVlZCB0byBhY2Nlc3MgYnVmZmVyIGxpc3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgbmV0d29yayBzaWRlLiBMb29raW5nIGNsb3NlciwgaW4gYGlvX25ldF9rYnVmX3JlY3lsZWAsIHRoZSByZW1vdmFsIG9mIHRoZSBjYWxsIHRvIGBpb19rYnVmX2NvbW1pdGAgaXMgYXBwcm9wcmlhdGUgd2hlbiBidWZmZXJzIGFyZSBiZWluZyByZWN5Y2xlZCBkdXJpbmcgcmV0cmllczsgaXQgYXZvaWRzIGNvbW1pdHRpbmcgc29tZXRoaW5nIHRoYXQgc2hvdWxkbiYjMzk7dCBiZS4gVGhlbiB0aGUgYWRqdXN0bWVudHMgaW4gYGlvX3JlY3ZfZmluaXNoYCBhbmQgYGlvX3JlY3ZgIGFwcGVhciB0byBiZSBhaW1lZCBhdCBjb3JyZWN0bHkgYWNjb3VudGluZyBmb3IgdGhlIHRvdGFsIHRyYW5zZmVycmVkIGxlbmd0aCBpbiB0aGUgY29udGV4dCBvZiBidW5kbGVkIG9wZXJhdGlvbnMgYW5kIHJldHJpZXMuIFNwZWNpZmljYWxseSwgbWFraW5nIHN1cmUgd2UgZ2V0IHRoZSBjb3JyZWN0IHRvdGFsIGxlbmd0aCB0aHJvdWdoIGBzZWwtJmd0O3ZhbGAgaW50byBgaW9fYnVuZGxlX25idWZzYC4gVGhpcyBlbnN1cmVzIHRoYXQgYnVmZmVyIGNvbnN1bXB0aW9uIGFuZCByZWN5Y2xpbmcgYXJlIHByb3Blcmx5IGhhbmRsZWQgYWNyb3NzIG11bHRpcGxlIGNhbGxzIG9yIHJldHJpZXMuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIG15IGluaXRpYWwgaHlwb3RoZXNpcyB0aGF0IHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcywgd2hpY2ggaXMgYWx3YXlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55IGtlcm5lbC10by11c2Vyc3BhY2UgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBkYXRhIG9yIGltcHJvcGVyIG1lbW9yeSBhY2Nlc3MuIEFmdGVyIHJldmlld2luZyB0aGUgY29kZSBJIGhhdmUgdG8gc2F5IEkmIzM5O20gc2F0aXNmaWVkLiBUaGUgY2hhbmdlcyBhcmUgYWxsIGFib3V0IGltcHJvdmluZyB0aGUgKm1hbmFnZW1lbnQqIG9mIGV4aXN0aW5nIGJ1ZmZlcnM6IGNvcnJlY3RseSB0cmFja2luZyBidWZmZXIgbGlzdCBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zIGluIGBpb19yZWN2YCwgZml4aW5nIHRoZSB0b3RhbCBsZW5ndGggY2FsY3VsYXRpb24gaW4gYGlvX3JlY3ZfZmluaXNoYCwgYW5kIGNsZWFuaW5nIHVwIGBpb19uZXRfa2J1Zl9yZWN5bGVgIHRvIHByZXZlbnQgZG91YmxlLWNvbW1pdHMgaW4gcmV0cmllcy4KClRoZSBmaWVsZHMgdXNlZCBhcmUgQ1FFIGZsYWdzLCByZXR1cm4gaW50ZWdlcnMsIHdoaWNoIGFyZSBub3Qga2VybmVsIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXJzcGFjZSB0aGF0IG1pZ2h0IGNvbnRhaW4gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBzdHJ1Y3R1cmVzIHRoYXQgZ2l2ZSBtZSBjYXVzZSBmb3IgY29uY2Vybi4gVGhlIHBhdGNoIGNvcnJlY3RzIGJ1ZmZlciByZWN5Y2xpbmcgYW5kIGNvbW1pdHRpbmcgbG9naWMgYW5kIGFjY291bnRzIGZvciBidWZmZXIgYnVuZGxlcyB3aGVuIHVzaW5nIHRoZSBpb191cmluZyByaW5nIGJ1ZmZlci4gVGhpcyBpc24mIzM5O3QgbmV3IG1lbW9yeSBhbGxvY2F0aW9uLCBpdCYjMzk7cyBhYm91dCBtYWtpbmcgc3VyZSBleGlzdGluZyBtZW1vcnkgKHVzZXIgcHJvdmlkZWQgb3IgcmluZyBidWZmZXIpIGlzIHVzZWQgY29ycmVjdGx5LiBUaGUga2V5IGFzcGVjdHMgYXJlIHRoYXQgYHNlbGAgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LCBhbmQgdGhlcmUgYXJlIG5vIGluc3RhbmNlcyBvZiBicmFuY2hlZCBiZWhhdmlvciBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZSBjaGFuZ2VzIGFkZHJlc3MgYm9va2tlZXBpbmcgYW5kIGFjY291bnRpbmcgaW4gdGhlIGlvX3VyaW5nIHJpbmcgYnVmZmVyLCBJJiMzOTttIGNvbmZpZGVudCBLTVNBTiBpcyAqbm90KiBuZWVkZWQgaGVyZS4gVGhlIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIGFjY2VzcywgYnVmZmVyIGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgdGhlIG1haW4gcmlza3MgaGVyZS4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgcG90ZW50aWFsIHJlc291cmNlIGxlYWtzLCBpbmNvcnJlY3QgcmluZyBidWZmZXIgZW50cnkgY29uc3VtcHRpb24sIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMuIEhvd2V2ZXIsIHRoZXNlIGFyZSBsb2dpYyBlcnJvcnMgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KClRvIHN1bW1hcml6ZSwgdGhlc2UgY2hhbmdlczoKMS4gIEV4cG9zZSBgaW9fYnVmZmVyX2dldF9saXN0YAoyLiAgU2V0IGBzZWwuYnVmX2xpc3RgIGNvcnJlY3RseSB3aGVuIGJ1ZmZlciByaW5nIHVzZSBpcyBlbmFibGVkLgozLiAgRml4IHRoZSB0b3RhbCBsZW5ndGggdXNlZCBmb3IgYnVuZGxlIGJ1ZmZlciBjYWxjdWxhdGlvbi4KNC4gIFJlbW92ZSBhIHJlZHVuZGFudCBgaW9fa2J1Zl9jb21taXRgIGNhbGwuCgpUaGUgcGF0Y2ggY29ycmVjdHMgYWNjb3VudGluZyBhbmQgdHJhY2tpbmcgZm9yIG5ldHdvcmsgcmVjZWl2ZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQuIFRoZSBLQVNBTiBjYW4gZGV0ZWN0IGFueSBtZW1vcnkgcHJvYmxlbXMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4gVGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYnVmZmVyIG1hbmFnZW1lbnQgYW5kIGFjY291bnRpbmcgbG9naWMgZm9yIGJ1bmRsZWQgYW5kIHJpbmcgYnVmZmVyIG5ldHdvcmsgcmVjZWl2ZXMgaW4gaW9fdXJpbmcgKGlvX3JlY3YgYW5kIGlvX3JlY3ZfZmluaXNoKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIGBzZWwuYnVmX2xpc3RgIGlzIHByb3Blcmx5IHJldHJpZXZlZCB3aGVuIGBSRVFfRl9CVUZGRVJfUklOR2AgaXMgYWN0aXZlLCBjb3JyZWN0cyB0aGUgYnVmZmVyIGNvdW50IHBhc3NlZCB0byBgaW9fYnVuZGxlX25idWZzKClgIHVzaW5nIGBzZWwtXHUwMDNldmFsYCwgYW5kIHJlbW92ZXMgYW4gaW5hcHByb3ByaWF0ZSBidWZmZXIgY29tbWl0IG9uIHJlY3ljbGUuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGF0aHMuIFBvdGVudGlhbCBlcnJvcnMgd291bGQgaW52b2x2ZSBidWZmZXIgcmluZyBpbmRleCB0cmFja2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYnVmZmVyIG1hbmFnZW1lbnQgYW5kIGFjY291bnRpbmcgbG9naWMgZm9yIGJ1bmRsZWQgYW5kIHJpbmcgYnVmZmVyIG5ldHdvcmsgcmVjZWl2ZXMgaW4gaW9fdXJpbmcgKGlvX3JlY3YgYW5kIGlvX3JlY3ZfZmluaXNoKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIGBzZWwuYnVmX2xpc3RgIGlzIHByb3Blcmx5IHJldHJpZXZlZCB3aGVuIGBSRVFfRl9CVUZGRVJfUklOR2AgaXMgYWN0aXZlLCBjb3JyZWN0cyB0aGUgYnVmZmVyIGNvdW50IHBhc3NlZCB0byBgaW9fYnVuZGxlX25idWZzKClgIHVzaW5nIGBzZWwtXHUwMDNldmFsYCwgYW5kIHJlbW92ZXMgYW4gaW5hcHByb3ByaWF0ZSBidWZmZXIgY29tbWl0IG9uIHJlY3ljbGUuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGF0aHMuIFBvdGVudGlhbCBlcnJvcnMgd291bGQgaW52b2x2ZSBidWZmZXIgcmluZyBpbmRleCB0cmFja2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU0OjAwLjg1MTM5MTY4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDA3OTEzMjEyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fcmVjdlwiLFxuICAgIFwiaW9fcmVjdm1zZ1wiLFxuICAgIFwiaW9fYnVmZmVyX2dldF9saXN0XCIsXG4gICAgXCJpb19rYnVmX2NvbW1pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGJ1ZmZlciBtYW5hZ2VtZW50IGFuZCBhY2NvdW50aW5nIGxvZ2ljIGZvciBidW5kbGVkIGFuZCByaW5nIGJ1ZmZlciBuZXR3b3JrIHJlY2VpdmVzIGluIGlvX3VyaW5nIChpb19yZWN2IGFuZCBpb19yZWN2X2ZpbmlzaCkuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBgc2VsLmJ1Zl9saXN0YCBpcyBwcm9wZXJseSByZXRyaWV2ZWQgd2hlbiBgUkVRX0ZfQlVGRkVSX1JJTkdgIGlzIGFjdGl2ZSwgY29ycmVjdHMgdGhlIGJ1ZmZlciBjb3VudCBwYXNzZWQgdG8gYGlvX2J1bmRsZV9uYnVmcygpYCB1c2luZyBgc2VsLVxcdTAwM2V2YWxgLCBhbmQgcmVtb3ZlcyBhbiBpbmFwcHJvcHJpYXRlIGJ1ZmZlciBjb21taXQgb24gcmVjeWNsZS5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBQb3RlbnRpYWwgZXJyb3JzIHdvdWxkIGludm9sdmUgYnVmZmVyIHJpbmcgaW5kZXggdHJhY2tpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9fdXJpbmcgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGJ1ZmZlciBsaXN0IHNlbGVjdGlvbiwgYnVmZmVyIGNvbW1pdHMsIGFuZCBidWZmZXIgYnVuZGxlIGhhbmRsaW5nIGluIHJlY2VpdmUgb3BlcmF0aW9ucyAoSU9SSU5HX09QX1JFQ1YgLyBJT1JJTkdfT1BfUkVDVk1TRykuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTQ6MDAuODUxMzk3NTU1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY5NTU5NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTRkYjM5MTgwYjliOTMwZWMwMDM5NzFkZWMzNmI1Zjc1NDM3ZjMxY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDEzOjUzOjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2tidWYuYyBiL2lvX3VyaW5nL2tidWYuY1xcbmluZGV4IDdjMzA5MTczZGQxOTQuLmM0YmFlOGYwMDE3M2UgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcva2J1Zi5jXFxuKysrIGIvaW9fdXJpbmcva2J1Zi5jXFxuQEAgLTc2LDggKzc2LDggQEAgYm9vbCBpb19rYnVmX2NvbW1pdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICppb19idWZmZXJfZ2V0X2xpc3Qoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBiZ2lkKVxcbitzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmlvX2J1ZmZlcl9nZXRfbGlzdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgYmdpZClcXG4ge1xcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZjdHgtXFx1MDAzZXVyaW5nX2xvY2spO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5oIGIvaW9fdXJpbmcva2J1Zi5oXFxuaW5kZXggNDAxNzczZTFlZjgwNS4uNzA3OWYyZGVjOWUwZSAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9rYnVmLmhcXG4rKysgYi9pb191cmluZy9rYnVmLmhcXG5AQCAtNzEsNiArNzEsOCBAQCBzdHJ1Y3QgaW9fYnJfc2VsIGlvX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNpemVfdCAqbGVuLFxcbiBcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGJ1Zl9ncm91cCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG4gaW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4gXFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbitzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmlvX2J1ZmZlcl9nZXRfbGlzdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgYmdpZCk7XFxuIGludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbiBcXHRcXHQgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsKTtcXG4gdm9pZCBpb19kZXN0cm95X2J1ZmZlcnMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xcbmRpZmYgLS1naXQgYS9pb191cmluZy9uZXQuYyBiL2lvX3VyaW5nL25ldC5jXFxuaW5kZXggZmJlNzE5ZDg2YzQ2My4uYmZmNDUxNGMwMTAwYyAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9uZXQuY1xcbisrKyBiL2lvX3VyaW5nL25ldC5jXFxuQEAgLTQ4Myw4ICs0ODMsNiBAQCBzdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IGxlbilcXG4ge1xcbiBcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JMX05PX1JFQ1lDTEU7XFxuLVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpXFxuLVxcdFxcdGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpO1xcbiBcXHRyZXR1cm4gSU9VX1JFVFJZO1xcbiB9XFxuIFxcbkBAIC04NzcsNyArODc1LDggQEAgc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbiBcXHRpZiAoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkge1xcbiBcXHRcXHRzaXplX3QgdGhpc19yZXQgPSBzZWwtXFx1MDAzZXZhbCAtIHNyLVxcdTAwM2Vkb25lX2lvO1xcbiBcXG4tXFx0XFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIHRoaXNfcmV0LCBzZWwtXFx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgdGhpc19yZXQpKTtcXG4rXFx0XFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIHRoaXNfcmV0LCBzZWwtXFx1MDAzZWJ1Zl9saXN0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgaW9fYnVuZGxlX25idWZzKGttc2csIHNlbC1cXHUwMDNldmFsKSk7XFxuIFxcdFxcdGlmIChzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVl9SRVRSWSlcXG4gXFx0XFx0XFx0Y2ZsYWdzID0gcmVxLVxcdTAwM2VjcWUuZmxhZ3MgfCAoY2ZsYWdzIFxcdTAwMjYgQ1FFX0ZfTUFTSyk7XFxuIFxcdFxcdGlmIChzci1cXHUwMDNlbXNob3RfbGVuIFxcdTAwMjZcXHUwMDI2IHNlbC1cXHUwMDNldmFsIFxcdTAwM2U9IHNyLVxcdTAwM2Vtc2hvdF9sZW4pXFxuQEAgLTEyMjEsNiArMTIyMCw4IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0c3ItXFx1MDAzZWJ1ZiA9IE5VTEw7XFxuK1xcdH0gZWxzZSBpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0JVRkZFUl9SSU5HKSB7XFxuK1xcdFxcdHNlbC5idWZfbGlzdCA9IGlvX2J1ZmZlcl9nZXRfbGlzdChyZXEtXFx1MDAzZWN0eCwgc3ItXFx1MDAzZWJ1Zl9ncm91cCk7XFxuIFxcdH1cXG4gXFxuIFxcdGttc2ctXFx1MDAzZW1zZy5tc2dfZmxhZ3MgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzo1NDowMi4yMjE3MTA2NTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI4NjAzMjI0NTMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fcmVjdlwiLFxuICAgIFwiaW9fcmVjdm1zZ1wiLFxuICAgIFwiaW9fYnVmZmVyX2dldF9saXN0XCIsXG4gICAgXCJpb19rYnVmX2NvbW1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9fdXJpbmcgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGJ1ZmZlciBsaXN0IHNlbGVjdGlvbiwgYnVmZmVyIGNvbW1pdHMsIGFuZCBidWZmZXIgYnVuZGxlIGhhbmRsaW5nIGluIHJlY2VpdmUgb3BlcmF0aW9ucyAoSU9SSU5HX09QX1JFQ1YgLyBJT1JJTkdfT1BfUkVDVk1TRykuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTRkYjM5MTgwYjliOTMwZWMwMDM5NzFkZWMzNmI1Zjc1NDM3ZjMxY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTM6NTM6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9rYnVmLmMgYi9pb191cmluZy9rYnVmLmNcbmluZGV4IDdjMzA5MTczZGQxOTQuLmM0YmFlOGYwMDE3M2UgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9rYnVmLmNcbisrKyBiL2lvX3VyaW5nL2tidWYuY1xuQEAgLTc2LDggKzc2LDggQEAgYm9vbCBpb19rYnVmX2NvbW1pdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqaW9fYnVmZmVyX2dldF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLVx0XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IGJnaWQpXG4rc3RydWN0IGlvX2J1ZmZlcl9saXN0ICppb19idWZmZXJfZ2V0X2xpc3Qoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGJnaWQpXG4ge1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZjdHgtXHUwMDNldXJpbmdfbG9jayk7XG4gXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5oIGIvaW9fdXJpbmcva2J1Zi5oXG5pbmRleCA0MDE3NzNlMWVmODA1Li43MDc5ZjJkZWM5ZTBlIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcva2J1Zi5oXG4rKysgYi9pb191cmluZy9rYnVmLmhcbkBAIC03MSw2ICs3MSw4IEBAIHN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGJ1Zl9ncm91cCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbiBpbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuIFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG4rc3RydWN0IGlvX2J1ZmZlcl9saXN0ICppb19idWZmZXJfZ2V0X2xpc3Qoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGJnaWQpO1xuIGludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuIFx0XHQgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsKTtcbiB2b2lkIGlvX2Rlc3Ryb3lfYnVmZmVycyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbmV0LmMgYi9pb191cmluZy9uZXQuY1xuaW5kZXggZmJlNzE5ZDg2YzQ2My4uYmZmNDUxNGMwMTAwYyAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL25ldC5jXG4rKysgYi9pb191cmluZy9uZXQuY1xuQEAgLTQ4Myw4ICs0ODMsNiBAQCBzdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLCBpbnQgbGVuKVxuIHtcbiBcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9OT19SRUNZQ0xFO1xuLVx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpXG4tXHRcdGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpO1xuIFx0cmV0dXJuIElPVV9SRVRSWTtcbiB9XG4gXG5AQCAtODc3LDcgKzg3NSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkge1xuIFx0XHRzaXplX3QgdGhpc19yZXQgPSBzZWwtXHUwMDNldmFsIC0gc3ItXHUwMDNlZG9uZV9pbztcbiBcbi1cdFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIHRoaXNfcmV0LCBzZWwtXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCB0aGlzX3JldCkpO1xuK1x0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCxcbitcdFx0XHRcdCAgICAgICBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVx1MDAzZXZhbCkpO1xuIFx0XHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxuIFx0XHRcdGNmbGFncyA9IHJlcS1cdTAwM2VjcWUuZmxhZ3MgfCAoY2ZsYWdzIFx1MDAyNiBDUUVfRl9NQVNLKTtcbiBcdFx0aWYgKHNyLVx1MDAzZW1zaG90X2xlbiBcdTAwMjZcdTAwMjYgc2VsLVx1MDAzZXZhbCBcdTAwM2U9IHNyLVx1MDAzZW1zaG90X2xlbilcbkBAIC0xMjIxLDYgKzEyMjAsOCBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHRcdH1cbiBcdFx0c3ItXHUwMDNlYnVmID0gTlVMTDtcbitcdH0gZWxzZSBpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9CVUZGRVJfUklORykge1xuK1x0XHRzZWwuYnVmX2xpc3QgPSBpb19idWZmZXJfZ2V0X2xpc3QocmVxLVx1MDAzZWN0eCwgc3ItXHUwMDNlYnVmX2dyb3VwKTtcbiBcdH1cbiBcbiBcdGttc2ctXHUwMDNlbXNnLm1zZ19mbGFncyA9IDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzo1NDowMi4yMjE3MTI2ODNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjczNTMwNzU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElPX1VSSU5HIE5ldHdvcmsgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgYW5kIHRoZWlyIGltcGFjdC4gSSBzZWUgY2hhbmdlcyBpbiBgaW9fdXJpbmcva2J1Zi5jYCwgYGlvX3VyaW5nL2tidWYuaGAsIGFuZCBgaW9fdXJpbmcvbmV0LmNgLiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBgaW9fdXJpbmdgIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIG5ldHdvcmsgb3BlcmF0aW9ucywgbGlrZWx5IHJlbGF0ZWQgdG8gcmVjZWl2ZSBvcGVyYXRpb25zIHdpdGggYnVmZmVyIGJ1bmRsZXMgb3IgdGhlIGJ1ZmZlciByaW5nLlxuXG5UbyBnZXQgYSBoYW5kbGUgb24gdGhlIHNwZWNpZmljcywgSSdsbCBsZXZlcmFnZSBteSB1c3VhbCB0b29sa2l0IOKAkyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHRvIG1ldGljdWxvdXNseSBpbnNwZWN0IGBpb191cmluZy9uZXQuY2AgYW5kIGBpb191cmluZy9rYnVmLmNgLiBJJ2xsIGFsc28gY2hlY2sgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgaW5jbHVkZSBmaWxlcyBmb3IgYW55IGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldHdvcmsgb3BlcmF0aW9ucyB3aXRoIHRoZSBjaGFuZ2VzIHRvIGtidWYgc3RydWN0dXJlcy4gVGhpcyBzaG91bGQgdGVsbCBtZSB3aGF0J3MgY2hhbmdlZCBhbmQgdGhlIGludGVudCBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjcsIk91dHB1dFRva2VucyI6MTA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTQ6MzQuOTU3MDIyODM2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL25ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ3NTpcXHRcXHRcXHRuYnVmcysrO1xcbiA0NzY6XFx0XFx0XFx0cmV0IC09IHRoaXNfbGVuO1xcbiA0Nzc6XFx0XFx0fSB3aGlsZSAocmV0KTtcXG4gNDc4OlxcdFxcbiA0Nzk6XFx0XFx0cmV0dXJuIG5idWZzO1xcbiA0ODA6XFx0fVxcbiA0ODE6XFx0XFxuIDQ4MjpcXHRzdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG4gNDgzOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCBsZW4pXFxuIDQ4NDpcXHR7XFxuIDQ4NTpcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JMX05PX1JFQ1lDTEU7XFxuIDQ4NjpcXHRcXHRyZXR1cm4gSU9VX1JFVFJZO1xcbiA0ODc6XFx0fVxcbiA0ODg6XFx0XFxuIDQ4OTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuIDQ5MDpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuIDQ5MTpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19icl9zZWwgKnNlbClcXG4gNDkyOlxcdHtcXG4gNDkzOlxcdFxcdHN0cnVjdCBpb19zcl9tc2cgKnNyID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7XFxuIDQ5NDpcXHRcXHRib29sIGJ1bmRsZV9maW5pc2hlZCA9IHNlbC1cXHUwMDNldmFsIFxcdTAwM2M9IDA7XFxuIDQ5NTpcXHRcXHR1bnNpZ25lZCBpbnQgY2ZsYWdzO1xcbiA0OTY6XFx0XFxuIDQ5NzpcXHRcXHRpZiAoIShzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSkge1xcbiA0OTg6XFx0XFx0XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBzZWwtXFx1MDAzZXZhbCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuIDQ5OTpcXHRcXHRcXHRnb3RvIGZpbmlzaDtcXG4gNTAwOlxcdFxcdH1cXG4gNTAxOlxcdFxcbiA1MDI6XFx0XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXFx1MDAzZXZhbCkpO1xcbiA1MDM6XFx0XFxuIDUwNDpcXHRcXHQvKlxcbiA1MDU6XFx0XFx0ICogRG9uJ3Qgc3RhcnQgbmV3IGJ1bmRsZXMgaWYgdGhlIGJ1ZmZlciBsaXN0IGlzIGVtcHR5LCBvciBpZiB0aGVcXG4gNTA2OlxcdFxcdCAqIGN1cnJlbnQgb3BlcmF0aW9uIG5lZWRlZCB0byBnbyB0aHJvdWdoIHBvbGxpbmcgdG8gY29tcGxldGUuXFxuIDUwNzpcXHRcXHQgKi9cXG4gNTA4OlxcdFxcdGlmIChidW5kbGVfZmluaXNoZWQgfHwgcmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IChSRVFfRl9CTF9FTVBUWSB8IFJFUV9GX1BPTExFRCkpXFxuIDUwOTpcXHRcXHRcXHRnb3RvIGZpbmlzaDtcXG4gNTEwOlxcdFxcbiA1MTE6XFx0XFx0LypcXG4gNTEyOlxcdFxcdCAqIEZpbGwgQ1FFIGZvciB0aGlzIHJlY2VpdmUgYW5kIHNlZSBpZiB3ZSBzaG91bGQga2VlcCB0cnlpbmcgdG9cXG4gNTEzOlxcdFxcdCAqIHJlY2VpdmUgZnJvbSB0aGlzIHNvY2tldC5cXG4gNTE0OlxcdFxcdCAqL1xcbiA1MTU6XFx0XFx0aWYgKGlvX3JlcV9wb3N0X2NxZShyZXEsIHNlbC1cXHUwMDNldmFsLCBjZmxhZ3MgfCBJT1JJTkdfQ1FFX0ZfTU9SRSkpIHtcXG4gNTE2OlxcdFxcdFxcdGlvX21zaG90X3ByZXBfcmV0cnkocmVxLCBrbXNnKTtcXG4gNTE3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNTE4OlxcdFxcdH1cXG4gNTE5OlxcdFxcbiA1MjA6XFx0XFx0LyogT3RoZXJ3aXNlIHN0b3AgYnVuZGxlIGFuZCB1c2UgdGhlIGN1cnJlbnQgcmVzdWx0LiAqL1xcbiA1MjE6XFx0ZmluaXNoOlxcbiA1MjI6XFx0XFx0aW9fcmVxX3NldF9yZXMocmVxLCBzZWwtXFx1MDAzZXZhbCwgY2ZsYWdzKTtcXG4gNTIzOlxcdFxcdHNlbC1cXHUwMDNldmFsID0gSU9VX0NPTVBMRVRFO1xcbiA1MjQ6XFx0XFx0cmV0dXJuIHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU0OjM0Ljk1NzE1MTk5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL25ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MDpcXHRcXHRcXHRcXHRzci1cXHUwMDNlZmxhZ3MgfD0gSU9SSU5HX1JFQ1ZfTVNIT1RfRE9ORTtcXG4gODcxOlxcdFxcdFxcdFxcdG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcXG4gODcyOlxcdFxcdFxcdH1cXG4gODczOlxcdFxcdH1cXG4gODc0OlxcdFxcbiA4NzU6XFx0XFx0aWYgKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHtcXG4gODc2OlxcdFxcdFxcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cXHUwMDNldmFsIC0gc3ItXFx1MDAzZWRvbmVfaW87XFxuIDg3NzpcXHRcXG4gODc4OlxcdFxcdFxcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLVxcdTAwM2VidWZfbGlzdCxcXG4gODc5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVxcdTAwM2V2YWwpKTtcXG4gODgwOlxcdFxcdFxcdGlmIChzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVl9SRVRSWSlcXG4gODgxOlxcdFxcdFxcdFxcdGNmbGFncyA9IHJlcS1cXHUwMDNlY3FlLmZsYWdzIHwgKGNmbGFncyBcXHUwMDI2IENRRV9GX01BU0spO1xcbiA4ODI6XFx0XFx0XFx0aWYgKHNyLVxcdTAwM2Vtc2hvdF9sZW4gXFx1MDAyNlxcdTAwMjYgc2VsLVxcdTAwM2V2YWwgXFx1MDAzZT0gc3ItXFx1MDAzZW1zaG90X2xlbilcXG4gODgzOlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9NU0hPVF9DQVA7XFxuIDg4NDpcXHRcXHRcXHQvKiBidW5kbGUgd2l0aCBubyBtb3JlIGltbWVkaWF0ZSBidWZmZXJzLCB3ZSdyZSBkb25lICovXFxuIDg4NTpcXHRcXHRcXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0JMX0VNUFRZKVxcbiA4ODY6XFx0XFx0XFx0XFx0Z290byBmaW5pc2g7XFxuIDg4NzpcXHRcXHRcXHQvKlxcbiA4ODg6XFx0XFx0XFx0ICogSWYgbW9yZSBpcyBhdmFpbGFibGUgQU5EIGl0IHdhcyBhIGZ1bGwgdHJhbnNmZXIsIHJldHJ5IGFuZFxcbiA4ODk6XFx0XFx0XFx0ICogYXBwZW5kIHRvIHRoaXMgb25lXFxuIDg5MDpcXHRcXHRcXHQgKi9cXG4gODkxOlxcdFxcdFxcdGlmICghKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWX05PX1JFVFJZKSBcXHUwMDI2XFx1MDAyNlxcbiA4OTI6XFx0XFx0XFx0ICAgIGttc2ctXFx1MDAzZW1zZy5tc2dfaW5xIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiB0aGlzX3JldCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4gODkzOlxcdFxcdFxcdCAgICAhaW92X2l0ZXJfY291bnQoXFx1MDAyNmttc2ctXFx1MDAzZW1zZy5tc2dfaXRlcikpIHtcXG4gODk0OlxcdFxcdFxcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzID0gY2ZsYWdzIFxcdTAwMjYgfkNRRV9GX01BU0s7XFxuIDg5NTpcXHRcXHRcXHRcXHRzci1cXHUwMDNlbGVuID0ga21zZy1cXHUwMDNlbXNnLm1zZ19pbnE7XFxuIDg5NjpcXHRcXHRcXHRcXHRzci1cXHUwMDNlZG9uZV9pbyArPSB0aGlzX3JldDtcXG4gODk3OlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9SRVRSWTtcXG4gODk4OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODk5OlxcdFxcdFxcdH1cXG4gOTAwOlxcdFxcdH0gZWxzZSB7XFxuIDkwMTpcXHRcXHRcXHRjZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBzZWwtXFx1MDAzZXZhbCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuIDkwMjpcXHRcXHR9XFxuIDkwMzpcXHRcXG4gOTA0OlxcdFxcdC8qXFxuIDkwNTpcXHRcXHQgKiBGaWxsIENRRSBmb3IgdGhpcyByZWNlaXZlIGFuZCBzZWUgaWYgd2Ugc2hvdWxkIGtlZXAgdHJ5aW5nIHRvXFxuIDkwNjpcXHRcXHQgKiByZWNlaXZlIGZyb20gdGhpcyBzb2NrZXQuXFxuIDkwNzpcXHRcXHQgKi9cXG4gOTA4OlxcdFxcdGlmICgocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkgXFx1MDAyNlxcdTAwMjYgIW1zaG90X2ZpbmlzaGVkIFxcdTAwMjZcXHUwMDI2XFxuIDkwOTpcXHRcXHQgICAgaW9fcmVxX3Bvc3RfY3FlKHJlcSwgc2VsLVxcdTAwM2V2YWwsIGNmbGFncyB8IElPUklOR19DUUVfRl9NT1JFKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzo1NDozNC45NTcyMjkzMTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9uZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjEwOlxcdFxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gflJFUV9GX0lNUE9SVF9CVUZGRVI7XFxuMTIxMTpcXHRcXHR9XFxuMTIxMjpcXHRcXG4xMjEzOlxcdHJldHJ5X211bHRpc2hvdDpcXG4xMjE0OlxcdFxcdHNlbC5idWZfbGlzdCA9IE5VTEw7XFxuMTIxNTpcXHRcXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XFxuMTIxNjpcXHRcXHRcXHRzZWwudmFsID0gc3ItXFx1MDAzZWxlbjtcXG4xMjE3OlxcdFxcdFxcdHJldCA9IGlvX3JlY3ZfYnVmX3NlbGVjdChyZXEsIGttc2csIFxcdTAwMjZzZWwsIGlzc3VlX2ZsYWdzKTtcXG4xMjE4OlxcdFxcdFxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAzYyAwKSkge1xcbjEyMTk6XFx0XFx0XFx0XFx0a21zZy1cXHUwMDNlbXNnLm1zZ19pbnEgPSAtMTtcXG4xMjIwOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTIyMTpcXHRcXHRcXHR9XFxuMTIyMjpcXHRcXHRcXHRzci1cXHUwMDNlYnVmID0gTlVMTDtcXG4xMjIzOlxcdFxcdH0gZWxzZSBpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0JVRkZFUl9SSU5HKSB7XFxuMTIyNDpcXHRcXHRcXHRzZWwuYnVmX2xpc3QgPSBpb19idWZmZXJfZ2V0X2xpc3QocmVxLVxcdTAwM2VjdHgsIHNyLVxcdTAwM2VidWZfZ3JvdXApO1xcbjEyMjU6XFx0XFx0fVxcbjEyMjY6XFx0XFxuMTIyNzpcXHRcXHRrbXNnLVxcdTAwM2Vtc2cubXNnX2ZsYWdzID0gMDtcXG4xMjI4OlxcdFxcdGttc2ctXFx1MDAzZW1zZy5tc2dfaW5xID0gLTE7XFxuMTIyOTpcXHRcXG4xMjMwOlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE1TR19XQUlUQUxMKVxcbjEyMzE6XFx0XFx0XFx0bWluX3JldCA9IGlvdl9pdGVyX2NvdW50KFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIpO1xcbjEyMzI6XFx0XFxuMTIzMzpcXHRcXHRyZXQgPSBzb2NrX3JlY3Ztc2coc29jaywgXFx1MDAyNmttc2ctXFx1MDAzZW1zZywgZmxhZ3MpO1xcbjEyMzQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIG1pbl9yZXQpIHtcXG4xMjM1OlxcdFxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTiBcXHUwMDI2XFx1MDAyNiBmb3JjZV9ub25ibG9jaykge1xcbjEyMzY6XFx0XFx0XFx0XFx0aW9fa2J1Zl9yZWN5Y2xlKHJlcSwgc2VsLmJ1Zl9saXN0LCBpc3N1ZV9mbGFncyk7XFxuMTIzNzpcXHRcXHRcXHRcXHRyZXR1cm4gSU9VX1JFVFJZO1xcbjEyMzg6XFx0XFx0XFx0fVxcbjEyMzk6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgaW9fbmV0X3JldHJ5KHNvY2ssIGZsYWdzKSkge1xcbjEyNDA6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWxlbiAtPSByZXQ7XFxuMTI0MTpcXHRcXHRcXHRcXHRzci1cXHUwMDNlYnVmICs9IHJldDtcXG4xMjQyOlxcdFxcdFxcdFxcdHNyLVxcdTAwM2Vkb25lX2lvICs9IHJldDtcXG4xMjQzOlxcdFxcdFxcdFxcdHJldHVybiBpb19uZXRfa2J1Zl9yZWN5bGUocmVxLCBzZWwuYnVmX2xpc3QsIGttc2csIHJldCk7XFxuMTI0NDpcXHRcXHRcXHR9XFxuMTI0NTpcXHRcXHRcXHRpZiAocmV0ID09IC1FUkVTVEFSVFNZUylcXG4xMjQ2OlxcdFxcdFxcdFxcdHJldCA9IC1FSU5UUjtcXG4xMjQ3OlxcdFxcdFxcdHJlcV9zZXRfZmFpbChyZXEpO1xcbjEyNDg6XFx0XFx0fSBlbHNlIGlmICgoZmxhZ3MgXFx1MDAyNiBNU0dfV0FJVEFMTCkgXFx1MDAyNlxcdTAwMjYgKGttc2ctXFx1MDAzZW1zZy5tc2dfZmxhZ3MgXFx1MDAyNiAoTVNHX1RSVU5DIHwgTVNHX0NUUlVOQykpKSB7XFxuMTI0OTpcXHRvdXRfZnJlZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTQ6MzQuOTU3MzA3MDk2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk3NTg4NDQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOlxuXG4qKkNoZWNraW5nIE15IENvbmZpZ3VyYXRpb246IGlvX3VyaW5nIGFuZCBOZXQqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgbXkgY29uZmlndXJhdGlvbnMgc2V0IHVwIGNvcnJlY3RseSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBpb191cmluZyBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGlvX3VyaW5nOyB0aGF0J3MgdGhlIGNvcmUuIFNvLCBJIG5lZWQgdG8gb3BlbiB1cCBLY29uZmlnIGFuZCB2ZXJpZnkgdGhlIGlvX3VyaW5nIG9wdGlvbnMgYXJlIGVuYWJsZWQgYXMgSSBleHBlY3QuIEl0J3MgYWxsIGFib3V0IG1ha2luZyBzdXJlIHRoYXQgdGhlIGxvdy1sZXZlbCBjb21wb25lbnRzIGFyZSB3aXJlZCBpbiB0aGUgd2F5IHRoYXQgSSB0aGluayB0aGV5IGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU1OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTQ6MzkuOTMzMTk0OTE3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MTY5ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5NTI9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5NTktXFxuaW5pdC9LY29uZmlnOjE5NjA6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5NjEtXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5Njk9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5ODEtXFxuaW5pdC9LY29uZmlnOjE5ODI6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTgzLVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU0OjQwLjAwMjM2OTA3NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMTcxNDA2NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgQnVpbGQgUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYG5ldC5jYCBhbmQgYGtidWYuY2AgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQgd2l0aGluIHRoZSBgaW9fdXJpbmdgIHByb2plY3QuIFRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgTWFrZWZpbGVgIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBidWlsZCBtYWdpYyB1c3VhbGx5IGhhcHBlbnMuIEknbGwgbmVlZCB0byBvcGVuIGFuZCBleGFtaW5lIGBpb191cmluZy9NYWtlZmlsZWAuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHNwZWNpZmljIHJ1bGVzIHJlbGF0ZWQgdG8gdGhvc2Ugc291cmNlIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5J3JlIGluY2x1ZGVkIGluIHRoZSBidWlsZCBwcm9jZXNzLCB3aGF0IGNvbXBpbGVyIGZsYWdzIGFyZSBiZWluZyB1c2VkLCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUsIGFuZCBob3cgdGhlIGZpbmFsIGV4ZWN1dGFibGVzIG9yIGxpYnJhcmllcyBhcmUgbGlua2VkLiBJdCdzIGFsbCBhYm91dCB0cmFjaW5nIHRoZSBwYXRoIGZyb20gc291cmNlIGNvZGUgdG8gdGhlIGZpbmFsIGFydGlmYWN0LCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHN0ZXBzIHRob3JvdWdobHkuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIG9iamVjdCBmaWxlIGNyZWF0aW9uLCBsaW5raW5nIHRvIGxpYnJhcmllcyAoZWl0aGVyIHN0YXRpYyBvciBkeW5hbWljKSwgYW5kIHBlcmhhcHMgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBmZWF0dXJlIGZsYWdzIG9yIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg5MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU0OjUyLjE3Mzc3ODUxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIGlvX3VyaW5nXFxuICAgNDpcXHRcXG4gICA1OlxcdGlmZGVmIENPTkZJR19HQ09WX1BST0ZJTEVfVVJJTkdcXG4gICA2OlxcdEdDT1ZfUFJPRklMRSA6PSB5XFxuICAgNzpcXHRlbmRpZlxcbiAgIDg6XFx0XFxuICAgOTpcXHRvYmotJChDT05GSUdfSU9fVVJJTkcpXFx0XFx0Kz0gaW9fdXJpbmcubyBvcGRlZi5vIGtidWYubyByc3JjLm8gbm90aWYubyBcXFxcXFxuICAxMDpcXHRcXHRcXHRcXHRcXHRcXHR0Y3R4Lm8gZmlsZXRhYmxlLm8gcncubyBwb2xsLm8gXFxcXFxcbiAgMTE6XFx0XFx0XFx0XFx0XFx0XFx0dHcubyB3YWl0Lm8gZXZlbnRmZC5vIHVyaW5nX2NtZC5vIFxcXFxcXG4gIDEyOlxcdFxcdFxcdFxcdFxcdFxcdG9wZW5jbG9zZS5vIHNxcG9sbC5vIHhhdHRyLm8gbm9wLm8gXFxcXFxcbiAgMTM6XFx0XFx0XFx0XFx0XFx0XFx0ZnMubyBzcGxpY2UubyBzeW5jLm8gbXNnX3JpbmcubyBcXFxcXFxuICAxNDpcXHRcXHRcXHRcXHRcXHRcXHRhZHZpc2UubyBvcGVuY2xvc2UubyBzdGF0eC5vIHRpbWVvdXQubyBcXFxcXFxuICAxNTpcXHRcXHRcXHRcXHRcXHRcXHRjYW5jZWwubyB3YWl0aWQubyByZWdpc3Rlci5vIFxcXFxcXG4gIDE2OlxcdFxcdFxcdFxcdFxcdFxcdHRydW5jYXRlLm8gbWVtbWFwLm8gYWxsb2NfY2FjaGUubyBcXFxcXFxuICAxNzpcXHRcXHRcXHRcXHRcXHRcXHRxdWVyeS5vIGxvb3Aub1xcbiAgMTg6XFx0XFxuICAxOTpcXHRvYmotJChDT05GSUdfSU9fVVJJTkdfWkNSWClcXHQrPSB6Y3J4Lm9cXG4gIDIwOlxcdG9iai0kKENPTkZJR19JT19XUSlcXHRcXHQrPSBpby13cS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU0OjUyLjE3Mzg0MTUwNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTkxNTg0NTEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgaW9fdXJpbmcgTWFrZWZpbGUqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhlIHJlc3Qgb2YgdGhlIGBpb191cmluZy9NYWtlZmlsZWAuIFRoaXMgbWVhbnMgSSdtIHByb2JhYmx5IHBhc3QgdGhlIGluaXRpYWwgb3ZlcnZpZXcgYW5kIGxpa2VseSBoYXZlIGEgc3BlY2lmaWMgYXJlYSBvZiBpbnRlcmVzdCDigJMgcGVyaGFwcyBidWlsZCBvcHRpb25zLCBsaW5raW5nIHN0cmF0ZWdpZXMsIGRlcGVuZGVuY3kgcmVzb2x1dGlvbiwgb3IgbWF5YmUgZXZlbiBjcm9zcy1jb21waWxhdGlvbiBjb25maWd1cmF0aW9ucy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2tpbSB0aGUgcmVtYWluaW5nIHNlY3Rpb25zIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLCBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgcGllY2VzIEkgbmVlZC4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIG1ha2VmaWxlIHN5bnRheCwgYXNzZXNzaW5nIGl0cyBjbGFyaXR5LCBhbmQgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGFyZWFzIG9mIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgZ290Y2hhcyB0aGF0IG1heSBjb21lIHVwIGR1cmluZyBteSB3b3JrIG9uIGl0LiBJIGFudGljaXBhdGUgdGhhdCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBuYXZpZ2F0ZSB0aGUgZG9jdW1lbnQgYW5kIGdhaW4gd2hhdCBpcyBuZWNlc3NhcnkgZm9yIHRoZSBjdXJyZW50IHRhc2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU2OjA0LjA4OTY4OTE2N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAyMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMTpcXHRvYmotJChDT05GSUdfRlVURVgpXFx0XFx0Kz0gZnV0ZXgub1xcbiAgMjI6XFx0b2JqLSQoQ09ORklHX0VQT0xMKVxcdFxcdCs9IGVwb2xsLm9cXG4gIDIzOlxcdG9iai0kKENPTkZJR19ORVRfUlhfQlVTWV9QT0xMKVxcdCs9IG5hcGkub1xcbiAgMjQ6XFx0b2JqLSQoQ09ORklHX05FVCkgKz0gbmV0Lm8gY21kX25ldC5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfUFJPQ19GUykgKz0gZmRpbmZvLm9cXG4gIDI2OlxcdG9iai0kKENPTkZJR19JT19VUklOR19NT0NLX0ZJTEUpICs9IG1vY2tfZmlsZS5vXFxuICAyNzpcXHRvYmotJChDT05GSUdfSU9fVVJJTkdfQlBGKSArPSBicGZfZmlsdGVyLm9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19JT19VUklOR19CUEZfT1BTKSArPSBicGYtb3BzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTY6MDQuMDg5NzQyOTc3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk4MjcwMjE3NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBpb191cmluZyBOZXR3b3JrIEludGVncmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbSBpbnRlcmZhY2VzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2suIFNwZWNpZmljYWxseSwgbXkgdGhvdWdodCBwcm9jZXNzIGlzIGZvY3VzaW5nIG9uIHRoZSBjb21waWxhdGlvbiBjb25kaXRpb25hbHMuIEZyb20gbXkgb2JzZXJ2YXRpb25zLCBpdCBhcHBlYXJzIGBpb191cmluZy9uZXQuY2AgaXMgb25seSBidWlsdCBpZiBib3RoIGBDT05GSUdfSU9fVVJJTkdgICphbmQqIGBDT05GSUdfTkVUYCBhcmUgZW5hYmxlZCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gT24gdGhlIG90aGVyIGhhbmQsIGBpb191cmluZy9rYnVmLmNgIG9ubHkgcmVxdWlyZXMgYENPTkZJR19JT19VUklOR2AuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSSBzZWUgYSBmZXcga2V5IHBsYXllcnM6XG5cbjEuICBgaW9fYnVmZmVyX2dldF9saXN0YCBpbiBgaW9fdXJpbmcva2J1Zi5jYCAtLSBJdCBpcyBubyBsb25nZXIgc3RhdGljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYW5kIHdoeSB0aGlzIGNoYW5nZWQuXG4yLiAgYGlvX3JlY3ZgIGluIGBpb191cmluZy9uZXQuY2AgLS0gVGhpcyBpcyBub3cgYSBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50IHNwZWNpZmljYWxseSBmb3IgYElPUklOR19PUF9SRUNWYC4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb24sIHNvIEknbGwgd2FudCB0byBzdHVkeSBpdHMgaW1wbGVtZW50YXRpb24gbW9yZSBjbG9zZWx5LlxuMy4gIGBpb19zZW5kX2ZpbmlzaGAsIGBpb19yZWN2X2ZpbmlzaGAsIGFuZCBgaW9fbmV0X2tidWZfcmVjeWxlYCBhcmUgYWxzbyBpbiBgaW9fdXJpbmcvbmV0LmNgLiBJIG5vdGUgdGhhdCB0aGVzZSBhcmUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYW5kIGFyZSBjYWxsZWQgZnJvbSB0aGUgcHJpbWFyeSBuZXR3b3JrLXJlbGF0ZWQgY2FsbHMgbGlrZSBgaW9fcmVjdmAgYW5kIGBpb19yZWN2bXNnYC5cbjQuICBUaGVuIHRoZXJlIGFyZSBhIGZldyBvdGhlciBoZWxwZXIgZnVuY3Rpb25zIHN1Y2ggYXMgYGlvX3JlY3ZfYnVmX3NlbGVjdGAsIGBpb19idWZmZXJzX3NlbGVjdGAsIGBpb19idWZmZXJzX3BlZWtgLCBgaW9fa2J1Zl9jb21taXRgLCBhbmQgYGlvX3B1dF9rYnVmc2AuXG5cblRvIHJlZmluZSBteSB1bmRlcnN0YW5kaW5nLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBhcyB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiB1c2VyLXNwYWNlIG1pZ2h0IGRpcmVjdGx5IGNhbGwuIFRoZXNlIGFyZTpcblxuKiAgIGBpb19yZWN2YFxuKiAgIGBpb19yZWN2bXNnYFxuKiAgIGBpb19idWZmZXJfZ2V0X2xpc3RgXG4qICAgYGlvX2tidWZfY29tbWl0YFxuXG5TbyBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGV0aGVyIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMg4oCTIGBpb19yZWN2YCwgYGlvX3JlY3Ztc2dgLCBgaW9fc2VuZGAsIGBpb19rYnVmX2NvbW1pdGAsIG9yIGBpb19idWZmZXJfZ2V0X2xpc3RgIOKAkyBhcmUgYWN0dWFsbHkgZXhwb3J0ZWQgb3IgZGVjbGFyZWQgYXMgbm9uLXN0YXRpYyBpbiB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzIChgaW9fdXJpbmcvbmV0LmhgIG9yIGBpb191cmluZy9rYnVmLmhgKS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBpbnRlbmRlZCB1c2FnZSBhbmQgc2NvcGUsIGFuZCBob3cgdGhlIG5ldHdvcmsgaW50ZWdyYXRpb24gaXMgbWVhbnQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk0MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU3OjQyLjM1OTk2Mzk5OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMDA5NDc4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19yZWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9uZXQuYz05Mz1lbnVtIHNyX3JldHJ5X2ZsYWdzIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTExMS1cXG5pb191cmluZy9uZXQuYzoxMTI6c3RydWN0IGlvX3JlY3Z6YyB7XFxuaW9fdXJpbmcvbmV0LmMtMTEzLVxcdHN0cnVjdCBmaWxlXFx0XFx0XFx0KmZpbGU7XFxuLS1cXG5pb191cmluZy9uZXQuYz02MjQ9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTcwMC1cXG5pb191cmluZy9uZXQuYzo3MDE6c3RhdGljIGludCBpb19yZWN2bXNnX21zaG90X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvbmV0LmMtNzAyLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICppb21zZyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTcyNC1cXG5pb191cmluZy9uZXQuYzo3MjU6c3RhdGljIGludCBpb19yZWN2bXNnX2NvcHlfaGRyKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbmlvX3VyaW5nL25ldC5jLTcyNi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2cpXFxuLS1cXG5pb191cmluZy9uZXQuYy03NDAtXFx0fVxcbmlvX3VyaW5nL25ldC5jOjc0MTpcXHRyZXR1cm4gaW9fcmVjdm1zZ19tc2hvdF9wcmVwKHJlcSwgaW9tc2csIG1zZy5tc2dfbmFtZWxlbixcXG5pb191cmluZy9uZXQuYy03NDItXFx0XFx0XFx0XFx0XFx0bXNnLm1zZ19jb250cm9sbGVuKTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTc0NC1cXG5pb191cmluZy9uZXQuYzo3NDU6c3RhdGljIGludCBpb19yZWN2bXNnX3ByZXBfc2V0dXAoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuaW9fdXJpbmcvbmV0LmMtNzQ2LXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTc3Mi1cXG5pb191cmluZy9uZXQuYzo3NzM6XFx0cmV0dXJuIGlvX3JlY3Ztc2dfY29weV9oZHIocmVxLCBrbXNnKTtcXG5pb191cmluZy9uZXQuYy03NzQtfVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNzc4LVxcbmlvX3VyaW5nL25ldC5jOjc3OTppbnQgaW9fcmVjdm1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuaW9fdXJpbmcvbmV0LmMtNzgwLXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTgzNy1cXHRzci1cXHUwMDNlbnJfbXVsdGlzaG90X2xvb3BzID0gMDtcXG5pb191cmluZy9uZXQuYzo4Mzg6XFx0cmV0dXJuIGlvX3JlY3Ztc2dfcHJlcF9zZXR1cChyZXEpO1xcbmlvX3VyaW5nL25ldC5jLTgzOS19XFxuLS1cXG5pb191cmluZy9uZXQuYy04NDUtLypcXG5pb191cmluZy9uZXQuYzo4NDY6ICogRmluaXNoZXMgaW9fcmVjdiBhbmQgaW9fcmVjdm1zZy5cXG5pb191cmluZy9uZXQuYy04NDctICpcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTg1MC0gKi9cXG5pb191cmluZy9uZXQuYzo4NTE6c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbmlvX3VyaW5nL25ldC5jLTg1Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuLS1cXG5pb191cmluZy9uZXQuYy05MzQtXFxuaW9fdXJpbmcvbmV0LmM6OTM1OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19wcmVwX211bHRpc2hvdChzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbmlvX3VyaW5nL25ldC5jLTkzNi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpb19zcl9tc2cgKnNyLCB2b2lkIF9fdXNlciAqKmJ1ZixcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTk1OS1cXG5pb191cmluZy9uZXQuYzo5NjA6c3RydWN0IGlvX3JlY3Ztc2dfbXVsdGlzaG90X2hkciB7XFxuaW9fdXJpbmcvbmV0LmMtOTYxLVxcdHN0cnVjdCBpb191cmluZ19yZWN2bXNnX291dCBtc2c7XFxuLS1cXG5pb191cmluZy9uZXQuYy05NjQtXFxuaW9fdXJpbmcvbmV0LmM6OTY1OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19tdWx0aXNob3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlvX3NyX21zZyAqaW8sXFxuaW9fdXJpbmcvbmV0LmMtOTY2LVxcdFxcdFxcdFxcdHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuLS1cXG5pb191cmluZy9uZXQuYy05NzAtXFx0aW50IGNvcHlfbGVuO1xcbmlvX3VyaW5nL25ldC5jOjk3MTpcXHRzdHJ1Y3QgaW9fcmVjdm1zZ19tdWx0aXNob3RfaGRyIGhkcjtcXG5pb191cmluZy9uZXQuYy05NzItXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMDA3LVxcdC8qIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIGdhcCBiZXR3ZWVuIGhkciBhbmQgc29ja2FkZHJfc3RvcmFnZSAqL1xcbmlvX3VyaW5nL25ldC5jOjEwMDg6XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpb19yZWN2bXNnX211bHRpc2hvdF9oZHIsIGFkZHIpICE9XFxuaW9fdXJpbmcvbmV0LmMtMTAwOS1cXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfcmVjdm1zZ19vdXQpKTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEwMTgtXFxuaW9fdXJpbmcvbmV0LmM6MTAxOTppbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbmlvX3VyaW5nL25ldC5jLTEwMjAte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTA1MS1cXHRcXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkge1xcbmlvX3VyaW5nL25ldC5jOjEwNTI6XFx0XFx0XFx0cmV0ID0gaW9fcmVjdm1zZ19wcmVwX211bHRpc2hvdChrbXNnLCBzciwgXFx1MDAyNnNlbC5hZGRyLCBcXHUwMDI2bGVuKTtcXG5pb191cmluZy9uZXQuYy0xMDUzLVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEwNjQtXFx0aWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpIHtcXG5pb191cmluZy9uZXQuYzoxMDY1OlxcdFxcdHJldCA9IGlvX3JlY3Ztc2dfbXVsdGlzaG90KHNvY2ssIHNyLCBrbXNnLCBmbGFncyxcXG5pb191cmluZy9uZXQuYy0xMDY2LVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZtc2hvdF9maW5pc2hlZCk7XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMDk5LVxcdHNlbC52YWwgPSByZXQ7XFxuaW9fdXJpbmcvbmV0LmM6MTEwMDpcXHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSlcXG5pb191cmluZy9uZXQuYy0xMTAxLVxcdFxcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTEwNS1cXG5pb191cmluZy9uZXQuYzoxMTA2OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbmlvX3VyaW5nL25ldC5jLTExMDctXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTc3LVxcbmlvX3VyaW5nL25ldC5jOjExNzg6aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9uZXQuYy0xMTc5LXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyMTYtXFx0XFx0c2VsLnZhbCA9IHNyLVxcdTAwM2VsZW47XFxuaW9fdXJpbmcvbmV0LmM6MTIxNzpcXHRcXHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmMtMTIxOC1cXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyNjEtXFx0c2VsLnZhbCA9IHJldDtcXG5pb191cmluZy9uZXQuYzoxMjYyOlxcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MpKVxcbmlvX3VyaW5nL25ldC5jLTEyNjMtXFx0XFx0Z290byByZXRyeV9tdWx0aXNob3Q7XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMjY3LVxcbmlvX3VyaW5nL25ldC5jOjEyNjg6aW50IGlvX3JlY3Z6Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuaW9fdXJpbmcvbmV0LmMtMTI2OS17XFxuaW9fdXJpbmcvbmV0LmM6MTI3MDpcXHRzdHJ1Y3QgaW9fcmVjdnpjICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19yZWN2emMpO1xcbmlvX3VyaW5nL25ldC5jLTEyNzEtXFx0dW5zaWduZWQgaWZxX2lkeDtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyOTUtXFxuaW9fdXJpbmcvbmV0LmM6MTI5NjppbnQgaW9fcmVjdnpjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvbmV0LmMtMTI5Ny17XFxuaW9fdXJpbmcvbmV0LmM6MTI5ODpcXHRzdHJ1Y3QgaW9fcmVjdnpjICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19yZWN2emMpO1xcbmlvX3VyaW5nL25ldC5jLTEyOTktXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4tLVxcbmlvX3VyaW5nL25ldC5oPTM1PWludCBpb19zZW5kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL25ldC5oLTM2LVxcbmlvX3VyaW5nL25ldC5oOjM3OmludCBpb19yZWN2bXNnX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XFxuaW9fdXJpbmcvbmV0Lmg6Mzg6aW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0Lmg6Mzk6aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmgtNDAtXFxuLS1cXG5pb191cmluZy9vcGRlZi5jPTU0PWNvbnN0IHN0cnVjdCBpb19pc3N1ZV9kZWYgaW9faXNzdWVfZGVmc1tdID0ge1xcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy0xNTgtXFx0XFx0LmFzeW5jX3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyKSxcXG5pb191cmluZy9vcGRlZi5jOjE1OTpcXHRcXHQucHJlcFxcdFxcdFxcdD0gaW9fcmVjdm1zZ19wcmVwLFxcbmlvX3VyaW5nL29wZGVmLmM6MTYwOlxcdFxcdC5pc3N1ZVxcdFxcdFxcdD0gaW9fcmVjdm1zZyxcXG5pb191cmluZy9vcGRlZi5jLTE2MS0jZWxzZVxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy0zMDItXFx0XFx0LmFzeW5jX3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyKSxcXG5pb191cmluZy9vcGRlZi5jOjMwMzpcXHRcXHQucHJlcFxcdFxcdFxcdD0gaW9fcmVjdm1zZ19wcmVwLFxcbmlvX3VyaW5nL29wZGVmLmM6MzA0OlxcdFxcdC5pc3N1ZVxcdFxcdFxcdD0gaW9fcmVjdixcXG5pb191cmluZy9vcGRlZi5jLTMwNS0jZWxzZVxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy01MjgtI2lmIGRlZmluZWQoQ09ORklHX05FVClcXG5pb191cmluZy9vcGRlZi5jOjUyOTpcXHRcXHQucHJlcFxcdFxcdFxcdD0gaW9fcmVjdnpjX3ByZXAsXFxuaW9fdXJpbmcvb3BkZWYuYzo1MzA6XFx0XFx0Lmlzc3VlXFx0XFx0XFx0PSBpb19yZWN2emMsXFxuaW9fdXJpbmcvb3BkZWYuYy01MzEtI2Vsc2VcXG4tLVxcbmlvX3VyaW5nL3pjcnguaD0xMzA9c3RhdGljIGlubGluZSBpbnQgaW9femNyeF9jdHJsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvemNyeC5oLTEzNi1cXG5pb191cmluZy96Y3J4Lmg6MTM3OmludCBpb19yZWN2emMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvemNyeC5oOjEzODppbnQgaW9fcmVjdnpjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XFxuaW9fdXJpbmcvemNyeC5oLTEzOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTc6NDMuNzYwMDYyOTM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NzkwOTQ1MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBpb191cmluZyBOZXR3b3JrIFBhdGNoIENoYW5nZXMgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBwYXRjaCBjaGFuZ2VzIG1ldGhvZGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuIExvb2tpbmcgYXQgdGhlIGRpZmZzOlxuXG4xLiAgYGlvX2J1ZmZlcl9nZXRfbGlzdGAgaGFkIGl0cyBgc3RhdGljIGlubGluZWAgbW9kaWZpZXIgcmVtb3ZlZCBhbmQgaXMgbm93IGV4cG9zZWQgaW4gYGlvX3VyaW5nL2tidWYuaGAuIEludGVyZXN0aW5nLiBUaGlzIHByb2JhYmx5IHdpZGVucyBpdHMgc2NvcGUgb2YgdXNlLCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgbmV3IHBvc3NpYmlsaXRpZXMuXG4yLiAgVGhlIGBpb19uZXRfa2J1Zl9yZWN5bGVgIGZ1bmN0aW9uIGxvc3QgdGhlIGBSRVFfRl9CVUZGRVJTX0NPTU1JVGAgY29uZGl0aW9uYWwgY2hlY2ssIHdoZXJlIGBpb19rYnVmX2NvbW1pdGAgd2FzIHByZXZpb3VzbHkgY2FsbGVkLiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgY2hhbmdlIHRvIGJ1ZmZlciBtYW5hZ2VtZW50LiBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gaG93IHRoZXNlIGJ1ZmZlcnMgYXJlIG5vdyBoYW5kbGVkLlxuMy4gIEluIGBpb19yZWN2X2ZpbmlzaGAsIHRoZXJlJ3MgYSBtb2RpZmljYXRpb24gdG8gdXNlIGBzZWwtXHUwMDNldmFsYCBpbnN0ZWFkIG9mIGB0aGlzX3JldGAgd2l0aCBgaW9fYnVuZGxlX25idWZzYC4gVGhpcyBsb29rcyByZWxhdGVkIHRvIGhvdyBidWZmZXIgYnVuZGxlcyBhcmUgYmVpbmcgcHJvY2Vzc2VkIHBvc3QtcmVjZWl2ZS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYHNlbGAgc3RydWN0dXJlIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgcmVjZWl2ZSBvcGVyYXRpb24uXG40LiAgQW5kLCBjcml0aWNhbGx5LCBgaW9fcmVjdmAgbm93IGhhcyBhZGRlZCBoYW5kbGluZyBmb3IgYFJFUV9GX0JVRkZFUl9SSU5HYCwgd2hlcmUgaXQgb2J0YWlucyB0aGUgYnVmZmVyIGxpc3QuIFRoYXQncyBhIG1ham9yIGNoYW5nZTogYHNlbC5idWZfbGlzdCA9IGlvX2J1ZmZlcl9nZXRfbGlzdChyZXEtXHUwMDNlY3R4LCBzci1cdTAwM2VidWZfZ3JvdXApO2AuXG5cbkdpdmVuIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHJlY2VpdmUgb3BlcmF0aW9ucyB3aXRoIGJ1ZmZlciByaW5ncyBhbmQgYnVuZGxlcywgSSB0aGluayB0aGlzIGFic29sdXRlbHkgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoaXMgaXMgY29yZSBrZXJuZWwgY29kZTsgaXQncyByZWFjaGFibGUgZnJvbSBib3RoIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgdXNlcnNwYWNlIHRocm91Z2ggdGhlIGlvX3VyaW5nIHN5c2NhbGxzLCBzbyBpdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBJJ2xsIG5lZWQgYElPX1VSSU5HYCBhbmQgYE5FVGAgZW5hYmxlZC4gVGhhdCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtLlxuXG5Ob3csIGxldCdzIHNvbGlkaWZ5IHRoZSBmb2N1cyBzeW1ib2xzLiBUaGUga2V5IGZ1bmN0aW9ucyB0byBpbnZlc3RpZ2F0ZSBhcmUgYGlvX3JlY3ZgLCBgaW9fcmVjdm1zZ2AsIGBpb19idWZmZXJfZ2V0X2xpc3RgLCBhbmQgYGlvX2tidWZfY29tbWl0YC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVzZSBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgdGhlIG9uZXMgaW4gYGlvX3VyaW5nL2tidWYuY2AgYW5kIGBpb191cmluZy9uZXQuY2AsIGFyZW4ndCBzdGF0aWMuIFllcCwgYmFzZWQgb24gdGhlIGNvbnRleHQsIGBpb19yZWN2YCwgYGlvX3JlY3Ztc2dgLCBgaW9fYnVmZmVyX2dldF9saXN0YCwgYW5kIGBpb19rYnVmX2NvbW1pdGAgYXJlIGFsbCBub24tc3RhdGljLlxuXG5FeGNlbGxlbnQuIFRoaXMgbG9va3MgbGlrZSBhIHByb21pc2luZyBhdmVudWUgZm9yIGZ1enppbmcsIEknbGwgZ28gYWhlYWQgYW5kIHNldCB1cCBhIGZ1enplciBjb25maWd1cmF0aW9uLiBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaW9fa2J1Zl9jb21taXRgIGlzbid0IHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTg6MTEuNTUxMDExMjI3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDI3ODMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19rYnVmX2NvbW1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcva2J1Zi5jPTM2PXN0YXRpYyBib29sIGlvX2tidWZfaW5jX2NvbW1pdChzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbGVuKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTYyLVxcbmlvX3VyaW5nL2tidWYuYzo2Mzpib29sIGlvX2tidWZfY29tbWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbmlvX3VyaW5nL2tidWYuYy02NC1cXHRcXHQgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IGxlbiwgaW50IG5yKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jPTE5Mz1zdGF0aWMgc3RydWN0IGlvX2JyX3NlbCBpb19yaW5nX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNpemVfdCAqbGVuLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTIyMy1cXHRpZiAoaW9fc2hvdWxkX2NvbW1pdChyZXEsIGlzc3VlX2ZsYWdzKSkge1xcbmlvX3VyaW5nL2tidWYuYzoyMjQ6XFx0XFx0aWYgKCFpb19rYnVmX2NvbW1pdChyZXEsIHNlbC5idWZfbGlzdCwgKmxlbiwgMSkpXFxuaW9fdXJpbmcva2J1Zi5jLTIyNS1cXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRl9NT1JFO1xcbi0tXFxuaW9fdXJpbmcva2J1Zi5jPTM0NT1pbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTM2Ni1cXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRkZFUlNfQ09NTUlUIHwgUkVRX0ZfQkxfTk9fUkVDWUNMRTtcXG5pb191cmluZy9rYnVmLmM6MzY3OlxcdFxcdFxcdGlmICghaW9fa2J1Zl9jb21taXQocmVxLCBzZWwtXFx1MDAzZWJ1Zl9saXN0LCBhcmctXFx1MDAzZW91dF9sZW4sIHJldCkpXFxuaW9fdXJpbmcva2J1Zi5jLTM2OC1cXHRcXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRl9NT1JFO1xcbi0tXFxuaW9fdXJpbmcva2J1Zi5jPTQwNz1zdGF0aWMgaW5saW5lIGJvb2wgX19pb19wdXRfa2J1Zl9yaW5nKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTQxMi1cXHRpZiAoYmwpXFxuaW9fdXJpbmcva2J1Zi5jOjQxMzpcXHRcXHRyZXQgPSBpb19rYnVmX2NvbW1pdChyZXEsIGJsLCBsZW4sIG5yKTtcXG5pb191cmluZy9rYnVmLmMtNDE0LVxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9CVUZfTU9SRSkpXFxuLS1cXG5pb191cmluZy9rYnVmLmg9OTE9dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbmlvX3VyaW5nL2tidWYuaC05Mi1cXHRcXHRcXHQgICAgaW50IGxlbiwgaW50IG5idWZzKTtcXG5pb191cmluZy9rYnVmLmg6OTM6Ym9vbCBpb19rYnVmX2NvbW1pdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG5pb191cmluZy9rYnVmLmgtOTQtXFx0XFx0ICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBsZW4sIGludCBucik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU4OjExLjYxMTI5MzA4NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjU0NDgzMjI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBc3Nlc3NtZW50IGFuZCBBY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aGUgY3VycmVudCBzdGF0ZSBzZWVtcyBzdGFibGU7IG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgYXJlIHBvcHBpbmcgdXAgZnJvbSB3aGF0IEknbSBzZWVpbmcuIFRoaXMgbG9va3MgZ29vZC4gQmFzZWQgb24gbXkgYW5hbHlzaXMgYW5kIHRoZSBvdmVyYWxsIGV2YWx1YXRpb24sIGl0J3MgdGltZSB0byB0cmlnZ2VyIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuIEknbSBjb25maWRlbnQgaW4gdGhlIGRhdGEsIHRoZSBwcm9jZXNzLCBhbmQgdGhlIGV4cGVjdGVkIG91dGNvbWUuIEl0J3MgdGltZSB0byBzb2xpZGlmeSB0aGUgcmVzdWx0cyBvZiB0aGlzIHN0YWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI2NSwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzo1ODo0OC4xNTYxMjc0ODdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzgyNTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX3JlY3Ztc2dcIixcbiAgICBcImlvX2J1ZmZlcl9nZXRfbGlzdFwiLFxuICAgIFwiaW9fa2J1Zl9jb21taXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvX3VyaW5nIG5ldHdvcmtpbmcgbG9naWMsIHNwZWNpZmljYWxseSBidWZmZXIgbGlzdCBzZWxlY3Rpb24sIGJ1ZmZlciBjb21taXRzLCBhbmQgYnVmZmVyIGJ1bmRsZSBoYW5kbGluZyBpbiByZWNlaXZlIG9wZXJhdGlvbnMgKElPUklOR19PUF9SRUNWIC8gSU9SSU5HX09QX1JFQ1ZNU0cpLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX3JlY3Ztc2dcIixcbiAgICBcImlvX2J1ZmZlcl9nZXRfbGlzdFwiLFxuICAgIFwiaW9fa2J1Zl9jb21taXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvX3VyaW5nIG5ldHdvcmtpbmcgbG9naWMsIHNwZWNpZmljYWxseSBidWZmZXIgbGlzdCBzZWxlY3Rpb24sIGJ1ZmZlciBjb21taXRzLCBhbmQgYnVmZmVyIGJ1bmRsZSBoYW5kbGluZyBpbiByZWNlaXZlIG9wZXJhdGlvbnMgKElPUklOR19PUF9SRUNWIC8gSU9SSU5HX09QX1JFQ1ZNU0cpLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU4OjQ4LjI1Mzk1OTk5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyNjc2NTUzOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTg6NDguMjU0NTAyNzA2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTgyNjc2MDA3MTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYnVmZmVyIG1hbmFnZW1lbnQgYW5kIGFjY291bnRpbmcgbG9naWMgZm9yIGJ1bmRsZWQgYW5kIHJpbmcgYnVmZmVyIG5ldHdvcmsgcmVjZWl2ZXMgaW4gaW9fdXJpbmcgKGlvX3JlY3YgYW5kIGlvX3JlY3ZfZmluaXNoKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIGBzZWwuYnVmX2xpc3RgIGlzIHByb3Blcmx5IHJldHJpZXZlZCB3aGVuIGBSRVFfRl9CVUZGRVJfUklOR2AgaXMgYWN0aXZlLCBjb3JyZWN0cyB0aGUgYnVmZmVyIGNvdW50IHBhc3NlZCB0byBgaW9fYnVuZGxlX25idWZzKClgIHVzaW5nIGBzZWwtXFx1MDAzZXZhbGAsIGFuZCByZW1vdmVzIGFuIGluYXBwcm9wcmlhdGUgYnVmZmVyIGNvbW1pdCBvbiByZWN5Y2xlLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGF0aHMuIFBvdGVudGlhbCBlcnJvcnMgd291bGQgaW52b2x2ZSBidWZmZXIgcmluZyBpbmRleCB0cmFja2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTRkYjM5MTgwYjliOTMwZWMwMDM5NzFkZWMzNmI1Zjc1NDM3ZjMxY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTM6NTM6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9rYnVmLmMgYi9pb191cmluZy9rYnVmLmNcbmluZGV4IDdjMzA5MTczZGQxOTQuLmM0YmFlOGYwMDE3M2UgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9rYnVmLmNcbisrKyBiL2lvX3VyaW5nL2tidWYuY1xuQEAgLTc2LDggKzc2LDggQEAgYm9vbCBpb19rYnVmX2NvbW1pdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqaW9fYnVmZmVyX2dldF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLVx0XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IGJnaWQpXG4rc3RydWN0IGlvX2J1ZmZlcl9saXN0ICppb19idWZmZXJfZ2V0X2xpc3Qoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGJnaWQpXG4ge1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZjdHgtXHUwMDNldXJpbmdfbG9jayk7XG4gXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5oIGIvaW9fdXJpbmcva2J1Zi5oXG5pbmRleCA0MDE3NzNlMWVmODA1Li43MDc5ZjJkZWM5ZTBlIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcva2J1Zi5oXG4rKysgYi9pb191cmluZy9rYnVmLmhcbkBAIC03MSw2ICs3MSw4IEBAIHN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGJ1Zl9ncm91cCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbiBpbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuIFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG4rc3RydWN0IGlvX2J1ZmZlcl9saXN0ICppb19idWZmZXJfZ2V0X2xpc3Qoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGJnaWQpO1xuIGludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuIFx0XHQgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsKTtcbiB2b2lkIGlvX2Rlc3Ryb3lfYnVmZmVycyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbmV0LmMgYi9pb191cmluZy9uZXQuY1xuaW5kZXggZmJlNzE5ZDg2YzQ2My4uYmZmNDUxNGMwMTAwYyAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL25ldC5jXG4rKysgYi9pb191cmluZy9uZXQuY1xuQEAgLTQ4Myw4ICs0ODMsNiBAQCBzdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLCBpbnQgbGVuKVxuIHtcbiBcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9OT19SRUNZQ0xFO1xuLVx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpXG4tXHRcdGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpO1xuIFx0cmV0dXJuIElPVV9SRVRSWTtcbiB9XG4gXG5AQCAtODc3LDcgKzg3NSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkge1xuIFx0XHRzaXplX3QgdGhpc19yZXQgPSBzZWwtXHUwMDNldmFsIC0gc3ItXHUwMDNlZG9uZV9pbztcbiBcbi1cdFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIHRoaXNfcmV0LCBzZWwtXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCB0aGlzX3JldCkpO1xuK1x0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCxcbitcdFx0XHRcdCAgICAgICBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVx1MDAzZXZhbCkpO1xuIFx0XHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxuIFx0XHRcdGNmbGFncyA9IHJlcS1cdTAwM2VjcWUuZmxhZ3MgfCAoY2ZsYWdzIFx1MDAyNiBDUUVfRl9NQVNLKTtcbiBcdFx0aWYgKHNyLVx1MDAzZW1zaG90X2xlbiBcdTAwMjZcdTAwMjYgc2VsLVx1MDAzZXZhbCBcdTAwM2U9IHNyLVx1MDAzZW1zaG90X2xlbilcbkBAIC0xMjIxLDYgKzEyMjAsOCBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHRcdH1cbiBcdFx0c3ItXHUwMDNlYnVmID0gTlVMTDtcbitcdH0gZWxzZSBpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9CVUZGRVJfUklORykge1xuK1x0XHRzZWwuYnVmX2xpc3QgPSBpb19idWZmZXJfZ2V0X2xpc3QocmVxLVx1MDAzZWN0eCwgc3ItXHUwMDNlYnVmX2dyb3VwKTtcbiBcdH1cbiBcbiBcdGttc2ctXHUwMDNlbXNnLm1zZ19mbGFncyA9IDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzo1ODo0OC4yNTQ1MDM1NTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTEwNDQ3MjA1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogRGl2aW5nIGludG8gaW9fdXJpbmcvbmV0LmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhpcyBwYXRjaCBpcyBoaXR0aW5nIGEgZmV3IGtleSBmaWxlczogYGlvX3VyaW5nL2tidWYuY2AsIGBpb191cmluZy9rYnVmLmhgLCBhbmQgYGlvX3VyaW5nL25ldC5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBpb191cmluZy9uZXQuY2AsIHNvIEknbGwgc3RhcnQgdGhlcmUuIEknbGwgZmlyZSB1cCBgcmVhZC1maWxlYCB0byBnZXQgYSBnb29kIGNvbnRleHR1YWwgdW5kZXJzdGFuZGluZyBvZiAqZXhhY3RseSogd2hhdCdzIGJlaW5nIHR3ZWFrZWQgaW4gdGhhdCBmaWxlLiBJIG5lZWQgdG8gc2VlIHRoZSBiZWZvcmUgYW5kIGFmdGVyLCB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBsb2dpYywgYW5kIGdldCBhIHNvbGlkIGZlZWwgZm9yIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiB0aGUgbmV0d29ya2luZyBjb2RlLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTk6MzkuMjk5MjI3NzAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9uZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzA6XFx0XFx0Lyogc2hvcnQgdHJhbnNmZXIsIGNvdW50IHNlZ21lbnRzICovXFxuIDQ3MTpcXHRcXHRuYnVmcyA9IDA7XFxuIDQ3MjpcXHRcXHRkbyB7XFxuIDQ3MzpcXHRcXHRcXHRpbnQgdGhpc19sZW4gPSBtaW5fdChpbnQsIGlvdltuYnVmc10uaW92X2xlbiwgcmV0KTtcXG4gNDc0OlxcdFxcbiA0NzU6XFx0XFx0XFx0bmJ1ZnMrKztcXG4gNDc2OlxcdFxcdFxcdHJldCAtPSB0aGlzX2xlbjtcXG4gNDc3OlxcdFxcdH0gd2hpbGUgKHJldCk7XFxuIDQ3ODpcXHRcXG4gNDc5OlxcdFxcdHJldHVybiBuYnVmcztcXG4gNDgwOlxcdH1cXG4gNDgxOlxcdFxcbiA0ODI6XFx0c3RhdGljIGludCBpb19uZXRfa2J1Zl9yZWN5bGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXFxuIDQ4MzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLCBpbnQgbGVuKVxcbiA0ODQ6XFx0e1xcbiA0ODU6XFx0XFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9OT19SRUNZQ0xFO1xcbiA0ODY6XFx0XFx0cmV0dXJuIElPVV9SRVRSWTtcXG4gNDg3OlxcdH1cXG4gNDg4OlxcdFxcbiA0ODk6XFx0c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbiA0OTA6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbiA0OTE6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwpXFxuIDQ5MjpcXHR7XFxuIDQ5MzpcXHRcXHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xcbiA0OTQ6XFx0XFx0Ym9vbCBidW5kbGVfZmluaXNoZWQgPSBzZWwtXFx1MDAzZXZhbCBcXHUwMDNjPSAwO1xcbiA0OTU6XFx0XFx0dW5zaWduZWQgaW50IGNmbGFncztcXG4gNDk2OlxcdFxcbiA0OTc6XFx0XFx0aWYgKCEoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkpIHtcXG4gNDk4OlxcdFxcdFxcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QpO1xcbiA0OTk6XFx0XFx0XFx0Z290byBmaW5pc2g7XFxuIDUwMDpcXHRcXHR9XFxuIDUwMTpcXHRcXG4gNTAyOlxcdFxcdGNmbGFncyA9IGlvX3B1dF9rYnVmcyhyZXEsIHNlbC1cXHUwMDNldmFsLCBzZWwtXFx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVxcdTAwM2V2YWwpKTtcXG4gNTAzOlxcdFxcbiA1MDQ6XFx0XFx0LypcXG4gNTA1OlxcdFxcdCAqIERvbid0IHN0YXJ0IG5ldyBidW5kbGVzIGlmIHRoZSBidWZmZXIgbGlzdCBpcyBlbXB0eSwgb3IgaWYgdGhlXFxuIDUwNjpcXHRcXHQgKiBjdXJyZW50IG9wZXJhdGlvbiBuZWVkZWQgdG8gZ28gdGhyb3VnaCBwb2xsaW5nIHRvIGNvbXBsZXRlLlxcbiA1MDc6XFx0XFx0ICovXFxuIDUwODpcXHRcXHRpZiAoYnVuZGxlX2ZpbmlzaGVkIHx8IHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoUkVRX0ZfQkxfRU1QVFkgfCBSRVFfRl9QT0xMRUQpKVxcbiA1MDk6XFx0XFx0XFx0Z290byBmaW5pc2g7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU5OjM5LjI5OTM0NzQ0MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTE0Mzc3OTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGNoYW5nZXMgaW4gYGlvX3VyaW5nL25ldC5jYDpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYGlvX3VyaW5nL25ldC5jYCoqXG5cbk9rYXksIHRpbWUgdG8gcmVhbGx5IHNjcnV0aW5pemUgdGhlIHJlbWFpbmluZyBtb2RpZmljYXRpb25zIGluIGBpb191cmluZy9uZXQuY2AuIEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9mIGhvdyB0aGVzZSB1cGRhdGVzIGludGVncmF0ZSBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgYXN5bmNocm9ub3VzIEkvTyBjYXBhYmlsaXRpZXMuIExldCdzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBsaW5lLWJ5LWxpbmUgcmV2aWV3LCBsb29raW5nIGZvciBhbnkgc3VidGxlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGludHJvZHVjZWQuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZXhpc3RpbmcgbmV0d29yayBzdGFjaywgcGFydGljdWxhcmx5IHRoZSBoYW5kbGluZyBvZiBjb21wbGV0aW9uIHF1ZXVlcyBhbmQgaG93IHRoZSBrZXJuZWwgc2NoZWR1bGVzIHRoZXNlIG5ldHdvcmsgb3BlcmF0aW9ucy4gQXJlIHRoZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIG9wdGltYWwgZm9yIHRoZSBhbnRpY2lwYXRlZCBuZXR3b3JrIGxvYWRzPyBBcmUgdGhlcmUgb3Bwb3J0dW5pdGllcyBmb3IgZnVydGhlciBvcHRpbWl6YXRpb24sIHBlcmhhcHMgYnkgcmVkdWNpbmcgY29udGV4dCBzd2l0Y2hlcyBvciBvcHRpbWl6aW5nIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnM/IEkgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZXJyb3IgaGFuZGxpbmcgaXMgcm9idXN0LCBlc3BlY2lhbGx5IGluIGVkZ2UgY2FzZXMgYW5kIHdoZW4gdGhlIHN5c3RlbSBpcyB1bmRlciBoZWF2eSBuZXR3b3JrIHN0cmVzcy4gRmluYWxseSwgSSdsbCBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgY2hhbmdlcyB3aXRoIHRoZSByZWxhdGVkIGRvY3VtZW50YXRpb24gYW5kIGFueSByZWxldmFudCBkaXNjdXNzaW9ucyBvbiB0aGUgbWFpbGluZyBsaXN0cyB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBtaXNzZWQgY29uc2lkZXJhdGlvbnMgb3IgZG9jdW1lbnRlZCBjYXZlYXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODM1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowMDoxNC40NDMxMjkzNjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL25ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MDpcXHRcXHRcXHRjZmxhZ3MgfD0gSU9SSU5HX0NRRV9GX1NPQ0tfTk9ORU1QVFk7XFxuIDg2MTpcXHRcXG4gODYyOlxcdFxcdGlmIChzZWwtXFx1MDAzZXZhbCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZfTVNIT1RfTElNKSB7XFxuIDg2MzpcXHRcXHRcXHQvKlxcbiA4NjQ6XFx0XFx0XFx0ICogSWYgc3ItXFx1MDAzZWxlbiBoaXRzIHplcm8sIHRoZSBsaW1pdCBoYXMgYmVlbiByZWFjaGVkLiBNYXJrXFxuIDg2NTpcXHRcXHRcXHQgKiBtc2hvdCBhcyBmaW5pc2hlZCwgYW5kIGZsYWcgTVNIT1RfRE9ORSBhcyB3ZWxsIHRvIHByZXZlbnRcXG4gODY2OlxcdFxcdFxcdCAqIGEgcG90ZW50aWFsIGJ1bmRsZSBmcm9tIGJlaW5nIHJldHJpZWQuXFxuIDg2NzpcXHRcXHRcXHQgKi9cXG4gODY4OlxcdFxcdFxcdHNyLVxcdTAwM2Vtc2hvdF90b3RhbF9sZW4gLT0gbWluX3QoaW50LCBzZWwtXFx1MDAzZXZhbCwgc3ItXFx1MDAzZW1zaG90X3RvdGFsX2xlbik7XFxuIDg2OTpcXHRcXHRcXHRpZiAoIXNyLVxcdTAwM2Vtc2hvdF90b3RhbF9sZW4pIHtcXG4gODcwOlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9NU0hPVF9ET05FO1xcbiA4NzE6XFx0XFx0XFx0XFx0bXNob3RfZmluaXNoZWQgPSB0cnVlO1xcbiA4NzI6XFx0XFx0XFx0fVxcbiA4NzM6XFx0XFx0fVxcbiA4NzQ6XFx0XFxuIDg3NTpcXHRcXHRpZiAoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkge1xcbiA4NzY6XFx0XFx0XFx0c2l6ZV90IHRoaXNfcmV0ID0gc2VsLVxcdTAwM2V2YWwgLSBzci1cXHUwMDNlZG9uZV9pbztcXG4gODc3OlxcdFxcbiA4Nzg6XFx0XFx0XFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIHRoaXNfcmV0LCBzZWwtXFx1MDAzZWJ1Zl9saXN0LFxcbiA4Nzk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXFx1MDAzZXZhbCkpO1xcbiA4ODA6XFx0XFx0XFx0aWYgKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxcbiA4ODE6XFx0XFx0XFx0XFx0Y2ZsYWdzID0gcmVxLVxcdTAwM2VjcWUuZmxhZ3MgfCAoY2ZsYWdzIFxcdTAwMjYgQ1FFX0ZfTUFTSyk7XFxuIDg4MjpcXHRcXHRcXHRpZiAoc3ItXFx1MDAzZW1zaG90X2xlbiBcXHUwMDI2XFx1MDAyNiBzZWwtXFx1MDAzZXZhbCBcXHUwMDNlPSBzci1cXHUwMDNlbXNob3RfbGVuKVxcbiA4ODM6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWZsYWdzIHw9IElPUklOR19SRUNWX01TSE9UX0NBUDtcXG4gODg0OlxcdFxcdFxcdC8qIGJ1bmRsZSB3aXRoIG5vIG1vcmUgaW1tZWRpYXRlIGJ1ZmZlcnMsIHdlJ3JlIGRvbmUgKi9cXG4gODg1OlxcdFxcdFxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQkxfRU1QVFkpXFxuIDg4NjpcXHRcXHRcXHRcXHRnb3RvIGZpbmlzaDtcXG4gODg3OlxcdFxcdFxcdC8qXFxuIDg4ODpcXHRcXHRcXHQgKiBJZiBtb3JlIGlzIGF2YWlsYWJsZSBBTkQgaXQgd2FzIGEgZnVsbCB0cmFuc2ZlciwgcmV0cnkgYW5kXFxuIDg4OTpcXHRcXHRcXHQgKiBhcHBlbmQgdG8gdGhpcyBvbmVcXG4gODkwOlxcdFxcdFxcdCAqL1xcbiA4OTE6XFx0XFx0XFx0aWYgKCEoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZfTk9fUkVUUlkpIFxcdTAwMjZcXHUwMDI2XFxuIDg5MjpcXHRcXHRcXHQgICAga21zZy1cXHUwMDNlbXNnLm1zZ19pbnEgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IHRoaXNfcmV0IFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbiA4OTM6XFx0XFx0XFx0ICAgICFpb3ZfaXRlcl9jb3VudChcXHUwMDI2a21zZy1cXHUwMDNlbXNnLm1zZ19pdGVyKSkge1xcbiA4OTQ6XFx0XFx0XFx0XFx0cmVxLVxcdTAwM2VjcWUuZmxhZ3MgPSBjZmxhZ3MgXFx1MDAyNiB+Q1FFX0ZfTUFTSztcXG4gODk1OlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VsZW4gPSBrbXNnLVxcdTAwM2Vtc2cubXNnX2lucTtcXG4gODk2OlxcdFxcdFxcdFxcdHNyLVxcdTAwM2Vkb25lX2lvICs9IHRoaXNfcmV0O1xcbiA4OTc6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWZsYWdzIHw9IElPUklOR19SRUNWX1JFVFJZO1xcbiA4OTg6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4OTk6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowMDoxNC40NDMyODM2MzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyMzk2MTY2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgaW9fdXJpbmcvbmV0LmNgIGZvciBGdXJ0aGVyIEluc2lnaHQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoaXMgZnJvbSBhIGhpZ2ggbGV2ZWwsIGFuZCB3aGlsZSBJIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgYXJjaGl0ZWN0dXJlLCBJIGZlZWwgbGlrZSBJJ20gbWlzc2luZyBzb21ldGhpbmcsIGEgc3VidGxlIGRldGFpbCBwZXJoYXBzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgaW9fdXJpbmcvbmV0LmNgLiBTcGVjaWZpY2FsbHksIGxpbmVzIDEyMDAgdGhyb3VnaCAxMjUwIHNlZW0gbGlrZSBhIGxpa2VseSBzcG90IHRvIGZpbmQgc29tZSBjcnVjaWFsIGNvZGUuIEknbGwgZm9jdXMgb24gdGhhdCByYW5nZSBpbml0aWFsbHkuIExldCdzIHNlZSBpZiB3ZSBjYW4gdW5jb3ZlciB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlIHNwZWNpZmljIGNvZGUsIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbXBsZW1lbnRhdGlvbiBpcyB0aWVkIGluIHdpdGggdGhlIGJyb2FkZXIgYGlvX3VyaW5nYCBmcmFtZXdvcmsuIEhvcGVmdWxseSwgdGhpcyBuYXJyb3dlciBmb2N1cyB3aWxsIGNsYXJpZnkgYW55IGxpbmdlcmluZyBxdWVzdGlvbnMuIEkgc3VzcGVjdCB0aGUga2V5IGlzIHRoZXJlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjAwOjQzLjY4MjkwMjI4MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvbmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIwMDpcXHRcXG4xMjAxOlxcdFxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfSU1QT1JUX0JVRkZFUikge1xcbjEyMDI6XFx0XFx0XFx0cmV0ID0gaW9faW1wb3J0X3JlZ19idWYocmVxLCBcXHUwMDI2a21zZy1cXHUwMDNlbXNnLm1zZ19pdGVyLFxcbjEyMDM6XFx0XFx0XFx0XFx0XFx0XFx0KHU2NCkodWludHB0cl90KXNyLVxcdTAwM2VidWYsIHNyLVxcdTAwM2VsZW4sXFxuMTIwNDpcXHRcXHRcXHRcXHRcXHRcXHRJVEVSX0RFU1QsIGlzc3VlX2ZsYWdzKTtcXG4xMjA1OlxcdFxcdFxcdGlmICh1bmxpa2VseShyZXQpKSB7XFxuMTIwNjpcXHRcXHRcXHRcXHRrbXNnLVxcdTAwM2Vtc2cubXNnX2lucSA9IC0xO1xcbjEyMDc6XFx0XFx0XFx0XFx0c2VsLmJ1Zl9saXN0ID0gTlVMTDtcXG4xMjA4OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTIwOTpcXHRcXHRcXHR9XFxuMTIxMDpcXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5SRVFfRl9JTVBPUlRfQlVGRkVSO1xcbjEyMTE6XFx0XFx0fVxcbjEyMTI6XFx0XFxuMTIxMzpcXHRyZXRyeV9tdWx0aXNob3Q6XFxuMTIxNDpcXHRcXHRzZWwuYnVmX2xpc3QgPSBOVUxMO1xcbjEyMTU6XFx0XFx0aWYgKGlvX2RvX2J1ZmZlcl9zZWxlY3QocmVxKSkge1xcbjEyMTY6XFx0XFx0XFx0c2VsLnZhbCA9IHNyLVxcdTAwM2VsZW47XFxuMTIxNzpcXHRcXHRcXHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBpc3N1ZV9mbGFncyk7XFxuMTIxODpcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpIHtcXG4xMjE5OlxcdFxcdFxcdFxcdGttc2ctXFx1MDAzZW1zZy5tc2dfaW5xID0gLTE7XFxuMTIyMDpcXHRcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbjEyMjE6XFx0XFx0XFx0fVxcbjEyMjI6XFx0XFx0XFx0c3ItXFx1MDAzZWJ1ZiA9IE5VTEw7XFxuMTIyMzpcXHRcXHR9IGVsc2UgaWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9CVUZGRVJfUklORykge1xcbjEyMjQ6XFx0XFx0XFx0c2VsLmJ1Zl9saXN0ID0gaW9fYnVmZmVyX2dldF9saXN0KHJlcS1cXHUwMDNlY3R4LCBzci1cXHUwMDNlYnVmX2dyb3VwKTtcXG4xMjI1OlxcdFxcdH1cXG4xMjI2OlxcdFxcbjEyMjc6XFx0XFx0a21zZy1cXHUwMDNlbXNnLm1zZ19mbGFncyA9IDA7XFxuMTIyODpcXHRcXHRrbXNnLVxcdTAwM2Vtc2cubXNnX2lucSA9IC0xO1xcbjEyMjk6XFx0XFxuMTIzMDpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNU0dfV0FJVEFMTClcXG4xMjMxOlxcdFxcdFxcdG1pbl9yZXQgPSBpb3ZfaXRlcl9jb3VudChcXHUwMDI2a21zZy1cXHUwMDNlbXNnLm1zZ19pdGVyKTtcXG4xMjMyOlxcdFxcbjEyMzM6XFx0XFx0cmV0ID0gc29ja19yZWN2bXNnKHNvY2ssIFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2csIGZsYWdzKTtcXG4xMjM0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyBtaW5fcmV0KSB7XFxuMTIzNTpcXHRcXHRcXHRpZiAocmV0ID09IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgZm9yY2Vfbm9uYmxvY2spIHtcXG4xMjM2OlxcdFxcdFxcdFxcdGlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpO1xcbjEyMzc6XFx0XFx0XFx0XFx0cmV0dXJuIElPVV9SRVRSWTtcXG4xMjM4OlxcdFxcdFxcdH1cXG4xMjM5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IGlvX25ldF9yZXRyeShzb2NrLCBmbGFncykpIHtcXG4xMjQwOlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VsZW4gLT0gcmV0O1xcbjEyNDE6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWJ1ZiArPSByZXQ7XFxuMTI0MjpcXHRcXHRcXHRcXHRzci1cXHUwMDNlZG9uZV9pbyArPSByZXQ7XFxuMTI0MzpcXHRcXHRcXHRcXHRyZXR1cm4gaW9fbmV0X2tidWZfcmVjeWxlKHJlcSwgc2VsLmJ1Zl9saXN0LCBrbXNnLCByZXQpO1xcbjEyNDQ6XFx0XFx0XFx0fVxcbjEyNDU6XFx0XFx0XFx0aWYgKHJldCA9PSAtRVJFU1RBUlRTWVMpXFxuMTI0NjpcXHRcXHRcXHRcXHRyZXQgPSAtRUlOVFI7XFxuMTI0NzpcXHRcXHRcXHRyZXFfc2V0X2ZhaWwocmVxKTtcXG4xMjQ4OlxcdFxcdH0gZWxzZSBpZiAoKGZsYWdzIFxcdTAwMjYgTVNHX1dBSVRBTEwpIFxcdTAwMjZcXHUwMDI2IChrbXNnLVxcdTAwM2Vtc2cubXNnX2ZsYWdzIFxcdTAwMjYgKE1TR19UUlVOQyB8IE1TR19DVFJVTkMpKSkge1xcbjEyNDk6XFx0b3V0X2ZyZWU6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjAwOjQzLjY4MzA1ODM1MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODYxOTI1MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIElzc3VlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBzZWUgd2hhdCB0aGUgY29tbWl0IG1lc3NhZ2Ugc2F5cy4gS25vd2luZyB0aGUgY29udGV4dCBvZiB0aGUgZml4IG9yIHRoZSBwcm9ibGVtIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHdpbGwgaW1tZWRpYXRlbHkgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gXG5cbk5vdywgbGV0J3MgZGVsdmUgaW50byB0aGUgYWN0dWFsIGNvZGUuIEkgbmVlZCB0byBleGFtaW5lIGBpb19idW5kbGVfbmJ1ZnNgIGFuZCBgaW9fcHV0X2tidWZzYC4gSSdsbCBiZSBsb29raW5nIGF0IHRoZW0gd2l0aGluIGBpb191cmluZy9rYnVmLmNgIGFuZCBgaW9fdXJpbmcvbmV0LmNgLiBJJ20gZXhwZWN0aW5nIHRvIHVuY292ZXIgc29tZXRoaW5nIHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSBuZXR3b3JrIGJ1ZmZlcnMgd2l0aGluIHRoZSBpb191cmluZyBjb250ZXh0LCBtYXliZSBzb21lIGluZWZmaWNpZW5jeSBvciwgcG90ZW50aWFsbHksIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8ga2J1ZiBtYW5hZ2VtZW50IGFuZCBuZXR3b3JrIG9wZXJhdGlvbnMuIEtub3dpbmcgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGluIHRoZSBjb2RlYmFzZSBpcyBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5ODgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjAwOjUzLjU0NDk4NjQxNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvbmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDUwOlxcdCAqL1xcbiA0NTE6XFx0c3RhdGljIGludCBpb19idW5kbGVfbmJ1ZnMoc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IHJldClcXG4gNDUyOlxcdHtcXG4gNDUzOlxcdFxcdHN0cnVjdCBpb3ZlYyAqaW92O1xcbiA0NTQ6XFx0XFx0aW50IG5idWZzO1xcbiA0NTU6XFx0XFxuIDQ1NjpcXHRcXHQvKiBubyBkYXRhIGlzIGFsd2F5cyB6ZXJvIHNlZ21lbnRzLCBhbmQgYSB1YnVmIGlzIGFsd2F5cyAxIHNlZ21lbnQgKi9cXG4gNDU3OlxcdFxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4gNDU4OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0NTk6XFx0XFx0aWYgKGl0ZXJfaXNfdWJ1ZihcXHUwMDI2a21zZy1cXHUwMDNlbXNnLm1zZ19pdGVyKSlcXG4gNDYwOlxcdFxcdFxcdHJldHVybiAxO1xcbiA0NjE6XFx0XFxuIDQ2MjpcXHRcXHRpb3YgPSBrbXNnLVxcdTAwM2V2ZWMuaW92ZWM7XFxuIDQ2MzpcXHRcXHRpZiAoIWlvdilcXG4gNDY0OlxcdFxcdFxcdGlvdiA9IFxcdTAwMjZrbXNnLVxcdTAwM2VmYXN0X2lvdjtcXG4gNDY1OlxcdFxcbiA0NjY6XFx0XFx0LyogaWYgYWxsIGRhdGEgd2FzIHRyYW5zZmVycmVkLCBpdCdzIGJhc2ljIHBvaW50ZXIgbWF0aCAqL1xcbiA0Njc6XFx0XFx0aWYgKCFpb3ZfaXRlcl9jb3VudChcXHUwMDI2a21zZy1cXHUwMDNlbXNnLm1zZ19pdGVyKSlcXG4gNDY4OlxcdFxcdFxcdHJldHVybiBpdGVyX2lvdihcXHUwMDI2a21zZy1cXHUwMDNlbXNnLm1zZ19pdGVyKSAtIGlvdjtcXG4gNDY5OlxcdFxcbiA0NzA6XFx0XFx0Lyogc2hvcnQgdHJhbnNmZXIsIGNvdW50IHNlZ21lbnRzICovXFxuIDQ3MTpcXHRcXHRuYnVmcyA9IDA7XFxuIDQ3MjpcXHRcXHRkbyB7XFxuIDQ3MzpcXHRcXHRcXHRpbnQgdGhpc19sZW4gPSBtaW5fdChpbnQsIGlvdltuYnVmc10uaW92X2xlbiwgcmV0KTtcXG4gNDc0OlxcdFxcbiA0NzU6XFx0XFx0XFx0bmJ1ZnMrKztcXG4gNDc2OlxcdFxcdFxcdHJldCAtPSB0aGlzX2xlbjtcXG4gNDc3OlxcdFxcdH0gd2hpbGUgKHJldCk7XFxuIDQ3ODpcXHRcXG4gNDc5OlxcdFxcdHJldHVybiBuYnVmcztcXG4gNDgwOlxcdH1cXG4gNDgxOlxcdFxcbiA0ODI6XFx0c3RhdGljIGludCBpb19uZXRfa2J1Zl9yZWN5bGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXFxuIDQ4MzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLCBpbnQgbGVuKVxcbiA0ODQ6XFx0e1xcbiA0ODU6XFx0XFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9OT19SRUNZQ0xFO1xcbiA0ODY6XFx0XFx0cmV0dXJuIElPVV9SRVRSWTtcXG4gNDg3OlxcdH1cXG4gNDg4OlxcdFxcbiA0ODk6XFx0c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowMDo1My41NDUxNTU2NzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcyMTU5NDY1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGBpb19wdXRfa2J1ZnNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyByZWxhdGVkIHRvIGBpb19wdXRfa2J1ZnNgLiBGaXJzdCwgSSdtIGdvaW5nIHRvIHBpbnBvaW50IGl0cyBkZWZpbml0aW9uLiBLbm93aW5nIHRoZSBkZWNsYXJhdGlvbiwgaW5jbHVkaW5nIGFueSBhc3NvY2lhdGVkIHN0cnVjdHVyZXMgb3IgdHlwZWRlZnMsIGlzIGNydWNpYWw7IGl0IHNldHMgdGhlIHN0YWdlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbidzIHB1cnBvc2UgYW5kIGhvdyBpdCBtYW5pcHVsYXRlcyBkYXRhLiBUaGVuLCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHRyYWNrIGRvd24gZXZlcnkgc2luZ2xlIGluc3RhbmNlIHdoZXJlIGBpb19wdXRfa2J1ZnNgIGlzICp1c2VkKuKAlCBldmVyeSBjYWxsIHNpdGUuIEknbSBsb29raW5nIGZvciB0aGUgY2FsbGVyIGZ1bmN0aW9ucyBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGl0LiBUaGUgYXJndW1lbnRzIHdpbGwgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIHdoYXQgZGF0YSBpcyBiZWluZyBoYW5kbGVkLCB3aGVyZSBpdCBvcmlnaW5hdGVzLCBhbmQgaG93IGl0J3MgYmVpbmcgc3RhZ2VkIGZvciBvdXRwdXQuIEJ5IGZvbGxvd2luZyB0aGVzZSBjYWxsIGNoYWlucywgSSBjYW4gcmVjb25zdHJ1Y3QgdGhlIGRhdGEncyBqb3VybmV5IGFuZCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBJL08gc3Vic3lzdGVtLiBUaGlzIHdpbGwgaW5ldml0YWJseSBleHBvc2UgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBpbiB0aGUgSS9PIHBpcGVsaW5lLiBUaGlzIGlzIHdoZXJlIHRoZSBmdW4gYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODU0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowMToxMC43NjExMDQ2N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMjg4MDg3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19wdXRfa2J1ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcva2J1Zi5jPTQwNz1zdGF0aWMgaW5saW5lIGJvb2wgX19pb19wdXRfa2J1Zl9yaW5nKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTQyMC1cXG5pb191cmluZy9rYnVmLmM6NDIxOnVuc2lnbmVkIGludCBfX2lvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG5pb191cmluZy9rYnVmLmMtNDIyLVxcdFxcdFxcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpXFxuLS1cXG5pb191cmluZy9rYnVmLmg9ODk9dm9pZCBpb19rYnVmX2Ryb3BfbGVnYWN5KHN0cnVjdCBpb19raW9jYiAqcmVxKTtcXG5pb191cmluZy9rYnVmLmgtOTAtXFxuaW9fdXJpbmcva2J1Zi5oOjkxOnVuc2lnbmVkIGludCBfX2lvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG5pb191cmluZy9rYnVmLmgtOTItXFx0XFx0XFx0ICAgIGludCBsZW4sIGludCBuYnVmcyk7XFxuLS1cXG5pb191cmluZy9rYnVmLmg9MTI4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvX3B1dF9rYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbGVuLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5oLTEzMi1cXHRcXHRyZXR1cm4gMDtcXG5pb191cmluZy9rYnVmLmg6MTMzOlxcdHJldHVybiBfX2lvX3B1dF9rYnVmcyhyZXEsIGJsLCBsZW4sIDEpO1xcbmlvX3VyaW5nL2tidWYuaC0xMzQtfVxcbmlvX3VyaW5nL2tidWYuaC0xMzUtXFxuaW9fdXJpbmcva2J1Zi5oOjEzNjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19wdXRfa2J1ZnMoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBsZW4sXFxuaW9fdXJpbmcva2J1Zi5oLTEzNy1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbmJ1ZnMpXFxuLS1cXG5pb191cmluZy9rYnVmLmgtMTQwLVxcdFxcdHJldHVybiAwO1xcbmlvX3VyaW5nL2tidWYuaDoxNDE6XFx0cmV0dXJuIF9faW9fcHV0X2tidWZzKHJlcSwgYmwsIGxlbiwgbmJ1ZnMpO1xcbmlvX3VyaW5nL2tidWYuaC0xNDItfVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NDg5PXN0YXRpYyBpbmxpbmUgYm9vbCBpb19zZW5kX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTUwMS1cXG5pb191cmluZy9uZXQuYzo1MDI6XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXFx1MDAzZXZhbCkpO1xcbmlvX3VyaW5nL25ldC5jLTUwMy1cXG4tLVxcbmlvX3VyaW5nL25ldC5jPTg1MT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9uZXQuYy04NzctXFxuaW9fdXJpbmcvbmV0LmM6ODc4OlxcdFxcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLVxcdTAwM2VidWZfbGlzdCxcXG5pb191cmluZy9uZXQuYy04NzktXFx0XFx0XFx0XFx0ICAgICAgIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXFx1MDAzZXZhbCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowMToxMi4zNjM5OTIzNjRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxOTE4NzAyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgX19pb19wdXRfa2J1ZnNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0YWtpbmcgYSBsb29rIGF0IGBfX2lvX3B1dF9rYnVmc2AgaW4gYGlvX3VyaW5nL2tidWYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBrZXJuZWwgYnVmZmVycyBhcmUgbWFuYWdlZCBhbmQgcHV0IGJhY2sgaW50byB0aGUgcmluZywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIGBpb191cmluZ2AuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGEgY3JpdGljYWwgcGllY2UgaW4gdGhlIHB1enpsZSBvZiBidWZmZXIgcmV1c2UgYW5kIGF2b2lkaW5nIHVubmVjZXNzYXJ5IGFsbG9jYXRpb25zL2RlYWxsb2NhdGlvbnMsIHdoaWNoIGlzIGEga2V5IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb24gaW4gaGlnaC10aHJvdWdocHV0IEkvTy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIGVycm9yIGNvbmRpdGlvbnMsIHN5bmNocm9uaXphdGlvbiAoaWYgYW55KSwgYW5kIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlLiBJIGV4cGVjdCBpdCB0byBpbnZvbHZlIHNvbWUgaW50cmljYXRlIHBvaW50ZXIgbWFuaXB1bGF0aW9uIGFuZCBsaWtlbHkgc29tZSBzdWJ0bGUgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGZyZWVsaXN0IG1hbmFnZW1lbnQgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50IG1lbW9yeSBjb3JydXB0aW9uLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHRyYWNlIHRoZSBjb2RlIHBhdGggdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBsaWZlY3ljbGUgb2YgYSBrZXJuZWwgYnVmZmVyIHdpdGhpbiBgaW9fdXJpbmdgLiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhlIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUga2J1ZiBpcyB1cGRhdGVkIG9yIHZhbGlkYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgzNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjAxOjMxLjU1NTg2NTg4OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcva2J1Zi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQxMDpcXHRcXHRib29sIHJldCA9IHRydWU7XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdGlmIChibClcXG4gNDEzOlxcdFxcdFxcdHJldCA9IGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgbnIpO1xcbiA0MTQ6XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0JVRl9NT1JFKSlcXG4gNDE1OlxcdFxcdFxcdHJldCA9IGZhbHNlO1xcbiA0MTY6XFx0XFxuIDQxNzpcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH4oUkVRX0ZfQlVGRkVSX1JJTkcgfCBSRVFfRl9CVUZfTU9SRSk7XFxuIDQxODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA0MTk6XFx0fVxcbiA0MjA6XFx0XFxuIDQyMTpcXHR1bnNpZ25lZCBpbnQgX19pb19wdXRfa2J1ZnMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXFxuIDQyMjpcXHRcXHRcXHRcXHQgICAgaW50IGxlbiwgaW50IG5idWZzKVxcbiA0MjM6XFx0e1xcbiA0MjQ6XFx0XFx0dW5zaWduZWQgaW50IHJldDtcXG4gNDI1OlxcdFxcbiA0MjY6XFx0XFx0cmV0ID0gSU9SSU5HX0NRRV9GX0JVRkZFUiB8IChyZXEtXFx1MDAzZWJ1Zl9pbmRleCBcXHUwMDNjXFx1MDAzYyBJT1JJTkdfQ1FFX0JVRkZFUl9TSElGVCk7XFxuIDQyNzpcXHRcXG4gNDI4OlxcdFxcdGlmICh1bmxpa2VseSghKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9CVUZGRVJfUklORykpKSB7XFxuIDQyOTpcXHRcXHRcXHRpb19rYnVmX2Ryb3BfbGVnYWN5KHJlcSk7XFxuIDQzMDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA0MzE6XFx0XFx0fVxcbiA0MzI6XFx0XFxuIDQzMzpcXHRcXHRpZiAoIV9faW9fcHV0X2tidWZfcmluZyhyZXEsIGJsLCBsZW4sIG5idWZzKSlcXG4gNDM0OlxcdFxcdFxcdHJldCB8PSBJT1JJTkdfQ1FFX0ZfQlVGX01PUkU7XFxuIDQzNTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA0MzY6XFx0fVxcbiA0Mzc6XFx0XFxuIDQzODpcXHRzdGF0aWMgaW50IGlvX3JlbW92ZV9idWZmZXJzX2xlZ2FjeShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4gNDM5OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbiA0NDA6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbmJ1ZnMpXFxuIDQ0MTpcXHR7XFxuIDQ0MjpcXHRcXHR1bnNpZ25lZCBsb25nIGkgPSAwO1xcbiA0NDM6XFx0XFx0c3RydWN0IGlvX2J1ZmZlciAqbnh0O1xcbiA0NDQ6XFx0XFxuIDQ0NTpcXHRcXHQvKiBwcm90ZWN0cyBpb19idWZmZXJzX2NhY2hlICovXFxuIDQ0NjpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZjdHgtXFx1MDAzZXVyaW5nX2xvY2spO1xcbiA0NDc6XFx0XFx0V0FSTl9PTl9PTkNFKGJsLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPQkxfQlVGX1JJTkcpO1xcbiA0NDg6XFx0XFxuIDQ0OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmJ1ZnMgXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoXFx1MDAyNmJsLVxcdTAwM2VidWZfbGlzdCk7IGkrKykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowMTozMS41NTU5ODYzOTdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkzNzQ1MDI4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgaW9fdXJpbmcgTmV0d29yayBSZWNlaXZlIEJ1ZmZlciBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBpbXByb3ZpbmcgdGhlIG1hbmFnZW1lbnQgb2YgbmV0d29yayByZWNlaXZlIGJ1ZmZlcnMgd2l0aGluIHRoZSBpb191cmluZyBmcmFtZXdvcmsuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgYXBwZWFycyB0byBiZSBhIGdvb2QsIHRhcmdldGVkIGNoYW5nZSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgYnVmZmVyIHJpbmdzIGFuZCBidW5kbGUgb3BlcmF0aW9ucyBpbiB0aGUgbmV0d29yayBjb250ZXh0LlxuXG5GaXJzdGx5LCBgaW9fYnVmZmVyX2dldF9saXN0YCBpcyBiZWluZyBtYWRlIHZpc2libGUgdG8gYG5ldC5jYCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgd2UgbmVlZCB0byBhY2Nlc3MgYnVmZmVyIGxpc3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgbmV0d29yayBzaWRlLiBMb29raW5nIGNsb3NlciwgaW4gYGlvX25ldF9rYnVmX3JlY3lsZWAsIHRoZSByZW1vdmFsIG9mIHRoZSBjYWxsIHRvIGBpb19rYnVmX2NvbW1pdGAgaXMgYXBwcm9wcmlhdGUgd2hlbiBidWZmZXJzIGFyZSBiZWluZyByZWN5Y2xlZCBkdXJpbmcgcmV0cmllczsgaXQgYXZvaWRzIGNvbW1pdHRpbmcgc29tZXRoaW5nIHRoYXQgc2hvdWxkbid0IGJlLiBUaGVuIHRoZSBhZGp1c3RtZW50cyBpbiBgaW9fcmVjdl9maW5pc2hgIGFuZCBgaW9fcmVjdmAgYXBwZWFyIHRvIGJlIGFpbWVkIGF0IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciB0aGUgdG90YWwgdHJhbnNmZXJyZWQgbGVuZ3RoIGluIHRoZSBjb250ZXh0IG9mIGJ1bmRsZWQgb3BlcmF0aW9ucyBhbmQgcmV0cmllcy4gU3BlY2lmaWNhbGx5LCBtYWtpbmcgc3VyZSB3ZSBnZXQgdGhlIGNvcnJlY3QgdG90YWwgbGVuZ3RoIHRocm91Z2ggYHNlbC1cdTAwM2V2YWxgIGludG8gYGlvX2J1bmRsZV9uYnVmc2AuIFRoaXMgZW5zdXJlcyB0aGF0IGJ1ZmZlciBjb25zdW1wdGlvbiBhbmQgcmVjeWNsaW5nIGFyZSBwcm9wZXJseSBoYW5kbGVkIGFjcm9zcyBtdWx0aXBsZSBjYWxscyBvciByZXRyaWVzLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIHRoYXQgd2UncmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMsIHdoaWNoIGlzIGFsd2F5cyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcGF0Y2ggaXNuJ3QgaW50cm9kdWNpbmcgYW55IGtlcm5lbC10by11c2Vyc3BhY2UgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBkYXRhIG9yIGltcHJvcGVyIG1lbW9yeSBhY2Nlc3MuIEFmdGVyIHJldmlld2luZyB0aGUgY29kZSBJIGhhdmUgdG8gc2F5IEknbSBzYXRpc2ZpZWQuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgYWJvdXQgaW1wcm92aW5nIHRoZSAqbWFuYWdlbWVudCogb2YgZXhpc3RpbmcgYnVmZmVyczogY29ycmVjdGx5IHRyYWNraW5nIGJ1ZmZlciBsaXN0IGluIGRpZmZlcmVudCBzY2VuYXJpb3MgaW4gYGlvX3JlY3ZgLCBmaXhpbmcgdGhlIHRvdGFsIGxlbmd0aCBjYWxjdWxhdGlvbiBpbiBgaW9fcmVjdl9maW5pc2hgLCBhbmQgY2xlYW5pbmcgdXAgYGlvX25ldF9rYnVmX3JlY3lsZWAgdG8gcHJldmVudCBkb3VibGUtY29tbWl0cyBpbiByZXRyaWVzLlxuXG5UaGUgZmllbGRzIHVzZWQgYXJlIENRRSBmbGFncywgcmV0dXJuIGludGVnZXJzLCB3aGljaCBhcmUgbm90IGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2UgdGhhdCBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcyB0aGF0IGdpdmUgbWUgY2F1c2UgZm9yIGNvbmNlcm4uIFRoZSBwYXRjaCBjb3JyZWN0cyBidWZmZXIgcmVjeWNsaW5nIGFuZCBjb21taXR0aW5nIGxvZ2ljIGFuZCBhY2NvdW50cyBmb3IgYnVmZmVyIGJ1bmRsZXMgd2hlbiB1c2luZyB0aGUgaW9fdXJpbmcgcmluZyBidWZmZXIuIFRoaXMgaXNuJ3QgbmV3IG1lbW9yeSBhbGxvY2F0aW9uLCBpdCdzIGFib3V0IG1ha2luZyBzdXJlIGV4aXN0aW5nIG1lbW9yeSAodXNlciBwcm92aWRlZCBvciByaW5nIGJ1ZmZlcikgaXMgdXNlZCBjb3JyZWN0bHkuIFRoZSBrZXkgYXNwZWN0cyBhcmUgdGhhdCBgc2VsYCBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHksIGFuZCB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIG9mIGJyYW5jaGVkIGJlaGF2aW9yIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgY2hhbmdlcyBhZGRyZXNzIGJvb2trZWVwaW5nIGFuZCBhY2NvdW50aW5nIGluIHRoZSBpb191cmluZyByaW5nIGJ1ZmZlciwgSSdtIGNvbmZpZGVudCBLTVNBTiBpcyAqbm90KiBuZWVkZWQgaGVyZS4gVGhlIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIGFjY2VzcywgYnVmZmVyIGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgdGhlIG1haW4gcmlza3MgaGVyZS4gV2UncmUgbG9va2luZyBhdCBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MsIGluY29ycmVjdCByaW5nIGJ1ZmZlciBlbnRyeSBjb25zdW1wdGlvbiwgYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcy4gSG93ZXZlciwgdGhlc2UgYXJlIGxvZ2ljIGVycm9ycyBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5UbyBzdW1tYXJpemUsIHRoZXNlIGNoYW5nZXM6XG4xLiAgRXhwb3NlIGBpb19idWZmZXJfZ2V0X2xpc3RgXG4yLiAgU2V0IGBzZWwuYnVmX2xpc3RgIGNvcnJlY3RseSB3aGVuIGJ1ZmZlciByaW5nIHVzZSBpcyBlbmFibGVkLlxuMy4gIEZpeCB0aGUgdG90YWwgbGVuZ3RoIHVzZWQgZm9yIGJ1bmRsZSBidWZmZXIgY2FsY3VsYXRpb24uXG40LiAgUmVtb3ZlIGEgcmVkdW5kYW50IGBpb19rYnVmX2NvbW1pdGAgY2FsbC5cblxuVGhlIHBhdGNoIGNvcnJlY3RzIGFjY291bnRpbmcgYW5kIHRyYWNraW5nIGZvciBuZXR3b3JrIHJlY2VpdmVzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLiBUaGUgS0FTQU4gY2FuIGRldGVjdCBhbnkgbWVtb3J5IHByb2JsZW1zLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc2OSwiT3V0cHV0VG9rZW5zIjoxODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDE6NTAuOTMwNDkyMTQ4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYnVmZmVyIG1hbmFnZW1lbnQgYW5kIGFjY291bnRpbmcgbG9naWMgZm9yIGJ1bmRsZWQgYW5kIHJpbmcgYnVmZmVyIG5ldHdvcmsgcmVjZWl2ZXMgaW4gaW9fdXJpbmcgKGlvX3JlY3YgYW5kIGlvX3JlY3ZfZmluaXNoKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIGBzZWwuYnVmX2xpc3RgIGlzIHByb3Blcmx5IHJldHJpZXZlZCB3aGVuIGBSRVFfRl9CVUZGRVJfUklOR2AgaXMgYWN0aXZlLCBjb3JyZWN0cyB0aGUgYnVmZmVyIGNvdW50IHBhc3NlZCB0byBgaW9fYnVuZGxlX25idWZzKClgIHVzaW5nIGBzZWwtXFx1MDAzZXZhbGAsIGFuZCByZW1vdmVzIGFuIGluYXBwcm9wcmlhdGUgYnVmZmVyIGNvbW1pdCBvbiByZWN5Y2xlLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGF0aHMuIFBvdGVudGlhbCBlcnJvcnMgd291bGQgaW52b2x2ZSBidWZmZXIgcmluZyBpbmRleCB0cmFja2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGJ1ZmZlciBtYW5hZ2VtZW50IGFuZCBhY2NvdW50aW5nIGxvZ2ljIGZvciBidW5kbGVkIGFuZCByaW5nIGJ1ZmZlciBuZXR3b3JrIHJlY2VpdmVzIGluIGlvX3VyaW5nIChpb19yZWN2IGFuZCBpb19yZWN2X2ZpbmlzaCkuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBgc2VsLmJ1Zl9saXN0YCBpcyBwcm9wZXJseSByZXRyaWV2ZWQgd2hlbiBgUkVRX0ZfQlVGRkVSX1JJTkdgIGlzIGFjdGl2ZSwgY29ycmVjdHMgdGhlIGJ1ZmZlciBjb3VudCBwYXNzZWQgdG8gYGlvX2J1bmRsZV9uYnVmcygpYCB1c2luZyBgc2VsLVxcdTAwM2V2YWxgLCBhbmQgcmVtb3ZlcyBhbiBpbmFwcHJvcHJpYXRlIGJ1ZmZlciBjb21taXQgb24gcmVjeWNsZS5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBQb3RlbnRpYWwgZXJyb3JzIHdvdWxkIGludm9sdmUgYnVmZmVyIHJpbmcgaW5kZXggdHJhY2tpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv28bj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 13:07:47 +0000 UTC FinishedAt: 2026-09-02 14:01:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c300d74d44c27064768a8dea90e67684b00681de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c300d74d44c27064768a8dea90e67684b00681de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "NET" ], "series_id": "cbfca5ca-eca7-4e1b-90cf-a55edf8b3395" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_recv", "io_recvmsg", "io_buffer_get_list", "io_kbuf_commit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fcmVjdm1zZyYjMzQ7LAogICAgJiMzNDtpb19idWZmZXJfZ2V0X2xpc3QmIzM0OywKICAgICYjMzQ7aW9fa2J1Zl9jb21taXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYnVmZmVyIG1hbmFnZW1lbnQgYW5kIGFjY291bnRpbmcgbG9naWMgZm9yIGJ1bmRsZWQgYW5kIHJpbmcgYnVmZmVyIG5ldHdvcmsgcmVjZWl2ZXMgaW4gaW9fdXJpbmcgKGlvX3JlY3YgYW5kIGlvX3JlY3ZfZmluaXNoKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIGBzZWwuYnVmX2xpc3RgIGlzIHByb3Blcmx5IHJldHJpZXZlZCB3aGVuIGBSRVFfRl9CVUZGRVJfUklOR2AgaXMgYWN0aXZlLCBjb3JyZWN0cyB0aGUgYnVmZmVyIGNvdW50IHBhc3NlZCB0byBgaW9fYnVuZGxlX25idWZzKClgIHVzaW5nIGBzZWwtXHUwMDNldmFsYCwgYW5kIHJlbW92ZXMgYW4gaW5hcHByb3ByaWF0ZSBidWZmZXIgY29tbWl0IG9uIHJlY3ljbGUuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGF0aHMuIFBvdGVudGlhbCBlcnJvcnMgd291bGQgaW52b2x2ZSBidWZmZXIgcmluZyBpbmRleCB0cmFja2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9fdXJpbmcgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGJ1ZmZlciBsaXN0IHNlbGVjdGlvbiwgYnVmZmVyIGNvbW1pdHMsIGFuZCBidWZmZXIgYnVuZGxlIGhhbmRsaW5nIGluIHJlY2VpdmUgb3BlcmF0aW9ucyAoSU9SSU5HX09QX1JFQ1YgLyBJT1JJTkdfT1BfUkVDVk1TRykuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU0ZGIzOTE4MGI5YjkzMGVjMDAzOTcxZGVjMzZiNWY3NTQzN2YzMWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDEzOjUzOjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2tidWYuYyBiL2lvX3VyaW5nL2tidWYuY1xuaW5kZXggN2MzMDkxNzNkZDE5NC4uYzRiYWU4ZjAwMTczZSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2tidWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcva2J1Zi5jXG5AQCAtNzYsOCAmIzQzOzc2LDggQEAgYm9vbCBpb19rYnVmX2NvbW1pdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqaW9fYnVmZmVyX2dldF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLVx0XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IGJnaWQpXG4mIzQzO3N0cnVjdCBpb19idWZmZXJfbGlzdCAqaW9fYnVmZmVyX2dldF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgYmdpZClcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKTtcbiBcbmRpZmYgLS1naXQgYS9pb191cmluZy9rYnVmLmggYi9pb191cmluZy9rYnVmLmhcbmluZGV4IDQwMTc3M2UxZWY4MDUuLjcwNzlmMmRlYzllMGUgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9rYnVmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2tidWYuaFxuQEAgLTcxLDYgJiM0Mzs3MSw4IEBAIHN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGJ1Zl9ncm91cCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbiBpbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuIFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG4mIzQzO3N0cnVjdCBpb19idWZmZXJfbGlzdCAqaW9fYnVmZmVyX2dldF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgYmdpZCk7XG4gaW50IGlvX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4gXHRcdCAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwpO1xuIHZvaWQgaW9fZGVzdHJveV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTtcbmRpZmYgLS1naXQgYS9pb191cmluZy9uZXQuYyBiL2lvX3VyaW5nL25ldC5jXG5pbmRleCBmYmU3MTlkODZjNDYzLi5iZmY0NTE0YzAxMDBjIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL25ldC5jXG5AQCAtNDgzLDggJiM0Mzs0ODMsNiBAQCBzdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLCBpbnQgbGVuKVxuIHtcbiBcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9OT19SRUNZQ0xFO1xuLVx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpXG4tXHRcdGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpO1xuIFx0cmV0dXJuIElPVV9SRVRSWTtcbiB9XG4gXG5AQCAtODc3LDcgJiM0Mzs4NzUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4gXHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHtcbiBcdFx0c2l6ZV90IHRoaXNfcmV0ID0gc2VsLVx1MDAzZXZhbCAtIHNyLVx1MDAzZWRvbmVfaW87XG4gXG4tXHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLVx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgdGhpc19yZXQpKTtcbiYjNDM7XHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLVx1MDAzZWJ1Zl9saXN0LFxuJiM0MztcdFx0XHRcdCAgICAgICBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVx1MDAzZXZhbCkpO1xuIFx0XHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxuIFx0XHRcdGNmbGFncyA9IHJlcS1cdTAwM2VjcWUuZmxhZ3MgfCAoY2ZsYWdzIFx1MDAyNiBDUUVfRl9NQVNLKTtcbiBcdFx0aWYgKHNyLVx1MDAzZW1zaG90X2xlbiBcdTAwMjZcdTAwMjYgc2VsLVx1MDAzZXZhbCBcdTAwM2U9IHNyLVx1MDAzZW1zaG90X2xlbilcbkBAIC0xMjIxLDYgJiM0MzsxMjIwLDggQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiBcdFx0XHRnb3RvIG91dF9mcmVlO1xuIFx0XHR9XG4gXHRcdHNyLVx1MDAzZWJ1ZiA9IE5VTEw7XG4mIzQzO1x0fSBlbHNlIGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0JVRkZFUl9SSU5HKSB7XG4mIzQzO1x0XHRzZWwuYnVmX2xpc3QgPSBpb19idWZmZXJfZ2V0X2xpc3QocmVxLVx1MDAzZWN0eCwgc3ItXHUwMDNlYnVmX2dyb3VwKTtcbiBcdH1cbiBcbiBcdGttc2ctXHUwMDNlbXNnLm1zZ19mbGFncyA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fcmVjdiYjMzQ7LAogICAgJiMzNDtpb19yZWN2bXNnJiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcl9nZXRfbGlzdCYjMzQ7LAogICAgJiMzNDtpb19rYnVmX2NvbW1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvX3VyaW5nIG5ldHdvcmtpbmcgbG9naWMsIHNwZWNpZmljYWxseSBidWZmZXIgbGlzdCBzZWxlY3Rpb24sIGJ1ZmZlciBjb21taXRzLCBhbmQgYnVmZmVyIGJ1bmRsZSBoYW5kbGluZyBpbiByZWNlaXZlIG9wZXJhdGlvbnMgKElPUklOR19PUF9SRUNWIC8gSU9SSU5HX09QX1JFQ1ZNU0cpLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNGRiMzkxODBiOWI5MzBlYzAwMzk3MWRlYzM2YjVmNzU0MzdmMzFjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAxMzo1Mzo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2tidWYuYyBiL2lvX3VyaW5nL2tidWYuYwppbmRleCA3YzMwOTE3M2RkMTk0Li5jNGJhZThmMDAxNzNlIDEwMDY0NAotLS0gYS9pb191cmluZy9rYnVmLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcva2J1Zi5jCkBAIC03Niw4ICYjNDM7NzYsOCBAQCBib29sIGlvX2tidWZfY29tbWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqaW9fYnVmZmVyX2dldF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LAotCQkJCQkJCXVuc2lnbmVkIGludCBiZ2lkKQomIzQzO3N0cnVjdCBpb19idWZmZXJfbGlzdCAqaW9fYnVmZmVyX2dldF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LAomIzQzOwkJCQkJICB1bnNpZ25lZCBpbnQgYmdpZCkKIHsKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7Y3R4LSZndDt1cmluZ19sb2NrKTsKIApkaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5oIGIvaW9fdXJpbmcva2J1Zi5oCmluZGV4IDQwMTc3M2UxZWY4MDUuLjcwNzlmMmRlYzllMGUgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2tidWYuaAomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9rYnVmLmgKQEAgLTcxLDYgJiM0Mzs3MSw4IEBAIHN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sCiAJCQkJICB1bnNpZ25lZCBidWZfZ3JvdXAsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7CiBpbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLAogCQkgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7CiYjNDM7c3RydWN0IGlvX2J1ZmZlcl9saXN0ICppb19idWZmZXJfZ2V0X2xpc3Qoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsCiYjNDM7CQkJCQkgIHVuc2lnbmVkIGludCBiZ2lkKTsKIGludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLAogCQkgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsKTsKIHZvaWQgaW9fZGVzdHJveV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTsKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL25ldC5jIGIvaW9fdXJpbmcvbmV0LmMKaW5kZXggZmJlNzE5ZDg2YzQ2My4uYmZmNDUxNGMwMTAwYyAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvbmV0LmMKQEAgLTQ4Myw4ICYjNDM7NDgzLDYgQEAgc3RhdGljIGludCBpb19uZXRfa2J1Zl9yZWN5bGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsCiAJCQkgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLCBpbnQgbGVuKQogewogCXJlcS0mZ3Q7ZmxhZ3MgfD0gUkVRX0ZfQkxfTk9fUkVDWUNMRTsKLQlpZiAocmVxLSZndDtmbGFncyAmYW1wOyBSRVFfRl9CVUZGRVJTX0NPTU1JVCkKLQkJaW9fa2J1Zl9jb21taXQocmVxLCBibCwgbGVuLCBpb19idW5kbGVfbmJ1ZnMoa21zZywgbGVuKSk7CiAJcmV0dXJuIElPVV9SRVRSWTsKIH0KIApAQCAtODc3LDcgJiM0Mzs4NzUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsCiAJaWYgKHNyLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7CiAJCXNpemVfdCB0aGlzX3JldCA9IHNlbC0mZ3Q7dmFsIC0gc3ItJmd0O2RvbmVfaW87CiAKLQkJY2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIHRoaXNfcmV0LCBzZWwtJmd0O2J1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgdGhpc19yZXQpKTsKJiM0MzsJCWNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLSZndDtidWZfbGlzdCwKJiM0MzsJCQkJICAgICAgIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtJmd0O3ZhbCkpOwogCQlpZiAoc3ItJmd0O2ZsYWdzICZhbXA7IElPUklOR19SRUNWX1JFVFJZKQogCQkJY2ZsYWdzID0gcmVxLSZndDtjcWUuZmxhZ3MgfCAoY2ZsYWdzICZhbXA7IENRRV9GX01BU0spOwogCQlpZiAoc3ItJmd0O21zaG90X2xlbiAmYW1wOyZhbXA7IHNlbC0mZ3Q7dmFsICZndDs9IHNyLSZndDttc2hvdF9sZW4pCkBAIC0xMjIxLDYgJiM0MzsxMjIwLDggQEAgaW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KIAkJc3ItJmd0O2J1ZiA9IE5VTEw7CiYjNDM7CX0gZWxzZSBpZiAocmVxLSZndDtmbGFncyAmYW1wOyBSRVFfRl9CVUZGRVJfUklORykgewomIzQzOwkJc2VsLmJ1Zl9saXN0ID0gaW9fYnVmZmVyX2dldF9saXN0KHJlcS0mZ3Q7Y3R4LCBzci0mZ3Q7YnVmX2dyb3VwKTsKIAl9CiAKIAlrbXNnLSZndDttc2cubXNnX2ZsYWdzID0gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyNwoJCQkJCQkJb3V0cHV0OiAxMDYKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJT19VUklORyBOZXR3b3JrIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgYW5kIHRoZWlyIGltcGFjdC4gSSBzZWUgY2hhbmdlcyBpbiBgaW9fdXJpbmcva2J1Zi5jYCwgYGlvX3VyaW5nL2tidWYuaGAsIGFuZCBgaW9fdXJpbmcvbmV0LmNgLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBuZXR3b3JrIG9wZXJhdGlvbnMsIGxpa2VseSByZWxhdGVkIHRvIHJlY2VpdmUgb3BlcmF0aW9ucyB3aXRoIGJ1ZmZlciBidW5kbGVzIG9yIHRoZSBidWZmZXIgcmluZy4KClRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3BlY2lmaWNzLCBJJiMzOTtsbCBsZXZlcmFnZSBteSB1c3VhbCB0b29sa2l0IOKAkyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHRvIG1ldGljdWxvdXNseSBpbnNwZWN0IGBpb191cmluZy9uZXQuY2AgYW5kIGBpb191cmluZy9rYnVmLmNgLiBJJiMzOTtsbCBhbHNvIGNoZWNrIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIGluY2x1ZGUgZmlsZXMgZm9yIGFueSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBuZXR3b3JrIG9wZXJhdGlvbnMgd2l0aCB0aGUgY2hhbmdlcyB0byBrYnVmIHN0cnVjdHVyZXMuIFRoaXMgc2hvdWxkIHRlbGwgbWUgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB0aGUgaW50ZW50IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzU6XHRcdFx0bmJ1ZnMmIzQzOyYjNDM7O1xuIDQ3NjpcdFx0XHRyZXQgLT0gdGhpc19sZW47XG4gNDc3Olx0XHR9IHdoaWxlIChyZXQpO1xuIDQ3ODpcdFxuIDQ3OTpcdFx0cmV0dXJuIG5idWZzO1xuIDQ4MDpcdH1cbiA0ODE6XHRcbiA0ODI6XHRzdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbiA0ODM6XHRcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLCBpbnQgbGVuKVxuIDQ4NDpcdHtcbiA0ODU6XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9OT19SRUNZQ0xFO1xuIDQ4NjpcdFx0cmV0dXJuIElPVV9SRVRSWTtcbiA0ODc6XHR9XG4gNDg4Olx0XG4gNDg5Olx0c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIDQ5MDpcdFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuIDQ5MTpcdFx0XHRcdFx0ICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwpXG4gNDkyOlx0e1xuIDQ5MzpcdFx0c3RydWN0IGlvX3NyX21zZyAqc3IgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fc3JfbXNnKTtcbiA0OTQ6XHRcdGJvb2wgYnVuZGxlX2ZpbmlzaGVkID0gc2VsLVx1MDAzZXZhbCBcdTAwM2M9IDA7XG4gNDk1Olx0XHR1bnNpZ25lZCBpbnQgY2ZsYWdzO1xuIDQ5NjpcdFxuIDQ5NzpcdFx0aWYgKCEoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpKSB7XG4gNDk4Olx0XHRcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVx1MDAzZXZhbCwgc2VsLVx1MDAzZWJ1Zl9saXN0KTtcbiA0OTk6XHRcdFx0Z290byBmaW5pc2g7XG4gNTAwOlx0XHR9XG4gNTAxOlx0XG4gNTAyOlx0XHRjZmxhZ3MgPSBpb19wdXRfa2J1ZnMocmVxLCBzZWwtXHUwMDNldmFsLCBzZWwtXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXHUwMDNldmFsKSk7XG4gNTAzOlx0XG4gNTA0Olx0XHQvKlxuIDUwNTpcdFx0ICogRG9uJiMzOTt0IHN0YXJ0IG5ldyBidW5kbGVzIGlmIHRoZSBidWZmZXIgbGlzdCBpcyBlbXB0eSwgb3IgaWYgdGhlXG4gNTA2Olx0XHQgKiBjdXJyZW50IG9wZXJhdGlvbiBuZWVkZWQgdG8gZ28gdGhyb3VnaCBwb2xsaW5nIHRvIGNvbXBsZXRlLlxuIDUwNzpcdFx0ICovXG4gNTA4Olx0XHRpZiAoYnVuZGxlX2ZpbmlzaGVkIHx8IHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgKFJFUV9GX0JMX0VNUFRZIHwgUkVRX0ZfUE9MTEVEKSlcbiA1MDk6XHRcdFx0Z290byBmaW5pc2g7XG4gNTEwOlx0XG4gNTExOlx0XHQvKlxuIDUxMjpcdFx0ICogRmlsbCBDUUUgZm9yIHRoaXMgcmVjZWl2ZSBhbmQgc2VlIGlmIHdlIHNob3VsZCBrZWVwIHRyeWluZyB0b1xuIDUxMzpcdFx0ICogcmVjZWl2ZSBmcm9tIHRoaXMgc29ja2V0LlxuIDUxNDpcdFx0ICovXG4gNTE1Olx0XHRpZiAoaW9fcmVxX3Bvc3RfY3FlKHJlcSwgc2VsLVx1MDAzZXZhbCwgY2ZsYWdzIHwgSU9SSU5HX0NRRV9GX01PUkUpKSB7XG4gNTE2Olx0XHRcdGlvX21zaG90X3ByZXBfcmV0cnkocmVxLCBrbXNnKTtcbiA1MTc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDUxODpcdFx0fVxuIDUxOTpcdFxuIDUyMDpcdFx0LyogT3RoZXJ3aXNlIHN0b3AgYnVuZGxlIGFuZCB1c2UgdGhlIGN1cnJlbnQgcmVzdWx0LiAqL1xuIDUyMTpcdGZpbmlzaDpcbiA1MjI6XHRcdGlvX3JlcV9zZXRfcmVzKHJlcSwgc2VsLVx1MDAzZXZhbCwgY2ZsYWdzKTtcbiA1MjM6XHRcdHNlbC1cdTAwM2V2YWwgPSBJT1VfQ09NUExFVEU7XG4gNTI0Olx0XHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NzA6XHRcdFx0XHRzci1cdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9NU0hPVF9ET05FO1xuIDg3MTpcdFx0XHRcdG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcbiA4NzI6XHRcdFx0fVxuIDg3MzpcdFx0fVxuIDg3NDpcdFxuIDg3NTpcdFx0aWYgKHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSB7XG4gODc2Olx0XHRcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cdTAwM2V2YWwgLSBzci1cdTAwM2Vkb25lX2lvO1xuIDg3NzpcdFxuIDg3ODpcdFx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCxcbiA4Nzk6XHRcdFx0XHRcdCAgICAgICBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVx1MDAzZXZhbCkpO1xuIDg4MDpcdFx0XHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxuIDg4MTpcdFx0XHRcdGNmbGFncyA9IHJlcS1cdTAwM2VjcWUuZmxhZ3MgfCAoY2ZsYWdzIFx1MDAyNiBDUUVfRl9NQVNLKTtcbiA4ODI6XHRcdFx0aWYgKHNyLVx1MDAzZW1zaG90X2xlbiBcdTAwMjZcdTAwMjYgc2VsLVx1MDAzZXZhbCBcdTAwM2U9IHNyLVx1MDAzZW1zaG90X2xlbilcbiA4ODM6XHRcdFx0XHRzci1cdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9NU0hPVF9DQVA7XG4gODg0Olx0XHRcdC8qIGJ1bmRsZSB3aXRoIG5vIG1vcmUgaW1tZWRpYXRlIGJ1ZmZlcnMsIHdlJiMzOTtyZSBkb25lICovXG4gODg1Olx0XHRcdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0JMX0VNUFRZKVxuIDg4NjpcdFx0XHRcdGdvdG8gZmluaXNoO1xuIDg4NzpcdFx0XHQvKlxuIDg4ODpcdFx0XHQgKiBJZiBtb3JlIGlzIGF2YWlsYWJsZSBBTkQgaXQgd2FzIGEgZnVsbCB0cmFuc2ZlciwgcmV0cnkgYW5kXG4gODg5Olx0XHRcdCAqIGFwcGVuZCB0byB0aGlzIG9uZVxuIDg5MDpcdFx0XHQgKi9cbiA4OTE6XHRcdFx0aWYgKCEoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWX05PX1JFVFJZKSBcdTAwMjZcdTAwMjZcbiA4OTI6XHRcdFx0ICAgIGttc2ctXHUwMDNlbXNnLm1zZ19pbnEgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHRoaXNfcmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuIDg5MzpcdFx0XHQgICAgIWlvdl9pdGVyX2NvdW50KFx1MDAyNmttc2ctXHUwMDNlbXNnLm1zZ19pdGVyKSkge1xuIDg5NDpcdFx0XHRcdHJlcS1cdTAwM2VjcWUuZmxhZ3MgPSBjZmxhZ3MgXHUwMDI2IH5DUUVfRl9NQVNLO1xuIDg5NTpcdFx0XHRcdHNyLVx1MDAzZWxlbiA9IGttc2ctXHUwMDNlbXNnLm1zZ19pbnE7XG4gODk2Olx0XHRcdFx0c3ItXHUwMDNlZG9uZV9pbyAmIzQzOz0gdGhpc19yZXQ7XG4gODk3Olx0XHRcdFx0c3ItXHUwMDNlZmxhZ3MgfD0gSU9SSU5HX1JFQ1ZfUkVUUlk7XG4gODk4Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDg5OTpcdFx0XHR9XG4gOTAwOlx0XHR9IGVsc2Uge1xuIDkwMTpcdFx0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBzZWwtXHUwMDNldmFsLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuIDkwMjpcdFx0fVxuIDkwMzpcdFxuIDkwNDpcdFx0LypcbiA5MDU6XHRcdCAqIEZpbGwgQ1FFIGZvciB0aGlzIHJlY2VpdmUgYW5kIHNlZSBpZiB3ZSBzaG91bGQga2VlcCB0cnlpbmcgdG9cbiA5MDY6XHRcdCAqIHJlY2VpdmUgZnJvbSB0aGlzIHNvY2tldC5cbiA5MDc6XHRcdCAqL1xuIDkwODpcdFx0aWYgKChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkgXHUwMDI2XHUwMDI2ICFtc2hvdF9maW5pc2hlZCBcdTAwMjZcdTAwMjZcbiA5MDk6XHRcdCAgICBpb19yZXFfcG9zdF9jcWUocmVxLCBzZWwtXHUwMDNldmFsLCBjZmxhZ3MgfCBJT1JJTkdfQ1FFX0ZfTU9SRSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEwOlx0XHRcdHJlcS1cdTAwM2VmbGFncyBcdTAwMjY9IH5SRVFfRl9JTVBPUlRfQlVGRkVSO1xuMTIxMTpcdFx0fVxuMTIxMjpcdFxuMTIxMzpcdHJldHJ5X211bHRpc2hvdDpcbjEyMTQ6XHRcdHNlbC5idWZfbGlzdCA9IE5VTEw7XG4xMjE1Olx0XHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XG4xMjE2Olx0XHRcdHNlbC52YWwgPSBzci1cdTAwM2VsZW47XG4xMjE3Olx0XHRcdHJldCA9IGlvX3JlY3ZfYnVmX3NlbGVjdChyZXEsIGttc2csIFx1MDAyNnNlbCwgaXNzdWVfZmxhZ3MpO1xuMTIxODpcdFx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSkge1xuMTIxOTpcdFx0XHRcdGttc2ctXHUwMDNlbXNnLm1zZ19pbnEgPSAtMTtcbjEyMjA6XHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuMTIyMTpcdFx0XHR9XG4xMjIyOlx0XHRcdHNyLVx1MDAzZWJ1ZiA9IE5VTEw7XG4xMjIzOlx0XHR9IGVsc2UgaWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQlVGRkVSX1JJTkcpIHtcbjEyMjQ6XHRcdFx0c2VsLmJ1Zl9saXN0ID0gaW9fYnVmZmVyX2dldF9saXN0KHJlcS1cdTAwM2VjdHgsIHNyLVx1MDAzZWJ1Zl9ncm91cCk7XG4xMjI1Olx0XHR9XG4xMjI2Olx0XG4xMjI3Olx0XHRrbXNnLVx1MDAzZW1zZy5tc2dfZmxhZ3MgPSAwO1xuMTIyODpcdFx0a21zZy1cdTAwM2Vtc2cubXNnX2lucSA9IC0xO1xuMTIyOTpcdFxuMTIzMDpcdFx0aWYgKGZsYWdzIFx1MDAyNiBNU0dfV0FJVEFMTClcbjEyMzE6XHRcdFx0bWluX3JldCA9IGlvdl9pdGVyX2NvdW50KFx1MDAyNmttc2ctXHUwMDNlbXNnLm1zZ19pdGVyKTtcbjEyMzI6XHRcbjEyMzM6XHRcdHJldCA9IHNvY2tfcmVjdm1zZyhzb2NrLCBcdTAwMjZrbXNnLVx1MDAzZW1zZywgZmxhZ3MpO1xuMTIzNDpcdFx0aWYgKHJldCBcdTAwM2MgbWluX3JldCkge1xuMTIzNTpcdFx0XHRpZiAocmV0ID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IGZvcmNlX25vbmJsb2NrKSB7XG4xMjM2Olx0XHRcdFx0aW9fa2J1Zl9yZWN5Y2xlKHJlcSwgc2VsLmJ1Zl9saXN0LCBpc3N1ZV9mbGFncyk7XG4xMjM3Olx0XHRcdFx0cmV0dXJuIElPVV9SRVRSWTtcbjEyMzg6XHRcdFx0fVxuMTIzOTpcdFx0XHRpZiAocmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBpb19uZXRfcmV0cnkoc29jaywgZmxhZ3MpKSB7XG4xMjQwOlx0XHRcdFx0c3ItXHUwMDNlbGVuIC09IHJldDtcbjEyNDE6XHRcdFx0XHRzci1cdTAwM2VidWYgJiM0Mzs9IHJldDtcbjEyNDI6XHRcdFx0XHRzci1cdTAwM2Vkb25lX2lvICYjNDM7PSByZXQ7XG4xMjQzOlx0XHRcdFx0cmV0dXJuIGlvX25ldF9rYnVmX3JlY3lsZShyZXEsIHNlbC5idWZfbGlzdCwga21zZywgcmV0KTtcbjEyNDQ6XHRcdFx0fVxuMTI0NTpcdFx0XHRpZiAocmV0ID09IC1FUkVTVEFSVFNZUylcbjEyNDY6XHRcdFx0XHRyZXQgPSAtRUlOVFI7XG4xMjQ3Olx0XHRcdHJlcV9zZXRfZmFpbChyZXEpO1xuMTI0ODpcdFx0fSBlbHNlIGlmICgoZmxhZ3MgXHUwMDI2IE1TR19XQUlUQUxMKSBcdTAwMjZcdTAwMjYgKGttc2ctXHUwMDNlbXNnLm1zZ19mbGFncyBcdTAwMjYgKE1TR19UUlVOQyB8IE1TR19DVFJVTkMpKSkge1xuMTI0OTpcdG91dF9mcmVlOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqQ2hlY2tpbmcgTXkgQ29uZmlndXJhdGlvbjogaW9fdXJpbmcgYW5kIE5ldCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IG15IGNvbmZpZ3VyYXRpb25zIHNldCB1cCBjb3JyZWN0bHksIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgaW9fdXJpbmcgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbmV0d29yayBzdGFjay4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBpb191cmluZzsgdGhhdCYjMzk7cyB0aGUgY29yZS4gU28sIEkgbmVlZCB0byBvcGVuIHVwIEtjb25maWcgYW5kIHZlcmlmeSB0aGUgaW9fdXJpbmcgb3B0aW9ucyBhcmUgZW5hYmxlZCBhcyBJIGV4cGVjdC4gSXQmIzM5O3MgYWxsIGFib3V0IG1ha2luZyBzdXJlIHRoYXQgdGhlIGxvdy1sZXZlbCBjb21wb25lbnRzIGFyZSB3aXJlZCBpbiB0aGUgd2F5IHRoYXQgSSB0aGluayB0aGV5IGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9fVVJJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5NTI9Y29uZmlnIEFJT1xuLS1cbmluaXQvS2NvbmZpZy0xOTU5LVxuaW5pdC9LY29uZmlnOjE5NjA6Y29uZmlnIElPX1VSSU5HXG5pbml0L0tjb25maWctMTk2MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW5pdC9LY29uZmlnPTE5Njk9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xuLS1cbmluaXQvS2NvbmZpZy0xOTgxLVxuaW5pdC9LY29uZmlnOjE5ODI6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxuaW5pdC9LY29uZmlnLTE5ODMtXHR0cmlzdGF0ZSBcJiMzNDtFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODkwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgQnVpbGQgUHJvY2VzcyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBuZXQuY2AgYW5kIGBrYnVmLmNgIGFyZSBjb21waWxlZCBhbmQgbGlua2VkIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBwcm9qZWN0LiBUaGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGJ1aWxkIG1hZ2ljIHVzdWFsbHkgaGFwcGVucy4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIGFuZCBleGFtaW5lIGBpb191cmluZy9NYWtlZmlsZWAuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzcGVjaWZpYyBydWxlcyByZWxhdGVkIHRvIHRob3NlIHNvdXJjZSBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IHRoZXkmIzM5O3JlIGluY2x1ZGVkIGluIHRoZSBidWlsZCBwcm9jZXNzLCB3aGF0IGNvbXBpbGVyIGZsYWdzIGFyZSBiZWluZyB1c2VkLCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUsIGFuZCBob3cgdGhlIGZpbmFsIGV4ZWN1dGFibGVzIG9yIGxpYnJhcmllcyBhcmUgbGlua2VkLiBJdCYjMzk7cyBhbGwgYWJvdXQgdHJhY2luZyB0aGUgcGF0aCBmcm9tIHNvdXJjZSBjb2RlIHRvIHRoZSBmaW5hbCBhcnRpZmFjdCwgbWFraW5nIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBidWlsZCBzdGVwcyB0aG9yb3VnaGx5LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2Ugb2JqZWN0IGZpbGUgY3JlYXRpb24sIGxpbmtpbmcgdG8gbGlicmFyaWVzIChlaXRoZXIgc3RhdGljIG9yIGR5bmFtaWMpLCBhbmQgcGVyaGFwcyBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGZlYXR1cmUgZmxhZ3Mgb3IgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciBpb191cmluZ1xuICAgNDpcdFxuICAgNTpcdGlmZGVmIENPTkZJR19HQ09WX1BST0ZJTEVfVVJJTkdcbiAgIDY6XHRHQ09WX1BST0ZJTEUgOj0geVxuICAgNzpcdGVuZGlmXG4gICA4Olx0XG4gICA5Olx0b2JqLSQoQ09ORklHX0lPX1VSSU5HKVx0XHQmIzQzOz0gaW9fdXJpbmcubyBvcGRlZi5vIGtidWYubyByc3JjLm8gbm90aWYubyBcXFxuICAxMDpcdFx0XHRcdFx0XHR0Y3R4Lm8gZmlsZXRhYmxlLm8gcncubyBwb2xsLm8gXFxcbiAgMTE6XHRcdFx0XHRcdFx0dHcubyB3YWl0Lm8gZXZlbnRmZC5vIHVyaW5nX2NtZC5vIFxcXG4gIDEyOlx0XHRcdFx0XHRcdG9wZW5jbG9zZS5vIHNxcG9sbC5vIHhhdHRyLm8gbm9wLm8gXFxcbiAgMTM6XHRcdFx0XHRcdFx0ZnMubyBzcGxpY2UubyBzeW5jLm8gbXNnX3JpbmcubyBcXFxuICAxNDpcdFx0XHRcdFx0XHRhZHZpc2UubyBvcGVuY2xvc2UubyBzdGF0eC5vIHRpbWVvdXQubyBcXFxuICAxNTpcdFx0XHRcdFx0XHRjYW5jZWwubyB3YWl0aWQubyByZWdpc3Rlci5vIFxcXG4gIDE2Olx0XHRcdFx0XHRcdHRydW5jYXRlLm8gbWVtbWFwLm8gYWxsb2NfY2FjaGUubyBcXFxuICAxNzpcdFx0XHRcdFx0XHRxdWVyeS5vIGxvb3Aub1xuICAxODpcdFxuICAxOTpcdG9iai0kKENPTkZJR19JT19VUklOR19aQ1JYKVx0JiM0Mzs9IHpjcngub1xuICAyMDpcdG9iai0kKENPTkZJR19JT19XUSlcdFx0JiM0Mzs9IGlvLXdxLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUxNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGlvX3VyaW5nIE1ha2VmaWxlKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoZSByZXN0IG9mIHRoZSBgaW9fdXJpbmcvTWFrZWZpbGVgLiBUaGlzIG1lYW5zIEkmIzM5O20gcHJvYmFibHkgcGFzdCB0aGUgaW5pdGlhbCBvdmVydmlldyBhbmQgbGlrZWx5IGhhdmUgYSBzcGVjaWZpYyBhcmVhIG9mIGludGVyZXN0IOKAkyBwZXJoYXBzIGJ1aWxkIG9wdGlvbnMsIGxpbmtpbmcgc3RyYXRlZ2llcywgZGVwZW5kZW5jeSByZXNvbHV0aW9uLCBvciBtYXliZSBldmVuIGNyb3NzLWNvbXBpbGF0aW9uIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2tpbSB0aGUgcmVtYWluaW5nIHNlY3Rpb25zIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLCBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgcGllY2VzIEkgbmVlZC4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBtYWtlZmlsZSBzeW50YXgsIGFzc2Vzc2luZyBpdHMgY2xhcml0eSwgYW5kIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBhcmVhcyBvZiBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGdvdGNoYXMgdGhhdCBtYXkgY29tZSB1cCBkdXJpbmcgbXkgd29yayBvbiBpdC4gSSBhbnRpY2lwYXRlIHRoYXQgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IG5hdmlnYXRlIHRoZSBkb2N1bWVudCBhbmQgZ2FpbiB3aGF0IGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGN1cnJlbnQgdGFzay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjE6XHRvYmotJChDT05GSUdfRlVURVgpXHRcdCYjNDM7PSBmdXRleC5vXG4gIDIyOlx0b2JqLSQoQ09ORklHX0VQT0xMKVx0XHQmIzQzOz0gZXBvbGwub1xuICAyMzpcdG9iai0kKENPTkZJR19ORVRfUlhfQlVTWV9QT0xMKVx0JiM0Mzs9IG5hcGkub1xuICAyNDpcdG9iai0kKENPTkZJR19ORVQpICYjNDM7PSBuZXQubyBjbWRfbmV0Lm9cbiAgMjU6XHRvYmotJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IGZkaW5mby5vXG4gIDI2Olx0b2JqLSQoQ09ORklHX0lPX1VSSU5HX01PQ0tfRklMRSkgJiM0Mzs9IG1vY2tfZmlsZS5vXG4gIDI3Olx0b2JqLSQoQ09ORklHX0lPX1VSSU5HX0JQRikgJiM0Mzs9IGJwZl9maWx0ZXIub1xuICAyODpcdG9iai0kKENPTkZJR19JT19VUklOR19CUEZfT1BTKSAmIzQzOz0gYnBmLW9wcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NDMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGlvX3VyaW5nIE5ldHdvcmsgSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0gaW50ZXJmYWNlcyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLiBTcGVjaWZpY2FsbHksIG15IHRob3VnaHQgcHJvY2VzcyBpcyBmb2N1c2luZyBvbiB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9uYWxzLiBGcm9tIG15IG9ic2VydmF0aW9ucywgaXQgYXBwZWFycyBgaW9fdXJpbmcvbmV0LmNgIGlzIG9ubHkgYnVpbHQgaWYgYm90aCBgQ09ORklHX0lPX1VSSU5HYCAqYW5kKiBgQ09ORklHX05FVGAgYXJlIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE9uIHRoZSBvdGhlciBoYW5kLCBgaW9fdXJpbmcva2J1Zi5jYCBvbmx5IHJlcXVpcmVzIGBDT05GSUdfSU9fVVJJTkdgLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBJIHNlZSBhIGZldyBrZXkgcGxheWVyczoKCjEuICBgaW9fYnVmZmVyX2dldF9saXN0YCBpbiBgaW9fdXJpbmcva2J1Zi5jYCAtLSBJdCBpcyBubyBsb25nZXIgc3RhdGljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYW5kIHdoeSB0aGlzIGNoYW5nZWQuCjIuICBgaW9fcmVjdmAgaW4gYGlvX3VyaW5nL25ldC5jYCAtLSBUaGlzIGlzIG5vdyBhIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQgc3BlY2lmaWNhbGx5IGZvciBgSU9SSU5HX09QX1JFQ1ZgLiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbiwgc28gSSYjMzk7bGwgd2FudCB0byBzdHVkeSBpdHMgaW1wbGVtZW50YXRpb24gbW9yZSBjbG9zZWx5LgozLiAgYGlvX3NlbmRfZmluaXNoYCwgYGlvX3JlY3ZfZmluaXNoYCwgYW5kIGBpb19uZXRfa2J1Zl9yZWN5bGVgIGFyZSBhbHNvIGluIGBpb191cmluZy9uZXQuY2AuIEkgbm90ZSB0aGF0IHRoZXNlIGFyZSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBhbmQgYXJlIGNhbGxlZCBmcm9tIHRoZSBwcmltYXJ5IG5ldHdvcmstcmVsYXRlZCBjYWxscyBsaWtlIGBpb19yZWN2YCBhbmQgYGlvX3JlY3Ztc2dgLgo0LiAgVGhlbiB0aGVyZSBhcmUgYSBmZXcgb3RoZXIgaGVscGVyIGZ1bmN0aW9ucyBzdWNoIGFzIGBpb19yZWN2X2J1Zl9zZWxlY3RgLCBgaW9fYnVmZmVyc19zZWxlY3RgLCBgaW9fYnVmZmVyc19wZWVrYCwgYGlvX2tidWZfY29tbWl0YCwgYW5kIGBpb19wdXRfa2J1ZnNgLgoKVG8gcmVmaW5lIG15IHVuZGVyc3RhbmRpbmcsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIGFzIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBvciBldmVuIHVzZXItc3BhY2UgbWlnaHQgZGlyZWN0bHkgY2FsbC4gVGhlc2UgYXJlOgoKKiAgIGBpb19yZWN2YAoqICAgYGlvX3JlY3Ztc2dgCiogICBgaW9fYnVmZmVyX2dldF9saXN0YAoqICAgYGlvX2tidWZfY29tbWl0YAoKU28gbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hldGhlciBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zIOKAkyBgaW9fcmVjdmAsIGBpb19yZWN2bXNnYCwgYGlvX3NlbmRgLCBgaW9fa2J1Zl9jb21taXRgLCBvciBgaW9fYnVmZmVyX2dldF9saXN0YCDigJMgYXJlIGFjdHVhbGx5IGV4cG9ydGVkIG9yIGRlY2xhcmVkIGFzIG5vbi1zdGF0aWMgaW4gdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcyAoYGlvX3VyaW5nL25ldC5oYCBvciBgaW9fdXJpbmcva2J1Zi5oYCkuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgaW50ZW5kZWQgdXNhZ2UgYW5kIHNjb3BlLCBhbmQgaG93IHRoZSBuZXR3b3JrIGludGVncmF0aW9uIGlzIG1lYW50IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmM9OTM9ZW51bSBzcl9yZXRyeV9mbGFncyB7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTExLVxuaW9fdXJpbmcvbmV0LmM6MTEyOnN0cnVjdCBpb19yZWN2emMge1xuaW9fdXJpbmcvbmV0LmMtMTEzLVx0c3RydWN0IGZpbGVcdFx0XHQqZmlsZTtcbi0tXG5pb191cmluZy9uZXQuYz02MjQ9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy03MDAtXG5pb191cmluZy9uZXQuYzo3MDE6c3RhdGljIGludCBpb19yZWN2bXNnX21zaG90X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsXG5pb191cmluZy9uZXQuYy03MDItXHRcdFx0XHQgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2csXG4tLVxuaW9fdXJpbmcvbmV0LmMtNzI0LVxuaW9fdXJpbmcvbmV0LmM6NzI1OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19jb3B5X2hkcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL25ldC5jLTcyNi1cdFx0XHQgICAgICAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2cpXG4tLVxuaW9fdXJpbmcvbmV0LmMtNzQwLVx0fVxuaW9fdXJpbmcvbmV0LmM6NzQxOlx0cmV0dXJuIGlvX3JlY3Ztc2dfbXNob3RfcHJlcChyZXEsIGlvbXNnLCBtc2cubXNnX25hbWVsZW4sXG5pb191cmluZy9uZXQuYy03NDItXHRcdFx0XHRcdG1zZy5tc2dfY29udHJvbGxlbik7XG4tLVxuaW9fdXJpbmcvbmV0LmMtNzQ0LVxuaW9fdXJpbmcvbmV0LmM6NzQ1OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19wcmVwX3NldHVwKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuaW9fdXJpbmcvbmV0LmMtNzQ2LXtcbi0tXG5pb191cmluZy9uZXQuYy03NzItXG5pb191cmluZy9uZXQuYzo3NzM6XHRyZXR1cm4gaW9fcmVjdm1zZ19jb3B5X2hkcihyZXEsIGttc2cpO1xuaW9fdXJpbmcvbmV0LmMtNzc0LX1cbi0tXG5pb191cmluZy9uZXQuYy03NzgtXG5pb191cmluZy9uZXQuYzo3Nzk6aW50IGlvX3JlY3Ztc2dfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuaW9fdXJpbmcvbmV0LmMtNzgwLXtcbi0tXG5pb191cmluZy9uZXQuYy04MzctXHRzci1cdTAwM2Vucl9tdWx0aXNob3RfbG9vcHMgPSAwO1xuaW9fdXJpbmcvbmV0LmM6ODM4Olx0cmV0dXJuIGlvX3JlY3Ztc2dfcHJlcF9zZXR1cChyZXEpO1xuaW9fdXJpbmcvbmV0LmMtODM5LX1cbi0tXG5pb191cmluZy9uZXQuYy04NDUtLypcbmlvX3VyaW5nL25ldC5jOjg0NjogKiBGaW5pc2hlcyBpb19yZWN2IGFuZCBpb19yZWN2bXNnLlxuaW9fdXJpbmcvbmV0LmMtODQ3LSAqXG4tLVxuaW9fdXJpbmcvbmV0LmMtODUwLSAqL1xuaW9fdXJpbmcvbmV0LmM6ODUxOnN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL25ldC5jLTg1Mi1cdFx0XHRcdCAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbi0tXG5pb191cmluZy9uZXQuYy05MzQtXG5pb191cmluZy9uZXQuYzo5MzU6c3RhdGljIGludCBpb19yZWN2bXNnX3ByZXBfbXVsdGlzaG90KHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXG5pb191cmluZy9uZXQuYy05MzYtXHRcdFx0XHQgICAgIHN0cnVjdCBpb19zcl9tc2cgKnNyLCB2b2lkIF9fdXNlciAqKmJ1Zixcbi0tXG5pb191cmluZy9uZXQuYy05NTktXG5pb191cmluZy9uZXQuYzo5NjA6c3RydWN0IGlvX3JlY3Ztc2dfbXVsdGlzaG90X2hkciB7XG5pb191cmluZy9uZXQuYy05NjEtXHRzdHJ1Y3QgaW9fdXJpbmdfcmVjdm1zZ19vdXQgbXNnO1xuLS1cbmlvX3VyaW5nL25ldC5jLTk2NC1cbmlvX3VyaW5nL25ldC5jOjk2NTpzdGF0aWMgaW50IGlvX3JlY3Ztc2dfbXVsdGlzaG90KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpb19zcl9tc2cgKmlvLFxuaW9fdXJpbmcvbmV0LmMtOTY2LVx0XHRcdFx0c3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbi0tXG5pb191cmluZy9uZXQuYy05NzAtXHRpbnQgY29weV9sZW47XG5pb191cmluZy9uZXQuYzo5NzE6XHRzdHJ1Y3QgaW9fcmVjdm1zZ19tdWx0aXNob3RfaGRyIGhkcjtcbmlvX3VyaW5nL25ldC5jLTk3Mi1cbi0tXG5pb191cmluZy9uZXQuYy0xMDA3LVx0LyogZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gZ2FwIGJldHdlZW4gaGRyIGFuZCBzb2NrYWRkcl9zdG9yYWdlICovXG5pb191cmluZy9uZXQuYzoxMDA4Olx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpb19yZWN2bXNnX211bHRpc2hvdF9oZHIsIGFkZHIpICE9XG5pb191cmluZy9uZXQuYy0xMDA5LVx0XHQgICAgIHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfcmVjdm1zZ19vdXQpKTtcbi0tXG5pb191cmluZy9uZXQuYy0xMDE4LVxuaW9fdXJpbmcvbmV0LmM6MTAxOTppbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvbmV0LmMtMTAyMC17XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTA1MS1cdFx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQVBPTExfTVVMVElTSE9UKSB7XG5pb191cmluZy9uZXQuYzoxMDUyOlx0XHRcdHJldCA9IGlvX3JlY3Ztc2dfcHJlcF9tdWx0aXNob3Qoa21zZywgc3IsIFx1MDAyNnNlbC5hZGRyLCBcdTAwMjZsZW4pO1xuaW9fdXJpbmcvbmV0LmMtMTA1My1cdFx0XHRpZiAocmV0KSB7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTA2NC1cdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkge1xuaW9fdXJpbmcvbmV0LmM6MTA2NTpcdFx0cmV0ID0gaW9fcmVjdm1zZ19tdWx0aXNob3Qoc29jaywgc3IsIGttc2csIGZsYWdzLFxuaW9fdXJpbmcvbmV0LmMtMTA2Ni1cdFx0XHRcdFx0ICAgXHUwMDI2bXNob3RfZmluaXNoZWQpO1xuLS1cbmlvX3VyaW5nL25ldC5jLTEwOTktXHRzZWwudmFsID0gcmV0O1xuaW9fdXJpbmcvbmV0LmM6MTEwMDpcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcdTAwMjZzZWwsIG1zaG90X2ZpbmlzaGVkLCBpc3N1ZV9mbGFncykpXG5pb191cmluZy9uZXQuYy0xMTAxLVx0XHRnb3RvIHJldHJ5X211bHRpc2hvdDtcbi0tXG5pb191cmluZy9uZXQuYy0xMTA1LVxuaW9fdXJpbmcvbmV0LmM6MTEwNjpzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbmlvX3VyaW5nL25ldC5jLTExMDctXHRcdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmMtMTE3Ny1cbmlvX3VyaW5nL25ldC5jOjExNzg6aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL25ldC5jLTExNzkte1xuLS1cbmlvX3VyaW5nL25ldC5jLTEyMTYtXHRcdHNlbC52YWwgPSBzci1cdTAwM2VsZW47XG5pb191cmluZy9uZXQuYzoxMjE3Olx0XHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcdTAwMjZzZWwsIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5jLTEyMTgtXHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKSB7XG4tLVxuaW9fdXJpbmcvbmV0LmMtMTI2MS1cdHNlbC52YWwgPSByZXQ7XG5pb191cmluZy9uZXQuYzoxMjYyOlx0aWYgKCFpb19yZWN2X2ZpbmlzaChyZXEsIGttc2csIFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSlcbmlvX3VyaW5nL25ldC5jLTEyNjMtXHRcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xuLS1cbmlvX3VyaW5nL25ldC5jLTEyNjctXG5pb191cmluZy9uZXQuYzoxMjY4OmludCBpb19yZWN2emNfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuaW9fdXJpbmcvbmV0LmMtMTI2OS17XG5pb191cmluZy9uZXQuYzoxMjcwOlx0c3RydWN0IGlvX3JlY3Z6YyAqemMgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fcmVjdnpjKTtcbmlvX3VyaW5nL25ldC5jLTEyNzEtXHR1bnNpZ25lZCBpZnFfaWR4O1xuLS1cbmlvX3VyaW5nL25ldC5jLTEyOTUtXG5pb191cmluZy9uZXQuYzoxMjk2OmludCBpb19yZWN2emMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL25ldC5jLTEyOTcte1xuaW9fdXJpbmcvbmV0LmM6MTI5ODpcdHN0cnVjdCBpb19yZWN2emMgKnpjID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3JlY3Z6Yyk7XG5pb191cmluZy9uZXQuYy0xMjk5LVx0c3RydWN0IHNvY2tldCAqc29jaztcbi0tXG5pb191cmluZy9uZXQuaD0zNT1pbnQgaW9fc2VuZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5oLTM2LVxuaW9fdXJpbmcvbmV0Lmg6Mzc6aW50IGlvX3JlY3Ztc2dfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcbmlvX3VyaW5nL25ldC5oOjM4OmludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvbmV0Lmg6Mzk6aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9uZXQuaC00MC1cbi0tXG5pb191cmluZy9vcGRlZi5jPTU0PWNvbnN0IHN0cnVjdCBpb19pc3N1ZV9kZWYgaW9faXNzdWVfZGVmc1tdID0ge1xuLS1cbmlvX3VyaW5nL29wZGVmLmMtMTU4LVx0XHQuYXN5bmNfc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyKSxcbmlvX3VyaW5nL29wZGVmLmM6MTU5Olx0XHQucHJlcFx0XHRcdD0gaW9fcmVjdm1zZ19wcmVwLFxuaW9fdXJpbmcvb3BkZWYuYzoxNjA6XHRcdC5pc3N1ZVx0XHRcdD0gaW9fcmVjdm1zZyxcbmlvX3VyaW5nL29wZGVmLmMtMTYxLSNlbHNlXG4tLVxuaW9fdXJpbmcvb3BkZWYuYy0zMDItXHRcdC5hc3luY19zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCBpb19hc3luY19tc2doZHIpLFxuaW9fdXJpbmcvb3BkZWYuYzozMDM6XHRcdC5wcmVwXHRcdFx0PSBpb19yZWN2bXNnX3ByZXAsXG5pb191cmluZy9vcGRlZi5jOjMwNDpcdFx0Lmlzc3VlXHRcdFx0PSBpb19yZWN2LFxuaW9fdXJpbmcvb3BkZWYuYy0zMDUtI2Vsc2Vcbi0tXG5pb191cmluZy9vcGRlZi5jLTUyOC0jaWYgZGVmaW5lZChDT05GSUdfTkVUKVxuaW9fdXJpbmcvb3BkZWYuYzo1Mjk6XHRcdC5wcmVwXHRcdFx0PSBpb19yZWN2emNfcHJlcCxcbmlvX3VyaW5nL29wZGVmLmM6NTMwOlx0XHQuaXNzdWVcdFx0XHQ9IGlvX3JlY3Z6YyxcbmlvX3VyaW5nL29wZGVmLmMtNTMxLSNlbHNlXG4tLVxuaW9fdXJpbmcvemNyeC5oPTEzMD1zdGF0aWMgaW5saW5lIGludCBpb196Y3J4X2N0cmwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvemNyeC5oLTEzNi1cbmlvX3VyaW5nL3pjcnguaDoxMzc6aW50IGlvX3JlY3Z6YyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL3pjcnguaDoxMzg6aW50IGlvX3JlY3Z6Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xuaW9fdXJpbmcvemNyeC5oLTEzOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MzkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGlvX3VyaW5nIE5ldHdvcmsgUGF0Y2ggQ2hhbmdlcyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgcGF0Y2ggY2hhbmdlcyBtZXRob2RpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzLiBMb29raW5nIGF0IHRoZSBkaWZmczoKCjEuICBgaW9fYnVmZmVyX2dldF9saXN0YCBoYWQgaXRzIGBzdGF0aWMgaW5saW5lYCBtb2RpZmllciByZW1vdmVkIGFuZCBpcyBub3cgZXhwb3NlZCBpbiBgaW9fdXJpbmcva2J1Zi5oYC4gSW50ZXJlc3RpbmcuIFRoaXMgcHJvYmFibHkgd2lkZW5zIGl0cyBzY29wZSBvZiB1c2UsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBuZXcgcG9zc2liaWxpdGllcy4KMi4gIFRoZSBgaW9fbmV0X2tidWZfcmVjeWxlYCBmdW5jdGlvbiBsb3N0IHRoZSBgUkVRX0ZfQlVGRkVSU19DT01NSVRgIGNvbmRpdGlvbmFsIGNoZWNrLCB3aGVyZSBgaW9fa2J1Zl9jb21taXRgIHdhcyBwcmV2aW91c2x5IGNhbGxlZC4gVGhpcyBpcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGNoYW5nZSB0byBidWZmZXIgbWFuYWdlbWVudC4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGhvdyB0aGVzZSBidWZmZXJzIGFyZSBub3cgaGFuZGxlZC4KMy4gIEluIGBpb19yZWN2X2ZpbmlzaGAsIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIHVzZSBgc2VsLSZndDt2YWxgIGluc3RlYWQgb2YgYHRoaXNfcmV0YCB3aXRoIGBpb19idW5kbGVfbmJ1ZnNgLiBUaGlzIGxvb2tzIHJlbGF0ZWQgdG8gaG93IGJ1ZmZlciBidW5kbGVzIGFyZSBiZWluZyBwcm9jZXNzZWQgcG9zdC1yZWNlaXZlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYHNlbGAgc3RydWN0dXJlIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgcmVjZWl2ZSBvcGVyYXRpb24uCjQuICBBbmQsIGNyaXRpY2FsbHksIGBpb19yZWN2YCBub3cgaGFzIGFkZGVkIGhhbmRsaW5nIGZvciBgUkVRX0ZfQlVGRkVSX1JJTkdgLCB3aGVyZSBpdCBvYnRhaW5zIHRoZSBidWZmZXIgbGlzdC4gVGhhdCYjMzk7cyBhIG1ham9yIGNoYW5nZTogYHNlbC5idWZfbGlzdCA9IGlvX2J1ZmZlcl9nZXRfbGlzdChyZXEtJmd0O2N0eCwgc3ItJmd0O2J1Zl9ncm91cCk7YC4KCkdpdmVuIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHJlY2VpdmUgb3BlcmF0aW9ucyB3aXRoIGJ1ZmZlciByaW5ncyBhbmQgYnVuZGxlcywgSSB0aGluayB0aGlzIGFic29sdXRlbHkgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoaXMgaXMgY29yZSBrZXJuZWwgY29kZTsgaXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gYm90aCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBpb191cmluZyBzeXNjYWxscywgc28gaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgpUaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBJJiMzOTtsbCBuZWVkIGBJT19VUklOR2AgYW5kIGBORVRgIGVuYWJsZWQuIFRoYXQgc2hvdWxkbiYjMzk7dCBiZSBhIHByb2JsZW0uCgpOb3csIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgZm9jdXMgc3ltYm9scy4gVGhlIGtleSBmdW5jdGlvbnMgdG8gaW52ZXN0aWdhdGUgYXJlIGBpb19yZWN2YCwgYGlvX3JlY3Ztc2dgLCBgaW9fYnVmZmVyX2dldF9saXN0YCwgYW5kIGBpb19rYnVmX2NvbW1pdGAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVzZSBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgdGhlIG9uZXMgaW4gYGlvX3VyaW5nL2tidWYuY2AgYW5kIGBpb191cmluZy9uZXQuY2AsIGFyZW4mIzM5O3Qgc3RhdGljLiBZZXAsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBgaW9fcmVjdmAsIGBpb19yZWN2bXNnYCwgYGlvX2J1ZmZlcl9nZXRfbGlzdGAsIGFuZCBgaW9fa2J1Zl9jb21taXRgIGFyZSBhbGwgbm9uLXN0YXRpYy4KCkV4Y2VsbGVudC4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGF2ZW51ZSBmb3IgZnV6emluZywgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIHNldCB1cCBhIGZ1enplciBjb25maWd1cmF0aW9uLiBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaW9fa2J1Zl9jb21taXRgIGlzbiYjMzk7dCBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2tidWZfY29tbWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYz0zNj1zdGF0aWMgYm9vbCBpb19rYnVmX2luY19jb21taXQoc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IGxlbilcbi0tXG5pb191cmluZy9rYnVmLmMtNjItXG5pb191cmluZy9rYnVmLmM6NjM6Ym9vbCBpb19rYnVmX2NvbW1pdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbmlvX3VyaW5nL2tidWYuYy02NC1cdFx0ICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBsZW4sIGludCBucilcbi0tXG5pb191cmluZy9rYnVmLmM9MTkzPXN0YXRpYyBzdHJ1Y3QgaW9fYnJfc2VsIGlvX3JpbmdfYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTIyMy1cdGlmIChpb19zaG91bGRfY29tbWl0KHJlcSwgaXNzdWVfZmxhZ3MpKSB7XG5pb191cmluZy9rYnVmLmM6MjI0Olx0XHRpZiAoIWlvX2tidWZfY29tbWl0KHJlcSwgc2VsLmJ1Zl9saXN0LCAqbGVuLCAxKSlcbmlvX3VyaW5nL2tidWYuYy0yMjUtXHRcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRl9NT1JFO1xuLS1cbmlvX3VyaW5nL2tidWYuYz0zNDU9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtMzY2LVx0XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CVUZGRVJTX0NPTU1JVCB8IFJFUV9GX0JMX05PX1JFQ1lDTEU7XG5pb191cmluZy9rYnVmLmM6MzY3Olx0XHRcdGlmICghaW9fa2J1Zl9jb21taXQocmVxLCBzZWwtXHUwMDNlYnVmX2xpc3QsIGFyZy1cdTAwM2VvdXRfbGVuLCByZXQpKVxuaW9fdXJpbmcva2J1Zi5jLTM2OC1cdFx0XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CVUZfTU9SRTtcbi0tXG5pb191cmluZy9rYnVmLmM9NDA3PXN0YXRpYyBpbmxpbmUgYm9vbCBfX2lvX3B1dF9rYnVmX3Jpbmcoc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTQxMi1cdGlmIChibClcbmlvX3VyaW5nL2tidWYuYzo0MTM6XHRcdHJldCA9IGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgbnIpO1xuaW9fdXJpbmcva2J1Zi5jLTQxNC1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0JVRl9NT1JFKSlcbi0tXG5pb191cmluZy9rYnVmLmg9OTE9dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuaW9fdXJpbmcva2J1Zi5oLTkyLVx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpO1xuaW9fdXJpbmcva2J1Zi5oOjkzOmJvb2wgaW9fa2J1Zl9jb21taXQoc3RydWN0IGlvX2tpb2NiICpyZXEsXG5pb191cmluZy9rYnVmLmgtOTQtXHRcdCAgICBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbGVuLCBpbnQgbnIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI2NQoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFzc2Vzc21lbnQgYW5kIEFjdGlvbioqCgpBbHJpZ2h0LCB0aGUgY3VycmVudCBzdGF0ZSBzZWVtcyBzdGFibGU7IG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgYXJlIHBvcHBpbmcgdXAgZnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLiBUaGlzIGxvb2tzIGdvb2QuIEJhc2VkIG9uIG15IGFuYWx5c2lzIGFuZCB0aGUgb3ZlcmFsbCBldmFsdWF0aW9uLCBpdCYjMzk7cyB0aW1lIHRvIHRyaWdnZXIgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGRhdGEsIHRoZSBwcm9jZXNzLCBhbmQgdGhlIGV4cGVjdGVkIG91dGNvbWUuIEl0JiMzOTtzIHRpbWUgdG8gc29saWRpZnkgdGhlIHJlc3VsdHMgb2YgdGhpcyBzdGFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JlY3YmIzM0OywKICAgICYjMzQ7aW9fcmVjdm1zZyYjMzQ7LAogICAgJiMzNDtpb19idWZmZXJfZ2V0X2xpc3QmIzM0OywKICAgICYjMzQ7aW9fa2J1Zl9jb21taXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBpb191cmluZyBuZXR3b3JraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYnVmZmVyIGxpc3Qgc2VsZWN0aW9uLCBidWZmZXIgY29tbWl0cywgYW5kIGJ1ZmZlciBidW5kbGUgaGFuZGxpbmcgaW4gcmVjZWl2ZSBvcGVyYXRpb25zIChJT1JJTkdfT1BfUkVDViAvIElPUklOR19PUF9SRUNWTVNHKS4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19yZWN2JiMzNDssCiAgICAmIzM0O2lvX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyX2dldF9saXN0JiMzNDssCiAgICAmIzM0O2lvX2tidWZfY29tbWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9fdXJpbmcgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGJ1ZmZlciBsaXN0IHNlbGVjdGlvbiwgYnVmZmVyIGNvbW1pdHMsIGFuZCBidWZmZXIgYnVuZGxlIGhhbmRsaW5nIGluIHJlY2VpdmUgb3BlcmF0aW9ucyAoSU9SSU5HX09QX1JFQ1YgLyBJT1JJTkdfT1BfUkVDVk1TRykuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBidWZmZXIgbWFuYWdlbWVudCBhbmQgYWNjb3VudGluZyBsb2dpYyBmb3IgYnVuZGxlZCBhbmQgcmluZyBidWZmZXIgbmV0d29yayByZWNlaXZlcyBpbiBpb191cmluZyAoaW9fcmVjdiBhbmQgaW9fcmVjdl9maW5pc2gpLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgYHNlbC5idWZfbGlzdGAgaXMgcHJvcGVybHkgcmV0cmlldmVkIHdoZW4gYFJFUV9GX0JVRkZFUl9SSU5HYCBpcyBhY3RpdmUsIGNvcnJlY3RzIHRoZSBidWZmZXIgY291bnQgcGFzc2VkIHRvIGBpb19idW5kbGVfbmJ1ZnMoKWAgdXNpbmcgYHNlbC1cdTAwM2V2YWxgLCBhbmQgcmVtb3ZlcyBhbiBpbmFwcHJvcHJpYXRlIGJ1ZmZlciBjb21taXQgb24gcmVjeWNsZS5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiBwYXRocy4gUG90ZW50aWFsIGVycm9ycyB3b3VsZCBpbnZvbHZlIGJ1ZmZlciByaW5nIGluZGV4IHRyYWNraW5nLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTRkYjM5MTgwYjliOTMwZWMwMDM5NzFkZWMzNmI1Zjc1NDM3ZjMxYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMTM6NTM6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy9rYnVmLmMgYi9pb191cmluZy9rYnVmLmMKaW5kZXggN2MzMDkxNzNkZDE5NC4uYzRiYWU4ZjAwMTczZSAxMDA2NDQKLS0tIGEvaW9fdXJpbmcva2J1Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2tidWYuYwpAQCAtNzYsOCAmIzQzOzc2LDggQEAgYm9vbCBpb19rYnVmX2NvbW1pdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmlvX2J1ZmZlcl9nZXRfbGlzdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKLQkJCQkJCQl1bnNpZ25lZCBpbnQgYmdpZCkKJiM0MztzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmlvX2J1ZmZlcl9nZXRfbGlzdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKJiM0MzsJCQkJCSAgdW5zaWduZWQgaW50IGJnaWQpCiB7CiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2N0eC0mZ3Q7dXJpbmdfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2tidWYuaCBiL2lvX3VyaW5nL2tidWYuaAppbmRleCA0MDE3NzNlMWVmODA1Li43MDc5ZjJkZWM5ZTBlIDEwMDY0NAotLS0gYS9pb191cmluZy9rYnVmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcva2J1Zi5oCkBAIC03MSw2ICYjNDM7NzEsOCBAQCBzdHJ1Y3QgaW9fYnJfc2VsIGlvX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNpemVfdCAqbGVuLAogCQkJCSAgdW5zaWduZWQgYnVmX2dyb3VwLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpOwogaW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZywKIAkJICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpOwomIzQzO3N0cnVjdCBpb19idWZmZXJfbGlzdCAqaW9fYnVmZmVyX2dldF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LAomIzQzOwkJCQkJICB1bnNpZ25lZCBpbnQgYmdpZCk7CiBpbnQgaW9fYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZywKIAkJICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCk7CiB2b2lkIGlvX2Rlc3Ryb3lfYnVmZmVycyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7CmRpZmYgLS1naXQgYS9pb191cmluZy9uZXQuYyBiL2lvX3VyaW5nL25ldC5jCmluZGV4IGZiZTcxOWQ4NmM0NjMuLmJmZjQ1MTRjMDEwMGMgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL25ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL25ldC5jCkBAIC00ODMsOCAmIzQzOzQ4Myw2IEBAIHN0YXRpYyBpbnQgaW9fbmV0X2tidWZfcmVjeWxlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLAogCQkJICAgICAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IGxlbikKIHsKIAlyZXEtJmd0O2ZsYWdzIHw9IFJFUV9GX0JMX05PX1JFQ1lDTEU7Ci0JaWYgKHJlcS0mZ3Q7ZmxhZ3MgJmFtcDsgUkVRX0ZfQlVGRkVSU19DT01NSVQpCi0JCWlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpOwogCXJldHVybiBJT1VfUkVUUlk7CiB9CiAKQEAgLTg3Nyw3ICYjNDM7ODc1LDggQEAgc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLAogCWlmIChzci0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkgewogCQlzaXplX3QgdGhpc19yZXQgPSBzZWwtJmd0O3ZhbCAtIHNyLSZndDtkb25lX2lvOwogCi0JCWNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLSZndDtidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHRoaXNfcmV0KSk7CiYjNDM7CQljZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC0mZ3Q7YnVmX2xpc3QsCiYjNDM7CQkJCSAgICAgICBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLSZndDt2YWwpKTsKIAkJaWYgKHNyLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfUkVDVl9SRVRSWSkKIAkJCWNmbGFncyA9IHJlcS0mZ3Q7Y3FlLmZsYWdzIHwgKGNmbGFncyAmYW1wOyBDUUVfRl9NQVNLKTsKIAkJaWYgKHNyLSZndDttc2hvdF9sZW4gJmFtcDsmYW1wOyBzZWwtJmd0O3ZhbCAmZ3Q7PSBzci0mZ3Q7bXNob3RfbGVuKQpAQCAtMTIyMSw2ICYjNDM7MTIyMCw4IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CiAJCXNyLSZndDtidWYgPSBOVUxMOwomIzQzOwl9IGVsc2UgaWYgKHJlcS0mZ3Q7ZmxhZ3MgJmFtcDsgUkVRX0ZfQlVGRkVSX1JJTkcpIHsKJiM0MzsJCXNlbC5idWZfbGlzdCA9IGlvX2J1ZmZlcl9nZXRfbGlzdChyZXEtJmd0O2N0eCwgc3ItJmd0O2J1Zl9ncm91cCk7CiAJfQogCiAJa21zZy0mZ3Q7bXNnLm1zZ19mbGFncyA9IDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogRGl2aW5nIGludG8gaW9fdXJpbmcvbmV0LmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGlzIHBhdGNoIGlzIGhpdHRpbmcgYSBmZXcga2V5IGZpbGVzOiBgaW9fdXJpbmcva2J1Zi5jYCwgYGlvX3VyaW5nL2tidWYuaGAsIGFuZCBgaW9fdXJpbmcvbmV0LmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gYGlvX3VyaW5nL25ldC5jYCwgc28gSSYjMzk7bGwgc3RhcnQgdGhlcmUuIEkmIzM5O2xsIGZpcmUgdXAgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBjb250ZXh0dWFsIHVuZGVyc3RhbmRpbmcgb2YgKmV4YWN0bHkqIHdoYXQmIzM5O3MgYmVpbmcgdHdlYWtlZCBpbiB0aGF0IGZpbGUuIEkgbmVlZCB0byBzZWUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIsIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLCBhbmQgZ2V0IGEgc29saWQgZmVlbCBmb3IgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIHRoZSBuZXR3b3JraW5nIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ3MDpcdFx0Lyogc2hvcnQgdHJhbnNmZXIsIGNvdW50IHNlZ21lbnRzICovXG4gNDcxOlx0XHRuYnVmcyA9IDA7XG4gNDcyOlx0XHRkbyB7XG4gNDczOlx0XHRcdGludCB0aGlzX2xlbiA9IG1pbl90KGludCwgaW92W25idWZzXS5pb3ZfbGVuLCByZXQpO1xuIDQ3NDpcdFxuIDQ3NTpcdFx0XHRuYnVmcyYjNDM7JiM0Mzs7XG4gNDc2Olx0XHRcdHJldCAtPSB0aGlzX2xlbjtcbiA0Nzc6XHRcdH0gd2hpbGUgKHJldCk7XG4gNDc4Olx0XG4gNDc5Olx0XHRyZXR1cm4gbmJ1ZnM7XG4gNDgwOlx0fVxuIDQ4MTpcdFxuIDQ4MjpcdHN0YXRpYyBpbnQgaW9fbmV0X2tidWZfcmVjeWxlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuIDQ4MzpcdFx0XHRcdCAgICAgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCBsZW4pXG4gNDg0Olx0e1xuIDQ4NTpcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX0JMX05PX1JFQ1lDTEU7XG4gNDg2Olx0XHRyZXR1cm4gSU9VX1JFVFJZO1xuIDQ4NzpcdH1cbiA0ODg6XHRcbiA0ODk6XHRzdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXG4gNDkwOlx0XHRcdFx0XHQgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXG4gNDkxOlx0XHRcdFx0XHQgIHN0cnVjdCBpb19icl9zZWwgKnNlbClcbiA0OTI6XHR7XG4gNDkzOlx0XHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xuIDQ5NDpcdFx0Ym9vbCBidW5kbGVfZmluaXNoZWQgPSBzZWwtXHUwMDNldmFsIFx1MDAzYz0gMDtcbiA0OTU6XHRcdHVuc2lnbmVkIGludCBjZmxhZ3M7XG4gNDk2Olx0XG4gNDk3Olx0XHRpZiAoIShzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkpIHtcbiA0OTg6XHRcdFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBzZWwtXHUwMDNldmFsLCBzZWwtXHUwMDNlYnVmX2xpc3QpO1xuIDQ5OTpcdFx0XHRnb3RvIGZpbmlzaDtcbiA1MDA6XHRcdH1cbiA1MDE6XHRcbiA1MDI6XHRcdGNmbGFncyA9IGlvX3B1dF9rYnVmcyhyZXEsIHNlbC1cdTAwM2V2YWwsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHNlbC1cdTAwM2V2YWwpKTtcbiA1MDM6XHRcbiA1MDQ6XHRcdC8qXG4gNTA1Olx0XHQgKiBEb24mIzM5O3Qgc3RhcnQgbmV3IGJ1bmRsZXMgaWYgdGhlIGJ1ZmZlciBsaXN0IGlzIGVtcHR5LCBvciBpZiB0aGVcbiA1MDY6XHRcdCAqIGN1cnJlbnQgb3BlcmF0aW9uIG5lZWRlZCB0byBnbyB0aHJvdWdoIHBvbGxpbmcgdG8gY29tcGxldGUuXG4gNTA3Olx0XHQgKi9cbiA1MDg6XHRcdGlmIChidW5kbGVfZmluaXNoZWQgfHwgcmVxLVx1MDAzZWZsYWdzIFx1MDAyNiAoUkVRX0ZfQkxfRU1QVFkgfCBSRVFfRl9QT0xMRUQpKVxuIDUwOTpcdFx0XHRnb3RvIGZpbmlzaDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgzNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGNoYW5nZXMgaW4gYGlvX3VyaW5nL25ldC5jYDoKCioqRGl2aW5nIERlZXBlciBpbnRvIGBpb191cmluZy9uZXQuY2AqKgoKT2theSwgdGltZSB0byByZWFsbHkgc2NydXRpbml6ZSB0aGUgcmVtYWluaW5nIG1vZGlmaWNhdGlvbnMgaW4gYGlvX3VyaW5nL25ldC5jYC4gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb2YgaG93IHRoZXNlIHVwZGF0ZXMgaW50ZWdyYXRlIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBhc3luY2hyb25vdXMgSS9PIGNhcGFiaWxpdGllcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBsaW5lLWJ5LWxpbmUgcmV2aWV3LCBsb29raW5nIGZvciBhbnkgc3VidGxlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGludHJvZHVjZWQuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGV4aXN0aW5nIG5ldHdvcmsgc3RhY2ssIHBhcnRpY3VsYXJseSB0aGUgaGFuZGxpbmcgb2YgY29tcGxldGlvbiBxdWV1ZXMgYW5kIGhvdyB0aGUga2VybmVsIHNjaGVkdWxlcyB0aGVzZSBuZXR3b3JrIG9wZXJhdGlvbnMuIEFyZSB0aGUgbmV3IGRhdGEgc3RydWN0dXJlcyBvcHRpbWFsIGZvciB0aGUgYW50aWNpcGF0ZWQgbmV0d29yayBsb2Fkcz8gQXJlIHRoZXJlIG9wcG9ydHVuaXRpZXMgZm9yIGZ1cnRoZXIgb3B0aW1pemF0aW9uLCBwZXJoYXBzIGJ5IHJlZHVjaW5nIGNvbnRleHQgc3dpdGNoZXMgb3Igb3B0aW1pemluZyBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zPyBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlIGVycm9yIGhhbmRsaW5nIGlzIHJvYnVzdCwgZXNwZWNpYWxseSBpbiBlZGdlIGNhc2VzIGFuZCB3aGVuIHRoZSBzeXN0ZW0gaXMgdW5kZXIgaGVhdnkgbmV0d29yayBzdHJlc3MuIEZpbmFsbHksIEkmIzM5O2xsIGNyb3NzLXJlZmVyZW5jZSB0aGVzZSBjaGFuZ2VzIHdpdGggdGhlIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQgYW55IHJlbGV2YW50IGRpc2N1c3Npb25zIG9uIHRoZSBtYWlsaW5nIGxpc3RzIHRvIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBtaXNzZWQgY29uc2lkZXJhdGlvbnMgb3IgZG9jdW1lbnRlZCBjYXZlYXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NjA6XHRcdFx0Y2ZsYWdzIHw9IElPUklOR19DUUVfRl9TT0NLX05PTkVNUFRZO1xuIDg2MTpcdFxuIDg2MjpcdFx0aWYgKHNlbC1cdTAwM2V2YWwgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHNyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUkVDVl9NU0hPVF9MSU0pIHtcbiA4NjM6XHRcdFx0LypcbiA4NjQ6XHRcdFx0ICogSWYgc3ItXHUwMDNlbGVuIGhpdHMgemVybywgdGhlIGxpbWl0IGhhcyBiZWVuIHJlYWNoZWQuIE1hcmtcbiA4NjU6XHRcdFx0ICogbXNob3QgYXMgZmluaXNoZWQsIGFuZCBmbGFnIE1TSE9UX0RPTkUgYXMgd2VsbCB0byBwcmV2ZW50XG4gODY2Olx0XHRcdCAqIGEgcG90ZW50aWFsIGJ1bmRsZSBmcm9tIGJlaW5nIHJldHJpZWQuXG4gODY3Olx0XHRcdCAqL1xuIDg2ODpcdFx0XHRzci1cdTAwM2Vtc2hvdF90b3RhbF9sZW4gLT0gbWluX3QoaW50LCBzZWwtXHUwMDNldmFsLCBzci1cdTAwM2Vtc2hvdF90b3RhbF9sZW4pO1xuIDg2OTpcdFx0XHRpZiAoIXNyLVx1MDAzZW1zaG90X3RvdGFsX2xlbikge1xuIDg3MDpcdFx0XHRcdHNyLVx1MDAzZWZsYWdzIHw9IElPUklOR19SRUNWX01TSE9UX0RPTkU7XG4gODcxOlx0XHRcdFx0bXNob3RfZmluaXNoZWQgPSB0cnVlO1xuIDg3MjpcdFx0XHR9XG4gODczOlx0XHR9XG4gODc0Olx0XG4gODc1Olx0XHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHtcbiA4NzY6XHRcdFx0c2l6ZV90IHRoaXNfcmV0ID0gc2VsLVx1MDAzZXZhbCAtIHNyLVx1MDAzZWRvbmVfaW87XG4gODc3Olx0XG4gODc4Olx0XHRcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLVx1MDAzZWJ1Zl9saXN0LFxuIDg3OTpcdFx0XHRcdFx0ICAgICAgIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXHUwMDNldmFsKSk7XG4gODgwOlx0XHRcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfUkVUUlkpXG4gODgxOlx0XHRcdFx0Y2ZsYWdzID0gcmVxLVx1MDAzZWNxZS5mbGFncyB8IChjZmxhZ3MgXHUwMDI2IENRRV9GX01BU0spO1xuIDg4MjpcdFx0XHRpZiAoc3ItXHUwMDNlbXNob3RfbGVuIFx1MDAyNlx1MDAyNiBzZWwtXHUwMDNldmFsIFx1MDAzZT0gc3ItXHUwMDNlbXNob3RfbGVuKVxuIDg4MzpcdFx0XHRcdHNyLVx1MDAzZWZsYWdzIHw9IElPUklOR19SRUNWX01TSE9UX0NBUDtcbiA4ODQ6XHRcdFx0LyogYnVuZGxlIHdpdGggbm8gbW9yZSBpbW1lZGlhdGUgYnVmZmVycywgd2UmIzM5O3JlIGRvbmUgKi9cbiA4ODU6XHRcdFx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQkxfRU1QVFkpXG4gODg2Olx0XHRcdFx0Z290byBmaW5pc2g7XG4gODg3Olx0XHRcdC8qXG4gODg4Olx0XHRcdCAqIElmIG1vcmUgaXMgYXZhaWxhYmxlIEFORCBpdCB3YXMgYSBmdWxsIHRyYW5zZmVyLCByZXRyeSBhbmRcbiA4ODk6XHRcdFx0ICogYXBwZW5kIHRvIHRoaXMgb25lXG4gODkwOlx0XHRcdCAqL1xuIDg5MTpcdFx0XHRpZiAoIShzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZfTk9fUkVUUlkpIFx1MDAyNlx1MDAyNlxuIDg5MjpcdFx0XHQgICAga21zZy1cdTAwM2Vtc2cubXNnX2lucSBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgdGhpc19yZXQgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4gODkzOlx0XHRcdCAgICAhaW92X2l0ZXJfY291bnQoXHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIpKSB7XG4gODk0Olx0XHRcdFx0cmVxLVx1MDAzZWNxZS5mbGFncyA9IGNmbGFncyBcdTAwMjYgfkNRRV9GX01BU0s7XG4gODk1Olx0XHRcdFx0c3ItXHUwMDNlbGVuID0ga21zZy1cdTAwM2Vtc2cubXNnX2lucTtcbiA4OTY6XHRcdFx0XHRzci1cdTAwM2Vkb25lX2lvICYjNDM7PSB0aGlzX3JldDtcbiA4OTc6XHRcdFx0XHRzci1cdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9SRVRSWTtcbiA4OTg6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gODk5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg3OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgaW9fdXJpbmcvbmV0LmNgIGZvciBGdXJ0aGVyIEluc2lnaHQqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhpcyBmcm9tIGEgaGlnaCBsZXZlbCwgYW5kIHdoaWxlIEkgdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBhcmNoaXRlY3R1cmUsIEkgZmVlbCBsaWtlIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcsIGEgc3VidGxlIGRldGFpbCBwZXJoYXBzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGlvX3VyaW5nL25ldC5jYC4gU3BlY2lmaWNhbGx5LCBsaW5lcyAxMjAwIHRocm91Z2ggMTI1MCBzZWVtIGxpa2UgYSBsaWtlbHkgc3BvdCB0byBmaW5kIHNvbWUgY3J1Y2lhbCBjb2RlLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGF0IHJhbmdlIGluaXRpYWxseS4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gdW5jb3ZlciB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlIHNwZWNpZmljIGNvZGUsIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbXBsZW1lbnRhdGlvbiBpcyB0aWVkIGluIHdpdGggdGhlIGJyb2FkZXIgYGlvX3VyaW5nYCBmcmFtZXdvcmsuIEhvcGVmdWxseSwgdGhpcyBuYXJyb3dlciBmb2N1cyB3aWxsIGNsYXJpZnkgYW55IGxpbmdlcmluZyBxdWVzdGlvbnMuIEkgc3VzcGVjdCB0aGUga2V5IGlzIHRoZXJlLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjAwOlx0XG4xMjAxOlx0XHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9JTVBPUlRfQlVGRkVSKSB7XG4xMjAyOlx0XHRcdHJldCA9IGlvX2ltcG9ydF9yZWdfYnVmKHJlcSwgXHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIsXG4xMjAzOlx0XHRcdFx0XHRcdCh1NjQpKHVpbnRwdHJfdClzci1cdTAwM2VidWYsIHNyLVx1MDAzZWxlbixcbjEyMDQ6XHRcdFx0XHRcdFx0SVRFUl9ERVNULCBpc3N1ZV9mbGFncyk7XG4xMjA1Olx0XHRcdGlmICh1bmxpa2VseShyZXQpKSB7XG4xMjA2Olx0XHRcdFx0a21zZy1cdTAwM2Vtc2cubXNnX2lucSA9IC0xO1xuMTIwNzpcdFx0XHRcdHNlbC5idWZfbGlzdCA9IE5VTEw7XG4xMjA4Olx0XHRcdFx0Z290byBvdXRfZnJlZTtcbjEyMDk6XHRcdFx0fVxuMTIxMDpcdFx0XHRyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UkVRX0ZfSU1QT1JUX0JVRkZFUjtcbjEyMTE6XHRcdH1cbjEyMTI6XHRcbjEyMTM6XHRyZXRyeV9tdWx0aXNob3Q6XG4xMjE0Olx0XHRzZWwuYnVmX2xpc3QgPSBOVUxMO1xuMTIxNTpcdFx0aWYgKGlvX2RvX2J1ZmZlcl9zZWxlY3QocmVxKSkge1xuMTIxNjpcdFx0XHRzZWwudmFsID0gc3ItXHUwMDNlbGVuO1xuMTIxNzpcdFx0XHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcdTAwMjZzZWwsIGlzc3VlX2ZsYWdzKTtcbjEyMTg6XHRcdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpIHtcbjEyMTk6XHRcdFx0XHRrbXNnLVx1MDAzZW1zZy5tc2dfaW5xID0gLTE7XG4xMjIwOlx0XHRcdFx0Z290byBvdXRfZnJlZTtcbjEyMjE6XHRcdFx0fVxuMTIyMjpcdFx0XHRzci1cdTAwM2VidWYgPSBOVUxMO1xuMTIyMzpcdFx0fSBlbHNlIGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0JVRkZFUl9SSU5HKSB7XG4xMjI0Olx0XHRcdHNlbC5idWZfbGlzdCA9IGlvX2J1ZmZlcl9nZXRfbGlzdChyZXEtXHUwMDNlY3R4LCBzci1cdTAwM2VidWZfZ3JvdXApO1xuMTIyNTpcdFx0fVxuMTIyNjpcdFxuMTIyNzpcdFx0a21zZy1cdTAwM2Vtc2cubXNnX2ZsYWdzID0gMDtcbjEyMjg6XHRcdGttc2ctXHUwMDNlbXNnLm1zZ19pbnEgPSAtMTtcbjEyMjk6XHRcbjEyMzA6XHRcdGlmIChmbGFncyBcdTAwMjYgTVNHX1dBSVRBTEwpXG4xMjMxOlx0XHRcdG1pbl9yZXQgPSBpb3ZfaXRlcl9jb3VudChcdTAwMjZrbXNnLVx1MDAzZW1zZy5tc2dfaXRlcik7XG4xMjMyOlx0XG4xMjMzOlx0XHRyZXQgPSBzb2NrX3JlY3Ztc2coc29jaywgXHUwMDI2a21zZy1cdTAwM2Vtc2csIGZsYWdzKTtcbjEyMzQ6XHRcdGlmIChyZXQgXHUwMDNjIG1pbl9yZXQpIHtcbjEyMzU6XHRcdFx0aWYgKHJldCA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiBmb3JjZV9ub25ibG9jaykge1xuMTIzNjpcdFx0XHRcdGlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpO1xuMTIzNzpcdFx0XHRcdHJldHVybiBJT1VfUkVUUlk7XG4xMjM4Olx0XHRcdH1cbjEyMzk6XHRcdFx0aWYgKHJldCBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgaW9fbmV0X3JldHJ5KHNvY2ssIGZsYWdzKSkge1xuMTI0MDpcdFx0XHRcdHNyLVx1MDAzZWxlbiAtPSByZXQ7XG4xMjQxOlx0XHRcdFx0c3ItXHUwMDNlYnVmICYjNDM7PSByZXQ7XG4xMjQyOlx0XHRcdFx0c3ItXHUwMDNlZG9uZV9pbyAmIzQzOz0gcmV0O1xuMTI0MzpcdFx0XHRcdHJldHVybiBpb19uZXRfa2J1Zl9yZWN5bGUocmVxLCBzZWwuYnVmX2xpc3QsIGttc2csIHJldCk7XG4xMjQ0Olx0XHRcdH1cbjEyNDU6XHRcdFx0aWYgKHJldCA9PSAtRVJFU1RBUlRTWVMpXG4xMjQ2Olx0XHRcdFx0cmV0ID0gLUVJTlRSO1xuMTI0NzpcdFx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbjEyNDg6XHRcdH0gZWxzZSBpZiAoKGZsYWdzIFx1MDAyNiBNU0dfV0FJVEFMTCkgXHUwMDI2XHUwMDI2IChrbXNnLVx1MDAzZW1zZy5tc2dfZmxhZ3MgXHUwMDI2IChNU0dfVFJVTkMgfCBNU0dfQ1RSVU5DKSkpIHtcbjEyNDk6XHRvdXRfZnJlZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIElzc3VlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb21taXQgbWVzc2FnZSBzYXlzLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRoZSBmaXggb3IgdGhlIHByb2JsZW0gdGhpcyBwYXRjaCBhZGRyZXNzZXMgd2lsbCBpbW1lZGlhdGVseSBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLiAKCk5vdywgbGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGFjdHVhbCBjb2RlLiBJIG5lZWQgdG8gZXhhbWluZSBgaW9fYnVuZGxlX25idWZzYCBhbmQgYGlvX3B1dF9rYnVmc2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgdGhlbSB3aXRoaW4gYGlvX3VyaW5nL2tidWYuY2AgYW5kIGBpb191cmluZy9uZXQuY2AuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHVuY292ZXIgc29tZXRoaW5nIHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSBuZXR3b3JrIGJ1ZmZlcnMgd2l0aGluIHRoZSBpb191cmluZyBjb250ZXh0LCBtYXliZSBzb21lIGluZWZmaWNpZW5jeSBvciwgcG90ZW50aWFsbHksIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8ga2J1ZiBtYW5hZ2VtZW50IGFuZCBuZXR3b3JrIG9wZXJhdGlvbnMuIEtub3dpbmcgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGluIHRoZSBjb2RlYmFzZSBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvbmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1MDpcdCAqL1xuIDQ1MTpcdHN0YXRpYyBpbnQgaW9fYnVuZGxlX25idWZzKHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCByZXQpXG4gNDUyOlx0e1xuIDQ1MzpcdFx0c3RydWN0IGlvdmVjICppb3Y7XG4gNDU0Olx0XHRpbnQgbmJ1ZnM7XG4gNDU1Olx0XG4gNDU2Olx0XHQvKiBubyBkYXRhIGlzIGFsd2F5cyB6ZXJvIHNlZ21lbnRzLCBhbmQgYSB1YnVmIGlzIGFsd2F5cyAxIHNlZ21lbnQgKi9cbiA0NTc6XHRcdGlmIChyZXQgXHUwMDNjPSAwKVxuIDQ1ODpcdFx0XHRyZXR1cm4gMDtcbiA0NTk6XHRcdGlmIChpdGVyX2lzX3VidWYoXHUwMDI2a21zZy1cdTAwM2Vtc2cubXNnX2l0ZXIpKVxuIDQ2MDpcdFx0XHRyZXR1cm4gMTtcbiA0NjE6XHRcbiA0NjI6XHRcdGlvdiA9IGttc2ctXHUwMDNldmVjLmlvdmVjO1xuIDQ2MzpcdFx0aWYgKCFpb3YpXG4gNDY0Olx0XHRcdGlvdiA9IFx1MDAyNmttc2ctXHUwMDNlZmFzdF9pb3Y7XG4gNDY1Olx0XG4gNDY2Olx0XHQvKiBpZiBhbGwgZGF0YSB3YXMgdHJhbnNmZXJyZWQsIGl0JiMzOTtzIGJhc2ljIHBvaW50ZXIgbWF0aCAqL1xuIDQ2NzpcdFx0aWYgKCFpb3ZfaXRlcl9jb3VudChcdTAwMjZrbXNnLVx1MDAzZW1zZy5tc2dfaXRlcikpXG4gNDY4Olx0XHRcdHJldHVybiBpdGVyX2lvdihcdTAwMjZrbXNnLVx1MDAzZW1zZy5tc2dfaXRlcikgLSBpb3Y7XG4gNDY5Olx0XG4gNDcwOlx0XHQvKiBzaG9ydCB0cmFuc2ZlciwgY291bnQgc2VnbWVudHMgKi9cbiA0NzE6XHRcdG5idWZzID0gMDtcbiA0NzI6XHRcdGRvIHtcbiA0NzM6XHRcdFx0aW50IHRoaXNfbGVuID0gbWluX3QoaW50LCBpb3ZbbmJ1ZnNdLmlvdl9sZW4sIHJldCk7XG4gNDc0Olx0XG4gNDc1Olx0XHRcdG5idWZzJiM0MzsmIzQzOztcbiA0NzY6XHRcdFx0cmV0IC09IHRoaXNfbGVuO1xuIDQ3NzpcdFx0fSB3aGlsZSAocmV0KTtcbiA0Nzg6XHRcbiA0Nzk6XHRcdHJldHVybiBuYnVmcztcbiA0ODA6XHR9XG4gNDgxOlx0XG4gNDgyOlx0c3RhdGljIGludCBpb19uZXRfa2J1Zl9yZWN5bGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXG4gNDgzOlx0XHRcdFx0ICAgICAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IGxlbilcbiA0ODQ6XHR7XG4gNDg1Olx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQkxfTk9fUkVDWUNMRTtcbiA0ODY6XHRcdHJldHVybiBJT1VfUkVUUlk7XG4gNDg3Olx0fVxuIDQ4ODpcdFxuIDQ4OTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpb19zZW5kX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg1NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGBpb19wdXRfa2J1ZnNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gYGlvX3B1dF9rYnVmc2AuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHBpbnBvaW50IGl0cyBkZWZpbml0aW9uLiBLbm93aW5nIHRoZSBkZWNsYXJhdGlvbiwgaW5jbHVkaW5nIGFueSBhc3NvY2lhdGVkIHN0cnVjdHVyZXMgb3IgdHlwZWRlZnMsIGlzIGNydWNpYWw7IGl0IHNldHMgdGhlIHN0YWdlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIGFuZCBob3cgaXQgbWFuaXB1bGF0ZXMgZGF0YS4gVGhlbiwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSB0cmFjayBkb3duIGV2ZXJ5IHNpbmdsZSBpbnN0YW5jZSB3aGVyZSBgaW9fcHV0X2tidWZzYCBpcyAqdXNlZCrigJQgZXZlcnkgY2FsbCBzaXRlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjYWxsZXIgZnVuY3Rpb25zIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gaXQuIFRoZSBhcmd1bWVudHMgd2lsbCBwcm92aWRlIGluc2lnaHRzIGludG8gd2hhdCBkYXRhIGlzIGJlaW5nIGhhbmRsZWQsIHdoZXJlIGl0IG9yaWdpbmF0ZXMsIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgc3RhZ2VkIGZvciBvdXRwdXQuIEJ5IGZvbGxvd2luZyB0aGVzZSBjYWxsIGNoYWlucywgSSBjYW4gcmVjb25zdHJ1Y3QgdGhlIGRhdGEmIzM5O3Mgam91cm5leSBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgSS9PIHN1YnN5c3RlbS4gVGhpcyB3aWxsIGluZXZpdGFibHkgZXhwb3NlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHJhY2UgY29uZGl0aW9ucywgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgaW4gdGhlIEkvTyBwaXBlbGluZS4gVGhpcyBpcyB3aGVyZSB0aGUgZnVuIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcHV0X2tidWZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYz00MDc9c3RhdGljIGlubGluZSBib29sIF9faW9fcHV0X2tidWZfcmluZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbi0tXG5pb191cmluZy9rYnVmLmMtNDIwLVxuaW9fdXJpbmcva2J1Zi5jOjQyMTp1bnNpZ25lZCBpbnQgX19pb19wdXRfa2J1ZnMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXG5pb191cmluZy9rYnVmLmMtNDIyLVx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpXG4tLVxuaW9fdXJpbmcva2J1Zi5oPTg5PXZvaWQgaW9fa2J1Zl9kcm9wX2xlZ2FjeShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSk7XG5pb191cmluZy9rYnVmLmgtOTAtXG5pb191cmluZy9rYnVmLmg6OTE6dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuaW9fdXJpbmcva2J1Zi5oLTkyLVx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpO1xuLS1cbmlvX3VyaW5nL2tidWYuaD0xMjg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fcHV0X2tidWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBsZW4sXG4tLVxuaW9fdXJpbmcva2J1Zi5oLTEzMi1cdFx0cmV0dXJuIDA7XG5pb191cmluZy9rYnVmLmg6MTMzOlx0cmV0dXJuIF9faW9fcHV0X2tidWZzKHJlcSwgYmwsIGxlbiwgMSk7XG5pb191cmluZy9rYnVmLmgtMTM0LX1cbmlvX3VyaW5nL2tidWYuaC0xMzUtXG5pb191cmluZy9rYnVmLmg6MTM2OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IGxlbixcbmlvX3VyaW5nL2tidWYuaC0xMzctXHRcdFx0XHRcdHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBuYnVmcylcbi0tXG5pb191cmluZy9rYnVmLmgtMTQwLVx0XHRyZXR1cm4gMDtcbmlvX3VyaW5nL2tidWYuaDoxNDE6XHRyZXR1cm4gX19pb19wdXRfa2J1ZnMocmVxLCBibCwgbGVuLCBuYnVmcyk7XG5pb191cmluZy9rYnVmLmgtMTQyLX1cbi0tXG5pb191cmluZy9uZXQuYz00ODk9c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLS1cbmlvX3VyaW5nL25ldC5jLTUwMS1cbmlvX3VyaW5nL25ldC5jOjUwMjpcdGNmbGFncyA9IGlvX3B1dF9rYnVmcyhyZXEsIHNlbC1cdTAwM2V2YWwsIHNlbC1cdTAwM2VidWZfbGlzdCwgaW9fYnVuZGxlX25idWZzKGttc2csIHNlbC1cdTAwM2V2YWwpKTtcbmlvX3VyaW5nL25ldC5jLTUwMy1cbi0tXG5pb191cmluZy9uZXQuYz04NTE9c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuLS1cbmlvX3VyaW5nL25ldC5jLTg3Ny1cbmlvX3VyaW5nL25ldC5jOjg3ODpcdFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIHRoaXNfcmV0LCBzZWwtXHUwMDNlYnVmX2xpc3QsXG5pb191cmluZy9uZXQuYy04NzktXHRcdFx0XHQgICAgICAgaW9fYnVuZGxlX25idWZzKGttc2csIHNlbC1cdTAwM2V2YWwpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgzNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgX19pb19wdXRfa2J1ZnNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGBfX2lvX3B1dF9rYnVmc2AgaW4gYGlvX3VyaW5nL2tidWYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBrZXJuZWwgYnVmZmVycyBhcmUgbWFuYWdlZCBhbmQgcHV0IGJhY2sgaW50byB0aGUgcmluZywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIGBpb191cmluZ2AuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGEgY3JpdGljYWwgcGllY2UgaW4gdGhlIHB1enpsZSBvZiBidWZmZXIgcmV1c2UgYW5kIGF2b2lkaW5nIHVubmVjZXNzYXJ5IGFsbG9jYXRpb25zL2RlYWxsb2NhdGlvbnMsIHdoaWNoIGlzIGEga2V5IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb24gaW4gaGlnaC10aHJvdWdocHV0IEkvTy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBlcnJvciBjb25kaXRpb25zLCBzeW5jaHJvbml6YXRpb24gKGlmIGFueSksIGFuZCBhbnkgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZS4gSSBleHBlY3QgaXQgdG8gaW52b2x2ZSBzb21lIGludHJpY2F0ZSBwb2ludGVyIG1hbmlwdWxhdGlvbiBhbmQgbGlrZWx5IHNvbWUgc3VidGxlIHJlZmVyZW5jZSBjb3VudGluZyBvciBmcmVlbGlzdCBtYW5hZ2VtZW50IHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBhbmQgcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbi4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgdHJhY2UgdGhlIGNvZGUgcGF0aCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSBvZiBhIGtlcm5lbCBidWZmZXIgd2l0aGluIGBpb191cmluZ2AuIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhlIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUga2J1ZiBpcyB1cGRhdGVkIG9yIHZhbGlkYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTQ6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9rYnVmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxMDpcdFx0Ym9vbCByZXQgPSB0cnVlO1xuIDQxMTpcdFxuIDQxMjpcdFx0aWYgKGJsKVxuIDQxMzpcdFx0XHRyZXQgPSBpb19rYnVmX2NvbW1pdChyZXEsIGJsLCBsZW4sIG5yKTtcbiA0MTQ6XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0JVRl9NT1JFKSlcbiA0MTU6XHRcdFx0cmV0ID0gZmFsc2U7XG4gNDE2Olx0XG4gNDE3Olx0XHRyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+KFJFUV9GX0JVRkZFUl9SSU5HIHwgUkVRX0ZfQlVGX01PUkUpO1xuIDQxODpcdFx0cmV0dXJuIHJldDtcbiA0MTk6XHR9XG4gNDIwOlx0XG4gNDIxOlx0dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxuIDQyMjpcdFx0XHRcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpXG4gNDIzOlx0e1xuIDQyNDpcdFx0dW5zaWduZWQgaW50IHJldDtcbiA0MjU6XHRcbiA0MjY6XHRcdHJldCA9IElPUklOR19DUUVfRl9CVUZGRVIgfCAocmVxLVx1MDAzZWJ1Zl9pbmRleCBcdTAwM2NcdTAwM2MgSU9SSU5HX0NRRV9CVUZGRVJfU0hJRlQpO1xuIDQyNzpcdFxuIDQyODpcdFx0aWYgKHVubGlrZWx5KCEocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9CVUZGRVJfUklORykpKSB7XG4gNDI5Olx0XHRcdGlvX2tidWZfZHJvcF9sZWdhY3kocmVxKTtcbiA0MzA6XHRcdFx0cmV0dXJuIHJldDtcbiA0MzE6XHRcdH1cbiA0MzI6XHRcbiA0MzM6XHRcdGlmICghX19pb19wdXRfa2J1Zl9yaW5nKHJlcSwgYmwsIGxlbiwgbmJ1ZnMpKVxuIDQzNDpcdFx0XHRyZXQgfD0gSU9SSU5HX0NRRV9GX0JVRl9NT1JFO1xuIDQzNTpcdFx0cmV0dXJuIHJldDtcbiA0MzY6XHR9XG4gNDM3Olx0XG4gNDM4Olx0c3RhdGljIGludCBpb19yZW1vdmVfYnVmZmVyc19sZWdhY3koc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gNDM5Olx0XHRcdFx0XHQgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbiA0NDA6XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5idWZzKVxuIDQ0MTpcdHtcbiA0NDI6XHRcdHVuc2lnbmVkIGxvbmcgaSA9IDA7XG4gNDQzOlx0XHRzdHJ1Y3QgaW9fYnVmZmVyICpueHQ7XG4gNDQ0Olx0XG4gNDQ1Olx0XHQvKiBwcm90ZWN0cyBpb19idWZmZXJzX2NhY2hlICovXG4gNDQ2Olx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKTtcbiA0NDc6XHRcdFdBUk5fT05fT05DRShibC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9CVUZfUklORyk7XG4gNDQ4Olx0XG4gNDQ5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYnVmcyBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2YmwtXHUwMDNlYnVmX2xpc3QpOyBpJiM0MzsmIzQzOykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzY5CgkJCQkJCQlvdXRwdXQ6IDE4MAoJCQkJCQkJdGhvdWdodHM6IDEwOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgaW9fdXJpbmcgTmV0d29yayBSZWNlaXZlIEJ1ZmZlciBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGltcHJvdmluZyB0aGUgbWFuYWdlbWVudCBvZiBuZXR3b3JrIHJlY2VpdmUgYnVmZmVycyB3aXRoaW4gdGhlIGlvX3VyaW5nIGZyYW1ld29yay4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBhcHBlYXJzIHRvIGJlIGEgZ29vZCwgdGFyZ2V0ZWQgY2hhbmdlIHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSBidWZmZXIgcmluZ3MgYW5kIGJ1bmRsZSBvcGVyYXRpb25zIGluIHRoZSBuZXR3b3JrIGNvbnRleHQuCgpGaXJzdGx5LCBgaW9fYnVmZmVyX2dldF9saXN0YCBpcyBiZWluZyBtYWRlIHZpc2libGUgdG8gYG5ldC5jYCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgd2UgbmVlZCB0byBhY2Nlc3MgYnVmZmVyIGxpc3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgbmV0d29yayBzaWRlLiBMb29raW5nIGNsb3NlciwgaW4gYGlvX25ldF9rYnVmX3JlY3lsZWAsIHRoZSByZW1vdmFsIG9mIHRoZSBjYWxsIHRvIGBpb19rYnVmX2NvbW1pdGAgaXMgYXBwcm9wcmlhdGUgd2hlbiBidWZmZXJzIGFyZSBiZWluZyByZWN5Y2xlZCBkdXJpbmcgcmV0cmllczsgaXQgYXZvaWRzIGNvbW1pdHRpbmcgc29tZXRoaW5nIHRoYXQgc2hvdWxkbiYjMzk7dCBiZS4gVGhlbiB0aGUgYWRqdXN0bWVudHMgaW4gYGlvX3JlY3ZfZmluaXNoYCBhbmQgYGlvX3JlY3ZgIGFwcGVhciB0byBiZSBhaW1lZCBhdCBjb3JyZWN0bHkgYWNjb3VudGluZyBmb3IgdGhlIHRvdGFsIHRyYW5zZmVycmVkIGxlbmd0aCBpbiB0aGUgY29udGV4dCBvZiBidW5kbGVkIG9wZXJhdGlvbnMgYW5kIHJldHJpZXMuIFNwZWNpZmljYWxseSwgbWFraW5nIHN1cmUgd2UgZ2V0IHRoZSBjb3JyZWN0IHRvdGFsIGxlbmd0aCB0aHJvdWdoIGBzZWwtJmd0O3ZhbGAgaW50byBgaW9fYnVuZGxlX25idWZzYC4gVGhpcyBlbnN1cmVzIHRoYXQgYnVmZmVyIGNvbnN1bXB0aW9uIGFuZCByZWN5Y2xpbmcgYXJlIHByb3Blcmx5IGhhbmRsZWQgYWNyb3NzIG11bHRpcGxlIGNhbGxzIG9yIHJldHJpZXMuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIG15IGluaXRpYWwgaHlwb3RoZXNpcyB0aGF0IHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcywgd2hpY2ggaXMgYWx3YXlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55IGtlcm5lbC10by11c2Vyc3BhY2UgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBkYXRhIG9yIGltcHJvcGVyIG1lbW9yeSBhY2Nlc3MuIEFmdGVyIHJldmlld2luZyB0aGUgY29kZSBJIGhhdmUgdG8gc2F5IEkmIzM5O20gc2F0aXNmaWVkLiBUaGUgY2hhbmdlcyBhcmUgYWxsIGFib3V0IGltcHJvdmluZyB0aGUgKm1hbmFnZW1lbnQqIG9mIGV4aXN0aW5nIGJ1ZmZlcnM6IGNvcnJlY3RseSB0cmFja2luZyBidWZmZXIgbGlzdCBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zIGluIGBpb19yZWN2YCwgZml4aW5nIHRoZSB0b3RhbCBsZW5ndGggY2FsY3VsYXRpb24gaW4gYGlvX3JlY3ZfZmluaXNoYCwgYW5kIGNsZWFuaW5nIHVwIGBpb19uZXRfa2J1Zl9yZWN5bGVgIHRvIHByZXZlbnQgZG91YmxlLWNvbW1pdHMgaW4gcmV0cmllcy4KClRoZSBmaWVsZHMgdXNlZCBhcmUgQ1FFIGZsYWdzLCByZXR1cm4gaW50ZWdlcnMsIHdoaWNoIGFyZSBub3Qga2VybmVsIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXJzcGFjZSB0aGF0IG1pZ2h0IGNvbnRhaW4gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBzdHJ1Y3R1cmVzIHRoYXQgZ2l2ZSBtZSBjYXVzZSBmb3IgY29uY2Vybi4gVGhlIHBhdGNoIGNvcnJlY3RzIGJ1ZmZlciByZWN5Y2xpbmcgYW5kIGNvbW1pdHRpbmcgbG9naWMgYW5kIGFjY291bnRzIGZvciBidWZmZXIgYnVuZGxlcyB3aGVuIHVzaW5nIHRoZSBpb191cmluZyByaW5nIGJ1ZmZlci4gVGhpcyBpc24mIzM5O3QgbmV3IG1lbW9yeSBhbGxvY2F0aW9uLCBpdCYjMzk7cyBhYm91dCBtYWtpbmcgc3VyZSBleGlzdGluZyBtZW1vcnkgKHVzZXIgcHJvdmlkZWQgb3IgcmluZyBidWZmZXIpIGlzIHVzZWQgY29ycmVjdGx5LiBUaGUga2V5IGFzcGVjdHMgYXJlIHRoYXQgYHNlbGAgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LCBhbmQgdGhlcmUgYXJlIG5vIGluc3RhbmNlcyBvZiBicmFuY2hlZCBiZWhhdmlvciBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZSBjaGFuZ2VzIGFkZHJlc3MgYm9va2tlZXBpbmcgYW5kIGFjY291bnRpbmcgaW4gdGhlIGlvX3VyaW5nIHJpbmcgYnVmZmVyLCBJJiMzOTttIGNvbmZpZGVudCBLTVNBTiBpcyAqbm90KiBuZWVkZWQgaGVyZS4gVGhlIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIGFjY2VzcywgYnVmZmVyIGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgdGhlIG1haW4gcmlza3MgaGVyZS4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgcG90ZW50aWFsIHJlc291cmNlIGxlYWtzLCBpbmNvcnJlY3QgcmluZyBidWZmZXIgZW50cnkgY29uc3VtcHRpb24sIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMuIEhvd2V2ZXIsIHRoZXNlIGFyZSBsb2dpYyBlcnJvcnMgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KClRvIHN1bW1hcml6ZSwgdGhlc2UgY2hhbmdlczoKMS4gIEV4cG9zZSBgaW9fYnVmZmVyX2dldF9saXN0YAoyLiAgU2V0IGBzZWwuYnVmX2xpc3RgIGNvcnJlY3RseSB3aGVuIGJ1ZmZlciByaW5nIHVzZSBpcyBlbmFibGVkLgozLiAgRml4IHRoZSB0b3RhbCBsZW5ndGggdXNlZCBmb3IgYnVuZGxlIGJ1ZmZlciBjYWxjdWxhdGlvbi4KNC4gIFJlbW92ZSBhIHJlZHVuZGFudCBgaW9fa2J1Zl9jb21taXRgIGNhbGwuCgpUaGUgcGF0Y2ggY29ycmVjdHMgYWNjb3VudGluZyBhbmQgdHJhY2tpbmcgZm9yIG5ldHdvcmsgcmVjZWl2ZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQuIFRoZSBLQVNBTiBjYW4gZGV0ZWN0IGFueSBtZW1vcnkgcHJvYmxlbXMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4gVGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxNDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYnVmZmVyIG1hbmFnZW1lbnQgYW5kIGFjY291bnRpbmcgbG9naWMgZm9yIGJ1bmRsZWQgYW5kIHJpbmcgYnVmZmVyIG5ldHdvcmsgcmVjZWl2ZXMgaW4gaW9fdXJpbmcgKGlvX3JlY3YgYW5kIGlvX3JlY3ZfZmluaXNoKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIGBzZWwuYnVmX2xpc3RgIGlzIHByb3Blcmx5IHJldHJpZXZlZCB3aGVuIGBSRVFfRl9CVUZGRVJfUklOR2AgaXMgYWN0aXZlLCBjb3JyZWN0cyB0aGUgYnVmZmVyIGNvdW50IHBhc3NlZCB0byBgaW9fYnVuZGxlX25idWZzKClgIHVzaW5nIGBzZWwtXHUwMDNldmFsYCwgYW5kIHJlbW92ZXMgYW4gaW5hcHByb3ByaWF0ZSBidWZmZXIgY29tbWl0IG9uIHJlY3ljbGUuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGF0aHMuIFBvdGVudGlhbCBlcnJvcnMgd291bGQgaW52b2x2ZSBidWZmZXIgcmluZyBpbmRleCB0cmFja2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYnVmZmVyIG1hbmFnZW1lbnQgYW5kIGFjY291bnRpbmcgbG9naWMgZm9yIGJ1bmRsZWQgYW5kIHJpbmcgYnVmZmVyIG5ldHdvcmsgcmVjZWl2ZXMgaW4gaW9fdXJpbmcgKGlvX3JlY3YgYW5kIGlvX3JlY3ZfZmluaXNoKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIGBzZWwuYnVmX2xpc3RgIGlzIHByb3Blcmx5IHJldHJpZXZlZCB3aGVuIGBSRVFfRl9CVUZGRVJfUklOR2AgaXMgYWN0aXZlLCBjb3JyZWN0cyB0aGUgYnVmZmVyIGNvdW50IHBhc3NlZCB0byBgaW9fYnVuZGxlX25idWZzKClgIHVzaW5nIGBzZWwtXHUwMDNldmFsYCwgYW5kIHJlbW92ZXMgYW4gaW5hcHByb3ByaWF0ZSBidWZmZXIgY29tbWl0IG9uIHJlY3ljbGUuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGF0aHMuIFBvdGVudGlhbCBlcnJvcnMgd291bGQgaW52b2x2ZSBidWZmZXIgcmluZyBpbmRleCB0cmFja2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU0OjAwLjg1MTM5MTY4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDA3OTEzMjEyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fcmVjdlwiLFxuICAgIFwiaW9fcmVjdm1zZ1wiLFxuICAgIFwiaW9fYnVmZmVyX2dldF9saXN0XCIsXG4gICAgXCJpb19rYnVmX2NvbW1pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGJ1ZmZlciBtYW5hZ2VtZW50IGFuZCBhY2NvdW50aW5nIGxvZ2ljIGZvciBidW5kbGVkIGFuZCByaW5nIGJ1ZmZlciBuZXR3b3JrIHJlY2VpdmVzIGluIGlvX3VyaW5nIChpb19yZWN2IGFuZCBpb19yZWN2X2ZpbmlzaCkuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBgc2VsLmJ1Zl9saXN0YCBpcyBwcm9wZXJseSByZXRyaWV2ZWQgd2hlbiBgUkVRX0ZfQlVGRkVSX1JJTkdgIGlzIGFjdGl2ZSwgY29ycmVjdHMgdGhlIGJ1ZmZlciBjb3VudCBwYXNzZWQgdG8gYGlvX2J1bmRsZV9uYnVmcygpYCB1c2luZyBgc2VsLVxcdTAwM2V2YWxgLCBhbmQgcmVtb3ZlcyBhbiBpbmFwcHJvcHJpYXRlIGJ1ZmZlciBjb21taXQgb24gcmVjeWNsZS5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBQb3RlbnRpYWwgZXJyb3JzIHdvdWxkIGludm9sdmUgYnVmZmVyIHJpbmcgaW5kZXggdHJhY2tpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9fdXJpbmcgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGJ1ZmZlciBsaXN0IHNlbGVjdGlvbiwgYnVmZmVyIGNvbW1pdHMsIGFuZCBidWZmZXIgYnVuZGxlIGhhbmRsaW5nIGluIHJlY2VpdmUgb3BlcmF0aW9ucyAoSU9SSU5HX09QX1JFQ1YgLyBJT1JJTkdfT1BfUkVDVk1TRykuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTQ6MDAuODUxMzk3NTU1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY5NTU5NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTRkYjM5MTgwYjliOTMwZWMwMDM5NzFkZWMzNmI1Zjc1NDM3ZjMxY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDEzOjUzOjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2tidWYuYyBiL2lvX3VyaW5nL2tidWYuY1xcbmluZGV4IDdjMzA5MTczZGQxOTQuLmM0YmFlOGYwMDE3M2UgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcva2J1Zi5jXFxuKysrIGIvaW9fdXJpbmcva2J1Zi5jXFxuQEAgLTc2LDggKzc2LDggQEAgYm9vbCBpb19rYnVmX2NvbW1pdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICppb19idWZmZXJfZ2V0X2xpc3Qoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBiZ2lkKVxcbitzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmlvX2J1ZmZlcl9nZXRfbGlzdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgYmdpZClcXG4ge1xcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZjdHgtXFx1MDAzZXVyaW5nX2xvY2spO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5oIGIvaW9fdXJpbmcva2J1Zi5oXFxuaW5kZXggNDAxNzczZTFlZjgwNS4uNzA3OWYyZGVjOWUwZSAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9rYnVmLmhcXG4rKysgYi9pb191cmluZy9rYnVmLmhcXG5AQCAtNzEsNiArNzEsOCBAQCBzdHJ1Y3QgaW9fYnJfc2VsIGlvX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNpemVfdCAqbGVuLFxcbiBcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGJ1Zl9ncm91cCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG4gaW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4gXFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbitzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmlvX2J1ZmZlcl9nZXRfbGlzdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgYmdpZCk7XFxuIGludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbiBcXHRcXHQgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsKTtcXG4gdm9pZCBpb19kZXN0cm95X2J1ZmZlcnMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xcbmRpZmYgLS1naXQgYS9pb191cmluZy9uZXQuYyBiL2lvX3VyaW5nL25ldC5jXFxuaW5kZXggZmJlNzE5ZDg2YzQ2My4uYmZmNDUxNGMwMTAwYyAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9uZXQuY1xcbisrKyBiL2lvX3VyaW5nL25ldC5jXFxuQEAgLTQ4Myw4ICs0ODMsNiBAQCBzdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IGxlbilcXG4ge1xcbiBcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JMX05PX1JFQ1lDTEU7XFxuLVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpXFxuLVxcdFxcdGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpO1xcbiBcXHRyZXR1cm4gSU9VX1JFVFJZO1xcbiB9XFxuIFxcbkBAIC04NzcsNyArODc1LDggQEAgc3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbiBcXHRpZiAoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkge1xcbiBcXHRcXHRzaXplX3QgdGhpc19yZXQgPSBzZWwtXFx1MDAzZXZhbCAtIHNyLVxcdTAwM2Vkb25lX2lvO1xcbiBcXG4tXFx0XFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIHRoaXNfcmV0LCBzZWwtXFx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgdGhpc19yZXQpKTtcXG4rXFx0XFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIHRoaXNfcmV0LCBzZWwtXFx1MDAzZWJ1Zl9saXN0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgaW9fYnVuZGxlX25idWZzKGttc2csIHNlbC1cXHUwMDNldmFsKSk7XFxuIFxcdFxcdGlmIChzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVl9SRVRSWSlcXG4gXFx0XFx0XFx0Y2ZsYWdzID0gcmVxLVxcdTAwM2VjcWUuZmxhZ3MgfCAoY2ZsYWdzIFxcdTAwMjYgQ1FFX0ZfTUFTSyk7XFxuIFxcdFxcdGlmIChzci1cXHUwMDNlbXNob3RfbGVuIFxcdTAwMjZcXHUwMDI2IHNlbC1cXHUwMDNldmFsIFxcdTAwM2U9IHNyLVxcdTAwM2Vtc2hvdF9sZW4pXFxuQEAgLTEyMjEsNiArMTIyMCw4IEBAIGludCBpb19yZWN2KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0c3ItXFx1MDAzZWJ1ZiA9IE5VTEw7XFxuK1xcdH0gZWxzZSBpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0JVRkZFUl9SSU5HKSB7XFxuK1xcdFxcdHNlbC5idWZfbGlzdCA9IGlvX2J1ZmZlcl9nZXRfbGlzdChyZXEtXFx1MDAzZWN0eCwgc3ItXFx1MDAzZWJ1Zl9ncm91cCk7XFxuIFxcdH1cXG4gXFxuIFxcdGttc2ctXFx1MDAzZW1zZy5tc2dfZmxhZ3MgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzo1NDowMi4yMjE3MTA2NTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI4NjAzMjI0NTMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fcmVjdlwiLFxuICAgIFwiaW9fcmVjdm1zZ1wiLFxuICAgIFwiaW9fYnVmZmVyX2dldF9saXN0XCIsXG4gICAgXCJpb19rYnVmX2NvbW1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9fdXJpbmcgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGJ1ZmZlciBsaXN0IHNlbGVjdGlvbiwgYnVmZmVyIGNvbW1pdHMsIGFuZCBidWZmZXIgYnVuZGxlIGhhbmRsaW5nIGluIHJlY2VpdmUgb3BlcmF0aW9ucyAoSU9SSU5HX09QX1JFQ1YgLyBJT1JJTkdfT1BfUkVDVk1TRykuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTRkYjM5MTgwYjliOTMwZWMwMDM5NzFkZWMzNmI1Zjc1NDM3ZjMxY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTM6NTM6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9rYnVmLmMgYi9pb191cmluZy9rYnVmLmNcbmluZGV4IDdjMzA5MTczZGQxOTQuLmM0YmFlOGYwMDE3M2UgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9rYnVmLmNcbisrKyBiL2lvX3VyaW5nL2tidWYuY1xuQEAgLTc2LDggKzc2LDggQEAgYm9vbCBpb19rYnVmX2NvbW1pdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqaW9fYnVmZmVyX2dldF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLVx0XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IGJnaWQpXG4rc3RydWN0IGlvX2J1ZmZlcl9saXN0ICppb19idWZmZXJfZ2V0X2xpc3Qoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGJnaWQpXG4ge1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZjdHgtXHUwMDNldXJpbmdfbG9jayk7XG4gXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5oIGIvaW9fdXJpbmcva2J1Zi5oXG5pbmRleCA0MDE3NzNlMWVmODA1Li43MDc5ZjJkZWM5ZTBlIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcva2J1Zi5oXG4rKysgYi9pb191cmluZy9rYnVmLmhcbkBAIC03MSw2ICs3MSw4IEBAIHN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGJ1Zl9ncm91cCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbiBpbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuIFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG4rc3RydWN0IGlvX2J1ZmZlcl9saXN0ICppb19idWZmZXJfZ2V0X2xpc3Qoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGJnaWQpO1xuIGludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuIFx0XHQgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsKTtcbiB2b2lkIGlvX2Rlc3Ryb3lfYnVmZmVycyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbmV0LmMgYi9pb191cmluZy9uZXQuY1xuaW5kZXggZmJlNzE5ZDg2YzQ2My4uYmZmNDUxNGMwMTAwYyAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL25ldC5jXG4rKysgYi9pb191cmluZy9uZXQuY1xuQEAgLTQ4Myw4ICs0ODMsNiBAQCBzdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLCBpbnQgbGVuKVxuIHtcbiBcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9OT19SRUNZQ0xFO1xuLVx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpXG4tXHRcdGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpO1xuIFx0cmV0dXJuIElPVV9SRVRSWTtcbiB9XG4gXG5AQCAtODc3LDcgKzg3NSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkge1xuIFx0XHRzaXplX3QgdGhpc19yZXQgPSBzZWwtXHUwMDNldmFsIC0gc3ItXHUwMDNlZG9uZV9pbztcbiBcbi1cdFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIHRoaXNfcmV0LCBzZWwtXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCB0aGlzX3JldCkpO1xuK1x0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCxcbitcdFx0XHRcdCAgICAgICBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVx1MDAzZXZhbCkpO1xuIFx0XHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxuIFx0XHRcdGNmbGFncyA9IHJlcS1cdTAwM2VjcWUuZmxhZ3MgfCAoY2ZsYWdzIFx1MDAyNiBDUUVfRl9NQVNLKTtcbiBcdFx0aWYgKHNyLVx1MDAzZW1zaG90X2xlbiBcdTAwMjZcdTAwMjYgc2VsLVx1MDAzZXZhbCBcdTAwM2U9IHNyLVx1MDAzZW1zaG90X2xlbilcbkBAIC0xMjIxLDYgKzEyMjAsOCBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHRcdH1cbiBcdFx0c3ItXHUwMDNlYnVmID0gTlVMTDtcbitcdH0gZWxzZSBpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9CVUZGRVJfUklORykge1xuK1x0XHRzZWwuYnVmX2xpc3QgPSBpb19idWZmZXJfZ2V0X2xpc3QocmVxLVx1MDAzZWN0eCwgc3ItXHUwMDNlYnVmX2dyb3VwKTtcbiBcdH1cbiBcbiBcdGttc2ctXHUwMDNlbXNnLm1zZ19mbGFncyA9IDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzo1NDowMi4yMjE3MTI2ODNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjczNTMwNzU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElPX1VSSU5HIE5ldHdvcmsgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgYW5kIHRoZWlyIGltcGFjdC4gSSBzZWUgY2hhbmdlcyBpbiBgaW9fdXJpbmcva2J1Zi5jYCwgYGlvX3VyaW5nL2tidWYuaGAsIGFuZCBgaW9fdXJpbmcvbmV0LmNgLiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBgaW9fdXJpbmdgIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIG5ldHdvcmsgb3BlcmF0aW9ucywgbGlrZWx5IHJlbGF0ZWQgdG8gcmVjZWl2ZSBvcGVyYXRpb25zIHdpdGggYnVmZmVyIGJ1bmRsZXMgb3IgdGhlIGJ1ZmZlciByaW5nLlxuXG5UbyBnZXQgYSBoYW5kbGUgb24gdGhlIHNwZWNpZmljcywgSSdsbCBsZXZlcmFnZSBteSB1c3VhbCB0b29sa2l0IOKAkyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHRvIG1ldGljdWxvdXNseSBpbnNwZWN0IGBpb191cmluZy9uZXQuY2AgYW5kIGBpb191cmluZy9rYnVmLmNgLiBJJ2xsIGFsc28gY2hlY2sgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgaW5jbHVkZSBmaWxlcyBmb3IgYW55IGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldHdvcmsgb3BlcmF0aW9ucyB3aXRoIHRoZSBjaGFuZ2VzIHRvIGtidWYgc3RydWN0dXJlcy4gVGhpcyBzaG91bGQgdGVsbCBtZSB3aGF0J3MgY2hhbmdlZCBhbmQgdGhlIGludGVudCBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjcsIk91dHB1dFRva2VucyI6MTA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTQ6MzQuOTU3MDIyODM2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL25ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ3NTpcXHRcXHRcXHRuYnVmcysrO1xcbiA0NzY6XFx0XFx0XFx0cmV0IC09IHRoaXNfbGVuO1xcbiA0Nzc6XFx0XFx0fSB3aGlsZSAocmV0KTtcXG4gNDc4OlxcdFxcbiA0Nzk6XFx0XFx0cmV0dXJuIG5idWZzO1xcbiA0ODA6XFx0fVxcbiA0ODE6XFx0XFxuIDQ4MjpcXHRzdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG4gNDgzOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csIGludCBsZW4pXFxuIDQ4NDpcXHR7XFxuIDQ4NTpcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JMX05PX1JFQ1lDTEU7XFxuIDQ4NjpcXHRcXHRyZXR1cm4gSU9VX1JFVFJZO1xcbiA0ODc6XFx0fVxcbiA0ODg6XFx0XFxuIDQ4OTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgaW9fc2VuZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuIDQ5MDpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuIDQ5MTpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19icl9zZWwgKnNlbClcXG4gNDkyOlxcdHtcXG4gNDkzOlxcdFxcdHN0cnVjdCBpb19zcl9tc2cgKnNyID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3NyX21zZyk7XFxuIDQ5NDpcXHRcXHRib29sIGJ1bmRsZV9maW5pc2hlZCA9IHNlbC1cXHUwMDNldmFsIFxcdTAwM2M9IDA7XFxuIDQ5NTpcXHRcXHR1bnNpZ25lZCBpbnQgY2ZsYWdzO1xcbiA0OTY6XFx0XFxuIDQ5NzpcXHRcXHRpZiAoIShzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVlNFTkRfQlVORExFKSkge1xcbiA0OTg6XFx0XFx0XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWYocmVxLCBzZWwtXFx1MDAzZXZhbCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuIDQ5OTpcXHRcXHRcXHRnb3RvIGZpbmlzaDtcXG4gNTAwOlxcdFxcdH1cXG4gNTAxOlxcdFxcbiA1MDI6XFx0XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXFx1MDAzZXZhbCkpO1xcbiA1MDM6XFx0XFxuIDUwNDpcXHRcXHQvKlxcbiA1MDU6XFx0XFx0ICogRG9uJ3Qgc3RhcnQgbmV3IGJ1bmRsZXMgaWYgdGhlIGJ1ZmZlciBsaXN0IGlzIGVtcHR5LCBvciBpZiB0aGVcXG4gNTA2OlxcdFxcdCAqIGN1cnJlbnQgb3BlcmF0aW9uIG5lZWRlZCB0byBnbyB0aHJvdWdoIHBvbGxpbmcgdG8gY29tcGxldGUuXFxuIDUwNzpcXHRcXHQgKi9cXG4gNTA4OlxcdFxcdGlmIChidW5kbGVfZmluaXNoZWQgfHwgcmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IChSRVFfRl9CTF9FTVBUWSB8IFJFUV9GX1BPTExFRCkpXFxuIDUwOTpcXHRcXHRcXHRnb3RvIGZpbmlzaDtcXG4gNTEwOlxcdFxcbiA1MTE6XFx0XFx0LypcXG4gNTEyOlxcdFxcdCAqIEZpbGwgQ1FFIGZvciB0aGlzIHJlY2VpdmUgYW5kIHNlZSBpZiB3ZSBzaG91bGQga2VlcCB0cnlpbmcgdG9cXG4gNTEzOlxcdFxcdCAqIHJlY2VpdmUgZnJvbSB0aGlzIHNvY2tldC5cXG4gNTE0OlxcdFxcdCAqL1xcbiA1MTU6XFx0XFx0aWYgKGlvX3JlcV9wb3N0X2NxZShyZXEsIHNlbC1cXHUwMDNldmFsLCBjZmxhZ3MgfCBJT1JJTkdfQ1FFX0ZfTU9SRSkpIHtcXG4gNTE2OlxcdFxcdFxcdGlvX21zaG90X3ByZXBfcmV0cnkocmVxLCBrbXNnKTtcXG4gNTE3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNTE4OlxcdFxcdH1cXG4gNTE5OlxcdFxcbiA1MjA6XFx0XFx0LyogT3RoZXJ3aXNlIHN0b3AgYnVuZGxlIGFuZCB1c2UgdGhlIGN1cnJlbnQgcmVzdWx0LiAqL1xcbiA1MjE6XFx0ZmluaXNoOlxcbiA1MjI6XFx0XFx0aW9fcmVxX3NldF9yZXMocmVxLCBzZWwtXFx1MDAzZXZhbCwgY2ZsYWdzKTtcXG4gNTIzOlxcdFxcdHNlbC1cXHUwMDNldmFsID0gSU9VX0NPTVBMRVRFO1xcbiA1MjQ6XFx0XFx0cmV0dXJuIHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU0OjM0Ljk1NzE1MTk5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL25ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MDpcXHRcXHRcXHRcXHRzci1cXHUwMDNlZmxhZ3MgfD0gSU9SSU5HX1JFQ1ZfTVNIT1RfRE9ORTtcXG4gODcxOlxcdFxcdFxcdFxcdG1zaG90X2ZpbmlzaGVkID0gdHJ1ZTtcXG4gODcyOlxcdFxcdFxcdH1cXG4gODczOlxcdFxcdH1cXG4gODc0OlxcdFxcbiA4NzU6XFx0XFx0aWYgKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWU0VORF9CVU5ETEUpIHtcXG4gODc2OlxcdFxcdFxcdHNpemVfdCB0aGlzX3JldCA9IHNlbC1cXHUwMDNldmFsIC0gc3ItXFx1MDAzZWRvbmVfaW87XFxuIDg3NzpcXHRcXG4gODc4OlxcdFxcdFxcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLVxcdTAwM2VidWZfbGlzdCxcXG4gODc5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVxcdTAwM2V2YWwpKTtcXG4gODgwOlxcdFxcdFxcdGlmIChzci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT1JJTkdfUkVDVl9SRVRSWSlcXG4gODgxOlxcdFxcdFxcdFxcdGNmbGFncyA9IHJlcS1cXHUwMDNlY3FlLmZsYWdzIHwgKGNmbGFncyBcXHUwMDI2IENRRV9GX01BU0spO1xcbiA4ODI6XFx0XFx0XFx0aWYgKHNyLVxcdTAwM2Vtc2hvdF9sZW4gXFx1MDAyNlxcdTAwMjYgc2VsLVxcdTAwM2V2YWwgXFx1MDAzZT0gc3ItXFx1MDAzZW1zaG90X2xlbilcXG4gODgzOlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9NU0hPVF9DQVA7XFxuIDg4NDpcXHRcXHRcXHQvKiBidW5kbGUgd2l0aCBubyBtb3JlIGltbWVkaWF0ZSBidWZmZXJzLCB3ZSdyZSBkb25lICovXFxuIDg4NTpcXHRcXHRcXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0JMX0VNUFRZKVxcbiA4ODY6XFx0XFx0XFx0XFx0Z290byBmaW5pc2g7XFxuIDg4NzpcXHRcXHRcXHQvKlxcbiA4ODg6XFx0XFx0XFx0ICogSWYgbW9yZSBpcyBhdmFpbGFibGUgQU5EIGl0IHdhcyBhIGZ1bGwgdHJhbnNmZXIsIHJldHJ5IGFuZFxcbiA4ODk6XFx0XFx0XFx0ICogYXBwZW5kIHRvIHRoaXMgb25lXFxuIDg5MDpcXHRcXHRcXHQgKi9cXG4gODkxOlxcdFxcdFxcdGlmICghKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWX05PX1JFVFJZKSBcXHUwMDI2XFx1MDAyNlxcbiA4OTI6XFx0XFx0XFx0ICAgIGttc2ctXFx1MDAzZW1zZy5tc2dfaW5xIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiB0aGlzX3JldCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4gODkzOlxcdFxcdFxcdCAgICAhaW92X2l0ZXJfY291bnQoXFx1MDAyNmttc2ctXFx1MDAzZW1zZy5tc2dfaXRlcikpIHtcXG4gODk0OlxcdFxcdFxcdFxcdHJlcS1cXHUwMDNlY3FlLmZsYWdzID0gY2ZsYWdzIFxcdTAwMjYgfkNRRV9GX01BU0s7XFxuIDg5NTpcXHRcXHRcXHRcXHRzci1cXHUwMDNlbGVuID0ga21zZy1cXHUwMDNlbXNnLm1zZ19pbnE7XFxuIDg5NjpcXHRcXHRcXHRcXHRzci1cXHUwMDNlZG9uZV9pbyArPSB0aGlzX3JldDtcXG4gODk3OlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9SRVRSWTtcXG4gODk4OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODk5OlxcdFxcdFxcdH1cXG4gOTAwOlxcdFxcdH0gZWxzZSB7XFxuIDkwMTpcXHRcXHRcXHRjZmxhZ3MgfD0gaW9fcHV0X2tidWYocmVxLCBzZWwtXFx1MDAzZXZhbCwgc2VsLVxcdTAwM2VidWZfbGlzdCk7XFxuIDkwMjpcXHRcXHR9XFxuIDkwMzpcXHRcXG4gOTA0OlxcdFxcdC8qXFxuIDkwNTpcXHRcXHQgKiBGaWxsIENRRSBmb3IgdGhpcyByZWNlaXZlIGFuZCBzZWUgaWYgd2Ugc2hvdWxkIGtlZXAgdHJ5aW5nIHRvXFxuIDkwNjpcXHRcXHQgKiByZWNlaXZlIGZyb20gdGhpcyBzb2NrZXQuXFxuIDkwNzpcXHRcXHQgKi9cXG4gOTA4OlxcdFxcdGlmICgocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkgXFx1MDAyNlxcdTAwMjYgIW1zaG90X2ZpbmlzaGVkIFxcdTAwMjZcXHUwMDI2XFxuIDkwOTpcXHRcXHQgICAgaW9fcmVxX3Bvc3RfY3FlKHJlcSwgc2VsLVxcdTAwM2V2YWwsIGNmbGFncyB8IElPUklOR19DUUVfRl9NT1JFKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzo1NDozNC45NTcyMjkzMTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9uZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjEwOlxcdFxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gflJFUV9GX0lNUE9SVF9CVUZGRVI7XFxuMTIxMTpcXHRcXHR9XFxuMTIxMjpcXHRcXG4xMjEzOlxcdHJldHJ5X211bHRpc2hvdDpcXG4xMjE0OlxcdFxcdHNlbC5idWZfbGlzdCA9IE5VTEw7XFxuMTIxNTpcXHRcXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XFxuMTIxNjpcXHRcXHRcXHRzZWwudmFsID0gc3ItXFx1MDAzZWxlbjtcXG4xMjE3OlxcdFxcdFxcdHJldCA9IGlvX3JlY3ZfYnVmX3NlbGVjdChyZXEsIGttc2csIFxcdTAwMjZzZWwsIGlzc3VlX2ZsYWdzKTtcXG4xMjE4OlxcdFxcdFxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAzYyAwKSkge1xcbjEyMTk6XFx0XFx0XFx0XFx0a21zZy1cXHUwMDNlbXNnLm1zZ19pbnEgPSAtMTtcXG4xMjIwOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTIyMTpcXHRcXHRcXHR9XFxuMTIyMjpcXHRcXHRcXHRzci1cXHUwMDNlYnVmID0gTlVMTDtcXG4xMjIzOlxcdFxcdH0gZWxzZSBpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0JVRkZFUl9SSU5HKSB7XFxuMTIyNDpcXHRcXHRcXHRzZWwuYnVmX2xpc3QgPSBpb19idWZmZXJfZ2V0X2xpc3QocmVxLVxcdTAwM2VjdHgsIHNyLVxcdTAwM2VidWZfZ3JvdXApO1xcbjEyMjU6XFx0XFx0fVxcbjEyMjY6XFx0XFxuMTIyNzpcXHRcXHRrbXNnLVxcdTAwM2Vtc2cubXNnX2ZsYWdzID0gMDtcXG4xMjI4OlxcdFxcdGttc2ctXFx1MDAzZW1zZy5tc2dfaW5xID0gLTE7XFxuMTIyOTpcXHRcXG4xMjMwOlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE1TR19XQUlUQUxMKVxcbjEyMzE6XFx0XFx0XFx0bWluX3JldCA9IGlvdl9pdGVyX2NvdW50KFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2cubXNnX2l0ZXIpO1xcbjEyMzI6XFx0XFxuMTIzMzpcXHRcXHRyZXQgPSBzb2NrX3JlY3Ztc2coc29jaywgXFx1MDAyNmttc2ctXFx1MDAzZW1zZywgZmxhZ3MpO1xcbjEyMzQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIG1pbl9yZXQpIHtcXG4xMjM1OlxcdFxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTiBcXHUwMDI2XFx1MDAyNiBmb3JjZV9ub25ibG9jaykge1xcbjEyMzY6XFx0XFx0XFx0XFx0aW9fa2J1Zl9yZWN5Y2xlKHJlcSwgc2VsLmJ1Zl9saXN0LCBpc3N1ZV9mbGFncyk7XFxuMTIzNzpcXHRcXHRcXHRcXHRyZXR1cm4gSU9VX1JFVFJZO1xcbjEyMzg6XFx0XFx0XFx0fVxcbjEyMzk6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgaW9fbmV0X3JldHJ5KHNvY2ssIGZsYWdzKSkge1xcbjEyNDA6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWxlbiAtPSByZXQ7XFxuMTI0MTpcXHRcXHRcXHRcXHRzci1cXHUwMDNlYnVmICs9IHJldDtcXG4xMjQyOlxcdFxcdFxcdFxcdHNyLVxcdTAwM2Vkb25lX2lvICs9IHJldDtcXG4xMjQzOlxcdFxcdFxcdFxcdHJldHVybiBpb19uZXRfa2J1Zl9yZWN5bGUocmVxLCBzZWwuYnVmX2xpc3QsIGttc2csIHJldCk7XFxuMTI0NDpcXHRcXHRcXHR9XFxuMTI0NTpcXHRcXHRcXHRpZiAocmV0ID09IC1FUkVTVEFSVFNZUylcXG4xMjQ2OlxcdFxcdFxcdFxcdHJldCA9IC1FSU5UUjtcXG4xMjQ3OlxcdFxcdFxcdHJlcV9zZXRfZmFpbChyZXEpO1xcbjEyNDg6XFx0XFx0fSBlbHNlIGlmICgoZmxhZ3MgXFx1MDAyNiBNU0dfV0FJVEFMTCkgXFx1MDAyNlxcdTAwMjYgKGttc2ctXFx1MDAzZW1zZy5tc2dfZmxhZ3MgXFx1MDAyNiAoTVNHX1RSVU5DIHwgTVNHX0NUUlVOQykpKSB7XFxuMTI0OTpcXHRvdXRfZnJlZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTQ6MzQuOTU3MzA3MDk2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk3NTg4NDQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOlxuXG4qKkNoZWNraW5nIE15IENvbmZpZ3VyYXRpb246IGlvX3VyaW5nIGFuZCBOZXQqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgbXkgY29uZmlndXJhdGlvbnMgc2V0IHVwIGNvcnJlY3RseSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBpb191cmluZyBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGlvX3VyaW5nOyB0aGF0J3MgdGhlIGNvcmUuIFNvLCBJIG5lZWQgdG8gb3BlbiB1cCBLY29uZmlnIGFuZCB2ZXJpZnkgdGhlIGlvX3VyaW5nIG9wdGlvbnMgYXJlIGVuYWJsZWQgYXMgSSBleHBlY3QuIEl0J3MgYWxsIGFib3V0IG1ha2luZyBzdXJlIHRoYXQgdGhlIGxvdy1sZXZlbCBjb21wb25lbnRzIGFyZSB3aXJlZCBpbiB0aGUgd2F5IHRoYXQgSSB0aGluayB0aGV5IGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU1OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTQ6MzkuOTMzMTk0OTE3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MTY5ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5NTI9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5NTktXFxuaW5pdC9LY29uZmlnOjE5NjA6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5NjEtXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5Njk9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5ODEtXFxuaW5pdC9LY29uZmlnOjE5ODI6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTgzLVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU0OjQwLjAwMjM2OTA3NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMTcxNDA2NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgQnVpbGQgUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYG5ldC5jYCBhbmQgYGtidWYuY2AgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQgd2l0aGluIHRoZSBgaW9fdXJpbmdgIHByb2plY3QuIFRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgTWFrZWZpbGVgIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBidWlsZCBtYWdpYyB1c3VhbGx5IGhhcHBlbnMuIEknbGwgbmVlZCB0byBvcGVuIGFuZCBleGFtaW5lIGBpb191cmluZy9NYWtlZmlsZWAuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHNwZWNpZmljIHJ1bGVzIHJlbGF0ZWQgdG8gdGhvc2Ugc291cmNlIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5J3JlIGluY2x1ZGVkIGluIHRoZSBidWlsZCBwcm9jZXNzLCB3aGF0IGNvbXBpbGVyIGZsYWdzIGFyZSBiZWluZyB1c2VkLCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUsIGFuZCBob3cgdGhlIGZpbmFsIGV4ZWN1dGFibGVzIG9yIGxpYnJhcmllcyBhcmUgbGlua2VkLiBJdCdzIGFsbCBhYm91dCB0cmFjaW5nIHRoZSBwYXRoIGZyb20gc291cmNlIGNvZGUgdG8gdGhlIGZpbmFsIGFydGlmYWN0LCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHN0ZXBzIHRob3JvdWdobHkuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIG9iamVjdCBmaWxlIGNyZWF0aW9uLCBsaW5raW5nIHRvIGxpYnJhcmllcyAoZWl0aGVyIHN0YXRpYyBvciBkeW5hbWljKSwgYW5kIHBlcmhhcHMgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBmZWF0dXJlIGZsYWdzIG9yIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg5MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU0OjUyLjE3Mzc3ODUxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIGlvX3VyaW5nXFxuICAgNDpcXHRcXG4gICA1OlxcdGlmZGVmIENPTkZJR19HQ09WX1BST0ZJTEVfVVJJTkdcXG4gICA2OlxcdEdDT1ZfUFJPRklMRSA6PSB5XFxuICAgNzpcXHRlbmRpZlxcbiAgIDg6XFx0XFxuICAgOTpcXHRvYmotJChDT05GSUdfSU9fVVJJTkcpXFx0XFx0Kz0gaW9fdXJpbmcubyBvcGRlZi5vIGtidWYubyByc3JjLm8gbm90aWYubyBcXFxcXFxuICAxMDpcXHRcXHRcXHRcXHRcXHRcXHR0Y3R4Lm8gZmlsZXRhYmxlLm8gcncubyBwb2xsLm8gXFxcXFxcbiAgMTE6XFx0XFx0XFx0XFx0XFx0XFx0dHcubyB3YWl0Lm8gZXZlbnRmZC5vIHVyaW5nX2NtZC5vIFxcXFxcXG4gIDEyOlxcdFxcdFxcdFxcdFxcdFxcdG9wZW5jbG9zZS5vIHNxcG9sbC5vIHhhdHRyLm8gbm9wLm8gXFxcXFxcbiAgMTM6XFx0XFx0XFx0XFx0XFx0XFx0ZnMubyBzcGxpY2UubyBzeW5jLm8gbXNnX3JpbmcubyBcXFxcXFxuICAxNDpcXHRcXHRcXHRcXHRcXHRcXHRhZHZpc2UubyBvcGVuY2xvc2UubyBzdGF0eC5vIHRpbWVvdXQubyBcXFxcXFxuICAxNTpcXHRcXHRcXHRcXHRcXHRcXHRjYW5jZWwubyB3YWl0aWQubyByZWdpc3Rlci5vIFxcXFxcXG4gIDE2OlxcdFxcdFxcdFxcdFxcdFxcdHRydW5jYXRlLm8gbWVtbWFwLm8gYWxsb2NfY2FjaGUubyBcXFxcXFxuICAxNzpcXHRcXHRcXHRcXHRcXHRcXHRxdWVyeS5vIGxvb3Aub1xcbiAgMTg6XFx0XFxuICAxOTpcXHRvYmotJChDT05GSUdfSU9fVVJJTkdfWkNSWClcXHQrPSB6Y3J4Lm9cXG4gIDIwOlxcdG9iai0kKENPTkZJR19JT19XUSlcXHRcXHQrPSBpby13cS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU0OjUyLjE3Mzg0MTUwNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTkxNTg0NTEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgaW9fdXJpbmcgTWFrZWZpbGUqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhlIHJlc3Qgb2YgdGhlIGBpb191cmluZy9NYWtlZmlsZWAuIFRoaXMgbWVhbnMgSSdtIHByb2JhYmx5IHBhc3QgdGhlIGluaXRpYWwgb3ZlcnZpZXcgYW5kIGxpa2VseSBoYXZlIGEgc3BlY2lmaWMgYXJlYSBvZiBpbnRlcmVzdCDigJMgcGVyaGFwcyBidWlsZCBvcHRpb25zLCBsaW5raW5nIHN0cmF0ZWdpZXMsIGRlcGVuZGVuY3kgcmVzb2x1dGlvbiwgb3IgbWF5YmUgZXZlbiBjcm9zcy1jb21waWxhdGlvbiBjb25maWd1cmF0aW9ucy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2tpbSB0aGUgcmVtYWluaW5nIHNlY3Rpb25zIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLCBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgcGllY2VzIEkgbmVlZC4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIG1ha2VmaWxlIHN5bnRheCwgYXNzZXNzaW5nIGl0cyBjbGFyaXR5LCBhbmQgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGFyZWFzIG9mIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgZ290Y2hhcyB0aGF0IG1heSBjb21lIHVwIGR1cmluZyBteSB3b3JrIG9uIGl0LiBJIGFudGljaXBhdGUgdGhhdCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBuYXZpZ2F0ZSB0aGUgZG9jdW1lbnQgYW5kIGdhaW4gd2hhdCBpcyBuZWNlc3NhcnkgZm9yIHRoZSBjdXJyZW50IHRhc2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU2OjA0LjA4OTY4OTE2N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAyMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMTpcXHRvYmotJChDT05GSUdfRlVURVgpXFx0XFx0Kz0gZnV0ZXgub1xcbiAgMjI6XFx0b2JqLSQoQ09ORklHX0VQT0xMKVxcdFxcdCs9IGVwb2xsLm9cXG4gIDIzOlxcdG9iai0kKENPTkZJR19ORVRfUlhfQlVTWV9QT0xMKVxcdCs9IG5hcGkub1xcbiAgMjQ6XFx0b2JqLSQoQ09ORklHX05FVCkgKz0gbmV0Lm8gY21kX25ldC5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfUFJPQ19GUykgKz0gZmRpbmZvLm9cXG4gIDI2OlxcdG9iai0kKENPTkZJR19JT19VUklOR19NT0NLX0ZJTEUpICs9IG1vY2tfZmlsZS5vXFxuICAyNzpcXHRvYmotJChDT05GSUdfSU9fVVJJTkdfQlBGKSArPSBicGZfZmlsdGVyLm9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19JT19VUklOR19CUEZfT1BTKSArPSBicGYtb3BzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTY6MDQuMDg5NzQyOTc3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk4MjcwMjE3NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBpb191cmluZyBOZXR3b3JrIEludGVncmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbSBpbnRlcmZhY2VzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2suIFNwZWNpZmljYWxseSwgbXkgdGhvdWdodCBwcm9jZXNzIGlzIGZvY3VzaW5nIG9uIHRoZSBjb21waWxhdGlvbiBjb25kaXRpb25hbHMuIEZyb20gbXkgb2JzZXJ2YXRpb25zLCBpdCBhcHBlYXJzIGBpb191cmluZy9uZXQuY2AgaXMgb25seSBidWlsdCBpZiBib3RoIGBDT05GSUdfSU9fVVJJTkdgICphbmQqIGBDT05GSUdfTkVUYCBhcmUgZW5hYmxlZCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gT24gdGhlIG90aGVyIGhhbmQsIGBpb191cmluZy9rYnVmLmNgIG9ubHkgcmVxdWlyZXMgYENPTkZJR19JT19VUklOR2AuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSSBzZWUgYSBmZXcga2V5IHBsYXllcnM6XG5cbjEuICBgaW9fYnVmZmVyX2dldF9saXN0YCBpbiBgaW9fdXJpbmcva2J1Zi5jYCAtLSBJdCBpcyBubyBsb25nZXIgc3RhdGljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYW5kIHdoeSB0aGlzIGNoYW5nZWQuXG4yLiAgYGlvX3JlY3ZgIGluIGBpb191cmluZy9uZXQuY2AgLS0gVGhpcyBpcyBub3cgYSBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50IHNwZWNpZmljYWxseSBmb3IgYElPUklOR19PUF9SRUNWYC4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb24sIHNvIEknbGwgd2FudCB0byBzdHVkeSBpdHMgaW1wbGVtZW50YXRpb24gbW9yZSBjbG9zZWx5LlxuMy4gIGBpb19zZW5kX2ZpbmlzaGAsIGBpb19yZWN2X2ZpbmlzaGAsIGFuZCBgaW9fbmV0X2tidWZfcmVjeWxlYCBhcmUgYWxzbyBpbiBgaW9fdXJpbmcvbmV0LmNgLiBJIG5vdGUgdGhhdCB0aGVzZSBhcmUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYW5kIGFyZSBjYWxsZWQgZnJvbSB0aGUgcHJpbWFyeSBuZXR3b3JrLXJlbGF0ZWQgY2FsbHMgbGlrZSBgaW9fcmVjdmAgYW5kIGBpb19yZWN2bXNnYC5cbjQuICBUaGVuIHRoZXJlIGFyZSBhIGZldyBvdGhlciBoZWxwZXIgZnVuY3Rpb25zIHN1Y2ggYXMgYGlvX3JlY3ZfYnVmX3NlbGVjdGAsIGBpb19idWZmZXJzX3NlbGVjdGAsIGBpb19idWZmZXJzX3BlZWtgLCBgaW9fa2J1Zl9jb21taXRgLCBhbmQgYGlvX3B1dF9rYnVmc2AuXG5cblRvIHJlZmluZSBteSB1bmRlcnN0YW5kaW5nLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBhcyB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiB1c2VyLXNwYWNlIG1pZ2h0IGRpcmVjdGx5IGNhbGwuIFRoZXNlIGFyZTpcblxuKiAgIGBpb19yZWN2YFxuKiAgIGBpb19yZWN2bXNnYFxuKiAgIGBpb19idWZmZXJfZ2V0X2xpc3RgXG4qICAgYGlvX2tidWZfY29tbWl0YFxuXG5TbyBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGV0aGVyIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMg4oCTIGBpb19yZWN2YCwgYGlvX3JlY3Ztc2dgLCBgaW9fc2VuZGAsIGBpb19rYnVmX2NvbW1pdGAsIG9yIGBpb19idWZmZXJfZ2V0X2xpc3RgIOKAkyBhcmUgYWN0dWFsbHkgZXhwb3J0ZWQgb3IgZGVjbGFyZWQgYXMgbm9uLXN0YXRpYyBpbiB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzIChgaW9fdXJpbmcvbmV0LmhgIG9yIGBpb191cmluZy9rYnVmLmhgKS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBpbnRlbmRlZCB1c2FnZSBhbmQgc2NvcGUsIGFuZCBob3cgdGhlIG5ldHdvcmsgaW50ZWdyYXRpb24gaXMgbWVhbnQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk0MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU3OjQyLjM1OTk2Mzk5OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMDA5NDc4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19yZWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9uZXQuYz05Mz1lbnVtIHNyX3JldHJ5X2ZsYWdzIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTExMS1cXG5pb191cmluZy9uZXQuYzoxMTI6c3RydWN0IGlvX3JlY3Z6YyB7XFxuaW9fdXJpbmcvbmV0LmMtMTEzLVxcdHN0cnVjdCBmaWxlXFx0XFx0XFx0KmZpbGU7XFxuLS1cXG5pb191cmluZy9uZXQuYz02MjQ9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTcwMC1cXG5pb191cmluZy9uZXQuYzo3MDE6c3RhdGljIGludCBpb19yZWN2bXNnX21zaG90X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvbmV0LmMtNzAyLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICppb21zZyxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTcyNC1cXG5pb191cmluZy9uZXQuYzo3MjU6c3RhdGljIGludCBpb19yZWN2bXNnX2NvcHlfaGRyKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbmlvX3VyaW5nL25ldC5jLTcyNi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqaW9tc2cpXFxuLS1cXG5pb191cmluZy9uZXQuYy03NDAtXFx0fVxcbmlvX3VyaW5nL25ldC5jOjc0MTpcXHRyZXR1cm4gaW9fcmVjdm1zZ19tc2hvdF9wcmVwKHJlcSwgaW9tc2csIG1zZy5tc2dfbmFtZWxlbixcXG5pb191cmluZy9uZXQuYy03NDItXFx0XFx0XFx0XFx0XFx0bXNnLm1zZ19jb250cm9sbGVuKTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTc0NC1cXG5pb191cmluZy9uZXQuYzo3NDU6c3RhdGljIGludCBpb19yZWN2bXNnX3ByZXBfc2V0dXAoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuaW9fdXJpbmcvbmV0LmMtNzQ2LXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTc3Mi1cXG5pb191cmluZy9uZXQuYzo3NzM6XFx0cmV0dXJuIGlvX3JlY3Ztc2dfY29weV9oZHIocmVxLCBrbXNnKTtcXG5pb191cmluZy9uZXQuYy03NzQtfVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNzc4LVxcbmlvX3VyaW5nL25ldC5jOjc3OTppbnQgaW9fcmVjdm1zZ19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuaW9fdXJpbmcvbmV0LmMtNzgwLXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTgzNy1cXHRzci1cXHUwMDNlbnJfbXVsdGlzaG90X2xvb3BzID0gMDtcXG5pb191cmluZy9uZXQuYzo4Mzg6XFx0cmV0dXJuIGlvX3JlY3Ztc2dfcHJlcF9zZXR1cChyZXEpO1xcbmlvX3VyaW5nL25ldC5jLTgzOS19XFxuLS1cXG5pb191cmluZy9uZXQuYy04NDUtLypcXG5pb191cmluZy9uZXQuYzo4NDY6ICogRmluaXNoZXMgaW9fcmVjdiBhbmQgaW9fcmVjdm1zZy5cXG5pb191cmluZy9uZXQuYy04NDctICpcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTg1MC0gKi9cXG5pb191cmluZy9uZXQuYzo4NTE6c3RhdGljIGlubGluZSBib29sIGlvX3JlY3ZfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbmlvX3VyaW5nL25ldC5jLTg1Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuLS1cXG5pb191cmluZy9uZXQuYy05MzQtXFxuaW9fdXJpbmcvbmV0LmM6OTM1OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19wcmVwX211bHRpc2hvdChzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbmlvX3VyaW5nL25ldC5jLTkzNi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpb19zcl9tc2cgKnNyLCB2b2lkIF9fdXNlciAqKmJ1ZixcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTk1OS1cXG5pb191cmluZy9uZXQuYzo5NjA6c3RydWN0IGlvX3JlY3Ztc2dfbXVsdGlzaG90X2hkciB7XFxuaW9fdXJpbmcvbmV0LmMtOTYxLVxcdHN0cnVjdCBpb191cmluZ19yZWN2bXNnX291dCBtc2c7XFxuLS1cXG5pb191cmluZy9uZXQuYy05NjQtXFxuaW9fdXJpbmcvbmV0LmM6OTY1OnN0YXRpYyBpbnQgaW9fcmVjdm1zZ19tdWx0aXNob3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlvX3NyX21zZyAqaW8sXFxuaW9fdXJpbmcvbmV0LmMtOTY2LVxcdFxcdFxcdFxcdHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuLS1cXG5pb191cmluZy9uZXQuYy05NzAtXFx0aW50IGNvcHlfbGVuO1xcbmlvX3VyaW5nL25ldC5jOjk3MTpcXHRzdHJ1Y3QgaW9fcmVjdm1zZ19tdWx0aXNob3RfaGRyIGhkcjtcXG5pb191cmluZy9uZXQuYy05NzItXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMDA3LVxcdC8qIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIGdhcCBiZXR3ZWVuIGhkciBhbmQgc29ja2FkZHJfc3RvcmFnZSAqL1xcbmlvX3VyaW5nL25ldC5jOjEwMDg6XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpb19yZWN2bXNnX211bHRpc2hvdF9oZHIsIGFkZHIpICE9XFxuaW9fdXJpbmcvbmV0LmMtMTAwOS1cXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgaW9fdXJpbmdfcmVjdm1zZ19vdXQpKTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEwMTgtXFxuaW9fdXJpbmcvbmV0LmM6MTAxOTppbnQgaW9fcmVjdm1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbmlvX3VyaW5nL25ldC5jLTEwMjAte1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTA1MS1cXHRcXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0FQT0xMX01VTFRJU0hPVCkge1xcbmlvX3VyaW5nL25ldC5jOjEwNTI6XFx0XFx0XFx0cmV0ID0gaW9fcmVjdm1zZ19wcmVwX211bHRpc2hvdChrbXNnLCBzciwgXFx1MDAyNnNlbC5hZGRyLCBcXHUwMDI2bGVuKTtcXG5pb191cmluZy9uZXQuYy0xMDUzLVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEwNjQtXFx0aWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9BUE9MTF9NVUxUSVNIT1QpIHtcXG5pb191cmluZy9uZXQuYzoxMDY1OlxcdFxcdHJldCA9IGlvX3JlY3Ztc2dfbXVsdGlzaG90KHNvY2ssIHNyLCBrbXNnLCBmbGFncyxcXG5pb191cmluZy9uZXQuYy0xMDY2LVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZtc2hvdF9maW5pc2hlZCk7XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMDk5LVxcdHNlbC52YWwgPSByZXQ7XFxuaW9fdXJpbmcvbmV0LmM6MTEwMDpcXHRpZiAoIWlvX3JlY3ZfZmluaXNoKHJlcSwga21zZywgXFx1MDAyNnNlbCwgbXNob3RfZmluaXNoZWQsIGlzc3VlX2ZsYWdzKSlcXG5pb191cmluZy9uZXQuYy0xMTAxLVxcdFxcdGdvdG8gcmV0cnlfbXVsdGlzaG90O1xcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTEwNS1cXG5pb191cmluZy9uZXQuYzoxMTA2OnN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbmlvX3VyaW5nL25ldC5jLTExMDctXFx0XFx0XFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTc3LVxcbmlvX3VyaW5nL25ldC5jOjExNzg6aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9uZXQuYy0xMTc5LXtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyMTYtXFx0XFx0c2VsLnZhbCA9IHNyLVxcdTAwM2VsZW47XFxuaW9fdXJpbmcvbmV0LmM6MTIxNzpcXHRcXHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmMtMTIxOC1cXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpIHtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyNjEtXFx0c2VsLnZhbCA9IHJldDtcXG5pb191cmluZy9uZXQuYzoxMjYyOlxcdGlmICghaW9fcmVjdl9maW5pc2gocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBtc2hvdF9maW5pc2hlZCwgaXNzdWVfZmxhZ3MpKVxcbmlvX3VyaW5nL25ldC5jLTEyNjMtXFx0XFx0Z290byByZXRyeV9tdWx0aXNob3Q7XFxuLS1cXG5pb191cmluZy9uZXQuYy0xMjY3LVxcbmlvX3VyaW5nL25ldC5jOjEyNjg6aW50IGlvX3JlY3Z6Y19wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuaW9fdXJpbmcvbmV0LmMtMTI2OS17XFxuaW9fdXJpbmcvbmV0LmM6MTI3MDpcXHRzdHJ1Y3QgaW9fcmVjdnpjICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19yZWN2emMpO1xcbmlvX3VyaW5nL25ldC5jLTEyNzEtXFx0dW5zaWduZWQgaWZxX2lkeDtcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyOTUtXFxuaW9fdXJpbmcvbmV0LmM6MTI5NjppbnQgaW9fcmVjdnpjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvbmV0LmMtMTI5Ny17XFxuaW9fdXJpbmcvbmV0LmM6MTI5ODpcXHRzdHJ1Y3QgaW9fcmVjdnpjICp6YyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19yZWN2emMpO1xcbmlvX3VyaW5nL25ldC5jLTEyOTktXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4tLVxcbmlvX3VyaW5nL25ldC5oPTM1PWludCBpb19zZW5kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL25ldC5oLTM2LVxcbmlvX3VyaW5nL25ldC5oOjM3OmludCBpb19yZWN2bXNnX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XFxuaW9fdXJpbmcvbmV0Lmg6Mzg6aW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0Lmg6Mzk6aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmgtNDAtXFxuLS1cXG5pb191cmluZy9vcGRlZi5jPTU0PWNvbnN0IHN0cnVjdCBpb19pc3N1ZV9kZWYgaW9faXNzdWVfZGVmc1tdID0ge1xcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy0xNTgtXFx0XFx0LmFzeW5jX3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyKSxcXG5pb191cmluZy9vcGRlZi5jOjE1OTpcXHRcXHQucHJlcFxcdFxcdFxcdD0gaW9fcmVjdm1zZ19wcmVwLFxcbmlvX3VyaW5nL29wZGVmLmM6MTYwOlxcdFxcdC5pc3N1ZVxcdFxcdFxcdD0gaW9fcmVjdm1zZyxcXG5pb191cmluZy9vcGRlZi5jLTE2MS0jZWxzZVxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy0zMDItXFx0XFx0LmFzeW5jX3NpemVcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyKSxcXG5pb191cmluZy9vcGRlZi5jOjMwMzpcXHRcXHQucHJlcFxcdFxcdFxcdD0gaW9fcmVjdm1zZ19wcmVwLFxcbmlvX3VyaW5nL29wZGVmLmM6MzA0OlxcdFxcdC5pc3N1ZVxcdFxcdFxcdD0gaW9fcmVjdixcXG5pb191cmluZy9vcGRlZi5jLTMwNS0jZWxzZVxcbi0tXFxuaW9fdXJpbmcvb3BkZWYuYy01MjgtI2lmIGRlZmluZWQoQ09ORklHX05FVClcXG5pb191cmluZy9vcGRlZi5jOjUyOTpcXHRcXHQucHJlcFxcdFxcdFxcdD0gaW9fcmVjdnpjX3ByZXAsXFxuaW9fdXJpbmcvb3BkZWYuYzo1MzA6XFx0XFx0Lmlzc3VlXFx0XFx0XFx0PSBpb19yZWN2emMsXFxuaW9fdXJpbmcvb3BkZWYuYy01MzEtI2Vsc2VcXG4tLVxcbmlvX3VyaW5nL3pjcnguaD0xMzA9c3RhdGljIGlubGluZSBpbnQgaW9femNyeF9jdHJsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvemNyeC5oLTEzNi1cXG5pb191cmluZy96Y3J4Lmg6MTM3OmludCBpb19yZWN2emMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvemNyeC5oOjEzODppbnQgaW9fcmVjdnpjX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XFxuaW9fdXJpbmcvemNyeC5oLTEzOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTc6NDMuNzYwMDYyOTM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NzkwOTQ1MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBpb191cmluZyBOZXR3b3JrIFBhdGNoIENoYW5nZXMgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBwYXRjaCBjaGFuZ2VzIG1ldGhvZGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuIExvb2tpbmcgYXQgdGhlIGRpZmZzOlxuXG4xLiAgYGlvX2J1ZmZlcl9nZXRfbGlzdGAgaGFkIGl0cyBgc3RhdGljIGlubGluZWAgbW9kaWZpZXIgcmVtb3ZlZCBhbmQgaXMgbm93IGV4cG9zZWQgaW4gYGlvX3VyaW5nL2tidWYuaGAuIEludGVyZXN0aW5nLiBUaGlzIHByb2JhYmx5IHdpZGVucyBpdHMgc2NvcGUgb2YgdXNlLCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgbmV3IHBvc3NpYmlsaXRpZXMuXG4yLiAgVGhlIGBpb19uZXRfa2J1Zl9yZWN5bGVgIGZ1bmN0aW9uIGxvc3QgdGhlIGBSRVFfRl9CVUZGRVJTX0NPTU1JVGAgY29uZGl0aW9uYWwgY2hlY2ssIHdoZXJlIGBpb19rYnVmX2NvbW1pdGAgd2FzIHByZXZpb3VzbHkgY2FsbGVkLiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgY2hhbmdlIHRvIGJ1ZmZlciBtYW5hZ2VtZW50LiBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gaG93IHRoZXNlIGJ1ZmZlcnMgYXJlIG5vdyBoYW5kbGVkLlxuMy4gIEluIGBpb19yZWN2X2ZpbmlzaGAsIHRoZXJlJ3MgYSBtb2RpZmljYXRpb24gdG8gdXNlIGBzZWwtXHUwMDNldmFsYCBpbnN0ZWFkIG9mIGB0aGlzX3JldGAgd2l0aCBgaW9fYnVuZGxlX25idWZzYC4gVGhpcyBsb29rcyByZWxhdGVkIHRvIGhvdyBidWZmZXIgYnVuZGxlcyBhcmUgYmVpbmcgcHJvY2Vzc2VkIHBvc3QtcmVjZWl2ZS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYHNlbGAgc3RydWN0dXJlIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgcmVjZWl2ZSBvcGVyYXRpb24uXG40LiAgQW5kLCBjcml0aWNhbGx5LCBgaW9fcmVjdmAgbm93IGhhcyBhZGRlZCBoYW5kbGluZyBmb3IgYFJFUV9GX0JVRkZFUl9SSU5HYCwgd2hlcmUgaXQgb2J0YWlucyB0aGUgYnVmZmVyIGxpc3QuIFRoYXQncyBhIG1ham9yIGNoYW5nZTogYHNlbC5idWZfbGlzdCA9IGlvX2J1ZmZlcl9nZXRfbGlzdChyZXEtXHUwMDNlY3R4LCBzci1cdTAwM2VidWZfZ3JvdXApO2AuXG5cbkdpdmVuIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHJlY2VpdmUgb3BlcmF0aW9ucyB3aXRoIGJ1ZmZlciByaW5ncyBhbmQgYnVuZGxlcywgSSB0aGluayB0aGlzIGFic29sdXRlbHkgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoaXMgaXMgY29yZSBrZXJuZWwgY29kZTsgaXQncyByZWFjaGFibGUgZnJvbSBib3RoIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgdXNlcnNwYWNlIHRocm91Z2ggdGhlIGlvX3VyaW5nIHN5c2NhbGxzLCBzbyBpdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBJJ2xsIG5lZWQgYElPX1VSSU5HYCBhbmQgYE5FVGAgZW5hYmxlZC4gVGhhdCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtLlxuXG5Ob3csIGxldCdzIHNvbGlkaWZ5IHRoZSBmb2N1cyBzeW1ib2xzLiBUaGUga2V5IGZ1bmN0aW9ucyB0byBpbnZlc3RpZ2F0ZSBhcmUgYGlvX3JlY3ZgLCBgaW9fcmVjdm1zZ2AsIGBpb19idWZmZXJfZ2V0X2xpc3RgLCBhbmQgYGlvX2tidWZfY29tbWl0YC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVzZSBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgdGhlIG9uZXMgaW4gYGlvX3VyaW5nL2tidWYuY2AgYW5kIGBpb191cmluZy9uZXQuY2AsIGFyZW4ndCBzdGF0aWMuIFllcCwgYmFzZWQgb24gdGhlIGNvbnRleHQsIGBpb19yZWN2YCwgYGlvX3JlY3Ztc2dgLCBgaW9fYnVmZmVyX2dldF9saXN0YCwgYW5kIGBpb19rYnVmX2NvbW1pdGAgYXJlIGFsbCBub24tc3RhdGljLlxuXG5FeGNlbGxlbnQuIFRoaXMgbG9va3MgbGlrZSBhIHByb21pc2luZyBhdmVudWUgZm9yIGZ1enppbmcsIEknbGwgZ28gYWhlYWQgYW5kIHNldCB1cCBhIGZ1enplciBjb25maWd1cmF0aW9uLiBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaW9fa2J1Zl9jb21taXRgIGlzbid0IHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTg6MTEuNTUxMDExMjI3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDI3ODMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19rYnVmX2NvbW1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcva2J1Zi5jPTM2PXN0YXRpYyBib29sIGlvX2tidWZfaW5jX2NvbW1pdChzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbGVuKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTYyLVxcbmlvX3VyaW5nL2tidWYuYzo2Mzpib29sIGlvX2tidWZfY29tbWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbmlvX3VyaW5nL2tidWYuYy02NC1cXHRcXHQgICAgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCwgaW50IGxlbiwgaW50IG5yKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jPTE5Mz1zdGF0aWMgc3RydWN0IGlvX2JyX3NlbCBpb19yaW5nX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNpemVfdCAqbGVuLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTIyMy1cXHRpZiAoaW9fc2hvdWxkX2NvbW1pdChyZXEsIGlzc3VlX2ZsYWdzKSkge1xcbmlvX3VyaW5nL2tidWYuYzoyMjQ6XFx0XFx0aWYgKCFpb19rYnVmX2NvbW1pdChyZXEsIHNlbC5idWZfbGlzdCwgKmxlbiwgMSkpXFxuaW9fdXJpbmcva2J1Zi5jLTIyNS1cXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRl9NT1JFO1xcbi0tXFxuaW9fdXJpbmcva2J1Zi5jPTM0NT1pbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTM2Ni1cXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRkZFUlNfQ09NTUlUIHwgUkVRX0ZfQkxfTk9fUkVDWUNMRTtcXG5pb191cmluZy9rYnVmLmM6MzY3OlxcdFxcdFxcdGlmICghaW9fa2J1Zl9jb21taXQocmVxLCBzZWwtXFx1MDAzZWJ1Zl9saXN0LCBhcmctXFx1MDAzZW91dF9sZW4sIHJldCkpXFxuaW9fdXJpbmcva2J1Zi5jLTM2OC1cXHRcXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRl9NT1JFO1xcbi0tXFxuaW9fdXJpbmcva2J1Zi5jPTQwNz1zdGF0aWMgaW5saW5lIGJvb2wgX19pb19wdXRfa2J1Zl9yaW5nKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTQxMi1cXHRpZiAoYmwpXFxuaW9fdXJpbmcva2J1Zi5jOjQxMzpcXHRcXHRyZXQgPSBpb19rYnVmX2NvbW1pdChyZXEsIGJsLCBsZW4sIG5yKTtcXG5pb191cmluZy9rYnVmLmMtNDE0LVxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9CVUZfTU9SRSkpXFxuLS1cXG5pb191cmluZy9rYnVmLmg9OTE9dW5zaWduZWQgaW50IF9faW9fcHV0X2tidWZzKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbmlvX3VyaW5nL2tidWYuaC05Mi1cXHRcXHRcXHQgICAgaW50IGxlbiwgaW50IG5idWZzKTtcXG5pb191cmluZy9rYnVmLmg6OTM6Ym9vbCBpb19rYnVmX2NvbW1pdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG5pb191cmluZy9rYnVmLmgtOTQtXFx0XFx0ICAgIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsIGludCBsZW4sIGludCBucik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU4OjExLjYxMTI5MzA4NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjU0NDgzMjI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBc3Nlc3NtZW50IGFuZCBBY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aGUgY3VycmVudCBzdGF0ZSBzZWVtcyBzdGFibGU7IG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgYXJlIHBvcHBpbmcgdXAgZnJvbSB3aGF0IEknbSBzZWVpbmcuIFRoaXMgbG9va3MgZ29vZC4gQmFzZWQgb24gbXkgYW5hbHlzaXMgYW5kIHRoZSBvdmVyYWxsIGV2YWx1YXRpb24sIGl0J3MgdGltZSB0byB0cmlnZ2VyIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuIEknbSBjb25maWRlbnQgaW4gdGhlIGRhdGEsIHRoZSBwcm9jZXNzLCBhbmQgdGhlIGV4cGVjdGVkIG91dGNvbWUuIEl0J3MgdGltZSB0byBzb2xpZGlmeSB0aGUgcmVzdWx0cyBvZiB0aGlzIHN0YWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI2NSwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzo1ODo0OC4xNTYxMjc0ODdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzgyNTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX3JlY3Ztc2dcIixcbiAgICBcImlvX2J1ZmZlcl9nZXRfbGlzdFwiLFxuICAgIFwiaW9fa2J1Zl9jb21taXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvX3VyaW5nIG5ldHdvcmtpbmcgbG9naWMsIHNwZWNpZmljYWxseSBidWZmZXIgbGlzdCBzZWxlY3Rpb24sIGJ1ZmZlciBjb21taXRzLCBhbmQgYnVmZmVyIGJ1bmRsZSBoYW5kbGluZyBpbiByZWNlaXZlIG9wZXJhdGlvbnMgKElPUklOR19PUF9SRUNWIC8gSU9SSU5HX09QX1JFQ1ZNU0cpLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JlY3ZcIixcbiAgICBcImlvX3JlY3Ztc2dcIixcbiAgICBcImlvX2J1ZmZlcl9nZXRfbGlzdFwiLFxuICAgIFwiaW9fa2J1Zl9jb21taXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvX3VyaW5nIG5ldHdvcmtpbmcgbG9naWMsIHNwZWNpZmljYWxseSBidWZmZXIgbGlzdCBzZWxlY3Rpb24sIGJ1ZmZlciBjb21taXRzLCBhbmQgYnVmZmVyIGJ1bmRsZSBoYW5kbGluZyBpbiByZWNlaXZlIG9wZXJhdGlvbnMgKElPUklOR19PUF9SRUNWIC8gSU9SSU5HX09QX1JFQ1ZNU0cpLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU4OjQ4LjI1Mzk1OTk5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyNjc2NTUzOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTg6NDguMjU0NTAyNzA2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTgyNjc2MDA3MTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYnVmZmVyIG1hbmFnZW1lbnQgYW5kIGFjY291bnRpbmcgbG9naWMgZm9yIGJ1bmRsZWQgYW5kIHJpbmcgYnVmZmVyIG5ldHdvcmsgcmVjZWl2ZXMgaW4gaW9fdXJpbmcgKGlvX3JlY3YgYW5kIGlvX3JlY3ZfZmluaXNoKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIGBzZWwuYnVmX2xpc3RgIGlzIHByb3Blcmx5IHJldHJpZXZlZCB3aGVuIGBSRVFfRl9CVUZGRVJfUklOR2AgaXMgYWN0aXZlLCBjb3JyZWN0cyB0aGUgYnVmZmVyIGNvdW50IHBhc3NlZCB0byBgaW9fYnVuZGxlX25idWZzKClgIHVzaW5nIGBzZWwtXFx1MDAzZXZhbGAsIGFuZCByZW1vdmVzIGFuIGluYXBwcm9wcmlhdGUgYnVmZmVyIGNvbW1pdCBvbiByZWN5Y2xlLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGF0aHMuIFBvdGVudGlhbCBlcnJvcnMgd291bGQgaW52b2x2ZSBidWZmZXIgcmluZyBpbmRleCB0cmFja2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTRkYjM5MTgwYjliOTMwZWMwMDM5NzFkZWMzNmI1Zjc1NDM3ZjMxY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTM6NTM6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9rYnVmLmMgYi9pb191cmluZy9rYnVmLmNcbmluZGV4IDdjMzA5MTczZGQxOTQuLmM0YmFlOGYwMDE3M2UgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9rYnVmLmNcbisrKyBiL2lvX3VyaW5nL2tidWYuY1xuQEAgLTc2LDggKzc2LDggQEAgYm9vbCBpb19rYnVmX2NvbW1pdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqaW9fYnVmZmVyX2dldF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLVx0XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IGJnaWQpXG4rc3RydWN0IGlvX2J1ZmZlcl9saXN0ICppb19idWZmZXJfZ2V0X2xpc3Qoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGJnaWQpXG4ge1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZjdHgtXHUwMDNldXJpbmdfbG9jayk7XG4gXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5oIGIvaW9fdXJpbmcva2J1Zi5oXG5pbmRleCA0MDE3NzNlMWVmODA1Li43MDc5ZjJkZWM5ZTBlIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcva2J1Zi5oXG4rKysgYi9pb191cmluZy9rYnVmLmhcbkBAIC03MSw2ICs3MSw4IEBAIHN0cnVjdCBpb19icl9zZWwgaW9fYnVmZmVyX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc2l6ZV90ICpsZW4sXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGJ1Zl9ncm91cCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbiBpbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuIFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG4rc3RydWN0IGlvX2J1ZmZlcl9saXN0ICppb19idWZmZXJfZ2V0X2xpc3Qoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGJnaWQpO1xuIGludCBpb19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuIFx0XHQgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsKTtcbiB2b2lkIGlvX2Rlc3Ryb3lfYnVmZmVycyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCk7XG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvbmV0LmMgYi9pb191cmluZy9uZXQuY1xuaW5kZXggZmJlNzE5ZDg2YzQ2My4uYmZmNDUxNGMwMTAwYyAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL25ldC5jXG4rKysgYi9pb191cmluZy9uZXQuY1xuQEAgLTQ4Myw4ICs0ODMsNiBAQCBzdGF0aWMgaW50IGlvX25ldF9rYnVmX3JlY3lsZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLCBpbnQgbGVuKVxuIHtcbiBcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9OT19SRUNZQ0xFO1xuLVx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQlVGRkVSU19DT01NSVQpXG4tXHRcdGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgaW9fYnVuZGxlX25idWZzKGttc2csIGxlbikpO1xuIFx0cmV0dXJuIElPVV9SRVRSWTtcbiB9XG4gXG5AQCAtODc3LDcgKzg3NSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpb19yZWN2X2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdGlmIChzci1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkge1xuIFx0XHRzaXplX3QgdGhpc19yZXQgPSBzZWwtXHUwMDNldmFsIC0gc3ItXHUwMDNlZG9uZV9pbztcbiBcbi1cdFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIHRoaXNfcmV0LCBzZWwtXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCB0aGlzX3JldCkpO1xuK1x0XHRjZmxhZ3MgfD0gaW9fcHV0X2tidWZzKHJlcSwgdGhpc19yZXQsIHNlbC1cdTAwM2VidWZfbGlzdCxcbitcdFx0XHRcdCAgICAgICBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVx1MDAzZXZhbCkpO1xuIFx0XHRpZiAoc3ItXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxuIFx0XHRcdGNmbGFncyA9IHJlcS1cdTAwM2VjcWUuZmxhZ3MgfCAoY2ZsYWdzIFx1MDAyNiBDUUVfRl9NQVNLKTtcbiBcdFx0aWYgKHNyLVx1MDAzZW1zaG90X2xlbiBcdTAwMjZcdTAwMjYgc2VsLVx1MDAzZXZhbCBcdTAwM2U9IHNyLVx1MDAzZW1zaG90X2xlbilcbkBAIC0xMjIxLDYgKzEyMjAsOCBAQCBpbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuIFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHRcdH1cbiBcdFx0c3ItXHUwMDNlYnVmID0gTlVMTDtcbitcdH0gZWxzZSBpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9CVUZGRVJfUklORykge1xuK1x0XHRzZWwuYnVmX2xpc3QgPSBpb19idWZmZXJfZ2V0X2xpc3QocmVxLVx1MDAzZWN0eCwgc3ItXHUwMDNlYnVmX2dyb3VwKTtcbiBcdH1cbiBcbiBcdGttc2ctXHUwMDNlbXNnLm1zZ19mbGFncyA9IDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzo1ODo0OC4yNTQ1MDM1NTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTEwNDQ3MjA1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogRGl2aW5nIGludG8gaW9fdXJpbmcvbmV0LmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhpcyBwYXRjaCBpcyBoaXR0aW5nIGEgZmV3IGtleSBmaWxlczogYGlvX3VyaW5nL2tidWYuY2AsIGBpb191cmluZy9rYnVmLmhgLCBhbmQgYGlvX3VyaW5nL25ldC5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBpb191cmluZy9uZXQuY2AsIHNvIEknbGwgc3RhcnQgdGhlcmUuIEknbGwgZmlyZSB1cCBgcmVhZC1maWxlYCB0byBnZXQgYSBnb29kIGNvbnRleHR1YWwgdW5kZXJzdGFuZGluZyBvZiAqZXhhY3RseSogd2hhdCdzIGJlaW5nIHR3ZWFrZWQgaW4gdGhhdCBmaWxlLiBJIG5lZWQgdG8gc2VlIHRoZSBiZWZvcmUgYW5kIGFmdGVyLCB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBsb2dpYywgYW5kIGdldCBhIHNvbGlkIGZlZWwgZm9yIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiB0aGUgbmV0d29ya2luZyBjb2RlLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6NTk6MzkuMjk5MjI3NzAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9uZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzA6XFx0XFx0Lyogc2hvcnQgdHJhbnNmZXIsIGNvdW50IHNlZ21lbnRzICovXFxuIDQ3MTpcXHRcXHRuYnVmcyA9IDA7XFxuIDQ3MjpcXHRcXHRkbyB7XFxuIDQ3MzpcXHRcXHRcXHRpbnQgdGhpc19sZW4gPSBtaW5fdChpbnQsIGlvdltuYnVmc10uaW92X2xlbiwgcmV0KTtcXG4gNDc0OlxcdFxcbiA0NzU6XFx0XFx0XFx0bmJ1ZnMrKztcXG4gNDc2OlxcdFxcdFxcdHJldCAtPSB0aGlzX2xlbjtcXG4gNDc3OlxcdFxcdH0gd2hpbGUgKHJldCk7XFxuIDQ3ODpcXHRcXG4gNDc5OlxcdFxcdHJldHVybiBuYnVmcztcXG4gNDgwOlxcdH1cXG4gNDgxOlxcdFxcbiA0ODI6XFx0c3RhdGljIGludCBpb19uZXRfa2J1Zl9yZWN5bGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXFxuIDQ4MzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLCBpbnQgbGVuKVxcbiA0ODQ6XFx0e1xcbiA0ODU6XFx0XFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9OT19SRUNZQ0xFO1xcbiA0ODY6XFx0XFx0cmV0dXJuIElPVV9SRVRSWTtcXG4gNDg3OlxcdH1cXG4gNDg4OlxcdFxcbiA0ODk6XFx0c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbiA0OTA6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbiA0OTE6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwpXFxuIDQ5MjpcXHR7XFxuIDQ5MzpcXHRcXHRzdHJ1Y3QgaW9fc3JfbXNnICpzciA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb19zcl9tc2cpO1xcbiA0OTQ6XFx0XFx0Ym9vbCBidW5kbGVfZmluaXNoZWQgPSBzZWwtXFx1MDAzZXZhbCBcXHUwMDNjPSAwO1xcbiA0OTU6XFx0XFx0dW5zaWduZWQgaW50IGNmbGFncztcXG4gNDk2OlxcdFxcbiA0OTc6XFx0XFx0aWYgKCEoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkpIHtcXG4gNDk4OlxcdFxcdFxcdGNmbGFncyA9IGlvX3B1dF9rYnVmKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QpO1xcbiA0OTk6XFx0XFx0XFx0Z290byBmaW5pc2g7XFxuIDUwMDpcXHRcXHR9XFxuIDUwMTpcXHRcXG4gNTAyOlxcdFxcdGNmbGFncyA9IGlvX3B1dF9rYnVmcyhyZXEsIHNlbC1cXHUwMDNldmFsLCBzZWwtXFx1MDAzZWJ1Zl9saXN0LCBpb19idW5kbGVfbmJ1ZnMoa21zZywgc2VsLVxcdTAwM2V2YWwpKTtcXG4gNTAzOlxcdFxcbiA1MDQ6XFx0XFx0LypcXG4gNTA1OlxcdFxcdCAqIERvbid0IHN0YXJ0IG5ldyBidW5kbGVzIGlmIHRoZSBidWZmZXIgbGlzdCBpcyBlbXB0eSwgb3IgaWYgdGhlXFxuIDUwNjpcXHRcXHQgKiBjdXJyZW50IG9wZXJhdGlvbiBuZWVkZWQgdG8gZ28gdGhyb3VnaCBwb2xsaW5nIHRvIGNvbXBsZXRlLlxcbiA1MDc6XFx0XFx0ICovXFxuIDUwODpcXHRcXHRpZiAoYnVuZGxlX2ZpbmlzaGVkIHx8IHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoUkVRX0ZfQkxfRU1QVFkgfCBSRVFfRl9QT0xMRUQpKVxcbiA1MDk6XFx0XFx0XFx0Z290byBmaW5pc2g7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjU5OjM5LjI5OTM0NzQ0MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTE0Mzc3OTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGNoYW5nZXMgaW4gYGlvX3VyaW5nL25ldC5jYDpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYGlvX3VyaW5nL25ldC5jYCoqXG5cbk9rYXksIHRpbWUgdG8gcmVhbGx5IHNjcnV0aW5pemUgdGhlIHJlbWFpbmluZyBtb2RpZmljYXRpb25zIGluIGBpb191cmluZy9uZXQuY2AuIEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9mIGhvdyB0aGVzZSB1cGRhdGVzIGludGVncmF0ZSBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgYXN5bmNocm9ub3VzIEkvTyBjYXBhYmlsaXRpZXMuIExldCdzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBsaW5lLWJ5LWxpbmUgcmV2aWV3LCBsb29raW5nIGZvciBhbnkgc3VidGxlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGludHJvZHVjZWQuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZXhpc3RpbmcgbmV0d29yayBzdGFjaywgcGFydGljdWxhcmx5IHRoZSBoYW5kbGluZyBvZiBjb21wbGV0aW9uIHF1ZXVlcyBhbmQgaG93IHRoZSBrZXJuZWwgc2NoZWR1bGVzIHRoZXNlIG5ldHdvcmsgb3BlcmF0aW9ucy4gQXJlIHRoZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIG9wdGltYWwgZm9yIHRoZSBhbnRpY2lwYXRlZCBuZXR3b3JrIGxvYWRzPyBBcmUgdGhlcmUgb3Bwb3J0dW5pdGllcyBmb3IgZnVydGhlciBvcHRpbWl6YXRpb24sIHBlcmhhcHMgYnkgcmVkdWNpbmcgY29udGV4dCBzd2l0Y2hlcyBvciBvcHRpbWl6aW5nIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnM/IEkgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZXJyb3IgaGFuZGxpbmcgaXMgcm9idXN0LCBlc3BlY2lhbGx5IGluIGVkZ2UgY2FzZXMgYW5kIHdoZW4gdGhlIHN5c3RlbSBpcyB1bmRlciBoZWF2eSBuZXR3b3JrIHN0cmVzcy4gRmluYWxseSwgSSdsbCBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgY2hhbmdlcyB3aXRoIHRoZSByZWxhdGVkIGRvY3VtZW50YXRpb24gYW5kIGFueSByZWxldmFudCBkaXNjdXNzaW9ucyBvbiB0aGUgbWFpbGluZyBsaXN0cyB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBtaXNzZWQgY29uc2lkZXJhdGlvbnMgb3IgZG9jdW1lbnRlZCBjYXZlYXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODM1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowMDoxNC40NDMxMjkzNjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL25ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MDpcXHRcXHRcXHRjZmxhZ3MgfD0gSU9SSU5HX0NRRV9GX1NPQ0tfTk9ORU1QVFk7XFxuIDg2MTpcXHRcXG4gODYyOlxcdFxcdGlmIChzZWwtXFx1MDAzZXZhbCBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZfTVNIT1RfTElNKSB7XFxuIDg2MzpcXHRcXHRcXHQvKlxcbiA4NjQ6XFx0XFx0XFx0ICogSWYgc3ItXFx1MDAzZWxlbiBoaXRzIHplcm8sIHRoZSBsaW1pdCBoYXMgYmVlbiByZWFjaGVkLiBNYXJrXFxuIDg2NTpcXHRcXHRcXHQgKiBtc2hvdCBhcyBmaW5pc2hlZCwgYW5kIGZsYWcgTVNIT1RfRE9ORSBhcyB3ZWxsIHRvIHByZXZlbnRcXG4gODY2OlxcdFxcdFxcdCAqIGEgcG90ZW50aWFsIGJ1bmRsZSBmcm9tIGJlaW5nIHJldHJpZWQuXFxuIDg2NzpcXHRcXHRcXHQgKi9cXG4gODY4OlxcdFxcdFxcdHNyLVxcdTAwM2Vtc2hvdF90b3RhbF9sZW4gLT0gbWluX3QoaW50LCBzZWwtXFx1MDAzZXZhbCwgc3ItXFx1MDAzZW1zaG90X3RvdGFsX2xlbik7XFxuIDg2OTpcXHRcXHRcXHRpZiAoIXNyLVxcdTAwM2Vtc2hvdF90b3RhbF9sZW4pIHtcXG4gODcwOlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VmbGFncyB8PSBJT1JJTkdfUkVDVl9NU0hPVF9ET05FO1xcbiA4NzE6XFx0XFx0XFx0XFx0bXNob3RfZmluaXNoZWQgPSB0cnVlO1xcbiA4NzI6XFx0XFx0XFx0fVxcbiA4NzM6XFx0XFx0fVxcbiA4NzQ6XFx0XFxuIDg3NTpcXHRcXHRpZiAoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZTRU5EX0JVTkRMRSkge1xcbiA4NzY6XFx0XFx0XFx0c2l6ZV90IHRoaXNfcmV0ID0gc2VsLVxcdTAwM2V2YWwgLSBzci1cXHUwMDNlZG9uZV9pbztcXG4gODc3OlxcdFxcbiA4Nzg6XFx0XFx0XFx0Y2ZsYWdzIHw9IGlvX3B1dF9rYnVmcyhyZXEsIHRoaXNfcmV0LCBzZWwtXFx1MDAzZWJ1Zl9saXN0LFxcbiA4Nzk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXFx1MDAzZXZhbCkpO1xcbiA4ODA6XFx0XFx0XFx0aWYgKHNyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SRUNWX1JFVFJZKVxcbiA4ODE6XFx0XFx0XFx0XFx0Y2ZsYWdzID0gcmVxLVxcdTAwM2VjcWUuZmxhZ3MgfCAoY2ZsYWdzIFxcdTAwMjYgQ1FFX0ZfTUFTSyk7XFxuIDg4MjpcXHRcXHRcXHRpZiAoc3ItXFx1MDAzZW1zaG90X2xlbiBcXHUwMDI2XFx1MDAyNiBzZWwtXFx1MDAzZXZhbCBcXHUwMDNlPSBzci1cXHUwMDNlbXNob3RfbGVuKVxcbiA4ODM6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWZsYWdzIHw9IElPUklOR19SRUNWX01TSE9UX0NBUDtcXG4gODg0OlxcdFxcdFxcdC8qIGJ1bmRsZSB3aXRoIG5vIG1vcmUgaW1tZWRpYXRlIGJ1ZmZlcnMsIHdlJ3JlIGRvbmUgKi9cXG4gODg1OlxcdFxcdFxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfQkxfRU1QVFkpXFxuIDg4NjpcXHRcXHRcXHRcXHRnb3RvIGZpbmlzaDtcXG4gODg3OlxcdFxcdFxcdC8qXFxuIDg4ODpcXHRcXHRcXHQgKiBJZiBtb3JlIGlzIGF2YWlsYWJsZSBBTkQgaXQgd2FzIGEgZnVsbCB0cmFuc2ZlciwgcmV0cnkgYW5kXFxuIDg4OTpcXHRcXHRcXHQgKiBhcHBlbmQgdG8gdGhpcyBvbmVcXG4gODkwOlxcdFxcdFxcdCAqL1xcbiA4OTE6XFx0XFx0XFx0aWYgKCEoc3ItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9SSU5HX1JFQ1ZfTk9fUkVUUlkpIFxcdTAwMjZcXHUwMDI2XFxuIDg5MjpcXHRcXHRcXHQgICAga21zZy1cXHUwMDNlbXNnLm1zZ19pbnEgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IHRoaXNfcmV0IFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbiA4OTM6XFx0XFx0XFx0ICAgICFpb3ZfaXRlcl9jb3VudChcXHUwMDI2a21zZy1cXHUwMDNlbXNnLm1zZ19pdGVyKSkge1xcbiA4OTQ6XFx0XFx0XFx0XFx0cmVxLVxcdTAwM2VjcWUuZmxhZ3MgPSBjZmxhZ3MgXFx1MDAyNiB+Q1FFX0ZfTUFTSztcXG4gODk1OlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VsZW4gPSBrbXNnLVxcdTAwM2Vtc2cubXNnX2lucTtcXG4gODk2OlxcdFxcdFxcdFxcdHNyLVxcdTAwM2Vkb25lX2lvICs9IHRoaXNfcmV0O1xcbiA4OTc6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWZsYWdzIHw9IElPUklOR19SRUNWX1JFVFJZO1xcbiA4OTg6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4OTk6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowMDoxNC40NDMyODM2MzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyMzk2MTY2NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgaW9fdXJpbmcvbmV0LmNgIGZvciBGdXJ0aGVyIEluc2lnaHQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoaXMgZnJvbSBhIGhpZ2ggbGV2ZWwsIGFuZCB3aGlsZSBJIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgYXJjaGl0ZWN0dXJlLCBJIGZlZWwgbGlrZSBJJ20gbWlzc2luZyBzb21ldGhpbmcsIGEgc3VidGxlIGRldGFpbCBwZXJoYXBzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgaW9fdXJpbmcvbmV0LmNgLiBTcGVjaWZpY2FsbHksIGxpbmVzIDEyMDAgdGhyb3VnaCAxMjUwIHNlZW0gbGlrZSBhIGxpa2VseSBzcG90IHRvIGZpbmQgc29tZSBjcnVjaWFsIGNvZGUuIEknbGwgZm9jdXMgb24gdGhhdCByYW5nZSBpbml0aWFsbHkuIExldCdzIHNlZSBpZiB3ZSBjYW4gdW5jb3ZlciB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlIHNwZWNpZmljIGNvZGUsIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbXBsZW1lbnRhdGlvbiBpcyB0aWVkIGluIHdpdGggdGhlIGJyb2FkZXIgYGlvX3VyaW5nYCBmcmFtZXdvcmsuIEhvcGVmdWxseSwgdGhpcyBuYXJyb3dlciBmb2N1cyB3aWxsIGNsYXJpZnkgYW55IGxpbmdlcmluZyBxdWVzdGlvbnMuIEkgc3VzcGVjdCB0aGUga2V5IGlzIHRoZXJlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjAwOjQzLjY4MjkwMjI4MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvbmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIwMDpcXHRcXG4xMjAxOlxcdFxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfSU1QT1JUX0JVRkZFUikge1xcbjEyMDI6XFx0XFx0XFx0cmV0ID0gaW9faW1wb3J0X3JlZ19idWYocmVxLCBcXHUwMDI2a21zZy1cXHUwMDNlbXNnLm1zZ19pdGVyLFxcbjEyMDM6XFx0XFx0XFx0XFx0XFx0XFx0KHU2NCkodWludHB0cl90KXNyLVxcdTAwM2VidWYsIHNyLVxcdTAwM2VsZW4sXFxuMTIwNDpcXHRcXHRcXHRcXHRcXHRcXHRJVEVSX0RFU1QsIGlzc3VlX2ZsYWdzKTtcXG4xMjA1OlxcdFxcdFxcdGlmICh1bmxpa2VseShyZXQpKSB7XFxuMTIwNjpcXHRcXHRcXHRcXHRrbXNnLVxcdTAwM2Vtc2cubXNnX2lucSA9IC0xO1xcbjEyMDc6XFx0XFx0XFx0XFx0c2VsLmJ1Zl9saXN0ID0gTlVMTDtcXG4xMjA4OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTIwOTpcXHRcXHRcXHR9XFxuMTIxMDpcXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5SRVFfRl9JTVBPUlRfQlVGRkVSO1xcbjEyMTE6XFx0XFx0fVxcbjEyMTI6XFx0XFxuMTIxMzpcXHRyZXRyeV9tdWx0aXNob3Q6XFxuMTIxNDpcXHRcXHRzZWwuYnVmX2xpc3QgPSBOVUxMO1xcbjEyMTU6XFx0XFx0aWYgKGlvX2RvX2J1ZmZlcl9zZWxlY3QocmVxKSkge1xcbjEyMTY6XFx0XFx0XFx0c2VsLnZhbCA9IHNyLVxcdTAwM2VsZW47XFxuMTIxNzpcXHRcXHRcXHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBpc3N1ZV9mbGFncyk7XFxuMTIxODpcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpIHtcXG4xMjE5OlxcdFxcdFxcdFxcdGttc2ctXFx1MDAzZW1zZy5tc2dfaW5xID0gLTE7XFxuMTIyMDpcXHRcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbjEyMjE6XFx0XFx0XFx0fVxcbjEyMjI6XFx0XFx0XFx0c3ItXFx1MDAzZWJ1ZiA9IE5VTEw7XFxuMTIyMzpcXHRcXHR9IGVsc2UgaWYgKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9CVUZGRVJfUklORykge1xcbjEyMjQ6XFx0XFx0XFx0c2VsLmJ1Zl9saXN0ID0gaW9fYnVmZmVyX2dldF9saXN0KHJlcS1cXHUwMDNlY3R4LCBzci1cXHUwMDNlYnVmX2dyb3VwKTtcXG4xMjI1OlxcdFxcdH1cXG4xMjI2OlxcdFxcbjEyMjc6XFx0XFx0a21zZy1cXHUwMDNlbXNnLm1zZ19mbGFncyA9IDA7XFxuMTIyODpcXHRcXHRrbXNnLVxcdTAwM2Vtc2cubXNnX2lucSA9IC0xO1xcbjEyMjk6XFx0XFxuMTIzMDpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNU0dfV0FJVEFMTClcXG4xMjMxOlxcdFxcdFxcdG1pbl9yZXQgPSBpb3ZfaXRlcl9jb3VudChcXHUwMDI2a21zZy1cXHUwMDNlbXNnLm1zZ19pdGVyKTtcXG4xMjMyOlxcdFxcbjEyMzM6XFx0XFx0cmV0ID0gc29ja19yZWN2bXNnKHNvY2ssIFxcdTAwMjZrbXNnLVxcdTAwM2Vtc2csIGZsYWdzKTtcXG4xMjM0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyBtaW5fcmV0KSB7XFxuMTIzNTpcXHRcXHRcXHRpZiAocmV0ID09IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgZm9yY2Vfbm9uYmxvY2spIHtcXG4xMjM2OlxcdFxcdFxcdFxcdGlvX2tidWZfcmVjeWNsZShyZXEsIHNlbC5idWZfbGlzdCwgaXNzdWVfZmxhZ3MpO1xcbjEyMzc6XFx0XFx0XFx0XFx0cmV0dXJuIElPVV9SRVRSWTtcXG4xMjM4OlxcdFxcdFxcdH1cXG4xMjM5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IGlvX25ldF9yZXRyeShzb2NrLCBmbGFncykpIHtcXG4xMjQwOlxcdFxcdFxcdFxcdHNyLVxcdTAwM2VsZW4gLT0gcmV0O1xcbjEyNDE6XFx0XFx0XFx0XFx0c3ItXFx1MDAzZWJ1ZiArPSByZXQ7XFxuMTI0MjpcXHRcXHRcXHRcXHRzci1cXHUwMDNlZG9uZV9pbyArPSByZXQ7XFxuMTI0MzpcXHRcXHRcXHRcXHRyZXR1cm4gaW9fbmV0X2tidWZfcmVjeWxlKHJlcSwgc2VsLmJ1Zl9saXN0LCBrbXNnLCByZXQpO1xcbjEyNDQ6XFx0XFx0XFx0fVxcbjEyNDU6XFx0XFx0XFx0aWYgKHJldCA9PSAtRVJFU1RBUlRTWVMpXFxuMTI0NjpcXHRcXHRcXHRcXHRyZXQgPSAtRUlOVFI7XFxuMTI0NzpcXHRcXHRcXHRyZXFfc2V0X2ZhaWwocmVxKTtcXG4xMjQ4OlxcdFxcdH0gZWxzZSBpZiAoKGZsYWdzIFxcdTAwMjYgTVNHX1dBSVRBTEwpIFxcdTAwMjZcXHUwMDI2IChrbXNnLVxcdTAwM2Vtc2cubXNnX2ZsYWdzIFxcdTAwMjYgKE1TR19UUlVOQyB8IE1TR19DVFJVTkMpKSkge1xcbjEyNDk6XFx0b3V0X2ZyZWU6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjAwOjQzLjY4MzA1ODM1MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODYxOTI1MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIElzc3VlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBzZWUgd2hhdCB0aGUgY29tbWl0IG1lc3NhZ2Ugc2F5cy4gS25vd2luZyB0aGUgY29udGV4dCBvZiB0aGUgZml4IG9yIHRoZSBwcm9ibGVtIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHdpbGwgaW1tZWRpYXRlbHkgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gXG5cbk5vdywgbGV0J3MgZGVsdmUgaW50byB0aGUgYWN0dWFsIGNvZGUuIEkgbmVlZCB0byBleGFtaW5lIGBpb19idW5kbGVfbmJ1ZnNgIGFuZCBgaW9fcHV0X2tidWZzYC4gSSdsbCBiZSBsb29raW5nIGF0IHRoZW0gd2l0aGluIGBpb191cmluZy9rYnVmLmNgIGFuZCBgaW9fdXJpbmcvbmV0LmNgLiBJJ20gZXhwZWN0aW5nIHRvIHVuY292ZXIgc29tZXRoaW5nIHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSBuZXR3b3JrIGJ1ZmZlcnMgd2l0aGluIHRoZSBpb191cmluZyBjb250ZXh0LCBtYXliZSBzb21lIGluZWZmaWNpZW5jeSBvciwgcG90ZW50aWFsbHksIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8ga2J1ZiBtYW5hZ2VtZW50IGFuZCBuZXR3b3JrIG9wZXJhdGlvbnMuIEtub3dpbmcgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGluIHRoZSBjb2RlYmFzZSBpcyBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5ODgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjAwOjUzLjU0NDk4NjQxNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvbmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDUwOlxcdCAqL1xcbiA0NTE6XFx0c3RhdGljIGludCBpb19idW5kbGVfbmJ1ZnMoc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZywgaW50IHJldClcXG4gNDUyOlxcdHtcXG4gNDUzOlxcdFxcdHN0cnVjdCBpb3ZlYyAqaW92O1xcbiA0NTQ6XFx0XFx0aW50IG5idWZzO1xcbiA0NTU6XFx0XFxuIDQ1NjpcXHRcXHQvKiBubyBkYXRhIGlzIGFsd2F5cyB6ZXJvIHNlZ21lbnRzLCBhbmQgYSB1YnVmIGlzIGFsd2F5cyAxIHNlZ21lbnQgKi9cXG4gNDU3OlxcdFxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4gNDU4OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0NTk6XFx0XFx0aWYgKGl0ZXJfaXNfdWJ1ZihcXHUwMDI2a21zZy1cXHUwMDNlbXNnLm1zZ19pdGVyKSlcXG4gNDYwOlxcdFxcdFxcdHJldHVybiAxO1xcbiA0NjE6XFx0XFxuIDQ2MjpcXHRcXHRpb3YgPSBrbXNnLVxcdTAwM2V2ZWMuaW92ZWM7XFxuIDQ2MzpcXHRcXHRpZiAoIWlvdilcXG4gNDY0OlxcdFxcdFxcdGlvdiA9IFxcdTAwMjZrbXNnLVxcdTAwM2VmYXN0X2lvdjtcXG4gNDY1OlxcdFxcbiA0NjY6XFx0XFx0LyogaWYgYWxsIGRhdGEgd2FzIHRyYW5zZmVycmVkLCBpdCdzIGJhc2ljIHBvaW50ZXIgbWF0aCAqL1xcbiA0Njc6XFx0XFx0aWYgKCFpb3ZfaXRlcl9jb3VudChcXHUwMDI2a21zZy1cXHUwMDNlbXNnLm1zZ19pdGVyKSlcXG4gNDY4OlxcdFxcdFxcdHJldHVybiBpdGVyX2lvdihcXHUwMDI2a21zZy1cXHUwMDNlbXNnLm1zZ19pdGVyKSAtIGlvdjtcXG4gNDY5OlxcdFxcbiA0NzA6XFx0XFx0Lyogc2hvcnQgdHJhbnNmZXIsIGNvdW50IHNlZ21lbnRzICovXFxuIDQ3MTpcXHRcXHRuYnVmcyA9IDA7XFxuIDQ3MjpcXHRcXHRkbyB7XFxuIDQ3MzpcXHRcXHRcXHRpbnQgdGhpc19sZW4gPSBtaW5fdChpbnQsIGlvdltuYnVmc10uaW92X2xlbiwgcmV0KTtcXG4gNDc0OlxcdFxcbiA0NzU6XFx0XFx0XFx0bmJ1ZnMrKztcXG4gNDc2OlxcdFxcdFxcdHJldCAtPSB0aGlzX2xlbjtcXG4gNDc3OlxcdFxcdH0gd2hpbGUgKHJldCk7XFxuIDQ3ODpcXHRcXG4gNDc5OlxcdFxcdHJldHVybiBuYnVmcztcXG4gNDgwOlxcdH1cXG4gNDgxOlxcdFxcbiA0ODI6XFx0c3RhdGljIGludCBpb19uZXRfa2J1Zl9yZWN5bGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXFxuIDQ4MzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLCBpbnQgbGVuKVxcbiA0ODQ6XFx0e1xcbiA0ODU6XFx0XFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9CTF9OT19SRUNZQ0xFO1xcbiA0ODY6XFx0XFx0cmV0dXJuIElPVV9SRVRSWTtcXG4gNDg3OlxcdH1cXG4gNDg4OlxcdFxcbiA0ODk6XFx0c3RhdGljIGlubGluZSBib29sIGlvX3NlbmRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowMDo1My41NDUxNTU2NzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcyMTU5NDY1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGBpb19wdXRfa2J1ZnNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyByZWxhdGVkIHRvIGBpb19wdXRfa2J1ZnNgLiBGaXJzdCwgSSdtIGdvaW5nIHRvIHBpbnBvaW50IGl0cyBkZWZpbml0aW9uLiBLbm93aW5nIHRoZSBkZWNsYXJhdGlvbiwgaW5jbHVkaW5nIGFueSBhc3NvY2lhdGVkIHN0cnVjdHVyZXMgb3IgdHlwZWRlZnMsIGlzIGNydWNpYWw7IGl0IHNldHMgdGhlIHN0YWdlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbidzIHB1cnBvc2UgYW5kIGhvdyBpdCBtYW5pcHVsYXRlcyBkYXRhLiBUaGVuLCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHRyYWNrIGRvd24gZXZlcnkgc2luZ2xlIGluc3RhbmNlIHdoZXJlIGBpb19wdXRfa2J1ZnNgIGlzICp1c2VkKuKAlCBldmVyeSBjYWxsIHNpdGUuIEknbSBsb29raW5nIGZvciB0aGUgY2FsbGVyIGZ1bmN0aW9ucyBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGl0LiBUaGUgYXJndW1lbnRzIHdpbGwgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIHdoYXQgZGF0YSBpcyBiZWluZyBoYW5kbGVkLCB3aGVyZSBpdCBvcmlnaW5hdGVzLCBhbmQgaG93IGl0J3MgYmVpbmcgc3RhZ2VkIGZvciBvdXRwdXQuIEJ5IGZvbGxvd2luZyB0aGVzZSBjYWxsIGNoYWlucywgSSBjYW4gcmVjb25zdHJ1Y3QgdGhlIGRhdGEncyBqb3VybmV5IGFuZCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBJL08gc3Vic3lzdGVtLiBUaGlzIHdpbGwgaW5ldml0YWJseSBleHBvc2UgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBpbiB0aGUgSS9PIHBpcGVsaW5lLiBUaGlzIGlzIHdoZXJlIHRoZSBmdW4gYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODU0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowMToxMC43NjExMDQ2N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMjg4MDg3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19wdXRfa2J1ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcva2J1Zi5jPTQwNz1zdGF0aWMgaW5saW5lIGJvb2wgX19pb19wdXRfa2J1Zl9yaW5nKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTQyMC1cXG5pb191cmluZy9rYnVmLmM6NDIxOnVuc2lnbmVkIGludCBfX2lvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG5pb191cmluZy9rYnVmLmMtNDIyLVxcdFxcdFxcdCAgICBpbnQgbGVuLCBpbnQgbmJ1ZnMpXFxuLS1cXG5pb191cmluZy9rYnVmLmg9ODk9dm9pZCBpb19rYnVmX2Ryb3BfbGVnYWN5KHN0cnVjdCBpb19raW9jYiAqcmVxKTtcXG5pb191cmluZy9rYnVmLmgtOTAtXFxuaW9fdXJpbmcva2J1Zi5oOjkxOnVuc2lnbmVkIGludCBfX2lvX3B1dF9rYnVmcyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibCxcXG5pb191cmluZy9rYnVmLmgtOTItXFx0XFx0XFx0ICAgIGludCBsZW4sIGludCBuYnVmcyk7XFxuLS1cXG5pb191cmluZy9rYnVmLmg9MTI4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvX3B1dF9rYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbGVuLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5oLTEzMi1cXHRcXHRyZXR1cm4gMDtcXG5pb191cmluZy9rYnVmLmg6MTMzOlxcdHJldHVybiBfX2lvX3B1dF9rYnVmcyhyZXEsIGJsLCBsZW4sIDEpO1xcbmlvX3VyaW5nL2tidWYuaC0xMzQtfVxcbmlvX3VyaW5nL2tidWYuaC0xMzUtXFxuaW9fdXJpbmcva2J1Zi5oOjEzNjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19wdXRfa2J1ZnMoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBsZW4sXFxuaW9fdXJpbmcva2J1Zi5oLTEzNy1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLCBpbnQgbmJ1ZnMpXFxuLS1cXG5pb191cmluZy9rYnVmLmgtMTQwLVxcdFxcdHJldHVybiAwO1xcbmlvX3VyaW5nL2tidWYuaDoxNDE6XFx0cmV0dXJuIF9faW9fcHV0X2tidWZzKHJlcSwgYmwsIGxlbiwgbmJ1ZnMpO1xcbmlvX3VyaW5nL2tidWYuaC0xNDItfVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NDg5PXN0YXRpYyBpbmxpbmUgYm9vbCBpb19zZW5kX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTUwMS1cXG5pb191cmluZy9uZXQuYzo1MDI6XFx0Y2ZsYWdzID0gaW9fcHV0X2tidWZzKHJlcSwgc2VsLVxcdTAwM2V2YWwsIHNlbC1cXHUwMDNlYnVmX2xpc3QsIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXFx1MDAzZXZhbCkpO1xcbmlvX3VyaW5nL25ldC5jLTUwMy1cXG4tLVxcbmlvX3VyaW5nL25ldC5jPTg1MT1zdGF0aWMgaW5saW5lIGJvb2wgaW9fcmVjdl9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9uZXQuYy04NzctXFxuaW9fdXJpbmcvbmV0LmM6ODc4OlxcdFxcdGNmbGFncyB8PSBpb19wdXRfa2J1ZnMocmVxLCB0aGlzX3JldCwgc2VsLVxcdTAwM2VidWZfbGlzdCxcXG5pb191cmluZy9uZXQuYy04NzktXFx0XFx0XFx0XFx0ICAgICAgIGlvX2J1bmRsZV9uYnVmcyhrbXNnLCBzZWwtXFx1MDAzZXZhbCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowMToxMi4zNjM5OTIzNjRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxOTE4NzAyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgX19pb19wdXRfa2J1ZnNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0YWtpbmcgYSBsb29rIGF0IGBfX2lvX3B1dF9rYnVmc2AgaW4gYGlvX3VyaW5nL2tidWYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBrZXJuZWwgYnVmZmVycyBhcmUgbWFuYWdlZCBhbmQgcHV0IGJhY2sgaW50byB0aGUgcmluZywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIGBpb191cmluZ2AuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGEgY3JpdGljYWwgcGllY2UgaW4gdGhlIHB1enpsZSBvZiBidWZmZXIgcmV1c2UgYW5kIGF2b2lkaW5nIHVubmVjZXNzYXJ5IGFsbG9jYXRpb25zL2RlYWxsb2NhdGlvbnMsIHdoaWNoIGlzIGEga2V5IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb24gaW4gaGlnaC10aHJvdWdocHV0IEkvTy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIGVycm9yIGNvbmRpdGlvbnMsIHN5bmNocm9uaXphdGlvbiAoaWYgYW55KSwgYW5kIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlLiBJIGV4cGVjdCBpdCB0byBpbnZvbHZlIHNvbWUgaW50cmljYXRlIHBvaW50ZXIgbWFuaXB1bGF0aW9uIGFuZCBsaWtlbHkgc29tZSBzdWJ0bGUgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGZyZWVsaXN0IG1hbmFnZW1lbnQgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGFuZCBwcmV2ZW50IG1lbW9yeSBjb3JydXB0aW9uLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHRyYWNlIHRoZSBjb2RlIHBhdGggdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBsaWZlY3ljbGUgb2YgYSBrZXJuZWwgYnVmZmVyIHdpdGhpbiBgaW9fdXJpbmdgLiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhlIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUga2J1ZiBpcyB1cGRhdGVkIG9yIHZhbGlkYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgzNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDE0OjAxOjMxLjU1NTg2NTg4OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcva2J1Zi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQxMDpcXHRcXHRib29sIHJldCA9IHRydWU7XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdGlmIChibClcXG4gNDEzOlxcdFxcdFxcdHJldCA9IGlvX2tidWZfY29tbWl0KHJlcSwgYmwsIGxlbiwgbnIpO1xcbiA0MTQ6XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0JVRl9NT1JFKSlcXG4gNDE1OlxcdFxcdFxcdHJldCA9IGZhbHNlO1xcbiA0MTY6XFx0XFxuIDQxNzpcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH4oUkVRX0ZfQlVGRkVSX1JJTkcgfCBSRVFfRl9CVUZfTU9SRSk7XFxuIDQxODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA0MTk6XFx0fVxcbiA0MjA6XFx0XFxuIDQyMTpcXHR1bnNpZ25lZCBpbnQgX19pb19wdXRfa2J1ZnMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19idWZmZXJfbGlzdCAqYmwsXFxuIDQyMjpcXHRcXHRcXHRcXHQgICAgaW50IGxlbiwgaW50IG5idWZzKVxcbiA0MjM6XFx0e1xcbiA0MjQ6XFx0XFx0dW5zaWduZWQgaW50IHJldDtcXG4gNDI1OlxcdFxcbiA0MjY6XFx0XFx0cmV0ID0gSU9SSU5HX0NRRV9GX0JVRkZFUiB8IChyZXEtXFx1MDAzZWJ1Zl9pbmRleCBcXHUwMDNjXFx1MDAzYyBJT1JJTkdfQ1FFX0JVRkZFUl9TSElGVCk7XFxuIDQyNzpcXHRcXG4gNDI4OlxcdFxcdGlmICh1bmxpa2VseSghKHJlcS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRVFfRl9CVUZGRVJfUklORykpKSB7XFxuIDQyOTpcXHRcXHRcXHRpb19rYnVmX2Ryb3BfbGVnYWN5KHJlcSk7XFxuIDQzMDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA0MzE6XFx0XFx0fVxcbiA0MzI6XFx0XFxuIDQzMzpcXHRcXHRpZiAoIV9faW9fcHV0X2tidWZfcmluZyhyZXEsIGJsLCBsZW4sIG5idWZzKSlcXG4gNDM0OlxcdFxcdFxcdHJldCB8PSBJT1JJTkdfQ1FFX0ZfQlVGX01PUkU7XFxuIDQzNTpcXHRcXHRyZXR1cm4gcmV0O1xcbiA0MzY6XFx0fVxcbiA0Mzc6XFx0XFxuIDQzODpcXHRzdGF0aWMgaW50IGlvX3JlbW92ZV9idWZmZXJzX2xlZ2FjeShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4gNDM5OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsLFxcbiA0NDA6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbmJ1ZnMpXFxuIDQ0MTpcXHR7XFxuIDQ0MjpcXHRcXHR1bnNpZ25lZCBsb25nIGkgPSAwO1xcbiA0NDM6XFx0XFx0c3RydWN0IGlvX2J1ZmZlciAqbnh0O1xcbiA0NDQ6XFx0XFxuIDQ0NTpcXHRcXHQvKiBwcm90ZWN0cyBpb19idWZmZXJzX2NhY2hlICovXFxuIDQ0NjpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZjdHgtXFx1MDAzZXVyaW5nX2xvY2spO1xcbiA0NDc6XFx0XFx0V0FSTl9PTl9PTkNFKGJsLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPQkxfQlVGX1JJTkcpO1xcbiA0NDg6XFx0XFxuIDQ0OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmJ1ZnMgXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoXFx1MDAyNmJsLVxcdTAwM2VidWZfbGlzdCk7IGkrKykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxNDowMTozMS41NTU5ODYzOTdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkzNzQ1MDI4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgaW9fdXJpbmcgTmV0d29yayBSZWNlaXZlIEJ1ZmZlciBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBpbXByb3ZpbmcgdGhlIG1hbmFnZW1lbnQgb2YgbmV0d29yayByZWNlaXZlIGJ1ZmZlcnMgd2l0aGluIHRoZSBpb191cmluZyBmcmFtZXdvcmsuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgYXBwZWFycyB0byBiZSBhIGdvb2QsIHRhcmdldGVkIGNoYW5nZSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgYnVmZmVyIHJpbmdzIGFuZCBidW5kbGUgb3BlcmF0aW9ucyBpbiB0aGUgbmV0d29yayBjb250ZXh0LlxuXG5GaXJzdGx5LCBgaW9fYnVmZmVyX2dldF9saXN0YCBpcyBiZWluZyBtYWRlIHZpc2libGUgdG8gYG5ldC5jYCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgd2UgbmVlZCB0byBhY2Nlc3MgYnVmZmVyIGxpc3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgbmV0d29yayBzaWRlLiBMb29raW5nIGNsb3NlciwgaW4gYGlvX25ldF9rYnVmX3JlY3lsZWAsIHRoZSByZW1vdmFsIG9mIHRoZSBjYWxsIHRvIGBpb19rYnVmX2NvbW1pdGAgaXMgYXBwcm9wcmlhdGUgd2hlbiBidWZmZXJzIGFyZSBiZWluZyByZWN5Y2xlZCBkdXJpbmcgcmV0cmllczsgaXQgYXZvaWRzIGNvbW1pdHRpbmcgc29tZXRoaW5nIHRoYXQgc2hvdWxkbid0IGJlLiBUaGVuIHRoZSBhZGp1c3RtZW50cyBpbiBgaW9fcmVjdl9maW5pc2hgIGFuZCBgaW9fcmVjdmAgYXBwZWFyIHRvIGJlIGFpbWVkIGF0IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciB0aGUgdG90YWwgdHJhbnNmZXJyZWQgbGVuZ3RoIGluIHRoZSBjb250ZXh0IG9mIGJ1bmRsZWQgb3BlcmF0aW9ucyBhbmQgcmV0cmllcy4gU3BlY2lmaWNhbGx5LCBtYWtpbmcgc3VyZSB3ZSBnZXQgdGhlIGNvcnJlY3QgdG90YWwgbGVuZ3RoIHRocm91Z2ggYHNlbC1cdTAwM2V2YWxgIGludG8gYGlvX2J1bmRsZV9uYnVmc2AuIFRoaXMgZW5zdXJlcyB0aGF0IGJ1ZmZlciBjb25zdW1wdGlvbiBhbmQgcmVjeWNsaW5nIGFyZSBwcm9wZXJseSBoYW5kbGVkIGFjcm9zcyBtdWx0aXBsZSBjYWxscyBvciByZXRyaWVzLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIHRoYXQgd2UncmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMsIHdoaWNoIGlzIGFsd2F5cyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcGF0Y2ggaXNuJ3QgaW50cm9kdWNpbmcgYW55IGtlcm5lbC10by11c2Vyc3BhY2UgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBkYXRhIG9yIGltcHJvcGVyIG1lbW9yeSBhY2Nlc3MuIEFmdGVyIHJldmlld2luZyB0aGUgY29kZSBJIGhhdmUgdG8gc2F5IEknbSBzYXRpc2ZpZWQuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgYWJvdXQgaW1wcm92aW5nIHRoZSAqbWFuYWdlbWVudCogb2YgZXhpc3RpbmcgYnVmZmVyczogY29ycmVjdGx5IHRyYWNraW5nIGJ1ZmZlciBsaXN0IGluIGRpZmZlcmVudCBzY2VuYXJpb3MgaW4gYGlvX3JlY3ZgLCBmaXhpbmcgdGhlIHRvdGFsIGxlbmd0aCBjYWxjdWxhdGlvbiBpbiBgaW9fcmVjdl9maW5pc2hgLCBhbmQgY2xlYW5pbmcgdXAgYGlvX25ldF9rYnVmX3JlY3lsZWAgdG8gcHJldmVudCBkb3VibGUtY29tbWl0cyBpbiByZXRyaWVzLlxuXG5UaGUgZmllbGRzIHVzZWQgYXJlIENRRSBmbGFncywgcmV0dXJuIGludGVnZXJzLCB3aGljaCBhcmUgbm90IGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2UgdGhhdCBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcyB0aGF0IGdpdmUgbWUgY2F1c2UgZm9yIGNvbmNlcm4uIFRoZSBwYXRjaCBjb3JyZWN0cyBidWZmZXIgcmVjeWNsaW5nIGFuZCBjb21taXR0aW5nIGxvZ2ljIGFuZCBhY2NvdW50cyBmb3IgYnVmZmVyIGJ1bmRsZXMgd2hlbiB1c2luZyB0aGUgaW9fdXJpbmcgcmluZyBidWZmZXIuIFRoaXMgaXNuJ3QgbmV3IG1lbW9yeSBhbGxvY2F0aW9uLCBpdCdzIGFib3V0IG1ha2luZyBzdXJlIGV4aXN0aW5nIG1lbW9yeSAodXNlciBwcm92aWRlZCBvciByaW5nIGJ1ZmZlcikgaXMgdXNlZCBjb3JyZWN0bHkuIFRoZSBrZXkgYXNwZWN0cyBhcmUgdGhhdCBgc2VsYCBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHksIGFuZCB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIG9mIGJyYW5jaGVkIGJlaGF2aW9yIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgY2hhbmdlcyBhZGRyZXNzIGJvb2trZWVwaW5nIGFuZCBhY2NvdW50aW5nIGluIHRoZSBpb191cmluZyByaW5nIGJ1ZmZlciwgSSdtIGNvbmZpZGVudCBLTVNBTiBpcyAqbm90KiBuZWVkZWQgaGVyZS4gVGhlIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBmb3IgZGV0ZWN0aW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIGFjY2VzcywgYnVmZmVyIGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCBhcmUgdGhlIG1haW4gcmlza3MgaGVyZS4gV2UncmUgbG9va2luZyBhdCBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MsIGluY29ycmVjdCByaW5nIGJ1ZmZlciBlbnRyeSBjb25zdW1wdGlvbiwgYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcy4gSG93ZXZlciwgdGhlc2UgYXJlIGxvZ2ljIGVycm9ycyBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5UbyBzdW1tYXJpemUsIHRoZXNlIGNoYW5nZXM6XG4xLiAgRXhwb3NlIGBpb19idWZmZXJfZ2V0X2xpc3RgXG4yLiAgU2V0IGBzZWwuYnVmX2xpc3RgIGNvcnJlY3RseSB3aGVuIGJ1ZmZlciByaW5nIHVzZSBpcyBlbmFibGVkLlxuMy4gIEZpeCB0aGUgdG90YWwgbGVuZ3RoIHVzZWQgZm9yIGJ1bmRsZSBidWZmZXIgY2FsY3VsYXRpb24uXG40LiAgUmVtb3ZlIGEgcmVkdW5kYW50IGBpb19rYnVmX2NvbW1pdGAgY2FsbC5cblxuVGhlIHBhdGNoIGNvcnJlY3RzIGFjY291bnRpbmcgYW5kIHRyYWNraW5nIGZvciBuZXR3b3JrIHJlY2VpdmVzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLiBUaGUgS0FTQU4gY2FuIGRldGVjdCBhbnkgbWVtb3J5IHByb2JsZW1zLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc2OSwiT3V0cHV0VG9rZW5zIjoxODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTQ6MDE6NTAuOTMwNDkyMTQ4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYnVmZmVyIG1hbmFnZW1lbnQgYW5kIGFjY291bnRpbmcgbG9naWMgZm9yIGJ1bmRsZWQgYW5kIHJpbmcgYnVmZmVyIG5ldHdvcmsgcmVjZWl2ZXMgaW4gaW9fdXJpbmcgKGlvX3JlY3YgYW5kIGlvX3JlY3ZfZmluaXNoKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIGBzZWwuYnVmX2xpc3RgIGlzIHByb3Blcmx5IHJldHJpZXZlZCB3aGVuIGBSRVFfRl9CVUZGRVJfUklOR2AgaXMgYWN0aXZlLCBjb3JyZWN0cyB0aGUgYnVmZmVyIGNvdW50IHBhc3NlZCB0byBgaW9fYnVuZGxlX25idWZzKClgIHVzaW5nIGBzZWwtXFx1MDAzZXZhbGAsIGFuZCByZW1vdmVzIGFuIGluYXBwcm9wcmlhdGUgYnVmZmVyIGNvbW1pdCBvbiByZWN5Y2xlLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGF0aHMuIFBvdGVudGlhbCBlcnJvcnMgd291bGQgaW52b2x2ZSBidWZmZXIgcmluZyBpbmRleCB0cmFja2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGJ1ZmZlciBtYW5hZ2VtZW50IGFuZCBhY2NvdW50aW5nIGxvZ2ljIGZvciBidW5kbGVkIGFuZCByaW5nIGJ1ZmZlciBuZXR3b3JrIHJlY2VpdmVzIGluIGlvX3VyaW5nIChpb19yZWN2IGFuZCBpb19yZWN2X2ZpbmlzaCkuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBgc2VsLmJ1Zl9saXN0YCBpcyBwcm9wZXJseSByZXRyaWV2ZWQgd2hlbiBgUkVRX0ZfQlVGRkVSX1JJTkdgIGlzIGFjdGl2ZSwgY29ycmVjdHMgdGhlIGJ1ZmZlciBjb3VudCBwYXNzZWQgdG8gYGlvX2J1bmRsZV9uYnVmcygpYCB1c2luZyBgc2VsLVxcdTAwM2V2YWxgLCBhbmQgcmVtb3ZlcyBhbiBpbmFwcHJvcHJpYXRlIGJ1ZmZlciBjb21taXQgb24gcmVjeWNsZS5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBQb3RlbnRpYWwgZXJyb3JzIHdvdWxkIGludm9sdmUgYnVmZmVyIHJpbmcgaW5kZXggdHJhY2tpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv28bj[1] Phase: Succeeded StartedAt: 2026-09-02 14:02:01 +0000 UTC FinishedAt: 2026-09-02 14:02:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 14:02:01 +0000 UTC FinishedAt: 2026-09-02 14:02:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2] Phase: Succeeded StartedAt: 2026-09-02 14:02:01 +0000 UTC FinishedAt: 2026-09-02 17:42:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 14:02:01 +0000 UTC FinishedAt: 2026-09-02 17:42:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 14:02:01 +0000 UTC FinishedAt: 2026-09-02 14:02:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 14:02:01 +0000 UTC FinishedAt: 2026-09-02 14:02:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowv28bj/series-workflowv28bj-convert-artifact-1818518024/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 14:02:12 +0000 UTC FinishedAt: 2026-09-02 14:18:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 14:02:12 +0000 UTC FinishedAt: 2026-09-02 14:18: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:*a23b3db4-6956-4dbc-83e3-8e5505a3060d,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-workflowv28bj/series-workflowv28bj-convert-artifact-1818518024/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": "3f57ecfd-839d-4b5a-867a-7f5532bbb756", "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-workflowv28bj/series-workflowv28bj-build-action-281951358/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 14:02:12 +0000 UTC FinishedAt: 2026-09-02 14:18: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:*a23b3db4-6956-4dbc-83e3-8e5505a3060d,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-workflowv28bj/series-workflowv28bj-convert-artifact-1818518024/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": "3f57ecfd-839d-4b5a-867a-7f5532bbb756", "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-workflowv28bj/series-workflowv28bj-build-action-281951358/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 14:18:53 +0000 UTC FinishedAt: 2026-09-02 14:18:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 14:18:53 +0000 UTC FinishedAt: 2026-09-02 14:18:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 14:18:53 +0000 UTC FinishedAt: 2026-09-02 14:19:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 14:18:53 +0000 UTC FinishedAt: 2026-09-02 14:18:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowv28bj/series-workflowv28bj-convert-artifact-3647073007/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 14:19:03 +0000 UTC FinishedAt: 2026-09-02 14:20:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 14:19:03 +0000 UTC FinishedAt: 2026-09-02 14:20:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3f57ecfd-839d-4b5a-867a-7f5532bbb756,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-workflowv28bj/series-workflowv28bj-build-action-281951358/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-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 14:20:47 +0000 UTC FinishedAt: 2026-09-02 14:20:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 14:20:47 +0000 UTC FinishedAt: 2026-09-02 14:20:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 14:20:47 +0000 UTC FinishedAt: 2026-09-02 14:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 14:20:47 +0000 UTC FinishedAt: 2026-09-02 14:37:43 +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:*a23b3db4-6956-4dbc-83e3-8e5505a3060d,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-workflowv28bj/series-workflowv28bj-convert-artifact-3647073007/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": "b31b1b91-b59f-4844-88a6-85faeed81105", "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-workflowv28bj/series-workflowv28bj-build-action-646012547/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 14:20:47 +0000 UTC FinishedAt: 2026-09-02 14:37:33 +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:*a23b3db4-6956-4dbc-83e3-8e5505a3060d,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-workflowv28bj/series-workflowv28bj-convert-artifact-3647073007/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": "b31b1b91-b59f-4844-88a6-85faeed81105", "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-workflowv28bj/series-workflowv28bj-build-action-646012547/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 14:37:43 +0000 UTC FinishedAt: 2026-09-02 14:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 14:37:43 +0000 UTC FinishedAt: 2026-09-02 14:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 14:37:43 +0000 UTC FinishedAt: 2026-09-02 14:39:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 14:37:43 +0000 UTC FinishedAt: 2026-09-02 14:39:26 +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:*b31b1b91-b59f-4844-88a6-85faeed81105,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-workflowv28bj/series-workflowv28bj-build-action-646012547/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-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 14:39:36 +0000 UTC FinishedAt: 2026-09-02 17:42:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 14:39:36 +0000 UTC FinishedAt: 2026-09-02 17:42:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*3f57ecfd-839d-4b5a-867a-7f5532bbb756,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b31b1b91-b59f-4844-88a6-85faeed81105,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv28bj/series-workflowv28bj-build-action-281951358/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv28bj/series-workflowv28bj-build-action-646012547/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 14:39:36 +0000 UTC FinishedAt: 2026-09-02 14:39:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 14:39:36 +0000 UTC FinishedAt: 2026-09-02 14:39:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv28bj/series-workflowv28bj-convert-artifact-2101636264/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 14:39:36 +0000 UTC FinishedAt: 2026-09-02 14:39:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 14:39:36 +0000 UTC FinishedAt: 2026-09-02 14:39:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 14:39:36 +0000 UTC FinishedAt: 2026-09-02 14:39:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 14:39:46 +0000 UTC FinishedAt: 2026-09-02 17:42:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv28bj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_recv","io_recvmsg","io_buffer_get_list","io_kbuf_commit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c300d74d44c27064768a8dea90e67684b00681de","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"cbfca5ca-eca7-4e1b-90cf-a55edf8b3395","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 14:39:46 +0000 UTC FinishedAt: 2026-09-02 17:42:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3f57ecfd-839d-4b5a-867a-7f5532bbb756,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b31b1b91-b59f-4844-88a6-85faeed81105,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv28bj/series-workflowv28bj-build-action-281951358/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv28bj/series-workflowv28bj-build-action-646012547/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv28bj/series-workflowv28bj-convert-artifact-2101636264/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}