Name: series-workflow9v5nk Phase: Succeeded StartedAt: 2026-06-29 03:02:17 +0000 UTC FinishedAt: 2026-06-29 07:14:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[0] Phase: Succeeded StartedAt: 2026-06-29 03:02:17 +0000 UTC FinishedAt: 2026-06-29 03:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 03:02:17 +0000 UTC FinishedAt: 2026-06-29 03:12:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION", "TRANSPARENT_HUGEPAGE" ], "series_id": "8823164c-e27e-449e-8840-b511a696f4ff" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "isolate_freepages_block", "fast_isolate_freepages", "compaction_alloc_noprof", "__split_folio_to_order" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDAzOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpc29sYXRlX2ZyZWVwYWdlc19ibG9jayYjMzQ7LAogICAgJiMzNDtmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzJiMzNDssCiAgICAmIzM0O2NvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mJiMzNDssCiAgICAmIzM0O19fc3BsaXRfZm9saW9fdG9fb3JkZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBieSByZW1vdmluZyBgc2V0X3BhZ2VfcHJpdmF0ZWAgY2FsbHMgZm9yIGZyZWUgcGFnZXMgYW5kIHRhaWwgcGFnZXMsIGFuZCBhZGRpbmcgY2hlY2tzIHRvIGVuc3VyZSBgcGFnZS1cdTAwM2Vwcml2YXRlYCBpcyAwIGR1cmluZyBwYWdlIGZyZWVpbmcgYW5kIFRIUCBzcGxpdHRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgY29tcGFjdGlvbiwgcGFnZSBhbGxvY2F0aW9uLCBhbmQgVEhQLCB3aGljaCBjYW4gdHJpZ2dlciB3YXJuaW5ncyBvciBiYWQgcGFnZSBzdGF0ZXMgaWYgdmlvbGF0ZWQuIEl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwMzoxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBkNjljZDgzMTEwZDVhMzVjOTA0YTJhMzk0Yjc4NjAyNGU4YTZhMWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAwMzoxMTowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmNcbmluZGV4IGI3NzZmMzVhZDAyMDA3Li4zNDk4MzhjYzZjMTkwZiAxMDA2NDRcbi0tLSBhL21tL2NvbXBhY3Rpb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vY29tcGFjdGlvbi5jXG5AQCAtNjQ0LDcgJiM0Mzs2NDQsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2ZyZWVwYWdlc19ibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcbiBcdFx0aXNvbGF0ZWQgPSBfX2lzb2xhdGVfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTtcbiBcdFx0aWYgKCFpc29sYXRlZClcbiBcdFx0XHRicmVhaztcbi1cdFx0c2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7XG4gXG4gXHRcdG5yX3NjYW5uZWQgJiM0Mzs9IGlzb2xhdGVkIC0gMTtcbiBcdFx0dG90YWxfaXNvbGF0ZWQgJiM0Mzs9IGlzb2xhdGVkO1xuQEAgLTE2MTcsNyAmIzQzOzE2MTYsNiBAQCBzdGF0aWMgdm9pZCBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuIFx0XHQvKiBJc29sYXRlIHRoZSBwYWdlIGlmIGF2YWlsYWJsZSAqL1xuIFx0XHRpZiAocGFnZSkge1xuIFx0XHRcdGlmIChfX2lzb2xhdGVfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKSkge1xuLVx0XHRcdFx0c2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7XG4gXHRcdFx0XHRucl9pc29sYXRlZCA9IDEgXHUwMDNjXHUwMDNjIG9yZGVyO1xuIFx0XHRcdFx0bnJfc2Nhbm5lZCAmIzQzOz0gbnJfaXNvbGF0ZWQgLSAxO1xuIFx0XHRcdFx0dG90YWxfaXNvbGF0ZWQgJiM0Mzs9IG5yX2lzb2xhdGVkO1xuQEAgLTE4NDYsNyAmIzQzOzE4NDQsNiBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpjb21wYWN0aW9uX2FsbG9jX25vcHJvZihzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBkYVxuIFx0XHRzaXplIFx1MDAzZVx1MDAzZT0gMTtcbiBcbiBcdFx0bGlzdF9hZGQoXHUwMDI2ZnJlZXBhZ2Vbc2l6ZV0ubHJ1LCBcdTAwMjZjYy1cdTAwM2VmcmVlcGFnZXNbc3RhcnRfb3JkZXJdKTtcbi1cdFx0c2V0X3BhZ2VfcHJpdmF0ZShcdTAwMjZmcmVlcGFnZVtzaXplXSwgc3RhcnRfb3JkZXIpO1xuIFx0fVxuIFx0ZHN0ID0gKHN0cnVjdCBmb2xpbyAqKWZyZWVwYWdlO1xuIFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uMDM3ZDY3ZmJlYzZlNTkgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMzU5NCw2ICYjNDM7MzU5NCwxNiBAQCBzdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXG4gXHRcdG5ld19mb2xpby1cdTAwM2VtYXBwaW5nID0gZm9saW8tXHUwMDNlbWFwcGluZztcbiBcdFx0bmV3X2ZvbGlvLVx1MDAzZWluZGV4ID0gZm9saW8tXHUwMDNlaW5kZXggJiM0MzsgaTtcbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBwYWdlLVx1MDAzZXByaXZhdGUgc2hvdWxkIG5vdCBiZSBzZXQgaW4gdGFpbCBwYWdlcy4gRml4IHVwIGFuZCB3YXJuIG9uY2VcbiYjNDM7XHRcdCAqIGlmIHByaXZhdGUgaXMgdW5leHBlY3RlZGx5IHNldC4gRG8gaXQgYmVmb3JlIHN3YXAudmFsIGFzc2lnbm1lbnRcbiYjNDM7XHRcdCAqIHNpbmNlIHByaXZhdGUgb3ZlcmxhcHMgd2l0aCBzd2FwLnZhbC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KG5ld19mb2xpby1cdTAwM2Vwcml2YXRlKSkge1xuJiM0MztcdFx0XHRWTV9XQVJOX09OX09OQ0VfUEFHRSh0cnVlLCBuZXdfaGVhZCk7XG4mIzQzO1x0XHRcdG5ld19mb2xpby1cdTAwM2Vwcml2YXRlID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpXG4gXHRcdFx0bmV3X2ZvbGlvLVx1MDAzZXN3YXAudmFsID0gZm9saW8tXHUwMDNlc3dhcC52YWwgJiM0MzsgaTtcbiBcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMTgxZTc5ZjFkNmEyMDcuLmM5NjQyMWNlOTM1MDE1IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaFxuQEAgLTg5NSw3ICYjNDM7ODk1LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHByZXBfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCxcbiB7XG4gXHR0YWlsLVx1MDAzZW1hcHBpbmcgPSBUQUlMX01BUFBJTkc7XG4gXHRzZXRfY29tcG91bmRfaGVhZCh0YWlsLCBoZWFkLCBvcmRlcik7XG4tXHRzZXRfcGFnZV9wcml2YXRlKHRhaWwsIDApO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggZWU5MDJhNDY4YzJmNWIuLjEzYzI2NTVlMjRmYmRkIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC0xMzc0LDE1ICYjNDM7MTM3NCwyMSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gI2VuZGlmXG4gXHRcdH1cbiBcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgKDEgXHUwMDNjXHUwMDNjIG9yZGVyKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IHBhZ2UgKnN1YnBhZ2UgPSBwYWdlICYjNDM7IGk7XG4mIzQzO1xuIFx0XHRcdGlmIChjb21wb3VuZClcbi1cdFx0XHRcdGJhZCAmIzQzOz0gZnJlZV90YWlsX3BhZ2VfcHJlcGFyZShwYWdlLCBwYWdlICYjNDM7IGkpO1xuJiM0MztcdFx0XHRcdGJhZCAmIzQzOz0gZnJlZV90YWlsX3BhZ2VfcHJlcGFyZShwYWdlLCBzdWJwYWdlKTtcbiBcdFx0XHRpZiAoaXNfY2hlY2tfcGFnZXNfZW5hYmxlZCgpKSB7XG4tXHRcdFx0XHRpZiAoZnJlZV9wYWdlX2lzX2JhZChwYWdlICYjNDM7IGkpKSB7XG4mIzQzO1x0XHRcdFx0aWYgKGZyZWVfcGFnZV9pc19iYWQoc3VicGFnZSkpIHtcbiBcdFx0XHRcdFx0YmFkJiM0MzsmIzQzOztcbiBcdFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuLVx0XHRcdChwYWdlICYjNDM7IGkpLVx1MDAzZWZsYWdzLmYgXHUwMDI2PSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQO1xuJiM0MztcdFx0XHRzdWJwYWdlLVx1MDAzZWZsYWdzLmYgXHUwMDI2PSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQO1xuJiM0MztcdFx0XHRpZiAoc3VicGFnZS1cdTAwM2Vwcml2YXRlKSB7XG4mIzQzO1x0XHRcdFx0YmFkX3BhZ2Uoc3VicGFnZSwgXCYjMzQ7bm9uemVybyBwcml2YXRlXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFx0fVxuIFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwMzoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2smIzM0OywKICAgICYjMzQ7ZmFzdF9pc29sYXRlX2ZyZWVwYWdlcyYjMzQ7LAogICAgJiMzNDtjb21wYWN0aW9uX2FsbG9jX25vcHJvZiYjMzQ7LAogICAgJiMzNDtfX3NwbGl0X2ZvbGlvX3RvX29yZGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYnkgcmVtb3ZpbmcgYHNldF9wYWdlX3ByaXZhdGVgIGNhbGxzIGZvciBmcmVlIHBhZ2VzIGFuZCB0YWlsIHBhZ2VzLCBhbmQgYWRkaW5nIGNoZWNrcyB0byBlbnN1cmUgYHBhZ2UtXHUwMDNlcHJpdmF0ZWAgaXMgMCBkdXJpbmcgcGFnZSBmcmVlaW5nIGFuZCBUSFAgc3BsaXR0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGNvbXBhY3Rpb24sIHBhZ2UgYWxsb2NhdGlvbiwgYW5kIFRIUCwgd2hpY2ggY2FuIHRyaWdnZXIgd2FybmluZ3Mgb3IgYmFkIHBhZ2Ugc3RhdGVzIGlmIHZpb2xhdGVkLiBJdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBkNjljZDgzMTEwZDVhMzVjOTA0YTJhMzk0Yjc4NjAyNGU4YTZhMWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAwMzoxMTowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uYwppbmRleCBiNzc2ZjM1YWQwMjAwNy4uMzQ5ODM4Y2M2YzE5MGYgMTAwNjQ0Ci0tLSBhL21tL2NvbXBhY3Rpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9jb21wYWN0aW9uLmMKQEAgLTY0NCw3ICYjNDM7NjQ0LDYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsCiAJCWlzb2xhdGVkID0gX19pc29sYXRlX2ZyZWVfcGFnZShwYWdlLCBvcmRlcik7CiAJCWlmICghaXNvbGF0ZWQpCiAJCQlicmVhazsKLQkJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7CiAKIAkJbnJfc2Nhbm5lZCAmIzQzOz0gaXNvbGF0ZWQgLSAxOwogCQl0b3RhbF9pc29sYXRlZCAmIzQzOz0gaXNvbGF0ZWQ7CkBAIC0xNjE3LDcgJiM0MzsxNjE2LDYgQEAgc3RhdGljIHZvaWQgZmFzdF9pc29sYXRlX2ZyZWVwYWdlcyhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYykKIAkJLyogSXNvbGF0ZSB0aGUgcGFnZSBpZiBhdmFpbGFibGUgKi8KIAkJaWYgKHBhZ2UpIHsKIAkJCWlmIChfX2lzb2xhdGVfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKSkgewotCQkJCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgb3JkZXIpOwogCQkJCW5yX2lzb2xhdGVkID0gMSAmbHQ7Jmx0OyBvcmRlcjsKIAkJCQlucl9zY2FubmVkICYjNDM7PSBucl9pc29sYXRlZCAtIDE7CiAJCQkJdG90YWxfaXNvbGF0ZWQgJiM0Mzs9IG5yX2lzb2xhdGVkOwpAQCAtMTg0Niw3ICYjNDM7MTg0NCw2IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mKHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIGRhCiAJCXNpemUgJmd0OyZndDs9IDE7CiAKIAkJbGlzdF9hZGQoJmFtcDtmcmVlcGFnZVtzaXplXS5scnUsICZhbXA7Y2MtJmd0O2ZyZWVwYWdlc1tzdGFydF9vcmRlcl0pOwotCQlzZXRfcGFnZV9wcml2YXRlKCZhbXA7ZnJlZXBhZ2Vbc2l6ZV0sIHN0YXJ0X29yZGVyKTsKIAl9CiAJZHN0ID0gKHN0cnVjdCBmb2xpbyAqKWZyZWVwYWdlOwogCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCAyYmNjYjBhNTNhMGE2MC4uMDM3ZDY3ZmJlYzZlNTkgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMzU5NCw2ICYjNDM7MzU5NCwxNiBAQCBzdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsCiAJCW5ld19mb2xpby0mZ3Q7bWFwcGluZyA9IGZvbGlvLSZndDttYXBwaW5nOwogCQluZXdfZm9saW8tJmd0O2luZGV4ID0gZm9saW8tJmd0O2luZGV4ICYjNDM7IGk7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBwYWdlLSZndDtwcml2YXRlIHNob3VsZCBub3QgYmUgc2V0IGluIHRhaWwgcGFnZXMuIEZpeCB1cCBhbmQgd2FybiBvbmNlCiYjNDM7CQkgKiBpZiBwcml2YXRlIGlzIHVuZXhwZWN0ZWRseSBzZXQuIERvIGl0IGJlZm9yZSBzd2FwLnZhbCBhc3NpZ25tZW50CiYjNDM7CQkgKiBzaW5jZSBwcml2YXRlIG92ZXJsYXBzIHdpdGggc3dhcC52YWwuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh1bmxpa2VseShuZXdfZm9saW8tJmd0O3ByaXZhdGUpKSB7CiYjNDM7CQkJVk1fV0FSTl9PTl9PTkNFX1BBR0UodHJ1ZSwgbmV3X2hlYWQpOwomIzQzOwkJCW5ld19mb2xpby0mZ3Q7cHJpdmF0ZSA9IE5VTEw7CiYjNDM7CQl9CiYjNDM7CiAJCWlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpCiAJCQluZXdfZm9saW8tJmd0O3N3YXAudmFsID0gZm9saW8tJmd0O3N3YXAudmFsICYjNDM7IGk7CiAKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDE4MWU3OWYxZDZhMjA3Li5jOTY0MjFjZTkzNTAxNSAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC04OTUsNyAmIzQzOzg5NSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX3RhaWwoc3RydWN0IHBhZ2UgKnRhaWwsCiB7CiAJdGFpbC0mZ3Q7bWFwcGluZyA9IFRBSUxfTUFQUElORzsKIAlzZXRfY29tcG91bmRfaGVhZCh0YWlsLCBoZWFkLCBvcmRlcik7Ci0Jc2V0X3BhZ2VfcHJpdmF0ZSh0YWlsLCAwKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGluaXRfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCwKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBlZTkwMmE0NjhjMmY1Yi4uMTNjMjY1NWUyNGZiZGQgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTEzNzQsMTUgJiM0MzsxMzc0LDIxIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX2ZyZWVfcGFnZXNfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqcGFnZSwKICNlbmRpZgogCQl9CiAJCWZvciAoaSA9IDE7IGkgJmx0OyAoMSAmbHQ7Jmx0OyBvcmRlcik7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IHBhZ2UgKnN1YnBhZ2UgPSBwYWdlICYjNDM7IGk7CiYjNDM7CiAJCQlpZiAoY29tcG91bmQpCi0JCQkJYmFkICYjNDM7PSBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHBhZ2UsIHBhZ2UgJiM0MzsgaSk7CiYjNDM7CQkJCWJhZCAmIzQzOz0gZnJlZV90YWlsX3BhZ2VfcHJlcGFyZShwYWdlLCBzdWJwYWdlKTsKIAkJCWlmIChpc19jaGVja19wYWdlc19lbmFibGVkKCkpIHsKLQkJCQlpZiAoZnJlZV9wYWdlX2lzX2JhZChwYWdlICYjNDM7IGkpKSB7CiYjNDM7CQkJCWlmIChmcmVlX3BhZ2VfaXNfYmFkKHN1YnBhZ2UpKSB7CiAJCQkJCWJhZCYjNDM7JiM0Mzs7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCX0KLQkJCShwYWdlICYjNDM7IGkpLSZndDtmbGFncy5mICZhbXA7PSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQOwomIzQzOwkJCXN1YnBhZ2UtJmd0O2ZsYWdzLmYgJmFtcDs9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVA7CiYjNDM7CQkJaWYgKHN1YnBhZ2UtJmd0O3ByaXZhdGUpIHsKJiM0MzsJCQkJYmFkX3BhZ2Uoc3VicGFnZSwgJiMzNDtub256ZXJvIHByaXZhdGUmIzM0Oyk7CiYjNDM7CQkJCXJldHVybiBmYWxzZTsKJiM0MzsJCQl9CiAJCX0KIAl9CiAJaWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb25lLCBpdCBzZWVtcyDigJMgdGhhdCB0b3VjaGVzIHNvbWUga2V5IGFyZWFzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW06IGBtbS9jb21wYWN0aW9uLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9pbnRlcm5hbC5oYCwgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbml0aWFsIHJlYWQgc3VnZ2VzdHMgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKVGhlIGNvcmUgb2YgaXQgaXMgdGhlIHJlbW92YWwgb2Ygc29tZSBgc2V0X3BhZ2VfcHJpdmF0ZSgpYCBjYWxscyBpbiBmdW5jdGlvbnMgbGlrZSBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgLCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AsIGFuZCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHdoeSB0aG9zZSB3ZXJlIHJlbW92ZWQuIEl0IGFsc28gYWRkcyBhIGNoZWNrIGFuZCB3YXJuaW5nIGluIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCB0byBjbGVhciBhbmQgZW5zdXJlIGBuZXdfZm9saW8tJmd0O3ByaXZhdGVgIGlzIG5vdCB1bmV4cGVjdGVkbHkgc2V0LiBBbmQgaXQgbG9va3MgbGlrZSBhbm90aGVyIGBzZXRfcGFnZV9wcml2YXRlKClgIGNhbGwgaXMgcmVtb3ZlZCBpbiBgcHJlcF9jb21wb3VuZF90YWlsYC4gRmluYWxseSwgdGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgIHRvIGNhbGwgYGJhZF9wYWdlKClgIGlmIGBzdWJwYWdlLSZndDtwcml2YXRlYCBpcyBub256ZXJvLiBUaGUgYF9fZnJlZV9wYWdlc19wcmVwYXJlYCBmdW5jdGlvbiBpcyBhIGhvdCBwYXRoOyB0aGF0IGRlZmluaXRlbHkgbmVlZHMgY2FyZWZ1bCBzY3J1dGlueS4KCk15IGZpcnN0IHRob3VnaHQgaXMgdGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc29tZSBzdWJ0bGUgYnVncyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoaXMgaW1wYWN0cyBjb21wYWN0aW9uLCBodWdlIHBhZ2Ugc3BsaXR0aW5nLCBhbmQgcGFnZSBhbGxvY2F0aW9uLCBzbyBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHJlbW92aW5nIHRob3NlIGBzZXRfcGFnZV9wcml2YXRlKClgIGNhbGxzLCBlc3BlY2lhbGx5IGluIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAgd2hpY2ggaXMgZnJlcXVlbnRseSBjYWxsZWQuCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGJ5IGZ1bmN0aW9ucy4gVGhlIGtleSBzeW1ib2xzIHNlZW0gdG8gYmU6CiogICBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgCiogICBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AKKiAgIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAKKiAgIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYAoqICAgYF9fZnJlZV9wYWdlc19wcmVwYXJlYAoKYF9fZnJlZV9wYWdlc19wcmVwYXJlYCBpcyBjbGVhcmx5IGEgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlIGZ1bmN0aW9uLCB3aGVyZWFzIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYW5kIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAgYXBwZWFyIGNvbXBhY3Rpb24tcmVsYXRlZC4gYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgIHN1Z2dlc3RzIHRoYXQgd2UgYXJlIGNoYW5naW5nIGhvdyBUSFBzIGFyZSBzcGxpdC4KCk5vdywgbGV0JiMzOTtzIGRldGVybWluZSB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgdG8gbmFycm93IHRoZSBmb2N1cy4gQ29tcGFjdGlvbiBpcyB0aWVkIHRvIGBDT05GSUdfQ09NUEFDVElPTmAsIGFuZCBUSFAgc3VwcG9ydCBpcyBsaW5rZWQgdG8gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRpbWUgdG8gbGV2ZXJhZ2Ugb3VyIEtjb25maWcgdG9vbCB0byBnZXQgYSBwcmVjaXNlIHBpY3R1cmUgb2YgdGhlc2UgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdG8gZGV0ZXJtaW5lIHRoZSBwb3NzaWJsZSBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQ09NUEFDVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmMtMjgtXG5tbS9jb21wYWN0aW9uLmM6Mjk6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9jb21wYWN0aW9uLmMtMzAtLypcbi0tXG5tbS9jb21wYWN0aW9uLmM9NTk9c3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG4tLVxubW0vY29tcGFjdGlvbi5jLTYxLVxubW0vY29tcGFjdGlvbi5jOjYyOiNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQVxubW0vY29tcGFjdGlvbi5jLTYzLVxuLS1cbm1tL2NvbXBhY3Rpb24uYz05MT1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWxlYXNlX2ZyZWVfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlcGFnZXMpXG4tLVxubW0vY29tcGFjdGlvbi5jLTExNS1cbm1tL2NvbXBhY3Rpb24uYzoxMTY6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9jb21wYWN0aW9uLmMtMTE3LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz00OTA9c3RhdGljIGJvb2wgdGVzdF9hbmRfc2V0X3NraXAoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy00OTMtfVxubW0vY29tcGFjdGlvbi5jOjQ5NDojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbm1tL2NvbXBhY3Rpb24uYy00OTUtXG4tLVxubW0vY29tcGFjdGlvbi5jPTEzMzY9aXNvbGF0ZV9taWdyYXRlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0xMzcxLVxubW0vY29tcGFjdGlvbi5jOjEzNzI6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cbm1tL2NvbXBhY3Rpb24uYzoxMzczOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vY29tcGFjdGlvbi5jLTEzNzQtXG4tLVxubW0vY29tcGFjdGlvbi5jPTMzNTE9c3Vic3lzX2luaXRjYWxsKGtjb21wYWN0ZF9pbml0KVxubW0vY29tcGFjdGlvbi5jLTMzNTItXG5tbS9jb21wYWN0aW9uLmM6MzM1MzojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbi0tXG5tbS9pbnRlcm5hbC5oPTk5OD1zdGF0aWMgaW5saW5lIHZvaWQgc3BhcnNlX2luaXRfc3Vic2VjdGlvbl9tYXAodW5zaWduZWQgbG9uZyBwZm4sXG4tLVxubW0vaW50ZXJuYWwuaC0xMDAzLVxubW0vaW50ZXJuYWwuaDoxMDA0OiNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQVxubW0vaW50ZXJuYWwuaC0xMDA1LVxuLS1cbm1tL2ludGVybmFsLmg9MTA3Mz12b2lkIGluaXRfY21hX3Jlc2VydmVkX3BhZ2VibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5tbS9pbnRlcm5hbC5oLTEwNzQtXG5tbS9pbnRlcm5hbC5oOjEwNzU6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cbm1tL2ludGVybmFsLmgtMTA3Ni1cbi0tXG5tbS9tbV9pbml0LmM9MTMzNz1zdGF0aWMgdm9pZCBfX2luaXQgY2FsY3VsYXRlX25vZGVfdG90YWxwYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL21tX2luaXQuYy0xMzc5LVxubW0vbW1faW5pdC5jOjEzODA6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9tbV9pbml0LmMtMTM4MS1zdGF0aWMgdm9pZCBwZ2RhdF9pbml0X2tjb21wYWN0ZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL29vbV9raWxsLmM9NDU2PXN0YXRpYyB2b2lkIGR1bXBfaGVhZGVyKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4tLVxubW0vb29tX2tpbGwuYy00NjAtXHRcdFx0Y3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlb29tX3Njb3JlX2Fkaik7XG5tbS9vb21fa2lsbC5jOjQ2MTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikgXHUwMDI2XHUwMDI2IG9jLVx1MDAzZW9yZGVyKVxubW0vb29tX2tpbGwuYy00NjItXHRcdHByX3dhcm4oXCYjMzQ7Q09NUEFDVElPTiBpcyBkaXNhYmxlZCEhIVxcblwmIzM0Oyk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcxMD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2J1ZGR5X29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcxNS1cbm1tL3BhZ2VfYWxsb2MuYzo3MTY6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9wYWdlX2FsbG9jLmMtNzE3LXN0YXRpYyBpbmxpbmUgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqdGFza19jYXBjKHN0cnVjdCB6b25lICp6b25lKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz03NjU9Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03NjktfVxubW0vcGFnZV9hbGxvYy5jOjc3MDojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbm1tL3BhZ2VfYWxsb2MuYy03NzEtXG4tLVxubW0vcGFnZV9hbGxvYy5jPTQwNTM9X19hbGxvY19wYWdlc19tYXlfb29tKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQxNDQtXG5tbS9wYWdlX2FsbG9jLmM6NDE0NTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3BhZ2VfYWxsb2MuYy00MTQ2LS8qIFRyeSBtZW1vcnkgY29tcGFjdGlvbiBmb3IgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyBiZWZvcmUgcmVjbGFpbSAqL1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz00Mjg1PXNob3VsZF9jb21wYWN0X3JldHJ5KGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDMxMC19XG5tbS9wYWdlX2FsbG9jLmM6NDMxMTojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbm1tL3BhZ2VfYWxsb2MuYy00MzEyLVxuLS1cbm1tL3Ztc2Nhbi5jPTYzMzE9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYzNzEtXHRcdFx0ICovXG5tbS92bXNjYW4uYzo2MzcyOlx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQUNUSU9OKSBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jLTYzNzMtXHRcdFx0ICAgIHNjLVx1MDAzZW9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUiBcdTAwMjZcdTAwMjZcbi0tXG5tbS92bXN0YXQuYz0xMDQyPXZvaWQgbWVtbWFwX3BhZ2VzX2FkZChsb25nIGRlbHRhKVxuLS1cbm1tL3Ztc3RhdC5jLTEwNDYtXG5tbS92bXN0YXQuYzoxMDQ3OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vdm1zdGF0LmMtMTA0OC1cbi0tXG5tbS92bXN0YXQuYz0xMTg3PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xuLS1cbm1tL3Ztc3RhdC5jLTEzNzAtI2VuZGlmXG5tbS92bXN0YXQuYzoxMzcxOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vdm1zdGF0LmMtMTM3Mi1cdFtJKENPTVBBQ1RNSUdSQVRFX1NDQU5ORUQpXVx0XHQ9IFwmIzM0O2NvbXBhY3RfbWlncmF0ZV9zY2FubmVkXCYjMzQ7LFxuLS1cbm1tL3Ztc3RhdC5jLTE0OTYtXG5tbS92bXN0YXQuYzoxNDk3OiNpZiAoZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19DT01QQUNUSU9OKSkgfHwgXFxcbm1tL3Ztc3RhdC5jLTE0OTgtICAgICBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxuLS1cbm1tL3Ztc3RhdC5jPTIyNjg9dm9pZCBfX2luaXQgaW5pdF9tbV9pbnRlcm5hbHModm9pZClcbi0tXG5tbS92bXN0YXQuYy0yMzAxLVxubW0vdm1zdGF0LmM6MjMwMjojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19DT01QQUNUSU9OKVxubW0vdm1zdGF0LmMtMjMwMy1cbi0tXG5tbS96c21hbGxvYy5jPTE5OT1zdHJ1Y3QgenNfcG9vbCB7XG4tLVxubW0venNtYWxsb2MuYy0yMTMtI2VuZGlmXG5tbS96c21hbGxvYy5jOjIxNDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3pzbWFsbG9jLmMtMjE1LVx0c3RydWN0IHdvcmtfc3RydWN0IGZyZWVfd29yaztcbi0tXG5tbS96c21hbGxvYy5jPTM2MD1zdGF0aWMgYm9vbCBac0h1Z2VQYWdlKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbi0tXG5tbS96c21hbGxvYy5jLTM2NC1cbm1tL3pzbWFsbG9jLmM6MzY1OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0venNtYWxsb2MuYy0zNjYtc3RhdGljIHZvaWQga2lja19kZWZlcnJlZF9mcmVlKHN0cnVjdCB6c19wb29sICpwb29sKTtcbi0tXG5tbS96c21hbGxvYy5jPTkzMT1zdGF0aWMgc3RydWN0IHpzcGFnZSAqYWxsb2NfenNwYWdlKHN0cnVjdCB6c19wb29sICpwb29sLFxuLS1cbm1tL3pzbWFsbG9jLmMtOTQxLVxubW0venNtYWxsb2MuYzo5NDI6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pKVxubW0venNtYWxsb2MuYy05NDMtXHRcdGdmcCBcdTAwMjY9IH5fX0dGUF9NT1ZBQkxFO1xuLS1cbm1tL3pzbWFsbG9jLmM9MTU5ND1zdGF0aWMgaW50IHB1dGJhY2tfenNwYWdlKHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcywgc3RydWN0IHpzcGFnZSAqenNwYWdlKVxuLS1cbm1tL3pzbWFsbG9jLmMtMTYwMy1cbm1tL3pzbWFsbG9jLmM6MTYwNDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3pzbWFsbG9jLmMtMTYwNS0vKlxuLS1cbm1tL3pzbWFsbG9jLmM9MTYwOT1zdGF0aWMgdm9pZCBsb2NrX3pzcGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4tLVxubW0venNtYWxsb2MuYy0xNjQ1LX1cbm1tL3pzbWFsbG9jLmM6MTY0NjojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbm1tL3pzbWFsbG9jLmMtMTY0Ny1cbm1tL3pzbWFsbG9jLmM6MTY0ODojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3pzbWFsbG9jLmMtMTY0OS1cbi0tXG5tbS96c21hbGxvYy5jPTIyMzc9c3RhdGljIGludCBfX2luaXQgenNfaW5pdCh2b2lkKVxuLS1cbm1tL3pzbWFsbG9jLmMtMjI0NC1cbm1tL3pzbWFsbG9jLmM6MjI0NTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3pzbWFsbG9jLmMtMjI0Ni1cdHJjID0gc2V0X21vdmFibGVfb3BzKFx1MDAyNnpzbWFsbG9jX21vcHMsIFBHVFlfenNtYWxsb2MpO1xuLS1cbm1tL3pzbWFsbG9jLmM9MjI1Nj1zdGF0aWMgdm9pZCBfX2V4aXQgenNfZXhpdCh2b2lkKVxubW0venNtYWxsb2MuYy0yMjU3LXtcbm1tL3pzbWFsbG9jLmM6MjI1ODojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3pzbWFsbG9jLmMtMjI1OS1cdHNldF9tb3ZhYmxlX29wcyhOVUxMLCBQR1RZX3pzbWFsbG9jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTI4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gSHVnZSBQYWdlczogQ29uZmlncyBhbmQgS2VybmVsIENvZGUqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGVzZSBjb25maWd1cmF0aW9uczogYENPTVBBQ1RJT05gIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIGtub3cgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBsYXJnZSBwYWdlcy4gU2luY2UgSSBoYXZlIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHksIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBpbW1lZGlhdGUgZm9jdXMsIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBkaXJlY3RseSB0byB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzZWUgaG93IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgaW1wbGVtZW50ZWQuIEkmIzM5O2xsIG9wZW4gdXAgYG1tL2h1Z2VfbWVtb3J5LmNgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBodWdlIHBhZ2UgbWFuYWdlbWVudCB3aWxsIGJlLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBlbmFibGVtZW50IGNoZWNrcywgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBhbmQgaG9wZWZ1bGx5LCBzb21lIGNsdWVzIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBjb21wYWN0aW9uLCB3aGljaCBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGZyYWdtZW50aW5nIG1lbW9yeS4gSSYjMzk7bSBob3BpbmcgdGhpcyB3aWxsIHByb3ZpZGUgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU3NCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4tLVxubW0vY29tcGFjdGlvbi5jPTU5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfVxuLS1cbm1tL2NvbXBhY3Rpb24uYy03NC0gKi9cbm1tL2NvbXBhY3Rpb24uYzo3NTojaWYgZGVmaW5lZCBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2NvbXBhY3Rpb24uYy03Ni0jZGVmaW5lIENPTVBBQ1RJT05fSFBBR0VfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz03NT12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbm1tL2RhbW9uL29wcy1jb21tb24uYy03Ni17XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6Nzc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTc4LVx0cG1kX3QgcG1kdmFsID0gcG1kcF9nZXQocG1kKTtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtOTktXHRmb2xpb19wdXQoZm9saW8pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jOjEwMDojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTAxLX1cbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTk0PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX3lvdW5nX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMTUtXHRcdH0gZWxzZSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjE2OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMTctXHRcdFx0cG1kX3QgcG1kID0gcG1kcF9nZXQocHZtdy5wbWQpO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMjMtXHRcdFx0V0FSTl9PTl9PTkNFKDEpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIyNDojZW5kaWZcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIyNS1cdFx0fVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9MzkyPXN0YXRpYyBpbnQgZGFtb25feW91bmdfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTQwMC1cbm1tL2RhbW9uL3ZhZGRyLmM6NDAxOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtNDAyLVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXHUwMDNldm1hKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTQxOS1cdH1cbm1tL2RhbW9uL3ZhZGRyLmM6NDIwOiNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kYW1vbi92YWRkci5jLTQyMS1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTY1OD1zdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTY2OS1cbm1tL2RhbW9uL3ZhZGRyLmM6NjcwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtNjcxLVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXHUwMDNldm1hKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTY4Ny1cdH1cbm1tL2RhbW9uL3ZhZGRyLmM6Njg4OiNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kYW1vbi92YWRkci5jLTY4OS1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTgxOD1zdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTgyOS1cbm1tL2RhbW9uL3ZhZGRyLmM6ODMwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtODMxLVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgcHRlX2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTE3Mi1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxNzM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTE3NC1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQyMz1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDI0LSNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQyNTojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNi1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpIHsgfVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz00MzE9c3RhdGljIHZvaWQgX19pbml0IHB1ZF9sZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQzMjojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDMzLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz02NzE9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02ODItXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NjgzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02ODQtc3RhdGljIHZvaWQgX19pbml0IHBtZF9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02OTgtfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjY5OTojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTcwMC1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX3Byb3Rub25lX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjcwMTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzAyLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03MTU9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9zd2FwX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzMxLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjczMjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzMzLXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03NDk9c3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzY3LX1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3Njg6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03Njktc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTc3MD1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3NzE6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTc3Mi1cbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTAxPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDMtXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTA0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDUtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU1PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk1Ni0jZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5NTc6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTgtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU5PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk2MDojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTYxLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz05ODc9c3RhdGljIHZvaWQgX19pbml0IGRlc3Ryb3lfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05ODktXHQvKiBGcmVlIChodWdlKSBwYWdlICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTkwOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTEtXHQgICAgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTgtXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTk5Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMDAwLVx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz0xMTQzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjM5LVx0ICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6MTI0MDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI0MS1cdCAgICBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKCkpIHtcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI1MC1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxMjUxOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjUyLVx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7XG4tLVxubW0vZmlsZW1hcC5jPTMzMTQ9c3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2ZpbGVtYXAuYy0zMzI2LVx0LyogVXNlIHRoZSByZWFkYWhlYWQgY29kZSwgZXZlbiBpZiByZWFkYWhlYWQgaXMgZGlzYWJsZWQgKi9cbm1tL2ZpbGVtYXAuYzozMzI3Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgKHZtX2ZsYWdzIFx1MDAyNiBWTV9IVUdFUEFHRSkpIHtcbm1tL2ZpbGVtYXAuYy0zMzI4LVx0XHQvKlxuLS1cbm1tL2d1cC5jPTcwMT1zdGF0aWMgc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ndXAuYy03MzQtXG5tbS9ndXAuYzo3MzU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZ3VwLmMtNzM2LVx0aWYgKHBtZF90cmFuc19odWdlKHBtZHZhbCkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgRk9MTF9UT1VDSCkpXG5tbS9ndXAuYy03MzctXHRcdHRvdWNoX3BtZCh2bWEsIGFkZHIsIHBtZCwgZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEUpO1xubW0vZ3VwLmM6NzM4OiNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9ndXAuYy03MzktXG4tLVxubW0vaG1tLmM9MTgxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBobW1fcGZuX2ZsYWdzX29yZGVyKHVuc2lnbmVkIGxvbmcgb3JkZXIpXG4tLVxubW0vaG1tLmMtMTg1LVxubW0vaG1tLmM6MTg2OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2htbS5jLTE4Ny1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX3RvX2htbV9wZm5fZmxhZ3Moc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG4tLVxubW0vaG1tLmM9MTk3PXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vaG1tLmMtMjIwLX1cbm1tL2htbS5jOjIyMTojZWxzZSAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2htbS5jLTIyMi0vKiBzdHViIHRvIGFsbG93IHRoZSBjb2RlIGJlbG93IHRvIGNvbXBpbGUgKi9cbm1tL2htbS5jPTIyMz1pbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9obW0uYy0yMjQtXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIGhtbV9wZm5zW10sIHBtZF90IHBtZCk7XG5tbS9obW0uYzoyMjU6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vaG1tLmMtMjI2LVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NjA9dW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyBfX3JlYWRfbW9zdGx5ID1cbm1tL2h1Z2VfbWVtb3J5LmM6NjE6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL2h1Z2VfbWVtb3J5LmMtNjItXHQoMVx1MDAzY1x1MDAzY1RSQU5TUEFSRU5UX0hVR0VQQUdFX0ZMQUcpfFxubW0vaHVnZV9tZW1vcnkuYy02My0jZW5kaWZcbm1tL2h1Z2VfbWVtb3J5LmM6NjQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9odWdlX21lbW9yeS5jLTY1LVx0KDFcdTAwM2NcdTAwM2NUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHKXxcbi0tXG5tbS9rc20uYz0yNDk0PXN0YXRpYyBpbnQga3NtX25leHRfcGFnZV9wbWRfZW50cnkocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0va3NtLmMtMjUxNC1cbm1tL2tzbS5jOjI1MTU6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBwbWRfbGVhZihwbWQpKSB7XG5tbS9rc20uYy0yNTE2LVx0XHRwdGwgPSBwbWRfbG9jayhtbSwgcG1kcCk7XG4tLVxubW0vbWFkdmlzZS5jPTM1ND1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy0zNzYtXG5tbS9tYWR2aXNlLmM6Mzc3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21hZHZpc2UuYy0zNzgtXHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZCkpIHtcbi0tXG5tbS9tYWR2aXNlLmM9MTUxOT1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTUzOS0jZW5kaWZcbm1tL21hZHZpc2UuYzoxNTQwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21hZHZpc2UuYy0xNTQxLVx0Y2FzZSBNQURWX0hVR0VQQUdFOlxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xODY2PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2cxX3N0YXRzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4NjgtXHROUl9BTk9OX01BUFBFRCxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODY5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbWNvbnRyb2wtdjEuYy0xODcwLVx0TlJfQU5PTl9USFBTLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xODg0PXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZW1jZzFfc3RhdF9uYW1lc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xODg2LVx0XCYjMzQ7cnNzXCYjMzQ7LFxubW0vbWVtY29udHJvbC12MS5jOjE4ODc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtY29udHJvbC12MS5jLTE4ODgtXHRcJiMzNDtyc3NfaHVnZVwmIzM0Oyxcbi0tXG5tbS9tZW1jb250cm9sLmM9NTUzPXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01NzQtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NTc1OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbWNvbnRyb2wuYy01NzYtXHRUSFBfRkFVTFRfQUxMT0MsXG4tLVxubW0vbWVtY29udHJvbC5jPTE1NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTU2Ny0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzoxNTY4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbWNvbnRyb2wuYy0xNTY5LVx0eyBcJiMzNDthbm9uX3RocFwmIzM0OyxcdFx0XHROUl9BTk9OX1RIUFNcdFx0XHR9LFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9Njc5PXN0YXRpYyBpbnQgY2hlY2tfaHdwb2lzb25lZF9lbnRyeShwdGVfdCBwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgc2hvcnQgc2hpZnQsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy03MDMtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjcwNDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9tZW1vcnktZmFpbHVyZS5jLTcwNS1zdGF0aWMgaW50IGNoZWNrX2h3cG9pc29uZWRfcG1kX2VudHJ5KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmM9NDA2Nz1zdGF0aWMgdm1fZmF1bHRfdCB3cF9wYWdlX3NoYXJlZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1vcnkuYy00MTA2LVxubW0vbWVtb3J5LmM6NDEwNzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9tZW1vcnkuYy00MTA4LXN0YXRpYyBib29sIF9fd3BfY2FuX3JldXNlX2xhcmdlX2Fub25fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1vcnkuYy00MTcyLX1cbm1tL21lbW9yeS5jOjQxNzM6I2Vsc2UgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vbWVtb3J5LmMtNDE3NC1zdGF0aWMgYm9vbCBfX3dwX2Nhbl9yZXVzZV9sYXJnZV9hbm9uX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtb3J5LmMtNDE3OC19XG5tbS9tZW1vcnkuYzo0MTc5OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL21lbW9yeS5jLTQxODAtXG5tbS9tZW1vcnkuYz00MTgxPXN0YXRpYyBib29sIHdwX2Nhbl9yZXVzZV9hbm9uX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtb3J5LmMtNDE4My17XG5tbS9tZW1vcnkuYzo0MTg0Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG5tbS9tZW1vcnkuYy00MTg1LVx0XHRyZXR1cm4gX193cF9jYW5fcmV1c2VfbGFyZ2VfYW5vbl9mb2xpbyhmb2xpbywgdm1hKTtcbi0tXG5tbS9tZW1vcnkuYz00NTg1PXN0YXRpYyB2bV9mYXVsdF90IGhhbmRsZV9wdGVfbWFya2VyKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ2MTEtXG5tbS9tZW1vcnkuYzo0NjEyOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbW9yeS5jLTQ2MTMtLypcbi0tXG5tbS9tZW1vcnkuYz00NjYxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ3MjAtfVxubW0vbWVtb3J5LmM6NDcyMTojZWxzZSAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9tZW1vcnkuYy00NzIyLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ3MjUtfVxubW0vbWVtb3J5LmM6NDcyNjojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9tZW1vcnkuYy00NzI3LVxuLS1cbm1tL21lbW9yeS5jPTUxNjE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy01MTYzLVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xubW0vbWVtb3J5LmM6NTE2NDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9tZW1vcnkuYy01MTY1LVx0dW5zaWduZWQgbG9uZyBvcmRlcnM7XG4tLVxubW0vbWVtb3J5LmM9NTM5OD1zdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTU0NTMtXG5tbS9tZW1vcnkuYzo1NDU0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbW9yeS5jLTU0NTUtc3RhdGljIHZvaWQgZGVwb3NpdF9wcmVhbGxvY19wdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmM9NjI0Mj1zdGF0aWMgdm1fZmF1bHRfdCBjcmVhdGVfaHVnZV9wdWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9tZW1vcnkuYy02MjQzLXtcbm1tL21lbW9yeS5jOjYyNDQ6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcdFx0XHRcXFxubW0vbWVtb3J5LmMtNjI0NS1cdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG4tLVxubW0vbWVtb3J5LmMtNjI1MS1cdFx0cmV0dXJuIHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlaHVnZV9mYXVsdCh2bWYsIFBVRF9PUkRFUik7XG5tbS9tZW1vcnkuYzo2MjUyOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL21lbW9yeS5jLTYyNTMtXHRyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7XG4tLVxubW0vbWVtb3J5LmM9NjI1Nj1zdGF0aWMgdm1fZmF1bHRfdCB3cF9odWdlX3B1ZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgcHVkX3Qgb3JpZ19wdWQpXG5tbS9tZW1vcnkuYy02MjU3LXtcbm1tL21lbW9yeS5jOjYyNTg6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcdFx0XHRcXFxubW0vbWVtb3J5LmMtNjI1OS1cdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG4tLVxubW0vbWVtb3J5LmMtNjI3NS1cdF9fc3BsaXRfaHVnZV9wdWQodm1hLCB2bWYtXHUwMDNlcHVkLCB2bWYtXHUwMDNlYWRkcmVzcyk7XG5tbS9tZW1vcnkuYzo2Mjc2OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2IENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXG5tbS9tZW1vcnkuYy02Mjc3LVx0cmV0dXJuIFZNX0ZBVUxUX0ZBTExCQUNLO1xuLS1cbm1tL21lbW9yeS5jPTcyOTQ9RVhQT1JUX1NZTUJPTChfX21pZ2h0X2ZhdWx0KTtcbi0tXG5tbS9tZW1vcnkuYy03Mjk2LVxubW0vbWVtb3J5LmM6NzI5NzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IGRlZmluZWQoQ09ORklHX0hVR0VUTEJGUylcbm1tL21lbW9yeS5jLTcyOTgtLypcbi0tXG5tbS9tZW1vcnkuYz03NDg1PWxvbmcgY29weV9mb2xpb19mcm9tX3VzZXIoc3RydWN0IGZvbGlvICpkc3RfZm9saW8sXG4tLVxubW0vbWVtb3J5LmMtNzUxNC19XG5tbS9tZW1vcnkuYzo3NTE1OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgfHwgQ09ORklHX0hVR0VUTEJGUyAqL1xubW0vbWVtb3J5LmMtNzUxNi1cbi0tXG5tbS9tZW1wb2xpY3kuYz0yNDQ1PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbXBvbChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNDU1LVxubW0vbWVtcG9saWN5LmM6MjQ1NjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG5tbS9tZW1wb2xpY3kuYy0yNDU3LVx0ICAgIC8qIGZpbHRlciBcJiMzNDtodWdlcGFnZVwmIzM0OyBhbGxvY2F0aW9uLCB1bmxlc3MgZnJvbSBhbGxvY19wYWdlcygpICovXG4tLVxubW0vbWlncmF0ZS5jPTE1ODA9c3RhdGljIGlubGluZSBpbnQgdHJ5X3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcbi0tXG5tbS9taWdyYXRlLmMtMTU5OC1cbm1tL21pZ3JhdGUuYzoxNTk5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21pZ3JhdGUuYy0xNjAwLSNkZWZpbmUgTlJfTUFYX0JBVENIRURfTUlHUkFUSU9OXHRIUEFHRV9QTURfTlJcbi0tXG5tbS9tbWFwLmM9ODEzPV9fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXG4tLVxubW0vbW1hcC5jLTg0NC1cdFx0YWRkciA9IGdldF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzKTtcbm1tL21tYXAuYzo4NDU6XHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgIWZpbGVcbm1tL21tYXAuYy04NDYtXHRcdCAgIFx1MDAyNlx1MDAyNiAhYWRkciAvKiBubyBoaW50ICovXG4tLVxubW0vbXJlbWFwLmM9NDcwPXN0YXRpYyBpbmxpbmUgYm9vbCBtb3ZlX25vcm1hbF9wdWQoc3RydWN0IHBhZ2V0YWJsZV9tb3ZlX2NvbnRyb2wgKnBtYyxcbi0tXG5tbS9tcmVtYXAuYy00NzYtXG5tbS9tcmVtYXAuYzo0Nzc6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcbm1tL21yZW1hcC5jLTQ3OC1zdGF0aWMgYm9vbCBtb3ZlX2h1Z2VfcHVkKHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsXG4tLVxubW0vbXJlbWFwLmM9NTk2PXN0YXRpYyBib29sIG1vdmVfcGd0X2VudHJ5KHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsXG4tLVxubW0vbXJlbWFwLmMtNjEzLVx0Y2FzZSBIUEFHRV9QTUQ6XG5tbS9tcmVtYXAuYzo2MTQ6XHRcdG1vdmVkID0gSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlxubW0vbXJlbWFwLmMtNjE1LVx0XHRcdG1vdmVfaHVnZV9wbWQocG1jLVx1MDAzZW9sZCwgcG1jLVx1MDAzZW9sZF9hZGRyLCBwbWMtXHUwMDNlbmV3X2FkZHIsIG9sZF9lbnRyeSxcbi0tXG5tbS9tcmVtYXAuYy02MTgtXHRjYXNlIEhQQUdFX1BVRDpcbm1tL21yZW1hcC5jOjYxOTpcdFx0bW92ZWQgPSBJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG5tbS9tcmVtYXAuYy02MjAtXHRcdFx0bW92ZV9odWdlX3B1ZChwbWMsIG9sZF9lbnRyeSwgbmV3X2VudHJ5KTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NjUxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9yZGVyX3RvX3BpbmRleChpbnQgbWlncmF0ZXR5cGUsIGludCBvcmRlcilcbm1tL3BhZ2VfYWxsb2MuYy02NTIte1xubW0vcGFnZV9hbGxvYy5jOjY1MzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpIHtcbm1tL3BhZ2VfYWxsb2MuYy02NTQtXHRcdGJvb2wgbW92YWJsZSA9IG1pZ3JhdGV0eXBlID09IE1JR1JBVEVfTU9WQUJMRTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NjYzPXN0YXRpYyBpbmxpbmUgaW50IHBpbmRleF90b19vcmRlcih1bnNpZ25lZCBpbnQgcGluZGV4KVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy02NjYtXG5tbS9wYWdlX2FsbG9jLmM6NjY3Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkge1xubW0vcGFnZV9hbGxvYy5jLTY2OC1cdFx0aWYgKHBpbmRleCBcdTAwM2U9IE5SX0xPV09SREVSX1BDUF9MSVNUUylcbi0tXG5tbS9wYWdlX2FsbG9jLmM9Njc1PXN0YXRpYyBpbmxpbmUgYm9vbCBwY3BfYWxsb3dlZF9vcmRlcih1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTY3OC1cdFx0cmV0dXJuIHRydWU7XG5tbS9wYWdlX2FsbG9jLmM6Njc5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3BhZ2VfYWxsb2MuYy02ODAtXHRpZiAoaXNfcG1kX29yZGVyKG9yZGVyKSlcbi0tXG5tbS9wYWdlX2lkbGUuYz01Mj1zdGF0aWMgYm9vbCBwYWdlX2lkbGVfY2xlYXJfcHRlX3JlZnNfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcGFnZV9pZGxlLmMtNzItXHRcdFx0cmVmZXJlbmNlZCB8PSBtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBhZGRyICYjNDM7IFBBR0VfU0laRSk7XG5tbS9wYWdlX2lkbGUuYzo3MzpcdFx0fSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpIHtcbm1tL3BhZ2VfaWRsZS5jLTc0LVx0XHRcdHBtZF90IHBtZHZhbCA9IHBtZHBfZ2V0KHB2bXcucG1kKTtcbi0tXG5tbS9wYWdlX2lvLmM9MzA1PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9zd3BvdXRfdm1fZXZlbnQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3BhZ2VfaW8uYy0zMDYte1xubW0vcGFnZV9pby5jOjMwNzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9wYWdlX2lvLmMtMzA4LVx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKSkpIHtcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz05Nz1wdGVfdCBwdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmMtMTA4LVxubW0vcGd0YWJsZS1nZW5lcmljLmM6MTA5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTExMC1cbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz0yNTA9dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpXG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjU3LSNlbmRpZiAvKiBwdGVfZnJlZV9kZWZlciAqL1xubW0vcGd0YWJsZS1nZW5lcmljLmM6MjU4OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1OS1cbi0tXG5tbS9ybWFwLmM9OTE3PXN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTk4Ni1cdFx0XHRcdHJlZmVyZW5jZWQmIzQzOyYjNDM7O1xubW0vcm1hcC5jOjk4NzpcdFx0fSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpIHtcbm1tL3JtYXAuYy05ODgtXHRcdFx0aWYgKHBtZHBfY2xlYXJfZmx1c2hfeW91bmdfbm90aWZ5KHZtYSwgYWRkcmVzcyxcbi0tXG5tbS9ybWFwLmM9MTEwMz1zdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbi0tXG5tbS9ybWFwLmMtMTE0My1cdFx0fSBlbHNlIHtcbm1tL3JtYXAuYzoxMTQ0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3JtYXAuYy0xMTQ1LVx0XHRcdHBtZF90ICpwbWQgPSBwdm13LVx1MDAzZXBtZDtcbi0tXG5tbS9ybWFwLmM9MTYxNj12b2lkIGZvbGlvX2FkZF9hbm9uX3JtYXBfcG1kKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3JtYXAuYy0xNjE4LXtcbm1tL3JtYXAuYzoxNjE5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3JtYXAuYy0xNjIwLVx0X19mb2xpb19hZGRfYW5vbl9ybWFwKGZvbGlvLCBwYWdlLCBIUEFHRV9QTURfTlIsIHZtYSwgYWRkcmVzcywgZmxhZ3MsXG4tLVxubW0vcm1hcC5jPTE3NDU9dm9pZCBmb2xpb19hZGRfZmlsZV9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9ybWFwLmMtMTc0Ny17XG5tbS9ybWFwLmM6MTc0ODojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9ybWFwLmMtMTc0OS1cdF9fZm9saW9fYWRkX2ZpbGVfcm1hcChmb2xpbywgcGFnZSwgSFBBR0VfUE1EX05SLCB2bWEsIFBHVEFCTEVfTEVWRUxfUE1EKTtcbi0tXG5tbS9ybWFwLmM9MTc2NT12b2lkIGZvbGlvX2FkZF9maWxlX3JtYXBfcHVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3JtYXAuYy0xNzY3LXtcbm1tL3JtYXAuYzoxNzY4OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IFxcXG5tbS9ybWFwLmMtMTc2OS1cdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG4tLVxubW0vcm1hcC5jPTE5MTM9dm9pZCBmb2xpb19yZW1vdmVfcm1hcF9wbWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcm1hcC5jLTE5MTUte1xubW0vcm1hcC5jOjE5MTY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vcm1hcC5jLTE5MTctXHRfX2ZvbGlvX3JlbW92ZV9ybWFwKGZvbGlvLCBwYWdlLCBIUEFHRV9QTURfTlIsIHZtYSwgUEdUQUJMRV9MRVZFTF9QTUQpO1xuLS1cbm1tL3JtYXAuYz0xOTMzPXZvaWQgZm9saW9fcmVtb3ZlX3JtYXBfcHVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3JtYXAuYy0xOTM1LXtcbm1tL3JtYXAuYzoxOTM2OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IFxcXG5tbS9ybWFwLmMtMTkzNy1cdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG4tLVxubW0vc2htZW0uYz0xMTM9c3RydWN0IHNobWVtX29wdGlvbnMge1xuLS1cbm1tL3NobWVtLmMtMTM2LVxubW0vc2htZW0uYzoxMzc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy0xMzgtc3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZV9zaG1lbV9vcmRlcnNfYWx3YXlzIF9fcmVhZF9tb3N0bHk7XG4tLVxubW0vc2htZW0uYz01MjA9c3RhdGljIGludCBzaG1lbV9jb25maXJtX3N3YXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYy01NjgtXG5tbS9zaG1lbS5jOjU2OTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTU3MC0vKiBpZmRlZiBoZXJlIHRvIGF2b2lkIGJsb2F0aW5nIHNobWVtLm8gd2hlbiBub3QgbmVjZXNzYXJ5ICovXG5tbS9zaG1lbS5jLTU3MS1cbm1tL3NobWVtLmM6NTcyOiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSKVxubW0vc2htZW0uYy01NzMtI2RlZmluZSBTSE1FTV9IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9ORVZFUlxubW0vc2htZW0uYzo1NzQ6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVMpXG5tbS9zaG1lbS5jLTU3NS0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX0FMV0FZU1xubW0vc2htZW0uYzo1NzY6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRSlcbm1tL3NobWVtLmMtNTc3LSNkZWZpbmUgU0hNRU1fSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL3NobWVtLmM6NTc4OiNlbGlmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFKVxubW0vc2htZW0uYy01NzktI2RlZmluZSBTSE1FTV9IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BRFZJU0Vcbi0tXG5tbS9zaG1lbS5jPTU4ND1zdGF0aWMgaW50IHNobWVtX2h1Z2UgX19yZWFkX21vc3RseSA9IFNITUVNX0hVR0VfREVGQVVMVDtcbi0tXG5tbS9zaG1lbS5jLTU4Ny1cbm1tL3NobWVtLmM6NTg4OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSKVxubW0vc2htZW0uYy01ODktI2RlZmluZSBUTVBGU19IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9ORVZFUlxubW0vc2htZW0uYzo1OTA6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVMpXG5tbS9zaG1lbS5jLTU5MS0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX0FMV0FZU1xubW0vc2htZW0uYzo1OTI6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRSlcbm1tL3NobWVtLmMtNTkzLSNkZWZpbmUgVE1QRlNfSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL3NobWVtLmM6NTk0OiNlbGlmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFKVxubW0vc2htZW0uYy01OTUtI2RlZmluZSBUTVBGU19IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BRFZJU0Vcbi0tXG5tbS9zaG1lbS5jPTg0NT1zdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9jb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbm1tL3NobWVtLmMtODUwLX1cbm1tL3NobWVtLmM6ODUxOiNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL3NobWVtLmMtODUyLVxuLS1cbm1tL3NobWVtLmM9ODYxPXN0YXRpYyB1bnNpZ25lZCBpbnQgc2htZW1faHVnZV9nbG9iYWxfZW5hYmxlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtODY3LX1cbm1tL3NobWVtLmM6ODY4OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL3NobWVtLmMtODY5LVxuLS1cbm1tL3NobWVtLmM9MTU5MT1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfaW9jYiAqKnBsdWcsXG4tLVxubW0vc2htZW0uYy0xNjMzLVxubW0vc2htZW0uYzoxNjM0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3NobWVtLmMtMTYzNS1cdFx0aWYgKG9yZGVyIFx1MDAzZT0gSFBBR0VfUE1EX09SREVSKSB7XG4tLVxubW0vc2htZW0uYz0xNzc4PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBpbl9jbHVzdGVyKHN3cF9lbnRyeV90IHN3YXAsIGdmcF90IGdmcCxcbi0tXG5tbS9zaG1lbS5jLTE3OTEtXG5tbS9zaG1lbS5jOjE3OTI6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy0xNzkzLWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZClcbi0tXG5tbS9zaG1lbS5jPTE4OTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3NobWVtLmMtMTg5Ni19XG5tbS9zaG1lbS5jOjE4OTc6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vc2htZW0uYy0xODk4LVxuLS1cbm1tL3NobWVtLmM9MTkxMz1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9hbGxvY19hbmRfYWRkX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3NobWVtLmMtMTkyNC1cbm1tL3NobWVtLmM6MTkyNTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxubW0vc2htZW0uYy0xOTI2LVx0XHRvcmRlcnMgPSAwO1xuLS1cbm1tL3NobWVtLmM9MjA2Mz1zdGF0aWMgaW50IHNobWVtX3JlcGxhY2VfZm9saW8oc3RydWN0IGZvbGlvICoqZm9saW9wLCBnZnBfdCBnZnAsXG4tLVxubW0vc2htZW0uYy0yMDc3LVx0Z2ZwIFx1MDAyNj0gfkdGUF9DT05TVFJBSU5UX01BU0s7XG5tbS9zaG1lbS5jOjIwNzg6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy0yMDc5LVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxKSB7XG4tLVxubW0vc2htZW0uYz0yNzE0PXVuc2lnbmVkIGxvbmcgc2htZW1fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxubW0vc2htZW0uYy0yNzI5LVxubW0vc2htZW0uYzoyNzMwOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG5tbS9zaG1lbS5jLTI3MzEtXHRcdHJldHVybiBhZGRyO1xuLS1cbm1tL3NobWVtLmMtMjc3My1cdFx0XHQgKi9cbm1tL3NobWVtLmM6Mjc3NDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTI3NzUtXHRcdFx0aHBhZ2Vfb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5cyk7XG4tLVxubW0vc2htZW0uYz00NTA3PXN0YXRpYyBpbnQgc2htZW1fcGFyc2Vfb25lKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxubW0vc2htZW0uYy00NTc2LVx0XHRpZiAoY3R4LVx1MDAzZWh1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUiBcdTAwMjZcdTAwMjZcbm1tL3NobWVtLmM6NDU3NzpcdFx0ICAgICEoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlxubW0vc2htZW0uYy00NTc4LVx0XHQgICAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkpXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE2OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW06IGBtbS9jb21wYWN0aW9uLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9pbnRlcm5hbC5oYCwgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgbW9kaWZpY2F0aW9ucyB0byBzZXZlcmFsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlc2UgZmlsZXMuIEluIGBtbS9jb21wYWN0aW9uLmNgLCBJIHNlZSBjaGFuZ2VzIHRvIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYW5kIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAuIGBtbS9odWdlX21lbW9yeS5jYCBoYXMgY2hhbmdlcyB0byBgX19zcGxpdF9mb2xpb190b19vcmRlcmAuIGBtbS9pbnRlcm5hbC5oYCBzZWVzIGEgbW9kaWZpY2F0aW9uIHRvIGBwcmVwX2NvbXBvdW5kX3RhaWxgLiBGaW5hbGx5LCBgbW0vcGFnZV9hbGxvYy5jYCBoYXMgYmVlbiB1cGRhdGVkIHdpdGggY2hhbmdlcyB0byBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgLgoKVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBmdW5jdGlvbmFsOyB0aGV5JiMzOTtyZSByZW1vdmluZyBgc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcilgIGNhbGxzIGZvciBmcmVlIGFuZCB0YWlsIHBhZ2VzLiBUaGVuIHRoZXkmIzM5O3JlIGFkZGluZyBjaGVja3MgdG8gY29uZmlybSB0aGF0IGBwYWdlLSZndDtwcml2YXRlYCBpcyAwLCBpbXBseWluZyBhIHJlbGlhbmNlIG9uIHRoaXMgdmFsdWUgZm9yIGVpdGhlciBjb250cm9sIG9yIHN0YXRlLgoKTGV0JiMzOTtzIGRpdmUgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYC4gVGhpcyBpcyB3aGVyZSB0aGUgaW1wYWN0IHdpbGwgYmUgbW9zdCBpbnRlcmVzdGluZy4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBjb21wb3VuZCBwYWdlcyBhbmQgdGhlIGZyZWVpbmcgcGF0aC4gSSYjMzk7bSBsb29raW5nIGZvciBob3cgdGhpcyBjaGFuZ2UgaW1wYWN0cyBjb2FsZXNjaW5nLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIHBhZ2UgY2FjaGUgb3IgbWVtb3J5IHJlY2xhaW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zcGxpdF9mb2xpb190b19vcmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM1MTU9c3RhdGljIGJvb2wgcGFnZV9yYW5nZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgbG9uZyBucl9wYWdlcylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM1MjYtICovXG5tbS9odWdlX21lbW9yeS5jOjM1Mjc6c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy0zNTI4LVx0XHRpbnQgbmV3X29yZGVyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzY2Ni0gKiAxLiB1bmlmb3JtIHNwbGl0OiBAeGFzIGlzIHNwbGl0IHdpdGggbm8gZXhwZWN0YXRpb24gb2YgZmFpbHVyZSBhbmQgYSBzaW5nbGVcbm1tL2h1Z2VfbWVtb3J5LmM6MzY2NzogKiAgICBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKCkgaXMgY2FsbGVkIHRvIHNwbGl0IHRoZSBAZm9saW8gaW50byBAbmV3X29yZGVyXG5tbS9odWdlX21lbW9yeS5jLTM2NjgtICogICAgYWxvbmcgd2l0aCBzdGF0cyB1cGRhdGUuXG5tbS9odWdlX21lbW9yeS5jLTM2NjktICogMi4gbm9uLXVuaWZvcm0gc3BsaXQ6IGZvbGlvX29yZGVyIC0gQG5ld19vcmRlciBjYWxscyB0b1xubW0vaHVnZV9tZW1vcnkuYzozNjcwOiAqICAgIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoKSBhcmUgZXhwZWN0ZWQgdG8gYmUgbWFkZSBpbiBhIGZvciBsb29wIHRvIHNwbGl0XG5tbS9odWdlX21lbW9yeS5jLTM2NzEtICogICAgdGhlIEBmb2xpbyB0byBvbmUgbG93ZXIgb3JkZXIgYXQgYSB0aW1lLiBUaGUgZm9saW8gY29udGFpbmluZyBAc3BsaXRfYXRcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM2ODM9c3RhdGljIGludCBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNzI4LVx0XHRwZ2FsbG9jX3RhZ19zcGxpdChmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XG5tbS9odWdlX21lbW9yeS5jOjM3Mjk6XHRcdF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xubW0vaHVnZV9tZW1vcnkuYy0zNzMwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDAzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTY5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqTmF2aWdhdGluZyB0aGUgRm9saW8gU3BsaXR0aW5nIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cgaGVyZS4gSXQgbG9va3MgbGlrZSBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgaXMgYmVpbmcgaW52b2tlZCBieSB0aGUgYF9fc3BsaXRfdW5tYXBwZWRfZm9saW9gIGZ1bmN0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLCBidXQgYmVmb3JlIEkgZ28gdG9vIGZhciBkb3duIHRoZSByYWJiaXQgaG9sZSBvZiBgX19zcGxpdF9mb2xpb190b19vcmRlcmAsIEkgc2hvdWxkIHByb2JhYmx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgdGhhdCYjMzk7cyAqdHJpZ2dlcmluZyogaXQuIFRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgdG8gZGlnIGludG8gYF9fc3BsaXRfdW5tYXBwZWRfZm9saW9gLiBVbmRlcnN0YW5kaW5nICp3aHkqIHdlJiMzOTtyZSBzcGxpdHRpbmcgdW5tYXBwZWQgZm9saW9zIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIGxvZ2ljIG9mIHRoZSBzZWNvbmRhcnkgc3BsaXQgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zcGxpdF91bm1hcHBlZF9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM1Mjc9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzY0Mi0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6MzY0MzogKiBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKCkgLSBzcGxpdHMgYW4gdW5tYXBwZWQgQGZvbGlvIHRvIGxvd2VyIG9yZGVyIGZvbGlvcyBpblxubW0vaHVnZV9tZW1vcnkuYy0zNjQ0LSAqIHR3byB3YXlzOiB1bmlmb3JtIHNwbGl0IG9yIG5vbi11bmlmb3JtIHNwbGl0LlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzY4Mi0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MzY4MzpzdGF0aWMgaW50IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtMzY4NC1cdFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM4MTA9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM4ODMtXG5tbS9odWdlX21lbW9yeS5jOjM4ODQ6XHRcdHJldCA9IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIHhhcyxcbm1tL2h1Z2VfbWVtb3J5LmMtMzg4NS1cdFx0XHRcdFx0ICAgICBtYXBwaW5nLCBzcGxpdF90eXBlKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5NzMtICpcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk3NDogKiBJdCBjYWxscyBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKCkgdG8gcGVyZm9ybSB1bmlmb3JtIGFuZCBub24tdW5pZm9ybSBzcGxpdC5cbm1tL2h1Z2VfbWVtb3J5LmMtMzk3NS0gKiBJdCBpcyBpbiBjaGFyZ2Ugb2YgY2hlY2tpbmcgd2hldGhlciB0aGUgc3BsaXQgaXMgc3VwcG9ydGVkIG9yIG5vdCBhbmRcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk3NjogKiBwcmVwYXJpbmcgQGZvbGlvIGZvciBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKCkuXG5tbS9odWdlX21lbW9yeS5jLTM5NzctICpcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM5ODY9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MDY4LVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzo0MDY5Olx0XHQgKl9fc3BsaXRfdW5tYXBwZWRfZm9saW8oKSBtYXkgbmVlZCB0byB0cmltIG9mZiBwYWdlcyBiZXlvbmRcbm1tL2h1Z2VfbWVtb3J5LmMtNDA3MC1cdFx0ICogRU9GOiBidXQgb24gMzItYml0LCBpX3NpemVfcmVhZCgpIHRha2VzIGFuIGlycS11bnNhZmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5NzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIFNwbGl0dGluZyBQcm9jZXNzKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9uIGBfX2ZvbGlvX3NwbGl0YCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjayBhbmQgdW5kZXJzdGFuZCB0aGUgd2hvbGUgY2FsbCBzdGFjayBhbmQgdGhlIGRhdGEgZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIGBfX2ZvbGlvX3NwbGl0YCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuICBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAuICBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgaGFuZGxpbmcgdGhlIGxvZ2ljIGZvciB0YWtpbmcgYSB2ZXJ5IGxhcmdlICYjMzQ7cGFnZSYjMzQ7IG9mIGRhdGEgYW5kIGJyZWFraW5nIGl0IGRvd24gaW50byBhIG1vcmUgbWFuYWdlYWJsZSwgb3JkZXJlZCBsaXN0IG9mIHNtYWxsZXIgc2VnbWVudHMuIFVuZGVyc3RhbmRpbmcgdGhlIGFsZ29yaXRobSB1c2VkIGhlcmUgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB3aHkgaXQmIzM5O3MgY2FsbGluZyBgX19mb2xpb19zcGxpdGAuIElzIGl0IGEgcGFydGl0aW9uaW5nIHN0cmF0ZWd5LCBhIGJsb2NrIGRlY29tcG9zaXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyAgS25vd2luZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGFuZCB0aGUgb3JkZXJpbmcgcmVxdWlyZW1lbnRzIHdpbGwgYmUga2V5IHRvIG1ha2luZyBzZW5zZSBvZiBgX19mb2xpb19zcGxpdGAmIzM5O3MgcHVycG9zZSB3aXRoaW4gdGhpcyB3b3JrZmxvdy4gSSBhbnRpY2lwYXRlIHRoYXQgYF9fZm9saW9fc3BsaXRgIHdpbGwgYmUgcGVyZm9ybWluZyB0aGUgYWN0dWFsIHNwbGl0dGluZyBvcGVyYXRpb24sIGJ1dCBJIG5lZWQgdG8gc2VlIGhvdyBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGlzIHNldHRpbmcgdXAgdGhlIHBhcmFtZXRlcnMgYW5kIGNvbnRyb2xsaW5nIHRoZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTQxNzg9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MjQ0LSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0MjQ1OmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00MjQ2LVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI2Mi0gKiBJdCBoYXMgdGhlIHNhbWUgcHJlcmVxdWlzaXRlcyBhbmQgcmV0dXJucyBhc1xubW0vaHVnZV9tZW1vcnkuYzo0MjYzOiAqIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKCkuXG5tbS9odWdlX21lbW9yeS5jLTQyNjQtICpcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQzMTI9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbm1tL2h1Z2VfbWVtb3J5LmMtNDMxMy17XG5tbS9odWdlX21lbW9yeS5jOjQzMTQ6XHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgbGlzdCwgMCk7XG5tbS9odWdlX21lbW9yeS5jLTQzMTUtfVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDU5OD1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NjY3LVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzo0NjY4Olx0XHQgKiBGb3IgZm9saW9zIHdpdGggcHJpdmF0ZSwgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKVxubW0vaHVnZV9tZW1vcnkuYy00NjY5LVx0XHQgKiB3aWxsIHRyeSB0byBkcm9wIGl0IGJlZm9yZSBzcGxpdCBhbmQgdGhlbiBjaGVjayBpZiB0aGUgZm9saW9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3MzgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb3JlIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYC4gSXQmIzM5O3MgYSBwdWJsaWMgQVBJLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50LiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBpbnRlcm5hbCBmdW5jdGlvbnMgdGhhdCBsaWtlbHkgZHJpdmUgaXRzIGJlaGF2aW9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgZmxvdy4gVGhlIGtleSBzeW1ib2xzIHRoYXQgc2VlbSByZWxldmFudCBhcmU6IGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYCwgYW5kIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYC4gVGhlc2UgZmVlbCBsaWtlIHRoZSBndXRzIG9mIHRoZSBvcGVyYXRpb24sIHRoZSBsb3ctbGV2ZWwgYnVpbGRpbmcgYmxvY2tzLgoKV2FpdCBhIHNlY29uZC4uLkkganVzdCBjYXVnaHQgdGhhdCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWlnaHQgcHJlc2VudCBzb21lIGludGVyZXN0aW5nIGNoYWxsZW5nZXMgZm9yIHRlc3Rpbmcgb3IgcG90ZW50aWFsIGZ1dHVyZSBtb2RpZmljYXRpb25zLiBHaXZlbiBpdHMgc3RhdHVzLCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB3b3VsZCBiZSB0byBkcmlsbCBkb3duIGludG8gdGhlIGludGVybmFscyBvZiBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgIGFuZCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AuIFRoZXkmIzM5O3JlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgYW5kIHRoZXkmIzM5O3JlIGxpa2VseSB0aGUgb25lcyBkaXJlY3RseSBoYW5kbGluZyB0aGUgZm9saW8gaXNvbGF0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgcHVibGljIEFQSSwgYnV0IGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCBjb3VsZCBwb3RlbnRpYWxseSBwZXJmb3JtIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBTbyBJJiMzOTtsbCBuZWVkIHRvIGdvIGRlZXBlciBpbnRvIHRob3NlIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jPTU1MT1zdGF0aWMgYm9vbCBjb21wYWN0X3VubG9ja19zaG91bGRfYWJvcnQoc3BpbmxvY2tfdCAqbG9jayxcbi0tXG5tbS9jb21wYWN0aW9uLmMtNTczLSAqL1xubW0vY29tcGFjdGlvbi5jOjU3NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2ZyZWVwYWdlc19ibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcbm1tL2NvbXBhY3Rpb24uYy01NzUtXHRcdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydF9wZm4sXG4tLVxubW0vY29tcGFjdGlvbi5jPTcxMj1pc29sYXRlX2ZyZWVwYWdlc19yYW5nZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcbi0tXG5tbS9jb21wYWN0aW9uLmMtNzI5LVx0XHRcdFx0YmxvY2tfZW5kX3BmbiAmIzQzOz0gcGFnZWJsb2NrX25yX3BhZ2VzKSB7XG5tbS9jb21wYWN0aW9uLmM6NzMwOlx0XHQvKiBQcm90ZWN0IHBmbiBmcm9tIGNoYW5naW5nIGJ5IGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrICovXG5tbS9jb21wYWN0aW9uLmMtNzMxLVx0XHR1bnNpZ25lZCBsb25nIGlzb2xhdGVfc3RhcnRfcGZuID0gcGZuO1xuLS1cbm1tL2NvbXBhY3Rpb24uYy03NDgtXG5tbS9jb21wYWN0aW9uLmM6NzQ5Olx0XHRpc29sYXRlZCA9IGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKGNjLCBcdTAwMjZpc29sYXRlX3N0YXJ0X3Bmbixcbm1tL2NvbXBhY3Rpb24uYy03NTAtXHRcdFx0XHRcdGJsb2NrX2VuZF9wZm4sIGNjLVx1MDAzZWZyZWVwYWdlcywgMCwgdHJ1ZSk7XG4tLVxubW0vY29tcGFjdGlvbi5jLTc1Mi1cdFx0Lypcbm1tL2NvbXBhY3Rpb24uYzo3NTM6XHRcdCAqIEluIHN0cmljdCBtb2RlLCBpc29sYXRlX2ZyZWVwYWdlc19ibG9jaygpIHJldHVybnMgMCBpZlxubW0vY29tcGFjdGlvbi5jLTc1NC1cdFx0ICogdGhlcmUgYXJlIGFueSBob2xlcyBpbiB0aGUgYmxvY2sgKGllLiBpbnZhbGlkIFBGTnMgb3Jcbi0tXG5tbS9jb21wYWN0aW9uLmM9MTQ3ND1mYXN0X2lzb2xhdGVfYXJvdW5kKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCB1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTQ5NC1cbm1tL2NvbXBhY3Rpb24uYzoxNDk1Olx0aXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soY2MsIFx1MDAyNnN0YXJ0X3BmbiwgZW5kX3BmbiwgY2MtXHUwMDNlZnJlZXBhZ2VzLCAxLCBmYWxzZSk7XG5tbS9jb21wYWN0aW9uLmMtMTQ5Ni1cbi0tXG5tbS9jb21wYWN0aW9uLmM9MTY5Mj1zdGF0aWMgdm9pZCBpc29sYXRlX2ZyZWVwYWdlcyhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTc2My1cdFx0LyogRm91bmQgYSBibG9jayBzdWl0YWJsZSBmb3IgaXNvbGF0aW5nIGZyZWUgcGFnZXMgZnJvbS4gKi9cbm1tL2NvbXBhY3Rpb24uYzoxNzY0Olx0XHRucl9pc29sYXRlZCA9IGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKGNjLCBcdTAwMjZpc29sYXRlX3N0YXJ0X3Bmbixcbm1tL2NvbXBhY3Rpb24uYy0xNzY1LVx0XHRcdFx0XHRibG9ja19lbmRfcGZuLCBjYy1cdTAwM2VmcmVlcGFnZXMsIHN0cmlkZSwgZmFsc2UpO1xuLS1cbm1tL2NvbXBhY3Rpb24uYy0xODAxLVx0ICogYnJva2UgZnJvbSB0aGUgbG9vcCBhbmQgc2V0IGlzb2xhdGVfc3RhcnRfcGZuIGJhc2VkIG9uIHRoZSBsYXN0XG5tbS9jb21wYWN0aW9uLmM6MTgwMjpcdCAqIGNhbGwgdG8gaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soKSwgb3Igd2UgbWV0IHRoZSBtaWdyYXRpb24gc2Nhbm5lclxubW0vY29tcGFjdGlvbi5jLTE4MDMtXHQgKiBhbmQgdGhlIGxvb3AgdGVybWluYXRlZCBkdWUgdG8gaXNvbGF0ZV9zdGFydF9wZm4gXHUwMDNjIGxvd19wZm5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NTIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDb21wYWN0aW9uIGZvciBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGVzZSBjaGFuZ2VzIGluIGBtbS9jb21wYWN0aW9uLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIHdvcnRoIHRhcmdldGluZyBmb3IgZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIHNlZW0gdG8gYmUgYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCwgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgLCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgLCBhbmQgYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgLiBUaG9zZSBhcmUgdGhlIG9uZXMgdGhlIGRpZmYgaXMgZm9jdXNpbmcgb24uIEhtbSwgYnV0IHdhaXQsIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAgaXMgaW4gdGhhdCBsaXN0LCBhbmQgdGhhdCYjMzk7cyBhICp2ZXJ5KiBob3QgcGF0aC4gRnV6emluZyB0aGF0IGRpcmVjdGx5IG1pZ2h0IG5vdCB5aWVsZCBtdWNoLCBzaW5jZSBpdCYjMzk7cyBhbHJlYWR5IHNvIHdlbGwtZXhlcmNpc2VkLCBidXQgdGhlIGNoYW5nZSBpdHNlbGYgaXMgd29ydGggbm90aW5nLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQgaGVyZS4gCgpBbHJpZ2h0LCBJIHNlZSBgcHJlcF9jb21wb3VuZF90YWlsYCBhcyBhbm90aGVyIG1vZGlmaWVkIGZ1bmN0aW9uLiBMZXQgbWUgc3dpdGNoIGdlYXJzLCBhbmQgY2hlY2sgb3V0IGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAgbW9yZSBjbG9zZWx5LCBzcGVjaWZpY2FsbHksIGxldCYjMzk7cyBnbyBvdmVyIHRvIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCB0YWtlIGEgZGVlcGVyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZnJlZV9wYWdlc19wcmVwYXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0xMzA4PXN0YXRpYyBpbmxpbmUgdm9pZCBwZ2FsbG9jX3RhZ19zdWJfcGFnZXMoc3RydWN0IGFsbG9jX3RhZyAqdGFnLCB1bnNpZ25lZCBpbnQgbnIpIHt9XG4tLVxubW0vcGFnZV9hbGxvYy5jLTEzMTEtXG5tbS9wYWdlX2FsbG9jLmM6MTMxMjpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG5tbS9wYWdlX2FsbG9jLmMtMTMxMy1cdFx0dW5zaWduZWQgaW50IG9yZGVyLCBmcGlfdCBmcGlfZmxhZ3MpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTE0NTU9Ym9vbCBmcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3BhZ2VfYWxsb2MuYy0xNDU2LXtcbm1tL3BhZ2VfYWxsb2MuYzoxNDU3Olx0cmV0dXJuIF9fZnJlZV9wYWdlc19wcmVwYXJlKHBhZ2UsIG9yZGVyLCBGUElfTk9ORSk7XG5tbS9wYWdlX2FsbG9jLmMtMTQ1OC19XG4tLVxubW0vcGFnZV9hbGxvYy5jPTE1ODQ9c3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTE1ODktXG5tbS9wYWdlX2FsbG9jLmM6MTU5MDpcdGlmIChfX2ZyZWVfcGFnZXNfcHJlcGFyZShwYWdlLCBvcmRlciwgZnBpX2ZsYWdzKSlcbm1tL3BhZ2VfYWxsb2MuYy0xNTkxLVx0XHRmcmVlX29uZV9wYWdlKHpvbmUsIHBhZ2UsIHBmbiwgb3JkZXIsIGZwaV9mbGFncyk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTI5NDM9c3RhdGljIHZvaWQgX19mcmVlX2Zyb3plbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0yOTU1LVxubW0vcGFnZV9hbGxvYy5jOjI5NTY6XHRpZiAoIV9fZnJlZV9wYWdlc19wcmVwYXJlKHBhZ2UsIG9yZGVyLCBmcGlfZmxhZ3MpKVxubW0vcGFnZV9hbGxvYy5jLTI5NTctXHRcdHJldHVybjtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MzAwNT12b2lkIGZyZWVfdW5yZWZfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0zMDE2LVxubW0vcGFnZV9hbGxvYy5jOjMwMTc6XHRcdGlmICghX19mcmVlX3BhZ2VzX3ByZXBhcmUoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb3JkZXIsIEZQSV9OT05FKSlcbm1tL3BhZ2VfYWxsb2MuYy0zMDE4LVx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgxMgoJCQkJCQkJb3V0cHV0OiAxNjYKCQkJCQkJCXRob3VnaHRzOiA0NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIGFuZCBDb25maWd1cmF0aW9uIFNlbGVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGFuYWx5emluZyB0aGlzIHBhdGNoIGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdCBmb3IgZnV6emluZy4gSSYjMzk7dmUgaWRlbnRpZmllZCBzb21lIGNyaXRpY2FsIGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMuIEZpcnN0bHksIEkmIzM5O3ZlIGRlY2lkZWQgdG8gZXhjbHVkZSBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgIGZyb20gRm9jdXNTeW1ib2xzIGJlY2F1c2UgaXQmIzM5O3MgYSBob3QgcGF0aCwgYW5kIGluY2x1ZGluZyBpdCBpc24mIzM5O3QgdGhlIGJlc3QgdXNlIG9mIHJlc291cmNlcy4gSG93ZXZlciwgSSB3aWxsIGluY2x1ZGUgYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCwgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgLCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgLCBhbmQgYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgLiBXYWl0LCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgaXMgc3RhdGljLiBUaGF0JiMzOTtzIGZpbmUsIHN5emthbGxlciBjYW4gaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSYjMzk7cmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCYjMzk7cyBub3QgYSBibG9ja2VyLgoKSSBuZWVkZWQgdG8gY2hlY2sgYSBmZXcgY29uZmlndXJhdGlvbnMuIEkgY29uZmlybWVkIGBDT05GSUdfQ09NUEFDVElPTmAgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFyZSB0aGUgcmVsZXZhbnQgb25lcyBmb3IgdGhpcyBwYXRjaC4KCk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggbW9kaWZpZXMgaG93IHdlIGhhbmRsZSB0aGUgYHBhZ2UtJmd0O3ByaXZhdGVgIGZpZWxkIGR1cmluZyBwYWdlIGZyZWVpbmcgYW5kIFRIUCBzcGxpdHRpbmcuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHNwZWNpZmljYWxseSBjb21wYWN0aW9uLCBwYWdlIGFsbG9jYXRpb24sIGFuZCBUSFAg4oCTIHdoaWNoIGltcGFjdHMgcGFnZSBzdGF0ZS4gSXQgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciB3YXJuaW5ncyBvciBiYWQgcGFnZSBzdGF0ZXMgaWYgdGhlIGNoYW5nZXMgYXJlIHZpb2xhdGVkLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBwcmltZSBmb3IgZnV6emluZy4KClRoZXJlZm9yZSwgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOgotIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AKLSBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AKLSBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgCi0gYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgCgpBbmQgdGhlIGVuYWJsZWQgY29uZmlndXJhdGlvbnMgYXJlOgotIGBDT01QQUNUSU9OYAotIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTt2ZSByZS12ZXJpZmllZCB0aGF0IEkgZ290IHRoZSBmdW5jdGlvbiBuYW1lcyByaWdodDogYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgLCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgLCBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgLCBhbmQgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgIGFyZSBhbGwgY29ycmVjdC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2smIzM0OywKICAgICYjMzQ7ZmFzdF9pc29sYXRlX2ZyZWVwYWdlcyYjMzQ7LAogICAgJiMzNDtjb21wYWN0aW9uX2FsbG9jX25vcHJvZiYjMzQ7LAogICAgJiMzNDtfX3NwbGl0X2ZvbGlvX3RvX29yZGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYnkgcmVtb3ZpbmcgYHNldF9wYWdlX3ByaXZhdGVgIGNhbGxzIGZvciBmcmVlIHBhZ2VzIGFuZCB0YWlsIHBhZ2VzLCBhbmQgYWRkaW5nIGNoZWNrcyB0byBlbnN1cmUgYHBhZ2UtXHUwMDNlcHJpdmF0ZWAgaXMgMCBkdXJpbmcgcGFnZSBmcmVlaW5nIGFuZCBUSFAgc3BsaXR0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGNvbXBhY3Rpb24sIHBhZ2UgYWxsb2NhdGlvbiwgYW5kIFRIUCwgd2hpY2ggY2FuIHRyaWdnZXIgd2FybmluZ3Mgb3IgYmFkIHBhZ2Ugc3RhdGVzIGlmIHZpb2xhdGVkLiBJdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpc29sYXRlX2ZyZWVwYWdlc19ibG9jayYjMzQ7LAogICAgJiMzNDtmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzJiMzNDssCiAgICAmIzM0O2NvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mJiMzNDssCiAgICAmIzM0O19fc3BsaXRfZm9saW9fdG9fb3JkZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBieSByZW1vdmluZyBgc2V0X3BhZ2VfcHJpdmF0ZWAgY2FsbHMgZm9yIGZyZWUgcGFnZXMgYW5kIHRhaWwgcGFnZXMsIGFuZCBhZGRpbmcgY2hlY2tzIHRvIGVuc3VyZSBgcGFnZS1cdTAwM2Vwcml2YXRlYCBpcyAwIGR1cmluZyBwYWdlIGZyZWVpbmcgYW5kIFRIUCBzcGxpdHRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgY29tcGFjdGlvbiwgcGFnZSBhbGxvY2F0aW9uLCBhbmQgVEhQLCB3aGljaCBjYW4gdHJpZ2dlciB3YXJuaW5ncyBvciBiYWQgcGFnZSBzdGF0ZXMgaWYgdmlvbGF0ZWQuIEl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDAzOjExOjA5LjU2NzM1OTIxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5ODUwMTQ3NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tcIixcbiAgICBcImZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNcIixcbiAgICBcImNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mXCIsXG4gICAgXCJfX3NwbGl0X2ZvbGlvX3RvX29yZGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBieSByZW1vdmluZyBgc2V0X3BhZ2VfcHJpdmF0ZWAgY2FsbHMgZm9yIGZyZWUgcGFnZXMgYW5kIHRhaWwgcGFnZXMsIGFuZCBhZGRpbmcgY2hlY2tzIHRvIGVuc3VyZSBgcGFnZS1cXHUwMDNlcHJpdmF0ZWAgaXMgMCBkdXJpbmcgcGFnZSBmcmVlaW5nIGFuZCBUSFAgc3BsaXR0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGNvbXBhY3Rpb24sIHBhZ2UgYWxsb2NhdGlvbiwgYW5kIFRIUCwgd2hpY2ggY2FuIHRyaWdnZXIgd2FybmluZ3Mgb3IgYmFkIHBhZ2Ugc3RhdGVzIGlmIHZpb2xhdGVkLiBJdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDAzOjExOjA5LjU2NzM2ODYyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5ODU0NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGQ2OWNkODMxMTBkNWEzNWM5MDRhMmEzOTRiNzg2MDI0ZThhNmExYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAwMzoxMTowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmNcXG5pbmRleCBiNzc2ZjM1YWQwMjAwNy4uMzQ5ODM4Y2M2YzE5MGYgMTAwNjQ0XFxuLS0tIGEvbW0vY29tcGFjdGlvbi5jXFxuKysrIGIvbW0vY29tcGFjdGlvbi5jXFxuQEAgLTY0NCw3ICs2NDQsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2ZyZWVwYWdlc19ibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcXG4gXFx0XFx0aXNvbGF0ZWQgPSBfX2lzb2xhdGVfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTtcXG4gXFx0XFx0aWYgKCFpc29sYXRlZClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdHNldF9wYWdlX3ByaXZhdGUocGFnZSwgb3JkZXIpO1xcbiBcXG4gXFx0XFx0bnJfc2Nhbm5lZCArPSBpc29sYXRlZCAtIDE7XFxuIFxcdFxcdHRvdGFsX2lzb2xhdGVkICs9IGlzb2xhdGVkO1xcbkBAIC0xNjE3LDcgKzE2MTYsNiBAQCBzdGF0aWMgdm9pZCBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxcbiBcXHRcXHQvKiBJc29sYXRlIHRoZSBwYWdlIGlmIGF2YWlsYWJsZSAqL1xcbiBcXHRcXHRpZiAocGFnZSkge1xcbiBcXHRcXHRcXHRpZiAoX19pc29sYXRlX2ZyZWVfcGFnZShwYWdlLCBvcmRlcikpIHtcXG4tXFx0XFx0XFx0XFx0c2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7XFxuIFxcdFxcdFxcdFxcdG5yX2lzb2xhdGVkID0gMSBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4gXFx0XFx0XFx0XFx0bnJfc2Nhbm5lZCArPSBucl9pc29sYXRlZCAtIDE7XFxuIFxcdFxcdFxcdFxcdHRvdGFsX2lzb2xhdGVkICs9IG5yX2lzb2xhdGVkO1xcbkBAIC0xODQ2LDcgKzE4NDQsNiBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpjb21wYWN0aW9uX2FsbG9jX25vcHJvZihzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBkYVxcbiBcXHRcXHRzaXplIFxcdTAwM2VcXHUwMDNlPSAxO1xcbiBcXG4gXFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZyZWVwYWdlW3NpemVdLmxydSwgXFx1MDAyNmNjLVxcdTAwM2VmcmVlcGFnZXNbc3RhcnRfb3JkZXJdKTtcXG4tXFx0XFx0c2V0X3BhZ2VfcHJpdmF0ZShcXHUwMDI2ZnJlZXBhZ2Vbc2l6ZV0sIHN0YXJ0X29yZGVyKTtcXG4gXFx0fVxcbiBcXHRkc3QgPSAoc3RydWN0IGZvbGlvICopZnJlZXBhZ2U7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDJiY2NiMGE1M2EwYTYwLi4wMzdkNjdmYmVjNmU1OSAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC0zNTk0LDYgKzM1OTQsMTYgQEAgc3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxcbiBcXHRcXHRuZXdfZm9saW8tXFx1MDAzZW1hcHBpbmcgPSBmb2xpby1cXHUwMDNlbWFwcGluZztcXG4gXFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VpbmRleCA9IGZvbGlvLVxcdTAwM2VpbmRleCArIGk7XFxuIFxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBwYWdlLVxcdTAwM2Vwcml2YXRlIHNob3VsZCBub3QgYmUgc2V0IGluIHRhaWwgcGFnZXMuIEZpeCB1cCBhbmQgd2FybiBvbmNlXFxuK1xcdFxcdCAqIGlmIHByaXZhdGUgaXMgdW5leHBlY3RlZGx5IHNldC4gRG8gaXQgYmVmb3JlIHN3YXAudmFsIGFzc2lnbm1lbnRcXG4rXFx0XFx0ICogc2luY2UgcHJpdmF0ZSBvdmVybGFwcyB3aXRoIHN3YXAudmFsLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHVubGlrZWx5KG5ld19mb2xpby1cXHUwMDNlcHJpdmF0ZSkpIHtcXG4rXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX1BBR0UodHJ1ZSwgbmV3X2hlYWQpO1xcbitcXHRcXHRcXHRuZXdfZm9saW8tXFx1MDAzZXByaXZhdGUgPSBOVUxMO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKVxcbiBcXHRcXHRcXHRuZXdfZm9saW8tXFx1MDAzZXN3YXAudmFsID0gZm9saW8tXFx1MDAzZXN3YXAudmFsICsgaTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXFxuaW5kZXggMTgxZTc5ZjFkNmEyMDcuLmM5NjQyMWNlOTM1MDE1IDEwMDY0NFxcbi0tLSBhL21tL2ludGVybmFsLmhcXG4rKysgYi9tbS9pbnRlcm5hbC5oXFxuQEAgLTg5NSw3ICs4OTUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHJlcF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLFxcbiB7XFxuIFxcdHRhaWwtXFx1MDAzZW1hcHBpbmcgPSBUQUlMX01BUFBJTkc7XFxuIFxcdHNldF9jb21wb3VuZF9oZWFkKHRhaWwsIGhlYWQsIG9yZGVyKTtcXG4tXFx0c2V0X3BhZ2VfcHJpdmF0ZSh0YWlsLCAwKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGluaXRfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCxcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXFxuaW5kZXggZWU5MDJhNDY4YzJmNWIuLjEzYzI2NTVlMjRmYmRkIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xcbkBAIC0xMzc0LDE1ICsxMzc0LDIxIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX2ZyZWVfcGFnZXNfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gI2VuZGlmXFxuIFxcdFxcdH1cXG4gXFx0XFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjICgxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTsgaSsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBwYWdlICpzdWJwYWdlID0gcGFnZSArIGk7XFxuK1xcbiBcXHRcXHRcXHRpZiAoY29tcG91bmQpXFxuLVxcdFxcdFxcdFxcdGJhZCArPSBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHBhZ2UsIHBhZ2UgKyBpKTtcXG4rXFx0XFx0XFx0XFx0YmFkICs9IGZyZWVfdGFpbF9wYWdlX3ByZXBhcmUocGFnZSwgc3VicGFnZSk7XFxuIFxcdFxcdFxcdGlmIChpc19jaGVja19wYWdlc19lbmFibGVkKCkpIHtcXG4tXFx0XFx0XFx0XFx0aWYgKGZyZWVfcGFnZV9pc19iYWQocGFnZSArIGkpKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChmcmVlX3BhZ2VfaXNfYmFkKHN1YnBhZ2UpKSB7XFxuIFxcdFxcdFxcdFxcdFxcdGJhZCsrO1xcbiBcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdChwYWdlICsgaSktXFx1MDAzZWZsYWdzLmYgXFx1MDAyNj0gflBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUDtcXG4rXFx0XFx0XFx0c3VicGFnZS1cXHUwMDNlZmxhZ3MuZiBcXHUwMDI2PSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQO1xcbitcXHRcXHRcXHRpZiAoc3VicGFnZS1cXHUwMDNlcHJpdmF0ZSkge1xcbitcXHRcXHRcXHRcXHRiYWRfcGFnZShzdWJwYWdlLCBcXFwibm9uemVybyBwcml2YXRlXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDM6MTE6MTAuMTY4MzQ1OTY5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTI0OTEzODY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT01QQUNUSU9OXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrXCIsXG4gICAgXCJmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzXCIsXG4gICAgXCJjb21wYWN0aW9uX2FsbG9jX25vcHJvZlwiLFxuICAgIFwiX19zcGxpdF9mb2xpb190b19vcmRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYnkgcmVtb3ZpbmcgYHNldF9wYWdlX3ByaXZhdGVgIGNhbGxzIGZvciBmcmVlIHBhZ2VzIGFuZCB0YWlsIHBhZ2VzLCBhbmQgYWRkaW5nIGNoZWNrcyB0byBlbnN1cmUgYHBhZ2UtXFx1MDAzZXByaXZhdGVgIGlzIDAgZHVyaW5nIHBhZ2UgZnJlZWluZyBhbmQgVEhQIHNwbGl0dGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBjb21wYWN0aW9uLCBwYWdlIGFsbG9jYXRpb24sIGFuZCBUSFAsIHdoaWNoIGNhbiB0cmlnZ2VyIHdhcm5pbmdzIG9yIGJhZCBwYWdlIHN0YXRlcyBpZiB2aW9sYXRlZC4gSXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBkNjljZDgzMTEwZDVhMzVjOTA0YTJhMzk0Yjc4NjAyNGU4YTZhMWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAwMzoxMTowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uY1xuaW5kZXggYjc3NmYzNWFkMDIwMDcuLjM0OTgzOGNjNmMxOTBmIDEwMDY0NFxuLS0tIGEvbW0vY29tcGFjdGlvbi5jXG4rKysgYi9tbS9jb21wYWN0aW9uLmNcbkBAIC02NDQsNyArNjQ0LDYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXG4gXHRcdGlzb2xhdGVkID0gX19pc29sYXRlX2ZyZWVfcGFnZShwYWdlLCBvcmRlcik7XG4gXHRcdGlmICghaXNvbGF0ZWQpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdHNldF9wYWdlX3ByaXZhdGUocGFnZSwgb3JkZXIpO1xuIFxuIFx0XHRucl9zY2FubmVkICs9IGlzb2xhdGVkIC0gMTtcbiBcdFx0dG90YWxfaXNvbGF0ZWQgKz0gaXNvbGF0ZWQ7XG5AQCAtMTYxNyw3ICsxNjE2LDYgQEAgc3RhdGljIHZvaWQgZmFzdF9pc29sYXRlX2ZyZWVwYWdlcyhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbiBcdFx0LyogSXNvbGF0ZSB0aGUgcGFnZSBpZiBhdmFpbGFibGUgKi9cbiBcdFx0aWYgKHBhZ2UpIHtcbiBcdFx0XHRpZiAoX19pc29sYXRlX2ZyZWVfcGFnZShwYWdlLCBvcmRlcikpIHtcbi1cdFx0XHRcdHNldF9wYWdlX3ByaXZhdGUocGFnZSwgb3JkZXIpO1xuIFx0XHRcdFx0bnJfaXNvbGF0ZWQgPSAxIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiBcdFx0XHRcdG5yX3NjYW5uZWQgKz0gbnJfaXNvbGF0ZWQgLSAxO1xuIFx0XHRcdFx0dG90YWxfaXNvbGF0ZWQgKz0gbnJfaXNvbGF0ZWQ7XG5AQCAtMTg0Niw3ICsxODQ0LDYgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqY29tcGFjdGlvbl9hbGxvY19ub3Byb2Yoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGFcbiBcdFx0c2l6ZSBcdTAwM2VcdTAwM2U9IDE7XG4gXG4gXHRcdGxpc3RfYWRkKFx1MDAyNmZyZWVwYWdlW3NpemVdLmxydSwgXHUwMDI2Y2MtXHUwMDNlZnJlZXBhZ2VzW3N0YXJ0X29yZGVyXSk7XG4tXHRcdHNldF9wYWdlX3ByaXZhdGUoXHUwMDI2ZnJlZXBhZ2Vbc2l6ZV0sIHN0YXJ0X29yZGVyKTtcbiBcdH1cbiBcdGRzdCA9IChzdHJ1Y3QgZm9saW8gKilmcmVlcGFnZTtcbiBcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggMmJjY2IwYTUzYTBhNjAuLjAzN2Q2N2ZiZWM2ZTU5IDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTM1OTQsNiArMzU5NCwxNiBAQCBzdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXG4gXHRcdG5ld19mb2xpby1cdTAwM2VtYXBwaW5nID0gZm9saW8tXHUwMDNlbWFwcGluZztcbiBcdFx0bmV3X2ZvbGlvLVx1MDAzZWluZGV4ID0gZm9saW8tXHUwMDNlaW5kZXggKyBpO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBwYWdlLVx1MDAzZXByaXZhdGUgc2hvdWxkIG5vdCBiZSBzZXQgaW4gdGFpbCBwYWdlcy4gRml4IHVwIGFuZCB3YXJuIG9uY2VcbitcdFx0ICogaWYgcHJpdmF0ZSBpcyB1bmV4cGVjdGVkbHkgc2V0LiBEbyBpdCBiZWZvcmUgc3dhcC52YWwgYXNzaWdubWVudFxuK1x0XHQgKiBzaW5jZSBwcml2YXRlIG92ZXJsYXBzIHdpdGggc3dhcC52YWwuXG4rXHRcdCAqL1xuK1x0XHRpZiAodW5saWtlbHkobmV3X2ZvbGlvLVx1MDAzZXByaXZhdGUpKSB7XG4rXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX1BBR0UodHJ1ZSwgbmV3X2hlYWQpO1xuK1x0XHRcdG5ld19mb2xpby1cdTAwM2Vwcml2YXRlID0gTlVMTDtcbitcdFx0fVxuK1xuIFx0XHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKVxuIFx0XHRcdG5ld19mb2xpby1cdTAwM2Vzd2FwLnZhbCA9IGZvbGlvLVx1MDAzZXN3YXAudmFsICsgaTtcbiBcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMTgxZTc5ZjFkNmEyMDcuLmM5NjQyMWNlOTM1MDE1IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTg5NSw3ICs4OTUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHJlcF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLFxuIHtcbiBcdHRhaWwtXHUwMDNlbWFwcGluZyA9IFRBSUxfTUFQUElORztcbiBcdHNldF9jb21wb3VuZF9oZWFkKHRhaWwsIGhlYWQsIG9yZGVyKTtcbi1cdHNldF9wYWdlX3ByaXZhdGUodGFpbCwgMCk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2NvbXBvdW5kX3RhaWwoc3RydWN0IHBhZ2UgKnRhaWwsXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCBlZTkwMmE0NjhjMmY1Yi4uMTNjMjY1NWUyNGZiZGQgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTEzNzQsMTUgKzEzNzQsMjEgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLFxuICNlbmRpZlxuIFx0XHR9XG4gXHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjICgxIFx1MDAzY1x1MDAzYyBvcmRlcik7IGkrKykge1xuK1x0XHRcdHN0cnVjdCBwYWdlICpzdWJwYWdlID0gcGFnZSArIGk7XG4rXG4gXHRcdFx0aWYgKGNvbXBvdW5kKVxuLVx0XHRcdFx0YmFkICs9IGZyZWVfdGFpbF9wYWdlX3ByZXBhcmUocGFnZSwgcGFnZSArIGkpO1xuK1x0XHRcdFx0YmFkICs9IGZyZWVfdGFpbF9wYWdlX3ByZXBhcmUocGFnZSwgc3VicGFnZSk7XG4gXHRcdFx0aWYgKGlzX2NoZWNrX3BhZ2VzX2VuYWJsZWQoKSkge1xuLVx0XHRcdFx0aWYgKGZyZWVfcGFnZV9pc19iYWQocGFnZSArIGkpKSB7XG4rXHRcdFx0XHRpZiAoZnJlZV9wYWdlX2lzX2JhZChzdWJwYWdlKSkge1xuIFx0XHRcdFx0XHRiYWQrKztcbiBcdFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuLVx0XHRcdChwYWdlICsgaSktXHUwMDNlZmxhZ3MuZiBcdTAwMjY9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVA7XG4rXHRcdFx0c3VicGFnZS1cdTAwM2VmbGFncy5mIFx1MDAyNj0gflBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUDtcbitcdFx0XHRpZiAoc3VicGFnZS1cdTAwM2Vwcml2YXRlKSB7XG4rXHRcdFx0XHRiYWRfcGFnZShzdWJwYWdlLCBcIm5vbnplcm8gcHJpdmF0ZVwiKTtcbitcdFx0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwMzoxMToxMC4xNjgzNTA1MTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODc3NzYzNzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb25lLCBpdCBzZWVtcyDigJMgdGhhdCB0b3VjaGVzIHNvbWUga2V5IGFyZWFzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW06IGBtbS9jb21wYWN0aW9uLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9pbnRlcm5hbC5oYCwgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbml0aWFsIHJlYWQgc3VnZ2VzdHMgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5UaGUgY29yZSBvZiBpdCBpcyB0aGUgcmVtb3ZhbCBvZiBzb21lIGBzZXRfcGFnZV9wcml2YXRlKClgIGNhbGxzIGluIGZ1bmN0aW9ucyBsaWtlIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYW5kIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAuIFRoYXQncyBpbnRlcmVzdGluZzsgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHdoeSB0aG9zZSB3ZXJlIHJlbW92ZWQuIEl0IGFsc28gYWRkcyBhIGNoZWNrIGFuZCB3YXJuaW5nIGluIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCB0byBjbGVhciBhbmQgZW5zdXJlIGBuZXdfZm9saW8tXHUwMDNlcHJpdmF0ZWAgaXMgbm90IHVuZXhwZWN0ZWRseSBzZXQuIEFuZCBpdCBsb29rcyBsaWtlIGFub3RoZXIgYHNldF9wYWdlX3ByaXZhdGUoKWAgY2FsbCBpcyByZW1vdmVkIGluIGBwcmVwX2NvbXBvdW5kX3RhaWxgLiBGaW5hbGx5LCB0aGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAgdG8gY2FsbCBgYmFkX3BhZ2UoKWAgaWYgYHN1YnBhZ2UtXHUwMDNlcHJpdmF0ZWAgaXMgbm9uemVyby4gVGhlIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAgZnVuY3Rpb24gaXMgYSBob3QgcGF0aDsgdGhhdCBkZWZpbml0ZWx5IG5lZWRzIGNhcmVmdWwgc2NydXRpbnkuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc29tZSBzdWJ0bGUgYnVncyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoaXMgaW1wYWN0cyBjb21wYWN0aW9uLCBodWdlIHBhZ2Ugc3BsaXR0aW5nLCBhbmQgcGFnZSBhbGxvY2F0aW9uLCBzbyBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgcmVtb3ZpbmcgdGhvc2UgYHNldF9wYWdlX3ByaXZhdGUoKWAgY2FsbHMsIGVzcGVjaWFsbHkgaW4gYF9fZnJlZV9wYWdlc19wcmVwYXJlYCB3aGljaCBpcyBmcmVxdWVudGx5IGNhbGxlZC5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duIGJ5IGZ1bmN0aW9ucy4gVGhlIGtleSBzeW1ib2xzIHNlZW0gdG8gYmU6XG4qICAgYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYFxuKiAgIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYFxuKiAgIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmBcbiogICBgX19zcGxpdF9mb2xpb190b19vcmRlcmBcbiogICBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgXG5cbmBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAgaXMgY2xlYXJseSBhIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZSBmdW5jdGlvbiwgd2hlcmVhcyBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgLCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AsIGFuZCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgIGFwcGVhciBjb21wYWN0aW9uLXJlbGF0ZWQuIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCBzdWdnZXN0cyB0aGF0IHdlIGFyZSBjaGFuZ2luZyBob3cgVEhQcyBhcmUgc3BsaXQuXG5cbk5vdywgbGV0J3MgZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCB0byBuYXJyb3cgdGhlIGZvY3VzLiBDb21wYWN0aW9uIGlzIHRpZWQgdG8gYENPTkZJR19DT01QQUNUSU9OYCwgYW5kIFRIUCBzdXBwb3J0IGlzIGxpbmtlZCB0byBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGltZSB0byBsZXZlcmFnZSBvdXIgS2NvbmZpZyB0b29sIHRvIGdldCBhIHByZWNpc2UgcGljdHVyZSBvZiB0aGVzZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0byBkZXRlcm1pbmUgdGhlIHBvc3NpYmxlIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDM6MTE6MTcuMDQ2MTI4NjYzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODI1MjA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQ09NUEFDVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vY29tcGFjdGlvbi5jLTI4LVxcbm1tL2NvbXBhY3Rpb24uYzoyOTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9jb21wYWN0aW9uLmMtMzAtLypcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz01OT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy02MS1cXG5tbS9jb21wYWN0aW9uLmM6NjI6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXFxubW0vY29tcGFjdGlvbi5jLTYzLVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTkxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlbGVhc2VfZnJlZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZyZWVwYWdlcylcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0xMTUtXFxubW0vY29tcGFjdGlvbi5jOjExNjojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9jb21wYWN0aW9uLmMtMTE3LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTQ5MD1zdGF0aWMgYm9vbCB0ZXN0X2FuZF9zZXRfc2tpcChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtNDkzLX1cXG5tbS9jb21wYWN0aW9uLmM6NDk0OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcbm1tL2NvbXBhY3Rpb24uYy00OTUtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MTMzNj1pc29sYXRlX21pZ3JhdGVwYWdlc19yYW5nZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMTM3MS1cXG5tbS9jb21wYWN0aW9uLmM6MTM3MjojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gfHwgQ09ORklHX0NNQSAqL1xcbm1tL2NvbXBhY3Rpb24uYzoxMzczOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL2NvbXBhY3Rpb24uYy0xMzc0LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTMzNTE9c3Vic3lzX2luaXRjYWxsKGtjb21wYWN0ZF9pbml0KVxcbm1tL2NvbXBhY3Rpb24uYy0zMzUyLVxcbm1tL2NvbXBhY3Rpb24uYzozMzUzOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcbi0tXFxubW0vaW50ZXJuYWwuaD05OTg9c3RhdGljIGlubGluZSB2b2lkIHNwYXJzZV9pbml0X3N1YnNlY3Rpb25fbWFwKHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xMDAzLVxcbm1tL2ludGVybmFsLmg6MTAwNDojaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcXG5tbS9pbnRlcm5hbC5oLTEwMDUtXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTEwNzM9dm9pZCBpbml0X2NtYV9yZXNlcnZlZF9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbm1tL2ludGVybmFsLmgtMTA3NC1cXG5tbS9pbnRlcm5hbC5oOjEwNzU6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cXG5tbS9pbnRlcm5hbC5oLTEwNzYtXFxuLS1cXG5tbS9tbV9pbml0LmM9MTMzNz1zdGF0aWMgdm9pZCBfX2luaXQgY2FsY3VsYXRlX25vZGVfdG90YWxwYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vbW1faW5pdC5jLTEzNzktXFxubW0vbW1faW5pdC5jOjEzODA6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vbW1faW5pdC5jLTEzODEtc3RhdGljIHZvaWQgcGdkYXRfaW5pdF9rY29tcGFjdGQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL29vbV9raWxsLmM9NDU2PXN0YXRpYyB2b2lkIGR1bXBfaGVhZGVyKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXFxuLS1cXG5tbS9vb21fa2lsbC5jLTQ2MC1cXHRcXHRcXHRjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZW9vbV9zY29yZV9hZGopO1xcbm1tL29vbV9raWxsLmM6NDYxOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikgXFx1MDAyNlxcdTAwMjYgb2MtXFx1MDAzZW9yZGVyKVxcbm1tL29vbV9raWxsLmMtNDYyLVxcdFxcdHByX3dhcm4oXFxcIkNPTVBBQ1RJT04gaXMgZGlzYWJsZWQhISFcXFxcblxcXCIpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcxMD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2J1ZGR5X29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzE1LVxcbm1tL3BhZ2VfYWxsb2MuYzo3MTY6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vcGFnZV9hbGxvYy5jLTcxNy1zdGF0aWMgaW5saW5lIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKnRhc2tfY2FwYyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03NjU9Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTc2OS19XFxubW0vcGFnZV9hbGxvYy5jOjc3MDojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG5tbS9wYWdlX2FsbG9jLmMtNzcxLVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQwNTM9X19hbGxvY19wYWdlc19tYXlfb29tKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDE0NC1cXG5tbS9wYWdlX2FsbG9jLmM6NDE0NTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9wYWdlX2FsbG9jLmMtNDE0Ni0vKiBUcnkgbWVtb3J5IGNvbXBhY3Rpb24gZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgYmVmb3JlIHJlY2xhaW0gKi9cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00Mjg1PXNob3VsZF9jb21wYWN0X3JldHJ5KGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00MzEwLX1cXG5tbS9wYWdlX2FsbG9jLmM6NDMxMTojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG5tbS9wYWdlX2FsbG9jLmMtNDMxMi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYzMzE9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjM3MS1cXHRcXHRcXHQgKi9cXG5tbS92bXNjYW4uYzo2MzcyOlxcdFxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQUNUSU9OKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTYzNzMtXFx0XFx0XFx0ICAgIHNjLVxcdTAwM2VvcmRlciBcXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS92bXN0YXQuYz0xMDQyPXZvaWQgbWVtbWFwX3BhZ2VzX2FkZChsb25nIGRlbHRhKVxcbi0tXFxubW0vdm1zdGF0LmMtMTA0Ni1cXG5tbS92bXN0YXQuYzoxMDQ3OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3Ztc3RhdC5jLTEwNDgtXFxuLS1cXG5tbS92bXN0YXQuYz0xMTg3PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xcbi0tXFxubW0vdm1zdGF0LmMtMTM3MC0jZW5kaWZcXG5tbS92bXN0YXQuYzoxMzcxOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3Ztc3RhdC5jLTEzNzItXFx0W0koQ09NUEFDVE1JR1JBVEVfU0NBTk5FRCldXFx0XFx0PSBcXFwiY29tcGFjdF9taWdyYXRlX3NjYW5uZWRcXFwiLFxcbi0tXFxubW0vdm1zdGF0LmMtMTQ5Ni1cXG5tbS92bXN0YXQuYzoxNDk3OiNpZiAoZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTVBBQ1RJT04pKSB8fCBcXFxcXFxubW0vdm1zdGF0LmMtMTQ5OC0gICAgIGRlZmluZWQoQ09ORklHX1BST0NfRlMpXFxuLS1cXG5tbS92bXN0YXQuYz0yMjY4PXZvaWQgX19pbml0IGluaXRfbW1faW50ZXJuYWxzKHZvaWQpXFxuLS1cXG5tbS92bXN0YXQuYy0yMzAxLVxcbm1tL3Ztc3RhdC5jOjIzMDI6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19DT01QQUNUSU9OKVxcbm1tL3Ztc3RhdC5jLTIzMDMtXFxuLS1cXG5tbS96c21hbGxvYy5jPTE5OT1zdHJ1Y3QgenNfcG9vbCB7XFxuLS1cXG5tbS96c21hbGxvYy5jLTIxMy0jZW5kaWZcXG5tbS96c21hbGxvYy5jOjIxNDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS96c21hbGxvYy5jLTIxNS1cXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZnJlZV93b3JrO1xcbi0tXFxubW0venNtYWxsb2MuYz0zNjA9c3RhdGljIGJvb2wgWnNIdWdlUGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXFxuLS1cXG5tbS96c21hbGxvYy5jLTM2NC1cXG5tbS96c21hbGxvYy5jOjM2NTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS96c21hbGxvYy5jLTM2Ni1zdGF0aWMgdm9pZCBraWNrX2RlZmVycmVkX2ZyZWUoc3RydWN0IHpzX3Bvb2wgKnBvb2wpO1xcbi0tXFxubW0venNtYWxsb2MuYz05MzE9c3RhdGljIHN0cnVjdCB6c3BhZ2UgKmFsbG9jX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCxcXG4tLVxcbm1tL3pzbWFsbG9jLmMtOTQxLVxcbm1tL3pzbWFsbG9jLmM6OTQyOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikpXFxubW0venNtYWxsb2MuYy05NDMtXFx0XFx0Z2ZwIFxcdTAwMjY9IH5fX0dGUF9NT1ZBQkxFO1xcbi0tXFxubW0venNtYWxsb2MuYz0xNTk0PXN0YXRpYyBpbnQgcHV0YmFja196c3BhZ2Uoc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLCBzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXFxuLS1cXG5tbS96c21hbGxvYy5jLTE2MDMtXFxubW0venNtYWxsb2MuYzoxNjA0OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3pzbWFsbG9jLmMtMTYwNS0vKlxcbi0tXFxubW0venNtYWxsb2MuYz0xNjA5PXN0YXRpYyB2b2lkIGxvY2tfenNwYWdlKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTY0NS19XFxubW0venNtYWxsb2MuYzoxNjQ2OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcbm1tL3pzbWFsbG9jLmMtMTY0Ny1cXG5tbS96c21hbGxvYy5jOjE2NDg6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0venNtYWxsb2MuYy0xNjQ5LVxcbi0tXFxubW0venNtYWxsb2MuYz0yMjM3PXN0YXRpYyBpbnQgX19pbml0IHpzX2luaXQodm9pZClcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMjI0NC1cXG5tbS96c21hbGxvYy5jOjIyNDU6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0venNtYWxsb2MuYy0yMjQ2LVxcdHJjID0gc2V0X21vdmFibGVfb3BzKFxcdTAwMjZ6c21hbGxvY19tb3BzLCBQR1RZX3pzbWFsbG9jKTtcXG4tLVxcbm1tL3pzbWFsbG9jLmM9MjI1Nj1zdGF0aWMgdm9pZCBfX2V4aXQgenNfZXhpdCh2b2lkKVxcbm1tL3pzbWFsbG9jLmMtMjI1Ny17XFxubW0venNtYWxsb2MuYzoyMjU4OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3pzbWFsbG9jLmMtMjI1OS1cXHRzZXRfbW92YWJsZV9vcHMoTlVMTCwgUEdUWV96c21hbGxvYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDAzOjExOjE3LjI3NDQwMDQzMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTExMDc0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIEh1Z2UgUGFnZXM6IENvbmZpZ3MgYW5kIEtlcm5lbCBDb2RlKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgQ09NUEFDVElPTmAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkga25vdyB0aGVzZSBhcmUgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGxhcmdlIHBhZ2VzLiBTaW5jZSBJIGhhdmUgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgdGhlIGltbWVkaWF0ZSBmb2N1cywgSSdtIGdvaW5nIHRvIGhlYWQgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBzZWUgaG93IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgaW1wbGVtZW50ZWQuIEknbGwgb3BlbiB1cCBgbW0vaHVnZV9tZW1vcnkuY2Ag4oCTIHRoYXQncyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgaHVnZSBwYWdlIG1hbmFnZW1lbnQgd2lsbCBiZS4gSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgZW5hYmxlbWVudCBjaGVja3MsIGFsbG9jYXRpb24gc3RyYXRlZ2llcywgYW5kIGhvcGVmdWxseSwgc29tZSBjbHVlcyBhYm91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggY29tcGFjdGlvbiwgd2hpY2ggaXMgcHJvYmFibHkgcmVsYXRlZCB0byBmcmFnbWVudGluZyBtZW1vcnkuIEknbSBob3BpbmcgdGhpcyB3aWxsIHByb3ZpZGUgYW5zd2Vycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEyOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDAzOjExOjIwLjUyNTUxMjI0NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM4NDg2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU3NCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz01OT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy03NC0gKi9cXG5tbS9jb21wYWN0aW9uLmM6NzU6I2lmIGRlZmluZWQgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vY29tcGFjdGlvbi5jLTc2LSNkZWZpbmUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUlxcdEhQQUdFX1BNRF9PUkRFUlxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTc1PXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy03Ni17XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjc3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNzgtXFx0cG1kX3QgcG1kdmFsID0gcG1kcF9nZXQocG1kKTtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy05OS1cXHRmb2xpb19wdXQoZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxMDA6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDEtfVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE5ND1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMTUtXFx0XFx0fSBlbHNlIHtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjE2OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjE3LVxcdFxcdFxcdHBtZF90IHBtZCA9IHBtZHBfZ2V0KHB2bXcucG1kKTtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMjMtXFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMjQ6I2VuZGlmXFx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIyNS1cXHRcXHR9XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTM5Mj1zdGF0aWMgaW50IGRhbW9uX3lvdW5nX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTQwMC1cXG5tbS9kYW1vbi92YWRkci5jOjQwMTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZGFtb24vdmFkZHIuYy00MDItXFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXFx1MDAzZXZtYSk7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTQxOS1cXHR9XFxubW0vZGFtb24vdmFkZHIuYzo0MjA6I2VuZGlmXFx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGFtb24vdmFkZHIuYy00MjEtXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTY1OD1zdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNjY5LVxcbm1tL2RhbW9uL3ZhZGRyLmM6NjcwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kYW1vbi92YWRkci5jLTY3MS1cXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cXHUwMDNldm1hKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNjg3LVxcdH1cXG5tbS9kYW1vbi92YWRkci5jOjY4ODojZW5kaWZcXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kYW1vbi92YWRkci5jLTY4OS1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9ODE4PXN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy04MjktXFxubW0vZGFtb24vdmFkZHIuYzo4MzA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RhbW9uL3ZhZGRyLmMtODMxLVxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgcHRlX2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTcyLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxNzM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xNzQtc3RhdGljIHZvaWQgX19pbml0IHBtZF9iYXNpY190ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzLCBpbnQgaWR4KVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQyMz1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNC0jZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NDI1OiNlbHNlICAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNi1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpIHsgfVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQzMT1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQzMjojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQzMy1cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz02NzE9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTY4Mi1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NjgzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNjg0LXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfcHJvdG5vbmVfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02OTgtfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo2OTk6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzAwLXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfcHJvdG5vbmVfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjcwMTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTcwMi1cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03MTU9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9zd2FwX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03MzEtXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjczMjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTczMy1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03NDk9c3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03NjctfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3Njg6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzY5LXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9NzcwPXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfbGVhZl9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3NzE6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03NzItXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTAxPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTkwMy1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTA0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTA1LXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU1PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTYtI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk1NzojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTgtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTk1OT1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX3RocF90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTYwOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTYxLVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTk4Nz1zdGF0aWMgdm9pZCBfX2luaXQgZGVzdHJveV9hcmdzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTg5LVxcdC8qIEZyZWUgKGh1Z2UpIHBhZ2UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTkwOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTkxLVxcdCAgICBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTgtXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk5OTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTEwMDAtXFx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9MTE0Mz1zdGF0aWMgaW50IF9faW5pdCBpbml0X2FyZ3Moc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjM5LVxcdCAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxMjQwOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI0MS1cXHQgICAgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSgpKSB7XFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI1MC1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6MTI1MTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTEyNTItXFx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7XFxuLS1cXG5tbS9maWxlbWFwLmM9MzMxND1zdGF0aWMgc3RydWN0IGZpbGUgKmRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9maWxlbWFwLmMtMzMyNi1cXHQvKiBVc2UgdGhlIHJlYWRhaGVhZCBjb2RlLCBldmVuIGlmIHJlYWRhaGVhZCBpcyBkaXNhYmxlZCAqL1xcbm1tL2ZpbGVtYXAuYzozMzI3OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgKHZtX2ZsYWdzIFxcdTAwMjYgVk1fSFVHRVBBR0UpKSB7XFxubW0vZmlsZW1hcC5jLTMzMjgtXFx0XFx0LypcXG4tLVxcbm1tL2d1cC5jPTcwMT1zdGF0aWMgc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2d1cC5jLTczNC1cXG5tbS9ndXAuYzo3MzU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2d1cC5jLTczNi1cXHRpZiAocG1kX3RyYW5zX2h1Z2UocG1kdmFsKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBGT0xMX1RPVUNIKSlcXG5tbS9ndXAuYy03MzctXFx0XFx0dG91Y2hfcG1kKHZtYSwgYWRkciwgcG1kLCBmbGFncyBcXHUwMDI2IEZPTExfV1JJVEUpO1xcbm1tL2d1cC5jOjczODojZW5kaWZcXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9ndXAuYy03MzktXFxuLS1cXG5tbS9obW0uYz0xODE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGhtbV9wZm5fZmxhZ3Nfb3JkZXIodW5zaWduZWQgbG9uZyBvcmRlcilcXG4tLVxcbm1tL2htbS5jLTE4NS1cXG5tbS9obW0uYzoxODY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2htbS5jLTE4Ny1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX3RvX2htbV9wZm5fZmxhZ3Moc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxuLS1cXG5tbS9obW0uYz0xOTc9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2htbS5jLTIyMC19XFxubW0vaG1tLmM6MjIxOiNlbHNlIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2htbS5jLTIyMi0vKiBzdHViIHRvIGFsbG93IHRoZSBjb2RlIGJlbG93IHRvIGNvbXBpbGUgKi9cXG5tbS9obW0uYz0yMjM9aW50IGhtbV92bWFfaGFuZGxlX3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2htbS5jLTIyNC1cXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBobW1fcGZuc1tdLCBwbWRfdCBwbWQpO1xcbm1tL2htbS5jOjIyNTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vaG1tLmMtMjI2LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz02MD11bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzIF9fcmVhZF9tb3N0bHkgPVxcbm1tL2h1Z2VfbWVtb3J5LmM6NjE6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9odWdlX21lbW9yeS5jLTYyLVxcdCgxXFx1MDAzY1xcdTAwM2NUUkFOU1BBUkVOVF9IVUdFUEFHRV9GTEFHKXxcXG5tbS9odWdlX21lbW9yeS5jLTYzLSNlbmRpZlxcbm1tL2h1Z2VfbWVtb3J5LmM6NjQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vaHVnZV9tZW1vcnkuYy02NS1cXHQoMVxcdTAwM2NcXHUwMDNjVFJBTlNQQVJFTlRfSFVHRVBBR0VfUkVRX01BRFZfRkxBRyl8XFxuLS1cXG5tbS9rc20uYz0yNDk0PXN0YXRpYyBpbnQga3NtX25leHRfcGFnZV9wbWRfZW50cnkocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9rc20uYy0yNTE0LVxcbm1tL2tzbS5jOjI1MTU6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBwbWRfbGVhZihwbWQpKSB7XFxubW0va3NtLmMtMjUxNi1cXHRcXHRwdGwgPSBwbWRfbG9jayhtbSwgcG1kcCk7XFxuLS1cXG5tbS9tYWR2aXNlLmM9MzU0PXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuLS1cXG5tbS9tYWR2aXNlLmMtMzc2LVxcbm1tL21hZHZpc2UuYzozNzc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21hZHZpc2UuYy0zNzgtXFx0aWYgKHBtZF90cmFuc19odWdlKCpwbWQpKSB7XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxOT1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTM5LSNlbmRpZlxcbm1tL21hZHZpc2UuYzoxNTQwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9tYWR2aXNlLmMtMTU0MS1cXHRjYXNlIE1BRFZfSFVHRVBBR0U6XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTg2Nj1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnMV9zdGF0c1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4NjgtXFx0TlJfQU5PTl9NQVBQRUQsXFxubW0vbWVtY29udHJvbC12MS5jOjE4Njk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODcwLVxcdE5SX0FOT05fVEhQUyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xODg0PXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZW1jZzFfc3RhdF9uYW1lc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4ODYtXFx0XFxcInJzc1xcXCIsXFxubW0vbWVtY29udHJvbC12MS5jOjE4ODc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODg4LVxcdFxcXCJyc3NfaHVnZVxcXCIsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTUzPXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3NC0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NTc1OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9tZW1jb250cm9sLmMtNTc2LVxcdFRIUF9GQVVMVF9BTExPQyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTU2Ny0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6MTU2ODojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtY29udHJvbC5jLTE1NjktXFx0eyBcXFwiYW5vbl90aHBcXFwiLFxcdFxcdFxcdE5SX0FOT05fVEhQU1xcdFxcdFxcdH0sXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTY3OT1zdGF0aWMgaW50IGNoZWNrX2h3cG9pc29uZWRfZW50cnkocHRlX3QgcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHNob3J0IHNoaWZ0LFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy03MDMtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzo3MDQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtNzA1LXN0YXRpYyBpbnQgY2hlY2tfaHdwb2lzb25lZF9wbWRfZW50cnkocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS5jPTQwNjc9c3RhdGljIHZtX2ZhdWx0X3Qgd3BfcGFnZV9zaGFyZWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9tZW1vcnkuYy00MTA2LVxcbm1tL21lbW9yeS5jOjQxMDc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbW9yeS5jLTQxMDgtc3RhdGljIGJvb2wgX193cF9jYW5fcmV1c2VfbGFyZ2VfYW5vbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWVtb3J5LmMtNDE3Mi19XFxubW0vbWVtb3J5LmM6NDE3MzojZWxzZSAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vbWVtb3J5LmMtNDE3NC1zdGF0aWMgYm9vbCBfX3dwX2Nhbl9yZXVzZV9sYXJnZV9hbm9uX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1vcnkuYy00MTc4LX1cXG5tbS9tZW1vcnkuYzo0MTc5OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9tZW1vcnkuYy00MTgwLVxcbm1tL21lbW9yeS5jPTQxODE9c3RhdGljIGJvb2wgd3BfY2FuX3JldXNlX2Fub25fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbW9yeS5jLTQxODMte1xcbm1tL21lbW9yeS5jOjQxODQ6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcXG5tbS9tZW1vcnkuYy00MTg1LVxcdFxcdHJldHVybiBfX3dwX2Nhbl9yZXVzZV9sYXJnZV9hbm9uX2ZvbGlvKGZvbGlvLCB2bWEpO1xcbi0tXFxubW0vbWVtb3J5LmM9NDU4NT1zdGF0aWMgdm1fZmF1bHRfdCBoYW5kbGVfcHRlX21hcmtlcihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ2MTEtXFxubW0vbWVtb3J5LmM6NDYxMjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtb3J5LmMtNDYxMy0vKlxcbi0tXFxubW0vbWVtb3J5LmM9NDY2MT1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aHBfc3dhcGluX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ3MjAtfVxcbm1tL21lbW9yeS5jOjQ3MjE6I2Vsc2UgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL21lbW9yeS5jLTQ3MjItc3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00NzI1LX1cXG5tbS9tZW1vcnkuYzo0NzI2OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9tZW1vcnkuYy00NzI3LVxcbi0tXFxubW0vbWVtb3J5LmM9NTE2MT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTE2My1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cXHUwMDNldm1hO1xcbm1tL21lbW9yeS5jOjUxNjQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbW9yeS5jLTUxNjUtXFx0dW5zaWduZWQgbG9uZyBvcmRlcnM7XFxuLS1cXG5tbS9tZW1vcnkuYz01Mzk4PXN0YXRpYyB2bV9mYXVsdF90IF9fZG9fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01NDUzLVxcbm1tL21lbW9yeS5jOjU0NTQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbW9yeS5jLTU0NTUtc3RhdGljIHZvaWQgZGVwb3NpdF9wcmVhbGxvY19wdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYz02MjQyPXN0YXRpYyB2bV9mYXVsdF90IGNyZWF0ZV9odWdlX3B1ZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9tZW1vcnkuYy02MjQzLXtcXG5tbS9tZW1vcnkuYzo2MjQ0OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXFxcXFxubW0vbWVtb3J5LmMtNjI0NS1cXHRkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxcbi0tXFxubW0vbWVtb3J5LmMtNjI1MS1cXHRcXHRyZXR1cm4gdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWh1Z2VfZmF1bHQodm1mLCBQVURfT1JERVIpO1xcbm1tL21lbW9yeS5jOjYyNTI6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL21lbW9yeS5jLTYyNTMtXFx0cmV0dXJuIFZNX0ZBVUxUX0ZBTExCQUNLO1xcbi0tXFxubW0vbWVtb3J5LmM9NjI1Nj1zdGF0aWMgdm1fZmF1bHRfdCB3cF9odWdlX3B1ZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgcHVkX3Qgb3JpZ19wdWQpXFxubW0vbWVtb3J5LmMtNjI1Ny17XFxubW0vbWVtb3J5LmM6NjI1ODojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFx0XFxcXFxcbm1tL21lbW9yeS5jLTYyNTktXFx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG4tLVxcbm1tL21lbW9yeS5jLTYyNzUtXFx0X19zcGxpdF9odWdlX3B1ZCh2bWEsIHZtZi1cXHUwMDNlcHVkLCB2bWYtXFx1MDAzZWFkZHJlc3MpO1xcbm1tL21lbW9yeS5jOjYyNzY6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xcbm1tL21lbW9yeS5jLTYyNzctXFx0cmV0dXJuIFZNX0ZBVUxUX0ZBTExCQUNLO1xcbi0tXFxubW0vbWVtb3J5LmM9NzI5ND1FWFBPUlRfU1lNQk9MKF9fbWlnaHRfZmF1bHQpO1xcbi0tXFxubW0vbWVtb3J5LmMtNzI5Ni1cXG5tbS9tZW1vcnkuYzo3Mjk3OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfSFVHRVRMQkZTKVxcbm1tL21lbW9yeS5jLTcyOTgtLypcXG4tLVxcbm1tL21lbW9yeS5jPTc0ODU9bG9uZyBjb3B5X2ZvbGlvX2Zyb21fdXNlcihzdHJ1Y3QgZm9saW8gKmRzdF9mb2xpbyxcXG4tLVxcbm1tL21lbW9yeS5jLTc1MTQtfVxcbm1tL21lbW9yeS5jOjc1MTU6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSB8fCBDT05GSUdfSFVHRVRMQkZTICovXFxubW0vbWVtb3J5LmMtNzUxNi1cXG4tLVxcbm1tL21lbXBvbGljeS5jPTI0NDU9c3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19tcG9sKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjQ1NS1cXG5tbS9tZW1wb2xpY3kuYzoyNDU2OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1wb2xpY3kuYy0yNDU3LVxcdCAgICAvKiBmaWx0ZXIgXFxcImh1Z2VwYWdlXFxcIiBhbGxvY2F0aW9uLCB1bmxlc3MgZnJvbSBhbGxvY19wYWdlcygpICovXFxuLS1cXG5tbS9taWdyYXRlLmM9MTU4MD1zdGF0aWMgaW5saW5lIGludCB0cnlfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE1OTgtXFxubW0vbWlncmF0ZS5jOjE1OTk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21pZ3JhdGUuYy0xNjAwLSNkZWZpbmUgTlJfTUFYX0JBVENIRURfTUlHUkFUSU9OXFx0SFBBR0VfUE1EX05SXFxuLS1cXG5tbS9tbWFwLmM9ODEzPV9fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXFxuLS1cXG5tbS9tbWFwLmMtODQ0LVxcdFxcdGFkZHIgPSBnZXRfYXJlYShmaWxlLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyk7XFxubW0vbW1hcC5jOjg0NTpcXHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiAhZmlsZVxcbm1tL21tYXAuYy04NDYtXFx0XFx0ICAgXFx1MDAyNlxcdTAwMjYgIWFkZHIgLyogbm8gaGludCAqL1xcbi0tXFxubW0vbXJlbWFwLmM9NDcwPXN0YXRpYyBpbmxpbmUgYm9vbCBtb3ZlX25vcm1hbF9wdWQoc3RydWN0IHBhZ2V0YWJsZV9tb3ZlX2NvbnRyb2wgKnBtYyxcXG4tLVxcbm1tL21yZW1hcC5jLTQ3Ni1cXG5tbS9tcmVtYXAuYzo0Nzc6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxcbm1tL21yZW1hcC5jLTQ3OC1zdGF0aWMgYm9vbCBtb3ZlX2h1Z2VfcHVkKHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsXFxuLS1cXG5tbS9tcmVtYXAuYz01OTY9c3RhdGljIGJvb2wgbW92ZV9wZ3RfZW50cnkoc3RydWN0IHBhZ2V0YWJsZV9tb3ZlX2NvbnRyb2wgKnBtYyxcXG4tLVxcbm1tL21yZW1hcC5jLTYxMy1cXHRjYXNlIEhQQUdFX1BNRDpcXG5tbS9tcmVtYXAuYzo2MTQ6XFx0XFx0bW92ZWQgPSBJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tcmVtYXAuYy02MTUtXFx0XFx0XFx0bW92ZV9odWdlX3BtZChwbWMtXFx1MDAzZW9sZCwgcG1jLVxcdTAwM2VvbGRfYWRkciwgcG1jLVxcdTAwM2VuZXdfYWRkciwgb2xkX2VudHJ5LFxcbi0tXFxubW0vbXJlbWFwLmMtNjE4LVxcdGNhc2UgSFBBR0VfUFVEOlxcbm1tL21yZW1hcC5jOjYxOTpcXHRcXHRtb3ZlZCA9IElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21yZW1hcC5jLTYyMC1cXHRcXHRcXHRtb3ZlX2h1Z2VfcHVkKHBtYywgb2xkX2VudHJ5LCBuZXdfZW50cnkpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTY1MT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvcmRlcl90b19waW5kZXgoaW50IG1pZ3JhdGV0eXBlLCBpbnQgb3JkZXIpXFxubW0vcGFnZV9hbGxvYy5jLTY1Mi17XFxubW0vcGFnZV9hbGxvYy5jOjY1MzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKSB7XFxubW0vcGFnZV9hbGxvYy5jLTY1NC1cXHRcXHRib29sIG1vdmFibGUgPSBtaWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEU7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NjYzPXN0YXRpYyBpbmxpbmUgaW50IHBpbmRleF90b19vcmRlcih1bnNpZ25lZCBpbnQgcGluZGV4KVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTY2Ni1cXG5tbS9wYWdlX2FsbG9jLmM6NjY3OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpIHtcXG5tbS9wYWdlX2FsbG9jLmMtNjY4LVxcdFxcdGlmIChwaW5kZXggXFx1MDAzZT0gTlJfTE9XT1JERVJfUENQX0xJU1RTKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTY3NT1zdGF0aWMgaW5saW5lIGJvb2wgcGNwX2FsbG93ZWRfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTY3OC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS9wYWdlX2FsbG9jLmM6Njc5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9wYWdlX2FsbG9jLmMtNjgwLVxcdGlmIChpc19wbWRfb3JkZXIob3JkZXIpKVxcbi0tXFxubW0vcGFnZV9pZGxlLmM9NTI9c3RhdGljIGJvb2wgcGFnZV9pZGxlX2NsZWFyX3B0ZV9yZWZzX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcGFnZV9pZGxlLmMtNzItXFx0XFx0XFx0cmVmZXJlbmNlZCB8PSBtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgYWRkciArIFBBR0VfU0laRSk7XFxubW0vcGFnZV9pZGxlLmM6NzM6XFx0XFx0fSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpIHtcXG5tbS9wYWdlX2lkbGUuYy03NC1cXHRcXHRcXHRwbWRfdCBwbWR2YWwgPSBwbWRwX2dldChwdm13LnBtZCk7XFxuLS1cXG5tbS9wYWdlX2lvLmM9MzA1PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9zd3BvdXRfdm1fZXZlbnQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9wYWdlX2lvLmMtMzA2LXtcXG5tbS9wYWdlX2lvLmM6MzA3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9wYWdlX2lvLmMtMzA4LVxcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbykpKSB7XFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz05Nz1wdGVfdCBwdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0xMDgtXFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MTA5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0xMTAtXFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz0yNTA9dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpXFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yNTctI2VuZGlmIC8qIHB0ZV9mcmVlX2RlZmVyICovXFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MjU4OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yNTktXFxuLS1cXG5tbS9ybWFwLmM9OTE3PXN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9ybWFwLmMtOTg2LVxcdFxcdFxcdFxcdHJlZmVyZW5jZWQrKztcXG5tbS9ybWFwLmM6OTg3OlxcdFxcdH0gZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKSB7XFxubW0vcm1hcC5jLTk4OC1cXHRcXHRcXHRpZiAocG1kcF9jbGVhcl9mbHVzaF95b3VuZ19ub3RpZnkodm1hLCBhZGRyZXNzLFxcbi0tXFxubW0vcm1hcC5jPTExMDM9c3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuLS1cXG5tbS9ybWFwLmMtMTE0My1cXHRcXHR9IGVsc2Uge1xcbm1tL3JtYXAuYzoxMTQ0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9ybWFwLmMtMTE0NS1cXHRcXHRcXHRwbWRfdCAqcG1kID0gcHZtdy1cXHUwMDNlcG1kO1xcbi0tXFxubW0vcm1hcC5jPTE2MTY9dm9pZCBmb2xpb19hZGRfYW5vbl9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3JtYXAuYy0xNjE4LXtcXG5tbS9ybWFwLmM6MTYxOTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vcm1hcC5jLTE2MjAtXFx0X19mb2xpb19hZGRfYW5vbl9ybWFwKGZvbGlvLCBwYWdlLCBIUEFHRV9QTURfTlIsIHZtYSwgYWRkcmVzcywgZmxhZ3MsXFxuLS1cXG5tbS9ybWFwLmM9MTc0NT12b2lkIGZvbGlvX2FkZF9maWxlX3JtYXBfcG1kKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcm1hcC5jLTE3NDcte1xcbm1tL3JtYXAuYzoxNzQ4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9ybWFwLmMtMTc0OS1cXHRfX2ZvbGlvX2FkZF9maWxlX3JtYXAoZm9saW8sIHBhZ2UsIEhQQUdFX1BNRF9OUiwgdm1hLCBQR1RBQkxFX0xFVkVMX1BNRCk7XFxuLS1cXG5tbS9ybWFwLmM9MTc2NT12b2lkIGZvbGlvX2FkZF9maWxlX3JtYXBfcHVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcm1hcC5jLTE3Njcte1xcbm1tL3JtYXAuYzoxNzY4OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbm1tL3JtYXAuYy0xNzY5LVxcdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXFxuLS1cXG5tbS9ybWFwLmM9MTkxMz12b2lkIGZvbGlvX3JlbW92ZV9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3JtYXAuYy0xOTE1LXtcXG5tbS9ybWFwLmM6MTkxNjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vcm1hcC5jLTE5MTctXFx0X19mb2xpb19yZW1vdmVfcm1hcChmb2xpbywgcGFnZSwgSFBBR0VfUE1EX05SLCB2bWEsIFBHVEFCTEVfTEVWRUxfUE1EKTtcXG4tLVxcbm1tL3JtYXAuYz0xOTMzPXZvaWQgZm9saW9fcmVtb3ZlX3JtYXBfcHVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcm1hcC5jLTE5MzUte1xcbm1tL3JtYXAuYzoxOTM2OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbm1tL3JtYXAuYy0xOTM3LVxcdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXFxuLS1cXG5tbS9zaG1lbS5jPTExMz1zdHJ1Y3Qgc2htZW1fb3B0aW9ucyB7XFxuLS1cXG5tbS9zaG1lbS5jLTEzNi1cXG5tbS9zaG1lbS5jOjEzNzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vc2htZW0uYy0xMzgtc3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZV9zaG1lbV9vcmRlcnNfYWx3YXlzIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5tbS9zaG1lbS5jPTUyMD1zdGF0aWMgaW50IHNobWVtX2NvbmZpcm1fc3dhcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtNTY4LVxcbm1tL3NobWVtLmM6NTY5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTU3MC0vKiBpZmRlZiBoZXJlIHRvIGF2b2lkIGJsb2F0aW5nIHNobWVtLm8gd2hlbiBub3QgbmVjZXNzYXJ5ICovXFxubW0vc2htZW0uYy01NzEtXFxubW0vc2htZW0uYzo1NzI6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVIpXFxubW0vc2htZW0uYy01NzMtI2RlZmluZSBTSE1FTV9IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9ORVZFUlxcbm1tL3NobWVtLmM6NTc0OiNlbGlmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTKVxcbm1tL3NobWVtLmMtNTc1LSNkZWZpbmUgU0hNRU1fSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfQUxXQVlTXFxubW0vc2htZW0uYzo1NzY6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRSlcXG5tbS9zaG1lbS5jLTU3Ny0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vc2htZW0uYzo1Nzg6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0UpXFxubW0vc2htZW0uYy01NzktI2RlZmluZSBTSE1FTV9IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BRFZJU0VcXG4tLVxcbm1tL3NobWVtLmM9NTg0PXN0YXRpYyBpbnQgc2htZW1faHVnZSBfX3JlYWRfbW9zdGx5ID0gU0hNRU1fSFVHRV9ERUZBVUxUO1xcbi0tXFxubW0vc2htZW0uYy01ODctXFxubW0vc2htZW0uYzo1ODg6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVIpXFxubW0vc2htZW0uYy01ODktI2RlZmluZSBUTVBGU19IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9ORVZFUlxcbm1tL3NobWVtLmM6NTkwOiNlbGlmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTKVxcbm1tL3NobWVtLmMtNTkxLSNkZWZpbmUgVE1QRlNfSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfQUxXQVlTXFxubW0vc2htZW0uYzo1OTI6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRSlcXG5tbS9zaG1lbS5jLTU5My0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vc2htZW0uYzo1OTQ6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0UpXFxubW0vc2htZW0uYy01OTUtI2RlZmluZSBUTVBGU19IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BRFZJU0VcXG4tLVxcbm1tL3NobWVtLmM9ODQ1PXN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5tbS9zaG1lbS5jLTg1MC19XFxubW0vc2htZW0uYzo4NTE6I2Vsc2UgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL3NobWVtLmMtODUyLVxcbi0tXFxubW0vc2htZW0uYz04NjE9c3RhdGljIHVuc2lnbmVkIGludCBzaG1lbV9odWdlX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9zaG1lbS5jLTg2Ny19XFxubW0vc2htZW0uYzo4Njg6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL3NobWVtLmMtODY5LVxcbi0tXFxubW0vc2htZW0uYz0xNTkxPWludCBzaG1lbV93cml0ZW91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9pb2NiICoqcGx1ZyxcXG4tLVxcbm1tL3NobWVtLmMtMTYzMy1cXG5tbS9zaG1lbS5jOjE2MzQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtMTYzNS1cXHRcXHRpZiAob3JkZXIgXFx1MDAzZT0gSFBBR0VfUE1EX09SREVSKSB7XFxuLS1cXG5tbS9zaG1lbS5jPTE3Nzg9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcGluX2NsdXN0ZXIoc3dwX2VudHJ5X3Qgc3dhcCwgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vc2htZW0uYy0xNzkxLVxcbm1tL3NobWVtLmM6MTc5MjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vc2htZW0uYy0xNzkzLWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZClcXG4tLVxcbm1tL3NobWVtLmM9MTg5MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5tbS9zaG1lbS5jLTE4OTYtfVxcbm1tL3NobWVtLmM6MTg5NzojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vc2htZW0uYy0xODk4LVxcbi0tXFxubW0vc2htZW0uYz0xOTEzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX2FsbG9jX2FuZF9hZGRfZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5tbS9zaG1lbS5jLTE5MjQtXFxubW0vc2htZW0uYzoxOTI1OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxcbm1tL3NobWVtLmMtMTkyNi1cXHRcXHRvcmRlcnMgPSAwO1xcbi0tXFxubW0vc2htZW0uYz0yMDYzPXN0YXRpYyBpbnQgc2htZW1fcmVwbGFjZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGdmcF90IGdmcCxcXG4tLVxcbm1tL3NobWVtLmMtMjA3Ny1cXHRnZnAgXFx1MDAyNj0gfkdGUF9DT05TVFJBSU5UX01BU0s7XFxubW0vc2htZW0uYzoyMDc4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTIwNzktXFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2UgMSkge1xcbi0tXFxubW0vc2htZW0uYz0yNzE0PXVuc2lnbmVkIGxvbmcgc2htZW1fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5tbS9zaG1lbS5jLTI3MjktXFxubW0vc2htZW0uYzoyNzMwOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxcbm1tL3NobWVtLmMtMjczMS1cXHRcXHRyZXR1cm4gYWRkcjtcXG4tLVxcbm1tL3NobWVtLmMtMjc3My1cXHRcXHRcXHQgKi9cXG5tbS9zaG1lbS5jOjI3NzQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtMjc3NS1cXHRcXHRcXHRocGFnZV9vcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfYWx3YXlzKTtcXG4tLVxcbm1tL3NobWVtLmM9NDUwNz1zdGF0aWMgaW50IHNobWVtX3BhcnNlX29uZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbi0tXFxubW0vc2htZW0uYy00NTc2LVxcdFxcdGlmIChjdHgtXFx1MDAzZWh1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUiBcXHUwMDI2XFx1MDAyNlxcbm1tL3NobWVtLmM6NDU3NzpcXHRcXHQgICAgIShJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9zaG1lbS5jLTQ1NzgtXFx0XFx0ICAgICAgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpKVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwMzoxMToyMC43NDkzNzcxMzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzAxMTc2MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZmV3IGtleSBhcmVhcyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtOiBgbW0vY29tcGFjdGlvbi5jYCwgYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vaW50ZXJuYWwuaGAsIGFuZCBgbW0vcGFnZV9hbGxvYy5jYC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBmdW5jdGlvbnMgd2l0aGluIHRoZXNlIGZpbGVzLiBJbiBgbW0vY29tcGFjdGlvbi5jYCwgSSBzZWUgY2hhbmdlcyB0byBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgLCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AsIGFuZCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgLiBgbW0vaHVnZV9tZW1vcnkuY2AgaGFzIGNoYW5nZXMgdG8gYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgLiBgbW0vaW50ZXJuYWwuaGAgc2VlcyBhIG1vZGlmaWNhdGlvbiB0byBgcHJlcF9jb21wb3VuZF90YWlsYC4gRmluYWxseSwgYG1tL3BhZ2VfYWxsb2MuY2AgaGFzIGJlZW4gdXBkYXRlZCB3aXRoIGNoYW5nZXMgdG8gYF9fZnJlZV9wYWdlc19wcmVwYXJlYC5cblxuVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBmdW5jdGlvbmFsOyB0aGV5J3JlIHJlbW92aW5nIGBzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKWAgY2FsbHMgZm9yIGZyZWUgYW5kIHRhaWwgcGFnZXMuIFRoZW4gdGhleSdyZSBhZGRpbmcgY2hlY2tzIHRvIGNvbmZpcm0gdGhhdCBgcGFnZS1cdTAwM2Vwcml2YXRlYCBpcyAwLCBpbXBseWluZyBhIHJlbGlhbmNlIG9uIHRoaXMgdmFsdWUgZm9yIGVpdGhlciBjb250cm9sIG9yIHN0YXRlLlxuXG5MZXQncyBkaXZlIGludG8gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSBgX19zcGxpdF9mb2xpb190b19vcmRlcmAuIFRoaXMgaXMgd2hlcmUgdGhlIGltcGFjdCB3aWxsIGJlIG1vc3QgaW50ZXJlc3RpbmcuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBjb21wb3VuZCBwYWdlcyBhbmQgdGhlIGZyZWVpbmcgcGF0aC4gSSdtIGxvb2tpbmcgZm9yIGhvdyB0aGlzIGNoYW5nZSBpbXBhY3RzIGNvYWxlc2NpbmcsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgcmVsYXRlZCB0byB0aGUgcGFnZSBjYWNoZSBvciBtZW1vcnkgcmVjbGFpbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDM6MTE6MjUuNDUwNTU3Mjc5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTU5ODUxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NwbGl0X2ZvbGlvX3RvX29yZGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTM1MTU9c3RhdGljIGJvb2wgcGFnZV9yYW5nZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzUyNi0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjM1Mjc6c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzUyOC1cXHRcXHRpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNjY2LSAqIDEuIHVuaWZvcm0gc3BsaXQ6IEB4YXMgaXMgc3BsaXQgd2l0aCBubyBleHBlY3RhdGlvbiBvZiBmYWlsdXJlIGFuZCBhIHNpbmdsZVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzY2NzogKiAgICBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKCkgaXMgY2FsbGVkIHRvIHNwbGl0IHRoZSBAZm9saW8gaW50byBAbmV3X29yZGVyXFxubW0vaHVnZV9tZW1vcnkuYy0zNjY4LSAqICAgIGFsb25nIHdpdGggc3RhdHMgdXBkYXRlLlxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY2OS0gKiAyLiBub24tdW5pZm9ybSBzcGxpdDogZm9saW9fb3JkZXIgLSBAbmV3X29yZGVyIGNhbGxzIHRvXFxubW0vaHVnZV9tZW1vcnkuYzozNjcwOiAqICAgIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoKSBhcmUgZXhwZWN0ZWQgdG8gYmUgbWFkZSBpbiBhIGZvciBsb29wIHRvIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYy0zNjcxLSAqICAgIHRoZSBAZm9saW8gdG8gb25lIGxvd2VyIG9yZGVyIGF0IGEgdGltZS4gVGhlIGZvbGlvIGNvbnRhaW5pbmcgQHNwbGl0X2F0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM2ODM9c3RhdGljIGludCBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM3MjgtXFx0XFx0cGdhbGxvY190YWdfc3BsaXQoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MzcyOTpcXHRcXHRfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcXG5tbS9odWdlX21lbW9yeS5jLTM3MzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDAzOjExOjI1LjYwMDE2NjkxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTU1NDc2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEZvbGlvIFNwbGl0dGluZyBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdyBoZXJlLiBJdCBsb29rcyBsaWtlIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCBpcyBiZWluZyBpbnZva2VkIGJ5IHRoZSBgX19zcGxpdF91bm1hcHBlZF9mb2xpb2AgZnVuY3Rpb24uIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCBiZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gdGhlIHJhYmJpdCBob2xlIG9mIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCwgSSBzaG91bGQgcHJvYmFibHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCB0aGF0J3MgKnRyaWdnZXJpbmcqIGl0LiBUaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIHRvIGRpZyBpbnRvIGBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvYC4gVW5kZXJzdGFuZGluZyAqd2h5KiB3ZSdyZSBzcGxpdHRpbmcgdW5tYXBwZWQgZm9saW9zIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIGxvZ2ljIG9mIHRoZSBzZWNvbmRhcnkgc3BsaXQgZnVuY3Rpb24uIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTY5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDM6MTE6MjguNzU1NzE4ODI5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkzNDM1MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zcGxpdF91bm1hcHBlZF9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zNTI3PXN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY0Mi0vKipcXG5tbS9odWdlX21lbW9yeS5jOjM2NDM6ICogX19zcGxpdF91bm1hcHBlZF9mb2xpbygpIC0gc3BsaXRzIGFuIHVubWFwcGVkIEBmb2xpbyB0byBsb3dlciBvcmRlciBmb2xpb3MgaW5cXG5tbS9odWdlX21lbW9yeS5jLTM2NDQtICogdHdvIHdheXM6IHVuaWZvcm0gc3BsaXQgb3Igbm9uLXVuaWZvcm0gc3BsaXQuXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM2ODItICovXFxubW0vaHVnZV9tZW1vcnkuYzozNjgzOnN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY4NC1cXHRcXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zODEwPXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM4ODMtXFxubW0vaHVnZV9tZW1vcnkuYzozODg0OlxcdFxcdHJldCA9IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIHhhcyxcXG5tbS9odWdlX21lbW9yeS5jLTM4ODUtXFx0XFx0XFx0XFx0XFx0ICAgICBtYXBwaW5nLCBzcGxpdF90eXBlKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk3My0gKlxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk3NDogKiBJdCBjYWxscyBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKCkgdG8gcGVyZm9ybSB1bmlmb3JtIGFuZCBub24tdW5pZm9ybSBzcGxpdC5cXG5tbS9odWdlX21lbW9yeS5jLTM5NzUtICogSXQgaXMgaW4gY2hhcmdlIG9mIGNoZWNraW5nIHdoZXRoZXIgdGhlIHNwbGl0IGlzIHN1cHBvcnRlZCBvciBub3QgYW5kXFxubW0vaHVnZV9tZW1vcnkuYzozOTc2OiAqIHByZXBhcmluZyBAZm9saW8gZm9yIF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oKS5cXG5tbS9odWdlX21lbW9yeS5jLTM5NzctICpcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mzk4Nj1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDA2OC1cXHRcXHQvKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDA2OTpcXHRcXHQgKl9fc3BsaXRfdW5tYXBwZWRfZm9saW8oKSBtYXkgbmVlZCB0byB0cmltIG9mZiBwYWdlcyBiZXlvbmRcXG5tbS9odWdlX21lbW9yeS5jLTQwNzAtXFx0XFx0ICogRU9GOiBidXQgb24gMzItYml0LCBpX3NpemVfcmVhZCgpIHRha2VzIGFuIGlycS11bnNhZmVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDM6MTE6MjguOTI1MDgxNDEyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTQ2NTIyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERhdGEgU3BsaXR0aW5nIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgX19mb2xpb19zcGxpdGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIHRyYWNlIHRoaXMgYmFjayBhbmQgdW5kZXJzdGFuZCB0aGUgd2hvbGUgY2FsbCBzdGFjayBhbmQgdGhlIGRhdGEgZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHRyaWdnZXJpbmcgYF9fZm9saW9fc3BsaXRgIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gIEknbGwgZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLiAgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgaGFuZGxpbmcgdGhlIGxvZ2ljIGZvciB0YWtpbmcgYSB2ZXJ5IGxhcmdlIFwicGFnZVwiIG9mIGRhdGEgYW5kIGJyZWFraW5nIGl0IGRvd24gaW50byBhIG1vcmUgbWFuYWdlYWJsZSwgb3JkZXJlZCBsaXN0IG9mIHNtYWxsZXIgc2VnbWVudHMuIFVuZGVyc3RhbmRpbmcgdGhlIGFsZ29yaXRobSB1c2VkIGhlcmUgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB3aHkgaXQncyBjYWxsaW5nIGBfX2ZvbGlvX3NwbGl0YC4gSXMgaXQgYSBwYXJ0aXRpb25pbmcgc3RyYXRlZ3ksIGEgYmxvY2sgZGVjb21wb3NpdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/ICBLbm93aW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgYW5kIHRoZSBvcmRlcmluZyByZXF1aXJlbWVudHMgd2lsbCBiZSBrZXkgdG8gbWFraW5nIHNlbnNlIG9mIGBfX2ZvbGlvX3NwbGl0YCdzIHB1cnBvc2Ugd2l0aGluIHRoaXMgd29ya2Zsb3cuIEkgYW50aWNpcGF0ZSB0aGF0IGBfX2ZvbGlvX3NwbGl0YCB3aWxsIGJlIHBlcmZvcm1pbmcgdGhlIGFjdHVhbCBzcGxpdHRpbmcgb3BlcmF0aW9uLCBidXQgSSBuZWVkIHRvIHNlZSBob3cgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCBpcyBzZXR0aW5nIHVwIHRoZSBwYXJhbWV0ZXJzIGFuZCBjb250cm9sbGluZyB0aGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5NzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwMzoxMTozMi40MTk3MzgxMzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTAwMDUzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz00MTc4PWludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjQ0LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI0NTppbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG5tbS9odWdlX21lbW9yeS5jLTQyNDYtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjYyLSAqIEl0IGhhcyB0aGUgc2FtZSBwcmVyZXF1aXNpdGVzIGFuZCByZXR1cm5zIGFzXFxubW0vaHVnZV9tZW1vcnkuYzo0MjYzOiAqIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKCkuXFxubW0vaHVnZV9tZW1vcnkuYy00MjY0LSAqXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQzMTI9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5tbS9odWdlX21lbW9yeS5jLTQzMTMte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDMxNDpcXHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBsaXN0LCAwKTtcXG5tbS9odWdlX21lbW9yeS5jLTQzMTUtfVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTk4PXN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY2Ny1cXHRcXHQvKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDY2ODpcXHRcXHQgKiBGb3IgZm9saW9zIHdpdGggcHJpdmF0ZSwgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY2OS1cXHRcXHQgKiB3aWxsIHRyeSB0byBkcm9wIGl0IGJlZm9yZSBzcGxpdCBhbmQgdGhlbiBjaGVjayBpZiB0aGUgZm9saW9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDM6MTE6MzIuNjY0NzQ5NTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5ODU5NTY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvcmUgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYC4gSXQncyBhIHB1YmxpYyBBUEksIHNvIGl0J3MgYSBjcml0aWNhbCBlbnRyeSBwb2ludC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zIHRoYXQgbGlrZWx5IGRyaXZlIGl0cyBiZWhhdmlvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIGZsb3cuIFRoZSBrZXkgc3ltYm9scyB0aGF0IHNlZW0gcmVsZXZhbnQgYXJlOiBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgLCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AsIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAsIGFuZCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAuIFRoZXNlIGZlZWwgbGlrZSB0aGUgZ3V0cyBvZiB0aGUgb3BlcmF0aW9uLCB0aGUgbG93LWxldmVsIGJ1aWxkaW5nIGJsb2Nrcy5cblxuV2FpdCBhIHNlY29uZC4uLkkganVzdCBjYXVnaHQgdGhhdCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWlnaHQgcHJlc2VudCBzb21lIGludGVyZXN0aW5nIGNoYWxsZW5nZXMgZm9yIHRlc3Rpbmcgb3IgcG90ZW50aWFsIGZ1dHVyZSBtb2RpZmljYXRpb25zLiBHaXZlbiBpdHMgc3RhdHVzLCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB3b3VsZCBiZSB0byBkcmlsbCBkb3duIGludG8gdGhlIGludGVybmFscyBvZiBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgIGFuZCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AuIFRoZXkncmUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGhleSdyZSBsaWtlbHkgdGhlIG9uZXMgZGlyZWN0bHkgaGFuZGxpbmcgdGhlIGZvbGlvIGlzb2xhdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHB1YmxpYyBBUEksIGJ1dCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgY291bGQgcG90ZW50aWFsbHkgcGVyZm9ybSB0aGUgdW5kZXJseWluZyBsb2dpYy4gU28gSSdsbCBuZWVkIHRvIGdvIGRlZXBlciBpbnRvIHRob3NlIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3MzgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDM6MTE6MzYuNjYzMzQ5ODEzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2ODcyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NvbXBhY3Rpb24uYz01NTE9c3RhdGljIGJvb2wgY29tcGFjdF91bmxvY2tfc2hvdWxkX2Fib3J0KHNwaW5sb2NrX3QgKmxvY2ssXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtNTczLSAqL1xcbm1tL2NvbXBhY3Rpb24uYzo1NzQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXFxubW0vY29tcGFjdGlvbi5jLTU3NS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpzdGFydF9wZm4sXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9NzEyPWlzb2xhdGVfZnJlZXBhZ2VzX3JhbmdlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTcyOS1cXHRcXHRcXHRcXHRibG9ja19lbmRfcGZuICs9IHBhZ2VibG9ja19ucl9wYWdlcykge1xcbm1tL2NvbXBhY3Rpb24uYzo3MzA6XFx0XFx0LyogUHJvdGVjdCBwZm4gZnJvbSBjaGFuZ2luZyBieSBpc29sYXRlX2ZyZWVwYWdlc19ibG9jayAqL1xcbm1tL2NvbXBhY3Rpb24uYy03MzEtXFx0XFx0dW5zaWduZWQgbG9uZyBpc29sYXRlX3N0YXJ0X3BmbiA9IHBmbjtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy03NDgtXFxubW0vY29tcGFjdGlvbi5jOjc0OTpcXHRcXHRpc29sYXRlZCA9IGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKGNjLCBcXHUwMDI2aXNvbGF0ZV9zdGFydF9wZm4sXFxubW0vY29tcGFjdGlvbi5jLTc1MC1cXHRcXHRcXHRcXHRcXHRibG9ja19lbmRfcGZuLCBjYy1cXHUwMDNlZnJlZXBhZ2VzLCAwLCB0cnVlKTtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy03NTItXFx0XFx0LypcXG5tbS9jb21wYWN0aW9uLmM6NzUzOlxcdFxcdCAqIEluIHN0cmljdCBtb2RlLCBpc29sYXRlX2ZyZWVwYWdlc19ibG9jaygpIHJldHVybnMgMCBpZlxcbm1tL2NvbXBhY3Rpb24uYy03NTQtXFx0XFx0ICogdGhlcmUgYXJlIGFueSBob2xlcyBpbiB0aGUgYmxvY2sgKGllLiBpbnZhbGlkIFBGTnMgb3JcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0xNDc0PWZhc3RfaXNvbGF0ZV9hcm91bmQoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTE0OTQtXFxubW0vY29tcGFjdGlvbi5jOjE0OTU6XFx0aXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soY2MsIFxcdTAwMjZzdGFydF9wZm4sIGVuZF9wZm4sIGNjLVxcdTAwM2VmcmVlcGFnZXMsIDEsIGZhbHNlKTtcXG5tbS9jb21wYWN0aW9uLmMtMTQ5Ni1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0xNjkyPXN0YXRpYyB2b2lkIGlzb2xhdGVfZnJlZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTE3NjMtXFx0XFx0LyogRm91bmQgYSBibG9jayBzdWl0YWJsZSBmb3IgaXNvbGF0aW5nIGZyZWUgcGFnZXMgZnJvbS4gKi9cXG5tbS9jb21wYWN0aW9uLmM6MTc2NDpcXHRcXHRucl9pc29sYXRlZCA9IGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKGNjLCBcXHUwMDI2aXNvbGF0ZV9zdGFydF9wZm4sXFxubW0vY29tcGFjdGlvbi5jLTE3NjUtXFx0XFx0XFx0XFx0XFx0YmxvY2tfZW5kX3BmbiwgY2MtXFx1MDAzZWZyZWVwYWdlcywgc3RyaWRlLCBmYWxzZSk7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMTgwMS1cXHQgKiBicm9rZSBmcm9tIHRoZSBsb29wIGFuZCBzZXQgaXNvbGF0ZV9zdGFydF9wZm4gYmFzZWQgb24gdGhlIGxhc3RcXG5tbS9jb21wYWN0aW9uLmM6MTgwMjpcXHQgKiBjYWxsIHRvIGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKCksIG9yIHdlIG1ldCB0aGUgbWlncmF0aW9uIHNjYW5uZXJcXG5tbS9jb21wYWN0aW9uLmMtMTgwMy1cXHQgKiBhbmQgdGhlIGxvb3AgdGVybWluYXRlZCBkdWUgdG8gaXNvbGF0ZV9zdGFydF9wZm4gXFx1MDAzYyBsb3dfcGZuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDAzOjExOjM2LjgwNjA0OTY1OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTEyMzEyOTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ29tcGFjdGlvbiBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZXNlIGNoYW5nZXMgaW4gYG1tL2NvbXBhY3Rpb24uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgd29ydGggdGFyZ2V0aW5nIGZvciBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgc2VlbSB0byBiZSBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgLCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AsIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAsIGFuZCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAuIFRob3NlIGFyZSB0aGUgb25lcyB0aGUgZGlmZiBpcyBmb2N1c2luZyBvbi4gSG1tLCBidXQgd2FpdCwgYF9fZnJlZV9wYWdlc19wcmVwYXJlYCBpcyBpbiB0aGF0IGxpc3QsIGFuZCB0aGF0J3MgYSAqdmVyeSogaG90IHBhdGguIEZ1enppbmcgdGhhdCBkaXJlY3RseSBtaWdodCBub3QgeWllbGQgbXVjaCwgc2luY2UgaXQncyBhbHJlYWR5IHNvIHdlbGwtZXhlcmNpc2VkLCBidXQgdGhlIGNoYW5nZSBpdHNlbGYgaXMgd29ydGggbm90aW5nLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQgaGVyZS4gXG5cbkFscmlnaHQsIEkgc2VlIGBwcmVwX2NvbXBvdW5kX3RhaWxgIGFzIGFub3RoZXIgbW9kaWZpZWQgZnVuY3Rpb24uIExldCBtZSBzd2l0Y2ggZ2VhcnMsIGFuZCBjaGVjayBvdXQgYF9fZnJlZV9wYWdlc19wcmVwYXJlYCBtb3JlIGNsb3NlbHksIHNwZWNpZmljYWxseSwgbGV0J3MgZ28gb3ZlciB0byBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgdGFrZSBhIGRlZXBlciBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg1MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwMzoxMTo0MC43MTgzNjg0OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MTc4NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZnJlZV9wYWdlc19wcmVwYXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9MTMwOD1zdGF0aWMgaW5saW5lIHZvaWQgcGdhbGxvY190YWdfc3ViX3BhZ2VzKHN0cnVjdCBhbGxvY190YWcgKnRhZywgdW5zaWduZWQgaW50IG5yKSB7fVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTEzMTEtXFxubW0vcGFnZV9hbGxvYy5jOjEzMTI6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3BhZ2VfYWxsb2MuYy0xMzEzLVxcdFxcdHVuc2lnbmVkIGludCBvcmRlciwgZnBpX3QgZnBpX2ZsYWdzKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTE0NTU9Ym9vbCBmcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS9wYWdlX2FsbG9jLmMtMTQ1Ni17XFxubW0vcGFnZV9hbGxvYy5jOjE0NTc6XFx0cmV0dXJuIF9fZnJlZV9wYWdlc19wcmVwYXJlKHBhZ2UsIG9yZGVyLCBGUElfTk9ORSk7XFxubW0vcGFnZV9hbGxvYy5jLTE0NTgtfVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTE1ODQ9c3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMTU4OS1cXG5tbS9wYWdlX2FsbG9jLmM6MTU5MDpcXHRpZiAoX19mcmVlX3BhZ2VzX3ByZXBhcmUocGFnZSwgb3JkZXIsIGZwaV9mbGFncykpXFxubW0vcGFnZV9hbGxvYy5jLTE1OTEtXFx0XFx0ZnJlZV9vbmVfcGFnZSh6b25lLCBwYWdlLCBwZm4sIG9yZGVyLCBmcGlfZmxhZ3MpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTI5NDM9c3RhdGljIHZvaWQgX19mcmVlX2Zyb3plbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTI5NTUtXFxubW0vcGFnZV9hbGxvYy5jOjI5NTY6XFx0aWYgKCFfX2ZyZWVfcGFnZXNfcHJlcGFyZShwYWdlLCBvcmRlciwgZnBpX2ZsYWdzKSlcXG5tbS9wYWdlX2FsbG9jLmMtMjk1Ny1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MzAwNT12b2lkIGZyZWVfdW5yZWZfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTMwMTYtXFxubW0vcGFnZV9hbGxvYy5jOjMwMTc6XFx0XFx0aWYgKCFfX2ZyZWVfcGFnZXNfcHJlcGFyZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIG9yZGVyLCBGUElfTk9ORSkpXFxubW0vcGFnZV9hbGxvYy5jLTMwMTgtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDAzOjExOjQwLjkxNjU1NzE5MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDkwNTEyMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBhbmQgQ29uZmlndXJhdGlvbiBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gYW5hbHl6aW5nIHRoaXMgcGF0Y2ggYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0IGZvciBmdXp6aW5nLiBJJ3ZlIGlkZW50aWZpZWQgc29tZSBjcml0aWNhbCBmdW5jdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb25zLiBGaXJzdGx5LCBJJ3ZlIGRlY2lkZWQgdG8gZXhjbHVkZSBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgIGZyb20gRm9jdXNTeW1ib2xzIGJlY2F1c2UgaXQncyBhIGhvdCBwYXRoLCBhbmQgaW5jbHVkaW5nIGl0IGlzbid0IHRoZSBiZXN0IHVzZSBvZiByZXNvdXJjZXMuIEhvd2V2ZXIsIEkgd2lsbCBpbmNsdWRlIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYCwgYW5kIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYC4gV2FpdCwgYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgIGlzIHN0YXRpYy4gVGhhdCdzIGZpbmUsIHN5emthbGxlciBjYW4gaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSdyZSBpbiB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0J3Mgbm90IGEgYmxvY2tlci5cblxuSSBuZWVkZWQgdG8gY2hlY2sgYSBmZXcgY29uZmlndXJhdGlvbnMuIEkgY29uZmlybWVkIGBDT05GSUdfQ09NUEFDVElPTmAgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFyZSB0aGUgcmVsZXZhbnQgb25lcyBmb3IgdGhpcyBwYXRjaC5cblxuTXkgcmVhc29uaW5nIGlzIHRoaXM6IHRoZSBwYXRjaCBtb2RpZmllcyBob3cgd2UgaGFuZGxlIHRoZSBgcGFnZS1cdTAwM2Vwcml2YXRlYCBmaWVsZCBkdXJpbmcgcGFnZSBmcmVlaW5nIGFuZCBUSFAgc3BsaXR0aW5nLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHNwZWNpZmljYWxseSBjb21wYWN0aW9uLCBwYWdlIGFsbG9jYXRpb24sIGFuZCBUSFAg4oCTIHdoaWNoIGltcGFjdHMgcGFnZSBzdGF0ZS4gSXQgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciB3YXJuaW5ncyBvciBiYWQgcGFnZSBzdGF0ZXMgaWYgdGhlIGNoYW5nZXMgYXJlIHZpb2xhdGVkLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBwcmltZSBmb3IgZnV6emluZy5cblxuVGhlcmVmb3JlLCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6XG4tIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2Bcbi0gYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgXG4tIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmBcbi0gYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgXG5cbkFuZCB0aGUgZW5hYmxlZCBjb25maWd1cmF0aW9ucyBhcmU6XG4tIGBDT01QQUNUSU9OYFxuLSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ3ZlIHJlLXZlcmlmaWVkIHRoYXQgSSBnb3QgdGhlIGZ1bmN0aW9uIG5hbWVzIHJpZ2h0OiBgX19zcGxpdF9mb2xpb190b19vcmRlcmAsIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAsIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGFuZCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AgYXJlIGFsbCBjb3JyZWN0LlxuXG5Ob3csIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODEyLCJPdXRwdXRUb2tlbnMiOjE2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwMzoxMTo0OS4wMDcwNzU3OTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTAzOTY2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tcIixcbiAgICBcImZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNcIixcbiAgICBcImNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mXCIsXG4gICAgXCJfX3NwbGl0X2ZvbGlvX3RvX29yZGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBieSByZW1vdmluZyBgc2V0X3BhZ2VfcHJpdmF0ZWAgY2FsbHMgZm9yIGZyZWUgcGFnZXMgYW5kIHRhaWwgcGFnZXMsIGFuZCBhZGRpbmcgY2hlY2tzIHRvIGVuc3VyZSBgcGFnZS1cXHUwMDNlcHJpdmF0ZWAgaXMgMCBkdXJpbmcgcGFnZSBmcmVlaW5nIGFuZCBUSFAgc3BsaXR0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGNvbXBhY3Rpb24sIHBhZ2UgYWxsb2NhdGlvbiwgYW5kIFRIUCwgd2hpY2ggY2FuIHRyaWdnZXIgd2FybmluZ3Mgb3IgYmFkIHBhZ2Ugc3RhdGVzIGlmIHZpb2xhdGVkLiBJdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09NUEFDVElPTlwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpc29sYXRlX2ZyZWVwYWdlc19ibG9ja1wiLFxuICAgIFwiZmFzdF9pc29sYXRlX2ZyZWVwYWdlc1wiLFxuICAgIFwiY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZcIixcbiAgICBcIl9fc3BsaXRfZm9saW9fdG9fb3JkZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGJ5IHJlbW92aW5nIGBzZXRfcGFnZV9wcml2YXRlYCBjYWxscyBmb3IgZnJlZSBwYWdlcyBhbmQgdGFpbCBwYWdlcywgYW5kIGFkZGluZyBjaGVja3MgdG8gZW5zdXJlIGBwYWdlLVxcdTAwM2Vwcml2YXRlYCBpcyAwIGR1cmluZyBwYWdlIGZyZWVpbmcgYW5kIFRIUCBzcGxpdHRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgY29tcGFjdGlvbiwgcGFnZSBhbGxvY2F0aW9uLCBhbmQgVEhQLCB3aGljaCBjYW4gdHJpZ2dlciB3YXJuaW5ncyBvciBiYWQgcGFnZSBzdGF0ZXMgaWYgdmlvbGF0ZWQuIEl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v5nk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 03:02:17 +0000 UTC FinishedAt: 2026-06-29 03:11:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION", "TRANSPARENT_HUGEPAGE" ], "series_id": "8823164c-e27e-449e-8840-b511a696f4ff" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "isolate_freepages_block", "fast_isolate_freepages", "compaction_alloc_noprof", "__split_folio_to_order" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDAzOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpc29sYXRlX2ZyZWVwYWdlc19ibG9jayYjMzQ7LAogICAgJiMzNDtmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzJiMzNDssCiAgICAmIzM0O2NvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mJiMzNDssCiAgICAmIzM0O19fc3BsaXRfZm9saW9fdG9fb3JkZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBieSByZW1vdmluZyBgc2V0X3BhZ2VfcHJpdmF0ZWAgY2FsbHMgZm9yIGZyZWUgcGFnZXMgYW5kIHRhaWwgcGFnZXMsIGFuZCBhZGRpbmcgY2hlY2tzIHRvIGVuc3VyZSBgcGFnZS1cdTAwM2Vwcml2YXRlYCBpcyAwIGR1cmluZyBwYWdlIGZyZWVpbmcgYW5kIFRIUCBzcGxpdHRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgY29tcGFjdGlvbiwgcGFnZSBhbGxvY2F0aW9uLCBhbmQgVEhQLCB3aGljaCBjYW4gdHJpZ2dlciB3YXJuaW5ncyBvciBiYWQgcGFnZSBzdGF0ZXMgaWYgdmlvbGF0ZWQuIEl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwMzoxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBkNjljZDgzMTEwZDVhMzVjOTA0YTJhMzk0Yjc4NjAyNGU4YTZhMWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAwMzoxMTowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmNcbmluZGV4IGI3NzZmMzVhZDAyMDA3Li4zNDk4MzhjYzZjMTkwZiAxMDA2NDRcbi0tLSBhL21tL2NvbXBhY3Rpb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vY29tcGFjdGlvbi5jXG5AQCAtNjQ0LDcgJiM0Mzs2NDQsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2ZyZWVwYWdlc19ibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcbiBcdFx0aXNvbGF0ZWQgPSBfX2lzb2xhdGVfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTtcbiBcdFx0aWYgKCFpc29sYXRlZClcbiBcdFx0XHRicmVhaztcbi1cdFx0c2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7XG4gXG4gXHRcdG5yX3NjYW5uZWQgJiM0Mzs9IGlzb2xhdGVkIC0gMTtcbiBcdFx0dG90YWxfaXNvbGF0ZWQgJiM0Mzs9IGlzb2xhdGVkO1xuQEAgLTE2MTcsNyAmIzQzOzE2MTYsNiBAQCBzdGF0aWMgdm9pZCBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuIFx0XHQvKiBJc29sYXRlIHRoZSBwYWdlIGlmIGF2YWlsYWJsZSAqL1xuIFx0XHRpZiAocGFnZSkge1xuIFx0XHRcdGlmIChfX2lzb2xhdGVfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKSkge1xuLVx0XHRcdFx0c2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7XG4gXHRcdFx0XHRucl9pc29sYXRlZCA9IDEgXHUwMDNjXHUwMDNjIG9yZGVyO1xuIFx0XHRcdFx0bnJfc2Nhbm5lZCAmIzQzOz0gbnJfaXNvbGF0ZWQgLSAxO1xuIFx0XHRcdFx0dG90YWxfaXNvbGF0ZWQgJiM0Mzs9IG5yX2lzb2xhdGVkO1xuQEAgLTE4NDYsNyAmIzQzOzE4NDQsNiBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpjb21wYWN0aW9uX2FsbG9jX25vcHJvZihzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBkYVxuIFx0XHRzaXplIFx1MDAzZVx1MDAzZT0gMTtcbiBcbiBcdFx0bGlzdF9hZGQoXHUwMDI2ZnJlZXBhZ2Vbc2l6ZV0ubHJ1LCBcdTAwMjZjYy1cdTAwM2VmcmVlcGFnZXNbc3RhcnRfb3JkZXJdKTtcbi1cdFx0c2V0X3BhZ2VfcHJpdmF0ZShcdTAwMjZmcmVlcGFnZVtzaXplXSwgc3RhcnRfb3JkZXIpO1xuIFx0fVxuIFx0ZHN0ID0gKHN0cnVjdCBmb2xpbyAqKWZyZWVwYWdlO1xuIFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uMDM3ZDY3ZmJlYzZlNTkgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMzU5NCw2ICYjNDM7MzU5NCwxNiBAQCBzdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXG4gXHRcdG5ld19mb2xpby1cdTAwM2VtYXBwaW5nID0gZm9saW8tXHUwMDNlbWFwcGluZztcbiBcdFx0bmV3X2ZvbGlvLVx1MDAzZWluZGV4ID0gZm9saW8tXHUwMDNlaW5kZXggJiM0MzsgaTtcbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBwYWdlLVx1MDAzZXByaXZhdGUgc2hvdWxkIG5vdCBiZSBzZXQgaW4gdGFpbCBwYWdlcy4gRml4IHVwIGFuZCB3YXJuIG9uY2VcbiYjNDM7XHRcdCAqIGlmIHByaXZhdGUgaXMgdW5leHBlY3RlZGx5IHNldC4gRG8gaXQgYmVmb3JlIHN3YXAudmFsIGFzc2lnbm1lbnRcbiYjNDM7XHRcdCAqIHNpbmNlIHByaXZhdGUgb3ZlcmxhcHMgd2l0aCBzd2FwLnZhbC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KG5ld19mb2xpby1cdTAwM2Vwcml2YXRlKSkge1xuJiM0MztcdFx0XHRWTV9XQVJOX09OX09OQ0VfUEFHRSh0cnVlLCBuZXdfaGVhZCk7XG4mIzQzO1x0XHRcdG5ld19mb2xpby1cdTAwM2Vwcml2YXRlID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpXG4gXHRcdFx0bmV3X2ZvbGlvLVx1MDAzZXN3YXAudmFsID0gZm9saW8tXHUwMDNlc3dhcC52YWwgJiM0MzsgaTtcbiBcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMTgxZTc5ZjFkNmEyMDcuLmM5NjQyMWNlOTM1MDE1IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaFxuQEAgLTg5NSw3ICYjNDM7ODk1LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHByZXBfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCxcbiB7XG4gXHR0YWlsLVx1MDAzZW1hcHBpbmcgPSBUQUlMX01BUFBJTkc7XG4gXHRzZXRfY29tcG91bmRfaGVhZCh0YWlsLCBoZWFkLCBvcmRlcik7XG4tXHRzZXRfcGFnZV9wcml2YXRlKHRhaWwsIDApO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggZWU5MDJhNDY4YzJmNWIuLjEzYzI2NTVlMjRmYmRkIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC0xMzc0LDE1ICYjNDM7MTM3NCwyMSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gI2VuZGlmXG4gXHRcdH1cbiBcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgKDEgXHUwMDNjXHUwMDNjIG9yZGVyKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IHBhZ2UgKnN1YnBhZ2UgPSBwYWdlICYjNDM7IGk7XG4mIzQzO1xuIFx0XHRcdGlmIChjb21wb3VuZClcbi1cdFx0XHRcdGJhZCAmIzQzOz0gZnJlZV90YWlsX3BhZ2VfcHJlcGFyZShwYWdlLCBwYWdlICYjNDM7IGkpO1xuJiM0MztcdFx0XHRcdGJhZCAmIzQzOz0gZnJlZV90YWlsX3BhZ2VfcHJlcGFyZShwYWdlLCBzdWJwYWdlKTtcbiBcdFx0XHRpZiAoaXNfY2hlY2tfcGFnZXNfZW5hYmxlZCgpKSB7XG4tXHRcdFx0XHRpZiAoZnJlZV9wYWdlX2lzX2JhZChwYWdlICYjNDM7IGkpKSB7XG4mIzQzO1x0XHRcdFx0aWYgKGZyZWVfcGFnZV9pc19iYWQoc3VicGFnZSkpIHtcbiBcdFx0XHRcdFx0YmFkJiM0MzsmIzQzOztcbiBcdFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuLVx0XHRcdChwYWdlICYjNDM7IGkpLVx1MDAzZWZsYWdzLmYgXHUwMDI2PSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQO1xuJiM0MztcdFx0XHRzdWJwYWdlLVx1MDAzZWZsYWdzLmYgXHUwMDI2PSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQO1xuJiM0MztcdFx0XHRpZiAoc3VicGFnZS1cdTAwM2Vwcml2YXRlKSB7XG4mIzQzO1x0XHRcdFx0YmFkX3BhZ2Uoc3VicGFnZSwgXCYjMzQ7bm9uemVybyBwcml2YXRlXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFx0fVxuIFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwMzoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2smIzM0OywKICAgICYjMzQ7ZmFzdF9pc29sYXRlX2ZyZWVwYWdlcyYjMzQ7LAogICAgJiMzNDtjb21wYWN0aW9uX2FsbG9jX25vcHJvZiYjMzQ7LAogICAgJiMzNDtfX3NwbGl0X2ZvbGlvX3RvX29yZGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYnkgcmVtb3ZpbmcgYHNldF9wYWdlX3ByaXZhdGVgIGNhbGxzIGZvciBmcmVlIHBhZ2VzIGFuZCB0YWlsIHBhZ2VzLCBhbmQgYWRkaW5nIGNoZWNrcyB0byBlbnN1cmUgYHBhZ2UtXHUwMDNlcHJpdmF0ZWAgaXMgMCBkdXJpbmcgcGFnZSBmcmVlaW5nIGFuZCBUSFAgc3BsaXR0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGNvbXBhY3Rpb24sIHBhZ2UgYWxsb2NhdGlvbiwgYW5kIFRIUCwgd2hpY2ggY2FuIHRyaWdnZXIgd2FybmluZ3Mgb3IgYmFkIHBhZ2Ugc3RhdGVzIGlmIHZpb2xhdGVkLiBJdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBkNjljZDgzMTEwZDVhMzVjOTA0YTJhMzk0Yjc4NjAyNGU4YTZhMWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAwMzoxMTowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uYwppbmRleCBiNzc2ZjM1YWQwMjAwNy4uMzQ5ODM4Y2M2YzE5MGYgMTAwNjQ0Ci0tLSBhL21tL2NvbXBhY3Rpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9jb21wYWN0aW9uLmMKQEAgLTY0NCw3ICYjNDM7NjQ0LDYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsCiAJCWlzb2xhdGVkID0gX19pc29sYXRlX2ZyZWVfcGFnZShwYWdlLCBvcmRlcik7CiAJCWlmICghaXNvbGF0ZWQpCiAJCQlicmVhazsKLQkJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7CiAKIAkJbnJfc2Nhbm5lZCAmIzQzOz0gaXNvbGF0ZWQgLSAxOwogCQl0b3RhbF9pc29sYXRlZCAmIzQzOz0gaXNvbGF0ZWQ7CkBAIC0xNjE3LDcgJiM0MzsxNjE2LDYgQEAgc3RhdGljIHZvaWQgZmFzdF9pc29sYXRlX2ZyZWVwYWdlcyhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYykKIAkJLyogSXNvbGF0ZSB0aGUgcGFnZSBpZiBhdmFpbGFibGUgKi8KIAkJaWYgKHBhZ2UpIHsKIAkJCWlmIChfX2lzb2xhdGVfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKSkgewotCQkJCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgb3JkZXIpOwogCQkJCW5yX2lzb2xhdGVkID0gMSAmbHQ7Jmx0OyBvcmRlcjsKIAkJCQlucl9zY2FubmVkICYjNDM7PSBucl9pc29sYXRlZCAtIDE7CiAJCQkJdG90YWxfaXNvbGF0ZWQgJiM0Mzs9IG5yX2lzb2xhdGVkOwpAQCAtMTg0Niw3ICYjNDM7MTg0NCw2IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mKHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIGRhCiAJCXNpemUgJmd0OyZndDs9IDE7CiAKIAkJbGlzdF9hZGQoJmFtcDtmcmVlcGFnZVtzaXplXS5scnUsICZhbXA7Y2MtJmd0O2ZyZWVwYWdlc1tzdGFydF9vcmRlcl0pOwotCQlzZXRfcGFnZV9wcml2YXRlKCZhbXA7ZnJlZXBhZ2Vbc2l6ZV0sIHN0YXJ0X29yZGVyKTsKIAl9CiAJZHN0ID0gKHN0cnVjdCBmb2xpbyAqKWZyZWVwYWdlOwogCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCAyYmNjYjBhNTNhMGE2MC4uMDM3ZDY3ZmJlYzZlNTkgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMzU5NCw2ICYjNDM7MzU5NCwxNiBAQCBzdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsCiAJCW5ld19mb2xpby0mZ3Q7bWFwcGluZyA9IGZvbGlvLSZndDttYXBwaW5nOwogCQluZXdfZm9saW8tJmd0O2luZGV4ID0gZm9saW8tJmd0O2luZGV4ICYjNDM7IGk7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBwYWdlLSZndDtwcml2YXRlIHNob3VsZCBub3QgYmUgc2V0IGluIHRhaWwgcGFnZXMuIEZpeCB1cCBhbmQgd2FybiBvbmNlCiYjNDM7CQkgKiBpZiBwcml2YXRlIGlzIHVuZXhwZWN0ZWRseSBzZXQuIERvIGl0IGJlZm9yZSBzd2FwLnZhbCBhc3NpZ25tZW50CiYjNDM7CQkgKiBzaW5jZSBwcml2YXRlIG92ZXJsYXBzIHdpdGggc3dhcC52YWwuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh1bmxpa2VseShuZXdfZm9saW8tJmd0O3ByaXZhdGUpKSB7CiYjNDM7CQkJVk1fV0FSTl9PTl9PTkNFX1BBR0UodHJ1ZSwgbmV3X2hlYWQpOwomIzQzOwkJCW5ld19mb2xpby0mZ3Q7cHJpdmF0ZSA9IE5VTEw7CiYjNDM7CQl9CiYjNDM7CiAJCWlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpCiAJCQluZXdfZm9saW8tJmd0O3N3YXAudmFsID0gZm9saW8tJmd0O3N3YXAudmFsICYjNDM7IGk7CiAKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDE4MWU3OWYxZDZhMjA3Li5jOTY0MjFjZTkzNTAxNSAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC04OTUsNyAmIzQzOzg5NSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX2NvbXBvdW5kX3RhaWwoc3RydWN0IHBhZ2UgKnRhaWwsCiB7CiAJdGFpbC0mZ3Q7bWFwcGluZyA9IFRBSUxfTUFQUElORzsKIAlzZXRfY29tcG91bmRfaGVhZCh0YWlsLCBoZWFkLCBvcmRlcik7Ci0Jc2V0X3BhZ2VfcHJpdmF0ZSh0YWlsLCAwKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGluaXRfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCwKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBlZTkwMmE0NjhjMmY1Yi4uMTNjMjY1NWUyNGZiZGQgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTEzNzQsMTUgJiM0MzsxMzc0LDIxIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX2ZyZWVfcGFnZXNfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqcGFnZSwKICNlbmRpZgogCQl9CiAJCWZvciAoaSA9IDE7IGkgJmx0OyAoMSAmbHQ7Jmx0OyBvcmRlcik7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IHBhZ2UgKnN1YnBhZ2UgPSBwYWdlICYjNDM7IGk7CiYjNDM7CiAJCQlpZiAoY29tcG91bmQpCi0JCQkJYmFkICYjNDM7PSBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHBhZ2UsIHBhZ2UgJiM0MzsgaSk7CiYjNDM7CQkJCWJhZCAmIzQzOz0gZnJlZV90YWlsX3BhZ2VfcHJlcGFyZShwYWdlLCBzdWJwYWdlKTsKIAkJCWlmIChpc19jaGVja19wYWdlc19lbmFibGVkKCkpIHsKLQkJCQlpZiAoZnJlZV9wYWdlX2lzX2JhZChwYWdlICYjNDM7IGkpKSB7CiYjNDM7CQkJCWlmIChmcmVlX3BhZ2VfaXNfYmFkKHN1YnBhZ2UpKSB7CiAJCQkJCWJhZCYjNDM7JiM0Mzs7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCX0KLQkJCShwYWdlICYjNDM7IGkpLSZndDtmbGFncy5mICZhbXA7PSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQOwomIzQzOwkJCXN1YnBhZ2UtJmd0O2ZsYWdzLmYgJmFtcDs9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVA7CiYjNDM7CQkJaWYgKHN1YnBhZ2UtJmd0O3ByaXZhdGUpIHsKJiM0MzsJCQkJYmFkX3BhZ2Uoc3VicGFnZSwgJiMzNDtub256ZXJvIHByaXZhdGUmIzM0Oyk7CiYjNDM7CQkJCXJldHVybiBmYWxzZTsKJiM0MzsJCQl9CiAJCX0KIAl9CiAJaWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb25lLCBpdCBzZWVtcyDigJMgdGhhdCB0b3VjaGVzIHNvbWUga2V5IGFyZWFzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW06IGBtbS9jb21wYWN0aW9uLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9pbnRlcm5hbC5oYCwgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbml0aWFsIHJlYWQgc3VnZ2VzdHMgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKVGhlIGNvcmUgb2YgaXQgaXMgdGhlIHJlbW92YWwgb2Ygc29tZSBgc2V0X3BhZ2VfcHJpdmF0ZSgpYCBjYWxscyBpbiBmdW5jdGlvbnMgbGlrZSBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgLCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AsIGFuZCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHdoeSB0aG9zZSB3ZXJlIHJlbW92ZWQuIEl0IGFsc28gYWRkcyBhIGNoZWNrIGFuZCB3YXJuaW5nIGluIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCB0byBjbGVhciBhbmQgZW5zdXJlIGBuZXdfZm9saW8tJmd0O3ByaXZhdGVgIGlzIG5vdCB1bmV4cGVjdGVkbHkgc2V0LiBBbmQgaXQgbG9va3MgbGlrZSBhbm90aGVyIGBzZXRfcGFnZV9wcml2YXRlKClgIGNhbGwgaXMgcmVtb3ZlZCBpbiBgcHJlcF9jb21wb3VuZF90YWlsYC4gRmluYWxseSwgdGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgIHRvIGNhbGwgYGJhZF9wYWdlKClgIGlmIGBzdWJwYWdlLSZndDtwcml2YXRlYCBpcyBub256ZXJvLiBUaGUgYF9fZnJlZV9wYWdlc19wcmVwYXJlYCBmdW5jdGlvbiBpcyBhIGhvdCBwYXRoOyB0aGF0IGRlZmluaXRlbHkgbmVlZHMgY2FyZWZ1bCBzY3J1dGlueS4KCk15IGZpcnN0IHRob3VnaHQgaXMgdGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc29tZSBzdWJ0bGUgYnVncyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoaXMgaW1wYWN0cyBjb21wYWN0aW9uLCBodWdlIHBhZ2Ugc3BsaXR0aW5nLCBhbmQgcGFnZSBhbGxvY2F0aW9uLCBzbyBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHJlbW92aW5nIHRob3NlIGBzZXRfcGFnZV9wcml2YXRlKClgIGNhbGxzLCBlc3BlY2lhbGx5IGluIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAgd2hpY2ggaXMgZnJlcXVlbnRseSBjYWxsZWQuCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGJ5IGZ1bmN0aW9ucy4gVGhlIGtleSBzeW1ib2xzIHNlZW0gdG8gYmU6CiogICBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgCiogICBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AKKiAgIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAKKiAgIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYAoqICAgYF9fZnJlZV9wYWdlc19wcmVwYXJlYAoKYF9fZnJlZV9wYWdlc19wcmVwYXJlYCBpcyBjbGVhcmx5IGEgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlIGZ1bmN0aW9uLCB3aGVyZWFzIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYW5kIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAgYXBwZWFyIGNvbXBhY3Rpb24tcmVsYXRlZC4gYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgIHN1Z2dlc3RzIHRoYXQgd2UgYXJlIGNoYW5naW5nIGhvdyBUSFBzIGFyZSBzcGxpdC4KCk5vdywgbGV0JiMzOTtzIGRldGVybWluZSB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgdG8gbmFycm93IHRoZSBmb2N1cy4gQ29tcGFjdGlvbiBpcyB0aWVkIHRvIGBDT05GSUdfQ09NUEFDVElPTmAsIGFuZCBUSFAgc3VwcG9ydCBpcyBsaW5rZWQgdG8gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRpbWUgdG8gbGV2ZXJhZ2Ugb3VyIEtjb25maWcgdG9vbCB0byBnZXQgYSBwcmVjaXNlIHBpY3R1cmUgb2YgdGhlc2UgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdG8gZGV0ZXJtaW5lIHRoZSBwb3NzaWJsZSBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQ09NUEFDVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmMtMjgtXG5tbS9jb21wYWN0aW9uLmM6Mjk6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9jb21wYWN0aW9uLmMtMzAtLypcbi0tXG5tbS9jb21wYWN0aW9uLmM9NTk9c3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG4tLVxubW0vY29tcGFjdGlvbi5jLTYxLVxubW0vY29tcGFjdGlvbi5jOjYyOiNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQVxubW0vY29tcGFjdGlvbi5jLTYzLVxuLS1cbm1tL2NvbXBhY3Rpb24uYz05MT1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWxlYXNlX2ZyZWVfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlcGFnZXMpXG4tLVxubW0vY29tcGFjdGlvbi5jLTExNS1cbm1tL2NvbXBhY3Rpb24uYzoxMTY6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9jb21wYWN0aW9uLmMtMTE3LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz00OTA9c3RhdGljIGJvb2wgdGVzdF9hbmRfc2V0X3NraXAoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy00OTMtfVxubW0vY29tcGFjdGlvbi5jOjQ5NDojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbm1tL2NvbXBhY3Rpb24uYy00OTUtXG4tLVxubW0vY29tcGFjdGlvbi5jPTEzMzY9aXNvbGF0ZV9taWdyYXRlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0xMzcxLVxubW0vY29tcGFjdGlvbi5jOjEzNzI6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cbm1tL2NvbXBhY3Rpb24uYzoxMzczOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vY29tcGFjdGlvbi5jLTEzNzQtXG4tLVxubW0vY29tcGFjdGlvbi5jPTMzNTE9c3Vic3lzX2luaXRjYWxsKGtjb21wYWN0ZF9pbml0KVxubW0vY29tcGFjdGlvbi5jLTMzNTItXG5tbS9jb21wYWN0aW9uLmM6MzM1MzojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbi0tXG5tbS9pbnRlcm5hbC5oPTk5OD1zdGF0aWMgaW5saW5lIHZvaWQgc3BhcnNlX2luaXRfc3Vic2VjdGlvbl9tYXAodW5zaWduZWQgbG9uZyBwZm4sXG4tLVxubW0vaW50ZXJuYWwuaC0xMDAzLVxubW0vaW50ZXJuYWwuaDoxMDA0OiNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQVxubW0vaW50ZXJuYWwuaC0xMDA1LVxuLS1cbm1tL2ludGVybmFsLmg9MTA3Mz12b2lkIGluaXRfY21hX3Jlc2VydmVkX3BhZ2VibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5tbS9pbnRlcm5hbC5oLTEwNzQtXG5tbS9pbnRlcm5hbC5oOjEwNzU6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cbm1tL2ludGVybmFsLmgtMTA3Ni1cbi0tXG5tbS9tbV9pbml0LmM9MTMzNz1zdGF0aWMgdm9pZCBfX2luaXQgY2FsY3VsYXRlX25vZGVfdG90YWxwYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL21tX2luaXQuYy0xMzc5LVxubW0vbW1faW5pdC5jOjEzODA6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9tbV9pbml0LmMtMTM4MS1zdGF0aWMgdm9pZCBwZ2RhdF9pbml0X2tjb21wYWN0ZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL29vbV9raWxsLmM9NDU2PXN0YXRpYyB2b2lkIGR1bXBfaGVhZGVyKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4tLVxubW0vb29tX2tpbGwuYy00NjAtXHRcdFx0Y3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlb29tX3Njb3JlX2Fkaik7XG5tbS9vb21fa2lsbC5jOjQ2MTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikgXHUwMDI2XHUwMDI2IG9jLVx1MDAzZW9yZGVyKVxubW0vb29tX2tpbGwuYy00NjItXHRcdHByX3dhcm4oXCYjMzQ7Q09NUEFDVElPTiBpcyBkaXNhYmxlZCEhIVxcblwmIzM0Oyk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcxMD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2J1ZGR5X29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcxNS1cbm1tL3BhZ2VfYWxsb2MuYzo3MTY6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9wYWdlX2FsbG9jLmMtNzE3LXN0YXRpYyBpbmxpbmUgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqdGFza19jYXBjKHN0cnVjdCB6b25lICp6b25lKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz03NjU9Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03NjktfVxubW0vcGFnZV9hbGxvYy5jOjc3MDojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbm1tL3BhZ2VfYWxsb2MuYy03NzEtXG4tLVxubW0vcGFnZV9hbGxvYy5jPTQwNTM9X19hbGxvY19wYWdlc19tYXlfb29tKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQxNDQtXG5tbS9wYWdlX2FsbG9jLmM6NDE0NTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3BhZ2VfYWxsb2MuYy00MTQ2LS8qIFRyeSBtZW1vcnkgY29tcGFjdGlvbiBmb3IgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyBiZWZvcmUgcmVjbGFpbSAqL1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz00Mjg1PXNob3VsZF9jb21wYWN0X3JldHJ5KGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDMxMC19XG5tbS9wYWdlX2FsbG9jLmM6NDMxMTojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbm1tL3BhZ2VfYWxsb2MuYy00MzEyLVxuLS1cbm1tL3Ztc2Nhbi5jPTYzMzE9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYzNzEtXHRcdFx0ICovXG5tbS92bXNjYW4uYzo2MzcyOlx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQUNUSU9OKSBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jLTYzNzMtXHRcdFx0ICAgIHNjLVx1MDAzZW9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUiBcdTAwMjZcdTAwMjZcbi0tXG5tbS92bXN0YXQuYz0xMDQyPXZvaWQgbWVtbWFwX3BhZ2VzX2FkZChsb25nIGRlbHRhKVxuLS1cbm1tL3Ztc3RhdC5jLTEwNDYtXG5tbS92bXN0YXQuYzoxMDQ3OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vdm1zdGF0LmMtMTA0OC1cbi0tXG5tbS92bXN0YXQuYz0xMTg3PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xuLS1cbm1tL3Ztc3RhdC5jLTEzNzAtI2VuZGlmXG5tbS92bXN0YXQuYzoxMzcxOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vdm1zdGF0LmMtMTM3Mi1cdFtJKENPTVBBQ1RNSUdSQVRFX1NDQU5ORUQpXVx0XHQ9IFwmIzM0O2NvbXBhY3RfbWlncmF0ZV9zY2FubmVkXCYjMzQ7LFxuLS1cbm1tL3Ztc3RhdC5jLTE0OTYtXG5tbS92bXN0YXQuYzoxNDk3OiNpZiAoZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19DT01QQUNUSU9OKSkgfHwgXFxcbm1tL3Ztc3RhdC5jLTE0OTgtICAgICBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxuLS1cbm1tL3Ztc3RhdC5jPTIyNjg9dm9pZCBfX2luaXQgaW5pdF9tbV9pbnRlcm5hbHModm9pZClcbi0tXG5tbS92bXN0YXQuYy0yMzAxLVxubW0vdm1zdGF0LmM6MjMwMjojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19DT01QQUNUSU9OKVxubW0vdm1zdGF0LmMtMjMwMy1cbi0tXG5tbS96c21hbGxvYy5jPTE5OT1zdHJ1Y3QgenNfcG9vbCB7XG4tLVxubW0venNtYWxsb2MuYy0yMTMtI2VuZGlmXG5tbS96c21hbGxvYy5jOjIxNDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3pzbWFsbG9jLmMtMjE1LVx0c3RydWN0IHdvcmtfc3RydWN0IGZyZWVfd29yaztcbi0tXG5tbS96c21hbGxvYy5jPTM2MD1zdGF0aWMgYm9vbCBac0h1Z2VQYWdlKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbi0tXG5tbS96c21hbGxvYy5jLTM2NC1cbm1tL3pzbWFsbG9jLmM6MzY1OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0venNtYWxsb2MuYy0zNjYtc3RhdGljIHZvaWQga2lja19kZWZlcnJlZF9mcmVlKHN0cnVjdCB6c19wb29sICpwb29sKTtcbi0tXG5tbS96c21hbGxvYy5jPTkzMT1zdGF0aWMgc3RydWN0IHpzcGFnZSAqYWxsb2NfenNwYWdlKHN0cnVjdCB6c19wb29sICpwb29sLFxuLS1cbm1tL3pzbWFsbG9jLmMtOTQxLVxubW0venNtYWxsb2MuYzo5NDI6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pKVxubW0venNtYWxsb2MuYy05NDMtXHRcdGdmcCBcdTAwMjY9IH5fX0dGUF9NT1ZBQkxFO1xuLS1cbm1tL3pzbWFsbG9jLmM9MTU5ND1zdGF0aWMgaW50IHB1dGJhY2tfenNwYWdlKHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcywgc3RydWN0IHpzcGFnZSAqenNwYWdlKVxuLS1cbm1tL3pzbWFsbG9jLmMtMTYwMy1cbm1tL3pzbWFsbG9jLmM6MTYwNDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3pzbWFsbG9jLmMtMTYwNS0vKlxuLS1cbm1tL3pzbWFsbG9jLmM9MTYwOT1zdGF0aWMgdm9pZCBsb2NrX3pzcGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4tLVxubW0venNtYWxsb2MuYy0xNjQ1LX1cbm1tL3pzbWFsbG9jLmM6MTY0NjojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbm1tL3pzbWFsbG9jLmMtMTY0Ny1cbm1tL3pzbWFsbG9jLmM6MTY0ODojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3pzbWFsbG9jLmMtMTY0OS1cbi0tXG5tbS96c21hbGxvYy5jPTIyMzc9c3RhdGljIGludCBfX2luaXQgenNfaW5pdCh2b2lkKVxuLS1cbm1tL3pzbWFsbG9jLmMtMjI0NC1cbm1tL3pzbWFsbG9jLmM6MjI0NTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3pzbWFsbG9jLmMtMjI0Ni1cdHJjID0gc2V0X21vdmFibGVfb3BzKFx1MDAyNnpzbWFsbG9jX21vcHMsIFBHVFlfenNtYWxsb2MpO1xuLS1cbm1tL3pzbWFsbG9jLmM9MjI1Nj1zdGF0aWMgdm9pZCBfX2V4aXQgenNfZXhpdCh2b2lkKVxubW0venNtYWxsb2MuYy0yMjU3LXtcbm1tL3pzbWFsbG9jLmM6MjI1ODojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3pzbWFsbG9jLmMtMjI1OS1cdHNldF9tb3ZhYmxlX29wcyhOVUxMLCBQR1RZX3pzbWFsbG9jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTI4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gSHVnZSBQYWdlczogQ29uZmlncyBhbmQgS2VybmVsIENvZGUqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGVzZSBjb25maWd1cmF0aW9uczogYENPTVBBQ1RJT05gIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIGtub3cgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBsYXJnZSBwYWdlcy4gU2luY2UgSSBoYXZlIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHksIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBpbW1lZGlhdGUgZm9jdXMsIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBkaXJlY3RseSB0byB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzZWUgaG93IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgaW1wbGVtZW50ZWQuIEkmIzM5O2xsIG9wZW4gdXAgYG1tL2h1Z2VfbWVtb3J5LmNgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBodWdlIHBhZ2UgbWFuYWdlbWVudCB3aWxsIGJlLiBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBlbmFibGVtZW50IGNoZWNrcywgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBhbmQgaG9wZWZ1bGx5LCBzb21lIGNsdWVzIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBjb21wYWN0aW9uLCB3aGljaCBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGZyYWdtZW50aW5nIG1lbW9yeS4gSSYjMzk7bSBob3BpbmcgdGhpcyB3aWxsIHByb3ZpZGUgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU3NCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4tLVxubW0vY29tcGFjdGlvbi5jPTU5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfVxuLS1cbm1tL2NvbXBhY3Rpb24uYy03NC0gKi9cbm1tL2NvbXBhY3Rpb24uYzo3NTojaWYgZGVmaW5lZCBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2NvbXBhY3Rpb24uYy03Ni0jZGVmaW5lIENPTVBBQ1RJT05fSFBBR0VfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz03NT12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbm1tL2RhbW9uL29wcy1jb21tb24uYy03Ni17XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6Nzc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTc4LVx0cG1kX3QgcG1kdmFsID0gcG1kcF9nZXQocG1kKTtcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtOTktXHRmb2xpb19wdXQoZm9saW8pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jOjEwMDojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTAxLX1cbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTk0PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX3lvdW5nX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMTUtXHRcdH0gZWxzZSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjE2OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMTctXHRcdFx0cG1kX3QgcG1kID0gcG1kcF9nZXQocHZtdy5wbWQpO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMjMtXHRcdFx0V0FSTl9PTl9PTkNFKDEpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIyNDojZW5kaWZcdC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIyNS1cdFx0fVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9MzkyPXN0YXRpYyBpbnQgZGFtb25feW91bmdfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTQwMC1cbm1tL2RhbW9uL3ZhZGRyLmM6NDAxOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtNDAyLVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXHUwMDNldm1hKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTQxOS1cdH1cbm1tL2RhbW9uL3ZhZGRyLmM6NDIwOiNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kYW1vbi92YWRkci5jLTQyMS1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTY1OD1zdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTY2OS1cbm1tL2RhbW9uL3ZhZGRyLmM6NjcwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtNjcxLVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXHUwMDNldm1hKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jLTY4Ny1cdH1cbm1tL2RhbW9uL3ZhZGRyLmM6Njg4OiNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kYW1vbi92YWRkci5jLTY4OS1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTgxOD1zdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTgyOS1cbm1tL2RhbW9uL3ZhZGRyLmM6ODMwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RhbW9uL3ZhZGRyLmMtODMxLVx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgcHRlX2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTE3Mi1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxNzM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTE3NC1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQyMz1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDI0LSNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQyNTojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNi1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpIHsgfVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz00MzE9c3RhdGljIHZvaWQgX19pbml0IHB1ZF9sZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQzMjojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDMzLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz02NzE9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02ODItXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NjgzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02ODQtc3RhdGljIHZvaWQgX19pbml0IHBtZF9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02OTgtfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjY5OTojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTcwMC1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX3Byb3Rub25lX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjcwMTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzAyLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03MTU9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9zd2FwX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzMxLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjczMjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzMzLXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03NDk9c3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzY3LX1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3Njg6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03Njktc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTc3MD1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3NzE6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTc3Mi1cbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTAxPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDMtXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTA0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MDUtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU1PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk1Ni0jZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5NTc6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTgtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU5PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk2MDojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTYxLVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz05ODc9c3RhdGljIHZvaWQgX19pbml0IGRlc3Ryb3lfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05ODktXHQvKiBGcmVlIChodWdlKSBwYWdlICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTkwOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTEtXHQgICAgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTgtXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTk5Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMDAwLVx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz0xMTQzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjM5LVx0ICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6MTI0MDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI0MS1cdCAgICBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKCkpIHtcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI1MC1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxMjUxOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjUyLVx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7XG4tLVxubW0vZmlsZW1hcC5jPTMzMTQ9c3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2ZpbGVtYXAuYy0zMzI2LVx0LyogVXNlIHRoZSByZWFkYWhlYWQgY29kZSwgZXZlbiBpZiByZWFkYWhlYWQgaXMgZGlzYWJsZWQgKi9cbm1tL2ZpbGVtYXAuYzozMzI3Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgKHZtX2ZsYWdzIFx1MDAyNiBWTV9IVUdFUEFHRSkpIHtcbm1tL2ZpbGVtYXAuYy0zMzI4LVx0XHQvKlxuLS1cbm1tL2d1cC5jPTcwMT1zdGF0aWMgc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ndXAuYy03MzQtXG5tbS9ndXAuYzo3MzU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vZ3VwLmMtNzM2LVx0aWYgKHBtZF90cmFuc19odWdlKHBtZHZhbCkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgRk9MTF9UT1VDSCkpXG5tbS9ndXAuYy03MzctXHRcdHRvdWNoX3BtZCh2bWEsIGFkZHIsIHBtZCwgZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEUpO1xubW0vZ3VwLmM6NzM4OiNlbmRpZlx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9ndXAuYy03MzktXG4tLVxubW0vaG1tLmM9MTgxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBobW1fcGZuX2ZsYWdzX29yZGVyKHVuc2lnbmVkIGxvbmcgb3JkZXIpXG4tLVxubW0vaG1tLmMtMTg1LVxubW0vaG1tLmM6MTg2OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2htbS5jLTE4Ny1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX3RvX2htbV9wZm5fZmxhZ3Moc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG4tLVxubW0vaG1tLmM9MTk3PXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vaG1tLmMtMjIwLX1cbm1tL2htbS5jOjIyMTojZWxzZSAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL2htbS5jLTIyMi0vKiBzdHViIHRvIGFsbG93IHRoZSBjb2RlIGJlbG93IHRvIGNvbXBpbGUgKi9cbm1tL2htbS5jPTIyMz1pbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9obW0uYy0yMjQtXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIGhtbV9wZm5zW10sIHBtZF90IHBtZCk7XG5tbS9obW0uYzoyMjU6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vaG1tLmMtMjI2LVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NjA9dW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyBfX3JlYWRfbW9zdGx5ID1cbm1tL2h1Z2VfbWVtb3J5LmM6NjE6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL2h1Z2VfbWVtb3J5LmMtNjItXHQoMVx1MDAzY1x1MDAzY1RSQU5TUEFSRU5UX0hVR0VQQUdFX0ZMQUcpfFxubW0vaHVnZV9tZW1vcnkuYy02My0jZW5kaWZcbm1tL2h1Z2VfbWVtb3J5LmM6NjQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9odWdlX21lbW9yeS5jLTY1LVx0KDFcdTAwM2NcdTAwM2NUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHKXxcbi0tXG5tbS9rc20uYz0yNDk0PXN0YXRpYyBpbnQga3NtX25leHRfcGFnZV9wbWRfZW50cnkocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0va3NtLmMtMjUxNC1cbm1tL2tzbS5jOjI1MTU6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBwbWRfbGVhZihwbWQpKSB7XG5tbS9rc20uYy0yNTE2LVx0XHRwdGwgPSBwbWRfbG9jayhtbSwgcG1kcCk7XG4tLVxubW0vbWFkdmlzZS5jPTM1ND1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy0zNzYtXG5tbS9tYWR2aXNlLmM6Mzc3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21hZHZpc2UuYy0zNzgtXHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZCkpIHtcbi0tXG5tbS9tYWR2aXNlLmM9MTUxOT1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTUzOS0jZW5kaWZcbm1tL21hZHZpc2UuYzoxNTQwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21hZHZpc2UuYy0xNTQxLVx0Y2FzZSBNQURWX0hVR0VQQUdFOlxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xODY2PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2cxX3N0YXRzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4NjgtXHROUl9BTk9OX01BUFBFRCxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODY5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbWNvbnRyb2wtdjEuYy0xODcwLVx0TlJfQU5PTl9USFBTLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xODg0PXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZW1jZzFfc3RhdF9uYW1lc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xODg2LVx0XCYjMzQ7cnNzXCYjMzQ7LFxubW0vbWVtY29udHJvbC12MS5jOjE4ODc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vbWVtY29udHJvbC12MS5jLTE4ODgtXHRcJiMzNDtyc3NfaHVnZVwmIzM0Oyxcbi0tXG5tbS9tZW1jb250cm9sLmM9NTUzPXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01NzQtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NTc1OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbWNvbnRyb2wuYy01NzYtXHRUSFBfRkFVTFRfQUxMT0MsXG4tLVxubW0vbWVtY29udHJvbC5jPTE1NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTU2Ny0jZW5kaWZcbm1tL21lbWNvbnRyb2wuYzoxNTY4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbWNvbnRyb2wuYy0xNTY5LVx0eyBcJiMzNDthbm9uX3RocFwmIzM0OyxcdFx0XHROUl9BTk9OX1RIUFNcdFx0XHR9LFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9Njc5PXN0YXRpYyBpbnQgY2hlY2tfaHdwb2lzb25lZF9lbnRyeShwdGVfdCBwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgc2hvcnQgc2hpZnQsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy03MDMtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjcwNDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9tZW1vcnktZmFpbHVyZS5jLTcwNS1zdGF0aWMgaW50IGNoZWNrX2h3cG9pc29uZWRfcG1kX2VudHJ5KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmM9NDA2Nz1zdGF0aWMgdm1fZmF1bHRfdCB3cF9wYWdlX3NoYXJlZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1vcnkuYy00MTA2LVxubW0vbWVtb3J5LmM6NDEwNzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9tZW1vcnkuYy00MTA4LXN0YXRpYyBib29sIF9fd3BfY2FuX3JldXNlX2xhcmdlX2Fub25fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1vcnkuYy00MTcyLX1cbm1tL21lbW9yeS5jOjQxNzM6I2Vsc2UgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vbWVtb3J5LmMtNDE3NC1zdGF0aWMgYm9vbCBfX3dwX2Nhbl9yZXVzZV9sYXJnZV9hbm9uX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtb3J5LmMtNDE3OC19XG5tbS9tZW1vcnkuYzo0MTc5OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL21lbW9yeS5jLTQxODAtXG5tbS9tZW1vcnkuYz00MTgxPXN0YXRpYyBib29sIHdwX2Nhbl9yZXVzZV9hbm9uX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtb3J5LmMtNDE4My17XG5tbS9tZW1vcnkuYzo0MTg0Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG5tbS9tZW1vcnkuYy00MTg1LVx0XHRyZXR1cm4gX193cF9jYW5fcmV1c2VfbGFyZ2VfYW5vbl9mb2xpbyhmb2xpbywgdm1hKTtcbi0tXG5tbS9tZW1vcnkuYz00NTg1PXN0YXRpYyB2bV9mYXVsdF90IGhhbmRsZV9wdGVfbWFya2VyKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ2MTEtXG5tbS9tZW1vcnkuYzo0NjEyOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbW9yeS5jLTQ2MTMtLypcbi0tXG5tbS9tZW1vcnkuYz00NjYxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ3MjAtfVxubW0vbWVtb3J5LmM6NDcyMTojZWxzZSAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9tZW1vcnkuYy00NzIyLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ3MjUtfVxubW0vbWVtb3J5LmM6NDcyNjojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9tZW1vcnkuYy00NzI3LVxuLS1cbm1tL21lbW9yeS5jPTUxNjE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy01MTYzLVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xubW0vbWVtb3J5LmM6NTE2NDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9tZW1vcnkuYy01MTY1LVx0dW5zaWduZWQgbG9uZyBvcmRlcnM7XG4tLVxubW0vbWVtb3J5LmM9NTM5OD1zdGF0aWMgdm1fZmF1bHRfdCBfX2RvX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTU0NTMtXG5tbS9tZW1vcnkuYzo1NDU0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21lbW9yeS5jLTU0NTUtc3RhdGljIHZvaWQgZGVwb3NpdF9wcmVhbGxvY19wdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmM9NjI0Mj1zdGF0aWMgdm1fZmF1bHRfdCBjcmVhdGVfaHVnZV9wdWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9tZW1vcnkuYy02MjQzLXtcbm1tL21lbW9yeS5jOjYyNDQ6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcdFx0XHRcXFxubW0vbWVtb3J5LmMtNjI0NS1cdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG4tLVxubW0vbWVtb3J5LmMtNjI1MS1cdFx0cmV0dXJuIHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlaHVnZV9mYXVsdCh2bWYsIFBVRF9PUkRFUik7XG5tbS9tZW1vcnkuYzo2MjUyOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL21lbW9yeS5jLTYyNTMtXHRyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7XG4tLVxubW0vbWVtb3J5LmM9NjI1Nj1zdGF0aWMgdm1fZmF1bHRfdCB3cF9odWdlX3B1ZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgcHVkX3Qgb3JpZ19wdWQpXG5tbS9tZW1vcnkuYy02MjU3LXtcbm1tL21lbW9yeS5jOjYyNTg6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcdFx0XHRcXFxubW0vbWVtb3J5LmMtNjI1OS1cdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG4tLVxubW0vbWVtb3J5LmMtNjI3NS1cdF9fc3BsaXRfaHVnZV9wdWQodm1hLCB2bWYtXHUwMDNlcHVkLCB2bWYtXHUwMDNlYWRkcmVzcyk7XG5tbS9tZW1vcnkuYzo2Mjc2OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2IENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXG5tbS9tZW1vcnkuYy02Mjc3LVx0cmV0dXJuIFZNX0ZBVUxUX0ZBTExCQUNLO1xuLS1cbm1tL21lbW9yeS5jPTcyOTQ9RVhQT1JUX1NZTUJPTChfX21pZ2h0X2ZhdWx0KTtcbi0tXG5tbS9tZW1vcnkuYy03Mjk2LVxubW0vbWVtb3J5LmM6NzI5NzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IGRlZmluZWQoQ09ORklHX0hVR0VUTEJGUylcbm1tL21lbW9yeS5jLTcyOTgtLypcbi0tXG5tbS9tZW1vcnkuYz03NDg1PWxvbmcgY29weV9mb2xpb19mcm9tX3VzZXIoc3RydWN0IGZvbGlvICpkc3RfZm9saW8sXG4tLVxubW0vbWVtb3J5LmMtNzUxNC19XG5tbS9tZW1vcnkuYzo3NTE1OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgfHwgQ09ORklHX0hVR0VUTEJGUyAqL1xubW0vbWVtb3J5LmMtNzUxNi1cbi0tXG5tbS9tZW1wb2xpY3kuYz0yNDQ1PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbXBvbChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNDU1LVxubW0vbWVtcG9saWN5LmM6MjQ1NjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG5tbS9tZW1wb2xpY3kuYy0yNDU3LVx0ICAgIC8qIGZpbHRlciBcJiMzNDtodWdlcGFnZVwmIzM0OyBhbGxvY2F0aW9uLCB1bmxlc3MgZnJvbSBhbGxvY19wYWdlcygpICovXG4tLVxubW0vbWlncmF0ZS5jPTE1ODA9c3RhdGljIGlubGluZSBpbnQgdHJ5X3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcbi0tXG5tbS9taWdyYXRlLmMtMTU5OC1cbm1tL21pZ3JhdGUuYzoxNTk5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL21pZ3JhdGUuYy0xNjAwLSNkZWZpbmUgTlJfTUFYX0JBVENIRURfTUlHUkFUSU9OXHRIUEFHRV9QTURfTlJcbi0tXG5tbS9tbWFwLmM9ODEzPV9fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXG4tLVxubW0vbW1hcC5jLTg0NC1cdFx0YWRkciA9IGdldF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzKTtcbm1tL21tYXAuYzo4NDU6XHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgIWZpbGVcbm1tL21tYXAuYy04NDYtXHRcdCAgIFx1MDAyNlx1MDAyNiAhYWRkciAvKiBubyBoaW50ICovXG4tLVxubW0vbXJlbWFwLmM9NDcwPXN0YXRpYyBpbmxpbmUgYm9vbCBtb3ZlX25vcm1hbF9wdWQoc3RydWN0IHBhZ2V0YWJsZV9tb3ZlX2NvbnRyb2wgKnBtYyxcbi0tXG5tbS9tcmVtYXAuYy00NzYtXG5tbS9tcmVtYXAuYzo0Nzc6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcbm1tL21yZW1hcC5jLTQ3OC1zdGF0aWMgYm9vbCBtb3ZlX2h1Z2VfcHVkKHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsXG4tLVxubW0vbXJlbWFwLmM9NTk2PXN0YXRpYyBib29sIG1vdmVfcGd0X2VudHJ5KHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsXG4tLVxubW0vbXJlbWFwLmMtNjEzLVx0Y2FzZSBIUEFHRV9QTUQ6XG5tbS9tcmVtYXAuYzo2MTQ6XHRcdG1vdmVkID0gSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlxubW0vbXJlbWFwLmMtNjE1LVx0XHRcdG1vdmVfaHVnZV9wbWQocG1jLVx1MDAzZW9sZCwgcG1jLVx1MDAzZW9sZF9hZGRyLCBwbWMtXHUwMDNlbmV3X2FkZHIsIG9sZF9lbnRyeSxcbi0tXG5tbS9tcmVtYXAuYy02MTgtXHRjYXNlIEhQQUdFX1BVRDpcbm1tL21yZW1hcC5jOjYxOTpcdFx0bW92ZWQgPSBJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG5tbS9tcmVtYXAuYy02MjAtXHRcdFx0bW92ZV9odWdlX3B1ZChwbWMsIG9sZF9lbnRyeSwgbmV3X2VudHJ5KTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NjUxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9yZGVyX3RvX3BpbmRleChpbnQgbWlncmF0ZXR5cGUsIGludCBvcmRlcilcbm1tL3BhZ2VfYWxsb2MuYy02NTIte1xubW0vcGFnZV9hbGxvYy5jOjY1MzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpIHtcbm1tL3BhZ2VfYWxsb2MuYy02NTQtXHRcdGJvb2wgbW92YWJsZSA9IG1pZ3JhdGV0eXBlID09IE1JR1JBVEVfTU9WQUJMRTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NjYzPXN0YXRpYyBpbmxpbmUgaW50IHBpbmRleF90b19vcmRlcih1bnNpZ25lZCBpbnQgcGluZGV4KVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy02NjYtXG5tbS9wYWdlX2FsbG9jLmM6NjY3Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSkge1xubW0vcGFnZV9hbGxvYy5jLTY2OC1cdFx0aWYgKHBpbmRleCBcdTAwM2U9IE5SX0xPV09SREVSX1BDUF9MSVNUUylcbi0tXG5tbS9wYWdlX2FsbG9jLmM9Njc1PXN0YXRpYyBpbmxpbmUgYm9vbCBwY3BfYWxsb3dlZF9vcmRlcih1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTY3OC1cdFx0cmV0dXJuIHRydWU7XG5tbS9wYWdlX2FsbG9jLmM6Njc5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3BhZ2VfYWxsb2MuYy02ODAtXHRpZiAoaXNfcG1kX29yZGVyKG9yZGVyKSlcbi0tXG5tbS9wYWdlX2lkbGUuYz01Mj1zdGF0aWMgYm9vbCBwYWdlX2lkbGVfY2xlYXJfcHRlX3JlZnNfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcGFnZV9pZGxlLmMtNzItXHRcdFx0cmVmZXJlbmNlZCB8PSBtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBhZGRyICYjNDM7IFBBR0VfU0laRSk7XG5tbS9wYWdlX2lkbGUuYzo3MzpcdFx0fSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpIHtcbm1tL3BhZ2VfaWRsZS5jLTc0LVx0XHRcdHBtZF90IHBtZHZhbCA9IHBtZHBfZ2V0KHB2bXcucG1kKTtcbi0tXG5tbS9wYWdlX2lvLmM9MzA1PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9zd3BvdXRfdm1fZXZlbnQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3BhZ2VfaW8uYy0zMDYte1xubW0vcGFnZV9pby5jOjMwNzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9wYWdlX2lvLmMtMzA4LVx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKSkpIHtcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz05Nz1wdGVfdCBwdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmMtMTA4LVxubW0vcGd0YWJsZS1nZW5lcmljLmM6MTA5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTExMC1cbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz0yNTA9dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpXG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjU3LSNlbmRpZiAvKiBwdGVfZnJlZV9kZWZlciAqL1xubW0vcGd0YWJsZS1nZW5lcmljLmM6MjU4OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1OS1cbi0tXG5tbS9ybWFwLmM9OTE3PXN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTk4Ni1cdFx0XHRcdHJlZmVyZW5jZWQmIzQzOyYjNDM7O1xubW0vcm1hcC5jOjk4NzpcdFx0fSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpIHtcbm1tL3JtYXAuYy05ODgtXHRcdFx0aWYgKHBtZHBfY2xlYXJfZmx1c2hfeW91bmdfbm90aWZ5KHZtYSwgYWRkcmVzcyxcbi0tXG5tbS9ybWFwLmM9MTEwMz1zdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbi0tXG5tbS9ybWFwLmMtMTE0My1cdFx0fSBlbHNlIHtcbm1tL3JtYXAuYzoxMTQ0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3JtYXAuYy0xMTQ1LVx0XHRcdHBtZF90ICpwbWQgPSBwdm13LVx1MDAzZXBtZDtcbi0tXG5tbS9ybWFwLmM9MTYxNj12b2lkIGZvbGlvX2FkZF9hbm9uX3JtYXBfcG1kKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3JtYXAuYy0xNjE4LXtcbm1tL3JtYXAuYzoxNjE5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3JtYXAuYy0xNjIwLVx0X19mb2xpb19hZGRfYW5vbl9ybWFwKGZvbGlvLCBwYWdlLCBIUEFHRV9QTURfTlIsIHZtYSwgYWRkcmVzcywgZmxhZ3MsXG4tLVxubW0vcm1hcC5jPTE3NDU9dm9pZCBmb2xpb19hZGRfZmlsZV9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9ybWFwLmMtMTc0Ny17XG5tbS9ybWFwLmM6MTc0ODojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9ybWFwLmMtMTc0OS1cdF9fZm9saW9fYWRkX2ZpbGVfcm1hcChmb2xpbywgcGFnZSwgSFBBR0VfUE1EX05SLCB2bWEsIFBHVEFCTEVfTEVWRUxfUE1EKTtcbi0tXG5tbS9ybWFwLmM9MTc2NT12b2lkIGZvbGlvX2FkZF9maWxlX3JtYXBfcHVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3JtYXAuYy0xNzY3LXtcbm1tL3JtYXAuYzoxNzY4OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IFxcXG5tbS9ybWFwLmMtMTc2OS1cdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG4tLVxubW0vcm1hcC5jPTE5MTM9dm9pZCBmb2xpb19yZW1vdmVfcm1hcF9wbWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcm1hcC5jLTE5MTUte1xubW0vcm1hcC5jOjE5MTY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vcm1hcC5jLTE5MTctXHRfX2ZvbGlvX3JlbW92ZV9ybWFwKGZvbGlvLCBwYWdlLCBIUEFHRV9QTURfTlIsIHZtYSwgUEdUQUJMRV9MRVZFTF9QTUQpO1xuLS1cbm1tL3JtYXAuYz0xOTMzPXZvaWQgZm9saW9fcmVtb3ZlX3JtYXBfcHVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3JtYXAuYy0xOTM1LXtcbm1tL3JtYXAuYzoxOTM2OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IFxcXG5tbS9ybWFwLmMtMTkzNy1cdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG4tLVxubW0vc2htZW0uYz0xMTM9c3RydWN0IHNobWVtX29wdGlvbnMge1xuLS1cbm1tL3NobWVtLmMtMTM2LVxubW0vc2htZW0uYzoxMzc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy0xMzgtc3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZV9zaG1lbV9vcmRlcnNfYWx3YXlzIF9fcmVhZF9tb3N0bHk7XG4tLVxubW0vc2htZW0uYz01MjA9c3RhdGljIGludCBzaG1lbV9jb25maXJtX3N3YXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYy01NjgtXG5tbS9zaG1lbS5jOjU2OTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTU3MC0vKiBpZmRlZiBoZXJlIHRvIGF2b2lkIGJsb2F0aW5nIHNobWVtLm8gd2hlbiBub3QgbmVjZXNzYXJ5ICovXG5tbS9zaG1lbS5jLTU3MS1cbm1tL3NobWVtLmM6NTcyOiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSKVxubW0vc2htZW0uYy01NzMtI2RlZmluZSBTSE1FTV9IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9ORVZFUlxubW0vc2htZW0uYzo1NzQ6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVMpXG5tbS9zaG1lbS5jLTU3NS0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX0FMV0FZU1xubW0vc2htZW0uYzo1NzY6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRSlcbm1tL3NobWVtLmMtNTc3LSNkZWZpbmUgU0hNRU1fSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL3NobWVtLmM6NTc4OiNlbGlmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFKVxubW0vc2htZW0uYy01NzktI2RlZmluZSBTSE1FTV9IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BRFZJU0Vcbi0tXG5tbS9zaG1lbS5jPTU4ND1zdGF0aWMgaW50IHNobWVtX2h1Z2UgX19yZWFkX21vc3RseSA9IFNITUVNX0hVR0VfREVGQVVMVDtcbi0tXG5tbS9zaG1lbS5jLTU4Ny1cbm1tL3NobWVtLmM6NTg4OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSKVxubW0vc2htZW0uYy01ODktI2RlZmluZSBUTVBGU19IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9ORVZFUlxubW0vc2htZW0uYzo1OTA6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVMpXG5tbS9zaG1lbS5jLTU5MS0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX0FMV0FZU1xubW0vc2htZW0uYzo1OTI6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRSlcbm1tL3NobWVtLmMtNTkzLSNkZWZpbmUgVE1QRlNfSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL3NobWVtLmM6NTk0OiNlbGlmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFKVxubW0vc2htZW0uYy01OTUtI2RlZmluZSBUTVBGU19IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BRFZJU0Vcbi0tXG5tbS9zaG1lbS5jPTg0NT1zdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9jb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbm1tL3NobWVtLmMtODUwLX1cbm1tL3NobWVtLmM6ODUxOiNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL3NobWVtLmMtODUyLVxuLS1cbm1tL3NobWVtLmM9ODYxPXN0YXRpYyB1bnNpZ25lZCBpbnQgc2htZW1faHVnZV9nbG9iYWxfZW5hYmxlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtODY3LX1cbm1tL3NobWVtLmM6ODY4OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbm1tL3NobWVtLmMtODY5LVxuLS1cbm1tL3NobWVtLmM9MTU5MT1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfaW9jYiAqKnBsdWcsXG4tLVxubW0vc2htZW0uYy0xNjMzLVxubW0vc2htZW0uYzoxNjM0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3NobWVtLmMtMTYzNS1cdFx0aWYgKG9yZGVyIFx1MDAzZT0gSFBBR0VfUE1EX09SREVSKSB7XG4tLVxubW0vc2htZW0uYz0xNzc4PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBpbl9jbHVzdGVyKHN3cF9lbnRyeV90IHN3YXAsIGdmcF90IGdmcCxcbi0tXG5tbS9zaG1lbS5jLTE3OTEtXG5tbS9zaG1lbS5jOjE3OTI6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy0xNzkzLWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZClcbi0tXG5tbS9zaG1lbS5jPTE4OTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3NobWVtLmMtMTg5Ni19XG5tbS9zaG1lbS5jOjE4OTc6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vc2htZW0uYy0xODk4LVxuLS1cbm1tL3NobWVtLmM9MTkxMz1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9hbGxvY19hbmRfYWRkX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3NobWVtLmMtMTkyNC1cbm1tL3NobWVtLmM6MTkyNTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxubW0vc2htZW0uYy0xOTI2LVx0XHRvcmRlcnMgPSAwO1xuLS1cbm1tL3NobWVtLmM9MjA2Mz1zdGF0aWMgaW50IHNobWVtX3JlcGxhY2VfZm9saW8oc3RydWN0IGZvbGlvICoqZm9saW9wLCBnZnBfdCBnZnAsXG4tLVxubW0vc2htZW0uYy0yMDc3LVx0Z2ZwIFx1MDAyNj0gfkdGUF9DT05TVFJBSU5UX01BU0s7XG5tbS9zaG1lbS5jOjIwNzg6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy0yMDc5LVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxKSB7XG4tLVxubW0vc2htZW0uYz0yNzE0PXVuc2lnbmVkIGxvbmcgc2htZW1fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxubW0vc2htZW0uYy0yNzI5LVxubW0vc2htZW0uYzoyNzMwOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG5tbS9zaG1lbS5jLTI3MzEtXHRcdHJldHVybiBhZGRyO1xuLS1cbm1tL3NobWVtLmMtMjc3My1cdFx0XHQgKi9cbm1tL3NobWVtLmM6Mjc3NDojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTI3NzUtXHRcdFx0aHBhZ2Vfb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5cyk7XG4tLVxubW0vc2htZW0uYz00NTA3PXN0YXRpYyBpbnQgc2htZW1fcGFyc2Vfb25lKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxubW0vc2htZW0uYy00NTc2LVx0XHRpZiAoY3R4LVx1MDAzZWh1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUiBcdTAwMjZcdTAwMjZcbm1tL3NobWVtLmM6NDU3NzpcdFx0ICAgICEoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlxubW0vc2htZW0uYy00NTc4LVx0XHQgICAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkpXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE2OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW06IGBtbS9jb21wYWN0aW9uLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9pbnRlcm5hbC5oYCwgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgbW9kaWZpY2F0aW9ucyB0byBzZXZlcmFsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlc2UgZmlsZXMuIEluIGBtbS9jb21wYWN0aW9uLmNgLCBJIHNlZSBjaGFuZ2VzIHRvIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYW5kIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAuIGBtbS9odWdlX21lbW9yeS5jYCBoYXMgY2hhbmdlcyB0byBgX19zcGxpdF9mb2xpb190b19vcmRlcmAuIGBtbS9pbnRlcm5hbC5oYCBzZWVzIGEgbW9kaWZpY2F0aW9uIHRvIGBwcmVwX2NvbXBvdW5kX3RhaWxgLiBGaW5hbGx5LCBgbW0vcGFnZV9hbGxvYy5jYCBoYXMgYmVlbiB1cGRhdGVkIHdpdGggY2hhbmdlcyB0byBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgLgoKVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBmdW5jdGlvbmFsOyB0aGV5JiMzOTtyZSByZW1vdmluZyBgc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcilgIGNhbGxzIGZvciBmcmVlIGFuZCB0YWlsIHBhZ2VzLiBUaGVuIHRoZXkmIzM5O3JlIGFkZGluZyBjaGVja3MgdG8gY29uZmlybSB0aGF0IGBwYWdlLSZndDtwcml2YXRlYCBpcyAwLCBpbXBseWluZyBhIHJlbGlhbmNlIG9uIHRoaXMgdmFsdWUgZm9yIGVpdGhlciBjb250cm9sIG9yIHN0YXRlLgoKTGV0JiMzOTtzIGRpdmUgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYC4gVGhpcyBpcyB3aGVyZSB0aGUgaW1wYWN0IHdpbGwgYmUgbW9zdCBpbnRlcmVzdGluZy4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBjb21wb3VuZCBwYWdlcyBhbmQgdGhlIGZyZWVpbmcgcGF0aC4gSSYjMzk7bSBsb29raW5nIGZvciBob3cgdGhpcyBjaGFuZ2UgaW1wYWN0cyBjb2FsZXNjaW5nLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIHBhZ2UgY2FjaGUgb3IgbWVtb3J5IHJlY2xhaW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zcGxpdF9mb2xpb190b19vcmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM1MTU9c3RhdGljIGJvb2wgcGFnZV9yYW5nZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgbG9uZyBucl9wYWdlcylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM1MjYtICovXG5tbS9odWdlX21lbW9yeS5jOjM1Mjc6c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy0zNTI4LVx0XHRpbnQgbmV3X29yZGVyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzY2Ni0gKiAxLiB1bmlmb3JtIHNwbGl0OiBAeGFzIGlzIHNwbGl0IHdpdGggbm8gZXhwZWN0YXRpb24gb2YgZmFpbHVyZSBhbmQgYSBzaW5nbGVcbm1tL2h1Z2VfbWVtb3J5LmM6MzY2NzogKiAgICBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKCkgaXMgY2FsbGVkIHRvIHNwbGl0IHRoZSBAZm9saW8gaW50byBAbmV3X29yZGVyXG5tbS9odWdlX21lbW9yeS5jLTM2NjgtICogICAgYWxvbmcgd2l0aCBzdGF0cyB1cGRhdGUuXG5tbS9odWdlX21lbW9yeS5jLTM2NjktICogMi4gbm9uLXVuaWZvcm0gc3BsaXQ6IGZvbGlvX29yZGVyIC0gQG5ld19vcmRlciBjYWxscyB0b1xubW0vaHVnZV9tZW1vcnkuYzozNjcwOiAqICAgIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoKSBhcmUgZXhwZWN0ZWQgdG8gYmUgbWFkZSBpbiBhIGZvciBsb29wIHRvIHNwbGl0XG5tbS9odWdlX21lbW9yeS5jLTM2NzEtICogICAgdGhlIEBmb2xpbyB0byBvbmUgbG93ZXIgb3JkZXIgYXQgYSB0aW1lLiBUaGUgZm9saW8gY29udGFpbmluZyBAc3BsaXRfYXRcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM2ODM9c3RhdGljIGludCBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNzI4LVx0XHRwZ2FsbG9jX3RhZ19zcGxpdChmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XG5tbS9odWdlX21lbW9yeS5jOjM3Mjk6XHRcdF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xubW0vaHVnZV9tZW1vcnkuYy0zNzMwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDAzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTY5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqTmF2aWdhdGluZyB0aGUgRm9saW8gU3BsaXR0aW5nIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cgaGVyZS4gSXQgbG9va3MgbGlrZSBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgaXMgYmVpbmcgaW52b2tlZCBieSB0aGUgYF9fc3BsaXRfdW5tYXBwZWRfZm9saW9gIGZ1bmN0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLCBidXQgYmVmb3JlIEkgZ28gdG9vIGZhciBkb3duIHRoZSByYWJiaXQgaG9sZSBvZiBgX19zcGxpdF9mb2xpb190b19vcmRlcmAsIEkgc2hvdWxkIHByb2JhYmx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgdGhhdCYjMzk7cyAqdHJpZ2dlcmluZyogaXQuIFRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgdG8gZGlnIGludG8gYF9fc3BsaXRfdW5tYXBwZWRfZm9saW9gLiBVbmRlcnN0YW5kaW5nICp3aHkqIHdlJiMzOTtyZSBzcGxpdHRpbmcgdW5tYXBwZWQgZm9saW9zIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIGxvZ2ljIG9mIHRoZSBzZWNvbmRhcnkgc3BsaXQgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zcGxpdF91bm1hcHBlZF9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM1Mjc9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzY0Mi0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6MzY0MzogKiBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKCkgLSBzcGxpdHMgYW4gdW5tYXBwZWQgQGZvbGlvIHRvIGxvd2VyIG9yZGVyIGZvbGlvcyBpblxubW0vaHVnZV9tZW1vcnkuYy0zNjQ0LSAqIHR3byB3YXlzOiB1bmlmb3JtIHNwbGl0IG9yIG5vbi11bmlmb3JtIHNwbGl0LlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzY4Mi0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MzY4MzpzdGF0aWMgaW50IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtMzY4NC1cdFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM4MTA9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM4ODMtXG5tbS9odWdlX21lbW9yeS5jOjM4ODQ6XHRcdHJldCA9IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIHhhcyxcbm1tL2h1Z2VfbWVtb3J5LmMtMzg4NS1cdFx0XHRcdFx0ICAgICBtYXBwaW5nLCBzcGxpdF90eXBlKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5NzMtICpcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk3NDogKiBJdCBjYWxscyBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKCkgdG8gcGVyZm9ybSB1bmlmb3JtIGFuZCBub24tdW5pZm9ybSBzcGxpdC5cbm1tL2h1Z2VfbWVtb3J5LmMtMzk3NS0gKiBJdCBpcyBpbiBjaGFyZ2Ugb2YgY2hlY2tpbmcgd2hldGhlciB0aGUgc3BsaXQgaXMgc3VwcG9ydGVkIG9yIG5vdCBhbmRcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk3NjogKiBwcmVwYXJpbmcgQGZvbGlvIGZvciBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKCkuXG5tbS9odWdlX21lbW9yeS5jLTM5NzctICpcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM5ODY9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MDY4LVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzo0MDY5Olx0XHQgKl9fc3BsaXRfdW5tYXBwZWRfZm9saW8oKSBtYXkgbmVlZCB0byB0cmltIG9mZiBwYWdlcyBiZXlvbmRcbm1tL2h1Z2VfbWVtb3J5LmMtNDA3MC1cdFx0ICogRU9GOiBidXQgb24gMzItYml0LCBpX3NpemVfcmVhZCgpIHRha2VzIGFuIGlycS11bnNhZmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5NzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIFNwbGl0dGluZyBQcm9jZXNzKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9uIGBfX2ZvbGlvX3NwbGl0YCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjayBhbmQgdW5kZXJzdGFuZCB0aGUgd2hvbGUgY2FsbCBzdGFjayBhbmQgdGhlIGRhdGEgZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIGBfX2ZvbGlvX3NwbGl0YCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuICBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAuICBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgaGFuZGxpbmcgdGhlIGxvZ2ljIGZvciB0YWtpbmcgYSB2ZXJ5IGxhcmdlICYjMzQ7cGFnZSYjMzQ7IG9mIGRhdGEgYW5kIGJyZWFraW5nIGl0IGRvd24gaW50byBhIG1vcmUgbWFuYWdlYWJsZSwgb3JkZXJlZCBsaXN0IG9mIHNtYWxsZXIgc2VnbWVudHMuIFVuZGVyc3RhbmRpbmcgdGhlIGFsZ29yaXRobSB1c2VkIGhlcmUgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB3aHkgaXQmIzM5O3MgY2FsbGluZyBgX19mb2xpb19zcGxpdGAuIElzIGl0IGEgcGFydGl0aW9uaW5nIHN0cmF0ZWd5LCBhIGJsb2NrIGRlY29tcG9zaXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyAgS25vd2luZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGFuZCB0aGUgb3JkZXJpbmcgcmVxdWlyZW1lbnRzIHdpbGwgYmUga2V5IHRvIG1ha2luZyBzZW5zZSBvZiBgX19mb2xpb19zcGxpdGAmIzM5O3MgcHVycG9zZSB3aXRoaW4gdGhpcyB3b3JrZmxvdy4gSSBhbnRpY2lwYXRlIHRoYXQgYF9fZm9saW9fc3BsaXRgIHdpbGwgYmUgcGVyZm9ybWluZyB0aGUgYWN0dWFsIHNwbGl0dGluZyBvcGVyYXRpb24sIGJ1dCBJIG5lZWQgdG8gc2VlIGhvdyBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGlzIHNldHRpbmcgdXAgdGhlIHBhcmFtZXRlcnMgYW5kIGNvbnRyb2xsaW5nIHRoZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTQxNzg9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MjQ0LSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0MjQ1OmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00MjQ2LVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI2Mi0gKiBJdCBoYXMgdGhlIHNhbWUgcHJlcmVxdWlzaXRlcyBhbmQgcmV0dXJucyBhc1xubW0vaHVnZV9tZW1vcnkuYzo0MjYzOiAqIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKCkuXG5tbS9odWdlX21lbW9yeS5jLTQyNjQtICpcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQzMTI9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbm1tL2h1Z2VfbWVtb3J5LmMtNDMxMy17XG5tbS9odWdlX21lbW9yeS5jOjQzMTQ6XHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgbGlzdCwgMCk7XG5tbS9odWdlX21lbW9yeS5jLTQzMTUtfVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDU5OD1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NjY3LVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzo0NjY4Olx0XHQgKiBGb3IgZm9saW9zIHdpdGggcHJpdmF0ZSwgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKVxubW0vaHVnZV9tZW1vcnkuYy00NjY5LVx0XHQgKiB3aWxsIHRyeSB0byBkcm9wIGl0IGJlZm9yZSBzcGxpdCBhbmQgdGhlbiBjaGVjayBpZiB0aGUgZm9saW9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3MzgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb3JlIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYC4gSXQmIzM5O3MgYSBwdWJsaWMgQVBJLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50LiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBpbnRlcm5hbCBmdW5jdGlvbnMgdGhhdCBsaWtlbHkgZHJpdmUgaXRzIGJlaGF2aW9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgZmxvdy4gVGhlIGtleSBzeW1ib2xzIHRoYXQgc2VlbSByZWxldmFudCBhcmU6IGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYCwgYW5kIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYC4gVGhlc2UgZmVlbCBsaWtlIHRoZSBndXRzIG9mIHRoZSBvcGVyYXRpb24sIHRoZSBsb3ctbGV2ZWwgYnVpbGRpbmcgYmxvY2tzLgoKV2FpdCBhIHNlY29uZC4uLkkganVzdCBjYXVnaHQgdGhhdCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWlnaHQgcHJlc2VudCBzb21lIGludGVyZXN0aW5nIGNoYWxsZW5nZXMgZm9yIHRlc3Rpbmcgb3IgcG90ZW50aWFsIGZ1dHVyZSBtb2RpZmljYXRpb25zLiBHaXZlbiBpdHMgc3RhdHVzLCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB3b3VsZCBiZSB0byBkcmlsbCBkb3duIGludG8gdGhlIGludGVybmFscyBvZiBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgIGFuZCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AuIFRoZXkmIzM5O3JlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgYW5kIHRoZXkmIzM5O3JlIGxpa2VseSB0aGUgb25lcyBkaXJlY3RseSBoYW5kbGluZyB0aGUgZm9saW8gaXNvbGF0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgcHVibGljIEFQSSwgYnV0IGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCBjb3VsZCBwb3RlbnRpYWxseSBwZXJmb3JtIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBTbyBJJiMzOTtsbCBuZWVkIHRvIGdvIGRlZXBlciBpbnRvIHRob3NlIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jPTU1MT1zdGF0aWMgYm9vbCBjb21wYWN0X3VubG9ja19zaG91bGRfYWJvcnQoc3BpbmxvY2tfdCAqbG9jayxcbi0tXG5tbS9jb21wYWN0aW9uLmMtNTczLSAqL1xubW0vY29tcGFjdGlvbi5jOjU3NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2ZyZWVwYWdlc19ibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcbm1tL2NvbXBhY3Rpb24uYy01NzUtXHRcdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydF9wZm4sXG4tLVxubW0vY29tcGFjdGlvbi5jPTcxMj1pc29sYXRlX2ZyZWVwYWdlc19yYW5nZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcbi0tXG5tbS9jb21wYWN0aW9uLmMtNzI5LVx0XHRcdFx0YmxvY2tfZW5kX3BmbiAmIzQzOz0gcGFnZWJsb2NrX25yX3BhZ2VzKSB7XG5tbS9jb21wYWN0aW9uLmM6NzMwOlx0XHQvKiBQcm90ZWN0IHBmbiBmcm9tIGNoYW5naW5nIGJ5IGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrICovXG5tbS9jb21wYWN0aW9uLmMtNzMxLVx0XHR1bnNpZ25lZCBsb25nIGlzb2xhdGVfc3RhcnRfcGZuID0gcGZuO1xuLS1cbm1tL2NvbXBhY3Rpb24uYy03NDgtXG5tbS9jb21wYWN0aW9uLmM6NzQ5Olx0XHRpc29sYXRlZCA9IGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKGNjLCBcdTAwMjZpc29sYXRlX3N0YXJ0X3Bmbixcbm1tL2NvbXBhY3Rpb24uYy03NTAtXHRcdFx0XHRcdGJsb2NrX2VuZF9wZm4sIGNjLVx1MDAzZWZyZWVwYWdlcywgMCwgdHJ1ZSk7XG4tLVxubW0vY29tcGFjdGlvbi5jLTc1Mi1cdFx0Lypcbm1tL2NvbXBhY3Rpb24uYzo3NTM6XHRcdCAqIEluIHN0cmljdCBtb2RlLCBpc29sYXRlX2ZyZWVwYWdlc19ibG9jaygpIHJldHVybnMgMCBpZlxubW0vY29tcGFjdGlvbi5jLTc1NC1cdFx0ICogdGhlcmUgYXJlIGFueSBob2xlcyBpbiB0aGUgYmxvY2sgKGllLiBpbnZhbGlkIFBGTnMgb3Jcbi0tXG5tbS9jb21wYWN0aW9uLmM9MTQ3ND1mYXN0X2lzb2xhdGVfYXJvdW5kKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCB1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTQ5NC1cbm1tL2NvbXBhY3Rpb24uYzoxNDk1Olx0aXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soY2MsIFx1MDAyNnN0YXJ0X3BmbiwgZW5kX3BmbiwgY2MtXHUwMDNlZnJlZXBhZ2VzLCAxLCBmYWxzZSk7XG5tbS9jb21wYWN0aW9uLmMtMTQ5Ni1cbi0tXG5tbS9jb21wYWN0aW9uLmM9MTY5Mj1zdGF0aWMgdm9pZCBpc29sYXRlX2ZyZWVwYWdlcyhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTc2My1cdFx0LyogRm91bmQgYSBibG9jayBzdWl0YWJsZSBmb3IgaXNvbGF0aW5nIGZyZWUgcGFnZXMgZnJvbS4gKi9cbm1tL2NvbXBhY3Rpb24uYzoxNzY0Olx0XHRucl9pc29sYXRlZCA9IGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKGNjLCBcdTAwMjZpc29sYXRlX3N0YXJ0X3Bmbixcbm1tL2NvbXBhY3Rpb24uYy0xNzY1LVx0XHRcdFx0XHRibG9ja19lbmRfcGZuLCBjYy1cdTAwM2VmcmVlcGFnZXMsIHN0cmlkZSwgZmFsc2UpO1xuLS1cbm1tL2NvbXBhY3Rpb24uYy0xODAxLVx0ICogYnJva2UgZnJvbSB0aGUgbG9vcCBhbmQgc2V0IGlzb2xhdGVfc3RhcnRfcGZuIGJhc2VkIG9uIHRoZSBsYXN0XG5tbS9jb21wYWN0aW9uLmM6MTgwMjpcdCAqIGNhbGwgdG8gaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soKSwgb3Igd2UgbWV0IHRoZSBtaWdyYXRpb24gc2Nhbm5lclxubW0vY29tcGFjdGlvbi5jLTE4MDMtXHQgKiBhbmQgdGhlIGxvb3AgdGVybWluYXRlZCBkdWUgdG8gaXNvbGF0ZV9zdGFydF9wZm4gXHUwMDNjIGxvd19wZm5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NTIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDb21wYWN0aW9uIGZvciBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGVzZSBjaGFuZ2VzIGluIGBtbS9jb21wYWN0aW9uLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIHdvcnRoIHRhcmdldGluZyBmb3IgZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIHNlZW0gdG8gYmUgYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCwgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgLCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgLCBhbmQgYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgLiBUaG9zZSBhcmUgdGhlIG9uZXMgdGhlIGRpZmYgaXMgZm9jdXNpbmcgb24uIEhtbSwgYnV0IHdhaXQsIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAgaXMgaW4gdGhhdCBsaXN0LCBhbmQgdGhhdCYjMzk7cyBhICp2ZXJ5KiBob3QgcGF0aC4gRnV6emluZyB0aGF0IGRpcmVjdGx5IG1pZ2h0IG5vdCB5aWVsZCBtdWNoLCBzaW5jZSBpdCYjMzk7cyBhbHJlYWR5IHNvIHdlbGwtZXhlcmNpc2VkLCBidXQgdGhlIGNoYW5nZSBpdHNlbGYgaXMgd29ydGggbm90aW5nLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQgaGVyZS4gCgpBbHJpZ2h0LCBJIHNlZSBgcHJlcF9jb21wb3VuZF90YWlsYCBhcyBhbm90aGVyIG1vZGlmaWVkIGZ1bmN0aW9uLiBMZXQgbWUgc3dpdGNoIGdlYXJzLCBhbmQgY2hlY2sgb3V0IGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAgbW9yZSBjbG9zZWx5LCBzcGVjaWZpY2FsbHksIGxldCYjMzk7cyBnbyBvdmVyIHRvIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCB0YWtlIGEgZGVlcGVyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZnJlZV9wYWdlc19wcmVwYXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0xMzA4PXN0YXRpYyBpbmxpbmUgdm9pZCBwZ2FsbG9jX3RhZ19zdWJfcGFnZXMoc3RydWN0IGFsbG9jX3RhZyAqdGFnLCB1bnNpZ25lZCBpbnQgbnIpIHt9XG4tLVxubW0vcGFnZV9hbGxvYy5jLTEzMTEtXG5tbS9wYWdlX2FsbG9jLmM6MTMxMjpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXG5tbS9wYWdlX2FsbG9jLmMtMTMxMy1cdFx0dW5zaWduZWQgaW50IG9yZGVyLCBmcGlfdCBmcGlfZmxhZ3MpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTE0NTU9Ym9vbCBmcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3BhZ2VfYWxsb2MuYy0xNDU2LXtcbm1tL3BhZ2VfYWxsb2MuYzoxNDU3Olx0cmV0dXJuIF9fZnJlZV9wYWdlc19wcmVwYXJlKHBhZ2UsIG9yZGVyLCBGUElfTk9ORSk7XG5tbS9wYWdlX2FsbG9jLmMtMTQ1OC19XG4tLVxubW0vcGFnZV9hbGxvYy5jPTE1ODQ9c3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTE1ODktXG5tbS9wYWdlX2FsbG9jLmM6MTU5MDpcdGlmIChfX2ZyZWVfcGFnZXNfcHJlcGFyZShwYWdlLCBvcmRlciwgZnBpX2ZsYWdzKSlcbm1tL3BhZ2VfYWxsb2MuYy0xNTkxLVx0XHRmcmVlX29uZV9wYWdlKHpvbmUsIHBhZ2UsIHBmbiwgb3JkZXIsIGZwaV9mbGFncyk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTI5NDM9c3RhdGljIHZvaWQgX19mcmVlX2Zyb3plbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0yOTU1LVxubW0vcGFnZV9hbGxvYy5jOjI5NTY6XHRpZiAoIV9fZnJlZV9wYWdlc19wcmVwYXJlKHBhZ2UsIG9yZGVyLCBmcGlfZmxhZ3MpKVxubW0vcGFnZV9hbGxvYy5jLTI5NTctXHRcdHJldHVybjtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MzAwNT12b2lkIGZyZWVfdW5yZWZfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0zMDE2LVxubW0vcGFnZV9hbGxvYy5jOjMwMTc6XHRcdGlmICghX19mcmVlX3BhZ2VzX3ByZXBhcmUoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb3JkZXIsIEZQSV9OT05FKSlcbm1tL3BhZ2VfYWxsb2MuYy0zMDE4LVx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgxMgoJCQkJCQkJb3V0cHV0OiAxNjYKCQkJCQkJCXRob3VnaHRzOiA0NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIGFuZCBDb25maWd1cmF0aW9uIFNlbGVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGFuYWx5emluZyB0aGlzIHBhdGNoIGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdCBmb3IgZnV6emluZy4gSSYjMzk7dmUgaWRlbnRpZmllZCBzb21lIGNyaXRpY2FsIGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMuIEZpcnN0bHksIEkmIzM5O3ZlIGRlY2lkZWQgdG8gZXhjbHVkZSBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgIGZyb20gRm9jdXNTeW1ib2xzIGJlY2F1c2UgaXQmIzM5O3MgYSBob3QgcGF0aCwgYW5kIGluY2x1ZGluZyBpdCBpc24mIzM5O3QgdGhlIGJlc3QgdXNlIG9mIHJlc291cmNlcy4gSG93ZXZlciwgSSB3aWxsIGluY2x1ZGUgYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYCwgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgLCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgLCBhbmQgYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgLiBXYWl0LCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgaXMgc3RhdGljLiBUaGF0JiMzOTtzIGZpbmUsIHN5emthbGxlciBjYW4gaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSYjMzk7cmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCYjMzk7cyBub3QgYSBibG9ja2VyLgoKSSBuZWVkZWQgdG8gY2hlY2sgYSBmZXcgY29uZmlndXJhdGlvbnMuIEkgY29uZmlybWVkIGBDT05GSUdfQ09NUEFDVElPTmAgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFyZSB0aGUgcmVsZXZhbnQgb25lcyBmb3IgdGhpcyBwYXRjaC4KCk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggbW9kaWZpZXMgaG93IHdlIGhhbmRsZSB0aGUgYHBhZ2UtJmd0O3ByaXZhdGVgIGZpZWxkIGR1cmluZyBwYWdlIGZyZWVpbmcgYW5kIFRIUCBzcGxpdHRpbmcuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHNwZWNpZmljYWxseSBjb21wYWN0aW9uLCBwYWdlIGFsbG9jYXRpb24sIGFuZCBUSFAg4oCTIHdoaWNoIGltcGFjdHMgcGFnZSBzdGF0ZS4gSXQgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciB3YXJuaW5ncyBvciBiYWQgcGFnZSBzdGF0ZXMgaWYgdGhlIGNoYW5nZXMgYXJlIHZpb2xhdGVkLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBwcmltZSBmb3IgZnV6emluZy4KClRoZXJlZm9yZSwgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOgotIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AKLSBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AKLSBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgCi0gYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgCgpBbmQgdGhlIGVuYWJsZWQgY29uZmlndXJhdGlvbnMgYXJlOgotIGBDT01QQUNUSU9OYAotIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTt2ZSByZS12ZXJpZmllZCB0aGF0IEkgZ290IHRoZSBmdW5jdGlvbiBuYW1lcyByaWdodDogYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgLCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgLCBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgLCBhbmQgYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgIGFyZSBhbGwgY29ycmVjdC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDAzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2smIzM0OywKICAgICYjMzQ7ZmFzdF9pc29sYXRlX2ZyZWVwYWdlcyYjMzQ7LAogICAgJiMzNDtjb21wYWN0aW9uX2FsbG9jX25vcHJvZiYjMzQ7LAogICAgJiMzNDtfX3NwbGl0X2ZvbGlvX3RvX29yZGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYnkgcmVtb3ZpbmcgYHNldF9wYWdlX3ByaXZhdGVgIGNhbGxzIGZvciBmcmVlIHBhZ2VzIGFuZCB0YWlsIHBhZ2VzLCBhbmQgYWRkaW5nIGNoZWNrcyB0byBlbnN1cmUgYHBhZ2UtXHUwMDNlcHJpdmF0ZWAgaXMgMCBkdXJpbmcgcGFnZSBmcmVlaW5nIGFuZCBUSFAgc3BsaXR0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGNvbXBhY3Rpb24sIHBhZ2UgYWxsb2NhdGlvbiwgYW5kIFRIUCwgd2hpY2ggY2FuIHRyaWdnZXIgd2FybmluZ3Mgb3IgYmFkIHBhZ2Ugc3RhdGVzIGlmIHZpb2xhdGVkLiBJdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpc29sYXRlX2ZyZWVwYWdlc19ibG9jayYjMzQ7LAogICAgJiMzNDtmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzJiMzNDssCiAgICAmIzM0O2NvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mJiMzNDssCiAgICAmIzM0O19fc3BsaXRfZm9saW9fdG9fb3JkZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBieSByZW1vdmluZyBgc2V0X3BhZ2VfcHJpdmF0ZWAgY2FsbHMgZm9yIGZyZWUgcGFnZXMgYW5kIHRhaWwgcGFnZXMsIGFuZCBhZGRpbmcgY2hlY2tzIHRvIGVuc3VyZSBgcGFnZS1cdTAwM2Vwcml2YXRlYCBpcyAwIGR1cmluZyBwYWdlIGZyZWVpbmcgYW5kIFRIUCBzcGxpdHRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgY29tcGFjdGlvbiwgcGFnZSBhbGxvY2F0aW9uLCBhbmQgVEhQLCB3aGljaCBjYW4gdHJpZ2dlciB3YXJuaW5ncyBvciBiYWQgcGFnZSBzdGF0ZXMgaWYgdmlvbGF0ZWQuIEl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDAzOjExOjA5LjU2NzM1OTIxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5ODUwMTQ3NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tcIixcbiAgICBcImZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNcIixcbiAgICBcImNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mXCIsXG4gICAgXCJfX3NwbGl0X2ZvbGlvX3RvX29yZGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBieSByZW1vdmluZyBgc2V0X3BhZ2VfcHJpdmF0ZWAgY2FsbHMgZm9yIGZyZWUgcGFnZXMgYW5kIHRhaWwgcGFnZXMsIGFuZCBhZGRpbmcgY2hlY2tzIHRvIGVuc3VyZSBgcGFnZS1cXHUwMDNlcHJpdmF0ZWAgaXMgMCBkdXJpbmcgcGFnZSBmcmVlaW5nIGFuZCBUSFAgc3BsaXR0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGNvbXBhY3Rpb24sIHBhZ2UgYWxsb2NhdGlvbiwgYW5kIFRIUCwgd2hpY2ggY2FuIHRyaWdnZXIgd2FybmluZ3Mgb3IgYmFkIHBhZ2Ugc3RhdGVzIGlmIHZpb2xhdGVkLiBJdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDAzOjExOjA5LjU2NzM2ODYyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5ODU0NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGQ2OWNkODMxMTBkNWEzNWM5MDRhMmEzOTRiNzg2MDI0ZThhNmExYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAwMzoxMTowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmNcXG5pbmRleCBiNzc2ZjM1YWQwMjAwNy4uMzQ5ODM4Y2M2YzE5MGYgMTAwNjQ0XFxuLS0tIGEvbW0vY29tcGFjdGlvbi5jXFxuKysrIGIvbW0vY29tcGFjdGlvbi5jXFxuQEAgLTY0NCw3ICs2NDQsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2ZyZWVwYWdlc19ibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcXG4gXFx0XFx0aXNvbGF0ZWQgPSBfX2lzb2xhdGVfZnJlZV9wYWdlKHBhZ2UsIG9yZGVyKTtcXG4gXFx0XFx0aWYgKCFpc29sYXRlZClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdHNldF9wYWdlX3ByaXZhdGUocGFnZSwgb3JkZXIpO1xcbiBcXG4gXFx0XFx0bnJfc2Nhbm5lZCArPSBpc29sYXRlZCAtIDE7XFxuIFxcdFxcdHRvdGFsX2lzb2xhdGVkICs9IGlzb2xhdGVkO1xcbkBAIC0xNjE3LDcgKzE2MTYsNiBAQCBzdGF0aWMgdm9pZCBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxcbiBcXHRcXHQvKiBJc29sYXRlIHRoZSBwYWdlIGlmIGF2YWlsYWJsZSAqL1xcbiBcXHRcXHRpZiAocGFnZSkge1xcbiBcXHRcXHRcXHRpZiAoX19pc29sYXRlX2ZyZWVfcGFnZShwYWdlLCBvcmRlcikpIHtcXG4tXFx0XFx0XFx0XFx0c2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBvcmRlcik7XFxuIFxcdFxcdFxcdFxcdG5yX2lzb2xhdGVkID0gMSBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4gXFx0XFx0XFx0XFx0bnJfc2Nhbm5lZCArPSBucl9pc29sYXRlZCAtIDE7XFxuIFxcdFxcdFxcdFxcdHRvdGFsX2lzb2xhdGVkICs9IG5yX2lzb2xhdGVkO1xcbkBAIC0xODQ2LDcgKzE4NDQsNiBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpjb21wYWN0aW9uX2FsbG9jX25vcHJvZihzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBkYVxcbiBcXHRcXHRzaXplIFxcdTAwM2VcXHUwMDNlPSAxO1xcbiBcXG4gXFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZyZWVwYWdlW3NpemVdLmxydSwgXFx1MDAyNmNjLVxcdTAwM2VmcmVlcGFnZXNbc3RhcnRfb3JkZXJdKTtcXG4tXFx0XFx0c2V0X3BhZ2VfcHJpdmF0ZShcXHUwMDI2ZnJlZXBhZ2Vbc2l6ZV0sIHN0YXJ0X29yZGVyKTtcXG4gXFx0fVxcbiBcXHRkc3QgPSAoc3RydWN0IGZvbGlvICopZnJlZXBhZ2U7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDJiY2NiMGE1M2EwYTYwLi4wMzdkNjdmYmVjNmU1OSAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC0zNTk0LDYgKzM1OTQsMTYgQEAgc3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxcbiBcXHRcXHRuZXdfZm9saW8tXFx1MDAzZW1hcHBpbmcgPSBmb2xpby1cXHUwMDNlbWFwcGluZztcXG4gXFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VpbmRleCA9IGZvbGlvLVxcdTAwM2VpbmRleCArIGk7XFxuIFxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBwYWdlLVxcdTAwM2Vwcml2YXRlIHNob3VsZCBub3QgYmUgc2V0IGluIHRhaWwgcGFnZXMuIEZpeCB1cCBhbmQgd2FybiBvbmNlXFxuK1xcdFxcdCAqIGlmIHByaXZhdGUgaXMgdW5leHBlY3RlZGx5IHNldC4gRG8gaXQgYmVmb3JlIHN3YXAudmFsIGFzc2lnbm1lbnRcXG4rXFx0XFx0ICogc2luY2UgcHJpdmF0ZSBvdmVybGFwcyB3aXRoIHN3YXAudmFsLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHVubGlrZWx5KG5ld19mb2xpby1cXHUwMDNlcHJpdmF0ZSkpIHtcXG4rXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX1BBR0UodHJ1ZSwgbmV3X2hlYWQpO1xcbitcXHRcXHRcXHRuZXdfZm9saW8tXFx1MDAzZXByaXZhdGUgPSBOVUxMO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKVxcbiBcXHRcXHRcXHRuZXdfZm9saW8tXFx1MDAzZXN3YXAudmFsID0gZm9saW8tXFx1MDAzZXN3YXAudmFsICsgaTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXFxuaW5kZXggMTgxZTc5ZjFkNmEyMDcuLmM5NjQyMWNlOTM1MDE1IDEwMDY0NFxcbi0tLSBhL21tL2ludGVybmFsLmhcXG4rKysgYi9tbS9pbnRlcm5hbC5oXFxuQEAgLTg5NSw3ICs4OTUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHJlcF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLFxcbiB7XFxuIFxcdHRhaWwtXFx1MDAzZW1hcHBpbmcgPSBUQUlMX01BUFBJTkc7XFxuIFxcdHNldF9jb21wb3VuZF9oZWFkKHRhaWwsIGhlYWQsIG9yZGVyKTtcXG4tXFx0c2V0X3BhZ2VfcHJpdmF0ZSh0YWlsLCAwKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGluaXRfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCxcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXFxuaW5kZXggZWU5MDJhNDY4YzJmNWIuLjEzYzI2NTVlMjRmYmRkIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xcbkBAIC0xMzc0LDE1ICsxMzc0LDIxIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX2ZyZWVfcGFnZXNfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gI2VuZGlmXFxuIFxcdFxcdH1cXG4gXFx0XFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjICgxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTsgaSsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBwYWdlICpzdWJwYWdlID0gcGFnZSArIGk7XFxuK1xcbiBcXHRcXHRcXHRpZiAoY29tcG91bmQpXFxuLVxcdFxcdFxcdFxcdGJhZCArPSBmcmVlX3RhaWxfcGFnZV9wcmVwYXJlKHBhZ2UsIHBhZ2UgKyBpKTtcXG4rXFx0XFx0XFx0XFx0YmFkICs9IGZyZWVfdGFpbF9wYWdlX3ByZXBhcmUocGFnZSwgc3VicGFnZSk7XFxuIFxcdFxcdFxcdGlmIChpc19jaGVja19wYWdlc19lbmFibGVkKCkpIHtcXG4tXFx0XFx0XFx0XFx0aWYgKGZyZWVfcGFnZV9pc19iYWQocGFnZSArIGkpKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChmcmVlX3BhZ2VfaXNfYmFkKHN1YnBhZ2UpKSB7XFxuIFxcdFxcdFxcdFxcdFxcdGJhZCsrO1xcbiBcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdChwYWdlICsgaSktXFx1MDAzZWZsYWdzLmYgXFx1MDAyNj0gflBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUDtcXG4rXFx0XFx0XFx0c3VicGFnZS1cXHUwMDNlZmxhZ3MuZiBcXHUwMDI2PSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQO1xcbitcXHRcXHRcXHRpZiAoc3VicGFnZS1cXHUwMDNlcHJpdmF0ZSkge1xcbitcXHRcXHRcXHRcXHRiYWRfcGFnZShzdWJwYWdlLCBcXFwibm9uemVybyBwcml2YXRlXFxcIik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDM6MTE6MTAuMTY4MzQ1OTY5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTI0OTEzODY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT01QQUNUSU9OXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrXCIsXG4gICAgXCJmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzXCIsXG4gICAgXCJjb21wYWN0aW9uX2FsbG9jX25vcHJvZlwiLFxuICAgIFwiX19zcGxpdF9mb2xpb190b19vcmRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYnkgcmVtb3ZpbmcgYHNldF9wYWdlX3ByaXZhdGVgIGNhbGxzIGZvciBmcmVlIHBhZ2VzIGFuZCB0YWlsIHBhZ2VzLCBhbmQgYWRkaW5nIGNoZWNrcyB0byBlbnN1cmUgYHBhZ2UtXFx1MDAzZXByaXZhdGVgIGlzIDAgZHVyaW5nIHBhZ2UgZnJlZWluZyBhbmQgVEhQIHNwbGl0dGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBjb21wYWN0aW9uLCBwYWdlIGFsbG9jYXRpb24sIGFuZCBUSFAsIHdoaWNoIGNhbiB0cmlnZ2VyIHdhcm5pbmdzIG9yIGJhZCBwYWdlIHN0YXRlcyBpZiB2aW9sYXRlZC4gSXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBkNjljZDgzMTEwZDVhMzVjOTA0YTJhMzk0Yjc4NjAyNGU4YTZhMWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAwMzoxMTowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uY1xuaW5kZXggYjc3NmYzNWFkMDIwMDcuLjM0OTgzOGNjNmMxOTBmIDEwMDY0NFxuLS0tIGEvbW0vY29tcGFjdGlvbi5jXG4rKysgYi9tbS9jb21wYWN0aW9uLmNcbkBAIC02NDQsNyArNjQ0LDYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXG4gXHRcdGlzb2xhdGVkID0gX19pc29sYXRlX2ZyZWVfcGFnZShwYWdlLCBvcmRlcik7XG4gXHRcdGlmICghaXNvbGF0ZWQpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdHNldF9wYWdlX3ByaXZhdGUocGFnZSwgb3JkZXIpO1xuIFxuIFx0XHRucl9zY2FubmVkICs9IGlzb2xhdGVkIC0gMTtcbiBcdFx0dG90YWxfaXNvbGF0ZWQgKz0gaXNvbGF0ZWQ7XG5AQCAtMTYxNyw3ICsxNjE2LDYgQEAgc3RhdGljIHZvaWQgZmFzdF9pc29sYXRlX2ZyZWVwYWdlcyhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbiBcdFx0LyogSXNvbGF0ZSB0aGUgcGFnZSBpZiBhdmFpbGFibGUgKi9cbiBcdFx0aWYgKHBhZ2UpIHtcbiBcdFx0XHRpZiAoX19pc29sYXRlX2ZyZWVfcGFnZShwYWdlLCBvcmRlcikpIHtcbi1cdFx0XHRcdHNldF9wYWdlX3ByaXZhdGUocGFnZSwgb3JkZXIpO1xuIFx0XHRcdFx0bnJfaXNvbGF0ZWQgPSAxIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiBcdFx0XHRcdG5yX3NjYW5uZWQgKz0gbnJfaXNvbGF0ZWQgLSAxO1xuIFx0XHRcdFx0dG90YWxfaXNvbGF0ZWQgKz0gbnJfaXNvbGF0ZWQ7XG5AQCAtMTg0Niw3ICsxODQ0LDYgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqY29tcGFjdGlvbl9hbGxvY19ub3Byb2Yoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGFcbiBcdFx0c2l6ZSBcdTAwM2VcdTAwM2U9IDE7XG4gXG4gXHRcdGxpc3RfYWRkKFx1MDAyNmZyZWVwYWdlW3NpemVdLmxydSwgXHUwMDI2Y2MtXHUwMDNlZnJlZXBhZ2VzW3N0YXJ0X29yZGVyXSk7XG4tXHRcdHNldF9wYWdlX3ByaXZhdGUoXHUwMDI2ZnJlZXBhZ2Vbc2l6ZV0sIHN0YXJ0X29yZGVyKTtcbiBcdH1cbiBcdGRzdCA9IChzdHJ1Y3QgZm9saW8gKilmcmVlcGFnZTtcbiBcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggMmJjY2IwYTUzYTBhNjAuLjAzN2Q2N2ZiZWM2ZTU5IDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTM1OTQsNiArMzU5NCwxNiBAQCBzdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXG4gXHRcdG5ld19mb2xpby1cdTAwM2VtYXBwaW5nID0gZm9saW8tXHUwMDNlbWFwcGluZztcbiBcdFx0bmV3X2ZvbGlvLVx1MDAzZWluZGV4ID0gZm9saW8tXHUwMDNlaW5kZXggKyBpO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBwYWdlLVx1MDAzZXByaXZhdGUgc2hvdWxkIG5vdCBiZSBzZXQgaW4gdGFpbCBwYWdlcy4gRml4IHVwIGFuZCB3YXJuIG9uY2VcbitcdFx0ICogaWYgcHJpdmF0ZSBpcyB1bmV4cGVjdGVkbHkgc2V0LiBEbyBpdCBiZWZvcmUgc3dhcC52YWwgYXNzaWdubWVudFxuK1x0XHQgKiBzaW5jZSBwcml2YXRlIG92ZXJsYXBzIHdpdGggc3dhcC52YWwuXG4rXHRcdCAqL1xuK1x0XHRpZiAodW5saWtlbHkobmV3X2ZvbGlvLVx1MDAzZXByaXZhdGUpKSB7XG4rXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX1BBR0UodHJ1ZSwgbmV3X2hlYWQpO1xuK1x0XHRcdG5ld19mb2xpby1cdTAwM2Vwcml2YXRlID0gTlVMTDtcbitcdFx0fVxuK1xuIFx0XHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKVxuIFx0XHRcdG5ld19mb2xpby1cdTAwM2Vzd2FwLnZhbCA9IGZvbGlvLVx1MDAzZXN3YXAudmFsICsgaTtcbiBcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMTgxZTc5ZjFkNmEyMDcuLmM5NjQyMWNlOTM1MDE1IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTg5NSw3ICs4OTUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHJlcF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLFxuIHtcbiBcdHRhaWwtXHUwMDNlbWFwcGluZyA9IFRBSUxfTUFQUElORztcbiBcdHNldF9jb21wb3VuZF9oZWFkKHRhaWwsIGhlYWQsIG9yZGVyKTtcbi1cdHNldF9wYWdlX3ByaXZhdGUodGFpbCwgMCk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2NvbXBvdW5kX3RhaWwoc3RydWN0IHBhZ2UgKnRhaWwsXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCBlZTkwMmE0NjhjMmY1Yi4uMTNjMjY1NWUyNGZiZGQgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTEzNzQsMTUgKzEzNzQsMjEgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLFxuICNlbmRpZlxuIFx0XHR9XG4gXHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjICgxIFx1MDAzY1x1MDAzYyBvcmRlcik7IGkrKykge1xuK1x0XHRcdHN0cnVjdCBwYWdlICpzdWJwYWdlID0gcGFnZSArIGk7XG4rXG4gXHRcdFx0aWYgKGNvbXBvdW5kKVxuLVx0XHRcdFx0YmFkICs9IGZyZWVfdGFpbF9wYWdlX3ByZXBhcmUocGFnZSwgcGFnZSArIGkpO1xuK1x0XHRcdFx0YmFkICs9IGZyZWVfdGFpbF9wYWdlX3ByZXBhcmUocGFnZSwgc3VicGFnZSk7XG4gXHRcdFx0aWYgKGlzX2NoZWNrX3BhZ2VzX2VuYWJsZWQoKSkge1xuLVx0XHRcdFx0aWYgKGZyZWVfcGFnZV9pc19iYWQocGFnZSArIGkpKSB7XG4rXHRcdFx0XHRpZiAoZnJlZV9wYWdlX2lzX2JhZChzdWJwYWdlKSkge1xuIFx0XHRcdFx0XHRiYWQrKztcbiBcdFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuLVx0XHRcdChwYWdlICsgaSktXHUwMDNlZmxhZ3MuZiBcdTAwMjY9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVA7XG4rXHRcdFx0c3VicGFnZS1cdTAwM2VmbGFncy5mIFx1MDAyNj0gflBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUDtcbitcdFx0XHRpZiAoc3VicGFnZS1cdTAwM2Vwcml2YXRlKSB7XG4rXHRcdFx0XHRiYWRfcGFnZShzdWJwYWdlLCBcIm5vbnplcm8gcHJpdmF0ZVwiKTtcbitcdFx0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwMzoxMToxMC4xNjgzNTA1MTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODc3NzYzNzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb25lLCBpdCBzZWVtcyDigJMgdGhhdCB0b3VjaGVzIHNvbWUga2V5IGFyZWFzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW06IGBtbS9jb21wYWN0aW9uLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9pbnRlcm5hbC5oYCwgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbml0aWFsIHJlYWQgc3VnZ2VzdHMgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5UaGUgY29yZSBvZiBpdCBpcyB0aGUgcmVtb3ZhbCBvZiBzb21lIGBzZXRfcGFnZV9wcml2YXRlKClgIGNhbGxzIGluIGZ1bmN0aW9ucyBsaWtlIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYW5kIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAuIFRoYXQncyBpbnRlcmVzdGluZzsgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHdoeSB0aG9zZSB3ZXJlIHJlbW92ZWQuIEl0IGFsc28gYWRkcyBhIGNoZWNrIGFuZCB3YXJuaW5nIGluIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCB0byBjbGVhciBhbmQgZW5zdXJlIGBuZXdfZm9saW8tXHUwMDNlcHJpdmF0ZWAgaXMgbm90IHVuZXhwZWN0ZWRseSBzZXQuIEFuZCBpdCBsb29rcyBsaWtlIGFub3RoZXIgYHNldF9wYWdlX3ByaXZhdGUoKWAgY2FsbCBpcyByZW1vdmVkIGluIGBwcmVwX2NvbXBvdW5kX3RhaWxgLiBGaW5hbGx5LCB0aGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAgdG8gY2FsbCBgYmFkX3BhZ2UoKWAgaWYgYHN1YnBhZ2UtXHUwMDNlcHJpdmF0ZWAgaXMgbm9uemVyby4gVGhlIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAgZnVuY3Rpb24gaXMgYSBob3QgcGF0aDsgdGhhdCBkZWZpbml0ZWx5IG5lZWRzIGNhcmVmdWwgc2NydXRpbnkuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc29tZSBzdWJ0bGUgYnVncyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFRoaXMgaW1wYWN0cyBjb21wYWN0aW9uLCBodWdlIHBhZ2Ugc3BsaXR0aW5nLCBhbmQgcGFnZSBhbGxvY2F0aW9uLCBzbyBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgcmVtb3ZpbmcgdGhvc2UgYHNldF9wYWdlX3ByaXZhdGUoKWAgY2FsbHMsIGVzcGVjaWFsbHkgaW4gYF9fZnJlZV9wYWdlc19wcmVwYXJlYCB3aGljaCBpcyBmcmVxdWVudGx5IGNhbGxlZC5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duIGJ5IGZ1bmN0aW9ucy4gVGhlIGtleSBzeW1ib2xzIHNlZW0gdG8gYmU6XG4qICAgYGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrYFxuKiAgIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYFxuKiAgIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmBcbiogICBgX19zcGxpdF9mb2xpb190b19vcmRlcmBcbiogICBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgXG5cbmBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAgaXMgY2xlYXJseSBhIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZSBmdW5jdGlvbiwgd2hlcmVhcyBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgLCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AsIGFuZCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgIGFwcGVhciBjb21wYWN0aW9uLXJlbGF0ZWQuIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCBzdWdnZXN0cyB0aGF0IHdlIGFyZSBjaGFuZ2luZyBob3cgVEhQcyBhcmUgc3BsaXQuXG5cbk5vdywgbGV0J3MgZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCB0byBuYXJyb3cgdGhlIGZvY3VzLiBDb21wYWN0aW9uIGlzIHRpZWQgdG8gYENPTkZJR19DT01QQUNUSU9OYCwgYW5kIFRIUCBzdXBwb3J0IGlzIGxpbmtlZCB0byBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGltZSB0byBsZXZlcmFnZSBvdXIgS2NvbmZpZyB0b29sIHRvIGdldCBhIHByZWNpc2UgcGljdHVyZSBvZiB0aGVzZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0byBkZXRlcm1pbmUgdGhlIHBvc3NpYmxlIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDM6MTE6MTcuMDQ2MTI4NjYzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODI1MjA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQ09NUEFDVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vY29tcGFjdGlvbi5jLTI4LVxcbm1tL2NvbXBhY3Rpb24uYzoyOTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9jb21wYWN0aW9uLmMtMzAtLypcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz01OT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy02MS1cXG5tbS9jb21wYWN0aW9uLmM6NjI6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXFxubW0vY29tcGFjdGlvbi5jLTYzLVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTkxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlbGVhc2VfZnJlZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZyZWVwYWdlcylcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0xMTUtXFxubW0vY29tcGFjdGlvbi5jOjExNjojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9jb21wYWN0aW9uLmMtMTE3LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTQ5MD1zdGF0aWMgYm9vbCB0ZXN0X2FuZF9zZXRfc2tpcChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtNDkzLX1cXG5tbS9jb21wYWN0aW9uLmM6NDk0OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcbm1tL2NvbXBhY3Rpb24uYy00OTUtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MTMzNj1pc29sYXRlX21pZ3JhdGVwYWdlc19yYW5nZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMTM3MS1cXG5tbS9jb21wYWN0aW9uLmM6MTM3MjojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gfHwgQ09ORklHX0NNQSAqL1xcbm1tL2NvbXBhY3Rpb24uYzoxMzczOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL2NvbXBhY3Rpb24uYy0xMzc0LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTMzNTE9c3Vic3lzX2luaXRjYWxsKGtjb21wYWN0ZF9pbml0KVxcbm1tL2NvbXBhY3Rpb24uYy0zMzUyLVxcbm1tL2NvbXBhY3Rpb24uYzozMzUzOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcbi0tXFxubW0vaW50ZXJuYWwuaD05OTg9c3RhdGljIGlubGluZSB2b2lkIHNwYXJzZV9pbml0X3N1YnNlY3Rpb25fbWFwKHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xMDAzLVxcbm1tL2ludGVybmFsLmg6MTAwNDojaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcXG5tbS9pbnRlcm5hbC5oLTEwMDUtXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTEwNzM9dm9pZCBpbml0X2NtYV9yZXNlcnZlZF9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbm1tL2ludGVybmFsLmgtMTA3NC1cXG5tbS9pbnRlcm5hbC5oOjEwNzU6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cXG5tbS9pbnRlcm5hbC5oLTEwNzYtXFxuLS1cXG5tbS9tbV9pbml0LmM9MTMzNz1zdGF0aWMgdm9pZCBfX2luaXQgY2FsY3VsYXRlX25vZGVfdG90YWxwYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vbW1faW5pdC5jLTEzNzktXFxubW0vbW1faW5pdC5jOjEzODA6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vbW1faW5pdC5jLTEzODEtc3RhdGljIHZvaWQgcGdkYXRfaW5pdF9rY29tcGFjdGQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL29vbV9raWxsLmM9NDU2PXN0YXRpYyB2b2lkIGR1bXBfaGVhZGVyKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXFxuLS1cXG5tbS9vb21fa2lsbC5jLTQ2MC1cXHRcXHRcXHRjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZW9vbV9zY29yZV9hZGopO1xcbm1tL29vbV9raWxsLmM6NDYxOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikgXFx1MDAyNlxcdTAwMjYgb2MtXFx1MDAzZW9yZGVyKVxcbm1tL29vbV9raWxsLmMtNDYyLVxcdFxcdHByX3dhcm4oXFxcIkNPTVBBQ1RJT04gaXMgZGlzYWJsZWQhISFcXFxcblxcXCIpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcxMD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2J1ZGR5X29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzE1LVxcbm1tL3BhZ2VfYWxsb2MuYzo3MTY6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vcGFnZV9hbGxvYy5jLTcxNy1zdGF0aWMgaW5saW5lIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKnRhc2tfY2FwYyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03NjU9Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTc2OS19XFxubW0vcGFnZV9hbGxvYy5jOjc3MDojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG5tbS9wYWdlX2FsbG9jLmMtNzcxLVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQwNTM9X19hbGxvY19wYWdlc19tYXlfb29tKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDE0NC1cXG5tbS9wYWdlX2FsbG9jLmM6NDE0NTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9wYWdlX2FsbG9jLmMtNDE0Ni0vKiBUcnkgbWVtb3J5IGNvbXBhY3Rpb24gZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgYmVmb3JlIHJlY2xhaW0gKi9cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00Mjg1PXNob3VsZF9jb21wYWN0X3JldHJ5KGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00MzEwLX1cXG5tbS9wYWdlX2FsbG9jLmM6NDMxMTojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG5tbS9wYWdlX2FsbG9jLmMtNDMxMi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYzMzE9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjM3MS1cXHRcXHRcXHQgKi9cXG5tbS92bXNjYW4uYzo2MzcyOlxcdFxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQUNUSU9OKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTYzNzMtXFx0XFx0XFx0ICAgIHNjLVxcdTAwM2VvcmRlciBcXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS92bXN0YXQuYz0xMDQyPXZvaWQgbWVtbWFwX3BhZ2VzX2FkZChsb25nIGRlbHRhKVxcbi0tXFxubW0vdm1zdGF0LmMtMTA0Ni1cXG5tbS92bXN0YXQuYzoxMDQ3OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3Ztc3RhdC5jLTEwNDgtXFxuLS1cXG5tbS92bXN0YXQuYz0xMTg3PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xcbi0tXFxubW0vdm1zdGF0LmMtMTM3MC0jZW5kaWZcXG5tbS92bXN0YXQuYzoxMzcxOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3Ztc3RhdC5jLTEzNzItXFx0W0koQ09NUEFDVE1JR1JBVEVfU0NBTk5FRCldXFx0XFx0PSBcXFwiY29tcGFjdF9taWdyYXRlX3NjYW5uZWRcXFwiLFxcbi0tXFxubW0vdm1zdGF0LmMtMTQ5Ni1cXG5tbS92bXN0YXQuYzoxNDk3OiNpZiAoZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTVBBQ1RJT04pKSB8fCBcXFxcXFxubW0vdm1zdGF0LmMtMTQ5OC0gICAgIGRlZmluZWQoQ09ORklHX1BST0NfRlMpXFxuLS1cXG5tbS92bXN0YXQuYz0yMjY4PXZvaWQgX19pbml0IGluaXRfbW1faW50ZXJuYWxzKHZvaWQpXFxuLS1cXG5tbS92bXN0YXQuYy0yMzAxLVxcbm1tL3Ztc3RhdC5jOjIzMDI6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19DT01QQUNUSU9OKVxcbm1tL3Ztc3RhdC5jLTIzMDMtXFxuLS1cXG5tbS96c21hbGxvYy5jPTE5OT1zdHJ1Y3QgenNfcG9vbCB7XFxuLS1cXG5tbS96c21hbGxvYy5jLTIxMy0jZW5kaWZcXG5tbS96c21hbGxvYy5jOjIxNDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS96c21hbGxvYy5jLTIxNS1cXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZnJlZV93b3JrO1xcbi0tXFxubW0venNtYWxsb2MuYz0zNjA9c3RhdGljIGJvb2wgWnNIdWdlUGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXFxuLS1cXG5tbS96c21hbGxvYy5jLTM2NC1cXG5tbS96c21hbGxvYy5jOjM2NTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS96c21hbGxvYy5jLTM2Ni1zdGF0aWMgdm9pZCBraWNrX2RlZmVycmVkX2ZyZWUoc3RydWN0IHpzX3Bvb2wgKnBvb2wpO1xcbi0tXFxubW0venNtYWxsb2MuYz05MzE9c3RhdGljIHN0cnVjdCB6c3BhZ2UgKmFsbG9jX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCxcXG4tLVxcbm1tL3pzbWFsbG9jLmMtOTQxLVxcbm1tL3pzbWFsbG9jLmM6OTQyOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikpXFxubW0venNtYWxsb2MuYy05NDMtXFx0XFx0Z2ZwIFxcdTAwMjY9IH5fX0dGUF9NT1ZBQkxFO1xcbi0tXFxubW0venNtYWxsb2MuYz0xNTk0PXN0YXRpYyBpbnQgcHV0YmFja196c3BhZ2Uoc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLCBzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXFxuLS1cXG5tbS96c21hbGxvYy5jLTE2MDMtXFxubW0venNtYWxsb2MuYzoxNjA0OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3pzbWFsbG9jLmMtMTYwNS0vKlxcbi0tXFxubW0venNtYWxsb2MuYz0xNjA5PXN0YXRpYyB2b2lkIGxvY2tfenNwYWdlKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTY0NS19XFxubW0venNtYWxsb2MuYzoxNjQ2OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcbm1tL3pzbWFsbG9jLmMtMTY0Ny1cXG5tbS96c21hbGxvYy5jOjE2NDg6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0venNtYWxsb2MuYy0xNjQ5LVxcbi0tXFxubW0venNtYWxsb2MuYz0yMjM3PXN0YXRpYyBpbnQgX19pbml0IHpzX2luaXQodm9pZClcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMjI0NC1cXG5tbS96c21hbGxvYy5jOjIyNDU6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0venNtYWxsb2MuYy0yMjQ2LVxcdHJjID0gc2V0X21vdmFibGVfb3BzKFxcdTAwMjZ6c21hbGxvY19tb3BzLCBQR1RZX3pzbWFsbG9jKTtcXG4tLVxcbm1tL3pzbWFsbG9jLmM9MjI1Nj1zdGF0aWMgdm9pZCBfX2V4aXQgenNfZXhpdCh2b2lkKVxcbm1tL3pzbWFsbG9jLmMtMjI1Ny17XFxubW0venNtYWxsb2MuYzoyMjU4OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3pzbWFsbG9jLmMtMjI1OS1cXHRzZXRfbW92YWJsZV9vcHMoTlVMTCwgUEdUWV96c21hbGxvYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDAzOjExOjE3LjI3NDQwMDQzMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTExMDc0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIEh1Z2UgUGFnZXM6IENvbmZpZ3MgYW5kIEtlcm5lbCBDb2RlKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgQ09NUEFDVElPTmAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkga25vdyB0aGVzZSBhcmUgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGxhcmdlIHBhZ2VzLiBTaW5jZSBJIGhhdmUgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgdGhlIGltbWVkaWF0ZSBmb2N1cywgSSdtIGdvaW5nIHRvIGhlYWQgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBzZWUgaG93IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgaW1wbGVtZW50ZWQuIEknbGwgb3BlbiB1cCBgbW0vaHVnZV9tZW1vcnkuY2Ag4oCTIHRoYXQncyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgaHVnZSBwYWdlIG1hbmFnZW1lbnQgd2lsbCBiZS4gSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgZW5hYmxlbWVudCBjaGVja3MsIGFsbG9jYXRpb24gc3RyYXRlZ2llcywgYW5kIGhvcGVmdWxseSwgc29tZSBjbHVlcyBhYm91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggY29tcGFjdGlvbiwgd2hpY2ggaXMgcHJvYmFibHkgcmVsYXRlZCB0byBmcmFnbWVudGluZyBtZW1vcnkuIEknbSBob3BpbmcgdGhpcyB3aWxsIHByb3ZpZGUgYW5zd2Vycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEyOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDAzOjExOjIwLjUyNTUxMjI0NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM4NDg2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU3NCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz01OT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy03NC0gKi9cXG5tbS9jb21wYWN0aW9uLmM6NzU6I2lmIGRlZmluZWQgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vY29tcGFjdGlvbi5jLTc2LSNkZWZpbmUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUlxcdEhQQUdFX1BNRF9PUkRFUlxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTc1PXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy03Ni17XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjc3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNzgtXFx0cG1kX3QgcG1kdmFsID0gcG1kcF9nZXQocG1kKTtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy05OS1cXHRmb2xpb19wdXQoZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxMDA6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDEtfVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE5ND1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMTUtXFx0XFx0fSBlbHNlIHtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjE2OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjE3LVxcdFxcdFxcdHBtZF90IHBtZCA9IHBtZHBfZ2V0KHB2bXcucG1kKTtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMjMtXFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMjQ6I2VuZGlmXFx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIyNS1cXHRcXHR9XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTM5Mj1zdGF0aWMgaW50IGRhbW9uX3lvdW5nX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTQwMC1cXG5tbS9kYW1vbi92YWRkci5jOjQwMTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZGFtb24vdmFkZHIuYy00MDItXFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHdhbGstXFx1MDAzZXZtYSk7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTQxOS1cXHR9XFxubW0vZGFtb24vdmFkZHIuYzo0MjA6I2VuZGlmXFx0LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGFtb24vdmFkZHIuYy00MjEtXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTY1OD1zdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNjY5LVxcbm1tL2RhbW9uL3ZhZGRyLmM6NjcwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kYW1vbi92YWRkci5jLTY3MS1cXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgd2Fsay1cXHUwMDNldm1hKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNjg3LVxcdH1cXG5tbS9kYW1vbi92YWRkci5jOjY4ODojZW5kaWZcXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kYW1vbi92YWRkci5jLTY4OS1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9ODE4PXN0YXRpYyBpbnQgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy04MjktXFxubW0vZGFtb24vdmFkZHIuYzo4MzA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RhbW9uL3ZhZGRyLmMtODMxLVxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgcHRlX2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTcyLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxNzM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xNzQtc3RhdGljIHZvaWQgX19pbml0IHBtZF9iYXNpY190ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzLCBpbnQgaWR4KVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQyMz1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNC0jZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NDI1OiNlbHNlICAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNi1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpIHsgfVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQzMT1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQzMjojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQzMy1cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz02NzE9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTY4Mi1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NjgzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNjg0LXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfcHJvdG5vbmVfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy02OTgtfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo2OTk6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzAwLXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfcHJvdG5vbmVfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjcwMTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTcwMi1cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03MTU9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9zd2FwX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03MzEtXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjczMjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTczMy1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz03NDk9c3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03NjctfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3Njg6I2Vsc2UgIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzY5LXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9NzcwPXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfbGVhZl9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo3NzE6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03NzItXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTAxPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTkwMy1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTA0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTA1LXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9OTU1PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTYtI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk1NzojZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTgtc3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTk1OT1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX3RocF90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTYwOiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTYxLVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTk4Nz1zdGF0aWMgdm9pZCBfX2luaXQgZGVzdHJveV9hcmdzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTg5LVxcdC8qIEZyZWUgKGh1Z2UpIHBhZ2UgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTkwOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTkxLVxcdCAgICBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05OTgtXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk5OTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTEwMDAtXFx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9MTE0Mz1zdGF0aWMgaW50IF9faW5pdCBpbml0X2FyZ3Moc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0xMjM5LVxcdCAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoxMjQwOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI0MS1cXHQgICAgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSgpKSB7XFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMTI1MC1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6MTI1MTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTEyNTItXFx0ICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7XFxuLS1cXG5tbS9maWxlbWFwLmM9MzMxND1zdGF0aWMgc3RydWN0IGZpbGUgKmRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9maWxlbWFwLmMtMzMyNi1cXHQvKiBVc2UgdGhlIHJlYWRhaGVhZCBjb2RlLCBldmVuIGlmIHJlYWRhaGVhZCBpcyBkaXNhYmxlZCAqL1xcbm1tL2ZpbGVtYXAuYzozMzI3OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgKHZtX2ZsYWdzIFxcdTAwMjYgVk1fSFVHRVBBR0UpKSB7XFxubW0vZmlsZW1hcC5jLTMzMjgtXFx0XFx0LypcXG4tLVxcbm1tL2d1cC5jPTcwMT1zdGF0aWMgc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2d1cC5jLTczNC1cXG5tbS9ndXAuYzo3MzU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2d1cC5jLTczNi1cXHRpZiAocG1kX3RyYW5zX2h1Z2UocG1kdmFsKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBGT0xMX1RPVUNIKSlcXG5tbS9ndXAuYy03MzctXFx0XFx0dG91Y2hfcG1kKHZtYSwgYWRkciwgcG1kLCBmbGFncyBcXHUwMDI2IEZPTExfV1JJVEUpO1xcbm1tL2d1cC5jOjczODojZW5kaWZcXHQvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9ndXAuYy03MzktXFxuLS1cXG5tbS9obW0uYz0xODE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGhtbV9wZm5fZmxhZ3Nfb3JkZXIodW5zaWduZWQgbG9uZyBvcmRlcilcXG4tLVxcbm1tL2htbS5jLTE4NS1cXG5tbS9obW0uYzoxODY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL2htbS5jLTE4Ny1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX3RvX2htbV9wZm5fZmxhZ3Moc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxuLS1cXG5tbS9obW0uYz0xOTc9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2htbS5jLTIyMC19XFxubW0vaG1tLmM6MjIxOiNlbHNlIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL2htbS5jLTIyMi0vKiBzdHViIHRvIGFsbG93IHRoZSBjb2RlIGJlbG93IHRvIGNvbXBpbGUgKi9cXG5tbS9obW0uYz0yMjM9aW50IGhtbV92bWFfaGFuZGxlX3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2htbS5jLTIyNC1cXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBobW1fcGZuc1tdLCBwbWRfdCBwbWQpO1xcbm1tL2htbS5jOjIyNTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vaG1tLmMtMjI2LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz02MD11bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzIF9fcmVhZF9tb3N0bHkgPVxcbm1tL2h1Z2VfbWVtb3J5LmM6NjE6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9odWdlX21lbW9yeS5jLTYyLVxcdCgxXFx1MDAzY1xcdTAwM2NUUkFOU1BBUkVOVF9IVUdFUEFHRV9GTEFHKXxcXG5tbS9odWdlX21lbW9yeS5jLTYzLSNlbmRpZlxcbm1tL2h1Z2VfbWVtb3J5LmM6NjQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vaHVnZV9tZW1vcnkuYy02NS1cXHQoMVxcdTAwM2NcXHUwMDNjVFJBTlNQQVJFTlRfSFVHRVBBR0VfUkVRX01BRFZfRkxBRyl8XFxuLS1cXG5tbS9rc20uYz0yNDk0PXN0YXRpYyBpbnQga3NtX25leHRfcGFnZV9wbWRfZW50cnkocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9rc20uYy0yNTE0LVxcbm1tL2tzbS5jOjI1MTU6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBwbWRfbGVhZihwbWQpKSB7XFxubW0va3NtLmMtMjUxNi1cXHRcXHRwdGwgPSBwbWRfbG9jayhtbSwgcG1kcCk7XFxuLS1cXG5tbS9tYWR2aXNlLmM9MzU0PXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuLS1cXG5tbS9tYWR2aXNlLmMtMzc2LVxcbm1tL21hZHZpc2UuYzozNzc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21hZHZpc2UuYy0zNzgtXFx0aWYgKHBtZF90cmFuc19odWdlKCpwbWQpKSB7XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxOT1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTM5LSNlbmRpZlxcbm1tL21hZHZpc2UuYzoxNTQwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9tYWR2aXNlLmMtMTU0MS1cXHRjYXNlIE1BRFZfSFVHRVBBR0U6XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTg2Nj1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnMV9zdGF0c1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4NjgtXFx0TlJfQU5PTl9NQVBQRUQsXFxubW0vbWVtY29udHJvbC12MS5jOjE4Njk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODcwLVxcdE5SX0FOT05fVEhQUyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xODg0PXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZW1jZzFfc3RhdF9uYW1lc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4ODYtXFx0XFxcInJzc1xcXCIsXFxubW0vbWVtY29udHJvbC12MS5jOjE4ODc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODg4LVxcdFxcXCJyc3NfaHVnZVxcXCIsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTUzPXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3NC0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NTc1OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9tZW1jb250cm9sLmMtNTc2LVxcdFRIUF9GQVVMVF9BTExPQyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTU2Ny0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6MTU2ODojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtY29udHJvbC5jLTE1NjktXFx0eyBcXFwiYW5vbl90aHBcXFwiLFxcdFxcdFxcdE5SX0FOT05fVEhQU1xcdFxcdFxcdH0sXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTY3OT1zdGF0aWMgaW50IGNoZWNrX2h3cG9pc29uZWRfZW50cnkocHRlX3QgcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHNob3J0IHNoaWZ0LFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy03MDMtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzo3MDQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtNzA1LXN0YXRpYyBpbnQgY2hlY2tfaHdwb2lzb25lZF9wbWRfZW50cnkocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS5jPTQwNjc9c3RhdGljIHZtX2ZhdWx0X3Qgd3BfcGFnZV9zaGFyZWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9tZW1vcnkuYy00MTA2LVxcbm1tL21lbW9yeS5jOjQxMDc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbW9yeS5jLTQxMDgtc3RhdGljIGJvb2wgX193cF9jYW5fcmV1c2VfbGFyZ2VfYW5vbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWVtb3J5LmMtNDE3Mi19XFxubW0vbWVtb3J5LmM6NDE3MzojZWxzZSAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vbWVtb3J5LmMtNDE3NC1zdGF0aWMgYm9vbCBfX3dwX2Nhbl9yZXVzZV9sYXJnZV9hbm9uX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1vcnkuYy00MTc4LX1cXG5tbS9tZW1vcnkuYzo0MTc5OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9tZW1vcnkuYy00MTgwLVxcbm1tL21lbW9yeS5jPTQxODE9c3RhdGljIGJvb2wgd3BfY2FuX3JldXNlX2Fub25fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbW9yeS5jLTQxODMte1xcbm1tL21lbW9yeS5jOjQxODQ6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcXG5tbS9tZW1vcnkuYy00MTg1LVxcdFxcdHJldHVybiBfX3dwX2Nhbl9yZXVzZV9sYXJnZV9hbm9uX2ZvbGlvKGZvbGlvLCB2bWEpO1xcbi0tXFxubW0vbWVtb3J5LmM9NDU4NT1zdGF0aWMgdm1fZmF1bHRfdCBoYW5kbGVfcHRlX21hcmtlcihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ2MTEtXFxubW0vbWVtb3J5LmM6NDYxMjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vbWVtb3J5LmMtNDYxMy0vKlxcbi0tXFxubW0vbWVtb3J5LmM9NDY2MT1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aHBfc3dhcGluX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ3MjAtfVxcbm1tL21lbW9yeS5jOjQ3MjE6I2Vsc2UgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL21lbW9yeS5jLTQ3MjItc3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00NzI1LX1cXG5tbS9tZW1vcnkuYzo0NzI2OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9tZW1vcnkuYy00NzI3LVxcbi0tXFxubW0vbWVtb3J5LmM9NTE2MT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTE2My1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cXHUwMDNldm1hO1xcbm1tL21lbW9yeS5jOjUxNjQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbW9yeS5jLTUxNjUtXFx0dW5zaWduZWQgbG9uZyBvcmRlcnM7XFxuLS1cXG5tbS9tZW1vcnkuYz01Mzk4PXN0YXRpYyB2bV9mYXVsdF90IF9fZG9fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01NDUzLVxcbm1tL21lbW9yeS5jOjU0NTQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21lbW9yeS5jLTU0NTUtc3RhdGljIHZvaWQgZGVwb3NpdF9wcmVhbGxvY19wdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYz02MjQyPXN0YXRpYyB2bV9mYXVsdF90IGNyZWF0ZV9odWdlX3B1ZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9tZW1vcnkuYy02MjQzLXtcXG5tbS9tZW1vcnkuYzo2MjQ0OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXFxcXFxubW0vbWVtb3J5LmMtNjI0NS1cXHRkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxcbi0tXFxubW0vbWVtb3J5LmMtNjI1MS1cXHRcXHRyZXR1cm4gdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWh1Z2VfZmF1bHQodm1mLCBQVURfT1JERVIpO1xcbm1tL21lbW9yeS5jOjYyNTI6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL21lbW9yeS5jLTYyNTMtXFx0cmV0dXJuIFZNX0ZBVUxUX0ZBTExCQUNLO1xcbi0tXFxubW0vbWVtb3J5LmM9NjI1Nj1zdGF0aWMgdm1fZmF1bHRfdCB3cF9odWdlX3B1ZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgcHVkX3Qgb3JpZ19wdWQpXFxubW0vbWVtb3J5LmMtNjI1Ny17XFxubW0vbWVtb3J5LmM6NjI1ODojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFx0XFxcXFxcbm1tL21lbW9yeS5jLTYyNTktXFx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG4tLVxcbm1tL21lbW9yeS5jLTYyNzUtXFx0X19zcGxpdF9odWdlX3B1ZCh2bWEsIHZtZi1cXHUwMDNlcHVkLCB2bWYtXFx1MDAzZWFkZHJlc3MpO1xcbm1tL21lbW9yeS5jOjYyNzY6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xcbm1tL21lbW9yeS5jLTYyNzctXFx0cmV0dXJuIFZNX0ZBVUxUX0ZBTExCQUNLO1xcbi0tXFxubW0vbWVtb3J5LmM9NzI5ND1FWFBPUlRfU1lNQk9MKF9fbWlnaHRfZmF1bHQpO1xcbi0tXFxubW0vbWVtb3J5LmMtNzI5Ni1cXG5tbS9tZW1vcnkuYzo3Mjk3OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHwgZGVmaW5lZChDT05GSUdfSFVHRVRMQkZTKVxcbm1tL21lbW9yeS5jLTcyOTgtLypcXG4tLVxcbm1tL21lbW9yeS5jPTc0ODU9bG9uZyBjb3B5X2ZvbGlvX2Zyb21fdXNlcihzdHJ1Y3QgZm9saW8gKmRzdF9mb2xpbyxcXG4tLVxcbm1tL21lbW9yeS5jLTc1MTQtfVxcbm1tL21lbW9yeS5jOjc1MTU6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSB8fCBDT05GSUdfSFVHRVRMQkZTICovXFxubW0vbWVtb3J5LmMtNzUxNi1cXG4tLVxcbm1tL21lbXBvbGljeS5jPTI0NDU9c3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19tcG9sKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjQ1NS1cXG5tbS9tZW1wb2xpY3kuYzoyNDU2OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1wb2xpY3kuYy0yNDU3LVxcdCAgICAvKiBmaWx0ZXIgXFxcImh1Z2VwYWdlXFxcIiBhbGxvY2F0aW9uLCB1bmxlc3MgZnJvbSBhbGxvY19wYWdlcygpICovXFxuLS1cXG5tbS9taWdyYXRlLmM9MTU4MD1zdGF0aWMgaW5saW5lIGludCB0cnlfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE1OTgtXFxubW0vbWlncmF0ZS5jOjE1OTk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL21pZ3JhdGUuYy0xNjAwLSNkZWZpbmUgTlJfTUFYX0JBVENIRURfTUlHUkFUSU9OXFx0SFBBR0VfUE1EX05SXFxuLS1cXG5tbS9tbWFwLmM9ODEzPV9fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXFxuLS1cXG5tbS9tbWFwLmMtODQ0LVxcdFxcdGFkZHIgPSBnZXRfYXJlYShmaWxlLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyk7XFxubW0vbW1hcC5jOjg0NTpcXHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiAhZmlsZVxcbm1tL21tYXAuYy04NDYtXFx0XFx0ICAgXFx1MDAyNlxcdTAwMjYgIWFkZHIgLyogbm8gaGludCAqL1xcbi0tXFxubW0vbXJlbWFwLmM9NDcwPXN0YXRpYyBpbmxpbmUgYm9vbCBtb3ZlX25vcm1hbF9wdWQoc3RydWN0IHBhZ2V0YWJsZV9tb3ZlX2NvbnRyb2wgKnBtYyxcXG4tLVxcbm1tL21yZW1hcC5jLTQ3Ni1cXG5tbS9tcmVtYXAuYzo0Nzc6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxcbm1tL21yZW1hcC5jLTQ3OC1zdGF0aWMgYm9vbCBtb3ZlX2h1Z2VfcHVkKHN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sICpwbWMsXFxuLS1cXG5tbS9tcmVtYXAuYz01OTY9c3RhdGljIGJvb2wgbW92ZV9wZ3RfZW50cnkoc3RydWN0IHBhZ2V0YWJsZV9tb3ZlX2NvbnRyb2wgKnBtYyxcXG4tLVxcbm1tL21yZW1hcC5jLTYxMy1cXHRjYXNlIEhQQUdFX1BNRDpcXG5tbS9tcmVtYXAuYzo2MTQ6XFx0XFx0bW92ZWQgPSBJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tcmVtYXAuYy02MTUtXFx0XFx0XFx0bW92ZV9odWdlX3BtZChwbWMtXFx1MDAzZW9sZCwgcG1jLVxcdTAwM2VvbGRfYWRkciwgcG1jLVxcdTAwM2VuZXdfYWRkciwgb2xkX2VudHJ5LFxcbi0tXFxubW0vbXJlbWFwLmMtNjE4LVxcdGNhc2UgSFBBR0VfUFVEOlxcbm1tL21yZW1hcC5jOjYxOTpcXHRcXHRtb3ZlZCA9IElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21yZW1hcC5jLTYyMC1cXHRcXHRcXHRtb3ZlX2h1Z2VfcHVkKHBtYywgb2xkX2VudHJ5LCBuZXdfZW50cnkpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTY1MT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvcmRlcl90b19waW5kZXgoaW50IG1pZ3JhdGV0eXBlLCBpbnQgb3JkZXIpXFxubW0vcGFnZV9hbGxvYy5jLTY1Mi17XFxubW0vcGFnZV9hbGxvYy5jOjY1MzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKSB7XFxubW0vcGFnZV9hbGxvYy5jLTY1NC1cXHRcXHRib29sIG1vdmFibGUgPSBtaWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEU7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NjYzPXN0YXRpYyBpbmxpbmUgaW50IHBpbmRleF90b19vcmRlcih1bnNpZ25lZCBpbnQgcGluZGV4KVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTY2Ni1cXG5tbS9wYWdlX2FsbG9jLmM6NjY3OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpIHtcXG5tbS9wYWdlX2FsbG9jLmMtNjY4LVxcdFxcdGlmIChwaW5kZXggXFx1MDAzZT0gTlJfTE9XT1JERVJfUENQX0xJU1RTKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTY3NT1zdGF0aWMgaW5saW5lIGJvb2wgcGNwX2FsbG93ZWRfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTY3OC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS9wYWdlX2FsbG9jLmM6Njc5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9wYWdlX2FsbG9jLmMtNjgwLVxcdGlmIChpc19wbWRfb3JkZXIob3JkZXIpKVxcbi0tXFxubW0vcGFnZV9pZGxlLmM9NTI9c3RhdGljIGJvb2wgcGFnZV9pZGxlX2NsZWFyX3B0ZV9yZWZzX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcGFnZV9pZGxlLmMtNzItXFx0XFx0XFx0cmVmZXJlbmNlZCB8PSBtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgYWRkciArIFBBR0VfU0laRSk7XFxubW0vcGFnZV9pZGxlLmM6NzM6XFx0XFx0fSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpIHtcXG5tbS9wYWdlX2lkbGUuYy03NC1cXHRcXHRcXHRwbWRfdCBwbWR2YWwgPSBwbWRwX2dldChwdm13LnBtZCk7XFxuLS1cXG5tbS9wYWdlX2lvLmM9MzA1PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9zd3BvdXRfdm1fZXZlbnQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9wYWdlX2lvLmMtMzA2LXtcXG5tbS9wYWdlX2lvLmM6MzA3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9wYWdlX2lvLmMtMzA4LVxcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbykpKSB7XFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz05Nz1wdGVfdCBwdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0xMDgtXFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MTA5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0xMTAtXFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz0yNTA9dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpXFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yNTctI2VuZGlmIC8qIHB0ZV9mcmVlX2RlZmVyICovXFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MjU4OiNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yNTktXFxuLS1cXG5tbS9ybWFwLmM9OTE3PXN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9ybWFwLmMtOTg2LVxcdFxcdFxcdFxcdHJlZmVyZW5jZWQrKztcXG5tbS9ybWFwLmM6OTg3OlxcdFxcdH0gZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKSB7XFxubW0vcm1hcC5jLTk4OC1cXHRcXHRcXHRpZiAocG1kcF9jbGVhcl9mbHVzaF95b3VuZ19ub3RpZnkodm1hLCBhZGRyZXNzLFxcbi0tXFxubW0vcm1hcC5jPTExMDM9c3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuLS1cXG5tbS9ybWFwLmMtMTE0My1cXHRcXHR9IGVsc2Uge1xcbm1tL3JtYXAuYzoxMTQ0OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9ybWFwLmMtMTE0NS1cXHRcXHRcXHRwbWRfdCAqcG1kID0gcHZtdy1cXHUwMDNlcG1kO1xcbi0tXFxubW0vcm1hcC5jPTE2MTY9dm9pZCBmb2xpb19hZGRfYW5vbl9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3JtYXAuYy0xNjE4LXtcXG5tbS9ybWFwLmM6MTYxOTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vcm1hcC5jLTE2MjAtXFx0X19mb2xpb19hZGRfYW5vbl9ybWFwKGZvbGlvLCBwYWdlLCBIUEFHRV9QTURfTlIsIHZtYSwgYWRkcmVzcywgZmxhZ3MsXFxuLS1cXG5tbS9ybWFwLmM9MTc0NT12b2lkIGZvbGlvX2FkZF9maWxlX3JtYXBfcG1kKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcm1hcC5jLTE3NDcte1xcbm1tL3JtYXAuYzoxNzQ4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9ybWFwLmMtMTc0OS1cXHRfX2ZvbGlvX2FkZF9maWxlX3JtYXAoZm9saW8sIHBhZ2UsIEhQQUdFX1BNRF9OUiwgdm1hLCBQR1RBQkxFX0xFVkVMX1BNRCk7XFxuLS1cXG5tbS9ybWFwLmM9MTc2NT12b2lkIGZvbGlvX2FkZF9maWxlX3JtYXBfcHVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcm1hcC5jLTE3Njcte1xcbm1tL3JtYXAuYzoxNzY4OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbm1tL3JtYXAuYy0xNzY5LVxcdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXFxuLS1cXG5tbS9ybWFwLmM9MTkxMz12b2lkIGZvbGlvX3JlbW92ZV9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3JtYXAuYy0xOTE1LXtcXG5tbS9ybWFwLmM6MTkxNjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vcm1hcC5jLTE5MTctXFx0X19mb2xpb19yZW1vdmVfcm1hcChmb2xpbywgcGFnZSwgSFBBR0VfUE1EX05SLCB2bWEsIFBHVEFCTEVfTEVWRUxfUE1EKTtcXG4tLVxcbm1tL3JtYXAuYz0xOTMzPXZvaWQgZm9saW9fcmVtb3ZlX3JtYXBfcHVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcm1hcC5jLTE5MzUte1xcbm1tL3JtYXAuYzoxOTM2OiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbm1tL3JtYXAuYy0xOTM3LVxcdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXFxuLS1cXG5tbS9zaG1lbS5jPTExMz1zdHJ1Y3Qgc2htZW1fb3B0aW9ucyB7XFxuLS1cXG5tbS9zaG1lbS5jLTEzNi1cXG5tbS9zaG1lbS5jOjEzNzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vc2htZW0uYy0xMzgtc3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZV9zaG1lbV9vcmRlcnNfYWx3YXlzIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5tbS9zaG1lbS5jPTUyMD1zdGF0aWMgaW50IHNobWVtX2NvbmZpcm1fc3dhcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtNTY4LVxcbm1tL3NobWVtLmM6NTY5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTU3MC0vKiBpZmRlZiBoZXJlIHRvIGF2b2lkIGJsb2F0aW5nIHNobWVtLm8gd2hlbiBub3QgbmVjZXNzYXJ5ICovXFxubW0vc2htZW0uYy01NzEtXFxubW0vc2htZW0uYzo1NzI6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVIpXFxubW0vc2htZW0uYy01NzMtI2RlZmluZSBTSE1FTV9IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9ORVZFUlxcbm1tL3NobWVtLmM6NTc0OiNlbGlmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTKVxcbm1tL3NobWVtLmMtNTc1LSNkZWZpbmUgU0hNRU1fSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfQUxXQVlTXFxubW0vc2htZW0uYzo1NzY6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRSlcXG5tbS9zaG1lbS5jLTU3Ny0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vc2htZW0uYzo1Nzg6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0UpXFxubW0vc2htZW0uYy01NzktI2RlZmluZSBTSE1FTV9IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BRFZJU0VcXG4tLVxcbm1tL3NobWVtLmM9NTg0PXN0YXRpYyBpbnQgc2htZW1faHVnZSBfX3JlYWRfbW9zdGx5ID0gU0hNRU1fSFVHRV9ERUZBVUxUO1xcbi0tXFxubW0vc2htZW0uYy01ODctXFxubW0vc2htZW0uYzo1ODg6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVIpXFxubW0vc2htZW0uYy01ODktI2RlZmluZSBUTVBGU19IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9ORVZFUlxcbm1tL3NobWVtLmM6NTkwOiNlbGlmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTKVxcbm1tL3NobWVtLmMtNTkxLSNkZWZpbmUgVE1QRlNfSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfQUxXQVlTXFxubW0vc2htZW0uYzo1OTI6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRSlcXG5tbS9zaG1lbS5jLTU5My0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vc2htZW0uYzo1OTQ6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0UpXFxubW0vc2htZW0uYy01OTUtI2RlZmluZSBUTVBGU19IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BRFZJU0VcXG4tLVxcbm1tL3NobWVtLmM9ODQ1PXN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5tbS9zaG1lbS5jLTg1MC19XFxubW0vc2htZW0uYzo4NTE6I2Vsc2UgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL3NobWVtLmMtODUyLVxcbi0tXFxubW0vc2htZW0uYz04NjE9c3RhdGljIHVuc2lnbmVkIGludCBzaG1lbV9odWdlX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9zaG1lbS5jLTg2Ny19XFxubW0vc2htZW0uYzo4Njg6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL3NobWVtLmMtODY5LVxcbi0tXFxubW0vc2htZW0uYz0xNTkxPWludCBzaG1lbV93cml0ZW91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9pb2NiICoqcGx1ZyxcXG4tLVxcbm1tL3NobWVtLmMtMTYzMy1cXG5tbS9zaG1lbS5jOjE2MzQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtMTYzNS1cXHRcXHRpZiAob3JkZXIgXFx1MDAzZT0gSFBBR0VfUE1EX09SREVSKSB7XFxuLS1cXG5tbS9zaG1lbS5jPTE3Nzg9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcGluX2NsdXN0ZXIoc3dwX2VudHJ5X3Qgc3dhcCwgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vc2htZW0uYy0xNzkxLVxcbm1tL3NobWVtLmM6MTc5MjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vc2htZW0uYy0xNzkzLWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZClcXG4tLVxcbm1tL3NobWVtLmM9MTg5MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5tbS9zaG1lbS5jLTE4OTYtfVxcbm1tL3NobWVtLmM6MTg5NzojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vc2htZW0uYy0xODk4LVxcbi0tXFxubW0vc2htZW0uYz0xOTEzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX2FsbG9jX2FuZF9hZGRfZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5tbS9zaG1lbS5jLTE5MjQtXFxubW0vc2htZW0uYzoxOTI1OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxcbm1tL3NobWVtLmMtMTkyNi1cXHRcXHRvcmRlcnMgPSAwO1xcbi0tXFxubW0vc2htZW0uYz0yMDYzPXN0YXRpYyBpbnQgc2htZW1fcmVwbGFjZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGdmcF90IGdmcCxcXG4tLVxcbm1tL3NobWVtLmMtMjA3Ny1cXHRnZnAgXFx1MDAyNj0gfkdGUF9DT05TVFJBSU5UX01BU0s7XFxubW0vc2htZW0uYzoyMDc4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTIwNzktXFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2UgMSkge1xcbi0tXFxubW0vc2htZW0uYz0yNzE0PXVuc2lnbmVkIGxvbmcgc2htZW1fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5tbS9zaG1lbS5jLTI3MjktXFxubW0vc2htZW0uYzoyNzMwOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxcbm1tL3NobWVtLmMtMjczMS1cXHRcXHRyZXR1cm4gYWRkcjtcXG4tLVxcbm1tL3NobWVtLmMtMjc3My1cXHRcXHRcXHQgKi9cXG5tbS9zaG1lbS5jOjI3NzQ6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtMjc3NS1cXHRcXHRcXHRocGFnZV9vcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfYWx3YXlzKTtcXG4tLVxcbm1tL3NobWVtLmM9NDUwNz1zdGF0aWMgaW50IHNobWVtX3BhcnNlX29uZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbi0tXFxubW0vc2htZW0uYy00NTc2LVxcdFxcdGlmIChjdHgtXFx1MDAzZWh1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUiBcXHUwMDI2XFx1MDAyNlxcbm1tL3NobWVtLmM6NDU3NzpcXHRcXHQgICAgIShJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9zaG1lbS5jLTQ1NzgtXFx0XFx0ICAgICAgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpKVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwMzoxMToyMC43NDkzNzcxMzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzAxMTc2MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZmV3IGtleSBhcmVhcyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtOiBgbW0vY29tcGFjdGlvbi5jYCwgYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vaW50ZXJuYWwuaGAsIGFuZCBgbW0vcGFnZV9hbGxvYy5jYC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBmdW5jdGlvbnMgd2l0aGluIHRoZXNlIGZpbGVzLiBJbiBgbW0vY29tcGFjdGlvbi5jYCwgSSBzZWUgY2hhbmdlcyB0byBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgLCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AsIGFuZCBgY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZgLiBgbW0vaHVnZV9tZW1vcnkuY2AgaGFzIGNoYW5nZXMgdG8gYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgLiBgbW0vaW50ZXJuYWwuaGAgc2VlcyBhIG1vZGlmaWNhdGlvbiB0byBgcHJlcF9jb21wb3VuZF90YWlsYC4gRmluYWxseSwgYG1tL3BhZ2VfYWxsb2MuY2AgaGFzIGJlZW4gdXBkYXRlZCB3aXRoIGNoYW5nZXMgdG8gYF9fZnJlZV9wYWdlc19wcmVwYXJlYC5cblxuVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBmdW5jdGlvbmFsOyB0aGV5J3JlIHJlbW92aW5nIGBzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIG9yZGVyKWAgY2FsbHMgZm9yIGZyZWUgYW5kIHRhaWwgcGFnZXMuIFRoZW4gdGhleSdyZSBhZGRpbmcgY2hlY2tzIHRvIGNvbmZpcm0gdGhhdCBgcGFnZS1cdTAwM2Vwcml2YXRlYCBpcyAwLCBpbXBseWluZyBhIHJlbGlhbmNlIG9uIHRoaXMgdmFsdWUgZm9yIGVpdGhlciBjb250cm9sIG9yIHN0YXRlLlxuXG5MZXQncyBkaXZlIGludG8gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSBgX19zcGxpdF9mb2xpb190b19vcmRlcmAuIFRoaXMgaXMgd2hlcmUgdGhlIGltcGFjdCB3aWxsIGJlIG1vc3QgaW50ZXJlc3RpbmcuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBjb21wb3VuZCBwYWdlcyBhbmQgdGhlIGZyZWVpbmcgcGF0aC4gSSdtIGxvb2tpbmcgZm9yIGhvdyB0aGlzIGNoYW5nZSBpbXBhY3RzIGNvYWxlc2NpbmcsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgcmVsYXRlZCB0byB0aGUgcGFnZSBjYWNoZSBvciBtZW1vcnkgcmVjbGFpbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDM6MTE6MjUuNDUwNTU3Mjc5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTU5ODUxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NwbGl0X2ZvbGlvX3RvX29yZGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTM1MTU9c3RhdGljIGJvb2wgcGFnZV9yYW5nZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzUyNi0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjM1Mjc6c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzUyOC1cXHRcXHRpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNjY2LSAqIDEuIHVuaWZvcm0gc3BsaXQ6IEB4YXMgaXMgc3BsaXQgd2l0aCBubyBleHBlY3RhdGlvbiBvZiBmYWlsdXJlIGFuZCBhIHNpbmdsZVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzY2NzogKiAgICBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKCkgaXMgY2FsbGVkIHRvIHNwbGl0IHRoZSBAZm9saW8gaW50byBAbmV3X29yZGVyXFxubW0vaHVnZV9tZW1vcnkuYy0zNjY4LSAqICAgIGFsb25nIHdpdGggc3RhdHMgdXBkYXRlLlxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY2OS0gKiAyLiBub24tdW5pZm9ybSBzcGxpdDogZm9saW9fb3JkZXIgLSBAbmV3X29yZGVyIGNhbGxzIHRvXFxubW0vaHVnZV9tZW1vcnkuYzozNjcwOiAqICAgIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoKSBhcmUgZXhwZWN0ZWQgdG8gYmUgbWFkZSBpbiBhIGZvciBsb29wIHRvIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYy0zNjcxLSAqICAgIHRoZSBAZm9saW8gdG8gb25lIGxvd2VyIG9yZGVyIGF0IGEgdGltZS4gVGhlIGZvbGlvIGNvbnRhaW5pbmcgQHNwbGl0X2F0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM2ODM9c3RhdGljIGludCBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM3MjgtXFx0XFx0cGdhbGxvY190YWdfc3BsaXQoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MzcyOTpcXHRcXHRfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcXG5tbS9odWdlX21lbW9yeS5jLTM3MzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDAzOjExOjI1LjYwMDE2NjkxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTU1NDc2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEZvbGlvIFNwbGl0dGluZyBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdyBoZXJlLiBJdCBsb29rcyBsaWtlIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCBpcyBiZWluZyBpbnZva2VkIGJ5IHRoZSBgX19zcGxpdF91bm1hcHBlZF9mb2xpb2AgZnVuY3Rpb24uIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCBiZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gdGhlIHJhYmJpdCBob2xlIG9mIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYCwgSSBzaG91bGQgcHJvYmFibHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCB0aGF0J3MgKnRyaWdnZXJpbmcqIGl0LiBUaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIHRvIGRpZyBpbnRvIGBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvYC4gVW5kZXJzdGFuZGluZyAqd2h5KiB3ZSdyZSBzcGxpdHRpbmcgdW5tYXBwZWQgZm9saW9zIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIGxvZ2ljIG9mIHRoZSBzZWNvbmRhcnkgc3BsaXQgZnVuY3Rpb24uIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTY5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDM6MTE6MjguNzU1NzE4ODI5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkzNDM1MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zcGxpdF91bm1hcHBlZF9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zNTI3PXN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY0Mi0vKipcXG5tbS9odWdlX21lbW9yeS5jOjM2NDM6ICogX19zcGxpdF91bm1hcHBlZF9mb2xpbygpIC0gc3BsaXRzIGFuIHVubWFwcGVkIEBmb2xpbyB0byBsb3dlciBvcmRlciBmb2xpb3MgaW5cXG5tbS9odWdlX21lbW9yeS5jLTM2NDQtICogdHdvIHdheXM6IHVuaWZvcm0gc3BsaXQgb3Igbm9uLXVuaWZvcm0gc3BsaXQuXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM2ODItICovXFxubW0vaHVnZV9tZW1vcnkuYzozNjgzOnN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY4NC1cXHRcXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zODEwPXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM4ODMtXFxubW0vaHVnZV9tZW1vcnkuYzozODg0OlxcdFxcdHJldCA9IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIHhhcyxcXG5tbS9odWdlX21lbW9yeS5jLTM4ODUtXFx0XFx0XFx0XFx0XFx0ICAgICBtYXBwaW5nLCBzcGxpdF90eXBlKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk3My0gKlxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk3NDogKiBJdCBjYWxscyBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKCkgdG8gcGVyZm9ybSB1bmlmb3JtIGFuZCBub24tdW5pZm9ybSBzcGxpdC5cXG5tbS9odWdlX21lbW9yeS5jLTM5NzUtICogSXQgaXMgaW4gY2hhcmdlIG9mIGNoZWNraW5nIHdoZXRoZXIgdGhlIHNwbGl0IGlzIHN1cHBvcnRlZCBvciBub3QgYW5kXFxubW0vaHVnZV9tZW1vcnkuYzozOTc2OiAqIHByZXBhcmluZyBAZm9saW8gZm9yIF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oKS5cXG5tbS9odWdlX21lbW9yeS5jLTM5NzctICpcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mzk4Nj1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDA2OC1cXHRcXHQvKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDA2OTpcXHRcXHQgKl9fc3BsaXRfdW5tYXBwZWRfZm9saW8oKSBtYXkgbmVlZCB0byB0cmltIG9mZiBwYWdlcyBiZXlvbmRcXG5tbS9odWdlX21lbW9yeS5jLTQwNzAtXFx0XFx0ICogRU9GOiBidXQgb24gMzItYml0LCBpX3NpemVfcmVhZCgpIHRha2VzIGFuIGlycS11bnNhZmVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDM6MTE6MjguOTI1MDgxNDEyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTQ2NTIyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERhdGEgU3BsaXR0aW5nIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgX19mb2xpb19zcGxpdGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIHRyYWNlIHRoaXMgYmFjayBhbmQgdW5kZXJzdGFuZCB0aGUgd2hvbGUgY2FsbCBzdGFjayBhbmQgdGhlIGRhdGEgZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHRyaWdnZXJpbmcgYF9fZm9saW9fc3BsaXRgIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gIEknbGwgZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLiAgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgaGFuZGxpbmcgdGhlIGxvZ2ljIGZvciB0YWtpbmcgYSB2ZXJ5IGxhcmdlIFwicGFnZVwiIG9mIGRhdGEgYW5kIGJyZWFraW5nIGl0IGRvd24gaW50byBhIG1vcmUgbWFuYWdlYWJsZSwgb3JkZXJlZCBsaXN0IG9mIHNtYWxsZXIgc2VnbWVudHMuIFVuZGVyc3RhbmRpbmcgdGhlIGFsZ29yaXRobSB1c2VkIGhlcmUgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB3aHkgaXQncyBjYWxsaW5nIGBfX2ZvbGlvX3NwbGl0YC4gSXMgaXQgYSBwYXJ0aXRpb25pbmcgc3RyYXRlZ3ksIGEgYmxvY2sgZGVjb21wb3NpdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/ICBLbm93aW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgYW5kIHRoZSBvcmRlcmluZyByZXF1aXJlbWVudHMgd2lsbCBiZSBrZXkgdG8gbWFraW5nIHNlbnNlIG9mIGBfX2ZvbGlvX3NwbGl0YCdzIHB1cnBvc2Ugd2l0aGluIHRoaXMgd29ya2Zsb3cuIEkgYW50aWNpcGF0ZSB0aGF0IGBfX2ZvbGlvX3NwbGl0YCB3aWxsIGJlIHBlcmZvcm1pbmcgdGhlIGFjdHVhbCBzcGxpdHRpbmcgb3BlcmF0aW9uLCBidXQgSSBuZWVkIHRvIHNlZSBob3cgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCBpcyBzZXR0aW5nIHVwIHRoZSBwYXJhbWV0ZXJzIGFuZCBjb250cm9sbGluZyB0aGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5NzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwMzoxMTozMi40MTk3MzgxMzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTAwMDUzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz00MTc4PWludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjQ0LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI0NTppbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG5tbS9odWdlX21lbW9yeS5jLTQyNDYtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjYyLSAqIEl0IGhhcyB0aGUgc2FtZSBwcmVyZXF1aXNpdGVzIGFuZCByZXR1cm5zIGFzXFxubW0vaHVnZV9tZW1vcnkuYzo0MjYzOiAqIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKCkuXFxubW0vaHVnZV9tZW1vcnkuYy00MjY0LSAqXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQzMTI9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5tbS9odWdlX21lbW9yeS5jLTQzMTMte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDMxNDpcXHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBsaXN0LCAwKTtcXG5tbS9odWdlX21lbW9yeS5jLTQzMTUtfVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTk4PXN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY2Ny1cXHRcXHQvKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDY2ODpcXHRcXHQgKiBGb3IgZm9saW9zIHdpdGggcHJpdmF0ZSwgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY2OS1cXHRcXHQgKiB3aWxsIHRyeSB0byBkcm9wIGl0IGJlZm9yZSBzcGxpdCBhbmQgdGhlbiBjaGVjayBpZiB0aGUgZm9saW9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDM6MTE6MzIuNjY0NzQ5NTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5ODU5NTY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvcmUgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYC4gSXQncyBhIHB1YmxpYyBBUEksIHNvIGl0J3MgYSBjcml0aWNhbCBlbnRyeSBwb2ludC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zIHRoYXQgbGlrZWx5IGRyaXZlIGl0cyBiZWhhdmlvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIGZsb3cuIFRoZSBrZXkgc3ltYm9scyB0aGF0IHNlZW0gcmVsZXZhbnQgYXJlOiBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgLCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AsIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAsIGFuZCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAuIFRoZXNlIGZlZWwgbGlrZSB0aGUgZ3V0cyBvZiB0aGUgb3BlcmF0aW9uLCB0aGUgbG93LWxldmVsIGJ1aWxkaW5nIGJsb2Nrcy5cblxuV2FpdCBhIHNlY29uZC4uLkkganVzdCBjYXVnaHQgdGhhdCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWlnaHQgcHJlc2VudCBzb21lIGludGVyZXN0aW5nIGNoYWxsZW5nZXMgZm9yIHRlc3Rpbmcgb3IgcG90ZW50aWFsIGZ1dHVyZSBtb2RpZmljYXRpb25zLiBHaXZlbiBpdHMgc3RhdHVzLCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB3b3VsZCBiZSB0byBkcmlsbCBkb3duIGludG8gdGhlIGludGVybmFscyBvZiBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgIGFuZCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AuIFRoZXkncmUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGhleSdyZSBsaWtlbHkgdGhlIG9uZXMgZGlyZWN0bHkgaGFuZGxpbmcgdGhlIGZvbGlvIGlzb2xhdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHB1YmxpYyBBUEksIGJ1dCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAgY291bGQgcG90ZW50aWFsbHkgcGVyZm9ybSB0aGUgdW5kZXJseWluZyBsb2dpYy4gU28gSSdsbCBuZWVkIHRvIGdvIGRlZXBlciBpbnRvIHRob3NlIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3MzgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDM6MTE6MzYuNjYzMzQ5ODEzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2ODcyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NvbXBhY3Rpb24uYz01NTE9c3RhdGljIGJvb2wgY29tcGFjdF91bmxvY2tfc2hvdWxkX2Fib3J0KHNwaW5sb2NrX3QgKmxvY2ssXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtNTczLSAqL1xcbm1tL2NvbXBhY3Rpb24uYzo1NzQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXFxubW0vY29tcGFjdGlvbi5jLTU3NS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpzdGFydF9wZm4sXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9NzEyPWlzb2xhdGVfZnJlZXBhZ2VzX3JhbmdlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTcyOS1cXHRcXHRcXHRcXHRibG9ja19lbmRfcGZuICs9IHBhZ2VibG9ja19ucl9wYWdlcykge1xcbm1tL2NvbXBhY3Rpb24uYzo3MzA6XFx0XFx0LyogUHJvdGVjdCBwZm4gZnJvbSBjaGFuZ2luZyBieSBpc29sYXRlX2ZyZWVwYWdlc19ibG9jayAqL1xcbm1tL2NvbXBhY3Rpb24uYy03MzEtXFx0XFx0dW5zaWduZWQgbG9uZyBpc29sYXRlX3N0YXJ0X3BmbiA9IHBmbjtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy03NDgtXFxubW0vY29tcGFjdGlvbi5jOjc0OTpcXHRcXHRpc29sYXRlZCA9IGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKGNjLCBcXHUwMDI2aXNvbGF0ZV9zdGFydF9wZm4sXFxubW0vY29tcGFjdGlvbi5jLTc1MC1cXHRcXHRcXHRcXHRcXHRibG9ja19lbmRfcGZuLCBjYy1cXHUwMDNlZnJlZXBhZ2VzLCAwLCB0cnVlKTtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy03NTItXFx0XFx0LypcXG5tbS9jb21wYWN0aW9uLmM6NzUzOlxcdFxcdCAqIEluIHN0cmljdCBtb2RlLCBpc29sYXRlX2ZyZWVwYWdlc19ibG9jaygpIHJldHVybnMgMCBpZlxcbm1tL2NvbXBhY3Rpb24uYy03NTQtXFx0XFx0ICogdGhlcmUgYXJlIGFueSBob2xlcyBpbiB0aGUgYmxvY2sgKGllLiBpbnZhbGlkIFBGTnMgb3JcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0xNDc0PWZhc3RfaXNvbGF0ZV9hcm91bmQoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTE0OTQtXFxubW0vY29tcGFjdGlvbi5jOjE0OTU6XFx0aXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2soY2MsIFxcdTAwMjZzdGFydF9wZm4sIGVuZF9wZm4sIGNjLVxcdTAwM2VmcmVlcGFnZXMsIDEsIGZhbHNlKTtcXG5tbS9jb21wYWN0aW9uLmMtMTQ5Ni1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0xNjkyPXN0YXRpYyB2b2lkIGlzb2xhdGVfZnJlZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTE3NjMtXFx0XFx0LyogRm91bmQgYSBibG9jayBzdWl0YWJsZSBmb3IgaXNvbGF0aW5nIGZyZWUgcGFnZXMgZnJvbS4gKi9cXG5tbS9jb21wYWN0aW9uLmM6MTc2NDpcXHRcXHRucl9pc29sYXRlZCA9IGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKGNjLCBcXHUwMDI2aXNvbGF0ZV9zdGFydF9wZm4sXFxubW0vY29tcGFjdGlvbi5jLTE3NjUtXFx0XFx0XFx0XFx0XFx0YmxvY2tfZW5kX3BmbiwgY2MtXFx1MDAzZWZyZWVwYWdlcywgc3RyaWRlLCBmYWxzZSk7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMTgwMS1cXHQgKiBicm9rZSBmcm9tIHRoZSBsb29wIGFuZCBzZXQgaXNvbGF0ZV9zdGFydF9wZm4gYmFzZWQgb24gdGhlIGxhc3RcXG5tbS9jb21wYWN0aW9uLmM6MTgwMjpcXHQgKiBjYWxsIHRvIGlzb2xhdGVfZnJlZXBhZ2VzX2Jsb2NrKCksIG9yIHdlIG1ldCB0aGUgbWlncmF0aW9uIHNjYW5uZXJcXG5tbS9jb21wYWN0aW9uLmMtMTgwMy1cXHQgKiBhbmQgdGhlIGxvb3AgdGVybWluYXRlZCBkdWUgdG8gaXNvbGF0ZV9zdGFydF9wZm4gXFx1MDAzYyBsb3dfcGZuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDAzOjExOjM2LjgwNjA0OTY1OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTEyMzEyOTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ29tcGFjdGlvbiBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZXNlIGNoYW5nZXMgaW4gYG1tL2NvbXBhY3Rpb24uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgd29ydGggdGFyZ2V0aW5nIGZvciBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgc2VlbSB0byBiZSBgaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tgLCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AsIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAsIGFuZCBgX19zcGxpdF9mb2xpb190b19vcmRlcmAuIFRob3NlIGFyZSB0aGUgb25lcyB0aGUgZGlmZiBpcyBmb2N1c2luZyBvbi4gSG1tLCBidXQgd2FpdCwgYF9fZnJlZV9wYWdlc19wcmVwYXJlYCBpcyBpbiB0aGF0IGxpc3QsIGFuZCB0aGF0J3MgYSAqdmVyeSogaG90IHBhdGguIEZ1enppbmcgdGhhdCBkaXJlY3RseSBtaWdodCBub3QgeWllbGQgbXVjaCwgc2luY2UgaXQncyBhbHJlYWR5IHNvIHdlbGwtZXhlcmNpc2VkLCBidXQgdGhlIGNoYW5nZSBpdHNlbGYgaXMgd29ydGggbm90aW5nLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQgaGVyZS4gXG5cbkFscmlnaHQsIEkgc2VlIGBwcmVwX2NvbXBvdW5kX3RhaWxgIGFzIGFub3RoZXIgbW9kaWZpZWQgZnVuY3Rpb24uIExldCBtZSBzd2l0Y2ggZ2VhcnMsIGFuZCBjaGVjayBvdXQgYF9fZnJlZV9wYWdlc19wcmVwYXJlYCBtb3JlIGNsb3NlbHksIHNwZWNpZmljYWxseSwgbGV0J3MgZ28gb3ZlciB0byBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgdGFrZSBhIGRlZXBlciBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg1MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwMzoxMTo0MC43MTgzNjg0OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MTc4NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZnJlZV9wYWdlc19wcmVwYXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9MTMwOD1zdGF0aWMgaW5saW5lIHZvaWQgcGdhbGxvY190YWdfc3ViX3BhZ2VzKHN0cnVjdCBhbGxvY190YWcgKnRhZywgdW5zaWduZWQgaW50IG5yKSB7fVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTEzMTEtXFxubW0vcGFnZV9hbGxvYy5jOjEzMTI6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3BhZ2VfYWxsb2MuYy0xMzEzLVxcdFxcdHVuc2lnbmVkIGludCBvcmRlciwgZnBpX3QgZnBpX2ZsYWdzKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTE0NTU9Ym9vbCBmcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS9wYWdlX2FsbG9jLmMtMTQ1Ni17XFxubW0vcGFnZV9hbGxvYy5jOjE0NTc6XFx0cmV0dXJuIF9fZnJlZV9wYWdlc19wcmVwYXJlKHBhZ2UsIG9yZGVyLCBGUElfTk9ORSk7XFxubW0vcGFnZV9hbGxvYy5jLTE0NTgtfVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTE1ODQ9c3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMTU4OS1cXG5tbS9wYWdlX2FsbG9jLmM6MTU5MDpcXHRpZiAoX19mcmVlX3BhZ2VzX3ByZXBhcmUocGFnZSwgb3JkZXIsIGZwaV9mbGFncykpXFxubW0vcGFnZV9hbGxvYy5jLTE1OTEtXFx0XFx0ZnJlZV9vbmVfcGFnZSh6b25lLCBwYWdlLCBwZm4sIG9yZGVyLCBmcGlfZmxhZ3MpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTI5NDM9c3RhdGljIHZvaWQgX19mcmVlX2Zyb3plbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTI5NTUtXFxubW0vcGFnZV9hbGxvYy5jOjI5NTY6XFx0aWYgKCFfX2ZyZWVfcGFnZXNfcHJlcGFyZShwYWdlLCBvcmRlciwgZnBpX2ZsYWdzKSlcXG5tbS9wYWdlX2FsbG9jLmMtMjk1Ny1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MzAwNT12b2lkIGZyZWVfdW5yZWZfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTMwMTYtXFxubW0vcGFnZV9hbGxvYy5jOjMwMTc6XFx0XFx0aWYgKCFfX2ZyZWVfcGFnZXNfcHJlcGFyZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIG9yZGVyLCBGUElfTk9ORSkpXFxubW0vcGFnZV9hbGxvYy5jLTMwMTgtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDAzOjExOjQwLjkxNjU1NzE5MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDkwNTEyMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBhbmQgQ29uZmlndXJhdGlvbiBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gYW5hbHl6aW5nIHRoaXMgcGF0Y2ggYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0IGZvciBmdXp6aW5nLiBJJ3ZlIGlkZW50aWZpZWQgc29tZSBjcml0aWNhbCBmdW5jdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb25zLiBGaXJzdGx5LCBJJ3ZlIGRlY2lkZWQgdG8gZXhjbHVkZSBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgIGZyb20gRm9jdXNTeW1ib2xzIGJlY2F1c2UgaXQncyBhIGhvdCBwYXRoLCBhbmQgaW5jbHVkaW5nIGl0IGlzbid0IHRoZSBiZXN0IHVzZSBvZiByZXNvdXJjZXMuIEhvd2V2ZXIsIEkgd2lsbCBpbmNsdWRlIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGBmYXN0X2lzb2xhdGVfZnJlZXBhZ2VzYCwgYGNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mYCwgYW5kIGBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyYC4gV2FpdCwgYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgIGlzIHN0YXRpYy4gVGhhdCdzIGZpbmUsIHN5emthbGxlciBjYW4gaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSdyZSBpbiB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0J3Mgbm90IGEgYmxvY2tlci5cblxuSSBuZWVkZWQgdG8gY2hlY2sgYSBmZXcgY29uZmlndXJhdGlvbnMuIEkgY29uZmlybWVkIGBDT05GSUdfQ09NUEFDVElPTmAgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFyZSB0aGUgcmVsZXZhbnQgb25lcyBmb3IgdGhpcyBwYXRjaC5cblxuTXkgcmVhc29uaW5nIGlzIHRoaXM6IHRoZSBwYXRjaCBtb2RpZmllcyBob3cgd2UgaGFuZGxlIHRoZSBgcGFnZS1cdTAwM2Vwcml2YXRlYCBmaWVsZCBkdXJpbmcgcGFnZSBmcmVlaW5nIGFuZCBUSFAgc3BsaXR0aW5nLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHNwZWNpZmljYWxseSBjb21wYWN0aW9uLCBwYWdlIGFsbG9jYXRpb24sIGFuZCBUSFAg4oCTIHdoaWNoIGltcGFjdHMgcGFnZSBzdGF0ZS4gSXQgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciB3YXJuaW5ncyBvciBiYWQgcGFnZSBzdGF0ZXMgaWYgdGhlIGNoYW5nZXMgYXJlIHZpb2xhdGVkLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBwcmltZSBmb3IgZnV6emluZy5cblxuVGhlcmVmb3JlLCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6XG4tIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2Bcbi0gYGZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNgXG4tIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmBcbi0gYF9fc3BsaXRfZm9saW9fdG9fb3JkZXJgXG5cbkFuZCB0aGUgZW5hYmxlZCBjb25maWd1cmF0aW9ucyBhcmU6XG4tIGBDT01QQUNUSU9OYFxuLSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ3ZlIHJlLXZlcmlmaWVkIHRoYXQgSSBnb3QgdGhlIGZ1bmN0aW9uIG5hbWVzIHJpZ2h0OiBgX19zcGxpdF9mb2xpb190b19vcmRlcmAsIGBjb21wYWN0aW9uX2FsbG9jX25vcHJvZmAsIGBpc29sYXRlX2ZyZWVwYWdlc19ibG9ja2AsIGFuZCBgZmFzdF9pc29sYXRlX2ZyZWVwYWdlc2AgYXJlIGFsbCBjb3JyZWN0LlxuXG5Ob3csIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODEyLCJPdXRwdXRUb2tlbnMiOjE2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwMzoxMTo0OS4wMDcwNzU3OTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTAzOTY2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXNvbGF0ZV9mcmVlcGFnZXNfYmxvY2tcIixcbiAgICBcImZhc3RfaXNvbGF0ZV9mcmVlcGFnZXNcIixcbiAgICBcImNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mXCIsXG4gICAgXCJfX3NwbGl0X2ZvbGlvX3RvX29yZGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBieSByZW1vdmluZyBgc2V0X3BhZ2VfcHJpdmF0ZWAgY2FsbHMgZm9yIGZyZWUgcGFnZXMgYW5kIHRhaWwgcGFnZXMsIGFuZCBhZGRpbmcgY2hlY2tzIHRvIGVuc3VyZSBgcGFnZS1cXHUwMDNlcHJpdmF0ZWAgaXMgMCBkdXJpbmcgcGFnZSBmcmVlaW5nIGFuZCBUSFAgc3BsaXR0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGNvbXBhY3Rpb24sIHBhZ2UgYWxsb2NhdGlvbiwgYW5kIFRIUCwgd2hpY2ggY2FuIHRyaWdnZXIgd2FybmluZ3Mgb3IgYmFkIHBhZ2Ugc3RhdGVzIGlmIHZpb2xhdGVkLiBJdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09NUEFDVElPTlwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpc29sYXRlX2ZyZWVwYWdlc19ibG9ja1wiLFxuICAgIFwiZmFzdF9pc29sYXRlX2ZyZWVwYWdlc1wiLFxuICAgIFwiY29tcGFjdGlvbl9hbGxvY19ub3Byb2ZcIixcbiAgICBcIl9fc3BsaXRfZm9saW9fdG9fb3JkZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGJ5IHJlbW92aW5nIGBzZXRfcGFnZV9wcml2YXRlYCBjYWxscyBmb3IgZnJlZSBwYWdlcyBhbmQgdGFpbCBwYWdlcywgYW5kIGFkZGluZyBjaGVja3MgdG8gZW5zdXJlIGBwYWdlLVxcdTAwM2Vwcml2YXRlYCBpcyAwIGR1cmluZyBwYWdlIGZyZWVpbmcgYW5kIFRIUCBzcGxpdHRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgY29tcGFjdGlvbiwgcGFnZSBhbGxvY2F0aW9uLCBhbmQgVEhQLCB3aGljaCBjYW4gdHJpZ2dlciB3YXJuaW5ncyBvciBiYWQgcGFnZSBzdGF0ZXMgaWYgdmlvbGF0ZWQuIEl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v5nk[1] Phase: Succeeded StartedAt: 2026-06-29 03:12:02 +0000 UTC FinishedAt: 2026-06-29 03:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 03:12:02 +0000 UTC FinishedAt: 2026-06-29 03:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2] Phase: Succeeded StartedAt: 2026-06-29 03:12:02 +0000 UTC FinishedAt: 2026-06-29 07:14:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-29 03:12:02 +0000 UTC FinishedAt: 2026-06-29 07:14:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-29 03:12:02 +0000 UTC FinishedAt: 2026-06-29 03:12:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-29 03:12:02 +0000 UTC FinishedAt: 2026-06-29 03:12:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow9v5nk/series-workflow9v5nk-convert-artifact-4149254969/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-29 03:12:28 +0000 UTC FinishedAt: 2026-06-29 03:35:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-29 03:12:28 +0000 UTC FinishedAt: 2026-06-29 03:35:20 +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:*e9c103d4-54d2-4846-b3af-c52fe355a266,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-workflow9v5nk/series-workflow9v5nk-convert-artifact-4149254969/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": "9e04f64a-326c-4e89-8f15-22e2a1a89e33", "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-workflow9v5nk/series-workflow9v5nk-build-action-1435830359/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-29 03:12:28 +0000 UTC FinishedAt: 2026-06-29 03:35:10 +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:*e9c103d4-54d2-4846-b3af-c52fe355a266,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-workflow9v5nk/series-workflow9v5nk-convert-artifact-4149254969/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": "9e04f64a-326c-4e89-8f15-22e2a1a89e33", "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-workflow9v5nk/series-workflow9v5nk-build-action-1435830359/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-29 03:35:20 +0000 UTC FinishedAt: 2026-06-29 03:35:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-29 03:35:20 +0000 UTC FinishedAt: 2026-06-29 03:35:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-29 03:35:20 +0000 UTC FinishedAt: 2026-06-29 03:38:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-29 03:35:20 +0000 UTC FinishedAt: 2026-06-29 03:36:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow9v5nk/series-workflow9v5nk-convert-artifact-681886732/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-29 03:38:02 +0000 UTC FinishedAt: 2026-06-29 03:40:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-29 03:38:02 +0000 UTC FinishedAt: 2026-06-29 03:40:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9e04f64a-326c-4e89-8f15-22e2a1a89e33,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-workflow9v5nk/series-workflow9v5nk-build-action-1435830359/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-29 03:40:23 +0000 UTC FinishedAt: 2026-06-29 03:40:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-29 03:40:23 +0000 UTC FinishedAt: 2026-06-29 03:40:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-29 03:40:23 +0000 UTC FinishedAt: 2026-06-29 04:04:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-29 03:40:23 +0000 UTC FinishedAt: 2026-06-29 04:04:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e9c103d4-54d2-4846-b3af-c52fe355a266,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-workflow9v5nk/series-workflow9v5nk-convert-artifact-681886732/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": "76e87be9-6291-4125-85c3-23fc68eba094", "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-workflow9v5nk/series-workflow9v5nk-build-action-2123311144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-29 03:40:23 +0000 UTC FinishedAt: 2026-06-29 04:02:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e9c103d4-54d2-4846-b3af-c52fe355a266,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-workflow9v5nk/series-workflow9v5nk-convert-artifact-681886732/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": "76e87be9-6291-4125-85c3-23fc68eba094", "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-workflow9v5nk/series-workflow9v5nk-build-action-2123311144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-29 04:04:29 +0000 UTC FinishedAt: 2026-06-29 04:04:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-29 04:04:29 +0000 UTC FinishedAt: 2026-06-29 04:04:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-29 04:04:29 +0000 UTC FinishedAt: 2026-06-29 04:06:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-29 04:04:29 +0000 UTC FinishedAt: 2026-06-29 04:06:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76e87be9-6291-4125-85c3-23fc68eba094,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9v5nk/series-workflow9v5nk-build-action-2123311144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-29 04:06:47 +0000 UTC FinishedAt: 2026-06-29 07:14:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-29 04:06:47 +0000 UTC FinishedAt: 2026-06-29 07:14:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*9e04f64a-326c-4e89-8f15-22e2a1a89e33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76e87be9-6291-4125-85c3-23fc68eba094,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9v5nk/series-workflow9v5nk-build-action-1435830359/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9v5nk/series-workflow9v5nk-build-action-2123311144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-29 04:06:47 +0000 UTC FinishedAt: 2026-06-29 04:07:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-29 04:06:47 +0000 UTC FinishedAt: 2026-06-29 04:06:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9v5nk/series-workflow9v5nk-convert-artifact-1326337141/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-29 04:06:47 +0000 UTC FinishedAt: 2026-06-29 04:06:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-29 04:06:47 +0000 UTC FinishedAt: 2026-06-29 04:06:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-29 04:06:47 +0000 UTC FinishedAt: 2026-06-29 04:06:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-29 04:07:08 +0000 UTC FinishedAt: 2026-06-29 07:14:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["isolate_freepages_block","fast_isolate_freepages","compaction_alloc_noprof","__split_folio_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"8823164c-e27e-449e-8840-b511a696f4ff","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-29 04:07:08 +0000 UTC FinishedAt: 2026-06-29 07:14:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9e04f64a-326c-4e89-8f15-22e2a1a89e33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76e87be9-6291-4125-85c3-23fc68eba094,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9v5nk/series-workflow9v5nk-build-action-1435830359/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9v5nk/series-workflow9v5nk-build-action-2123311144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9v5nk/series-workflow9v5nk-convert-artifact-1326337141/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}