Name: series-workflowkx6qx Phase: Succeeded StartedAt: 2026-08-03 16:22:07 +0000 UTC FinishedAt: 2026-08-03 17:52:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkx6qx[0] Phase: Succeeded StartedAt: 2026-08-03 16:22:07 +0000 UTC FinishedAt: 2026-08-03 17:01:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkx6qx[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 16:22:07 +0000 UTC FinishedAt: 2026-08-03 17:01:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "415606a7be939835db9b0d6b711887586646346d", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "415606a7be939835db9b0d6b711887586646346d", "config_name": "upstream-apparmor-kasan.config", "series_id": "61d84e6e-340a-4e11-bea2-326196243223" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "vfs_open_consume", "vfs_open", "finish_open" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX29wZW5fY29uc3VtZSYjMzQ7LAogICAgJiMzNDt2ZnNfb3BlbiYjMzQ7LAogICAgJiMzNDtmaW5pc2hfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBmaWxlIG9wZW5pbmcgbG9naWMsIHNwZWNpZmljYWxseSBob3cgcGF0aCByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIGFuZCBjb25zdW1lZCBkdXJpbmcgdmZzX29wZW4gYW5kIGRvX2RlbnRyeV9vcGVuLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIHZmc19vcGVuX2NvbnN1bWUuIFRoaXMgaXMgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgb3Blbi9vcGVuYXQgc3lzY2FsbHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBjb3JyZWN0IGFuZCBubyB1c2UtYWZ0ZXItZnJlZSBvciBsZWFrcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNlMGExNjRjZjBkZTljOWI2MzQyNmRhNTcyMThhYjIyZjU4NDhhOTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjAwOjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oXG5pbmRleCBjNjU4YzhhNWViZDU2Li45NjMyMjM5MDM2YWNjIDEwMDY0NFxuLS0tIGEvZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW50ZXJuYWwuaFxuQEAgLTIwNSw2ICYjNDM7MjA1LDcgQEAgaW50IGRvX2ZjaG93bmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXAsXG4gXHRcdGludCBmbGFnKTtcbiBpbnQgY2hvd25fY29tbW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCB1aWRfdCB1c2VyLCBnaWRfdCBncm91cCk7XG4gZXh0ZXJuIGludCB2ZnNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqLCBzdHJ1Y3QgZmlsZSAqKTtcbiYjNDM7aW50IHZmc19vcGVuX2NvbnN1bWUoc3RydWN0IHBhdGggKiwgc3RydWN0IGZpbGUgKik7XG4gXG4gLypcbiAgKiBpbm9kZS5jXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDNmOWJmMTAzYmExMjYuLmY3MTQ4MWI5YmY4ZjcgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jXG5AQCAtNDc4OSw2ICYjNDM7NDc4OSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpvcGVuX2xhc3RfbG9va3VwcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRcdCAgIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG4ge1xuJiM0MztcdHN0cnVjdCB2ZnNtb3VudCAqbW50O1xuIFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXA7XG4gXHRpbnQgb3Blbl9mbGFnID0gb3AtXHUwMDNlb3Blbl9mbGFnO1xuIFx0Ym9vbCBkb190cnVuY2F0ZTtcbkBAIC00ODMwLDExICYjNDM7NDgzMSwxNyBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRcdGVycm9yID0gbW50X3dhbnRfd3JpdGUobmQtXHUwMDNlcGF0aC5tbnQpO1xuIFx0XHRpZiAoZXJyb3IpXG4gXHRcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEEgZGVkaWNhdGVkIHJlZmVyZW5jZSBpcyBuZWVkZWQgYmVjYXVzZSBhZnRlciB0aGUgY2FsbCB0b1xuJiM0MztcdFx0ICogdmZzX29wZW5fY29uc3VtZSgpIHdlIG5vIGxvbmdlciBvd24gdGhlIHJlZmVyZW5jZSBpbiBuZC1cdTAwM2VwYXRoLm1udFxuJiM0MztcdFx0ICogd2hpbGUgd2UgbmVlZCB0byB1bmRvIHdyaXRlIGFjZXNzIGJlbG93LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtbnQgPSBtbnRnZXQobmQtXHUwMDNlcGF0aC5tbnQpO1xuIFx0XHRkb190cnVuY2F0ZSA9IHRydWU7XG4gXHR9XG4gXHRlcnJvciA9IG1heV9vcGVuKGlkbWFwLCBcdTAwMjZuZC1cdTAwM2VwYXRoLCBhY2NfbW9kZSwgb3Blbl9mbGFnKTtcbiBcdGlmICghZXJyb3IgXHUwMDI2XHUwMDI2ICEoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRCkpXG4tXHRcdGVycm9yID0gdmZzX29wZW4oXHUwMDI2bmQtXHUwMDNlcGF0aCwgZmlsZSk7XG4mIzQzO1x0XHRlcnJvciA9IHZmc19vcGVuX2NvbnN1bWUoXHUwMDI2bmQtXHUwMDNlcGF0aCwgZmlsZSk7XG4gXHRpZiAoIWVycm9yKVxuIFx0XHRlcnJvciA9IHNlY3VyaXR5X2ZpbGVfcG9zdF9vcGVuKGZpbGUsIG9wLVx1MDAzZWFjY19tb2RlKTtcbiBcdGlmICghZXJyb3IgXHUwMDI2XHUwMDI2IGRvX3RydW5jYXRlKVxuQEAgLTQ4NDMsOCAmIzQzOzQ4NTAsMTAgQEAgc3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0XHRXQVJOX09OKDEpO1xuIFx0XHRlcnJvciA9IC1FSU5WQUw7XG4gXHR9XG4tXHRpZiAoZG9fdHJ1bmNhdGUpXG4tXHRcdG1udF9kcm9wX3dyaXRlKG5kLVx1MDAzZXBhdGgubW50KTtcbiYjNDM7XHRpZiAoZG9fdHJ1bmNhdGUpIHtcbiYjNDM7XHRcdG1udF9kcm9wX3dyaXRlKG1udCk7XG4mIzQzO1x0XHRtbnRwdXQobW50KTtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uY1xuaW5kZXggNmIxYzE0ZTY4NGE5My4uMmE3Njk3Y2VlMDBiYyAxMDA2NDRcbi0tLSBhL2ZzL29wZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb3Blbi5jXG5AQCAtOTMxLDYgJiM0Mzs5MzEsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgZmlsZV9nZXRfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICpmKVxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUG9wdWxhdGUgc3RydWN0IGZpbGVcbiYjNDM7ICpcbiYjNDM7ICogTk9URTogaXQgYXNzdW1lcyBmX3BhdGggaXMgcG9wdWxhdGVkIGFuZCBjb25zdW1lcyB0aGUgY2FsbGVyJiMzOTtzIHJlZmVyZW5jZS5cbiYjNDM7ICovXG4gc3RhdGljIGludCBkb19kZW50cnlfb3BlbihzdHJ1Y3QgZmlsZSAqZixcbiBcdFx0XHQgIGludCAoKm9wZW4pKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKSlcbiB7XG5AQCAtOTM4LDcgJiM0Mzs5NDMsNiBAQCBzdGF0aWMgaW50IGRvX2RlbnRyeV9vcGVuKHN0cnVjdCBmaWxlICpmLFxuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGYtXHUwMDNlZl9wYXRoLmRlbnRyeS1cdTAwM2VkX2lub2RlO1xuIFx0aW50IGVycm9yO1xuIFxuLVx0cGF0aF9nZXQoXHUwMDI2Zi1cdTAwM2VmX3BhdGgpO1xuIFx0Zi1cdTAwM2VmX2lub2RlID0gaW5vZGU7XG4gXHRmLVx1MDAzZWZfbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbiBcdGYtXHUwMDNlZl93Yl9lcnIgPSBmaWxlbWFwX3NhbXBsZV93Yl9lcnIoZi1cdTAwM2VmX21hcHBpbmcpO1xuQEAgLTEwNTUsNiAmIzQzOzEwNTksNyBAQCBpbnQgZmluaXNoX29wZW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdEJVR19PTihmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKTsgLyogb25jZSBpdCYjMzk7cyBvcGVuZWQsIGl0JiMzOTtzIG9wZW5lZCAqL1xuIFxuIFx0ZmlsZS1cdTAwM2VfX2ZfcGF0aC5kZW50cnkgPSBkZW50cnk7XG4mIzQzO1x0cGF0aF9nZXQoXHUwMDI2ZmlsZS1cdTAwM2VmX3BhdGgpO1xuIFx0cmV0dXJuIGRvX2RlbnRyeV9vcGVuKGZpbGUsIG9wZW4pO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGZpbmlzaF9vcGVuKTtcbkBAIC0xMDk4LDYgJiM0MzsxMTAzLDcgQEAgaW50IHZmc19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdGludCByZXQ7XG4gXG4gXHRmaWxlLVx1MDAzZV9fZl9wYXRoID0gKnBhdGg7XG4mIzQzO1x0cGF0aF9nZXQoXHUwMDI2ZmlsZS1cdTAwM2VmX3BhdGgpO1xuIFx0cmV0ID0gZG9fZGVudHJ5X29wZW4oZmlsZSwgTlVMTCk7XG4gXHRpZiAoIXJldCkge1xuIFx0XHQvKlxuQEAgLTExMTAsNiAmIzQzOzExMTYsMjUgQEAgaW50IHZmc19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogdmZzX29wZW5fY29uc3VtZSAtIG9wZW4gdGhlIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGggYW5kIGNvbnN1bWUgdGhlIHJlZmVyZW5jZVxuJiM0MzsgKiBAcGF0aDogcGF0aCB0byBvcGVuXG4mIzQzOyAqIEBmaWxlOiBuZXdseSBhbGxvY2F0ZWQgZmlsZSB3aXRoIGZfZmxhZyBpbml0aWFsaXplZFxuJiM0MzsgKi9cbiYjNDM7aW50IHZmc19vcGVuX2NvbnN1bWUoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZmlsZS1cdTAwM2VfX2ZfcGF0aCA9ICpwYXRoO1xuJiM0MztcdHBhdGgtXHUwMDNlbW50ID0gTlVMTDtcbiYjNDM7XHRwYXRoLVx1MDAzZWRlbnRyeSA9IE5VTEw7XG4mIzQzO1x0cmV0ID0gZG9fZGVudHJ5X29wZW4oZmlsZSwgTlVMTCk7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdGZzbm90aWZ5X29wZW4oZmlsZSk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGZpbGUgKmRlbnRyeV9vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsXG4gXHRcdFx0IGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxuIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfb3Blbl9jb25zdW1lJiMzNDssCiAgICAmIzM0O3Zmc19vcGVuJiMzNDssCiAgICAmIzM0O2ZpbmlzaF9vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGZpbGUgb3BlbmluZyBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBwYXRoIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQgYW5kIGNvbnN1bWVkIGR1cmluZyB2ZnNfb3BlbiBhbmQgZG9fZGVudHJ5X29wZW4uIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gdmZzX29wZW5fY29uc3VtZS4gVGhpcyBpcyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBvcGVuL29wZW5hdCBzeXNjYWxscyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgcmVmZXJlbmNlIGNvdW50aW5nIGlzIGNvcnJlY3QgYW5kIG5vIHVzZS1hZnRlci1mcmVlIG9yIGxlYWtzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2UwYTE2NGNmMGRlOWM5YjYzNDI2ZGE1NzIxOGFiMjJmNTg0OGE5MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMTc6MDA6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaAppbmRleCBjNjU4YzhhNWViZDU2Li45NjMyMjM5MDM2YWNjIDEwMDY0NAotLS0gYS9mcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ludGVybmFsLmgKQEAgLTIwNSw2ICYjNDM7MjA1LDcgQEAgaW50IGRvX2ZjaG93bmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXAsCiAJCWludCBmbGFnKTsKIGludCBjaG93bl9jb21tb24oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHVpZF90IHVzZXIsIGdpZF90IGdyb3VwKTsKIGV4dGVybiBpbnQgdmZzX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKiwgc3RydWN0IGZpbGUgKik7CiYjNDM7aW50IHZmc19vcGVuX2NvbnN1bWUoc3RydWN0IHBhdGggKiwgc3RydWN0IGZpbGUgKik7CiAKIC8qCiAgKiBpbm9kZS5jCmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAzZjliZjEwM2JhMTI2Li5mNzE0ODFiOWJmOGY3IDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTQ3ODksNiAmIzQzOzQ3ODksNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsCiBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsCiAJCSAgIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApCiB7CiYjNDM7CXN0cnVjdCB2ZnNtb3VudCAqbW50OwogCXN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwOwogCWludCBvcGVuX2ZsYWcgPSBvcC0mZ3Q7b3Blbl9mbGFnOwogCWJvb2wgZG9fdHJ1bmNhdGU7CkBAIC00ODMwLDExICYjNDM7NDgzMSwxNyBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsCiAJCWVycm9yID0gbW50X3dhbnRfd3JpdGUobmQtJmd0O3BhdGgubW50KTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwomIzQzOwkJLyoKJiM0MzsJCSAqIEEgZGVkaWNhdGVkIHJlZmVyZW5jZSBpcyBuZWVkZWQgYmVjYXVzZSBhZnRlciB0aGUgY2FsbCB0bwomIzQzOwkJICogdmZzX29wZW5fY29uc3VtZSgpIHdlIG5vIGxvbmdlciBvd24gdGhlIHJlZmVyZW5jZSBpbiBuZC0mZ3Q7cGF0aC5tbnQKJiM0MzsJCSAqIHdoaWxlIHdlIG5lZWQgdG8gdW5kbyB3cml0ZSBhY2VzcyBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJbW50ID0gbW50Z2V0KG5kLSZndDtwYXRoLm1udCk7CiAJCWRvX3RydW5jYXRlID0gdHJ1ZTsKIAl9CiAJZXJyb3IgPSBtYXlfb3BlbihpZG1hcCwgJmFtcDtuZC0mZ3Q7cGF0aCwgYWNjX21vZGUsIG9wZW5fZmxhZyk7CiAJaWYgKCFlcnJvciAmYW1wOyZhbXA7ICEoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX09QRU5FRCkpCi0JCWVycm9yID0gdmZzX29wZW4oJmFtcDtuZC0mZ3Q7cGF0aCwgZmlsZSk7CiYjNDM7CQllcnJvciA9IHZmc19vcGVuX2NvbnN1bWUoJmFtcDtuZC0mZ3Q7cGF0aCwgZmlsZSk7CiAJaWYgKCFlcnJvcikKIAkJZXJyb3IgPSBzZWN1cml0eV9maWxlX3Bvc3Rfb3BlbihmaWxlLCBvcC0mZ3Q7YWNjX21vZGUpOwogCWlmICghZXJyb3IgJmFtcDsmYW1wOyBkb190cnVuY2F0ZSkKQEAgLTQ4NDMsOCAmIzQzOzQ4NTAsMTAgQEAgc3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLAogCQlXQVJOX09OKDEpOwogCQllcnJvciA9IC1FSU5WQUw7CiAJfQotCWlmIChkb190cnVuY2F0ZSkKLQkJbW50X2Ryb3Bfd3JpdGUobmQtJmd0O3BhdGgubW50KTsKJiM0MzsJaWYgKGRvX3RydW5jYXRlKSB7CiYjNDM7CQltbnRfZHJvcF93cml0ZShtbnQpOwomIzQzOwkJbW50cHV0KG1udCk7CiYjNDM7CX0KIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCA2YjFjMTRlNjg0YTkzLi4yYTc2OTdjZWUwMGJjIDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb3Blbi5jCkBAIC05MzEsNiAmIzQzOzkzMSwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBmaWxlX2dldF93cml0ZV9hY2Nlc3Moc3RydWN0IGZpbGUgKmYpCiAJcmV0dXJuIGVycm9yOwogfQogCiYjNDM7LyoKJiM0MzsgKiBQb3B1bGF0ZSBzdHJ1Y3QgZmlsZQomIzQzOyAqCiYjNDM7ICogTk9URTogaXQgYXNzdW1lcyBmX3BhdGggaXMgcG9wdWxhdGVkIGFuZCBjb25zdW1lcyB0aGUgY2FsbGVyJiMzOTtzIHJlZmVyZW5jZS4KJiM0MzsgKi8KIHN0YXRpYyBpbnQgZG9fZGVudHJ5X29wZW4oc3RydWN0IGZpbGUgKmYsCiAJCQkgIGludCAoKm9wZW4pKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKSkKIHsKQEAgLTkzOCw3ICYjNDM7OTQzLDYgQEAgc3RhdGljIGludCBkb19kZW50cnlfb3BlbihzdHJ1Y3QgZmlsZSAqZiwKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZi0mZ3Q7Zl9wYXRoLmRlbnRyeS0mZ3Q7ZF9pbm9kZTsKIAlpbnQgZXJyb3I7CiAKLQlwYXRoX2dldCgmYW1wO2YtJmd0O2ZfcGF0aCk7CiAJZi0mZ3Q7Zl9pbm9kZSA9IGlub2RlOwogCWYtJmd0O2ZfbWFwcGluZyA9IGlub2RlLSZndDtpX21hcHBpbmc7CiAJZi0mZ3Q7Zl93Yl9lcnIgPSBmaWxlbWFwX3NhbXBsZV93Yl9lcnIoZi0mZ3Q7Zl9tYXBwaW5nKTsKQEAgLTEwNTUsNiAmIzQzOzEwNTksNyBAQCBpbnQgZmluaXNoX29wZW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAlCVUdfT04oZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX09QRU5FRCk7IC8qIG9uY2UgaXQmIzM5O3Mgb3BlbmVkLCBpdCYjMzk7cyBvcGVuZWQgKi8KIAogCWZpbGUtJmd0O19fZl9wYXRoLmRlbnRyeSA9IGRlbnRyeTsKJiM0MzsJcGF0aF9nZXQoJmFtcDtmaWxlLSZndDtmX3BhdGgpOwogCXJldHVybiBkb19kZW50cnlfb3BlbihmaWxlLCBvcGVuKTsKIH0KIEVYUE9SVF9TWU1CT0woZmluaXNoX29wZW4pOwpAQCAtMTA5OCw2ICYjNDM7MTEwMyw3IEBAIGludCB2ZnNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGZpbGUgKmZpbGUpCiAJaW50IHJldDsKIAogCWZpbGUtJmd0O19fZl9wYXRoID0gKnBhdGg7CiYjNDM7CXBhdGhfZ2V0KCZhbXA7ZmlsZS0mZ3Q7Zl9wYXRoKTsKIAlyZXQgPSBkb19kZW50cnlfb3BlbihmaWxlLCBOVUxMKTsKIAlpZiAoIXJldCkgewogCQkvKgpAQCAtMTExMCw2ICYjNDM7MTExNiwyNSBAQCBpbnQgdmZzX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB2ZnNfb3Blbl9jb25zdW1lIC0gb3BlbiB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCBhbmQgY29uc3VtZSB0aGUgcmVmZXJlbmNlCiYjNDM7ICogQHBhdGg6IHBhdGggdG8gb3BlbgomIzQzOyAqIEBmaWxlOiBuZXdseSBhbGxvY2F0ZWQgZmlsZSB3aXRoIGZfZmxhZyBpbml0aWFsaXplZAomIzQzOyAqLwomIzQzO2ludCB2ZnNfb3Blbl9jb25zdW1lKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWZpbGUtJmd0O19fZl9wYXRoID0gKnBhdGg7CiYjNDM7CXBhdGgtJmd0O21udCA9IE5VTEw7CiYjNDM7CXBhdGgtJmd0O2RlbnRyeSA9IE5VTEw7CiYjNDM7CXJldCA9IGRvX2RlbnRyeV9vcGVuKGZpbGUsIE5VTEwpOwomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJZnNub3RpZnlfb3BlbihmaWxlKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHN0cnVjdCBmaWxlICpkZW50cnlfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLAogCQkJIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKQogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvcmUgVkZTIFBhdGggUmVmZXJlbmNlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpIGhhbmRsZXMgcGF0aCByZWZlcmVuY2VzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGB2ZnNfb3BlbmAgYW5kIGBkb19kZW50cnlfb3BlbmAuICBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgYSBjb3JlIFZGUyBhbHRlcmF0aW9uLCBzbyBpdCBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIGZvciBpbnRlcmVzdGluZyBiZWhhdmlvciYjMzQ7IGFuZCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIG5ldyBmdW5jdGlvbiwgYHZmc19vcGVuX2NvbnN1bWVgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgbGluY2hwaW4g4oCTIGl0ICpjb25zdW1lcyogdGhlIHBhdGggcmVmZXJlbmNlLiBJdCB0aGVuIGdldHMgdXNlZCB3aXRoaW4gYGRvX29wZW5gIGluIGBmcy9uYW1laS5jYC4gIEkgc2VlIGNoYW5nZXMgaW4gYGRvX2RlbnRyeV9vcGVuYCB0byAqcmVtb3ZlKiBhIGBwYXRoX2dldGAgY2FsbCAoYHBhdGhfZ2V0KCZhbXA7Zi0mZ3Q7Zl9wYXRoKWApIGFuZCBpbiBgZmluaXNoX29wZW5gLCB0aGVyZSYjMzk7cyBhbiAqYWRkaXRpb24qIChgcGF0aF9nZXQoJmFtcDtmaWxlLSZndDtmX3BhdGgpYCkuIGB2ZnNfb3BlbmAgYWxzbyBub3cgaW5jbHVkZXMgYSBgcGF0aF9nZXRgLgoKU28sIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTogYGRvX29wZW5gLCBgZG9fZGVudHJ5X29wZW5gLCBgZmluaXNoX29wZW5gLCBgdmZzX29wZW5gLCBhbmQgdGhpcyBuZXcgYHZmc19vcGVuX2NvbnN1bWVgLgoKUmlnaHQsIGxldCBtZSBkaWcgaW50byB0aGUgZGV0YWlscy4gSSBzZWUgdGhhdCBgZG9fb3BlbmAgaXMgc3RhdGljIGluIGBmcy9uYW1laS5jYCBhbmQgYGRvX2RlbnRyeV9vcGVuYCBpcyBhbHNvIHN0YXRpYyBpbiBgZnMvb3Blbi5jYC4gYHZmc19vcGVuX2NvbnN1bWVgLCBgZmluaXNoX29wZW5gIGFuZCBgdmZzX29wZW5gIGFyZSAqbm90KiBzdGF0aWMsIGFuZCBhcmUgaW4gYGZzL29wZW4uY2AuICBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGRvX29wZW5gIGFuZCBgZG9fZGVudHJ5X29wZW5gIGFyZW4mIzM5O3QgaW5saW5lZCwgYXMgdGhhdCYjMzk7cyBhIGtleSBjb25zaWRlcmF0aW9uLgoKVGhlcmUgYXJlbiYjMzk7dCBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgd291bGQgYWZmZWN0IHRoaXMuIFZGUyBpcyBhbHdheXMgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyBvbmUgbGVzcyB0aGluZyB0byB3b3JyeSBhYm91dC4KCk5vdyBsZXQmIzM5O3MgdmVyaWZ5IHRoZXNlIGZ1bmN0aW9ucy4gRXZlbiB0aG91Z2ggYGRvX29wZW5gIGFuZCBgZG9fZGVudHJ5X29wZW5gIGFyZSBzdGF0aWMsIHRoZXkgYXJlIGdvb2QgdGFyZ2V0cyBpZiB0aGV5IGFyZSBub3QgaW5saW5lZC4gYHZmc19vcGVuX2NvbnN1bWVgIGlzbiYjMzk7dCBleHBvcnRlZC4uLiBidXQgd2FpdCwgaXQmIzM5O3MgKmRlY2xhcmVkKiBpbiBgZnMvaW50ZXJuYWwuaGAuIEFoYSwgc28gaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhlIGBmcy9gIGRpcmVjdG9yeS4KCk9rYXksIHNvIGxldCYjMzk7cyBjb25zb2xpZGF0ZSB0aGUgdGFyZ2V0IGZ1bmN0aW9ucy4KLSBgdmZzX29wZW5fY29uc3VtZWAKLSBgdmZzX29wZW5gCi0gYGZpbmlzaF9vcGVuYAotIGBkb19kZW50cnlfb3BlbmAKLSBgZG9fb3BlbmAKCkkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gd2hldGhlciBgZG9fb3BlbmAgYW5kIGBkb19kZW50cnlfb3BlbmAgYXJlIGFjdHVhbGx5IGlubGluZWQgb3Igbm90IGJ5IGxvb2tpbmcgYXQgdGhlaXIgcmVzcGVjdGl2ZSBzb3VyY2UgZmlsZXMgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApP2ludCBkb19vcGVuXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uYW1laS5jPTQ3MzQ9c3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fbGFzdF9sb29rdXBzKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuLS1cbmZzL25hbWVpLmMtNDc4OC0gKi9cbmZzL25hbWVpLmM6NDc4OTpzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG5mcy9uYW1laS5jLTQ3OTAtXHRcdCAgIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY2MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGNvbnNpZGVyaW5nIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGZyb20gYW4gZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipTdGF0aWMgRnVuY3Rpb24gT2JzZXJ2YXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgYm90aCBgZG9fb3BlbmAgYW5kIGBkb19kZW50cnlfb3BlbmAgYXJlIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYSBmZXcga2V5IHRoaW5ncywgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZS4gQmVjYXVzZSB0aGV5JiMzOTtyZSBzdGF0aWMsIHRoZWlyIHNjb3BlIGlzICpsaW1pdGVkKiB0byB0aGUgY29tcGlsYXRpb24gdW5pdCBpbiB3aGljaCB0aGV5JiMzOTtyZSBkZWZpbmVkLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZXJuYWwgaGVscGVyIHJvdXRpbmVzLCBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgZXhwb3NlZCBvciBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoYXQgc3BlY2lmaWMgbW9kdWxlIG9yIGZpbGUuIEkmIzM5O2QgZXhwZWN0IHRoZXkgYXJlIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBzb21lIGNvbW1vbiwgbG93LWxldmVsIG9wZW4gb3BlcmF0aW9uIHByb2NlZHVyZXMsIGJ1dCB0aGVpciBkZXRhaWxlZCBmdW5jdGlvbmFsaXR5IHdvdWxkIGJlIGhpZGRlbiBmcm9tIGV4dGVybmFsIGNvZGUuIFRoaXMgaXNvbGF0aW9uIGhlbHBzIHdpdGggbW9kdWxhcml0eSBhbmQgcHJldmVudHMgYWNjaWRlbnRhbCwgdW5pbnRlbmRlZCB1c2UgZnJvbSBlbHNld2hlcmUgaW4gdGhlIGtlcm5lbC4gVGhpcyBhbHNvIHN1Z2dlc3RzLCBJIHNob3VsZCBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBjYWxsaW5nIG9yIHJlZmVyZW5jaW5nIHRoZW0gZnJvbSBhbm90aGVyIHBhcnQgb2YgdGhlIHN5c3RlbSBkaXJlY3RseSBhcyBJIGRlc2lnbi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhleSBhcmUgdXNlZCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBvcGVuIHN5c3RlbSBjYWxsIGl0c2VsZi4gS25vd2luZyB0aGVpciBzdGF0aWMgbmF0dXJlIHByb3ZpZGVzIGltbWVkaWF0ZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/aW50IGRvX2RlbnRyeV9vcGVuXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb3Blbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29wZW4uYz05MTA9c3RhdGljIGlubGluZSBpbnQgZmlsZV9nZXRfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICpmKVxuLS1cbmZzL29wZW4uYy05MzgtICovXG5mcy9vcGVuLmM6OTM5OnN0YXRpYyBpbnQgZG9fZGVudHJ5X29wZW4oc3RydWN0IGZpbGUgKmYsXG5mcy9vcGVuLmMtOTQwLVx0XHRcdCAgaW50ICgqb3Blbikoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVkZTIEZ1bmN0aW9uIFNlbGVjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoaWNoIFZGUyBmdW5jdGlvbnMgd2Ugc2hvdWxkIGZvY3VzIG9uLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIHNlbnNlOyB3ZSB3YW50IHRvIHNlZSB0aGUga2V5IGFyY2hpdGVjdHVyYWwgY29tcG9uZW50cy4gU28sIEkmIzM5O20gdGhpbmtpbmcgd2Ugc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSBgdmZzX29wZW5fY29uc3VtZWAsIGB2ZnNfb3BlbmAsIGFuZCBgZmluaXNoX29wZW5gLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwsIGNvcmUgVkZTIGZ1bmN0aW9ucywgdGhhdCBhcmUgZW50cnlwb2ludHMgdG8gdGhlIGZpbGUgb3BlbiBvcGVyYXRpb25zLiBXaGlsZSBgZG9fZGVudHJ5X29wZW5gIGFuZCBgZG9fb3BlbmAgYXJlIHJlbGV2YW50IHRvbywgdGhleSBzZWVtIGxpa2UgdGhleSBtaWdodCBiZSBpbnRlcm5hbCBoZWxwZXJzLCBhbmQgd2Ugd2FudCB0aGUgZXh0ZXJuYWwgQVBJIGVudHJ5IHBvaW50cy4gTm8gc3BlY2lhbCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLCB0aGVzZSBhcmUgYWxsIGJ1aWx0LWluLiBKdXN0IHRvIGJlIHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYHZmc19vcGVuX2NvbnN1bWVgIGxpdmVzIGluIGBmcy9vcGVuLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgdmZzX29wZW5fY29uc3VtZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29wZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vcGVuLmM9MTEwMT1pbnQgdmZzX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL29wZW4uYy0xMTIzLSAqL1xuZnMvb3Blbi5jOjExMjQ6aW50IHZmc19vcGVuX2NvbnN1bWUoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvb3Blbi5jLTExMjUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MjkKCQkJCQkJCW91dHB1dDogMTM2CgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjoKCioqQ29yZSBWRlMgRmlsZSBPcGVuaW5nIFZ1bG5lcmFiaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzLCAmIzM0O1llcCwgdGhpcyBpcyBzaWduaWZpY2FudC4mIzM0OyBJdCBzZWVtcyB0byBiZSB0b3VjaGluZyBmdW5kYW1lbnRhbCBmaWxlIG9wZW5pbmcgbG9naWMgd2l0aGluIHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpLCBzcGVjaWZpY2FsbHkgaG93IHBhdGggcmVmZXJlbmNlcyBhcmUgbWFuYWdlZCBkdXJpbmcgdGhlIGB2ZnNfb3BlbmAgYW5kIGBkb19kZW50cnlfb3BlbmAgcHJvY2Vzc2VzLiBUaGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IGZ1bmN0aW9uLCBgdmZzX29wZW5fY29uc3VtZWAsIGlzIHRoZSBrZXkgaW5kaWNhdG9yIGhlcmUuIFRoaXMgc2NyZWFtcyAmIzM0O3BvdGVudGlhbCBmb3IgcmVmZXJlbmNlIGNvdW50aW5nIGJ1Z3MuJiMzNDsKClRoZSBmYWN0IHRoYXQgdGhpcyB0b3VjaGVzIHRoZSBjb3JlIGtlcm5lbCBtZWFucyBhbnkgaXNzdWUgaGVyZSBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlci1zcGFjZSB0aHJvdWdoIHN0YW5kYXJkIHN5c3RlbSBjYWxscyBsaWtlIGBvcGVuKClgIGFuZCBgb3BlbmF0KClgLiBUaGF0IG1lYW5zIHRoaXMgaXMgYSAqcHJpbWUqIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gV2UgYWJzb2x1dGVseSBuZWVkIHRvIGVuc3VyZSB0aGF0IHJlZmVyZW5jZSBjb3VudGluZyBpcyBiZWhhdmluZyBjb3JyZWN0bHkgYWZ0ZXIgdGhpcyBjaGFuZ2UgdG8gcHJvdGVjdCBhZ2FpbnN0IHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeSBsZWFrcy4gVGhlIGZhY3QgdGhhdCBubyBzcGVjaWZpYyBjb25maWcgY2hhbmdlcyBhcmUgbmVlZGVkIHRlbGxzIG1lIHRoaXMgaXMgYmFrZWQgaW50byBhIGNvcmUgc3lzdGVtLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGB2ZnNfb3Blbl9jb25zdW1lYCBpdHNlbGYsIGJ1dCBJIHNob3VsZCBhbHNvIHJldmlldyBgdmZzX29wZW5gIGFuZCBgZmluaXNoX29wZW5gLCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBmbG93IGFyb3VuZCB0aGVzZSBjcnVjaWFsIHBvaW50cyBpcyBjb3JyZWN0LgoKSSYjMzk7bSByZWFkeSB0byBtYXJrIHRoZSByZXN1bHRzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19vcGVuX2NvbnN1bWUmIzM0OywKICAgICYjMzQ7dmZzX29wZW4mIzM0OywKICAgICYjMzQ7ZmluaXNoX29wZW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgZmlsZSBvcGVuaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IHBhdGggcmVmZXJlbmNlcyBhcmUgaGFuZGxlZCBhbmQgY29uc3VtZWQgZHVyaW5nIHZmc19vcGVuIGFuZCBkb19kZW50cnlfb3Blbi4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiB2ZnNfb3Blbl9jb25zdW1lLiBUaGlzIGlzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG9wZW4vb3BlbmF0IHN5c2NhbGxzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSByZWZlcmVuY2UgY291bnRpbmcgaXMgY29ycmVjdCBhbmQgbm8gdXNlLWFmdGVyLWZyZWUgb3IgbGVha3Mgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX29wZW5fY29uc3VtZSYjMzQ7LAogICAgJiMzNDt2ZnNfb3BlbiYjMzQ7LAogICAgJiMzNDtmaW5pc2hfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBmaWxlIG9wZW5pbmcgbG9naWMsIHNwZWNpZmljYWxseSBob3cgcGF0aCByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIGFuZCBjb25zdW1lZCBkdXJpbmcgdmZzX29wZW4gYW5kIGRvX2RlbnRyeV9vcGVuLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIHZmc19vcGVuX2NvbnN1bWUuIFRoaXMgaXMgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgb3Blbi9vcGVuYXQgc3lzY2FsbHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBjb3JyZWN0IGFuZCBubyB1c2UtYWZ0ZXItZnJlZSBvciBsZWFrcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjAwOjMxLjkwMjIxNDg0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzExMjY1MTc5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX29wZW5fY29uc3VtZVwiLFxuICAgIFwidmZzX29wZW5cIixcbiAgICBcImZpbmlzaF9vcGVuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgZmlsZSBvcGVuaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IHBhdGggcmVmZXJlbmNlcyBhcmUgaGFuZGxlZCBhbmQgY29uc3VtZWQgZHVyaW5nIHZmc19vcGVuIGFuZCBkb19kZW50cnlfb3Blbi4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiB2ZnNfb3Blbl9jb25zdW1lLiBUaGlzIGlzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG9wZW4vb3BlbmF0IHN5c2NhbGxzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSByZWZlcmVuY2UgY291bnRpbmcgaXMgY29ycmVjdCBhbmQgbm8gdXNlLWFmdGVyLWZyZWUgb3IgbGVha3Mgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjAwOjMxLjkwMjIyMzAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUzMTU0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZTBhMTY0Y2YwZGU5YzliNjM0MjZkYTU3MjE4YWIyMmY1ODQ4YTkyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMgMTc6MDA6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmhcXG5pbmRleCBjNjU4YzhhNWViZDU2Li45NjMyMjM5MDM2YWNjIDEwMDY0NFxcbi0tLSBhL2ZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9pbnRlcm5hbC5oXFxuQEAgLTIwNSw2ICsyMDUsNyBAQCBpbnQgZG9fZmNob3duYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1aWRfdCB1c2VyLCBnaWRfdCBncm91cCxcXG4gXFx0XFx0aW50IGZsYWcpO1xcbiBpbnQgY2hvd25fY29tbW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCB1aWRfdCB1c2VyLCBnaWRfdCBncm91cCk7XFxuIGV4dGVybiBpbnQgdmZzX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKiwgc3RydWN0IGZpbGUgKik7XFxuK2ludCB2ZnNfb3Blbl9jb25zdW1lKHN0cnVjdCBwYXRoICosIHN0cnVjdCBmaWxlICopO1xcbiBcXG4gLypcXG4gICogaW5vZGUuY1xcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xcbmluZGV4IDNmOWJmMTAzYmExMjYuLmY3MTQ4MWI5YmY4ZjcgMTAwNjQ0XFxuLS0tIGEvZnMvbmFtZWkuY1xcbisrKyBiL2ZzL25hbWVpLmNcXG5AQCAtNDc4OSw2ICs0Nzg5LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fbGFzdF9sb29rdXBzKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbiBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdFxcdCAgIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXFxuIHtcXG4rXFx0c3RydWN0IHZmc21vdW50ICptbnQ7XFxuIFxcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xcbiBcXHRpbnQgb3Blbl9mbGFnID0gb3AtXFx1MDAzZW9wZW5fZmxhZztcXG4gXFx0Ym9vbCBkb190cnVuY2F0ZTtcXG5AQCAtNDgzMCwxMSArNDgzMSwxNyBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdFxcdGVycm9yID0gbW50X3dhbnRfd3JpdGUobmQtXFx1MDAzZXBhdGgubW50KTtcXG4gXFx0XFx0aWYgKGVycm9yKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgZGVkaWNhdGVkIHJlZmVyZW5jZSBpcyBuZWVkZWQgYmVjYXVzZSBhZnRlciB0aGUgY2FsbCB0b1xcbitcXHRcXHQgKiB2ZnNfb3Blbl9jb25zdW1lKCkgd2Ugbm8gbG9uZ2VyIG93biB0aGUgcmVmZXJlbmNlIGluIG5kLVxcdTAwM2VwYXRoLm1udFxcbitcXHRcXHQgKiB3aGlsZSB3ZSBuZWVkIHRvIHVuZG8gd3JpdGUgYWNlc3MgYmVsb3cuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtbnQgPSBtbnRnZXQobmQtXFx1MDAzZXBhdGgubW50KTtcXG4gXFx0XFx0ZG9fdHJ1bmNhdGUgPSB0cnVlO1xcbiBcXHR9XFxuIFxcdGVycm9yID0gbWF5X29wZW4oaWRtYXAsIFxcdTAwMjZuZC1cXHUwMDNlcGF0aCwgYWNjX21vZGUsIG9wZW5fZmxhZyk7XFxuIFxcdGlmICghZXJyb3IgXFx1MDAyNlxcdTAwMjYgIShmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9PUEVORUQpKVxcbi1cXHRcXHRlcnJvciA9IHZmc19vcGVuKFxcdTAwMjZuZC1cXHUwMDNlcGF0aCwgZmlsZSk7XFxuK1xcdFxcdGVycm9yID0gdmZzX29wZW5fY29uc3VtZShcXHUwMDI2bmQtXFx1MDAzZXBhdGgsIGZpbGUpO1xcbiBcXHRpZiAoIWVycm9yKVxcbiBcXHRcXHRlcnJvciA9IHNlY3VyaXR5X2ZpbGVfcG9zdF9vcGVuKGZpbGUsIG9wLVxcdTAwM2VhY2NfbW9kZSk7XFxuIFxcdGlmICghZXJyb3IgXFx1MDAyNlxcdTAwMjYgZG9fdHJ1bmNhdGUpXFxuQEAgLTQ4NDMsOCArNDg1MCwxMCBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdFxcdFdBUk5fT04oMSk7XFxuIFxcdFxcdGVycm9yID0gLUVJTlZBTDtcXG4gXFx0fVxcbi1cXHRpZiAoZG9fdHJ1bmNhdGUpXFxuLVxcdFxcdG1udF9kcm9wX3dyaXRlKG5kLVxcdTAwM2VwYXRoLm1udCk7XFxuK1xcdGlmIChkb190cnVuY2F0ZSkge1xcbitcXHRcXHRtbnRfZHJvcF93cml0ZShtbnQpO1xcbitcXHRcXHRtbnRwdXQobW50KTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uY1xcbmluZGV4IDZiMWMxNGU2ODRhOTMuLjJhNzY5N2NlZTAwYmMgMTAwNjQ0XFxuLS0tIGEvZnMvb3Blbi5jXFxuKysrIGIvZnMvb3Blbi5jXFxuQEAgLTkzMSw2ICs5MzEsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgZmlsZV9nZXRfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICpmKVxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFBvcHVsYXRlIHN0cnVjdCBmaWxlXFxuKyAqXFxuKyAqIE5PVEU6IGl0IGFzc3VtZXMgZl9wYXRoIGlzIHBvcHVsYXRlZCBhbmQgY29uc3VtZXMgdGhlIGNhbGxlcidzIHJlZmVyZW5jZS5cXG4rICovXFxuIHN0YXRpYyBpbnQgZG9fZGVudHJ5X29wZW4oc3RydWN0IGZpbGUgKmYsXFxuIFxcdFxcdFxcdCAgaW50ICgqb3Blbikoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopKVxcbiB7XFxuQEAgLTkzOCw3ICs5NDMsNiBAQCBzdGF0aWMgaW50IGRvX2RlbnRyeV9vcGVuKHN0cnVjdCBmaWxlICpmLFxcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZi1cXHUwMDNlZl9wYXRoLmRlbnRyeS1cXHUwMDNlZF9pbm9kZTtcXG4gXFx0aW50IGVycm9yO1xcbiBcXG4tXFx0cGF0aF9nZXQoXFx1MDAyNmYtXFx1MDAzZWZfcGF0aCk7XFxuIFxcdGYtXFx1MDAzZWZfaW5vZGUgPSBpbm9kZTtcXG4gXFx0Zi1cXHUwMDNlZl9tYXBwaW5nID0gaW5vZGUtXFx1MDAzZWlfbWFwcGluZztcXG4gXFx0Zi1cXHUwMDNlZl93Yl9lcnIgPSBmaWxlbWFwX3NhbXBsZV93Yl9lcnIoZi1cXHUwMDNlZl9tYXBwaW5nKTtcXG5AQCAtMTA1NSw2ICsxMDU5LDcgQEAgaW50IGZpbmlzaF9vcGVuKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdEJVR19PTihmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9PUEVORUQpOyAvKiBvbmNlIGl0J3Mgb3BlbmVkLCBpdCdzIG9wZW5lZCAqL1xcbiBcXG4gXFx0ZmlsZS1cXHUwMDNlX19mX3BhdGguZGVudHJ5ID0gZGVudHJ5O1xcbitcXHRwYXRoX2dldChcXHUwMDI2ZmlsZS1cXHUwMDNlZl9wYXRoKTtcXG4gXFx0cmV0dXJuIGRvX2RlbnRyeV9vcGVuKGZpbGUsIG9wZW4pO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woZmluaXNoX29wZW4pO1xcbkBAIC0xMDk4LDYgKzExMDMsNyBAQCBpbnQgdmZzX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0ZmlsZS1cXHUwMDNlX19mX3BhdGggPSAqcGF0aDtcXG4rXFx0cGF0aF9nZXQoXFx1MDAyNmZpbGUtXFx1MDAzZWZfcGF0aCk7XFxuIFxcdHJldCA9IGRvX2RlbnRyeV9vcGVuKGZpbGUsIE5VTEwpO1xcbiBcXHRpZiAoIXJldCkge1xcbiBcXHRcXHQvKlxcbkBAIC0xMTEwLDYgKzExMTYsMjUgQEAgaW50IHZmc19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHZmc19vcGVuX2NvbnN1bWUgLSBvcGVuIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiBwYXRoIGFuZCBjb25zdW1lIHRoZSByZWZlcmVuY2VcXG4rICogQHBhdGg6IHBhdGggdG8gb3BlblxcbisgKiBAZmlsZTogbmV3bHkgYWxsb2NhdGVkIGZpbGUgd2l0aCBmX2ZsYWcgaW5pdGlhbGl6ZWRcXG4rICovXFxuK2ludCB2ZnNfb3Blbl9jb25zdW1lKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZmlsZS1cXHUwMDNlX19mX3BhdGggPSAqcGF0aDtcXG4rXFx0cGF0aC1cXHUwMDNlbW50ID0gTlVMTDtcXG4rXFx0cGF0aC1cXHUwMDNlZGVudHJ5ID0gTlVMTDtcXG4rXFx0cmV0ID0gZG9fZGVudHJ5X29wZW4oZmlsZSwgTlVMTCk7XFxuK1xcdGlmICghcmV0KSB7XFxuK1xcdFxcdGZzbm90aWZ5X29wZW4oZmlsZSk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RydWN0IGZpbGUgKmRlbnRyeV9vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsXFxuIFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcXG4ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowMDozMi4zMjg2MTUxMDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3MDcwMDEwOTE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZnNfb3Blbl9jb25zdW1lXCIsXG4gICAgXCJ2ZnNfb3BlblwiLFxuICAgIFwiZmluaXNoX29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBmaWxlIG9wZW5pbmcgbG9naWMsIHNwZWNpZmljYWxseSBob3cgcGF0aCByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIGFuZCBjb25zdW1lZCBkdXJpbmcgdmZzX29wZW4gYW5kIGRvX2RlbnRyeV9vcGVuLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIHZmc19vcGVuX2NvbnN1bWUuIFRoaXMgaXMgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgb3Blbi9vcGVuYXQgc3lzY2FsbHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBjb3JyZWN0IGFuZCBubyB1c2UtYWZ0ZXItZnJlZSBvciBsZWFrcyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2UwYTE2NGNmMGRlOWM5YjYzNDI2ZGE1NzIxOGFiMjJmNTg0OGE5MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTc6MDA6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaFxuaW5kZXggYzY1OGM4YTVlYmQ1Ni4uOTYzMjIzOTAzNmFjYyAxMDA2NDRcbi0tLSBhL2ZzL2ludGVybmFsLmhcbisrKyBiL2ZzL2ludGVybmFsLmhcbkBAIC0yMDUsNiArMjA1LDcgQEAgaW50IGRvX2ZjaG93bmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXAsXG4gXHRcdGludCBmbGFnKTtcbiBpbnQgY2hvd25fY29tbW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCB1aWRfdCB1c2VyLCBnaWRfdCBncm91cCk7XG4gZXh0ZXJuIGludCB2ZnNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqLCBzdHJ1Y3QgZmlsZSAqKTtcbitpbnQgdmZzX29wZW5fY29uc3VtZShzdHJ1Y3QgcGF0aCAqLCBzdHJ1Y3QgZmlsZSAqKTtcbiBcbiAvKlxuICAqIGlub2RlLmNcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggM2Y5YmYxMDNiYTEyNi4uZjcxNDgxYjliZjhmNyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbisrKyBiL2ZzL25hbWVpLmNcbkBAIC00Nzg5LDYgKzQ3ODksNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gc3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0XHQgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxuIHtcbitcdHN0cnVjdCB2ZnNtb3VudCAqbW50O1xuIFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXA7XG4gXHRpbnQgb3Blbl9mbGFnID0gb3AtXHUwMDNlb3Blbl9mbGFnO1xuIFx0Ym9vbCBkb190cnVuY2F0ZTtcbkBAIC00ODMwLDExICs0ODMxLDE3IEBAIHN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdFx0ZXJyb3IgPSBtbnRfd2FudF93cml0ZShuZC1cdTAwM2VwYXRoLm1udCk7XG4gXHRcdGlmIChlcnJvcilcbiBcdFx0XHRyZXR1cm4gZXJyb3I7XG4rXHRcdC8qXG4rXHRcdCAqIEEgZGVkaWNhdGVkIHJlZmVyZW5jZSBpcyBuZWVkZWQgYmVjYXVzZSBhZnRlciB0aGUgY2FsbCB0b1xuK1x0XHQgKiB2ZnNfb3Blbl9jb25zdW1lKCkgd2Ugbm8gbG9uZ2VyIG93biB0aGUgcmVmZXJlbmNlIGluIG5kLVx1MDAzZXBhdGgubW50XG4rXHRcdCAqIHdoaWxlIHdlIG5lZWQgdG8gdW5kbyB3cml0ZSBhY2VzcyBiZWxvdy5cbitcdFx0ICovXG4rXHRcdG1udCA9IG1udGdldChuZC1cdTAwM2VwYXRoLm1udCk7XG4gXHRcdGRvX3RydW5jYXRlID0gdHJ1ZTtcbiBcdH1cbiBcdGVycm9yID0gbWF5X29wZW4oaWRtYXAsIFx1MDAyNm5kLVx1MDAzZXBhdGgsIGFjY19tb2RlLCBvcGVuX2ZsYWcpO1xuIFx0aWYgKCFlcnJvciBcdTAwMjZcdTAwMjYgIShmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKSlcbi1cdFx0ZXJyb3IgPSB2ZnNfb3BlbihcdTAwMjZuZC1cdTAwM2VwYXRoLCBmaWxlKTtcbitcdFx0ZXJyb3IgPSB2ZnNfb3Blbl9jb25zdW1lKFx1MDAyNm5kLVx1MDAzZXBhdGgsIGZpbGUpO1xuIFx0aWYgKCFlcnJvcilcbiBcdFx0ZXJyb3IgPSBzZWN1cml0eV9maWxlX3Bvc3Rfb3BlbihmaWxlLCBvcC1cdTAwM2VhY2NfbW9kZSk7XG4gXHRpZiAoIWVycm9yIFx1MDAyNlx1MDAyNiBkb190cnVuY2F0ZSlcbkBAIC00ODQzLDggKzQ4NTAsMTAgQEAgc3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0XHRXQVJOX09OKDEpO1xuIFx0XHRlcnJvciA9IC1FSU5WQUw7XG4gXHR9XG4tXHRpZiAoZG9fdHJ1bmNhdGUpXG4tXHRcdG1udF9kcm9wX3dyaXRlKG5kLVx1MDAzZXBhdGgubW50KTtcbitcdGlmIChkb190cnVuY2F0ZSkge1xuK1x0XHRtbnRfZHJvcF93cml0ZShtbnQpO1xuK1x0XHRtbnRwdXQobW50KTtcbitcdH1cbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA2YjFjMTRlNjg0YTkzLi4yYTc2OTdjZWUwMGJjIDEwMDY0NFxuLS0tIGEvZnMvb3Blbi5jXG4rKysgYi9mcy9vcGVuLmNcbkBAIC05MzEsNiArOTMxLDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZpbGVfZ2V0X3dyaXRlX2FjY2VzcyhzdHJ1Y3QgZmlsZSAqZilcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4rLypcbisgKiBQb3B1bGF0ZSBzdHJ1Y3QgZmlsZVxuKyAqXG4rICogTk9URTogaXQgYXNzdW1lcyBmX3BhdGggaXMgcG9wdWxhdGVkIGFuZCBjb25zdW1lcyB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlLlxuKyAqL1xuIHN0YXRpYyBpbnQgZG9fZGVudHJ5X29wZW4oc3RydWN0IGZpbGUgKmYsXG4gXHRcdFx0ICBpbnQgKCpvcGVuKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKikpXG4ge1xuQEAgLTkzOCw3ICs5NDMsNiBAQCBzdGF0aWMgaW50IGRvX2RlbnRyeV9vcGVuKHN0cnVjdCBmaWxlICpmLFxuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGYtXHUwMDNlZl9wYXRoLmRlbnRyeS1cdTAwM2VkX2lub2RlO1xuIFx0aW50IGVycm9yO1xuIFxuLVx0cGF0aF9nZXQoXHUwMDI2Zi1cdTAwM2VmX3BhdGgpO1xuIFx0Zi1cdTAwM2VmX2lub2RlID0gaW5vZGU7XG4gXHRmLVx1MDAzZWZfbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbiBcdGYtXHUwMDNlZl93Yl9lcnIgPSBmaWxlbWFwX3NhbXBsZV93Yl9lcnIoZi1cdTAwM2VmX21hcHBpbmcpO1xuQEAgLTEwNTUsNiArMTA1OSw3IEBAIGludCBmaW5pc2hfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0QlVHX09OKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpOyAvKiBvbmNlIGl0J3Mgb3BlbmVkLCBpdCdzIG9wZW5lZCAqL1xuIFxuIFx0ZmlsZS1cdTAwM2VfX2ZfcGF0aC5kZW50cnkgPSBkZW50cnk7XG4rXHRwYXRoX2dldChcdTAwMjZmaWxlLVx1MDAzZWZfcGF0aCk7XG4gXHRyZXR1cm4gZG9fZGVudHJ5X29wZW4oZmlsZSwgb3Blbik7XG4gfVxuIEVYUE9SVF9TWU1CT0woZmluaXNoX29wZW4pO1xuQEAgLTEwOTgsNiArMTEwMyw3IEBAIGludCB2ZnNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRpbnQgcmV0O1xuIFxuIFx0ZmlsZS1cdTAwM2VfX2ZfcGF0aCA9ICpwYXRoO1xuK1x0cGF0aF9nZXQoXHUwMDI2ZmlsZS1cdTAwM2VmX3BhdGgpO1xuIFx0cmV0ID0gZG9fZGVudHJ5X29wZW4oZmlsZSwgTlVMTCk7XG4gXHRpZiAoIXJldCkge1xuIFx0XHQvKlxuQEAgLTExMTAsNiArMTExNiwyNSBAQCBpbnQgdmZzX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogdmZzX29wZW5fY29uc3VtZSAtIG9wZW4gdGhlIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGggYW5kIGNvbnN1bWUgdGhlIHJlZmVyZW5jZVxuKyAqIEBwYXRoOiBwYXRoIHRvIG9wZW5cbisgKiBAZmlsZTogbmV3bHkgYWxsb2NhdGVkIGZpbGUgd2l0aCBmX2ZsYWcgaW5pdGlhbGl6ZWRcbisgKi9cbitpbnQgdmZzX29wZW5fY29uc3VtZShzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGZpbGUtXHUwMDNlX19mX3BhdGggPSAqcGF0aDtcbitcdHBhdGgtXHUwMDNlbW50ID0gTlVMTDtcbitcdHBhdGgtXHUwMDNlZGVudHJ5ID0gTlVMTDtcbitcdHJldCA9IGRvX2RlbnRyeV9vcGVuKGZpbGUsIE5VTEwpO1xuK1x0aWYgKCFyZXQpIHtcbitcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbitcdH1cbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0cnVjdCBmaWxlICpkZW50cnlfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLFxuIFx0XHRcdCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcbiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowMDozMi4zMjg2MTczNDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTQ0NDM2NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgVkZTIFBhdGggUmVmZXJlbmNlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB0aGUgVmlydHVhbCBGaWxlIFN5c3RlbSAoVkZTKSBoYW5kbGVzIHBhdGggcmVmZXJlbmNlcywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgdmZzX29wZW5gIGFuZCBgZG9fZGVudHJ5X29wZW5gLiAgVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UsIGEgY29yZSBWRlMgYWx0ZXJhdGlvbiwgc28gaXQgaW1tZWRpYXRlbHkgc2NyZWFtcyBcInBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgYmVoYXZpb3JcIiBhbmQgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIG5ldyBmdW5jdGlvbiwgYHZmc19vcGVuX2NvbnN1bWVgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgbGluY2hwaW4g4oCTIGl0ICpjb25zdW1lcyogdGhlIHBhdGggcmVmZXJlbmNlLiBJdCB0aGVuIGdldHMgdXNlZCB3aXRoaW4gYGRvX29wZW5gIGluIGBmcy9uYW1laS5jYC4gIEkgc2VlIGNoYW5nZXMgaW4gYGRvX2RlbnRyeV9vcGVuYCB0byAqcmVtb3ZlKiBhIGBwYXRoX2dldGAgY2FsbCAoYHBhdGhfZ2V0KFx1MDAyNmYtXHUwMDNlZl9wYXRoKWApIGFuZCBpbiBgZmluaXNoX29wZW5gLCB0aGVyZSdzIGFuICphZGRpdGlvbiogKGBwYXRoX2dldChcdTAwMjZmaWxlLVx1MDAzZWZfcGF0aClgKS4gYHZmc19vcGVuYCBhbHNvIG5vdyBpbmNsdWRlcyBhIGBwYXRoX2dldGAuXG5cblNvLCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBkb19vcGVuYCwgYGRvX2RlbnRyeV9vcGVuYCwgYGZpbmlzaF9vcGVuYCwgYHZmc19vcGVuYCwgYW5kIHRoaXMgbmV3IGB2ZnNfb3Blbl9jb25zdW1lYC5cblxuUmlnaHQsIGxldCBtZSBkaWcgaW50byB0aGUgZGV0YWlscy4gSSBzZWUgdGhhdCBgZG9fb3BlbmAgaXMgc3RhdGljIGluIGBmcy9uYW1laS5jYCBhbmQgYGRvX2RlbnRyeV9vcGVuYCBpcyBhbHNvIHN0YXRpYyBpbiBgZnMvb3Blbi5jYC4gYHZmc19vcGVuX2NvbnN1bWVgLCBgZmluaXNoX29wZW5gIGFuZCBgdmZzX29wZW5gIGFyZSAqbm90KiBzdGF0aWMsIGFuZCBhcmUgaW4gYGZzL29wZW4uY2AuICBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGRvX29wZW5gIGFuZCBgZG9fZGVudHJ5X29wZW5gIGFyZW4ndCBpbmxpbmVkLCBhcyB0aGF0J3MgYSBrZXkgY29uc2lkZXJhdGlvbi5cblxuVGhlcmUgYXJlbid0IGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCB3b3VsZCBhZmZlY3QgdGhpcy4gVkZTIGlzIGFsd2F5cyBlbmFibGVkLCBzbyB0aGF0J3Mgb25lIGxlc3MgdGhpbmcgdG8gd29ycnkgYWJvdXQuXG5cbk5vdyBsZXQncyB2ZXJpZnkgdGhlc2UgZnVuY3Rpb25zLiBFdmVuIHRob3VnaCBgZG9fb3BlbmAgYW5kIGBkb19kZW50cnlfb3BlbmAgYXJlIHN0YXRpYywgdGhleSBhcmUgZ29vZCB0YXJnZXRzIGlmIHRoZXkgYXJlIG5vdCBpbmxpbmVkLiBgdmZzX29wZW5fY29uc3VtZWAgaXNuJ3QgZXhwb3J0ZWQuLi4gYnV0IHdhaXQsIGl0J3MgKmRlY2xhcmVkKiBpbiBgZnMvaW50ZXJuYWwuaGAuIEFoYSwgc28gaXQncyBpbnRlcm5hbCB0byB0aGUgYGZzL2AgZGlyZWN0b3J5LlxuXG5Pa2F5LCBzbyBsZXQncyBjb25zb2xpZGF0ZSB0aGUgdGFyZ2V0IGZ1bmN0aW9ucy5cbi0gYHZmc19vcGVuX2NvbnN1bWVgXG4tIGB2ZnNfb3BlbmBcbi0gYGZpbmlzaF9vcGVuYFxuLSBgZG9fZGVudHJ5X29wZW5gXG4tIGBkb19vcGVuYFxuXG5JIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgYGRvX29wZW5gIGFuZCBgZG9fZGVudHJ5X29wZW5gIGFyZSBhY3R1YWxseSBpbmxpbmVkIG9yIG5vdCBieSBsb29raW5nIGF0IHRoZWlyIHJlc3BlY3RpdmUgc291cmNlIGZpbGVzIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowMDo0MS44NzMwNjAwNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYxMDMxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT9pbnQgZG9fb3BlblxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25hbWVpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZWkuYz00NzM0PXN0YXRpYyBjb25zdCBjaGFyICpvcGVuX2xhc3RfbG9va3VwcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG4tLVxcbmZzL25hbWVpLmMtNDc4OC0gKi9cXG5mcy9uYW1laS5jOjQ3ODk6c3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbmZzL25hbWVpLmMtNDc5MC1cXHRcXHQgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowMDo0MS45NjkxNzEwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjY0MDQ2OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBjb25zaWRlcmluZyBJJ20gbG9va2luZyBhdCB0aGlzIGZyb20gYW4gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKlN0YXRpYyBGdW5jdGlvbiBPYnNlcnZhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgYm90aCBgZG9fb3BlbmAgYW5kIGBkb19kZW50cnlfb3BlbmAgYXJlIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYSBmZXcga2V5IHRoaW5ncywgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJ3MgYXJjaGl0ZWN0dXJlLiBCZWNhdXNlIHRoZXkncmUgc3RhdGljLCB0aGVpciBzY29wZSBpcyAqbGltaXRlZCogdG8gdGhlIGNvbXBpbGF0aW9uIHVuaXQgaW4gd2hpY2ggdGhleSdyZSBkZWZpbmVkLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZXJuYWwgaGVscGVyIHJvdXRpbmVzLCBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgZXhwb3NlZCBvciBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoYXQgc3BlY2lmaWMgbW9kdWxlIG9yIGZpbGUuIEknZCBleHBlY3QgdGhleSBhcmUgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHNvbWUgY29tbW9uLCBsb3ctbGV2ZWwgb3BlbiBvcGVyYXRpb24gcHJvY2VkdXJlcywgYnV0IHRoZWlyIGRldGFpbGVkIGZ1bmN0aW9uYWxpdHkgd291bGQgYmUgaGlkZGVuIGZyb20gZXh0ZXJuYWwgY29kZS4gVGhpcyBpc29sYXRpb24gaGVscHMgd2l0aCBtb2R1bGFyaXR5IGFuZCBwcmV2ZW50cyBhY2NpZGVudGFsLCB1bmludGVuZGVkIHVzZSBmcm9tIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsLiBUaGlzIGFsc28gc3VnZ2VzdHMsIEkgc2hvdWxkIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IGNhbGxpbmcgb3IgcmVmZXJlbmNpbmcgdGhlbSBmcm9tIGFub3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtIGRpcmVjdGx5IGFzIEkgZGVzaWduLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoZXkgYXJlIHVzZWQgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgb3BlbiBzeXN0ZW0gY2FsbCBpdHNlbGYuIEtub3dpbmcgdGhlaXIgc3RhdGljIG5hdHVyZSBwcm92aWRlcyBpbW1lZGlhdGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY2MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjAwOjQ3LjI5NTU4MjI3NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTg5NDI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApP2ludCBkb19kZW50cnlfb3BlblxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29wZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vcGVuLmM9OTEwPXN0YXRpYyBpbmxpbmUgaW50IGZpbGVfZ2V0X3dyaXRlX2FjY2VzcyhzdHJ1Y3QgZmlsZSAqZilcXG4tLVxcbmZzL29wZW4uYy05MzgtICovXFxuZnMvb3Blbi5jOjkzOTpzdGF0aWMgaW50IGRvX2RlbnRyeV9vcGVuKHN0cnVjdCBmaWxlICpmLFxcbmZzL29wZW4uYy05NDAtXFx0XFx0XFx0ICBpbnQgKCpvcGVuKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjAwOjQ3LjM3MTQ4MjU0NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjQ3MzYxNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFZGUyBGdW5jdGlvbiBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBuYWlsIGRvd24gd2hpY2ggVkZTIGZ1bmN0aW9ucyB3ZSBzaG91bGQgZm9jdXMgb24uIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgdG8gc2VlIHRoZSBrZXkgYXJjaGl0ZWN0dXJhbCBjb21wb25lbnRzLiBTbywgSSdtIHRoaW5raW5nIHdlIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgYHZmc19vcGVuX2NvbnN1bWVgLCBgdmZzX29wZW5gLCBhbmQgYGZpbmlzaF9vcGVuYC4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsLCBjb3JlIFZGUyBmdW5jdGlvbnMsIHRoYXQgYXJlIGVudHJ5cG9pbnRzIHRvIHRoZSBmaWxlIG9wZW4gb3BlcmF0aW9ucy4gV2hpbGUgYGRvX2RlbnRyeV9vcGVuYCBhbmQgYGRvX29wZW5gIGFyZSByZWxldmFudCB0b28sIHRoZXkgc2VlbSBsaWtlIHRoZXkgbWlnaHQgYmUgaW50ZXJuYWwgaGVscGVycywgYW5kIHdlIHdhbnQgdGhlIGV4dGVybmFsIEFQSSBlbnRyeSBwb2ludHMuIE5vIHNwZWNpYWwgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCwgdGhlc2UgYXJlIGFsbCBidWlsdC1pbi4gSnVzdCB0byBiZSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYHZmc19vcGVuX2NvbnN1bWVgIGxpdmVzIGluIGBmcy9vcGVuLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDUyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjAwOjU5LjAxODg0OTkyNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTIzODQxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCB2ZnNfb3Blbl9jb25zdW1lXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb3Blbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29wZW4uYz0xMTAxPWludCB2ZnNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5mcy9vcGVuLmMtMTEyMy0gKi9cXG5mcy9vcGVuLmM6MTEyNDppbnQgdmZzX29wZW5fY29uc3VtZShzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvb3Blbi5jLTExMjUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowMDo1OS4yNzEyNDE5NDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc1NzQzMTgyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipDb3JlIFZGUyBGaWxlIE9wZW5pbmcgVnVsbmVyYWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzLCBcIlllcCwgdGhpcyBpcyBzaWduaWZpY2FudC5cIiBJdCBzZWVtcyB0byBiZSB0b3VjaGluZyBmdW5kYW1lbnRhbCBmaWxlIG9wZW5pbmcgbG9naWMgd2l0aGluIHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpLCBzcGVjaWZpY2FsbHkgaG93IHBhdGggcmVmZXJlbmNlcyBhcmUgbWFuYWdlZCBkdXJpbmcgdGhlIGB2ZnNfb3BlbmAgYW5kIGBkb19kZW50cnlfb3BlbmAgcHJvY2Vzc2VzLiBUaGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IGZ1bmN0aW9uLCBgdmZzX29wZW5fY29uc3VtZWAsIGlzIHRoZSBrZXkgaW5kaWNhdG9yIGhlcmUuIFRoaXMgc2NyZWFtcyBcInBvdGVudGlhbCBmb3IgcmVmZXJlbmNlIGNvdW50aW5nIGJ1Z3MuXCJcblxuVGhlIGZhY3QgdGhhdCB0aGlzIHRvdWNoZXMgdGhlIGNvcmUga2VybmVsIG1lYW5zIGFueSBpc3N1ZSBoZXJlIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2VyLXNwYWNlIHRocm91Z2ggc3RhbmRhcmQgc3lzdGVtIGNhbGxzIGxpa2UgYG9wZW4oKWAgYW5kIGBvcGVuYXQoKWAuIFRoYXQgbWVhbnMgdGhpcyBpcyBhICpwcmltZSogY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBhYnNvbHV0ZWx5IG5lZWQgdG8gZW5zdXJlIHRoYXQgcmVmZXJlbmNlIGNvdW50aW5nIGlzIGJlaGF2aW5nIGNvcnJlY3RseSBhZnRlciB0aGlzIGNoYW5nZSB0byBwcm90ZWN0IGFnYWluc3QgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBhbmQgbWVtb3J5IGxlYWtzLiBUaGUgZmFjdCB0aGF0IG5vIHNwZWNpZmljIGNvbmZpZyBjaGFuZ2VzIGFyZSBuZWVkZWQgdGVsbHMgbWUgdGhpcyBpcyBiYWtlZCBpbnRvIGEgY29yZSBzeXN0ZW0uXG5cbk15IGZvY3VzIHNob3VsZCBiZSBvbiBgdmZzX29wZW5fY29uc3VtZWAgaXRzZWxmLCBidXQgSSBzaG91bGQgYWxzbyByZXZpZXcgYHZmc19vcGVuYCBhbmQgYGZpbmlzaF9vcGVuYCwgbWFraW5nIHN1cmUgdGhhdCB0aGUgZmxvdyBhcm91bmQgdGhlc2UgY3J1Y2lhbCBwb2ludHMgaXMgY29ycmVjdC5cblxuSSdtIHJlYWR5IHRvIG1hcmsgdGhlIHJlc3VsdHMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTI5LCJPdXRwdXRUb2tlbnMiOjEzNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowMTo0My4wMjg2NzcwNTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19vcGVuX2NvbnN1bWVcIixcbiAgICBcInZmc19vcGVuXCIsXG4gICAgXCJmaW5pc2hfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGZpbGUgb3BlbmluZyBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBwYXRoIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQgYW5kIGNvbnN1bWVkIGR1cmluZyB2ZnNfb3BlbiBhbmQgZG9fZGVudHJ5X29wZW4uIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gdmZzX29wZW5fY29uc3VtZS4gVGhpcyBpcyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBvcGVuL29wZW5hdCBzeXNjYWxscyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgcmVmZXJlbmNlIGNvdW50aW5nIGlzIGNvcnJlY3QgYW5kIG5vIHVzZS1hZnRlci1mcmVlIG9yIGxlYWtzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19vcGVuX2NvbnN1bWVcIixcbiAgICBcInZmc19vcGVuXCIsXG4gICAgXCJmaW5pc2hfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGZpbGUgb3BlbmluZyBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBwYXRoIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQgYW5kIGNvbnN1bWVkIGR1cmluZyB2ZnNfb3BlbiBhbmQgZG9fZGVudHJ5X29wZW4uIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gdmZzX29wZW5fY29uc3VtZS4gVGhpcyBpcyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBvcGVuL29wZW5hdCBzeXNjYWxscyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgcmVmZXJlbmNlIGNvdW50aW5nIGlzIGNvcnJlY3QgYW5kIG5vIHVzZS1hZnRlci1mcmVlIG9yIGxlYWtzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkx6qx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 16:22:07 +0000 UTC FinishedAt: 2026-08-03 17:01:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "415606a7be939835db9b0d6b711887586646346d", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "415606a7be939835db9b0d6b711887586646346d", "config_name": "upstream-apparmor-kasan.config", "series_id": "61d84e6e-340a-4e11-bea2-326196243223" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "vfs_open_consume", "vfs_open", "finish_open" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX29wZW5fY29uc3VtZSYjMzQ7LAogICAgJiMzNDt2ZnNfb3BlbiYjMzQ7LAogICAgJiMzNDtmaW5pc2hfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBmaWxlIG9wZW5pbmcgbG9naWMsIHNwZWNpZmljYWxseSBob3cgcGF0aCByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIGFuZCBjb25zdW1lZCBkdXJpbmcgdmZzX29wZW4gYW5kIGRvX2RlbnRyeV9vcGVuLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIHZmc19vcGVuX2NvbnN1bWUuIFRoaXMgaXMgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgb3Blbi9vcGVuYXQgc3lzY2FsbHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBjb3JyZWN0IGFuZCBubyB1c2UtYWZ0ZXItZnJlZSBvciBsZWFrcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNlMGExNjRjZjBkZTljOWI2MzQyNmRhNTcyMThhYjIyZjU4NDhhOTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjAwOjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oXG5pbmRleCBjNjU4YzhhNWViZDU2Li45NjMyMjM5MDM2YWNjIDEwMDY0NFxuLS0tIGEvZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW50ZXJuYWwuaFxuQEAgLTIwNSw2ICYjNDM7MjA1LDcgQEAgaW50IGRvX2ZjaG93bmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXAsXG4gXHRcdGludCBmbGFnKTtcbiBpbnQgY2hvd25fY29tbW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCB1aWRfdCB1c2VyLCBnaWRfdCBncm91cCk7XG4gZXh0ZXJuIGludCB2ZnNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqLCBzdHJ1Y3QgZmlsZSAqKTtcbiYjNDM7aW50IHZmc19vcGVuX2NvbnN1bWUoc3RydWN0IHBhdGggKiwgc3RydWN0IGZpbGUgKik7XG4gXG4gLypcbiAgKiBpbm9kZS5jXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDNmOWJmMTAzYmExMjYuLmY3MTQ4MWI5YmY4ZjcgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jXG5AQCAtNDc4OSw2ICYjNDM7NDc4OSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpvcGVuX2xhc3RfbG9va3VwcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRcdCAgIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG4ge1xuJiM0MztcdHN0cnVjdCB2ZnNtb3VudCAqbW50O1xuIFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXA7XG4gXHRpbnQgb3Blbl9mbGFnID0gb3AtXHUwMDNlb3Blbl9mbGFnO1xuIFx0Ym9vbCBkb190cnVuY2F0ZTtcbkBAIC00ODMwLDExICYjNDM7NDgzMSwxNyBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRcdGVycm9yID0gbW50X3dhbnRfd3JpdGUobmQtXHUwMDNlcGF0aC5tbnQpO1xuIFx0XHRpZiAoZXJyb3IpXG4gXHRcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEEgZGVkaWNhdGVkIHJlZmVyZW5jZSBpcyBuZWVkZWQgYmVjYXVzZSBhZnRlciB0aGUgY2FsbCB0b1xuJiM0MztcdFx0ICogdmZzX29wZW5fY29uc3VtZSgpIHdlIG5vIGxvbmdlciBvd24gdGhlIHJlZmVyZW5jZSBpbiBuZC1cdTAwM2VwYXRoLm1udFxuJiM0MztcdFx0ICogd2hpbGUgd2UgbmVlZCB0byB1bmRvIHdyaXRlIGFjZXNzIGJlbG93LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtbnQgPSBtbnRnZXQobmQtXHUwMDNlcGF0aC5tbnQpO1xuIFx0XHRkb190cnVuY2F0ZSA9IHRydWU7XG4gXHR9XG4gXHRlcnJvciA9IG1heV9vcGVuKGlkbWFwLCBcdTAwMjZuZC1cdTAwM2VwYXRoLCBhY2NfbW9kZSwgb3Blbl9mbGFnKTtcbiBcdGlmICghZXJyb3IgXHUwMDI2XHUwMDI2ICEoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRCkpXG4tXHRcdGVycm9yID0gdmZzX29wZW4oXHUwMDI2bmQtXHUwMDNlcGF0aCwgZmlsZSk7XG4mIzQzO1x0XHRlcnJvciA9IHZmc19vcGVuX2NvbnN1bWUoXHUwMDI2bmQtXHUwMDNlcGF0aCwgZmlsZSk7XG4gXHRpZiAoIWVycm9yKVxuIFx0XHRlcnJvciA9IHNlY3VyaXR5X2ZpbGVfcG9zdF9vcGVuKGZpbGUsIG9wLVx1MDAzZWFjY19tb2RlKTtcbiBcdGlmICghZXJyb3IgXHUwMDI2XHUwMDI2IGRvX3RydW5jYXRlKVxuQEAgLTQ4NDMsOCAmIzQzOzQ4NTAsMTAgQEAgc3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0XHRXQVJOX09OKDEpO1xuIFx0XHRlcnJvciA9IC1FSU5WQUw7XG4gXHR9XG4tXHRpZiAoZG9fdHJ1bmNhdGUpXG4tXHRcdG1udF9kcm9wX3dyaXRlKG5kLVx1MDAzZXBhdGgubW50KTtcbiYjNDM7XHRpZiAoZG9fdHJ1bmNhdGUpIHtcbiYjNDM7XHRcdG1udF9kcm9wX3dyaXRlKG1udCk7XG4mIzQzO1x0XHRtbnRwdXQobW50KTtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uY1xuaW5kZXggNmIxYzE0ZTY4NGE5My4uMmE3Njk3Y2VlMDBiYyAxMDA2NDRcbi0tLSBhL2ZzL29wZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb3Blbi5jXG5AQCAtOTMxLDYgJiM0Mzs5MzEsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgZmlsZV9nZXRfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICpmKVxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUG9wdWxhdGUgc3RydWN0IGZpbGVcbiYjNDM7ICpcbiYjNDM7ICogTk9URTogaXQgYXNzdW1lcyBmX3BhdGggaXMgcG9wdWxhdGVkIGFuZCBjb25zdW1lcyB0aGUgY2FsbGVyJiMzOTtzIHJlZmVyZW5jZS5cbiYjNDM7ICovXG4gc3RhdGljIGludCBkb19kZW50cnlfb3BlbihzdHJ1Y3QgZmlsZSAqZixcbiBcdFx0XHQgIGludCAoKm9wZW4pKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKSlcbiB7XG5AQCAtOTM4LDcgJiM0Mzs5NDMsNiBAQCBzdGF0aWMgaW50IGRvX2RlbnRyeV9vcGVuKHN0cnVjdCBmaWxlICpmLFxuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGYtXHUwMDNlZl9wYXRoLmRlbnRyeS1cdTAwM2VkX2lub2RlO1xuIFx0aW50IGVycm9yO1xuIFxuLVx0cGF0aF9nZXQoXHUwMDI2Zi1cdTAwM2VmX3BhdGgpO1xuIFx0Zi1cdTAwM2VmX2lub2RlID0gaW5vZGU7XG4gXHRmLVx1MDAzZWZfbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbiBcdGYtXHUwMDNlZl93Yl9lcnIgPSBmaWxlbWFwX3NhbXBsZV93Yl9lcnIoZi1cdTAwM2VmX21hcHBpbmcpO1xuQEAgLTEwNTUsNiAmIzQzOzEwNTksNyBAQCBpbnQgZmluaXNoX29wZW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdEJVR19PTihmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKTsgLyogb25jZSBpdCYjMzk7cyBvcGVuZWQsIGl0JiMzOTtzIG9wZW5lZCAqL1xuIFxuIFx0ZmlsZS1cdTAwM2VfX2ZfcGF0aC5kZW50cnkgPSBkZW50cnk7XG4mIzQzO1x0cGF0aF9nZXQoXHUwMDI2ZmlsZS1cdTAwM2VmX3BhdGgpO1xuIFx0cmV0dXJuIGRvX2RlbnRyeV9vcGVuKGZpbGUsIG9wZW4pO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGZpbmlzaF9vcGVuKTtcbkBAIC0xMDk4LDYgJiM0MzsxMTAzLDcgQEAgaW50IHZmc19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdGludCByZXQ7XG4gXG4gXHRmaWxlLVx1MDAzZV9fZl9wYXRoID0gKnBhdGg7XG4mIzQzO1x0cGF0aF9nZXQoXHUwMDI2ZmlsZS1cdTAwM2VmX3BhdGgpO1xuIFx0cmV0ID0gZG9fZGVudHJ5X29wZW4oZmlsZSwgTlVMTCk7XG4gXHRpZiAoIXJldCkge1xuIFx0XHQvKlxuQEAgLTExMTAsNiAmIzQzOzExMTYsMjUgQEAgaW50IHZmc19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogdmZzX29wZW5fY29uc3VtZSAtIG9wZW4gdGhlIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGggYW5kIGNvbnN1bWUgdGhlIHJlZmVyZW5jZVxuJiM0MzsgKiBAcGF0aDogcGF0aCB0byBvcGVuXG4mIzQzOyAqIEBmaWxlOiBuZXdseSBhbGxvY2F0ZWQgZmlsZSB3aXRoIGZfZmxhZyBpbml0aWFsaXplZFxuJiM0MzsgKi9cbiYjNDM7aW50IHZmc19vcGVuX2NvbnN1bWUoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZmlsZS1cdTAwM2VfX2ZfcGF0aCA9ICpwYXRoO1xuJiM0MztcdHBhdGgtXHUwMDNlbW50ID0gTlVMTDtcbiYjNDM7XHRwYXRoLVx1MDAzZWRlbnRyeSA9IE5VTEw7XG4mIzQzO1x0cmV0ID0gZG9fZGVudHJ5X29wZW4oZmlsZSwgTlVMTCk7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdGZzbm90aWZ5X29wZW4oZmlsZSk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGZpbGUgKmRlbnRyeV9vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsXG4gXHRcdFx0IGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKVxuIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfb3Blbl9jb25zdW1lJiMzNDssCiAgICAmIzM0O3Zmc19vcGVuJiMzNDssCiAgICAmIzM0O2ZpbmlzaF9vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGZpbGUgb3BlbmluZyBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBwYXRoIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQgYW5kIGNvbnN1bWVkIGR1cmluZyB2ZnNfb3BlbiBhbmQgZG9fZGVudHJ5X29wZW4uIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gdmZzX29wZW5fY29uc3VtZS4gVGhpcyBpcyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBvcGVuL29wZW5hdCBzeXNjYWxscyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgcmVmZXJlbmNlIGNvdW50aW5nIGlzIGNvcnJlY3QgYW5kIG5vIHVzZS1hZnRlci1mcmVlIG9yIGxlYWtzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2UwYTE2NGNmMGRlOWM5YjYzNDI2ZGE1NzIxOGFiMjJmNTg0OGE5MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMTc6MDA6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaAppbmRleCBjNjU4YzhhNWViZDU2Li45NjMyMjM5MDM2YWNjIDEwMDY0NAotLS0gYS9mcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ludGVybmFsLmgKQEAgLTIwNSw2ICYjNDM7MjA1LDcgQEAgaW50IGRvX2ZjaG93bmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXAsCiAJCWludCBmbGFnKTsKIGludCBjaG93bl9jb21tb24oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHVpZF90IHVzZXIsIGdpZF90IGdyb3VwKTsKIGV4dGVybiBpbnQgdmZzX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKiwgc3RydWN0IGZpbGUgKik7CiYjNDM7aW50IHZmc19vcGVuX2NvbnN1bWUoc3RydWN0IHBhdGggKiwgc3RydWN0IGZpbGUgKik7CiAKIC8qCiAgKiBpbm9kZS5jCmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAzZjliZjEwM2JhMTI2Li5mNzE0ODFiOWJmOGY3IDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTQ3ODksNiAmIzQzOzQ3ODksNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsCiBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsCiAJCSAgIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApCiB7CiYjNDM7CXN0cnVjdCB2ZnNtb3VudCAqbW50OwogCXN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwOwogCWludCBvcGVuX2ZsYWcgPSBvcC0mZ3Q7b3Blbl9mbGFnOwogCWJvb2wgZG9fdHJ1bmNhdGU7CkBAIC00ODMwLDExICYjNDM7NDgzMSwxNyBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsCiAJCWVycm9yID0gbW50X3dhbnRfd3JpdGUobmQtJmd0O3BhdGgubW50KTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwomIzQzOwkJLyoKJiM0MzsJCSAqIEEgZGVkaWNhdGVkIHJlZmVyZW5jZSBpcyBuZWVkZWQgYmVjYXVzZSBhZnRlciB0aGUgY2FsbCB0bwomIzQzOwkJICogdmZzX29wZW5fY29uc3VtZSgpIHdlIG5vIGxvbmdlciBvd24gdGhlIHJlZmVyZW5jZSBpbiBuZC0mZ3Q7cGF0aC5tbnQKJiM0MzsJCSAqIHdoaWxlIHdlIG5lZWQgdG8gdW5kbyB3cml0ZSBhY2VzcyBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJbW50ID0gbW50Z2V0KG5kLSZndDtwYXRoLm1udCk7CiAJCWRvX3RydW5jYXRlID0gdHJ1ZTsKIAl9CiAJZXJyb3IgPSBtYXlfb3BlbihpZG1hcCwgJmFtcDtuZC0mZ3Q7cGF0aCwgYWNjX21vZGUsIG9wZW5fZmxhZyk7CiAJaWYgKCFlcnJvciAmYW1wOyZhbXA7ICEoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX09QRU5FRCkpCi0JCWVycm9yID0gdmZzX29wZW4oJmFtcDtuZC0mZ3Q7cGF0aCwgZmlsZSk7CiYjNDM7CQllcnJvciA9IHZmc19vcGVuX2NvbnN1bWUoJmFtcDtuZC0mZ3Q7cGF0aCwgZmlsZSk7CiAJaWYgKCFlcnJvcikKIAkJZXJyb3IgPSBzZWN1cml0eV9maWxlX3Bvc3Rfb3BlbihmaWxlLCBvcC0mZ3Q7YWNjX21vZGUpOwogCWlmICghZXJyb3IgJmFtcDsmYW1wOyBkb190cnVuY2F0ZSkKQEAgLTQ4NDMsOCAmIzQzOzQ4NTAsMTAgQEAgc3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLAogCQlXQVJOX09OKDEpOwogCQllcnJvciA9IC1FSU5WQUw7CiAJfQotCWlmIChkb190cnVuY2F0ZSkKLQkJbW50X2Ryb3Bfd3JpdGUobmQtJmd0O3BhdGgubW50KTsKJiM0MzsJaWYgKGRvX3RydW5jYXRlKSB7CiYjNDM7CQltbnRfZHJvcF93cml0ZShtbnQpOwomIzQzOwkJbW50cHV0KG1udCk7CiYjNDM7CX0KIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCA2YjFjMTRlNjg0YTkzLi4yYTc2OTdjZWUwMGJjIDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb3Blbi5jCkBAIC05MzEsNiAmIzQzOzkzMSwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBmaWxlX2dldF93cml0ZV9hY2Nlc3Moc3RydWN0IGZpbGUgKmYpCiAJcmV0dXJuIGVycm9yOwogfQogCiYjNDM7LyoKJiM0MzsgKiBQb3B1bGF0ZSBzdHJ1Y3QgZmlsZQomIzQzOyAqCiYjNDM7ICogTk9URTogaXQgYXNzdW1lcyBmX3BhdGggaXMgcG9wdWxhdGVkIGFuZCBjb25zdW1lcyB0aGUgY2FsbGVyJiMzOTtzIHJlZmVyZW5jZS4KJiM0MzsgKi8KIHN0YXRpYyBpbnQgZG9fZGVudHJ5X29wZW4oc3RydWN0IGZpbGUgKmYsCiAJCQkgIGludCAoKm9wZW4pKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKSkKIHsKQEAgLTkzOCw3ICYjNDM7OTQzLDYgQEAgc3RhdGljIGludCBkb19kZW50cnlfb3BlbihzdHJ1Y3QgZmlsZSAqZiwKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZi0mZ3Q7Zl9wYXRoLmRlbnRyeS0mZ3Q7ZF9pbm9kZTsKIAlpbnQgZXJyb3I7CiAKLQlwYXRoX2dldCgmYW1wO2YtJmd0O2ZfcGF0aCk7CiAJZi0mZ3Q7Zl9pbm9kZSA9IGlub2RlOwogCWYtJmd0O2ZfbWFwcGluZyA9IGlub2RlLSZndDtpX21hcHBpbmc7CiAJZi0mZ3Q7Zl93Yl9lcnIgPSBmaWxlbWFwX3NhbXBsZV93Yl9lcnIoZi0mZ3Q7Zl9tYXBwaW5nKTsKQEAgLTEwNTUsNiAmIzQzOzEwNTksNyBAQCBpbnQgZmluaXNoX29wZW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAlCVUdfT04oZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX09QRU5FRCk7IC8qIG9uY2UgaXQmIzM5O3Mgb3BlbmVkLCBpdCYjMzk7cyBvcGVuZWQgKi8KIAogCWZpbGUtJmd0O19fZl9wYXRoLmRlbnRyeSA9IGRlbnRyeTsKJiM0MzsJcGF0aF9nZXQoJmFtcDtmaWxlLSZndDtmX3BhdGgpOwogCXJldHVybiBkb19kZW50cnlfb3BlbihmaWxlLCBvcGVuKTsKIH0KIEVYUE9SVF9TWU1CT0woZmluaXNoX29wZW4pOwpAQCAtMTA5OCw2ICYjNDM7MTEwMyw3IEBAIGludCB2ZnNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGZpbGUgKmZpbGUpCiAJaW50IHJldDsKIAogCWZpbGUtJmd0O19fZl9wYXRoID0gKnBhdGg7CiYjNDM7CXBhdGhfZ2V0KCZhbXA7ZmlsZS0mZ3Q7Zl9wYXRoKTsKIAlyZXQgPSBkb19kZW50cnlfb3BlbihmaWxlLCBOVUxMKTsKIAlpZiAoIXJldCkgewogCQkvKgpAQCAtMTExMCw2ICYjNDM7MTExNiwyNSBAQCBpbnQgdmZzX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB2ZnNfb3Blbl9jb25zdW1lIC0gb3BlbiB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCBhbmQgY29uc3VtZSB0aGUgcmVmZXJlbmNlCiYjNDM7ICogQHBhdGg6IHBhdGggdG8gb3BlbgomIzQzOyAqIEBmaWxlOiBuZXdseSBhbGxvY2F0ZWQgZmlsZSB3aXRoIGZfZmxhZyBpbml0aWFsaXplZAomIzQzOyAqLwomIzQzO2ludCB2ZnNfb3Blbl9jb25zdW1lKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWZpbGUtJmd0O19fZl9wYXRoID0gKnBhdGg7CiYjNDM7CXBhdGgtJmd0O21udCA9IE5VTEw7CiYjNDM7CXBhdGgtJmd0O2RlbnRyeSA9IE5VTEw7CiYjNDM7CXJldCA9IGRvX2RlbnRyeV9vcGVuKGZpbGUsIE5VTEwpOwomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJZnNub3RpZnlfb3BlbihmaWxlKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHN0cnVjdCBmaWxlICpkZW50cnlfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLAogCQkJIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKQogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvcmUgVkZTIFBhdGggUmVmZXJlbmNlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpIGhhbmRsZXMgcGF0aCByZWZlcmVuY2VzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGB2ZnNfb3BlbmAgYW5kIGBkb19kZW50cnlfb3BlbmAuICBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgYSBjb3JlIFZGUyBhbHRlcmF0aW9uLCBzbyBpdCBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIGZvciBpbnRlcmVzdGluZyBiZWhhdmlvciYjMzQ7IGFuZCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIG5ldyBmdW5jdGlvbiwgYHZmc19vcGVuX2NvbnN1bWVgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgbGluY2hwaW4g4oCTIGl0ICpjb25zdW1lcyogdGhlIHBhdGggcmVmZXJlbmNlLiBJdCB0aGVuIGdldHMgdXNlZCB3aXRoaW4gYGRvX29wZW5gIGluIGBmcy9uYW1laS5jYC4gIEkgc2VlIGNoYW5nZXMgaW4gYGRvX2RlbnRyeV9vcGVuYCB0byAqcmVtb3ZlKiBhIGBwYXRoX2dldGAgY2FsbCAoYHBhdGhfZ2V0KCZhbXA7Zi0mZ3Q7Zl9wYXRoKWApIGFuZCBpbiBgZmluaXNoX29wZW5gLCB0aGVyZSYjMzk7cyBhbiAqYWRkaXRpb24qIChgcGF0aF9nZXQoJmFtcDtmaWxlLSZndDtmX3BhdGgpYCkuIGB2ZnNfb3BlbmAgYWxzbyBub3cgaW5jbHVkZXMgYSBgcGF0aF9nZXRgLgoKU28sIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZTogYGRvX29wZW5gLCBgZG9fZGVudHJ5X29wZW5gLCBgZmluaXNoX29wZW5gLCBgdmZzX29wZW5gLCBhbmQgdGhpcyBuZXcgYHZmc19vcGVuX2NvbnN1bWVgLgoKUmlnaHQsIGxldCBtZSBkaWcgaW50byB0aGUgZGV0YWlscy4gSSBzZWUgdGhhdCBgZG9fb3BlbmAgaXMgc3RhdGljIGluIGBmcy9uYW1laS5jYCBhbmQgYGRvX2RlbnRyeV9vcGVuYCBpcyBhbHNvIHN0YXRpYyBpbiBgZnMvb3Blbi5jYC4gYHZmc19vcGVuX2NvbnN1bWVgLCBgZmluaXNoX29wZW5gIGFuZCBgdmZzX29wZW5gIGFyZSAqbm90KiBzdGF0aWMsIGFuZCBhcmUgaW4gYGZzL29wZW4uY2AuICBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGRvX29wZW5gIGFuZCBgZG9fZGVudHJ5X29wZW5gIGFyZW4mIzM5O3QgaW5saW5lZCwgYXMgdGhhdCYjMzk7cyBhIGtleSBjb25zaWRlcmF0aW9uLgoKVGhlcmUgYXJlbiYjMzk7dCBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgd291bGQgYWZmZWN0IHRoaXMuIFZGUyBpcyBhbHdheXMgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyBvbmUgbGVzcyB0aGluZyB0byB3b3JyeSBhYm91dC4KCk5vdyBsZXQmIzM5O3MgdmVyaWZ5IHRoZXNlIGZ1bmN0aW9ucy4gRXZlbiB0aG91Z2ggYGRvX29wZW5gIGFuZCBgZG9fZGVudHJ5X29wZW5gIGFyZSBzdGF0aWMsIHRoZXkgYXJlIGdvb2QgdGFyZ2V0cyBpZiB0aGV5IGFyZSBub3QgaW5saW5lZC4gYHZmc19vcGVuX2NvbnN1bWVgIGlzbiYjMzk7dCBleHBvcnRlZC4uLiBidXQgd2FpdCwgaXQmIzM5O3MgKmRlY2xhcmVkKiBpbiBgZnMvaW50ZXJuYWwuaGAuIEFoYSwgc28gaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhlIGBmcy9gIGRpcmVjdG9yeS4KCk9rYXksIHNvIGxldCYjMzk7cyBjb25zb2xpZGF0ZSB0aGUgdGFyZ2V0IGZ1bmN0aW9ucy4KLSBgdmZzX29wZW5fY29uc3VtZWAKLSBgdmZzX29wZW5gCi0gYGZpbmlzaF9vcGVuYAotIGBkb19kZW50cnlfb3BlbmAKLSBgZG9fb3BlbmAKCkkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gd2hldGhlciBgZG9fb3BlbmAgYW5kIGBkb19kZW50cnlfb3BlbmAgYXJlIGFjdHVhbGx5IGlubGluZWQgb3Igbm90IGJ5IGxvb2tpbmcgYXQgdGhlaXIgcmVzcGVjdGl2ZSBzb3VyY2UgZmlsZXMgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApP2ludCBkb19vcGVuXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uYW1laS5jPTQ3MzQ9c3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fbGFzdF9sb29rdXBzKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuLS1cbmZzL25hbWVpLmMtNDc4OC0gKi9cbmZzL25hbWVpLmM6NDc4OTpzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG5mcy9uYW1laS5jLTQ3OTAtXHRcdCAgIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY2MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGNvbnNpZGVyaW5nIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGZyb20gYW4gZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipTdGF0aWMgRnVuY3Rpb24gT2JzZXJ2YXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgYm90aCBgZG9fb3BlbmAgYW5kIGBkb19kZW50cnlfb3BlbmAgYXJlIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYSBmZXcga2V5IHRoaW5ncywgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZS4gQmVjYXVzZSB0aGV5JiMzOTtyZSBzdGF0aWMsIHRoZWlyIHNjb3BlIGlzICpsaW1pdGVkKiB0byB0aGUgY29tcGlsYXRpb24gdW5pdCBpbiB3aGljaCB0aGV5JiMzOTtyZSBkZWZpbmVkLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZXJuYWwgaGVscGVyIHJvdXRpbmVzLCBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgZXhwb3NlZCBvciBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoYXQgc3BlY2lmaWMgbW9kdWxlIG9yIGZpbGUuIEkmIzM5O2QgZXhwZWN0IHRoZXkgYXJlIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBzb21lIGNvbW1vbiwgbG93LWxldmVsIG9wZW4gb3BlcmF0aW9uIHByb2NlZHVyZXMsIGJ1dCB0aGVpciBkZXRhaWxlZCBmdW5jdGlvbmFsaXR5IHdvdWxkIGJlIGhpZGRlbiBmcm9tIGV4dGVybmFsIGNvZGUuIFRoaXMgaXNvbGF0aW9uIGhlbHBzIHdpdGggbW9kdWxhcml0eSBhbmQgcHJldmVudHMgYWNjaWRlbnRhbCwgdW5pbnRlbmRlZCB1c2UgZnJvbSBlbHNld2hlcmUgaW4gdGhlIGtlcm5lbC4gVGhpcyBhbHNvIHN1Z2dlc3RzLCBJIHNob3VsZCBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBjYWxsaW5nIG9yIHJlZmVyZW5jaW5nIHRoZW0gZnJvbSBhbm90aGVyIHBhcnQgb2YgdGhlIHN5c3RlbSBkaXJlY3RseSBhcyBJIGRlc2lnbi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhleSBhcmUgdXNlZCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBvcGVuIHN5c3RlbSBjYWxsIGl0c2VsZi4gS25vd2luZyB0aGVpciBzdGF0aWMgbmF0dXJlIHByb3ZpZGVzIGltbWVkaWF0ZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/aW50IGRvX2RlbnRyeV9vcGVuXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb3Blbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29wZW4uYz05MTA9c3RhdGljIGlubGluZSBpbnQgZmlsZV9nZXRfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICpmKVxuLS1cbmZzL29wZW4uYy05MzgtICovXG5mcy9vcGVuLmM6OTM5OnN0YXRpYyBpbnQgZG9fZGVudHJ5X29wZW4oc3RydWN0IGZpbGUgKmYsXG5mcy9vcGVuLmMtOTQwLVx0XHRcdCAgaW50ICgqb3Blbikoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVkZTIEZ1bmN0aW9uIFNlbGVjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoaWNoIFZGUyBmdW5jdGlvbnMgd2Ugc2hvdWxkIGZvY3VzIG9uLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIHNlbnNlOyB3ZSB3YW50IHRvIHNlZSB0aGUga2V5IGFyY2hpdGVjdHVyYWwgY29tcG9uZW50cy4gU28sIEkmIzM5O20gdGhpbmtpbmcgd2Ugc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSBgdmZzX29wZW5fY29uc3VtZWAsIGB2ZnNfb3BlbmAsIGFuZCBgZmluaXNoX29wZW5gLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwsIGNvcmUgVkZTIGZ1bmN0aW9ucywgdGhhdCBhcmUgZW50cnlwb2ludHMgdG8gdGhlIGZpbGUgb3BlbiBvcGVyYXRpb25zLiBXaGlsZSBgZG9fZGVudHJ5X29wZW5gIGFuZCBgZG9fb3BlbmAgYXJlIHJlbGV2YW50IHRvbywgdGhleSBzZWVtIGxpa2UgdGhleSBtaWdodCBiZSBpbnRlcm5hbCBoZWxwZXJzLCBhbmQgd2Ugd2FudCB0aGUgZXh0ZXJuYWwgQVBJIGVudHJ5IHBvaW50cy4gTm8gc3BlY2lhbCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLCB0aGVzZSBhcmUgYWxsIGJ1aWx0LWluLiBKdXN0IHRvIGJlIHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYHZmc19vcGVuX2NvbnN1bWVgIGxpdmVzIGluIGBmcy9vcGVuLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgdmZzX29wZW5fY29uc3VtZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29wZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vcGVuLmM9MTEwMT1pbnQgdmZzX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL29wZW4uYy0xMTIzLSAqL1xuZnMvb3Blbi5jOjExMjQ6aW50IHZmc19vcGVuX2NvbnN1bWUoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvb3Blbi5jLTExMjUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MjkKCQkJCQkJCW91dHB1dDogMTM2CgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjoKCioqQ29yZSBWRlMgRmlsZSBPcGVuaW5nIFZ1bG5lcmFiaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzLCAmIzM0O1llcCwgdGhpcyBpcyBzaWduaWZpY2FudC4mIzM0OyBJdCBzZWVtcyB0byBiZSB0b3VjaGluZyBmdW5kYW1lbnRhbCBmaWxlIG9wZW5pbmcgbG9naWMgd2l0aGluIHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpLCBzcGVjaWZpY2FsbHkgaG93IHBhdGggcmVmZXJlbmNlcyBhcmUgbWFuYWdlZCBkdXJpbmcgdGhlIGB2ZnNfb3BlbmAgYW5kIGBkb19kZW50cnlfb3BlbmAgcHJvY2Vzc2VzLiBUaGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IGZ1bmN0aW9uLCBgdmZzX29wZW5fY29uc3VtZWAsIGlzIHRoZSBrZXkgaW5kaWNhdG9yIGhlcmUuIFRoaXMgc2NyZWFtcyAmIzM0O3BvdGVudGlhbCBmb3IgcmVmZXJlbmNlIGNvdW50aW5nIGJ1Z3MuJiMzNDsKClRoZSBmYWN0IHRoYXQgdGhpcyB0b3VjaGVzIHRoZSBjb3JlIGtlcm5lbCBtZWFucyBhbnkgaXNzdWUgaGVyZSBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlci1zcGFjZSB0aHJvdWdoIHN0YW5kYXJkIHN5c3RlbSBjYWxscyBsaWtlIGBvcGVuKClgIGFuZCBgb3BlbmF0KClgLiBUaGF0IG1lYW5zIHRoaXMgaXMgYSAqcHJpbWUqIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gV2UgYWJzb2x1dGVseSBuZWVkIHRvIGVuc3VyZSB0aGF0IHJlZmVyZW5jZSBjb3VudGluZyBpcyBiZWhhdmluZyBjb3JyZWN0bHkgYWZ0ZXIgdGhpcyBjaGFuZ2UgdG8gcHJvdGVjdCBhZ2FpbnN0IHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeSBsZWFrcy4gVGhlIGZhY3QgdGhhdCBubyBzcGVjaWZpYyBjb25maWcgY2hhbmdlcyBhcmUgbmVlZGVkIHRlbGxzIG1lIHRoaXMgaXMgYmFrZWQgaW50byBhIGNvcmUgc3lzdGVtLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGB2ZnNfb3Blbl9jb25zdW1lYCBpdHNlbGYsIGJ1dCBJIHNob3VsZCBhbHNvIHJldmlldyBgdmZzX29wZW5gIGFuZCBgZmluaXNoX29wZW5gLCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBmbG93IGFyb3VuZCB0aGVzZSBjcnVjaWFsIHBvaW50cyBpcyBjb3JyZWN0LgoKSSYjMzk7bSByZWFkeSB0byBtYXJrIHRoZSByZXN1bHRzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19vcGVuX2NvbnN1bWUmIzM0OywKICAgICYjMzQ7dmZzX29wZW4mIzM0OywKICAgICYjMzQ7ZmluaXNoX29wZW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgZmlsZSBvcGVuaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IHBhdGggcmVmZXJlbmNlcyBhcmUgaGFuZGxlZCBhbmQgY29uc3VtZWQgZHVyaW5nIHZmc19vcGVuIGFuZCBkb19kZW50cnlfb3Blbi4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiB2ZnNfb3Blbl9jb25zdW1lLiBUaGlzIGlzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG9wZW4vb3BlbmF0IHN5c2NhbGxzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSByZWZlcmVuY2UgY291bnRpbmcgaXMgY29ycmVjdCBhbmQgbm8gdXNlLWFmdGVyLWZyZWUgb3IgbGVha3Mgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX29wZW5fY29uc3VtZSYjMzQ7LAogICAgJiMzNDt2ZnNfb3BlbiYjMzQ7LAogICAgJiMzNDtmaW5pc2hfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBmaWxlIG9wZW5pbmcgbG9naWMsIHNwZWNpZmljYWxseSBob3cgcGF0aCByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIGFuZCBjb25zdW1lZCBkdXJpbmcgdmZzX29wZW4gYW5kIGRvX2RlbnRyeV9vcGVuLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIHZmc19vcGVuX2NvbnN1bWUuIFRoaXMgaXMgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgb3Blbi9vcGVuYXQgc3lzY2FsbHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBjb3JyZWN0IGFuZCBubyB1c2UtYWZ0ZXItZnJlZSBvciBsZWFrcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjAwOjMxLjkwMjIxNDg0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzExMjY1MTc5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX29wZW5fY29uc3VtZVwiLFxuICAgIFwidmZzX29wZW5cIixcbiAgICBcImZpbmlzaF9vcGVuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgZmlsZSBvcGVuaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IHBhdGggcmVmZXJlbmNlcyBhcmUgaGFuZGxlZCBhbmQgY29uc3VtZWQgZHVyaW5nIHZmc19vcGVuIGFuZCBkb19kZW50cnlfb3Blbi4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiB2ZnNfb3Blbl9jb25zdW1lLiBUaGlzIGlzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG9wZW4vb3BlbmF0IHN5c2NhbGxzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSByZWZlcmVuY2UgY291bnRpbmcgaXMgY29ycmVjdCBhbmQgbm8gdXNlLWFmdGVyLWZyZWUgb3IgbGVha3Mgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjAwOjMxLjkwMjIyMzAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUzMTU0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZTBhMTY0Y2YwZGU5YzliNjM0MjZkYTU3MjE4YWIyMmY1ODQ4YTkyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMgMTc6MDA6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmhcXG5pbmRleCBjNjU4YzhhNWViZDU2Li45NjMyMjM5MDM2YWNjIDEwMDY0NFxcbi0tLSBhL2ZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9pbnRlcm5hbC5oXFxuQEAgLTIwNSw2ICsyMDUsNyBAQCBpbnQgZG9fZmNob3duYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1aWRfdCB1c2VyLCBnaWRfdCBncm91cCxcXG4gXFx0XFx0aW50IGZsYWcpO1xcbiBpbnQgY2hvd25fY29tbW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCB1aWRfdCB1c2VyLCBnaWRfdCBncm91cCk7XFxuIGV4dGVybiBpbnQgdmZzX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKiwgc3RydWN0IGZpbGUgKik7XFxuK2ludCB2ZnNfb3Blbl9jb25zdW1lKHN0cnVjdCBwYXRoICosIHN0cnVjdCBmaWxlICopO1xcbiBcXG4gLypcXG4gICogaW5vZGUuY1xcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xcbmluZGV4IDNmOWJmMTAzYmExMjYuLmY3MTQ4MWI5YmY4ZjcgMTAwNjQ0XFxuLS0tIGEvZnMvbmFtZWkuY1xcbisrKyBiL2ZzL25hbWVpLmNcXG5AQCAtNDc4OSw2ICs0Nzg5LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fbGFzdF9sb29rdXBzKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbiBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdFxcdCAgIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXFxuIHtcXG4rXFx0c3RydWN0IHZmc21vdW50ICptbnQ7XFxuIFxcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xcbiBcXHRpbnQgb3Blbl9mbGFnID0gb3AtXFx1MDAzZW9wZW5fZmxhZztcXG4gXFx0Ym9vbCBkb190cnVuY2F0ZTtcXG5AQCAtNDgzMCwxMSArNDgzMSwxNyBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdFxcdGVycm9yID0gbW50X3dhbnRfd3JpdGUobmQtXFx1MDAzZXBhdGgubW50KTtcXG4gXFx0XFx0aWYgKGVycm9yKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgZGVkaWNhdGVkIHJlZmVyZW5jZSBpcyBuZWVkZWQgYmVjYXVzZSBhZnRlciB0aGUgY2FsbCB0b1xcbitcXHRcXHQgKiB2ZnNfb3Blbl9jb25zdW1lKCkgd2Ugbm8gbG9uZ2VyIG93biB0aGUgcmVmZXJlbmNlIGluIG5kLVxcdTAwM2VwYXRoLm1udFxcbitcXHRcXHQgKiB3aGlsZSB3ZSBuZWVkIHRvIHVuZG8gd3JpdGUgYWNlc3MgYmVsb3cuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtbnQgPSBtbnRnZXQobmQtXFx1MDAzZXBhdGgubW50KTtcXG4gXFx0XFx0ZG9fdHJ1bmNhdGUgPSB0cnVlO1xcbiBcXHR9XFxuIFxcdGVycm9yID0gbWF5X29wZW4oaWRtYXAsIFxcdTAwMjZuZC1cXHUwMDNlcGF0aCwgYWNjX21vZGUsIG9wZW5fZmxhZyk7XFxuIFxcdGlmICghZXJyb3IgXFx1MDAyNlxcdTAwMjYgIShmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9PUEVORUQpKVxcbi1cXHRcXHRlcnJvciA9IHZmc19vcGVuKFxcdTAwMjZuZC1cXHUwMDNlcGF0aCwgZmlsZSk7XFxuK1xcdFxcdGVycm9yID0gdmZzX29wZW5fY29uc3VtZShcXHUwMDI2bmQtXFx1MDAzZXBhdGgsIGZpbGUpO1xcbiBcXHRpZiAoIWVycm9yKVxcbiBcXHRcXHRlcnJvciA9IHNlY3VyaXR5X2ZpbGVfcG9zdF9vcGVuKGZpbGUsIG9wLVxcdTAwM2VhY2NfbW9kZSk7XFxuIFxcdGlmICghZXJyb3IgXFx1MDAyNlxcdTAwMjYgZG9fdHJ1bmNhdGUpXFxuQEAgLTQ4NDMsOCArNDg1MCwxMCBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdFxcdFdBUk5fT04oMSk7XFxuIFxcdFxcdGVycm9yID0gLUVJTlZBTDtcXG4gXFx0fVxcbi1cXHRpZiAoZG9fdHJ1bmNhdGUpXFxuLVxcdFxcdG1udF9kcm9wX3dyaXRlKG5kLVxcdTAwM2VwYXRoLm1udCk7XFxuK1xcdGlmIChkb190cnVuY2F0ZSkge1xcbitcXHRcXHRtbnRfZHJvcF93cml0ZShtbnQpO1xcbitcXHRcXHRtbnRwdXQobW50KTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uY1xcbmluZGV4IDZiMWMxNGU2ODRhOTMuLjJhNzY5N2NlZTAwYmMgMTAwNjQ0XFxuLS0tIGEvZnMvb3Blbi5jXFxuKysrIGIvZnMvb3Blbi5jXFxuQEAgLTkzMSw2ICs5MzEsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgZmlsZV9nZXRfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICpmKVxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFBvcHVsYXRlIHN0cnVjdCBmaWxlXFxuKyAqXFxuKyAqIE5PVEU6IGl0IGFzc3VtZXMgZl9wYXRoIGlzIHBvcHVsYXRlZCBhbmQgY29uc3VtZXMgdGhlIGNhbGxlcidzIHJlZmVyZW5jZS5cXG4rICovXFxuIHN0YXRpYyBpbnQgZG9fZGVudHJ5X29wZW4oc3RydWN0IGZpbGUgKmYsXFxuIFxcdFxcdFxcdCAgaW50ICgqb3Blbikoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopKVxcbiB7XFxuQEAgLTkzOCw3ICs5NDMsNiBAQCBzdGF0aWMgaW50IGRvX2RlbnRyeV9vcGVuKHN0cnVjdCBmaWxlICpmLFxcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZi1cXHUwMDNlZl9wYXRoLmRlbnRyeS1cXHUwMDNlZF9pbm9kZTtcXG4gXFx0aW50IGVycm9yO1xcbiBcXG4tXFx0cGF0aF9nZXQoXFx1MDAyNmYtXFx1MDAzZWZfcGF0aCk7XFxuIFxcdGYtXFx1MDAzZWZfaW5vZGUgPSBpbm9kZTtcXG4gXFx0Zi1cXHUwMDNlZl9tYXBwaW5nID0gaW5vZGUtXFx1MDAzZWlfbWFwcGluZztcXG4gXFx0Zi1cXHUwMDNlZl93Yl9lcnIgPSBmaWxlbWFwX3NhbXBsZV93Yl9lcnIoZi1cXHUwMDNlZl9tYXBwaW5nKTtcXG5AQCAtMTA1NSw2ICsxMDU5LDcgQEAgaW50IGZpbmlzaF9vcGVuKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdEJVR19PTihmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9PUEVORUQpOyAvKiBvbmNlIGl0J3Mgb3BlbmVkLCBpdCdzIG9wZW5lZCAqL1xcbiBcXG4gXFx0ZmlsZS1cXHUwMDNlX19mX3BhdGguZGVudHJ5ID0gZGVudHJ5O1xcbitcXHRwYXRoX2dldChcXHUwMDI2ZmlsZS1cXHUwMDNlZl9wYXRoKTtcXG4gXFx0cmV0dXJuIGRvX2RlbnRyeV9vcGVuKGZpbGUsIG9wZW4pO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woZmluaXNoX29wZW4pO1xcbkBAIC0xMDk4LDYgKzExMDMsNyBAQCBpbnQgdmZzX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0ZmlsZS1cXHUwMDNlX19mX3BhdGggPSAqcGF0aDtcXG4rXFx0cGF0aF9nZXQoXFx1MDAyNmZpbGUtXFx1MDAzZWZfcGF0aCk7XFxuIFxcdHJldCA9IGRvX2RlbnRyeV9vcGVuKGZpbGUsIE5VTEwpO1xcbiBcXHRpZiAoIXJldCkge1xcbiBcXHRcXHQvKlxcbkBAIC0xMTEwLDYgKzExMTYsMjUgQEAgaW50IHZmc19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHZmc19vcGVuX2NvbnN1bWUgLSBvcGVuIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiBwYXRoIGFuZCBjb25zdW1lIHRoZSByZWZlcmVuY2VcXG4rICogQHBhdGg6IHBhdGggdG8gb3BlblxcbisgKiBAZmlsZTogbmV3bHkgYWxsb2NhdGVkIGZpbGUgd2l0aCBmX2ZsYWcgaW5pdGlhbGl6ZWRcXG4rICovXFxuK2ludCB2ZnNfb3Blbl9jb25zdW1lKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZmlsZS1cXHUwMDNlX19mX3BhdGggPSAqcGF0aDtcXG4rXFx0cGF0aC1cXHUwMDNlbW50ID0gTlVMTDtcXG4rXFx0cGF0aC1cXHUwMDNlZGVudHJ5ID0gTlVMTDtcXG4rXFx0cmV0ID0gZG9fZGVudHJ5X29wZW4oZmlsZSwgTlVMTCk7XFxuK1xcdGlmICghcmV0KSB7XFxuK1xcdFxcdGZzbm90aWZ5X29wZW4oZmlsZSk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RydWN0IGZpbGUgKmRlbnRyeV9vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsXFxuIFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcXG4ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowMDozMi4zMjg2MTUxMDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3MDcwMDEwOTE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZnNfb3Blbl9jb25zdW1lXCIsXG4gICAgXCJ2ZnNfb3BlblwiLFxuICAgIFwiZmluaXNoX29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBmaWxlIG9wZW5pbmcgbG9naWMsIHNwZWNpZmljYWxseSBob3cgcGF0aCByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIGFuZCBjb25zdW1lZCBkdXJpbmcgdmZzX29wZW4gYW5kIGRvX2RlbnRyeV9vcGVuLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIHZmc19vcGVuX2NvbnN1bWUuIFRoaXMgaXMgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgb3Blbi9vcGVuYXQgc3lzY2FsbHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBjb3JyZWN0IGFuZCBubyB1c2UtYWZ0ZXItZnJlZSBvciBsZWFrcyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2UwYTE2NGNmMGRlOWM5YjYzNDI2ZGE1NzIxOGFiMjJmNTg0OGE5MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTc6MDA6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaFxuaW5kZXggYzY1OGM4YTVlYmQ1Ni4uOTYzMjIzOTAzNmFjYyAxMDA2NDRcbi0tLSBhL2ZzL2ludGVybmFsLmhcbisrKyBiL2ZzL2ludGVybmFsLmhcbkBAIC0yMDUsNiArMjA1LDcgQEAgaW50IGRvX2ZjaG93bmF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXAsXG4gXHRcdGludCBmbGFnKTtcbiBpbnQgY2hvd25fY29tbW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCB1aWRfdCB1c2VyLCBnaWRfdCBncm91cCk7XG4gZXh0ZXJuIGludCB2ZnNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqLCBzdHJ1Y3QgZmlsZSAqKTtcbitpbnQgdmZzX29wZW5fY29uc3VtZShzdHJ1Y3QgcGF0aCAqLCBzdHJ1Y3QgZmlsZSAqKTtcbiBcbiAvKlxuICAqIGlub2RlLmNcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggM2Y5YmYxMDNiYTEyNi4uZjcxNDgxYjliZjhmNyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbisrKyBiL2ZzL25hbWVpLmNcbkBAIC00Nzg5LDYgKzQ3ODksNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gc3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0XHQgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxuIHtcbitcdHN0cnVjdCB2ZnNtb3VudCAqbW50O1xuIFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXA7XG4gXHRpbnQgb3Blbl9mbGFnID0gb3AtXHUwMDNlb3Blbl9mbGFnO1xuIFx0Ym9vbCBkb190cnVuY2F0ZTtcbkBAIC00ODMwLDExICs0ODMxLDE3IEBAIHN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdFx0ZXJyb3IgPSBtbnRfd2FudF93cml0ZShuZC1cdTAwM2VwYXRoLm1udCk7XG4gXHRcdGlmIChlcnJvcilcbiBcdFx0XHRyZXR1cm4gZXJyb3I7XG4rXHRcdC8qXG4rXHRcdCAqIEEgZGVkaWNhdGVkIHJlZmVyZW5jZSBpcyBuZWVkZWQgYmVjYXVzZSBhZnRlciB0aGUgY2FsbCB0b1xuK1x0XHQgKiB2ZnNfb3Blbl9jb25zdW1lKCkgd2Ugbm8gbG9uZ2VyIG93biB0aGUgcmVmZXJlbmNlIGluIG5kLVx1MDAzZXBhdGgubW50XG4rXHRcdCAqIHdoaWxlIHdlIG5lZWQgdG8gdW5kbyB3cml0ZSBhY2VzcyBiZWxvdy5cbitcdFx0ICovXG4rXHRcdG1udCA9IG1udGdldChuZC1cdTAwM2VwYXRoLm1udCk7XG4gXHRcdGRvX3RydW5jYXRlID0gdHJ1ZTtcbiBcdH1cbiBcdGVycm9yID0gbWF5X29wZW4oaWRtYXAsIFx1MDAyNm5kLVx1MDAzZXBhdGgsIGFjY19tb2RlLCBvcGVuX2ZsYWcpO1xuIFx0aWYgKCFlcnJvciBcdTAwMjZcdTAwMjYgIShmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKSlcbi1cdFx0ZXJyb3IgPSB2ZnNfb3BlbihcdTAwMjZuZC1cdTAwM2VwYXRoLCBmaWxlKTtcbitcdFx0ZXJyb3IgPSB2ZnNfb3Blbl9jb25zdW1lKFx1MDAyNm5kLVx1MDAzZXBhdGgsIGZpbGUpO1xuIFx0aWYgKCFlcnJvcilcbiBcdFx0ZXJyb3IgPSBzZWN1cml0eV9maWxlX3Bvc3Rfb3BlbihmaWxlLCBvcC1cdTAwM2VhY2NfbW9kZSk7XG4gXHRpZiAoIWVycm9yIFx1MDAyNlx1MDAyNiBkb190cnVuY2F0ZSlcbkBAIC00ODQzLDggKzQ4NTAsMTAgQEAgc3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0XHRXQVJOX09OKDEpO1xuIFx0XHRlcnJvciA9IC1FSU5WQUw7XG4gXHR9XG4tXHRpZiAoZG9fdHJ1bmNhdGUpXG4tXHRcdG1udF9kcm9wX3dyaXRlKG5kLVx1MDAzZXBhdGgubW50KTtcbitcdGlmIChkb190cnVuY2F0ZSkge1xuK1x0XHRtbnRfZHJvcF93cml0ZShtbnQpO1xuK1x0XHRtbnRwdXQobW50KTtcbitcdH1cbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA2YjFjMTRlNjg0YTkzLi4yYTc2OTdjZWUwMGJjIDEwMDY0NFxuLS0tIGEvZnMvb3Blbi5jXG4rKysgYi9mcy9vcGVuLmNcbkBAIC05MzEsNiArOTMxLDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGZpbGVfZ2V0X3dyaXRlX2FjY2VzcyhzdHJ1Y3QgZmlsZSAqZilcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4rLypcbisgKiBQb3B1bGF0ZSBzdHJ1Y3QgZmlsZVxuKyAqXG4rICogTk9URTogaXQgYXNzdW1lcyBmX3BhdGggaXMgcG9wdWxhdGVkIGFuZCBjb25zdW1lcyB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlLlxuKyAqL1xuIHN0YXRpYyBpbnQgZG9fZGVudHJ5X29wZW4oc3RydWN0IGZpbGUgKmYsXG4gXHRcdFx0ICBpbnQgKCpvcGVuKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKikpXG4ge1xuQEAgLTkzOCw3ICs5NDMsNiBAQCBzdGF0aWMgaW50IGRvX2RlbnRyeV9vcGVuKHN0cnVjdCBmaWxlICpmLFxuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGYtXHUwMDNlZl9wYXRoLmRlbnRyeS1cdTAwM2VkX2lub2RlO1xuIFx0aW50IGVycm9yO1xuIFxuLVx0cGF0aF9nZXQoXHUwMDI2Zi1cdTAwM2VmX3BhdGgpO1xuIFx0Zi1cdTAwM2VmX2lub2RlID0gaW5vZGU7XG4gXHRmLVx1MDAzZWZfbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbiBcdGYtXHUwMDNlZl93Yl9lcnIgPSBmaWxlbWFwX3NhbXBsZV93Yl9lcnIoZi1cdTAwM2VmX21hcHBpbmcpO1xuQEAgLTEwNTUsNiArMTA1OSw3IEBAIGludCBmaW5pc2hfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0QlVHX09OKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpOyAvKiBvbmNlIGl0J3Mgb3BlbmVkLCBpdCdzIG9wZW5lZCAqL1xuIFxuIFx0ZmlsZS1cdTAwM2VfX2ZfcGF0aC5kZW50cnkgPSBkZW50cnk7XG4rXHRwYXRoX2dldChcdTAwMjZmaWxlLVx1MDAzZWZfcGF0aCk7XG4gXHRyZXR1cm4gZG9fZGVudHJ5X29wZW4oZmlsZSwgb3Blbik7XG4gfVxuIEVYUE9SVF9TWU1CT0woZmluaXNoX29wZW4pO1xuQEAgLTEwOTgsNiArMTEwMyw3IEBAIGludCB2ZnNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRpbnQgcmV0O1xuIFxuIFx0ZmlsZS1cdTAwM2VfX2ZfcGF0aCA9ICpwYXRoO1xuK1x0cGF0aF9nZXQoXHUwMDI2ZmlsZS1cdTAwM2VmX3BhdGgpO1xuIFx0cmV0ID0gZG9fZGVudHJ5X29wZW4oZmlsZSwgTlVMTCk7XG4gXHRpZiAoIXJldCkge1xuIFx0XHQvKlxuQEAgLTExMTAsNiArMTExNiwyNSBAQCBpbnQgdmZzX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogdmZzX29wZW5fY29uc3VtZSAtIG9wZW4gdGhlIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGggYW5kIGNvbnN1bWUgdGhlIHJlZmVyZW5jZVxuKyAqIEBwYXRoOiBwYXRoIHRvIG9wZW5cbisgKiBAZmlsZTogbmV3bHkgYWxsb2NhdGVkIGZpbGUgd2l0aCBmX2ZsYWcgaW5pdGlhbGl6ZWRcbisgKi9cbitpbnQgdmZzX29wZW5fY29uc3VtZShzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGZpbGUtXHUwMDNlX19mX3BhdGggPSAqcGF0aDtcbitcdHBhdGgtXHUwMDNlbW50ID0gTlVMTDtcbitcdHBhdGgtXHUwMDNlZGVudHJ5ID0gTlVMTDtcbitcdHJldCA9IGRvX2RlbnRyeV9vcGVuKGZpbGUsIE5VTEwpO1xuK1x0aWYgKCFyZXQpIHtcbitcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbitcdH1cbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0cnVjdCBmaWxlICpkZW50cnlfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLFxuIFx0XHRcdCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcbiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowMDozMi4zMjg2MTczNDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTQ0NDM2NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgVkZTIFBhdGggUmVmZXJlbmNlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB0aGUgVmlydHVhbCBGaWxlIFN5c3RlbSAoVkZTKSBoYW5kbGVzIHBhdGggcmVmZXJlbmNlcywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgdmZzX29wZW5gIGFuZCBgZG9fZGVudHJ5X29wZW5gLiAgVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UsIGEgY29yZSBWRlMgYWx0ZXJhdGlvbiwgc28gaXQgaW1tZWRpYXRlbHkgc2NyZWFtcyBcInBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgYmVoYXZpb3JcIiBhbmQgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIG5ldyBmdW5jdGlvbiwgYHZmc19vcGVuX2NvbnN1bWVgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgbGluY2hwaW4g4oCTIGl0ICpjb25zdW1lcyogdGhlIHBhdGggcmVmZXJlbmNlLiBJdCB0aGVuIGdldHMgdXNlZCB3aXRoaW4gYGRvX29wZW5gIGluIGBmcy9uYW1laS5jYC4gIEkgc2VlIGNoYW5nZXMgaW4gYGRvX2RlbnRyeV9vcGVuYCB0byAqcmVtb3ZlKiBhIGBwYXRoX2dldGAgY2FsbCAoYHBhdGhfZ2V0KFx1MDAyNmYtXHUwMDNlZl9wYXRoKWApIGFuZCBpbiBgZmluaXNoX29wZW5gLCB0aGVyZSdzIGFuICphZGRpdGlvbiogKGBwYXRoX2dldChcdTAwMjZmaWxlLVx1MDAzZWZfcGF0aClgKS4gYHZmc19vcGVuYCBhbHNvIG5vdyBpbmNsdWRlcyBhIGBwYXRoX2dldGAuXG5cblNvLCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBkb19vcGVuYCwgYGRvX2RlbnRyeV9vcGVuYCwgYGZpbmlzaF9vcGVuYCwgYHZmc19vcGVuYCwgYW5kIHRoaXMgbmV3IGB2ZnNfb3Blbl9jb25zdW1lYC5cblxuUmlnaHQsIGxldCBtZSBkaWcgaW50byB0aGUgZGV0YWlscy4gSSBzZWUgdGhhdCBgZG9fb3BlbmAgaXMgc3RhdGljIGluIGBmcy9uYW1laS5jYCBhbmQgYGRvX2RlbnRyeV9vcGVuYCBpcyBhbHNvIHN0YXRpYyBpbiBgZnMvb3Blbi5jYC4gYHZmc19vcGVuX2NvbnN1bWVgLCBgZmluaXNoX29wZW5gIGFuZCBgdmZzX29wZW5gIGFyZSAqbm90KiBzdGF0aWMsIGFuZCBhcmUgaW4gYGZzL29wZW4uY2AuICBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGRvX29wZW5gIGFuZCBgZG9fZGVudHJ5X29wZW5gIGFyZW4ndCBpbmxpbmVkLCBhcyB0aGF0J3MgYSBrZXkgY29uc2lkZXJhdGlvbi5cblxuVGhlcmUgYXJlbid0IGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCB3b3VsZCBhZmZlY3QgdGhpcy4gVkZTIGlzIGFsd2F5cyBlbmFibGVkLCBzbyB0aGF0J3Mgb25lIGxlc3MgdGhpbmcgdG8gd29ycnkgYWJvdXQuXG5cbk5vdyBsZXQncyB2ZXJpZnkgdGhlc2UgZnVuY3Rpb25zLiBFdmVuIHRob3VnaCBgZG9fb3BlbmAgYW5kIGBkb19kZW50cnlfb3BlbmAgYXJlIHN0YXRpYywgdGhleSBhcmUgZ29vZCB0YXJnZXRzIGlmIHRoZXkgYXJlIG5vdCBpbmxpbmVkLiBgdmZzX29wZW5fY29uc3VtZWAgaXNuJ3QgZXhwb3J0ZWQuLi4gYnV0IHdhaXQsIGl0J3MgKmRlY2xhcmVkKiBpbiBgZnMvaW50ZXJuYWwuaGAuIEFoYSwgc28gaXQncyBpbnRlcm5hbCB0byB0aGUgYGZzL2AgZGlyZWN0b3J5LlxuXG5Pa2F5LCBzbyBsZXQncyBjb25zb2xpZGF0ZSB0aGUgdGFyZ2V0IGZ1bmN0aW9ucy5cbi0gYHZmc19vcGVuX2NvbnN1bWVgXG4tIGB2ZnNfb3BlbmBcbi0gYGZpbmlzaF9vcGVuYFxuLSBgZG9fZGVudHJ5X29wZW5gXG4tIGBkb19vcGVuYFxuXG5JIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgYGRvX29wZW5gIGFuZCBgZG9fZGVudHJ5X29wZW5gIGFyZSBhY3R1YWxseSBpbmxpbmVkIG9yIG5vdCBieSBsb29raW5nIGF0IHRoZWlyIHJlc3BlY3RpdmUgc291cmNlIGZpbGVzIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowMDo0MS44NzMwNjAwNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYxMDMxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT9pbnQgZG9fb3BlblxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25hbWVpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZWkuYz00NzM0PXN0YXRpYyBjb25zdCBjaGFyICpvcGVuX2xhc3RfbG9va3VwcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG4tLVxcbmZzL25hbWVpLmMtNDc4OC0gKi9cXG5mcy9uYW1laS5jOjQ3ODk6c3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbmZzL25hbWVpLmMtNDc5MC1cXHRcXHQgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowMDo0MS45NjkxNzEwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjY0MDQ2OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBjb25zaWRlcmluZyBJJ20gbG9va2luZyBhdCB0aGlzIGZyb20gYW4gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKlN0YXRpYyBGdW5jdGlvbiBPYnNlcnZhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgYm90aCBgZG9fb3BlbmAgYW5kIGBkb19kZW50cnlfb3BlbmAgYXJlIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYSBmZXcga2V5IHRoaW5ncywgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJ3MgYXJjaGl0ZWN0dXJlLiBCZWNhdXNlIHRoZXkncmUgc3RhdGljLCB0aGVpciBzY29wZSBpcyAqbGltaXRlZCogdG8gdGhlIGNvbXBpbGF0aW9uIHVuaXQgaW4gd2hpY2ggdGhleSdyZSBkZWZpbmVkLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZXJuYWwgaGVscGVyIHJvdXRpbmVzLCBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgZXhwb3NlZCBvciBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoYXQgc3BlY2lmaWMgbW9kdWxlIG9yIGZpbGUuIEknZCBleHBlY3QgdGhleSBhcmUgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHNvbWUgY29tbW9uLCBsb3ctbGV2ZWwgb3BlbiBvcGVyYXRpb24gcHJvY2VkdXJlcywgYnV0IHRoZWlyIGRldGFpbGVkIGZ1bmN0aW9uYWxpdHkgd291bGQgYmUgaGlkZGVuIGZyb20gZXh0ZXJuYWwgY29kZS4gVGhpcyBpc29sYXRpb24gaGVscHMgd2l0aCBtb2R1bGFyaXR5IGFuZCBwcmV2ZW50cyBhY2NpZGVudGFsLCB1bmludGVuZGVkIHVzZSBmcm9tIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsLiBUaGlzIGFsc28gc3VnZ2VzdHMsIEkgc2hvdWxkIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IGNhbGxpbmcgb3IgcmVmZXJlbmNpbmcgdGhlbSBmcm9tIGFub3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtIGRpcmVjdGx5IGFzIEkgZGVzaWduLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoZXkgYXJlIHVzZWQgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgb3BlbiBzeXN0ZW0gY2FsbCBpdHNlbGYuIEtub3dpbmcgdGhlaXIgc3RhdGljIG5hdHVyZSBwcm92aWRlcyBpbW1lZGlhdGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY2MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjAwOjQ3LjI5NTU4MjI3NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTg5NDI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApP2ludCBkb19kZW50cnlfb3BlblxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29wZW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vcGVuLmM9OTEwPXN0YXRpYyBpbmxpbmUgaW50IGZpbGVfZ2V0X3dyaXRlX2FjY2VzcyhzdHJ1Y3QgZmlsZSAqZilcXG4tLVxcbmZzL29wZW4uYy05MzgtICovXFxuZnMvb3Blbi5jOjkzOTpzdGF0aWMgaW50IGRvX2RlbnRyeV9vcGVuKHN0cnVjdCBmaWxlICpmLFxcbmZzL29wZW4uYy05NDAtXFx0XFx0XFx0ICBpbnQgKCpvcGVuKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjAwOjQ3LjM3MTQ4MjU0NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjQ3MzYxNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFZGUyBGdW5jdGlvbiBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBuYWlsIGRvd24gd2hpY2ggVkZTIGZ1bmN0aW9ucyB3ZSBzaG91bGQgZm9jdXMgb24uIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgdG8gc2VlIHRoZSBrZXkgYXJjaGl0ZWN0dXJhbCBjb21wb25lbnRzLiBTbywgSSdtIHRoaW5raW5nIHdlIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgYHZmc19vcGVuX2NvbnN1bWVgLCBgdmZzX29wZW5gLCBhbmQgYGZpbmlzaF9vcGVuYC4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsLCBjb3JlIFZGUyBmdW5jdGlvbnMsIHRoYXQgYXJlIGVudHJ5cG9pbnRzIHRvIHRoZSBmaWxlIG9wZW4gb3BlcmF0aW9ucy4gV2hpbGUgYGRvX2RlbnRyeV9vcGVuYCBhbmQgYGRvX29wZW5gIGFyZSByZWxldmFudCB0b28sIHRoZXkgc2VlbSBsaWtlIHRoZXkgbWlnaHQgYmUgaW50ZXJuYWwgaGVscGVycywgYW5kIHdlIHdhbnQgdGhlIGV4dGVybmFsIEFQSSBlbnRyeSBwb2ludHMuIE5vIHNwZWNpYWwgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCwgdGhlc2UgYXJlIGFsbCBidWlsdC1pbi4gSnVzdCB0byBiZSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYHZmc19vcGVuX2NvbnN1bWVgIGxpdmVzIGluIGBmcy9vcGVuLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDUyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjAwOjU5LjAxODg0OTkyNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTIzODQxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCB2ZnNfb3Blbl9jb25zdW1lXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb3Blbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29wZW4uYz0xMTAxPWludCB2ZnNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5mcy9vcGVuLmMtMTEyMy0gKi9cXG5mcy9vcGVuLmM6MTEyNDppbnQgdmZzX29wZW5fY29uc3VtZShzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvb3Blbi5jLTExMjUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowMDo1OS4yNzEyNDE5NDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc1NzQzMTgyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipDb3JlIFZGUyBGaWxlIE9wZW5pbmcgVnVsbmVyYWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzLCBcIlllcCwgdGhpcyBpcyBzaWduaWZpY2FudC5cIiBJdCBzZWVtcyB0byBiZSB0b3VjaGluZyBmdW5kYW1lbnRhbCBmaWxlIG9wZW5pbmcgbG9naWMgd2l0aGluIHRoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpLCBzcGVjaWZpY2FsbHkgaG93IHBhdGggcmVmZXJlbmNlcyBhcmUgbWFuYWdlZCBkdXJpbmcgdGhlIGB2ZnNfb3BlbmAgYW5kIGBkb19kZW50cnlfb3BlbmAgcHJvY2Vzc2VzLiBUaGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IGZ1bmN0aW9uLCBgdmZzX29wZW5fY29uc3VtZWAsIGlzIHRoZSBrZXkgaW5kaWNhdG9yIGhlcmUuIFRoaXMgc2NyZWFtcyBcInBvdGVudGlhbCBmb3IgcmVmZXJlbmNlIGNvdW50aW5nIGJ1Z3MuXCJcblxuVGhlIGZhY3QgdGhhdCB0aGlzIHRvdWNoZXMgdGhlIGNvcmUga2VybmVsIG1lYW5zIGFueSBpc3N1ZSBoZXJlIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2VyLXNwYWNlIHRocm91Z2ggc3RhbmRhcmQgc3lzdGVtIGNhbGxzIGxpa2UgYG9wZW4oKWAgYW5kIGBvcGVuYXQoKWAuIFRoYXQgbWVhbnMgdGhpcyBpcyBhICpwcmltZSogY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBhYnNvbHV0ZWx5IG5lZWQgdG8gZW5zdXJlIHRoYXQgcmVmZXJlbmNlIGNvdW50aW5nIGlzIGJlaGF2aW5nIGNvcnJlY3RseSBhZnRlciB0aGlzIGNoYW5nZSB0byBwcm90ZWN0IGFnYWluc3QgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBhbmQgbWVtb3J5IGxlYWtzLiBUaGUgZmFjdCB0aGF0IG5vIHNwZWNpZmljIGNvbmZpZyBjaGFuZ2VzIGFyZSBuZWVkZWQgdGVsbHMgbWUgdGhpcyBpcyBiYWtlZCBpbnRvIGEgY29yZSBzeXN0ZW0uXG5cbk15IGZvY3VzIHNob3VsZCBiZSBvbiBgdmZzX29wZW5fY29uc3VtZWAgaXRzZWxmLCBidXQgSSBzaG91bGQgYWxzbyByZXZpZXcgYHZmc19vcGVuYCBhbmQgYGZpbmlzaF9vcGVuYCwgbWFraW5nIHN1cmUgdGhhdCB0aGUgZmxvdyBhcm91bmQgdGhlc2UgY3J1Y2lhbCBwb2ludHMgaXMgY29ycmVjdC5cblxuSSdtIHJlYWR5IHRvIG1hcmsgdGhlIHJlc3VsdHMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTI5LCJPdXRwdXRUb2tlbnMiOjEzNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowMTo0My4wMjg2NzcwNTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19vcGVuX2NvbnN1bWVcIixcbiAgICBcInZmc19vcGVuXCIsXG4gICAgXCJmaW5pc2hfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGZpbGUgb3BlbmluZyBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBwYXRoIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQgYW5kIGNvbnN1bWVkIGR1cmluZyB2ZnNfb3BlbiBhbmQgZG9fZGVudHJ5X29wZW4uIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gdmZzX29wZW5fY29uc3VtZS4gVGhpcyBpcyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBvcGVuL29wZW5hdCBzeXNjYWxscyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgcmVmZXJlbmNlIGNvdW50aW5nIGlzIGNvcnJlY3QgYW5kIG5vIHVzZS1hZnRlci1mcmVlIG9yIGxlYWtzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19vcGVuX2NvbnN1bWVcIixcbiAgICBcInZmc19vcGVuXCIsXG4gICAgXCJmaW5pc2hfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGZpbGUgb3BlbmluZyBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBwYXRoIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQgYW5kIGNvbnN1bWVkIGR1cmluZyB2ZnNfb3BlbiBhbmQgZG9fZGVudHJ5X29wZW4uIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gdmZzX29wZW5fY29uc3VtZS4gVGhpcyBpcyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBvcGVuL29wZW5hdCBzeXNjYWxscyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgcmVmZXJlbmNlIGNvdW50aW5nIGlzIGNvcnJlY3QgYW5kIG5vIHVzZS1hZnRlci1mcmVlIG9yIGxlYWtzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkx6qx[1] Phase: Succeeded StartedAt: 2026-08-03 17:01:54 +0000 UTC FinishedAt: 2026-08-03 17:01:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkx6qx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 17:01:54 +0000 UTC FinishedAt: 2026-08-03 17:01:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkx6qx[2] Phase: Succeeded StartedAt: 2026-08-03 17:01:54 +0000 UTC FinishedAt: 2026-08-03 17:52:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkx6qx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_open_consume","vfs_open","finish_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"61d84e6e-340a-4e11-bea2-326196243223","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-03 17:01:54 +0000 UTC FinishedAt: 2026-08-03 17:52:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_open_consume","vfs_open","finish_open"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"61d84e6e-340a-4e11-bea2-326196243223","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkx6qx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_open_consume","vfs_open","finish_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"61d84e6e-340a-4e11-bea2-326196243223","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 17:01:54 +0000 UTC FinishedAt: 2026-08-03 17:02:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkx6qx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_open_consume","vfs_open","finish_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"61d84e6e-340a-4e11-bea2-326196243223","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 17:01:54 +0000 UTC FinishedAt: 2026-08-03 17:01:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkx6qx/series-workflowkx6qx-convert-artifact-3189122948/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkx6qx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_open_consume","vfs_open","finish_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"61d84e6e-340a-4e11-bea2-326196243223","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 17:02:04 +0000 UTC FinishedAt: 2026-08-03 17:20:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkx6qx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_open_consume","vfs_open","finish_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"61d84e6e-340a-4e11-bea2-326196243223","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 17:02:04 +0000 UTC FinishedAt: 2026-08-03 17:20:26 +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:*a22945d6-cb4d-41da-8218-e1da13df4f09,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-workflowkx6qx/series-workflowkx6qx-convert-artifact-3189122948/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": "2f06ba16-f28d-4ebe-a66d-7f3278488fb1", "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-workflowkx6qx/series-workflowkx6qx-build-action-3373919426/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkx6qx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_open_consume","vfs_open","finish_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"61d84e6e-340a-4e11-bea2-326196243223","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 17:02:04 +0000 UTC FinishedAt: 2026-08-03 17:20:16 +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:*a22945d6-cb4d-41da-8218-e1da13df4f09,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-workflowkx6qx/series-workflowkx6qx-convert-artifact-3189122948/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": "2f06ba16-f28d-4ebe-a66d-7f3278488fb1", "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-workflowkx6qx/series-workflowkx6qx-build-action-3373919426/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkx6qx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_open_consume","vfs_open","finish_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"61d84e6e-340a-4e11-bea2-326196243223","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 17:20:26 +0000 UTC FinishedAt: 2026-08-03 17:20:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkx6qx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_open_consume","vfs_open","finish_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"61d84e6e-340a-4e11-bea2-326196243223","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 17:20:26 +0000 UTC FinishedAt: 2026-08-03 17:20:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkx6qx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_open_consume","vfs_open","finish_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"61d84e6e-340a-4e11-bea2-326196243223","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 17:20:26 +0000 UTC FinishedAt: 2026-08-03 17:20:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkx6qx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_open_consume","vfs_open","finish_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"61d84e6e-340a-4e11-bea2-326196243223","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 17:20:26 +0000 UTC FinishedAt: 2026-08-03 17:20:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"61d84e6e-340a-4e11-bea2-326196243223","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkx6qx/series-workflowkx6qx-convert-artifact-1346309123/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkx6qx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_open_consume","vfs_open","finish_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"61d84e6e-340a-4e11-bea2-326196243223","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 17:20:36 +0000 UTC FinishedAt: 2026-08-03 17:51:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkx6qx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_open_consume","vfs_open","finish_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"61d84e6e-340a-4e11-bea2-326196243223","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 17:20:36 +0000 UTC FinishedAt: 2026-08-03 17:51:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2f06ba16-f28d-4ebe-a66d-7f3278488fb1,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-workflowkx6qx/series-workflowkx6qx-build-action-3373919426/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": false },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-workflowkx6qx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_open_consume","vfs_open","finish_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"61d84e6e-340a-4e11-bea2-326196243223","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Failed StartedAt: 2026-08-03 17:51:51 +0000 UTC FinishedAt: 2026-08-03 17:52:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkx6qx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_open_consume","vfs_open","finish_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"415606a7be939835db9b0d6b711887586646346d","config_name":"upstream-apparmor-kasan.config","series_id":"61d84e6e-340a-4e11-bea2-326196243223","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Failed StartedAt: 2026-08-03 17:51:51 +0000 UTC FinishedAt: 2026-08-03 17:52:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}