Name: series-workflowcm28h Phase: Succeeded StartedAt: 2026-08-13 07:56:22 +0000 UTC FinishedAt: 2026-08-13 11:55:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[0] Phase: Succeeded StartedAt: 2026-08-13 07:56:22 +0000 UTC FinishedAt: 2026-08-13 08:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 07:56:22 +0000 UTC FinishedAt: 2026-08-13 08:13:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9eba1ecd48e4d85eacdb2a351de4f8cc1527c395", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "TRANSPARENT_HUGEPAGE", "SHMEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9eba1ecd48e4d85eacdb2a351de4f8cc1527c395", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "TRANSPARENT_HUGEPAGE", "SHMEM" ], "series_id": "deae8dbb-d8a6-42d7-a41f-507208e3c088" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "page_counter_margin", "mem_cgroup_get_folio_swap_margin", "folio_alloc_swap", "shmem_writeout" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7U0hNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlX2NvdW50ZXJfbWFyZ2luJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luJiMzNDssCiAgICAmIzM0O2ZvbGlvX2FsbG9jX3N3YXAmIzM0OywKICAgICYjMzQ7c2htZW1fd3JpdGVvdXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlbGF0ZWQgdG8gc3dhcCBhY2NvdW50aW5nIGFuZCBmb2xpbyBzd2FwIGFsbG9jYXRpb24uIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMgKGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCkgYW5kIHJlZmluZXMgdGhlIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGBmb2xpb19hbGxvY19zd2FwYCB0byBiZXR0ZXIgZ3VpZGUgZm9saW8gc3BsaXR0aW5nIGxvZ2ljIGluIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYmFzZWQgb24gbWVtb3J5L3N3YXAgbGltaXRzIGFuZCBkbyBub3QgaW52b2x2ZSBhbGxvY2F0aW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGNvcHlpbmcgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBtb2RpZnlpbmcgZGF0YSBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBsb2dpY2FsIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGNoZWNrIHRoZSBzd2FwIG1hcmdpbiBmb3IgbWVtb3J5IGNncm91cHMgYW5kIG1vZGlmaWVzIGBmb2xpb19hbGxvY19zd2FwYCB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMgKC1FMkJJRywgLUVOT1NQQywgLUVOT01FTSkgaW5zdGVhZCBvZiBhIGJvb2xlYW4uIEl0IGFsc28gdXBkYXRlcyBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIGhhbmRsZSB0aGVzZSBuZXcgZXJyb3IgY29kZXMsIHNwZWNpZmljYWxseSBjaGFuZ2luZyB0aGUgZmFsbGJhY2sgYmVoYXZpb3Igd2hlbiBzd2FwcGluZyBvdXQgbGFyZ2UgZm9saW9zIGZhaWxzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKHN3YXAsIHNobWVtLCB2bXNjYW4pIHRoYXQgYWZmZWN0IGhvdyBmb2xpb3MgYXJlIHN3YXBwZWQgb3V0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDczN2ZkYzExMTdlZjZkZWY2ZjhlNjJiMWFlMDJiNGQ0NGJmODc5MTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwODoxMDo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuaW5kZXggZDY0OWI2YmJiYzg3MS4uMDdiN2NiMTIyNDljNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbkBAIC02OCw2ICYjNDM7NjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudGVyX3JlYWQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcbiBcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmNvdW50ZXItXHUwMDNldXNhZ2UpO1xuIH1cbiBcbiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpO1xuIHZvaWQgcGFnZV9jb3VudGVyX2NhbmNlbChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiB2b2lkIHBhZ2VfY291bnRlcl9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gYm9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDBmOTUzZWQ5Yzg2MzAuLmE3MmVjZjEyYzAwZGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC01MTAsNiAmIzQzOzUxMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wXG4gXHRfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpO1xuIH1cbiBcbiYjNDM7bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2VcbkBAIC01MjMsNiAmIzQzOzUyNCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLFxuIHtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMWQzMzM5NTIwODA5Zi4uNDQyYTI5NzE5N2Q1MiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNTc5NiwxNSAmIzQzOzU3OTYsMzUgQEAgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRsb25nIG5yX3N3YXBfcGFnZXMgPSBnZXRfbnJfc3dhcF9wYWdlcygpO1xuIFxuLVx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkpXG4tXHRcdHJldHVybiBucl9zd2FwX3BhZ2VzO1xuLVx0Zm9yICg7ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpOyBtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSlcbi1cdFx0bnJfc3dhcF9wYWdlcyA9IG1pbl90KGxvbmcsIG5yX3N3YXBfcGFnZXMsXG4tXHRcdFx0XHQgICAgICBSRUFEX09OQ0UobWVtY2ctXHUwMDNlc3dhcC5tYXgpIC1cbi1cdFx0XHRcdCAgICAgIHBhZ2VfY291bnRlcl9yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApKTtcbiYjNDM7XHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWRvX21lbXN3X2FjY291bnQoKSlcbiYjNDM7XHRcdG5yX3N3YXBfcGFnZXMgPSBtaW4obnJfc3dhcF9wYWdlcywgcGFnZV9jb3VudGVyX21hcmdpbihcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKSk7XG4mIzQzO1xuIFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4gLSBnZXQgYSBmb2xpbyYjMzk7cyBtZW1jZyBzd2FwIG1hcmdpblxuJiM0MzsgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbWNnIG1hcmdpbiBpcyBxdWVyaWVkXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJiMzOTtzIG1lbWNnIGhpZXJhcmNoeS5cbiYjNDM7ICovXG4mIzQzO2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiYjNDM7XHRsb25nIG1hcmdpbjtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkgfHxcbiYjNDM7XHQgICAgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKVxuJiM0MztcdFx0cmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbiYjNDM7XHRtYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWFyZ2luO1xuJiM0Mzt9XG4mIzQzO1xuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuY1xuaW5kZXggNjYxZTBmMmE1MTI3YS4uNDUwNTQzZjRiMzE4YiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2NvdW50ZXIuY1xuQEAgLTQ2LDYgJiM0Mzs0NiwyNiBAQCBzdGF0aWMgdm9pZCBwcm9wYWdhdGVfcHJvdGVjdGVkX3VzYWdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmMsXG4gXHR9XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogcGFnZV9jb3VudGVyX21hcmdpbiAtIHJlbWFpbmluZyB1c2FibGUgc3BhY2Ugd2l0aGluIGhpZXJhcmNoaWNhbCBsaW1pdHNcbiYjNDM7ICogQGNvdW50ZXI6IGNvdW50ZXJcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBUaGUgbWluaW11bSB2YWx1ZSBvZiBtYXggbWludXMgdXNhZ2UgYWNyb3NzIEBjb3VudGVyIGFuZCBhbGwgb2ZcbiYjNDM7ICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS5cbiYjNDM7ICovXG4mIzQzO2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxuJiM0Mzt7XG4mIzQzO1x0bG9uZyBtYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRsb25nIG0gPSBSRUFEX09OQ0UoY291bnRlci1cdTAwM2VtYXgpIC0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7XG4mIzQzO1xuJiM0MztcdFx0bWFyZ2luID0gbWluKG1hcmdpbiwgbSk7XG4mIzQzO1x0fSB3aGlsZSAoKGNvdW50ZXIgPSBjb3VudGVyLVx1MDAzZXBhcmVudCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWFyZ2luO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHBhZ2VfY291bnRlcl9jYW5jZWwgLSB0YWtlIHBhZ2VzIG91dCBvZiB0aGUgbG9jYWwgY291bnRlclxuICAqIEBjb3VudGVyOiBjb3VudGVyXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IDU5OTY2NWEzZDZlN2IuLjZhMzVmNWVlODQzNzIgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jXG5AQCAtMTYxMiw3ICYjNDM7MTYxMiw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRwZ29mZl90IGluZGV4O1xuLVx0aW50IG5yX3BhZ2VzO1xuJiM0MztcdGludCBucl9wYWdlcywgcmV0O1xuIFx0Ym9vbCBzcGxpdCA9IGZhbHNlO1xuIFxuIFx0aWYgKChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBTSE1FTV9GX0xPQ0tFRCkgfHwgc2JpbmZvLVx1MDAzZW5vc3dhcClcbkBAIC0xNjkzLDcgJiM0MzsxNjkzLDggQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcbiBcdH1cbiBcbi1cdGlmICghZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcbiYjNDM7XHRyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTtcbiYjNDM7XHRpZiAoIXJldCkge1xuIFx0XHRib29sIGZpcnN0X3N3YXBwZWQgPSBzaG1lbV9yZWNhbGNfaW5vZGUoaW5vZGUsIDAsIG5yX3BhZ2VzKTtcbiBcdFx0aW50IGVycm9yO1xuIFxuQEAgLTE3NDYsNyAmIzQzOzE3NDcsNyBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbiBcdFx0Z290byByZWRpcnR5O1xuIFx0fVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxKVxuJiM0MztcdGlmIChucl9wYWdlcyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgcmV0ID09IC1FMkJJRylcbiBcdFx0Z290byB0cnlfc3BsaXQ7XG4gcmVkaXJ0eTpcbiBcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXG5pbmRleCBmNWRmYzdlNTkxOTFlLi4yZDEyN2YxYjMwYmFlIDEwMDY0NFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuY1xuQEAgLTE3MzUsNyAmIzQzOzE3MzUsOSBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gICogc3dhcCBjYWNoZS5cbiAgKlxuICAqIENvbnRleHQ6IENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBmb2xpbyBsb2NrLlxuLSAqIFJldHVybjogV2hldGhlciB0aGUgZm9saW8gd2FzIGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlLlxuJiM0MzsgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsICUtRTJCSUcgaWYgc3BsaXR0aW5nIHRoZSBmb2xpbyBtaWdodCBhbGxvdyBzd2Fwb3V0LFxuJiM0MzsgKiAlLUVOT1NQQyBpZiBubyBnbG9iYWwgc3dhcCBzcGFjZSBpcyBhdmFpbGFibGUsIG9yICUtRU5PTUVNIGlmIHNwbGl0dGluZ1xuJiM0MzsgKiB3b3VsZCBub3QgaGVscC5cbiAgKi9cbiBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbkBAIC0xNzQ3LDExICYjNDM7MTc0OSwxMSBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0aWYgKG9yZGVyKSB7XG4gXHRcdC8qXG4tXHRcdCAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQsXG4tXHRcdCAqIHRoZSBjYWxsZXIgc2hvdWxkIHNwbGl0IHRoZSBmb2xpbyBhbmQgdHJ5IGFnYWluLlxuJiM0MztcdFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZC4gQ2hlY2sgYmVsb3dcbiYjNDM7XHRcdCAqIHdoZXRoZXIgc3BsaXR0aW5nIGFuZCByZXRyeWluZyBjYW4gbWFrZSBwcm9ncmVzcy5cbiBcdFx0ICovXG4gXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVEhQX1NXQVApKVxuLVx0XHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcdFx0XHRnb3RvIGZhaWxlZDtcbiBcbiBcdFx0LypcbiBcdFx0ICogQWxsb2NhdGlvbiBzaXplIHNob3VsZCBuZXZlciBleGNlZWQgY2x1c3RlciBzaXplXG5AQCAtMTc1OSw3ICYjNDM7MTc2MSw3IEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2l6ZSBcdTAwM2UgU1dBUEZJTEVfQ0xVU1RFUikge1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0xNzc1LDEzICYjNDM7MTc3NywyMyBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0fVxuIFxuIFx0LyogTmVlZCB0byBjYWxsIHRoaXMgZXZlbiBpZiBhbGxvY2F0aW9uIGZhaWxlZCwgZm9yIE1FTUNHX1NXQVBfRkFJTC4gKi9cbi1cdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKVxuJiM0MztcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKSB7XG4gXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbiYjNDM7XHRcdGdvdG8gZmFpbGVkO1xuJiM0MztcdH1cbiBcbiBcdGlmICh1bmxpa2VseSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGZhaWxlZDtcbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZmFpbGVkOlxuJiM0MztcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiAtRU5PU1BDO1xuJiM0MztcdGlmIChtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihmb2xpbykgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvcmRlciA/IC1FMkJJRyA6IC1FTk9NRU07XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGJlNmJkMjZlOGM1NzguLjc1NDMzNjAzMzYxNjAgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC0xMjU5LDYgJiM0MzsxMjU5LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHQgKi9cbiBcdFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4mIzQzO1x0XHRcdGludCByZXQ7XG4mIzQzO1xuIFx0XHRcdGlmICghKHNjLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9JTykpXG4gXHRcdFx0XHRnb3RvIGtlZXBfbG9ja2VkO1xuIFx0XHRcdGlmIChmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKSlcbkBAIC0xMjc3LDExICYjNDM7MTI3OSwxNCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdFx0XHQgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcbiYjNDM7XHRcdFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XG4mIzQzO1x0XHRcdGlmIChyZXQpIHtcbiBcdFx0XHRcdGludCBfX21heWJlX3VudXNlZCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbiBcbiBcdFx0XHRcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkX3NwbGl0O1xuJiM0MztcdFx0XHRcdGlmIChyZXQgIT0gLUUyQklHKVxuJiM0MztcdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XG4gXHRcdFx0XHQvKiBGYWxsYmFjayB0byBzd2FwIG5vcm1hbCBwYWdlcyAqL1xuIFx0XHRcdFx0aWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKVxuIFx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2VfY291bnRlcl9tYXJnaW4mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4mIzM0OywKICAgICYjMzQ7Zm9saW9fYWxsb2Nfc3dhcCYjMzQ7LAogICAgJiMzNDtzaG1lbV93cml0ZW91dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBjaGVjayB0aGUgc3dhcCBtYXJnaW4gZm9yIG1lbW9yeSBjZ3JvdXBzIGFuZCBtb2RpZmllcyBgZm9saW9fYWxsb2Nfc3dhcGAgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9yIGNvZGVzICgtRTJCSUcsIC1FTk9TUEMsIC1FTk9NRU0pIGluc3RlYWQgb2YgYSBib29sZWFuLiBJdCBhbHNvIHVwZGF0ZXMgYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCB0byBoYW5kbGUgdGhlc2UgbmV3IGVycm9yIGNvZGVzLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgdGhlIGZhbGxiYWNrIGJlaGF2aW9yIHdoZW4gc3dhcHBpbmcgb3V0IGxhcmdlIGZvbGlvcyBmYWlscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChzd2FwLCBzaG1lbSwgdm1zY2FuKSB0aGF0IGFmZmVjdCBob3cgZm9saW9zIGFyZSBzd2FwcGVkIG91dCB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MzdmZGMxMTE3ZWY2ZGVmNmY4ZTYyYjFhZTAyYjRkNDRiZjg3OTEyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMDg6MTA6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaAppbmRleCBkNjQ5YjZiYmJjODcxLi4wN2I3Y2IxMjI0OWM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgKQEAgLTY4LDYgJiM0Mzs2OCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKQogCXJldHVybiBhdG9taWNfbG9uZ19yZWFkKCZhbXA7Y291bnRlci0mZ3Q7dXNhZ2UpOwogfQogCiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpOwogdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogYm9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCAwZjk1M2VkOWM4NjMwLi5hNzJlY2YxMmMwMGRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtNTEwLDYgJiM0Mzs1MTAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcAogCV9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7CiB9CiAKJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7CiAjZWxzZQpAQCAtNTIzLDYgJiM0Mzs1MjQsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwKIHsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDFkMzMzOTUyMDgwOWYuLjQ0MmEyOTcxOTdkNTIgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTU3OTYsMTUgJiM0Mzs1Nzk2LDM1IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJbG9uZyBucl9zd2FwX3BhZ2VzID0gZ2V0X25yX3N3YXBfcGFnZXMoKTsKIAotCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpKQotCQlyZXR1cm4gbnJfc3dhcF9wYWdlczsKLQlmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKQotCQlucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcywKLQkJCQkgICAgICBSRUFEX09OQ0UobWVtY2ctJmd0O3N3YXAubWF4KSAtCi0JCQkJICAgICAgcGFnZV9jb3VudGVyX3JlYWQoJmFtcDttZW1jZy0mZ3Q7c3dhcCkpOwomIzQzOwlpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSAmYW1wOyZhbXA7ICFkb19tZW1zd19hY2NvdW50KCkpCiYjNDM7CQlucl9zd2FwX3BhZ2VzID0gbWluKG5yX3N3YXBfcGFnZXMsIHBhZ2VfY291bnRlcl9tYXJnaW4oJmFtcDttZW1jZy0mZ3Q7c3dhcCkpOwomIzQzOwogCXJldHVybiBucl9zd2FwX3BhZ2VzOwogfQogCiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4gLSBnZXQgYSBmb2xpbyYjMzk7cyBtZW1jZyBzd2FwIG1hcmdpbgomIzQzOyAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtY2cgbWFyZ2luIGlzIHF1ZXJpZWQKJiM0MzsgKgomIzQzOyAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJiMzOTtzIG1lbWNnIGhpZXJhcmNoeS4KJiM0MzsgKi8KJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CWxvbmcgbWFyZ2luOwomIzQzOwomIzQzOwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSB8fAomIzQzOwkgICAgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKQomIzQzOwkJcmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7CiYjNDM7CW1hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oJmFtcDttZW1jZy0mZ3Q7c3dhcCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gbWFyZ2luOwomIzQzO30KJiM0MzsKIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jCmluZGV4IDY2MWUwZjJhNTEyN2EuLjQ1MDU0M2Y0YjMxOGIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfY291bnRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfY291bnRlci5jCkBAIC00Niw2ICYjNDM7NDYsMjYgQEAgc3RhdGljIHZvaWQgcHJvcGFnYXRlX3Byb3RlY3RlZF91c2FnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjLAogCX0KIH0KIAomIzQzOy8qKgomIzQzOyAqIHBhZ2VfY291bnRlcl9tYXJnaW4gLSByZW1haW5pbmcgdXNhYmxlIHNwYWNlIHdpdGhpbiBoaWVyYXJjaGljYWwgbGltaXRzCiYjNDM7ICogQGNvdW50ZXI6IGNvdW50ZXIKJiM0MzsgKgomIzQzOyAqIFJldHVybjogVGhlIG1pbmltdW0gdmFsdWUgb2YgbWF4IG1pbnVzIHVzYWdlIGFjcm9zcyBAY291bnRlciBhbmQgYWxsIG9mCiYjNDM7ICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS4KJiM0MzsgKi8KJiM0Mztsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcikKJiM0Mzt7CiYjNDM7CWxvbmcgbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJbG9uZyBtID0gUkVBRF9PTkNFKGNvdW50ZXItJmd0O21heCkgLSBwYWdlX2NvdW50ZXJfcmVhZChjb3VudGVyKTsKJiM0MzsKJiM0MzsJCW1hcmdpbiA9IG1pbihtYXJnaW4sIG0pOwomIzQzOwl9IHdoaWxlICgoY291bnRlciA9IGNvdW50ZXItJmd0O3BhcmVudCkpOwomIzQzOwomIzQzOwlyZXR1cm4gbWFyZ2luOwomIzQzO30KJiM0MzsKIC8qKgogICogcGFnZV9jb3VudGVyX2NhbmNlbCAtIHRha2UgcGFnZXMgb3V0IG9mIHRoZSBsb2NhbCBjb3VudGVyCiAgKiBAY291bnRlcjogY291bnRlcgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggNTk5NjY1YTNkNmU3Yi4uNmEzNWY1ZWU4NDM3MiAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0xNjEyLDcgJiM0MzsxNjEyLDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7CiAJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLSZndDtpX3NiKTsKIAlwZ29mZl90IGluZGV4OwotCWludCBucl9wYWdlczsKJiM0MzsJaW50IG5yX3BhZ2VzLCByZXQ7CiAJYm9vbCBzcGxpdCA9IGZhbHNlOwogCiAJaWYgKChpbmZvLSZndDtmbGFncyAmYW1wOyBTSE1FTV9GX0xPQ0tFRCkgfHwgc2JpbmZvLSZndDtub3N3YXApCkBAIC0xNjkzLDcgJiM0MzsxNjkzLDggQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTsKIAl9CiAKLQlpZiAoIWZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7CiYjNDM7CXJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pOwomIzQzOwlpZiAoIXJldCkgewogCQlib29sIGZpcnN0X3N3YXBwZWQgPSBzaG1lbV9yZWNhbGNfaW5vZGUoaW5vZGUsIDAsIG5yX3BhZ2VzKTsKIAkJaW50IGVycm9yOwogCkBAIC0xNzQ2LDcgJiM0MzsxNzQ3LDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7CiAJCWdvdG8gcmVkaXJ0eTsKIAl9Ci0JaWYgKG5yX3BhZ2VzICZndDsgMSkKJiM0MzsJaWYgKG5yX3BhZ2VzICZndDsgMSAmYW1wOyZhbXA7IHJldCA9PSAtRTJCSUcpCiAJCWdvdG8gdHJ5X3NwbGl0OwogcmVkaXJ0eToKIAlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IGY1ZGZjN2U1OTE5MWUuLjJkMTI3ZjFiMzBiYWUgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtMTczNSw3ICYjNDM7MTczNSw5IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKICAqIHN3YXAgY2FjaGUuCiAgKgogICogQ29udGV4dDogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGZvbGlvIGxvY2suCi0gKiBSZXR1cm46IFdoZXRoZXIgdGhlIGZvbGlvIHdhcyBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZS4KJiM0MzsgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsICUtRTJCSUcgaWYgc3BsaXR0aW5nIHRoZSBmb2xpbyBtaWdodCBhbGxvdyBzd2Fwb3V0LAomIzQzOyAqICUtRU5PU1BDIGlmIG5vIGdsb2JhbCBzd2FwIHNwYWNlIGlzIGF2YWlsYWJsZSwgb3IgJS1FTk9NRU0gaWYgc3BsaXR0aW5nCiYjNDM7ICogd291bGQgbm90IGhlbHAuCiAgKi8KIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CkBAIC0xNzQ3LDExICYjNDM7MTc0OSwxMSBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAJaWYgKG9yZGVyKSB7CiAJCS8qCi0JCSAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQsCi0JCSAqIHRoZSBjYWxsZXIgc2hvdWxkIHNwbGl0IHRoZSBmb2xpbyBhbmQgdHJ5IGFnYWluLgomIzQzOwkJICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZC4gQ2hlY2sgYmVsb3cKJiM0MzsJCSAqIHdoZXRoZXIgc3BsaXR0aW5nIGFuZCByZXRyeWluZyBjYW4gbWFrZSBwcm9ncmVzcy4KIAkJICovCiAJCWlmICghSVNfRU5BQkxFRChDT05GSUdfVEhQX1NXQVApKQotCQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAKIAkJLyoKIAkJICogQWxsb2NhdGlvbiBzaXplIHNob3VsZCBuZXZlciBleGNlZWQgY2x1c3RlciBzaXplCkBAIC0xNzU5LDcgJiM0MzsxNzYxLDcgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKIAkJICovCiAJCWlmIChzaXplICZndDsgU1dBUEZJTEVfQ0xVU1RFUikgewogCQkJVk1fV0FSTl9PTl9PTkNFKDEpOwotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAJCX0KIAl9CiAKQEAgLTE3NzUsMTMgJiM0MzsxNzc3LDIzIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJfQogCiAJLyogTmVlZCB0byBjYWxsIHRoaXMgZXZlbiBpZiBhbGxvY2F0aW9uIGZhaWxlZCwgZm9yIE1FTUNHX1NXQVBfRkFJTC4gKi8KLQlpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSkKJiM0MzsJaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpIHsKIAkJc3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pOwomIzQzOwkJZ290byBmYWlsZWQ7CiYjNDM7CX0KIAogCWlmICh1bmxpa2VseSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlnb3RvIGZhaWxlZDsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO2ZhaWxlZDoKJiM0MzsJaWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiAtRU5PU1BDOwomIzQzOwlpZiAobWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oZm9saW8pICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9yZGVyID8gLUUyQklHIDogLUVOT01FTTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGJlNmJkMjZlOGM1NzguLjc1NDMzNjAzMzYxNjAgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xMjU5LDYgJiM0MzsxMjU5LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LAogCQkgKi8KIAkJaWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICZhbXA7JmFtcDsKIAkJCQkhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7CiYjNDM7CQkJaW50IHJldDsKJiM0MzsKIAkJCWlmICghKHNjLSZndDtnZnBfbWFzayAmYW1wOyBfX0dGUF9JTykpCiAJCQkJZ290byBrZWVwX2xvY2tlZDsKIAkJCWlmIChmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKSkKQEAgLTEyNzcsMTEgJiM0MzsxMjc5LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwKIAkJCQkgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpCiAJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJfQotCQkJaWYgKGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7CiYjNDM7CQkJcmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7CiYjNDM7CQkJaWYgKHJldCkgewogCQkJCWludCBfX21heWJlX3VudXNlZCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTsKIAogCQkJCWlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpCiAJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkX3NwbGl0OwomIzQzOwkJCQlpZiAocmV0ICE9IC1FMkJJRykKJiM0MzsJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJCS8qIEZhbGxiYWNrIHRvIHN3YXAgbm9ybWFsIHBhZ2VzICovCiAJCQkJaWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKQogCQkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDY3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGludHJvZHVjaW5nIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBzd2FwLCBzaGFyZWQgbWVtb3J5IChzaG1lbSksIGFuZCB0aGUgdmlydHVhbCBtZW1vcnkgc2Nhbm5lciAodm1zY2FuKS4gV2UgbmVlZCB0byBhbmFseXplIHRoaXMgcGF0Y2ggZm9yIGZ1enppbmcgdGFyZ2V0cyBiZWNhdXNlIGl0IGNoYW5nZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4KCkkgc2VlIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGFyZWFzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtOiBgbW0vcGFnZV9jb3VudGVyLmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYG1tL3NobWVtLmNgLCBgbW0vc3dhcGZpbGUuY2AsIGFuZCBgbW0vdm1zY2FuLmNgLiBJbW1lZGlhdGVseSwgSSBub3RpY2UgdGhlIGludHJvZHVjdGlvbiBvZiBgcGFnZV9jb3VudGVyX21hcmdpbmAgYW5kIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGFzIHdlbGwgYXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIHJldHVybiB2YWx1ZSBvZiBgZm9saW9fYWxsb2Nfc3dhcGAuIFRoYXQgbGFzdCBvbmUgaXMgYSByZWQgZmxhZywgbWVhbmluZyBpdCBpcyBtb3JlIHRoYW4ganVzdCBhIGJlaGF2aW9yYWwgY2hhbmdlLgoKUHJldmlvdXNseSwgYGZvbGlvX2FsbG9jX3N3YXBgIHJldHVybmVkIGEgYm9vbGVhbiwgbm93IGl0JiMzOTtzIGdvaW5nIHRvIHJldHVybiBhbiBpbnRlZ2VyIHdpdGggbXVsdGlwbGUgZXJyb3IgY29kZXMuIFNwZWNpZmljYWxseTogMCBvbiBzdWNjZXNzLCBgLUUyQklHYCAoc3BsaXR0aW5nIG1pZ2h0IGFsbG93IHN3YXBvdXQpLCBgLUVOT1NQQ2AgKG5vIGdsb2JhbCBzd2FwIHNwYWNlKSwgYW5kIGAtRU5PTUVNYCAoc3BsaXR0aW5nIHdvbiYjMzk7dCBoZWxwKS4gVGhlIGNoYW5nZXMgaW4gYHNocmlua19mb2xpb19saXN0YCBhbmQgYHNobWVtX3dyaXRlb3V0YCBkZW1vbnN0cmF0ZSB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLgoKTG9va2luZyBhdCBgc2hyaW5rX2ZvbGlvX2xpc3RgLCB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSBlcnJvciBoYW5kbGluZyBmbG93LiBJZiBgZm9saW9fYWxsb2Nfc3dhcGAgZmFpbHMgd2l0aCBhbiBlcnJvciAqb3RoZXIqIHRoYW4gYC1FMkJJR2AsIGl0ICpza2lwcyogdGhlIGZvbGlvIHNwbGl0dGluZyBwcm9jZXNzIGFuZCBqdXN0IGFjdGl2YXRlcyB0aGUgZm9saW8sIHdoaWNoIGlzIGEgbWFqb3IgZGlmZmVyZW5jZSBpbiBiZWhhdmlvci4gVGhlIHNhbWUgaXMgdHJ1ZSBpbiBgc2htZW1fd3JpdGVvdXRgLCB3aGVyZSB0aGUgY29uZGl0aW9ucyBmb3IgdHJ5aW5nIHRvIHNwbGl0IGZvbGlvcyBoYXZlIGFsc28gY2hhbmdlZCB0byBjb25zaWRlciB0aGUgcmV0dXJuIGNvZGUgZnJvbSBgZm9saW9fYWxsb2Nfc3dhcGAuIFRoaXMgaXMgYSBiaWcgZGVhbCwgd2UgbmVlZCB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhlc2UgY2hhbmdlcyB0byBmaW5kIHRoZSBtb3N0IHZ1bG5lcmFibGUgcG9pbnRzLgoKU28sIHdoZXJlIHNob3VsZCBteSBmb2N1cyBiZT8gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHByaW9yaXRpemUgZnV6emluZyB0aGVzZSBmdW5jdGlvbnMgZGlyZWN0bHk6IGBmb2xpb19hbGxvY19zd2FwYCwgYHNobWVtX3dyaXRlb3V0YCwgYHNocmlua19mb2xpb19saXN0YCwgYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYC4gV2FpdCwgaXMgYHNocmlua19mb2xpb19saXN0YCBzdGF0aWM/IExldCBtZSBkb3VibGUtY2hlY2suIFllcywgaXQgbG9va3MgbGlrZSBgc2htZW1fd3JpdGVvdXRgIGlzIGFsc28gc3RhdGljLCBidXQgYGZvbGlvX2FsbG9jX3N3YXBgIGlzIGluIGBtbS9zd2FwZmlsZS5jYCwgd2hpY2ggbWFrZXMgaXQgYXZhaWxhYmxlIG91dHNpZGUgaXRzIGNvbXBpbGF0aW9uIHVuaXQuIFNvIGBmb2xpb19hbGxvY19zd2FwYCBpcyB0aGUgaGlnaCBwcmlvcml0eS4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgcHJvcGFnYXRlZCB0aHJvdWdob3V0IHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgc2htZW1fd3JpdGVvdXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz0xNTU2PWludCBzaG1lbV91bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbi0tXG5tbS9zaG1lbS5jLTE2MDYtICovXG5tbS9zaG1lbS5jOjE2MDc6aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc2htZW0uYy0xNjA4LVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxuLS1cbm1tL3N3YXAuaD00NjY9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBzd2FwX29wcyBzd2FwX2JkZXZfb3BzO1xubW0vc3dhcC5oLTQ2Ny1cbm1tL3N3YXAuaDo0Njg6aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc3dhcC5oLTQ2OS1cdFx0c3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyNQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgTm9uLVN0YXRpYyBGdW5jdGlvbiBVc2FnZSBhbmQgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYHNobWVtX3dyaXRlb3V0YCwgYGZvbGlvX2FsbG9jX3N3YXBgLCBgcGFnZV9jb3VudGVyX21hcmdpbmAsIGFuZCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLiBUaGV5JiMzOTtyZSBhbGwgZGVjbGFyZWQgbm9uLXN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBzY29wZSBhbmQgaG93IHRoZXkmIzM5O3JlIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuCgpOb3csIGxldCYjMzk7cyBjb3JyZWxhdGUgdGhlc2UgZnVuY3Rpb25zIHdpdGggdGhlIEtjb25maWcgb3B0aW9ucy4gSSBzZWUgdGhhdCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gIGFuZCBgcGFnZV9jb3VudGVyX21hcmdpbmAgcmVxdWlyZSBgQ09ORklHX01FTUNHYC4gTWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlc2UgYXJlIGNsZWFybHkgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3Vwcy4gU2ltaWxhcmx5LCBgZm9saW9fYWxsb2Nfc3dhcGAgY2xlYXJseSBkZXBlbmRzIG9uIGBDT05GSUdfU1dBUGAgZm9yLCB3ZWxsLCBzd2FwcGluZyBmdW5jdGlvbmFsaXR5LiBGaW5hbGx5LCBgc2htZW1fd3JpdGVvdXRgIG5lZWRzIGBDT05GSUdfU0hNRU1gLgoKSW50cmlndWluZ2x5LCBgQ09ORklHX1RIUF9TV0FQYCBhbHNvIHBvcHMgdXAgaW4gdGhlIGNvbnRleHQgb2YgYGZvbGlvX2FsbG9jX3N3YXBgLiBUaGF0JiMzOTtzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhcyBpdCBpbXBsaWVzIHRoaXMgZnVuY3Rpb24gbWF5IGhhdmUgc29tZSBzcGVjaWZpYyBiZWhhdmlvciBvciBvcHRpbWl6YXRpb24gaW4gcmVsYXRpb24gdG8gVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBhbmQgc3dhcCBvcGVyYXRpb25zLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciBpbnRlcmFjdGlvbi4gVGhpcyBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZWlyIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9uIHN5c3RlbSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15jb25maWcgVEhQX1NXQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz05Njg9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTk2OS1cbm1tL0tjb25maWc6OTcwOmNvbmZpZyBUSFBfU1dBUFxubW0vS2NvbmZpZy05NzEtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc2MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipUSFBfU1dBUDogQSBEZXBlbmRlbmN5IERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBgVEhQX1NXQVBgIGlzIGRlZmluZWQgYXMgYSBib29sZWFuIChgZGVmX2Jvb2wgeWApLiBUaGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlIHJlYWwgbWVhdCBsaWVzIGluIHRoZSAqZGVwZW5kZW5jaWVzKi4gSXQmIzM5O3MgY3JpdGljYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGlzIHNldCB1cCB0aGlzIHdheS4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUgZGVzaWduLgoKRmlyc3QsIHRoZSBkZXBlbmRlbmN5IG9uIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgbWFrZXMgcGVyZmVjdCBzZW5zZS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgc3dhcHBpbmcgKnRyYW5zcGFyZW50KiBodWdlIHBhZ2VzIGhlcmUsIHNvIGNsZWFybHkgVEhQIHN1cHBvcnQgaGFzIHRvIGJlIGVuYWJsZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBZb3UgY2FuJiMzOTt0IHN3YXAgc29tZXRoaW5nIHRoYXQgZG9lc24mIzM5O3QgZXhpc3QsIHJpZ2h0PwoKQW5kIHRoZW4sIG9mIGNvdXJzZSwgdGhlIGRlcGVuZGVuY3kgb24gYFNXQVBgLiBUaGF0JiMzOTtzIHRoZSAqb2J2aW91cyogb25lLiBXaHkgZXZlbiBib3RoZXIgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlmIHlvdSBhcmUgbm90IHVzaW5nIHN3YXAgc3BhY2UgaW4gdGhlIGZpcnN0IHBsYWNlPyBJdCYjMzk7cyB0aGUgcHJlLXJlcXVpc2l0ZSwgdGhlIGZvdW5kYXRpb25hbCBhc3BlY3QgdGhpcyBvcHRpb24gYnVpbGRzIG9uLiBJdCYjMzk7cyBsaWtlIGFza2luZyAmIzM0O0NhbiBJIGNvbmZpZ3VyZSB0aGUgZG9vciBpZiBJIGRvbiYjMzk7dCBoYXZlIGEgaG91c2U/JiMzNDsuCgpUaGVzZSBkZXBlbmRlbmNpZXMgYXJlIHRoZSBjb25zdHJhaW50cywgdGhleSBhcmUgdGhlIGFyY2hpdGVjdHVyYWwgY2hvaWNlcyB0aGF0IGRldGVybWluZSBob3cgdGhlIHN5c3RlbSBiZWhhdmVzLiBXZSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZXNlIGNvbnN0cmFpbnRzIHdoZW4gdHVuaW5nIHRoZSBrZXJuZWwuIFdlIG11c3QgZW5zdXJlIHRoZXNlIGFyZSBjb3JyZWN0IGJlZm9yZSBlbmFibGluZyBvciBkaXNhYmxpbmcgb3B0aW9ucy4gR29vZC4gTWFrZXMgc2Vuc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcmMvS2NvbmZpZz0zMDM9Y2hvaWNlXG5hcmNoL2FyYy9LY29uZmlnLTMwNC1cdHByb21wdCBcJiMzNDtNTVUgU3VwZXIgUGFnZSBTaXplXCYjMzQ7XG5hcmNoL2FyYy9LY29uZmlnOjMwNTpcdGRlcGVuZHMgb24gSVNBX0FSQ1YyIFx1MDAyNlx1MDAyNiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9hcmMvS2NvbmZpZy0zMDYtXHRkZWZhdWx0IEFSQ19IVUdFUEFHRV8yTVxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yNDEyPWNvbmZpZyBBUk02NF9DT05UUFRFXG5hcmNoL2FybTY0L0tjb25maWctMjQxMy1cdGJvb2wgXCYjMzQ7Q29udGlndW91cyBQVEUgbWFwcGluZ3MgZm9yIHVzZXIgbWVtb3J5XCYjMzQ7IGlmIEVYUEVSVFxuYXJjaC9hcm02NC9LY29uZmlnOjI0MTQ6XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL2FybTY0L0tjb25maWctMjQxNS1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvZGF4L0tjb25maWc9OD1jb25maWcgREVWX0RBWFxuZHJpdmVycy9kYXgvS2NvbmZpZy05LVx0dHJpc3RhdGUgXCYjMzQ7RGV2aWNlIERBWDogZGlyZWN0IGFjY2VzcyBtYXBwaW5nIGRldmljZVwmIzM0O1xuZHJpdmVycy9kYXgvS2NvbmZpZzoxMDpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmRyaXZlcnMvZGF4L0tjb25maWctMTEtXHRoZWxwXG4tLVxuZHJpdmVycy9odi9LY29uZmlnPTg5PWNvbmZpZyBNU0hWX1ZUTFxuLS1cbmRyaXZlcnMvaHYvS2NvbmZpZy05NS1cdCMgc3BlY2lhbGx5IHdpdGggbGFyZ2UgbWVtb3J5IHJlcXVpcmVtZW50cy5cbmRyaXZlcnMvaHYvS2NvbmZpZzo5NjpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmRyaXZlcnMvaHYvS2NvbmZpZy05Ny1cdCMgTVRSUnMgYXJlIGNvbnRyb2xsZWQgYnkgVlRMMCwgYW5kIGFyZSBub3Qgc3BlY2lmaWMgdG8gaW5kaXZpZHVhbCBWVExzLlxuLS1cbmZzL0tjb25maWc9OTA9Y29uZmlnIEZTX0RBWF9QTURcbi0tXG5mcy9LY29uZmlnLTk0LVx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuZnMvS2NvbmZpZzo5NTpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmZzL0tjb25maWctOTYtXG4tLVxubGliL0tjb25maWcuZGVidWc9MzMyNz1jb25maWcgVEVTVF9ITU1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjgtXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbmxpYi9LY29uZmlnLmRlYnVnOjMzMjk6XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzMwLVx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxuLS1cbm1tL0tjb25maWc9ODE1PWNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xubW0vS2NvbmZpZy04MTYtXHRib29sIFwmIzM0O0FsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXCYjMzQ7XG5tbS9LY29uZmlnOjgxNzpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODE4LVx0aGVscFxuLS1cbm1tL0tjb25maWc9ODM0PW1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODM1LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG5tbS9LY29uZmlnOjgzNjpcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxubW0vS2NvbmZpZy04MzctXHRzZWxlY3QgQ09NUEFDVElPTlxuLS1cbm1tL0tjb25maWc9MTAxNj1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUFxubW0vS2NvbmZpZy0xMDE3LVx0ZGVmX2Jvb2wgblxubW0vS2NvbmZpZzoxMDE4Olx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy0xMDE5LVxubW0vS2NvbmZpZz0xMDIwPWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BNRF9QRk5NQVBcbm1tL0tjb25maWctMTAyMS1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6MTAyMjpcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUCBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTEwMjMtXG5tbS9LY29uZmlnPTEwMjQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUFxubW0vS2NvbmZpZy0xMDI1LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzoxMDI2Olx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIFx1MDAyNlx1MDAyNiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5tbS9LY29uZmlnLTEwMjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAzNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqVEhQX1NXQVAgRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYFRIUF9TV0FQYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gdHdvIGtleSB1bmRlcmx5aW5nIGZlYXR1cmVzLiBGaXJzdCwgYW5kIG9idmlvdXNseSwgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmVpbmcgZW5hYmxlZC4gTm8gaHVnZXBhZ2VzLCBubyBzd2FwcGluZyB0aG9zZSBodWdlcGFnZXMsIHJpZ2h0PyBUaGF0JiMzOTtzIHRoZSBjb3JlIHByZW1pc2UuIEJ1dCBpdCYjMzk7cyBub3QganVzdCB0aGF0OyBpdCBhbHNvIHJlbGllcyBkaXJlY3RseSBvbiB0aGUgc3RhbmRhcmQgYFNXQVBgIG1lY2hhbmlzbSBiZWluZyBpbiBwbGFjZS4gV2l0aG91dCB0aGUgYWJpbGl0eSB0byBzd2FwIG1lbW9yeSBvdXQgdG8gZGlzayBpbiB0aGUgZmlyc3QgcGxhY2UsIHRoZXJlJiMzOTtzIG5vdGhpbmcgZm9yIGBUSFBfU1dBUGAgdG8gd29yayB3aXRoLCB0byBleHRlbmQgdGhlIHVzdWFsIHN3YXAgbWVjaGFuaXNtIGZvciB0cmFuc3BhcmVudCBodWdlcGFnZXMuIEl04oCZcyBidWlsdCBvbiB0aGF0IGZvdW5kYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUSFBfU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz05Njg9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTk2OS1cbm1tL0tjb25maWc6OTcwOmNvbmZpZyBUSFBfU1dBUFxubW0vS2NvbmZpZy05NzEtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMjYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgVEhQX1NXQVAgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYFRIUF9TV0FQYC4gSXQgc2VlbXMgbGlrZSBJIG5lZWQgdG8gZGlzc2VjdCB0aGUgY29tcG9uZW50cyBjb25uZWN0ZWQgdG8gYFRIUF9TV0FQYCwgc28gSSBjYW4gc2VlIHdoYXQgaW5mbHVlbmNlcyBpdHMgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzLCBkYXRhIHN0cnVjdHVyZXMsIG9yIGhhcmR3YXJlIGNvbnNpZGVyYXRpb25zIGZhY3RvciBpbnRvIGl0cyBiZWhhdmlvci4gQXJlIHRoZXJlIGFueSBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhhdCByZWx5IG9uIHRoZSBleGlzdGVuY2Ugb2YgYFRIUF9TV0FQYCBvciwgY29udmVyc2VseSwgdGhhdCBgVEhQX1NXQVBgIHJlbGllcyBvbiBmb3IgY29ycmVjdCBvcGVyYXRpb24/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgcmVsYXRlZCBzb3VyY2UgY29kZSB0byBnYWluIGluc2lnaHQgaW50byB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBmZWF0dXJlcy4gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLCBhbnkgaW1wbGljYXRpb25zIGZvciBzd2FwIHNwYWNlIG1hbmFnZW1lbnQsIGFuZCBwZXJmb3JtYW5jZSBpbXBhY3RzLiBNeSBnb2FsIGlzIHRvIHBhaW50IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgbGFuZHNjYXBlIHN1cnJvdW5kaW5nIGBUSFBfU1dBUGAsIGJlY2F1c2UsIHVsdGltYXRlbHksIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyB2aXRhbCBmb3IgbWFraW5nIGluZm9ybWVkIGRlY2lzaW9ucyBhYm91dCBob3cgaXQmIzM5O3MgdXNlZCBvciBwb3RlbnRpYWxseSBtb2RpZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NjU6XHRcdCAgYXBwbGljYXRpb25zIHN1cHBseSB0aGUgbWFkdmlzZShNQURWX0hVR0VQQUdFKSBoaW50LlxuIDk2NjpcdFx0ICBUaGlzIGVuc3VyZXMgdGhhdCBodWdlcGFnZXMgYXJlIHVzZWQgb25seSBpbiByZXNwb25zZSB0byBleHBsaWNpdFxuIDk2NzpcdFx0ICByZXF1ZXN0cyBmcm9tIGFwcGxpY2F0aW9ucy5cbiA5Njg6XHRlbmRjaG9pY2VcbiA5Njk6XHRcbiA5NzA6XHRjb25maWcgVEhQX1NXQVBcbiA5NzE6XHRcdGRlZl9ib29sIHlcbiA5NzI6XHRcdGRlcGVuZHMgb24gQVJDSF9XQU5UU19USFBfU1dBUCBcdTAwMjZcdTAwMjYgU1dBUCBcdTAwMjZcdTAwMjYgNjRCSVRcbiA5NzM6XHRcdGhlbHBcbiA5NzQ6XHRcdCAgU3dhcCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGluIG9uZSBwaWVjZSwgd2l0aG91dCBzcGxpdHRpbmcuXG4gOTc1Olx0XHQgIFhYWDogRm9yIG5vdywgc3dhcCBjbHVzdGVyIGJhY2tpbmcgdHJhbnNwYXJlbnQgaHVnZSBwYWdlXG4gOTc2Olx0XHQgIHdpbGwgYmUgc3BsaXQgYWZ0ZXIgc3dhcG91dC5cbiA5Nzc6XHRcbiA5Nzg6XHRcdCAgRm9yIHNlbGVjdGlvbiBieSBhcmNoaXRlY3R1cmVzIHdpdGggcmVhc29uYWJsZSBUSFAgc2l6ZXMuXG4gOTc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGRlcGVuZGVuY2llcywgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdobyB3b3JrcyB3aXRoIHRoaXMgY29kZToKCioqVGhpbmtpbmcgVGhyb3VnaCBUSFBfU1dBUCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYFRIUF9TV0FQYCBoaW5nZXMgb24gYEFSQ0hfV0FOVFNfVEhQX1NXQVBgLCBgU1dBUGAsIGFuZCB0aGUgc3lzdGVtIGJlaW5nIDY0LWJpdC4gTWFrZXMgc2Vuc2UuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHN3YXBwaW5nIG91dCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzLCBzbyBzd2FwIGFuZCBhIDY0LWJpdCBhcmNoaXRlY3R1cmUgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGVzLiBJIHNob3VsZCBkZWZpbml0ZWx5IGVuc3VyZSB0aGF0IGBTV0FQYCwgYE1FTUNHYCwgYFNITUVNYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIGFsbCBlbmFibGVkIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBUaGF0IGZlZWxzIGxpa2UgYSBzb2xpZCBmb3VuZGF0aW9uLgoKTm93LCB3YWl0IGEgc2Vjb25kLi4uIHRoZXJlJiMzOTtzIHRoZSBgcGFnZV9jb3VudGVyX21hcmdpbmAgdmFyaWFibGUuIEkgcmVtZW1iZXIgdGhhdCYjMzk7cyBkZWZpbmVkIGluIGBtbS9wYWdlX2NvdW50ZXIuY2AuIE15IG1pbmQgaXMgZHJpZnRpbmcgYmFjayBpbnRvIHRoZSB3ZWVkcyBhIGJpdC4gSXMgdGhhdCBmaWxlLCBgbW0vcGFnZV9jb3VudGVyLmNgLCBhY3R1YWxseSBiZWluZyBjb21waWxlZCB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzICpvbio/IFRoYXQmIzM5O3MgYSBjcnVjaWFsIGNyb3NzLWRlcGVuZGVuY3kgdG8gY2hlY2s7IGEgc3VidGxlIHBvaW50IHRoYXQgY291bGQgYmUgYSBwb3RlbnRpYWwgZ290Y2hhIGFuZCB3aWxsIGluZmx1ZW5jZSB0aGUgY29uZmlndXJhdGlvbiBJIGxhbmQgb24uIEkgbmVlZCB0byBjb25maXJtIHRoYXQuIFRoYXQmIzM5O3MgYSBwb2ludCBvZiBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX2NvdW50ZXIubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEwMT1vYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGU6MTAyOm9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xubW0vTWFrZWZpbGUtMTAzLW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMzMQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgb2YgQ09ORklHX1BBR0VfQ09VTlRFUiBvbiBNRU1DRyoqCgpPa2F5LCBzbyBgQ09ORklHX1BBR0VfQ09VTlRFUmAgaXMgYmVpbmcgc2VsZWN0ZWQgYnkgYE1FTUNHYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2VsbCwgdGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLCBidXQgbGV0JiMzOTtzIGJyZWFrIGRvd24gKndoeSouJiMzNDsgVGhpcyBpbXBsaWVzIGEgY3JpdGljYWwgZGVwZW5kZW5jeSwgbGlrZWx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgYWNjb3VudGluZyBhbmQgY29udHJvbC4gU3BlY2lmaWNhbGx5LCB0aGUga2VybmVsIG5lZWRzIHRvIHRyYWNrIHBhZ2UgdXNhZ2UgaW4gYSBncmFudWxhciB3YXksIGFuZCBgTUVNQ0dgIChNZW1vcnkgQ29udHJvbCBHcm91cHMpIGFyZSB0aGUgbWVjaGFuaXNtIGJ5IHdoaWNoIHdlJiMzOTtyZSAqY29udHJvbGxpbmcqIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB1c2FnZSBhbW9uZ3N0IGdyb3VwcyBvZiBwcm9jZXNzZXMuCgpUaGVyZWZvcmUsIGBDT05GSUdfUEFHRV9DT1VOVEVSYCYjMzk7cyBhY3RpdmF0aW9uIHByb2JhYmx5IHByb3ZpZGVzIHRoZSBjb3JlIGluZnJhc3RydWN0dXJlIGZvciBgTUVNQ0dgIHRvIGRvIGl0cyBqb2IgZWZmZWN0aXZlbHkuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQgYFBBR0VfQ09VTlRFUmAgaXMgZW5hYmxpbmcgcGVyLWNncm91cCBwYWdlIGFjY291bnRpbmcsIGFsbG93aW5nIGBNRU1DR2AgdG8gYWNjdXJhdGVseSBlbmZvcmNlIGl0cyBtZW1vcnkgbGltaXRzLCB0cmFjayBtZW1vcnkgdXNhZ2UsIGFuZCB0cmlnZ2VyIG92ZXJjb21taXQgaGFuZGxpbmcgb3IgcmVzb3VyY2UgcmVjbGFtYXRpb24gd2hlbiBhIGNncm91cCBleGNlZWRzIGl0cyBhc3NpZ25lZCBxdW90YS4gV2l0aG91dCB0aGlzIGZlYXR1cmUsIHRoZSBhYmlsaXR5IHRvIGlzb2xhdGUgYW5kIG1hbmFnZSBtZW1vcnkgd291bGQgYmUgc2lnbmlmaWNhbnRseSBoYW1wZXJlZC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIHRoaXMgY291bnRlciBpcyB1c2VkIGluIHRoZSBgTUVNQ0dgIGNvZGViYXNlOyBJJiMzOTtkIHN1c3BlY3QgdGhhdCBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGNvcmUgYWNjb3VudGluZyBzdHJ1Y3R1cmVzIGFuZCB0aGUgbWVtb3J5IHJlY2xhaW0gbWVjaGFuaXNtLiBUaGUgZmFjdCB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGlzIGhhcmQtbGlua2VkIGlzIGEgY2x1ZTsgaXQmIzM5O3MgY2VudHJhbCB0byB0aGUgb3BlcmF0aW9uIG9mIGBNRU1DR2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX0NPVU5URVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjI9aWYgQ0dST1VQU1xuaW5pdC9LY29uZmlnLTEwNjMtXG5pbml0L0tjb25maWc6MTA2NDpjb25maWcgUEFHRV9DT1VOVEVSXG5pbml0L0tjb25maWctMTA2NS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcyNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1lbWNvbnRyb2wuY2AqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgbWVtb3J5IGNvbnRyb2wgbWVjaGFuaXNtIGlzIGJlaGF2aW5nLCBzbyB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byBgbWVtY29udHJvbC5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgYW5kIHBvdGVudGlhbGx5LCB0aGUgbWFuYWdlbWVudCBvZiBtZW1vcnkgcmVzb3VyY2VzIHdpdGhpbiB0aGlzIGNvbXBvbmVudC4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciB0aGUgYmVoYXZpb3IgSSYjMzk7bSBvYnNlcnZpbmcuIEl04oCZcyBsaWtlbHkgdGhlIGltcGxlbWVudGF0aW9uIG9mIGFueSBzcGVjaWZpYyBtZW1vcnkgbGltaXRpbmcgb3IgYWNjb3VudGluZyB3b3VsZCBiZSBjZW50cmFsaXplZCB0aGVyZSBhcyB3ZWxsLiBMZXTigJlzIHNlZSB3aGF0IHN1cnByaXNlcyBpdCBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY29udHJvbC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSAmIzQzOz0gbWVtY29udHJvbC12MS5vXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IGJwZl9tZW1jb250cm9sLm9cbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEwMgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBNZW1vcnkgQ29udHJvbCBHcm91cCBDb25maWd1cmF0aW9uIGFuZCBTd2FwIEZpbGUgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIHByZXR0eSBjbGVhcjogYENPTkZJR19NRU1DR2AgaXMgZGVmaW5pdGVseSByZXF1aXJlZCBoZXJlLiBObyBpZnMsIGFuZHMsIG9yIGJ1dHMgYWJvdXQgaXQuIFRoaXMgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIGhhdmluZyBNZW1vcnkgQ29udHJvbCBHcm91cHMgZW5hYmxlZC4KCkFuZCB0aGVuIHRoZXJlJiMzOTtzIGBmb2xpb19hbGxvY19zd2FwYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHdoZXJlIHRoYXQgaXMgZGVmaW5lZC4gQWgsIHJpZ2h0LCBpdCYjMzk7cyBidXJpZWQgaW4gYG1tL3N3YXBmaWxlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgc3dhcCBmaWxlIGFsbG9jYXRpb24gbG9naWMgcmVzaWRlcy4gVGhhdCBtZWFucyBhbnkgaW52ZXN0aWdhdGlvbiBvciBtb2RpZmljYXRpb24gcmVsYXRlZCB0byB0aGF0IGZ1bmN0aW9uLCBvciBpdHMgcmVsYXRlZCBzdHJ1Y3R1cmVzLCB3aWxsIHRha2UgcGxhY2UgaW4gdGhhdCBmaWxlLiBUaGF0IGhlbHBzIG5hcnJvdyB0aGluZ3MgZG93biBjb25zaWRlcmFibHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBmaWxlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03Nj1lbmRpZlxubW0vTWFrZWZpbGUtNzctXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlLTc5LW9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzkwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBNZW1vcnkgV3JpdGVvdXQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGl0IGxvb2tzIGxpa2UgYENPTkZJR19TV0FQYCBpcyBkZWZpbml0ZWx5IGEgcmVxdWlyZW1lbnQgaGVyZS4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgZW5hYmxlZDsgaXQgd2lsbCBhZmZlY3QgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzd2FwcGluZy4KCk5vdywgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGUgZnVuY3Rpb24gYHNobWVtX3dyaXRlb3V0YC4gSSByZWNhbGwgSSYjMzk7dmUgdXNlZCB0aGlzIHJvdXRpbmUgYmVmb3JlLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUuIEFoIHllcyEgVGhlIGBzaG1lbV93cml0ZW91dGAgZnVuY3Rpb27igKYgSSByZW1lbWJlci4gSXQgcmVzaWRlcyBpbiBgbW0vc2htZW0uY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQmIzM5O3MgaW4gdGhlIHNoYXJlZCBtZW1vcnkgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2htZW0ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxuLS1cbm1tL01ha2VmaWxlLTUzLVx0XHRcdCAgIHJlYWRhaGVhZC5vIGZvbGlvLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXG5tbS9NYWtlZmlsZTo1NDpcdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG5tbS9NYWtlZmlsZS01NS1cdFx0XHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc0MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIHN5c3RlbSBpbnRlcm5hbHMgYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipBbmFseXppbmcgdGhlIENvbXBpbGF0aW9uIERlcGVuZGVuY2llcyBvZiBgc2htZW0ub2AgYW5kIGBzaG1lbV93cml0ZW91dGAqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIHNoYXJlZCBtZW1vcnkgKHNobWVtKSBzdWJzeXN0ZW0uIEl0JiMzOTtzIGNsZWFyIHRoYXQgYHNobWVtLm9gLCB0aGUgY29yZSBzaG1lbSBvYmplY3QgZmlsZSwgKmFsd2F5cyogZ2V0cyBjb21waWxlZC4gVGhhdCYjMzk7cyB0aGUgZm91bmRhdGlvbiwgdGhlIGJhc2UgZnVuY3Rpb25hbGl0eS4gTm8gc3VycHJpc2VzIHRoZXJlLgoKSG93ZXZlciwgd2hlbiBJIGNvbnNpZGVyIGBzaG1lbV93cml0ZW91dGAsIHRoaW5ncyBnZXQgYSBsaXR0bGUgbW9yZSBudWFuY2VkLiBJdCBzZWVtcyB0aGUgY29tcGlsYXRpb24gb2YgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBvciBvYmplY3QgZmlsZSBpcyBjb25kaXRpb25hbC4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IGl0cyBpbmNsdXNpb24gaW4gdGhlIGJ1aWxkIGlzIGRlcGVuZGVudCBvbiBjZXJ0YWluIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmVpbmcgZW5hYmxlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtkIGJldCBpdCYjMzk7cyBnYXRlZCBieSBlaXRoZXIgYENPTkZJR19TV0FQYCBvciBgQ09ORklHX1NITUVNYCwgb3IgcGVyaGFwcyBldmVuIGJvdGguIEl0IG1ha2VzIHNlbnNlLCByaWdodD8gYHNobWVtX3dyaXRlb3V0YCBwcm9iYWJseSBoYW5kbGVzIHRoZSBzcGlsbGluZyBvciB3cml0aW5nIG91dCBvZiBzaG1lbSBwYWdlcywgd2hpY2ggd291bGQgb25seSBiZSByZWxldmFudCBpZiBlaXRoZXIgc3dhcCBzcGFjZSBpcyB1c2VkIChgQ09ORklHX1NXQVBgKSAqb3IqIHRoZSBzaG1lbSBmdW5jdGlvbmFsaXR5IGl0c2VsZiBpcyBlbmFibGVkIGFuZCBjb25maWd1cmVkICggYENPTkZJR19TSE1FTWApLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtLCBidXQgdGhhdCYjMzk7cyBteSB3b3JraW5nIHRoZW9yeSBiYXNlZCBvbiBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV93cml0ZW91dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NobWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz00Nz1zdGF0aWMgc3RydWN0IHZmc21vdW50ICpzaG1fbW50IF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5tbS9zaG1lbS5jLTEwMS0vKlxubW0vc2htZW0uYzoxMDI6ICogc2htZW1fZmFsbG9jYXRlIGNvbW11bmljYXRlcyB3aXRoIHNobWVtX2ZhdWx0IG9yIHNobWVtX3dyaXRlb3V0IHZpYVxubW0vc2htZW0uYy0xMDMtICogaW5vZGUtXHUwMDNlaV9wcml2YXRlICh3aXRoIGlfcndzZW0gbWFraW5nIHN1cmUgdGhhdCBpdCBoYXMgb25seSBvbmUgdXNlciBhdFxuLS1cbm1tL3NobWVtLmM9NDE0PXN0YXRpYyB2b2lkIHNobWVtX2ZyZWVfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2l6ZV90IGZyZWVkX2lzcGFjZSlcbi0tXG5tbS9zaG1lbS5jLTQzNS0gKlxubW0vc2htZW0uYzo0MzY6ICogUmV0dXJuOiB0cnVlIGlmIHN3YXBwZWQgd2FzIGluY3JlbWVudGVkIGZyb20gMCwgZm9yIHNobWVtX3dyaXRlb3V0KCkuXG5tbS9zaG1lbS5jLTQzNy0gKi9cbm1tL3NobWVtLmM9NDM4PWJvb2wgc2htZW1fcmVjYWxjX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgYWxsb2NlZCwgbG9uZyBzd2FwcGVkKVxuLS1cbm1tL3NobWVtLmMtNDUxLVx0ICogYWZ0ZXIgaV9tYXBwaW5nLVx1MDAzZW5ycGFnZXMgaGFzIGFscmVhZHkgYmVlbiBhZGp1c3RlZCAodXAgb3IgZG93biksXG5tbS9zaG1lbS5jOjQ1MjpcdCAqIHNobWVtX3dyaXRlb3V0KCkgaGFzIHRvIHJhaXNlIHN3YXBwZWQgYmVmb3JlIG5ycGFnZXMgaXMgbG93ZXJlZCAtXG5tbS9zaG1lbS5jLTQ1My1cdCAqIHRvIHN0b3AgYSByYWNpbmcgc2htZW1fcmVjYWxjX2lub2RlKCkgZnJvbSB0aGlua2luZyB0aGF0IGEgcGFnZSBoYXNcbi0tXG5tbS9zaG1lbS5jPTE1NTY9aW50IHNobWVtX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuLS1cbm1tL3NobWVtLmMtMTU5OS0vKipcbm1tL3NobWVtLmM6MTYwMDogKiBzaG1lbV93cml0ZW91dCAtIFdyaXRlIHRoZSBmb2xpbyB0byBzd2FwXG5tbS9zaG1lbS5jLTE2MDEtICogQGN0eDogc3dhcCBJL08gY29udGV4dFxuLS1cbm1tL3NobWVtLmMtMTYwNi0gKi9cbm1tL3NobWVtLmM6MTYwNzppbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9zaG1lbS5jLTE2MDgtXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXG4tLVxubW0vc2htZW0uYy0xNzQzLVx0XHQgKiBidXQgSSYjMzk7bSBhIGxpdHRsZSBuZXJ2b3VzIGFib3V0IGxldHRpbmcgdGhpcyBmb2xpbyBvdXQgb2Zcbm1tL3NobWVtLmM6MTc0NDpcdFx0ICogc2htZW1fd3JpdGVvdXQoKSBpbiBhIGh5YnJpZCBoYWxmLXRtcGZzLWhhbGYtc3dhcCBzdGF0ZVxubW0vc2htZW0uYy0xNzQ1LVx0XHQgKiBlLmcuIGZvbGlvX21hcHBpbmcoZm9saW8pIG1pZ2h0IGdpdmUgYW4gdW5leHBlY3RlZCBhbnN3ZXIuXG4tLVxubW0vc2htZW0uYz0xNzU3PWludCBzaG1lbV93cml0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3NobWVtLmMtMTc2MS1cbm1tL3NobWVtLmM6MTc2MjpcdGVyciA9IHNobWVtX3dyaXRlb3V0KFx1MDAyNmN0eCwgZm9saW8sIE5VTEwpO1xubW0vc2htZW0uYy0xNzYzLVx0c3dhcF93cml0ZV9zdWJtaXQoXHUwMDI2Y3R4KTtcbi0tXG5tbS9zaG1lbS5jPTM2MjQ9c3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbi0tXG5tbS9zaG1lbS5jLTM3NjAtXHRcdC8qXG5tbS9zaG1lbS5jOjM3NjE6XHRcdCAqIEluZm9ybSBzaG1lbV93cml0ZW91dCgpIGhvdyBmYXIgd2UgaGF2ZSByZWFjaGVkLlxubW0vc2htZW0uYy0zNzYyLVx0XHQgKiBObyBuZWVkIGZvciBsb2NrIG9yIGJhcnJpZXI6IHdlIGhhdmUgdGhlIHBhZ2UgbG9jay5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4ODgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgU3dhcCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgcmlnaHQgdG8gaXQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGUgYHNobWVtX3dyaXRlb3V0YCBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX1NXQVBgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgYSBjcml0aWNhbCBvbmUgZm9yIG15IHdvcmssIHNvIEkmIzM5O2xsIGdvIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvZGUgYW5kIGZpbmQgdGhhdCBtYWNyby4gSSBuZWVkIHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBiYXNlZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgc3lzdGVtIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHN3YXAgc3BhY2UuIFRoaXMgY2hlY2sgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIHNoYXJlZCBtZW1vcnkgc3lzdGVtIGluIGRpZmZlcmVudCBrZXJuZWwgYnVpbGRzIGFuZCBrbm93aW5nIGhvdyBpdCBoYW5kbGVzIG1lbW9yeSBwcmVzc3VyZS4gVGltZSB0byBkaXZlIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmZGVmIENPTkZJR19TV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDg0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgVGVtcG9yYXJ5IEZpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRlbXBvcmFyeSBmaWxlIHN5c3RlbXMgYXJlIGNvbmZpZ3VyZWQgaW4gdGhpcyBwYXJ0aWN1bGFyIGVudmlyb25tZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIGVpdGhlciBgQ09ORklHX1RNUEZTYCBvciBgQ09ORklHX1NITUVNYCBhcmUgZW5hYmxlZC4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cywgYW5kIGlmIGVpdGhlciBpcyBlbmFibGVkLCBpdCYjMzk7bGwgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBpbi1tZW1vcnkgZmlsZSBzdG9yYWdlLiBUaGF0IHNob3VsZCBwcm92aWRlIGEgY3J1Y2lhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiBmb3IgYWRkcmVzc2luZyB3aGF0ZXZlciBsYXJnZXIgaXNzdWUgaXMgYXQgaGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NITUVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTQ3PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xubW0vc2htZW0uYy00OC1cbm1tL3NobWVtLmM6NDk6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy01MC0vKlxuLS1cbm1tL3NobWVtLmM9NTcyMz1fX3NldHVwKFwmIzM0O3RocF9zaG1lbT1cJiMzNDssIHNldHVwX3RocF9zaG1lbSk7XG4tLVxubW0vc2htZW0uYy01NzI2LVxubW0vc2htZW0uYzo1NzI3OiNlbHNlIC8qICFDT05GSUdfU0hNRU0gKi9cbm1tL3NobWVtLmMtNTcyOC1cbi0tXG5tbS9zaG1lbS5jPTU3OTY9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5tbS9zaG1lbS5jLTU4MDMtXG5tbS9zaG1lbS5jOjU4MDQ6I2VuZGlmIC8qIENPTkZJR19TSE1FTSAqL1xubW0vc2htZW0uYy01ODA1LVxuLS1cbm1tL3NobWVtLmM9NTk1OD1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3NobWVtLmMtNTk2MC17XG5tbS9zaG1lbS5jOjU5NjE6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy01OTYyLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MDAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNITUVNIENvZGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gVGhlIGBzaG1lbV93cml0ZW91dGAgZnVuY3Rpb27igKYgbGluZSAxNjA3LCBnb3QgaXQuIEhtbSwgdGhhdCYjMzk7cyBpbnNpZGUgYW4gYCNpZmRlZiBDT05GSUdfU0hNRU1gIGJsb2NrLiBPa2F5LCBzbyBpdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBOb3csICpDT05GSUdfU0hNRU0qIGlzIHVzdWFsbHkgZW5hYmxlZCwgcmlnaHQ/IFByZXR0eSBzdGFuZGFyZCBmZWF0dXJlLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgdGhvdWdoLCBsZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kuIFdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhhdD8gUmlnaHQsIGBpbml0L0tjb25maWdgIHNob3VsZCBoYXZlIHRoZSBzY29vcC4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgdGhlcmUgYW5kIGNvbmZpcm0gdGhhdCBgQ09ORklHX1NITUVNYCYjMzk7cyBzZXR0aW5nIGlzIGFzIEkgZXhwZWN0LiBHb3R0YSBiZSB0aG9yb3VnaCwgZ290dGEgYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNITUVNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xODkxPWNvbmZpZyBFVkVOVEZEXG4tLVxuaW5pdC9LY29uZmlnLTE4OTktXG5pbml0L0tjb25maWc6MTkwMDpjb25maWcgU0hNRU1cbmluaXQvS2NvbmZpZy0xOTAxLVx0Ym9vbCBcJiMzNDtVc2UgZnVsbCBzaG1lbSBmaWxlc3lzdGVtXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkxOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFF1YW5kYXJ5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGFuZCBpdCBzZWVtcyBgU0hNRU1gIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hpY2ggbWFrZXMgc2Vuc2UuIE5vdywgSSBuZWVkIHRvIGVuc3VyZSB0aGUgYXBwcm9wcmlhdGUgc2V0dGluZ3MgZm9yIG15IHN5c3RlbS4gSSBrbm93IEkgd2FudCB0byBlbmFibGUgYFNXQVBgLCBgTUVNQ0dgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQuLi4gaG1tLCBgVEhQX1NXQVBgLiBXYWl0LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgYWJvdXQgdGhpcyBgVEhQX1NXQVBgIG9wdGlvbi4gSSByZWNhbGwgaXQmIzM5O3MgYGRlZl9ib29sIHlgIGlmIGBBUkNIX1dBTlRTX1RIUF9TV0FQICZhbXA7JmFtcDsgU1dBUCAmYW1wOyZhbXA7IDY0QklUYC4gVGhhdCBsaWtlbHkgbWVhbnMgdGhhdCBpZiBJJiMzOTt2ZSBlbmFibGVkIGJvdGggYFNXQVBgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB0aGVuIGBUSFBfU1dBUGAgaXMgYXV0b21hdGljYWxseSBoYW5kbGVkLiBUaGVyZSBpc24mIzM5O3QgYSBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IGl0LCBidXQgaXQgZG9lc24mIzM5O3QgaHVydCB0byBsaXN0IGl0LiBJdCBpcywgYWZ0ZXIgYWxsLCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOb3csIGp1c3QgdG8gY29uZmlybSwgYFRIUF9TV0FQYCBpc24mIzM5O3QgYSBkaXJlY3RseSB1c2VyLXNlbGVjdGFibGUgb3B0aW9uLCBidXQgYSBkZXBlbmRlbnQgZGVmYXVsdC4gSSBuZWVkIHRvIHRha2UgYSBzZWNvbmQgbG9vay4gSnVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk2ODpcdGVuZGNob2ljZVxuIDk2OTpcdFxuIDk3MDpcdGNvbmZpZyBUSFBfU1dBUFxuIDk3MTpcdFx0ZGVmX2Jvb2wgeVxuIDk3MjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRTX1RIUF9TV0FQIFx1MDAyNlx1MDAyNiBTV0FQIFx1MDAyNlx1MDAyNiA2NEJJVFxuIDk3MzpcdFx0aGVscFxuIDk3NDpcdFx0ICBTd2FwIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgaW4gb25lIHBpZWNlLCB3aXRob3V0IHNwbGl0dGluZy5cbiA5NzU6XHRcdCAgWFhYOiBGb3Igbm93LCBzd2FwIGNsdXN0ZXIgYmFja2luZyB0cmFuc3BhcmVudCBodWdlIHBhZ2VcbiA5NzY6XHRcdCAgd2lsbCBiZSBzcGxpdCBhZnRlciBzd2Fwb3V0LlxuIDk3NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUyNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IFN3YXAtUmVsYXRlZCBDb25maWd1cmF0aW9ucyBhbmQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBzd2FwIGlzIGhhbmRsZWQuIEl0IHNlZW1zIGBUSFBfU1dBUGAgaXNuJiMzOTt0IHNvbWV0aGluZyB0aGUgdXNlciBjYW4gZGlyZWN0bHkgY29uZmlndXJlLCBidXQgdGhlIHN5c3RlbSB1dGlsaXplcyBpdCwgc28gd2UgY2FuIGF0IGxlYXN0IG1ha2UgaXQgdmlzaWJsZSBpbiB0aGUgb3V0cHV0LiBNeSBtYWluIGZvY3VzIGhlcmUgaXMgZ29pbmcgdG8gYmUgb24gbWFraW5nIHN1cmUgdGhlIHVzZXIga25vd3MgYWJvdXQgYFNXQVBgLCBgTUVNQ0dgLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSYjMzk7bGwgYmUgc3VyZSB0byBsaXN0IHRob3NlLgoKTm93LCBmb3IgdGhlIGtleSBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyBzd2FwIG1hcmdpbnMgYW5kIGZvbGlvIGFsbG9jYXRpb24uIFNvIHRoZSBtb3N0IGltbWVkaWF0ZWx5IHJlbGV2YW50IGZ1bmN0aW9ucyBhcHBlYXIgdG8gYmUgYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLCBgZm9saW9fYWxsb2Nfc3dhcGAsIGFuZCBgc2htZW1fd3JpdGVvdXRgLiBUaGVzZSBhcmUgd2hlcmUgdGhlIGNvcmUgbG9naWMgbGlrZWx5IHJlc2lkZXMuCgpJIGhhZCBiZXR0ZXIgY2hlY2sgYHNocmlua19mb2xpb19saXN0YCBhcyB3ZWxsLiBJdCBsb29rcyBsaWtlIHRoYXQgb25lIGlzIHN0YXRpYywgc28gSSB3aWxsIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBsaXN0IGl0IGRpcmVjdGx5LiBIb3dldmVyLCBJIHdhbnQgdG8gY2xhcmlmeSBpbiB0aGUgb3V0cHV0IHRoYXQgaXQgaXMgYmVpbmcgdXNlZCBzb21ld2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMuKiBzaHJpbmtfZm9saW9fbGlzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0xMDQwPXN0YXRpYyBib29sIG1heV9lbnRlcl9mcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS92bXNjYW4uYy0xMDU3LSAqL1xubW0vdm1zY2FuLmM6MTA1ODpzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG5tbS92bXNjYW4uYy0xMDU5LVx0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNDAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyBTdGF0aWMgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGhlcmUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYHNocmlua19mb2xpb19saXN0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgc29tZXRoaW5nIEkmIzM5O20ga2VlcGluZyBpbiBtaW5kLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiB3aGF0IGFib3V0IHRoZSBvdGhlcnM/IFNwZWNpZmljYWxseSwgSSYjMzk7bSB3b25kZXJpbmcgaWYgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYHNocmlua19scnV2ZWNgIGFyZSBhbHNvIHN0YXRpYywgdG9vLiBJdCBtYWtlcyBzZW5zZSB0byBjaGVjayB0aGUgcmVzdCBvZiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHdoaWxlIEkmIzM5O20gYXQgaXQsIHNvIGxldCYjMzk7cyBhbHNvIGFkZCBgZm9saW9fYWxsb2Nfc3dhcGAsIGBzaG1lbV93cml0ZW91dGAsIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYW5kIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAgdG8gdGhlIGxpc3QuIEkgbmVlZCB0byBrbm93IGlmIEkmIzM5O20gZGVhbGluZyB3aXRoIGludGVybmFsIG9yIGV4dGVybmFsIGZ1bmN0aW9ucywgYW5kIGEgcXVpY2sgY2hlY2sgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgYHBhZ2VfY291bnRlcl9tYXJnaW5gIGlzIGV4cG9ydGVkLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kIG1hbmFnZWQgd2l0aGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qcGFnZV9jb3VudGVyX21hcmdpbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzY2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyBNZW1vcnkgQWNjb3VudGluZyAtIFN0YXRpYyB2cy4gRXhwb3J0ZWQgRnVuY3Rpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgbWVtb3J5IGFjY291bnRpbmcgaXNzdWUuIFRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdCBpc24mIzM5O3QgKmV4cG9ydGVkKiwgd2hpY2ggaXMgYSBwb3RlbnRpYWwgaHVyZGxlLCBidXQgaXQmIzM5O3MgYWxzbyAqbm9uLXN0YXRpYyosIHdoaWNoIGdpdmVzIG1lIGEgYml0IG1vcmUgZmxleGliaWxpdHkgaW4gdGVybXMgb2YgcG90ZW50aWFsIGFjY2VzcyBvciBvdmVycmlkaW5nLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBuYXJyb3cgdGhlIHNlYXJjaC4gTm93IHRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBvciBub3QgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCBpcyBleHBvcnRlZC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgdHJhY2tpbmcgYW5kIG1hbmFnaW5nIG1lbW9yeSwgZXNwZWNpYWxseSByZWdhcmRpbmcgc3dhcCBtYXJnaW5zIGluIGNncm91cHMuIFRoZSBmYWN0IHRoYXQgSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgKml0cyogZXhwb3J0IHN0YXR1cyB0ZWxscyBtZSB0aGF0IHBvdGVudGlhbGx5IG92ZXJyaWRpbmcgaXQgaXMgdGhlIGN1cnJlbnQgZm9jdXMuIEl0IG5lZWRzIHRvIGJlIGNsYXJpZmllZCwgYmVjYXVzZSB0aGF0IHdpbGwgZGlyZWN0bHkgYWZmZWN0IHdoZXRoZXIgSSBjYW4gcmVsaWFibHkgbW9kaWZ5IG9yIGludGVncmF0ZSB3aXRoIHRoaXMgcGFydCBvZiB0aGUgbWVtb3J5IGFjY291bnRpbmcgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NDEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgTm9uLUV4cG9ydGVkLCBOb24tU3RhdGljIEZ1bmN0aW9uIFVzYWdlKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIEkgc2VlIGEgZnVuY3Rpb24sIG9yIGF0IGxlYXN0IGEgcmVmZXJlbmNlIHRvIHNvbWV0aGluZywgdGhhdCYjMzk7cyBkZWZpbmVkIGJ1dCBub3QgZXhwbGljaXRseSBtYXJrZWQgZm9yIGV4cG9ydC4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSByYWlzaW5nIGEgcmVkIGZsYWcuIFR5cGljYWxseSwgd2UmIzM5O2QgZXhwZWN0IGZ1bmN0aW9ucyB0aGF0IGFyZSBtZWFudCB0byBiZSB1c2VkIGV4dGVybmFsbHkgdG8gYmUgZXhwb3J0ZWQsIGVzcGVjaWFsbHkgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG1vZHVsZSBvciBhIGxpYnJhcnkuIEhvd2V2ZXIsIGlmIGl0JiMzOTtzIG5vdCBzdGF0aWMgaXQgd291bGQgbWVhbiB0aGUgbGlua2VyIHdpbGwgYmUgYWJsZSB0byBzZWUgdGhlIGZ1bmN0aW9uLgoKTm93LCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSB0aGF0IHN0YW5kcyBvdXQgaXMgYGZvbGlvX2FsbG9jX3N3YXBgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIG9yIG5vdCBpdCBpcyBleHBvcnRlZC4gSWYgaXQmIzM5O3Mgbm90IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkbyBhIGRlZXBlciBkaXZlIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIGFjY2Vzc2VkLiBJcyBpdCBwYXJ0IG9mIHNvbWUgaW50ZXJuYWwgQVBJIHRoYXQgaXNuJiMzOTt0IGludGVuZGVkIGZvciBkaXJlY3QgZXh0ZXJuYWwgdXNlPyBJcyBpdCBiZWluZyBhY2Nlc3NlZCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtPyBPciBtYXliZSB0aGVyZSYjMzk7cyBhIHByb2JsZW0gaW4gdGhlIGJ1aWxkIHN5c3RlbSB3aGVyZSB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIGV4cG9ydGVkLCBidXQgaXNuJiMzOTt0PwoKSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdmlzaWJsZSB0byBjb2RlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSBpbXBvcnRhbnQsIGFzIGl0IHdpbGwgZGV0ZXJtaW5lIHRoZSBwb3RlbnRpYWwgc2NvcGUgb2YgaXRzIHVzYWdlLCBhbmQgcG90ZW50aWFsIHByb2JsZW1zIHdpdGggZnV0dXJlIHJlZmFjdG9yaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmZvbGlvX2FsbG9jX3N3YXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk4OAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25zaWRlcmluZyBFeHBvcnRlZCBTeW1ib2xzIGFuZCBNZW1vcnkgT3BlcmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgY29kZSBhbmQgc29tZXRoaW5nJiMzOTtzIGJ1Z2dpbmcgbWUuIFRoaXMgdmFyaWFibGUgb3IgZnVuY3Rpb24sIHdoYXRldmVyIGl0IGlzLCBpc24mIzM5O3QgZXhwbGljaXRseSBtYXJrZWQgZm9yIGV4cG9ydCDigJMgaXQmIzM5O3Mgbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgIGludGVybmFsbHkuIFRoYXQgbWVhbnMgaXQgKmNvdWxkKiBiZSB2aXNpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdOKAmXMgYSBrZXkgZGlzdGluY3Rpb24uIFdoZXRoZXIgaXQgKmlzKiBhY3R1YWxseSBiZWluZyB1c2VkIGV4dGVybmFsbHksIGFuZCB0aHVzIG5lZWRpbmcgdG8gYmUgdmlzaWJsZSwgaXMgYW5vdGhlciBtYXR0ZXIuCgpBbmQgdGhlbiB0aGUgYmlnIHF1ZXN0aW9uLCB0aGUgb25lIHRoYXQgcmVhbGx5IG5lZWRzIGFuIGFuc3dlcjogaXMgdGhpcyBgc2htZW1fd3JpdGVvdXRgIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIOKAkyB3aGF0ZXZlciBpdCBpcyDigJMgZGVjbGFyZWQgYXMgZXhwb3J0ZWQgYW55d2hlcmU/IEkgbmVlZCB0byBjaGVjayB0aGUgc3ltYm9sIHRhYmxlLCB0aGUgbGlua2VyIHNjcmlwdHMsIHRoZSBidWlsZCBwcm9jZXNzLi4uIGV2ZXJ5d2hlcmUuIFRoaXMgbWF0dGVycyBiZWNhdXNlIGl0IGRpcmVjdGx5IGltcGFjdHMgdGhlIGNvZGUmIzM5O3MgbGlua2luZyBhbmQgdXNhYmlsaXR5LiBJZiBpdCYjMzk7cyBub3QgZXhwb3J0ZWQsIGFuZCBzb21lb25lIGlzIHRyeWluZyB0byB1c2UgaXQgZXh0ZXJuYWxseSwgd2UgaGF2ZSBhIG1ham9yIHByb2JsZW0gd2l0aCB1bmRlZmluZWQgc3ltYm9scyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGlzIGhhcyB0byBiZSBuYWlsZWQgZG93biwgZmFzdCwgb3Igd2UgYXJlIHNpdHRpbmcgb24gYSB0aW1lIGJvbWIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qc2htZW1fd3JpdGVvdXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI3OQoJCQkJCQkJb3V0cHV0OiAyMTUKCQkJCQkJCXRob3VnaHRzOiAzMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUmVjZW50IENoYW5nZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgKnNpZ25pZmljYW50KiBmdW5jdGlvbmFsIGNoYW5nZXMuIFRoZXNlIGFyZW4mIzM5O3QgZXhwb3J0ZWQsIGJ1dCB0aGV5JiMzOTtyZSBub24tc3RhdGljLCBzbyB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2Ug4oCTIHNwZWNpZmljYWxseSwgdGhyb3VnaCBtZW1vcnkgcHJlc3N1cmUgc2NlbmFyaW9zIGxpa2UgbWVtb3J5IGFsbG9jYXRpb24gb3Igc3dhcHBpbmcuIFRoYXQgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBoZXJlLiBNeSBleHBlcnQgaW5zdGluY3Qgc2F5cyB0aGVzZSBhcmUgZGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgY2FtcGFpZ24gdG8gc2VlIGhvdyB0aGV5IGhvbGQgdXAgdW5kZXIgc3RyZXNzLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHF1aWNrbHkuIFdlJiMzOTtyZSBsb29raW5nIGF0IGBTV0FQYCwgYE1FTUNHYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBTSE1FTWAuIEdvdCBpdC4KCk5vdywgdGhlIHN5bWJvbHMgdGhhdCBoYXZlIG15IGF0dGVudGlvbjogYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLCBgZm9saW9fYWxsb2Nfc3dhcGAsIGFuZCBgc2htZW1fd3JpdGVvdXRgLiBUaGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgbmV3IGxvZ2ljIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cCBzd2FwIG1hcmdpbnMuIENyaXRpY2FsbHksIGl0JiMzOTtzIHVwZGF0aW5nIGBmb2xpb19hbGxvY19zd2FwYCB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXM6IGAtRTJCSUdgLCBgLUVOT1NQQ2AsIGFuZCBgLUVOT01FTWAsIGluc3RlYWQgb2YgYSBzaW1wbGUgYm9vbGVhbi4gVGhlIGJpZyBkZWFsIGhlcmUgaXMgdGhlIHJhbWlmaWNhdGlvbnMgZG93bnN0cmVhbS4gYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCBhcmUgYWxzbyBiZWluZyB1cGRhdGVkIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlc2UgbmV3IGVycm9yIGNvZGVzLCBhbmQgdGhhdCBpbmNsdWRlcyBjaGFuZ2VzIHRvIHRoZWlyIGZhbGxiYWNrIGJlaGF2aW9yIHdoZW4gc3dhcHBpbmcgb3V0IGxhcmdlIGZvbGlvcyBmYWlscy4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsIGNoYW5nZXMgYWZmZWN0aW5nIGhvdyBmb2xpb3MgYXJlIHN3YXBwZWQgb3V0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgdG91Y2hpbmcgc3dhcCwgc2htZW0sIGFuZCB2bXNjYW4gZnVuY3Rpb25hbGl0eS4KCkp1c3QgZG9pbmcgYSBxdWljayBkb3VibGUtY2hlY2suLi4gWWVzLCBgU0hNRU1gIGlzIHRoZSBjb3JyZWN0IGNvbmZpZyBmb3Igc2hhcmVkIG1lbW9yeS4gYFNXQVBgIGZvciBzd2FwLCBgTUVNQ0dgIGZvciBtZW1vcnkgY2dyb3VwcywgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZm9yIFRIUC4KCkFscmlnaHQsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBMZXQmIzM5O3MgZ2V0IHRoZXNlIHRlc3RzIGdvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2VfY291bnRlcl9tYXJnaW4mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4mIzM0OywKICAgICYjMzQ7Zm9saW9fYWxsb2Nfc3dhcCYjMzQ7LAogICAgJiMzNDtzaG1lbV93cml0ZW91dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBjaGVjayB0aGUgc3dhcCBtYXJnaW4gZm9yIG1lbW9yeSBjZ3JvdXBzIGFuZCBtb2RpZmllcyBgZm9saW9fYWxsb2Nfc3dhcGAgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9yIGNvZGVzICgtRTJCSUcsIC1FTk9TUEMsIC1FTk9NRU0pIGluc3RlYWQgb2YgYSBib29sZWFuLiBJdCBhbHNvIHVwZGF0ZXMgYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCB0byBoYW5kbGUgdGhlc2UgbmV3IGVycm9yIGNvZGVzLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgdGhlIGZhbGxiYWNrIGJlaGF2aW9yIHdoZW4gc3dhcHBpbmcgb3V0IGxhcmdlIGZvbGlvcyBmYWlscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChzd2FwLCBzaG1lbSwgdm1zY2FuKSB0aGF0IGFmZmVjdCBob3cgZm9saW9zIGFyZSBzd2FwcGVkIG91dCB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7U0hNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlX2NvdW50ZXJfbWFyZ2luJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luJiMzNDssCiAgICAmIzM0O2ZvbGlvX2FsbG9jX3N3YXAmIzM0OywKICAgICYjMzQ7c2htZW1fd3JpdGVvdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gY2hlY2sgdGhlIHN3YXAgbWFyZ2luIGZvciBtZW1vcnkgY2dyb3VwcyBhbmQgbW9kaWZpZXMgYGZvbGlvX2FsbG9jX3N3YXBgIHRvIHJldHVybiBzcGVjaWZpYyBlcnJvciBjb2RlcyAoLUUyQklHLCAtRU5PU1BDLCAtRU5PTUVNKSBpbnN0ZWFkIG9mIGEgYm9vbGVhbi4gSXQgYWxzbyB1cGRhdGVzIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgdG8gaGFuZGxlIHRoZXNlIG5ldyBlcnJvciBjb2Rlcywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIHRoZSBmYWxsYmFjayBiZWhhdmlvciB3aGVuIHN3YXBwaW5nIG91dCBsYXJnZSBmb2xpb3MgZmFpbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoc3dhcCwgc2htZW0sIHZtc2NhbikgdGhhdCBhZmZlY3QgaG93IGZvbGlvcyBhcmUgc3dhcHBlZCBvdXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgcmVsYXRlZCB0byBzd2FwIGFjY291bnRpbmcgYW5kIGZvbGlvIHN3YXAgYWxsb2NhdGlvbi4gSXQgaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHN3YXAgbWFyZ2lucyAoYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gKSBhbmQgcmVmaW5lcyB0aGUgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgYGZvbGlvX2FsbG9jX3N3YXBgIHRvIGJldHRlciBndWlkZSBmb2xpbyBzcGxpdHRpbmcgbG9naWMgaW4gYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YC4gXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBtZW1vcnkvc3dhcCBsaW1pdHMgYW5kIGRvIG5vdCBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGRhdGEgc3RydWN0dXJlcywgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIGxvZ2ljYWwgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzM3ZmRjMTExN2VmNmRlZjZmOGU2MmIxYWUwMmI0ZDQ0YmY4NzkxMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA4OjEwOjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgKaW5kZXggZDY0OWI2YmJiYzg3MS4uMDdiN2NiMTIyNDljNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oCkBAIC02OCw2ICYjNDM7NjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudGVyX3JlYWQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcikKIAlyZXR1cm4gYXRvbWljX2xvbmdfcmVhZCgmYW1wO2NvdW50ZXItJmd0O3VzYWdlKTsKIH0KIAomIzQzO2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKTsKIHZvaWQgcGFnZV9jb3VudGVyX2NhbmNlbChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIHZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIGJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggMGY5NTNlZDljODYzMC4uYTcyZWNmMTJjMDBkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTUxMCw2ICYjNDM7NTEwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3AKIAlfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpOwogfQogCiYjNDM7bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIGV4dGVybiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKIGV4dGVybiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogI2Vsc2UKQEAgLTUyMyw2ICYjNDM7NTI0LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsCiB7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBQQUdFX0NPVU5URVJfTUFYOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxZDMzMzk1MjA4MDlmLi40NDJhMjk3MTk3ZDUyIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC01Nzk2LDE1ICYjNDM7NTc5NiwzNSBAQCBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCWxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7CiAKLQlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSkKLQkJcmV0dXJuIG5yX3N3YXBfcGFnZXM7Ci0JZm9yICg7ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpOyBtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSkKLQkJbnJfc3dhcF9wYWdlcyA9IG1pbl90KGxvbmcsIG5yX3N3YXBfcGFnZXMsCi0JCQkJICAgICAgUkVBRF9PTkNFKG1lbWNnLSZndDtzd2FwLm1heCkgLQotCQkJCSAgICAgIHBhZ2VfY291bnRlcl9yZWFkKCZhbXA7bWVtY2ctJmd0O3N3YXApKTsKJiM0MzsJaWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgJmFtcDsmYW1wOyAhZG9fbWVtc3dfYWNjb3VudCgpKQomIzQzOwkJbnJfc3dhcF9wYWdlcyA9IG1pbihucl9zd2FwX3BhZ2VzLCBwYWdlX2NvdW50ZXJfbWFyZ2luKCZhbXA7bWVtY2ctJmd0O3N3YXApKTsKJiM0MzsKIAlyZXR1cm4gbnJfc3dhcF9wYWdlczsKIH0KIAomIzQzOy8qKgomIzQzOyAqIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luIC0gZ2V0IGEgZm9saW8mIzM5O3MgbWVtY2cgc3dhcCBtYXJnaW4KJiM0MzsgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbWNnIG1hcmdpbiBpcyBxdWVyaWVkCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFJlbWFpbmluZyBjaGFyZ2VhYmxlIHBhZ2VzIGluIHRoZSBmb2xpbyYjMzk7cyBtZW1jZyBoaWVyYXJjaHkuCiYjNDM7ICovCiYjNDM7bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwomIzQzOwlsb25nIG1hcmdpbjsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkgfHwKJiM0MzsJICAgICFmb2xpb19tZW1jZ19jaGFyZ2VkKGZvbGlvKSkKJiM0MzsJCXJldHVybiBQQUdFX0NPVU5URVJfTUFYOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pOwomIzQzOwltYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKCZhbXA7bWVtY2ctJmd0O3N3YXApOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hcmdpbjsKJiM0Mzt9CiYjNDM7CiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuYwppbmRleCA2NjFlMGYyYTUxMjdhLi40NTA1NDNmNGIzMThiIDEwMDY0NAotLS0gYS9tbS9wYWdlX2NvdW50ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2NvdW50ZXIuYwpAQCAtNDYsNiAmIzQzOzQ2LDI2IEBAIHN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9wcm90ZWN0ZWRfdXNhZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqYywKIAl9CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBwYWdlX2NvdW50ZXJfbWFyZ2luIC0gcmVtYWluaW5nIHVzYWJsZSBzcGFjZSB3aXRoaW4gaGllcmFyY2hpY2FsIGxpbWl0cwomIzQzOyAqIEBjb3VudGVyOiBjb3VudGVyCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFRoZSBtaW5pbXVtIHZhbHVlIG9mIG1heCBtaW51cyB1c2FnZSBhY3Jvc3MgQGNvdW50ZXIgYW5kIGFsbCBvZgomIzQzOyAqIGl0cyBhbmNlc3RvcnMuIFRoZSB2YWx1ZSBtYXkgYmUgbmVnYXRpdmUgZHVyaW5nIGEgY29uY3VycmVudCBjaGFyZ2UuCiYjNDM7ICovCiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpCiYjNDM7ewomIzQzOwlsb25nIG1hcmdpbiA9IFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCWxvbmcgbSA9IFJFQURfT05DRShjb3VudGVyLSZndDttYXgpIC0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7CiYjNDM7CiYjNDM7CQltYXJnaW4gPSBtaW4obWFyZ2luLCBtKTsKJiM0MzsJfSB3aGlsZSAoKGNvdW50ZXIgPSBjb3VudGVyLSZndDtwYXJlbnQpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hcmdpbjsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHBhZ2VfY291bnRlcl9jYW5jZWwgLSB0YWtlIHBhZ2VzIG91dCBvZiB0aGUgbG9jYWwgY291bnRlcgogICogQGNvdW50ZXI6IGNvdW50ZXIKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDU5OTY2NWEzZDZlN2IuLjZhMzVmNWVlODQzNzIgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMTYxMiw3ICYjNDM7MTYxMiw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpOwogCXN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS0mZ3Q7aV9zYik7CiAJcGdvZmZfdCBpbmRleDsKLQlpbnQgbnJfcGFnZXM7CiYjNDM7CWludCBucl9wYWdlcywgcmV0OwogCWJvb2wgc3BsaXQgPSBmYWxzZTsKIAogCWlmICgoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgU0hNRU1fRl9MT0NLRUQpIHx8IHNiaW5mby0mZ3Q7bm9zd2FwKQpAQCAtMTY5Myw3ICYjNDM7MTY5Myw4IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7CiAJfQogCi0JaWYgKCFmb2xpb19hbGxvY19zd2FwKGZvbGlvKSkgewomIzQzOwlyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTsKJiM0MzsJaWYgKCFyZXQpIHsKIAkJYm9vbCBmaXJzdF9zd2FwcGVkID0gc2htZW1fcmVjYWxjX2lub2RlKGlub2RlLCAwLCBucl9wYWdlcyk7CiAJCWludCBlcnJvcjsKIApAQCAtMTc0Niw3ICYjNDM7MTc0Nyw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJc3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pOwogCQlnb3RvIHJlZGlydHk7CiAJfQotCWlmIChucl9wYWdlcyAmZ3Q7IDEpCiYjNDM7CWlmIChucl9wYWdlcyAmZ3Q7IDEgJmFtcDsmYW1wOyByZXQgPT0gLUUyQklHKQogCQlnb3RvIHRyeV9zcGxpdDsKIHJlZGlydHk6CiAJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCBmNWRmYzdlNTkxOTFlLi4yZDEyN2YxYjMwYmFlIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTE3MzUsNyAmIzQzOzE3MzUsOSBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAgKiBzd2FwIGNhY2hlLgogICoKICAqIENvbnRleHQ6IENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBmb2xpbyBsb2NrLgotICogUmV0dXJuOiBXaGV0aGVyIHRoZSBmb2xpbyB3YXMgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUuCiYjNDM7ICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCAlLUUyQklHIGlmIHNwbGl0dGluZyB0aGUgZm9saW8gbWlnaHQgYWxsb3cgc3dhcG91dCwKJiM0MzsgKiAlLUVOT1NQQyBpZiBubyBnbG9iYWwgc3dhcCBzcGFjZSBpcyBhdmFpbGFibGUsIG9yICUtRU5PTUVNIGlmIHNwbGl0dGluZwomIzQzOyAqIHdvdWxkIG5vdCBoZWxwLgogICovCiBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewpAQCAtMTc0NywxMSAmIzQzOzE3NDksMTEgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKIAogCWlmIChvcmRlcikgewogCQkvKgotCQkgKiBSZWplY3QgbGFyZ2UgYWxsb2NhdGlvbiB3aGVuIFRIUF9TV0FQIGlzIGRpc2FibGVkLAotCQkgKiB0aGUgY2FsbGVyIHNob3VsZCBzcGxpdCB0aGUgZm9saW8gYW5kIHRyeSBhZ2Fpbi4KJiM0MzsJCSAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQuIENoZWNrIGJlbG93CiYjNDM7CQkgKiB3aGV0aGVyIHNwbGl0dGluZyBhbmQgcmV0cnlpbmcgY2FuIG1ha2UgcHJvZ3Jlc3MuCiAJCSAqLwogCQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RIUF9TV0FQKSkKLQkJCXJldHVybiAtRUFHQUlOOwomIzQzOwkJCWdvdG8gZmFpbGVkOwogCiAJCS8qCiAJCSAqIEFsbG9jYXRpb24gc2l6ZSBzaG91bGQgbmV2ZXIgZXhjZWVkIGNsdXN0ZXIgc2l6ZQpAQCAtMTc1OSw3ICYjNDM7MTc2MSw3IEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCSAqLwogCQlpZiAoc2l6ZSAmZ3Q7IFNXQVBGSUxFX0NMVVNURVIpIHsKIAkJCVZNX1dBUk5fT05fT05DRSgxKTsKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCWdvdG8gZmFpbGVkOwogCQl9CiAJfQogCkBAIC0xNzc1LDEzICYjNDM7MTc3NywyMyBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCX0KIAogCS8qIE5lZWQgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgYWxsb2NhdGlvbiBmYWlsZWQsIGZvciBNRU1DR19TV0FQX0ZBSUwuICovCi0JaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpCiYjNDM7CWlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKSB7CiAJCXN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTsKJiM0MzsJCWdvdG8gZmFpbGVkOwomIzQzOwl9CiAKIAlpZiAodW5saWtlbHkoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwkJZ290byBmYWlsZWQ7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztmYWlsZWQ6CiYjNDM7CWlmIChnZXRfbnJfc3dhcF9wYWdlcygpICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gLUVOT1NQQzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKSAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldHVybiBvcmRlciA/IC1FMkJJRyA6IC1FTk9NRU07CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiZTZiZDI2ZThjNTc4Li43NTQzMzYwMzM2MTYwIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTI1OSw2ICYjNDM7MTI1OSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwKIAkJICovCiAJCWlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pICZhbXA7JmFtcDsgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSAmYW1wOyZhbXA7CiAJCQkJIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkgewomIzQzOwkJCWludCByZXQ7CiYjNDM7CiAJCQlpZiAoIShzYy0mZ3Q7Z2ZwX21hc2sgJmFtcDsgX19HRlBfSU8pKQogCQkJCWdvdG8ga2VlcF9sb2NrZWQ7CiAJCQlpZiAoZm9saW9fbWF5YmVfZG1hX3Bpbm5lZChmb2xpbykpCkBAIC0xMjc3LDExICYjNDM7MTI3OSwxNCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsCiAJCQkJICAgIHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKQogCQkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZDsKIAkJCX0KLQkJCWlmIChmb2xpb19hbGxvY19zd2FwKGZvbGlvKSkgewomIzQzOwkJCXJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pOwomIzQzOwkJCWlmIChyZXQpIHsKIAkJCQlpbnQgX19tYXliZV91bnVzZWQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7CiAKIAkJCQlpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKQogCQkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDsKJiM0MzsJCQkJaWYgKHJldCAhPSAtRTJCSUcpCiYjNDM7CQkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZDsKIAkJCQkvKiBGYWxsYmFjayB0byBzd2FwIG5vcm1hbCBwYWdlcyAqLwogCQkJCWlmIChzcGxpdF9mb2xpb190b19saXN0KGZvbGlvLCBmb2xpb19saXN0KSkKIAkJCQkJZ290byBhY3RpdmF0ZV9sb2NrZWQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzYyCgkJCQkJCQlvdXRwdXQ6IDIyMAoJCQkJCQkJdGhvdWdodHM6IDEyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogU3dhcCBBY2NvdW50aW5nIGFuZCBGb2xpbyBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIHByZXR0eSBjbGVhbiBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHN0YW5kcG9pbnQsIGJ1dCBhcyBhbHdheXMsIGEgZGVlcCBkaXZlIGlzIHJlcXVpcmVkLiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyB3ZSBoYW5kbGUgc3dhcCBhY2NvdW50aW5nIGFuZCBmb2xpbyBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFdlIGFyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byB0aGUgc3dhcCBhY2NvdW50aW5nLCBmb2xpbyBzd2FwIGFsbG9jYXRpb24sIGFuZCBhZGp1c3RtZW50cyBmb3IgZXJyb3IgaGFuZGxpbmcuCgpUaGUga2V5IHBpZWNlcyBpbnRyb2R1Y2VkIGFyZSBgcGFnZV9jb3VudGVyX21hcmdpbmAgYW5kIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAuIFRoZXNlIGFwcGVhciB0byBjYWxjdWxhdGUgYXZhaWxhYmxlIHN3YXAgc3BhY2Ugd2l0aGluIHRoZSBsaW1pdHMgZGVmaW5lZCBieSBtZW1vcnkgY2dyb3Vwcy4gQW5hbHl6aW5nIHRoZSBjb2RlLCBgcGFnZV9jb3VudGVyX21hcmdpbmAgcmVhZHMgYGNvdW50ZXItJmd0O21heGAgYW5kIGBjb3VudGVyLSZndDt1c2FnZWAgdmlhIGBwYWdlX2NvdW50ZXJfcmVhZGAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhcmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQgaGVyZS4gYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCB0aGVuIGxldmVyYWdlcyBgcGFnZV9jb3VudGVyX21hcmdpbmAgZm9yIG1lbWNnLXNwZWNpZmljIG1hcmdpbnMuIFN0aWxsIGNsZWFuLgoKVGhlIHJlYWwgaGVhcnQgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlZmluaW5nIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGBmb2xpb19hbGxvY19zd2FwYC4gUHJldmlvdXNseSwgaXQgYXBwZWFycyB0aGlzIGZ1bmN0aW9uIHJldHVybmVkIGEgc2ltcGxlIGJvb2xlYW4gb3IgYSBnZW5lcmljIGVycm9yLCBidXQgaXQgbm93IHJldHVybnMgc3BlY2lmaWMgZXJyb3IgY29kZXMgbGlrZSBgLUUyQklHYCwgYC1FTk9TUENgLCBhbmQgYC1FTk9NRU1gLiBXZSYjMzk7cmUgc2VlaW5nIHRoZXNlIGVycm9ycyB1c2VkIGluIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgdG8gY29udHJvbCB3aGV0aGVyIGEgZm9saW8gaXMgc3BsaXQuIEluIGBzaG1lbV93cml0ZW91dGAsIHdlIGNoZWNrIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgYC1FMkJJR2AgYW5kIGlmIHRoZSBudW1iZXIgb2YgcGFnZXMgaXMgZ3JlYXRlciB0aGFuIDEsIHRoZW4gd2UgaW5pdGlhdGUgYSBzcGxpdC4gSW4gYHNocmlua19mb2xpb19saXN0YCwgdGhlIHJldHVybiB2YWx1ZSBpcyBldmFsdWF0ZWQgYWdhaW5zdCBgLUUyQklHYCB0byBkZWNpZGUgYmV0d2VlbiBhY3RpdmF0aW9uIGFuZCBzcGxpdHRpbmcuCgpOb3csIHRvIGV4cGxpY2l0bHkgYWRkcmVzcyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybjoKCjEuICAqKk5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuKioKMi4gICoqTm8gbmV3IGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHVuaW5pdGlhbGl6ZWQuKioKMy4gICoqTm8gYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGFueSBzdHJ1Y3RzLioqCjQuICAqKlRoZXJlIGlzIG5vIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNhZ2UgaW4gYW55IGNvbnRyb2wgZmxvdy4qKgoKSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHRvIG1ha2UgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgbW9yZSBncmFudWxhciBhbmQgcm9idXN0IGluIGhvdyBpdCBoYW5kbGVzIHN3YXAgYXZhaWxhYmlsaXR5IGFuZCBtZW1vcnkgY2dyb3VwIGxpbWl0cy4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGVzZSBzcGVjaWZpYyBlcnJvciBjb2RlcyBhbGxvd3MgZm9yIG1vcmUgaW5mb3JtZWQgZGVjaXNpb25zIG9uIGZvbGlvIHNwbGl0dGluZy4KCk9rYXksIGxldCYjMzk7cyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjaywgYmVjYXVzZSBzdWJ0bGUgYnVncyBhcmUgdGhlIHdvcnN0LiBUaGUgY2hhbmdlIGluIHRoZSByZXR1cm4gdHlwZSBvZiBgZm9saW9fYWxsb2Nfc3dhcGAgZnJvbSBhbiBpbXBsaWNpdCBib29sZWFuIHRvIGFuIGBpbnRgIHdpdGggc3BlY2lmaWMgZXJyb3IgY29kZXMgaW5pdGlhbGx5IHJhaXNlZCBhIGNvbmNlcm4sIGJ1dCBhZnRlciBnb2luZyB0aHJvdWdoIHRoZSBvbGQgYW5kIG5ldyBjb2RlLCBpdCBiZWNvbWVzIGNsZWFyIHRoYXQgdGhlIHN1Y2Nlc3MvZmFpbHVyZSBsb2dpYyByZW1haW5zIGlkZW50aWNhbC4gVGhlIG9sZCBjb2RlIGFuZCBuZXcgY29kZSB0cmVhdCAwIGFzIHN1Y2Nlc3MgYW5kIGFueSBvdGhlciByZXR1cm4gYXMgYW4gZXJyb3IuIFRoZSBvbGQgY29kZSB1c2VkIGJvb2xlYW4gY29tcGFyaXNvbiB0byBkZXRlcm1pbmUgaWYgYGZvbGlvX2FsbG9jX3N3YXBgIHJldHVybmVkIGFuIGVycm9yLCB0aGUgbmV3IGNvZGUgY2hlY2tzIHRoZSBzcGVjaWZpYyBlcnJvciBjb2RlIGByZXQgPT0gLUUyQklHYC4KCkkmIzM5O3ZlIGNhcmVmdWxseSBleGFtaW5lZCBob3cgdGhlIGVycm9yIGNvZGVzIGFyZSB1dGlsaXplZCBpbiBib3RoIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFRoZSBuZXcgY29kZSBlbmhhbmNlcyBlcnJvciBoYW5kbGluZyB3aXRob3V0IGludHJvZHVjaW5nIGFueSBub3ZlbCB3YXlzIHRvIGFjY2VzcyBvciBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKQmFzZWQgb24gdGhpcyB0aG9yb3VnaCBhbmFseXNpcywgSSBjYW4gZGVmaW5pdGl2ZWx5IHNheSB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gS0FTQU4gYW5kIG91ciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHRob3VnaCBldmVuIHRob3NlIGFyZSB1bmxpa2VseS4KClRoZXJlZm9yZSwgTmVlZHNLTVNBTiA9IGZhbHNlLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgY2hhbmdlcyBhcmUgcHVyZWx5IGZvY3VzZWQgb24gY29udHJvbCBmbG93IGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIGFuZCB0aGUgY29kZSBtb2RpZmljYXRpb25zIGFyZSBub3QgcmVsYXRlZCB0byBpbml0aWFsaXppbmcgb3IgZXhwb3NpbmcgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlbGF0ZWQgdG8gc3dhcCBhY2NvdW50aW5nIGFuZCBmb2xpbyBzd2FwIGFsbG9jYXRpb24uIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMgKGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCkgYW5kIHJlZmluZXMgdGhlIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGBmb2xpb19hbGxvY19zd2FwYCB0byBiZXR0ZXIgZ3VpZGUgZm9saW8gc3BsaXR0aW5nIGxvZ2ljIGluIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYmFzZWQgb24gbWVtb3J5L3N3YXAgbGltaXRzIGFuZCBkbyBub3QgaW52b2x2ZSBhbGxvY2F0aW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGNvcHlpbmcgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBtb2RpZnlpbmcgZGF0YSBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBsb2dpY2FsIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlbGF0ZWQgdG8gc3dhcCBhY2NvdW50aW5nIGFuZCBmb2xpbyBzd2FwIGFsbG9jYXRpb24uIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMgKGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCkgYW5kIHJlZmluZXMgdGhlIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGBmb2xpb19hbGxvY19zd2FwYCB0byBiZXR0ZXIgZ3VpZGUgZm9saW8gc3BsaXR0aW5nIGxvZ2ljIGluIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYmFzZWQgb24gbWVtb3J5L3N3YXAgbGltaXRzIGFuZCBkbyBub3QgaW52b2x2ZSBhbGxvY2F0aW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGNvcHlpbmcgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBtb2RpZnlpbmcgZGF0YSBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBsb2dpY2FsIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjEwOjUzLjc2Njg1OTgyNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjU3MzM2NjAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV9jb3VudGVyX21hcmdpblwiLFxuICAgIFwibWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5cIixcbiAgICBcImZvbGlvX2FsbG9jX3N3YXBcIixcbiAgICBcInNobWVtX3dyaXRlb3V0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlbGF0ZWQgdG8gc3dhcCBhY2NvdW50aW5nIGFuZCBmb2xpbyBzd2FwIGFsbG9jYXRpb24uIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMgKGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCkgYW5kIHJlZmluZXMgdGhlIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGBmb2xpb19hbGxvY19zd2FwYCB0byBiZXR0ZXIgZ3VpZGUgZm9saW8gc3BsaXR0aW5nIGxvZ2ljIGluIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBtZW1vcnkvc3dhcCBsaW1pdHMgYW5kIGRvIG5vdCBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGRhdGEgc3RydWN0dXJlcywgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIGxvZ2ljYWwgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBjaGVjayB0aGUgc3dhcCBtYXJnaW4gZm9yIG1lbW9yeSBjZ3JvdXBzIGFuZCBtb2RpZmllcyBgZm9saW9fYWxsb2Nfc3dhcGAgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9yIGNvZGVzICgtRTJCSUcsIC1FTk9TUEMsIC1FTk9NRU0pIGluc3RlYWQgb2YgYSBib29sZWFuLiBJdCBhbHNvIHVwZGF0ZXMgYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCB0byBoYW5kbGUgdGhlc2UgbmV3IGVycm9yIGNvZGVzLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgdGhlIGZhbGxiYWNrIGJlaGF2aW9yIHdoZW4gc3dhcHBpbmcgb3V0IGxhcmdlIGZvbGlvcyBmYWlscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChzd2FwLCBzaG1lbSwgdm1zY2FuKSB0aGF0IGFmZmVjdCBob3cgZm9saW9zIGFyZSBzd2FwcGVkIG91dCB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjEwOjUzLjc2Njg2NzA5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MTYwMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzM3ZmRjMTExN2VmNmRlZjZmOGU2MmIxYWUwMmI0ZDQ0YmY4NzkxMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwODoxMDo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxcbmluZGV4IGQ2NDliNmJiYmM4NzEuLjA3YjdjYjEyMjQ5YzcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcXG5AQCAtNjgsNiArNjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudGVyX3JlYWQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcXG4gXFx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNmNvdW50ZXItXFx1MDAzZXVzYWdlKTtcXG4gfVxcbiBcXG4rbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpO1xcbiB2b2lkIHBhZ2VfY291bnRlcl9jYW5jZWwoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuIHZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gYm9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuaW5kZXggMGY5NTNlZDljODYzMC4uYTcyZWNmMTJjMDBkYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuQEAgLTUxMCw2ICs1MTAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcFxcbiBcXHRfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpO1xcbiB9XFxuIFxcbitsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuIGV4dGVybiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiAjZWxzZVxcbkBAIC01MjMsNiArNTI0LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXFxuIHtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggMWQzMzM5NTIwODA5Zi4uNDQyYTI5NzE5N2Q1MiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtNTc5NiwxNSArNTc5NiwzNSBAQCBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XFxuIFxcbi1cXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSlcXG4tXFx0XFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XFxuLVxcdGZvciAoOyAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKTsgbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpXFxuLVxcdFxcdG5yX3N3YXBfcGFnZXMgPSBtaW5fdChsb25nLCBucl9zd2FwX3BhZ2VzLFxcbi1cXHRcXHRcXHRcXHQgICAgICBSRUFEX09OQ0UobWVtY2ctXFx1MDAzZXN3YXAubWF4KSAtXFxuLVxcdFxcdFxcdFxcdCAgICAgIHBhZ2VfY291bnRlcl9yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCkpO1xcbitcXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhZG9fbWVtc3dfYWNjb3VudCgpKVxcbitcXHRcXHRucl9zd2FwX3BhZ2VzID0gbWluKG5yX3N3YXBfcGFnZXMsIHBhZ2VfY291bnRlcl9tYXJnaW4oXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwKSk7XFxuK1xcbiBcXHRyZXR1cm4gbnJfc3dhcF9wYWdlcztcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luIC0gZ2V0IGEgZm9saW8ncyBtZW1jZyBzd2FwIG1hcmdpblxcbisgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbWNnIG1hcmdpbiBpcyBxdWVyaWVkXFxuKyAqXFxuKyAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJ3MgbWVtY2cgaGllcmFyY2h5LlxcbisgKi9cXG4rbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4rXFx0bG9uZyBtYXJnaW47XFxuK1xcbitcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSB8fFxcbitcXHQgICAgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gUEFHRV9DT1VOVEVSX01BWDtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxuK1xcdG1hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gbWFyZ2luO1xcbit9XFxuK1xcbiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jXFxuaW5kZXggNjYxZTBmMmE1MTI3YS4uNDUwNTQzZjRiMzE4YiAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2NvdW50ZXIuY1xcbisrKyBiL21tL3BhZ2VfY291bnRlci5jXFxuQEAgLTQ2LDYgKzQ2LDI2IEBAIHN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9wcm90ZWN0ZWRfdXNhZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqYyxcXG4gXFx0fVxcbiB9XFxuIFxcbisvKipcXG4rICogcGFnZV9jb3VudGVyX21hcmdpbiAtIHJlbWFpbmluZyB1c2FibGUgc3BhY2Ugd2l0aGluIGhpZXJhcmNoaWNhbCBsaW1pdHNcXG4rICogQGNvdW50ZXI6IGNvdW50ZXJcXG4rICpcXG4rICogUmV0dXJuOiBUaGUgbWluaW11bSB2YWx1ZSBvZiBtYXggbWludXMgdXNhZ2UgYWNyb3NzIEBjb3VudGVyIGFuZCBhbGwgb2ZcXG4rICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS5cXG4rICovXFxuK2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxcbit7XFxuK1xcdGxvbmcgbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0bG9uZyBtID0gUkVBRF9PTkNFKGNvdW50ZXItXFx1MDAzZW1heCkgLSBwYWdlX2NvdW50ZXJfcmVhZChjb3VudGVyKTtcXG4rXFxuK1xcdFxcdG1hcmdpbiA9IG1pbihtYXJnaW4sIG0pO1xcbitcXHR9IHdoaWxlICgoY291bnRlciA9IGNvdW50ZXItXFx1MDAzZXBhcmVudCkpO1xcbitcXG4rXFx0cmV0dXJuIG1hcmdpbjtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHBhZ2VfY291bnRlcl9jYW5jZWwgLSB0YWtlIHBhZ2VzIG91dCBvZiB0aGUgbG9jYWwgY291bnRlclxcbiAgKiBAY291bnRlcjogY291bnRlclxcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xcbmluZGV4IDU5OTY2NWEzZDZlN2IuLjZhMzVmNWVlODQzNzIgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMTYxMiw3ICsxNjEyLDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xcbiBcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbiBcXHRwZ29mZl90IGluZGV4O1xcbi1cXHRpbnQgbnJfcGFnZXM7XFxuK1xcdGludCBucl9wYWdlcywgcmV0O1xcbiBcXHRib29sIHNwbGl0ID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0hNRU1fRl9MT0NLRUQpIHx8IHNiaW5mby1cXHUwMDNlbm9zd2FwKVxcbkBAIC0xNjkzLDcgKzE2OTMsOCBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7XFxuK1xcdHJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pO1xcbitcXHRpZiAoIXJldCkge1xcbiBcXHRcXHRib29sIGZpcnN0X3N3YXBwZWQgPSBzaG1lbV9yZWNhbGNfaW5vZGUoaW5vZGUsIDAsIG5yX3BhZ2VzKTtcXG4gXFx0XFx0aW50IGVycm9yO1xcbiBcXG5AQCAtMTc0Niw3ICsxNzQ3LDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxuIFxcdFxcdGdvdG8gcmVkaXJ0eTtcXG4gXFx0fVxcbi1cXHRpZiAobnJfcGFnZXMgXFx1MDAzZSAxKVxcbitcXHRpZiAobnJfcGFnZXMgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IHJldCA9PSAtRTJCSUcpXFxuIFxcdFxcdGdvdG8gdHJ5X3NwbGl0O1xcbiByZWRpcnR5OlxcbiBcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcXG5pbmRleCBmNWRmYzdlNTkxOTFlLi4yZDEyN2YxYjMwYmFlIDEwMDY0NFxcbi0tLSBhL21tL3N3YXBmaWxlLmNcXG4rKysgYi9tbS9zd2FwZmlsZS5jXFxuQEAgLTE3MzUsNyArMTczNSw5IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4gICogc3dhcCBjYWNoZS5cXG4gICpcXG4gICogQ29udGV4dDogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGZvbGlvIGxvY2suXFxuLSAqIFJldHVybjogV2hldGhlciB0aGUgZm9saW8gd2FzIGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlLlxcbisgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsICUtRTJCSUcgaWYgc3BsaXR0aW5nIHRoZSBmb2xpbyBtaWdodCBhbGxvdyBzd2Fwb3V0LFxcbisgKiAlLUVOT1NQQyBpZiBubyBnbG9iYWwgc3dhcCBzcGFjZSBpcyBhdmFpbGFibGUsIG9yICUtRU5PTUVNIGlmIHNwbGl0dGluZ1xcbisgKiB3b3VsZCBub3QgaGVscC5cXG4gICovXFxuIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG5AQCAtMTc0NywxMSArMTc0OSwxMSBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXG4gXFx0aWYgKG9yZGVyKSB7XFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQsXFxuLVxcdFxcdCAqIHRoZSBjYWxsZXIgc2hvdWxkIHNwbGl0IHRoZSBmb2xpbyBhbmQgdHJ5IGFnYWluLlxcbitcXHRcXHQgKiBSZWplY3QgbGFyZ2UgYWxsb2NhdGlvbiB3aGVuIFRIUF9TV0FQIGlzIGRpc2FibGVkLiBDaGVjayBiZWxvd1xcbitcXHRcXHQgKiB3aGV0aGVyIHNwbGl0dGluZyBhbmQgcmV0cnlpbmcgY2FuIG1ha2UgcHJvZ3Jlc3MuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RIUF9TV0FQKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbiBcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogQWxsb2NhdGlvbiBzaXplIHNob3VsZCBuZXZlciBleGNlZWQgY2x1c3RlciBzaXplXFxuQEAgLTE3NTksNyArMTc2MSw3IEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIFNXQVBGSUxFX0NMVVNURVIpIHtcXG4gXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKDEpO1xcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtMTc3NSwxMyArMTc3NywyMyBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBOZWVkIHRvIGNhbGwgdGhpcyBldmVuIGlmIGFsbG9jYXRpb24gZmFpbGVkLCBmb3IgTUVNQ0dfU1dBUF9GQUlMLiAqL1xcbi1cXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSlcXG4rXFx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpIHtcXG4gXFx0XFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xcbitcXHRcXHRnb3RvIGZhaWxlZDtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKHVubGlrZWx5KCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0Z290byBmYWlsZWQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2ZhaWxlZDpcXG4rXFx0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuK1xcdGlmIChtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihmb2xpbykgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXR1cm4gb3JkZXIgPyAtRTJCSUcgOiAtRU5PTUVNO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGJlNmJkMjZlOGM1NzguLjc1NDMzNjAzMzYxNjAgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC0xMjU5LDYgKzEyNTksOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG4rXFx0XFx0XFx0aW50IHJldDtcXG4rXFxuIFxcdFxcdFxcdGlmICghKHNjLVxcdTAwM2VnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0lPKSlcXG4gXFx0XFx0XFx0XFx0Z290byBrZWVwX2xvY2tlZDtcXG4gXFx0XFx0XFx0aWYgKGZvbGlvX21heWJlX2RtYV9waW5uZWQoZm9saW8pKVxcbkBAIC0xMjc3LDExICsxMjc5LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4gXFx0XFx0XFx0XFx0ICAgIHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKVxcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcXG4rXFx0XFx0XFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XFxuK1xcdFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0XFx0aW50IF9fbWF5YmVfdW51c2VkIG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xcbiBcXG4gXFx0XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBhY3RpdmF0ZV9sb2NrZWRfc3BsaXQ7XFxuK1xcdFxcdFxcdFxcdGlmIChyZXQgIT0gLUUyQklHKVxcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcXG4gXFx0XFx0XFx0XFx0LyogRmFsbGJhY2sgdG8gc3dhcCBub3JtYWwgcGFnZXMgKi9cXG4gXFx0XFx0XFx0XFx0aWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKVxcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTA6NTQuMjIyNzQyNzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzU1ODY3MzU2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJTSE1FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhZ2VfY291bnRlcl9tYXJnaW5cIixcbiAgICBcIm1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luXCIsXG4gICAgXCJmb2xpb19hbGxvY19zd2FwXCIsXG4gICAgXCJzaG1lbV93cml0ZW91dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGNoZWNrIHRoZSBzd2FwIG1hcmdpbiBmb3IgbWVtb3J5IGNncm91cHMgYW5kIG1vZGlmaWVzIGBmb2xpb19hbGxvY19zd2FwYCB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMgKC1FMkJJRywgLUVOT1NQQywgLUVOT01FTSkgaW5zdGVhZCBvZiBhIGJvb2xlYW4uIEl0IGFsc28gdXBkYXRlcyBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIGhhbmRsZSB0aGVzZSBuZXcgZXJyb3IgY29kZXMsIHNwZWNpZmljYWxseSBjaGFuZ2luZyB0aGUgZmFsbGJhY2sgYmVoYXZpb3Igd2hlbiBzd2FwcGluZyBvdXQgbGFyZ2UgZm9saW9zIGZhaWxzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKHN3YXAsIHNobWVtLCB2bXNjYW4pIHRoYXQgYWZmZWN0IGhvdyBmb2xpb3MgYXJlIHN3YXBwZWQgb3V0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzM3ZmRjMTExN2VmNmRlZjZmOGU2MmIxYWUwMmI0ZDQ0YmY4NzkxMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA4OjEwOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbmluZGV4IGQ2NDliNmJiYmM4NzEuLjA3YjdjYjEyMjQ5YzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXG5AQCAtNjgsNiArNjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudGVyX3JlYWQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcbiBcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmNvdW50ZXItXHUwMDNldXNhZ2UpO1xuIH1cbiBcbitsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcik7XG4gdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBib29sIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggMGY5NTNlZDljODYzMC4uYTcyZWNmMTJjMDBkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTUxMCw2ICs1MTAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcFxuIFx0X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTtcbiB9XG4gXG4rbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2VcbkBAIC01MjMsNiArNTI0LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXG4ge1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gUEFHRV9DT1VOVEVSX01BWDtcbit9XG4rXG4gc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMWQzMzM5NTIwODA5Zi4uNDQyYTI5NzE5N2Q1MiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNTc5NiwxNSArNTc5NiwzNSBAQCBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XG4gXG4tXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSlcbi1cdFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG4tXHRmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKVxuLVx0XHRucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcyxcbi1cdFx0XHRcdCAgICAgIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwLm1heCkgLVxuLVx0XHRcdFx0ICAgICAgcGFnZV9jb3VudGVyX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCkpO1xuK1x0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2ICFkb19tZW1zd19hY2NvdW50KCkpXG4rXHRcdG5yX3N3YXBfcGFnZXMgPSBtaW4obnJfc3dhcF9wYWdlcywgcGFnZV9jb3VudGVyX21hcmdpbihcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKSk7XG4rXG4gXHRyZXR1cm4gbnJfc3dhcF9wYWdlcztcbiB9XG4gXG4rLyoqXG4rICogbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4gLSBnZXQgYSBmb2xpbydzIG1lbWNnIHN3YXAgbWFyZ2luXG4rICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1jZyBtYXJnaW4gaXMgcXVlcmllZFxuKyAqXG4rICogUmV0dXJuOiBSZW1haW5pbmcgY2hhcmdlYWJsZSBwYWdlcyBpbiB0aGUgZm9saW8ncyBtZW1jZyBoaWVyYXJjaHkuXG4rICovXG4rbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcdGxvbmcgbWFyZ2luO1xuK1xuK1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkgfHxcbitcdCAgICAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpXG4rXHRcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4rXHRtYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gbWFyZ2luO1xuK31cbitcbiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmNcbmluZGV4IDY2MWUwZjJhNTEyN2EuLjQ1MDU0M2Y0YjMxOGIgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2NvdW50ZXIuY1xuKysrIGIvbW0vcGFnZV9jb3VudGVyLmNcbkBAIC00Niw2ICs0NiwyNiBAQCBzdGF0aWMgdm9pZCBwcm9wYWdhdGVfcHJvdGVjdGVkX3VzYWdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmMsXG4gXHR9XG4gfVxuIFxuKy8qKlxuKyAqIHBhZ2VfY291bnRlcl9tYXJnaW4gLSByZW1haW5pbmcgdXNhYmxlIHNwYWNlIHdpdGhpbiBoaWVyYXJjaGljYWwgbGltaXRzXG4rICogQGNvdW50ZXI6IGNvdW50ZXJcbisgKlxuKyAqIFJldHVybjogVGhlIG1pbmltdW0gdmFsdWUgb2YgbWF4IG1pbnVzIHVzYWdlIGFjcm9zcyBAY291bnRlciBhbmQgYWxsIG9mXG4rICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS5cbisgKi9cbitsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcbit7XG4rXHRsb25nIG1hcmdpbiA9IFBBR0VfQ09VTlRFUl9NQVg7XG4rXG4rXHRkbyB7XG4rXHRcdGxvbmcgbSA9IFJFQURfT05DRShjb3VudGVyLVx1MDAzZW1heCkgLSBwYWdlX2NvdW50ZXJfcmVhZChjb3VudGVyKTtcbitcbitcdFx0bWFyZ2luID0gbWluKG1hcmdpbiwgbSk7XG4rXHR9IHdoaWxlICgoY291bnRlciA9IGNvdW50ZXItXHUwMDNlcGFyZW50KSk7XG4rXG4rXHRyZXR1cm4gbWFyZ2luO1xuK31cbitcbiAvKipcbiAgKiBwYWdlX2NvdW50ZXJfY2FuY2VsIC0gdGFrZSBwYWdlcyBvdXQgb2YgdGhlIGxvY2FsIGNvdW50ZXJcbiAgKiBAY291bnRlcjogY291bnRlclxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA1OTk2NjVhM2Q2ZTdiLi42YTM1ZjVlZTg0MzcyIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTE2MTIsNyArMTYxMiw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRwZ29mZl90IGluZGV4O1xuLVx0aW50IG5yX3BhZ2VzO1xuK1x0aW50IG5yX3BhZ2VzLCByZXQ7XG4gXHRib29sIHNwbGl0ID0gZmFsc2U7XG4gXG4gXHRpZiAoKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IFNITUVNX0ZfTE9DS0VEKSB8fCBzYmluZm8tXHUwMDNlbm9zd2FwKVxuQEAgLTE2OTMsNyArMTY5Myw4IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4gXHR9XG4gXG4tXHRpZiAoIWZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7XG4rXHRyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTtcbitcdGlmICghcmV0KSB7XG4gXHRcdGJvb2wgZmlyc3Rfc3dhcHBlZCA9IHNobWVtX3JlY2FsY19pbm9kZShpbm9kZSwgMCwgbnJfcGFnZXMpO1xuIFx0XHRpbnQgZXJyb3I7XG4gXG5AQCAtMTc0Niw3ICsxNzQ3LDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4gXHRcdGdvdG8gcmVkaXJ0eTtcbiBcdH1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMSlcbitcdGlmIChucl9wYWdlcyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgcmV0ID09IC1FMkJJRylcbiBcdFx0Z290byB0cnlfc3BsaXQ7XG4gcmVkaXJ0eTpcbiBcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXG5pbmRleCBmNWRmYzdlNTkxOTFlLi4yZDEyN2YxYjMwYmFlIDEwMDY0NFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xuKysrIGIvbW0vc3dhcGZpbGUuY1xuQEAgLTE3MzUsNyArMTczNSw5IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiAgKiBzd2FwIGNhY2hlLlxuICAqXG4gICogQ29udGV4dDogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGZvbGlvIGxvY2suXG4tICogUmV0dXJuOiBXaGV0aGVyIHRoZSBmb2xpbyB3YXMgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUuXG4rICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCAlLUUyQklHIGlmIHNwbGl0dGluZyB0aGUgZm9saW8gbWlnaHQgYWxsb3cgc3dhcG91dCxcbisgKiAlLUVOT1NQQyBpZiBubyBnbG9iYWwgc3dhcCBzcGFjZSBpcyBhdmFpbGFibGUsIG9yICUtRU5PTUVNIGlmIHNwbGl0dGluZ1xuKyAqIHdvdWxkIG5vdCBoZWxwLlxuICAqL1xuIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuQEAgLTE3NDcsMTEgKzE3NDksMTEgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBcdGlmIChvcmRlcikge1xuIFx0XHQvKlxuLVx0XHQgKiBSZWplY3QgbGFyZ2UgYWxsb2NhdGlvbiB3aGVuIFRIUF9TV0FQIGlzIGRpc2FibGVkLFxuLVx0XHQgKiB0aGUgY2FsbGVyIHNob3VsZCBzcGxpdCB0aGUgZm9saW8gYW5kIHRyeSBhZ2Fpbi5cbitcdFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZC4gQ2hlY2sgYmVsb3dcbitcdFx0ICogd2hldGhlciBzcGxpdHRpbmcgYW5kIHJldHJ5aW5nIGNhbiBtYWtlIHByb2dyZXNzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19USFBfU1dBUCkpXG4tXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4rXHRcdFx0Z290byBmYWlsZWQ7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEFsbG9jYXRpb24gc2l6ZSBzaG91bGQgbmV2ZXIgZXhjZWVkIGNsdXN0ZXIgc2l6ZVxuQEAgLTE3NTksNyArMTc2MSw3IEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2l6ZSBcdTAwM2UgU1dBUEZJTEVfQ0xVU1RFUikge1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRnb3RvIGZhaWxlZDtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTE3NzUsMTMgKzE3NzcsMjMgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdH1cbiBcbiBcdC8qIE5lZWQgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgYWxsb2NhdGlvbiBmYWlsZWQsIGZvciBNRU1DR19TV0FQX0ZBSUwuICovXG4tXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSlcbitcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKSB7XG4gXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbitcdFx0Z290byBmYWlsZWQ7XG4rXHR9XG4gXG4gXHRpZiAodW5saWtlbHkoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRnb3RvIGZhaWxlZDtcbiBcbiBcdHJldHVybiAwO1xuK1xuK2ZhaWxlZDpcbitcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIC1FTk9TUEM7XG4rXHRpZiAobWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oZm9saW8pIFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXR1cm4gb3JkZXIgPyAtRTJCSUcgOiAtRU5PTUVNO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBiZTZiZDI2ZThjNTc4Li43NTQzMzYwMzM2MTYwIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTI1OSw2ICsxMjU5LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHQgKi9cbiBcdFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4rXHRcdFx0aW50IHJldDtcbitcbiBcdFx0XHRpZiAoIShzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pKVxuIFx0XHRcdFx0Z290byBrZWVwX2xvY2tlZDtcbiBcdFx0XHRpZiAoZm9saW9fbWF5YmVfZG1hX3Bpbm5lZChmb2xpbykpXG5AQCAtMTI3NywxMSArMTI3OSwxNCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdFx0XHQgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcbitcdFx0XHRyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTtcbitcdFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0XHRpbnQgX19tYXliZV91bnVzZWQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXG4gXHRcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuIFx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDtcbitcdFx0XHRcdGlmIChyZXQgIT0gLUUyQklHKVxuK1x0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcbiBcdFx0XHRcdC8qIEZhbGxiYWNrIHRvIHN3YXAgbm9ybWFsIHBhZ2VzICovXG4gXHRcdFx0XHRpZiAoc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTA6NTQuMjIyNzQ0MTMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI1Njk0MzM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBpbnRyb2R1Y2luZyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBzd2FwLCBzaGFyZWQgbWVtb3J5IChzaG1lbSksIGFuZCB0aGUgdmlydHVhbCBtZW1vcnkgc2Nhbm5lciAodm1zY2FuKS4gV2UgbmVlZCB0byBhbmFseXplIHRoaXMgcGF0Y2ggZm9yIGZ1enppbmcgdGFyZ2V0cyBiZWNhdXNlIGl0IGNoYW5nZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudC5cblxuSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBrZXkgYXJlYXMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW06IGBtbS9wYWdlX2NvdW50ZXIuY2AsIGBtbS9tZW1jb250cm9sLmNgLCBgbW0vc2htZW0uY2AsIGBtbS9zd2FwZmlsZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuIEltbWVkaWF0ZWx5LCBJIG5vdGljZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYXMgd2VsbCBhcyBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGBmb2xpb19hbGxvY19zd2FwYC4gVGhhdCBsYXN0IG9uZSBpcyBhIHJlZCBmbGFnLCBtZWFuaW5nIGl0IGlzIG1vcmUgdGhhbiBqdXN0IGEgYmVoYXZpb3JhbCBjaGFuZ2UuXG5cblByZXZpb3VzbHksIGBmb2xpb19hbGxvY19zd2FwYCByZXR1cm5lZCBhIGJvb2xlYW4sIG5vdyBpdCdzIGdvaW5nIHRvIHJldHVybiBhbiBpbnRlZ2VyIHdpdGggbXVsdGlwbGUgZXJyb3IgY29kZXMuIFNwZWNpZmljYWxseTogMCBvbiBzdWNjZXNzLCBgLUUyQklHYCAoc3BsaXR0aW5nIG1pZ2h0IGFsbG93IHN3YXBvdXQpLCBgLUVOT1NQQ2AgKG5vIGdsb2JhbCBzd2FwIHNwYWNlKSwgYW5kIGAtRU5PTUVNYCAoc3BsaXR0aW5nIHdvbid0IGhlbHApLiBUaGUgY2hhbmdlcyBpbiBgc2hyaW5rX2ZvbGlvX2xpc3RgIGFuZCBgc2htZW1fd3JpdGVvdXRgIGRlbW9uc3RyYXRlIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cbkxvb2tpbmcgYXQgYHNocmlua19mb2xpb19saXN0YCwgdGhlIHBhdGNoIGFsdGVycyB0aGUgZXJyb3IgaGFuZGxpbmcgZmxvdy4gSWYgYGZvbGlvX2FsbG9jX3N3YXBgIGZhaWxzIHdpdGggYW4gZXJyb3IgKm90aGVyKiB0aGFuIGAtRTJCSUdgLCBpdCAqc2tpcHMqIHRoZSBmb2xpbyBzcGxpdHRpbmcgcHJvY2VzcyBhbmQganVzdCBhY3RpdmF0ZXMgdGhlIGZvbGlvLCB3aGljaCBpcyBhIG1ham9yIGRpZmZlcmVuY2UgaW4gYmVoYXZpb3IuIFRoZSBzYW1lIGlzIHRydWUgaW4gYHNobWVtX3dyaXRlb3V0YCwgd2hlcmUgdGhlIGNvbmRpdGlvbnMgZm9yIHRyeWluZyB0byBzcGxpdCBmb2xpb3MgaGF2ZSBhbHNvIGNoYW5nZWQgdG8gY29uc2lkZXIgdGhlIHJldHVybiBjb2RlIGZyb20gYGZvbGlvX2FsbG9jX3N3YXBgLiBUaGlzIGlzIGEgYmlnIGRlYWwsIHdlIG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHRoZXNlIGNoYW5nZXMgdG8gZmluZCB0aGUgbW9zdCB2dWxuZXJhYmxlIHBvaW50cy5cblxuU28sIHdoZXJlIHNob3VsZCBteSBmb2N1cyBiZT8gSSdtIGdvaW5nIHRvIHdhbnQgdG8gcHJpb3JpdGl6ZSBmdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseTogYGZvbGlvX2FsbG9jX3N3YXBgLCBgc2htZW1fd3JpdGVvdXRgLCBgc2hyaW5rX2ZvbGlvX2xpc3RgLCBgcGFnZV9jb3VudGVyX21hcmdpbmAsIGFuZCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLiBXYWl0LCBpcyBgc2hyaW5rX2ZvbGlvX2xpc3RgIHN0YXRpYz8gTGV0IG1lIGRvdWJsZS1jaGVjay4gWWVzLCBpdCBsb29rcyBsaWtlIGBzaG1lbV93cml0ZW91dGAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBgZm9saW9fYWxsb2Nfc3dhcGAgaXMgaW4gYG1tL3N3YXBmaWxlLmNgLCB3aGljaCBtYWtlcyBpdCBhdmFpbGFibGUgb3V0c2lkZSBpdHMgY29tcGlsYXRpb24gdW5pdC4gU28gYGZvbGlvX2FsbG9jX3N3YXBgIGlzIHRoZSBoaWdoIHByaW9yaXR5LiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBwcm9wYWdhdGVkIHRocm91Z2hvdXQgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NjUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMTowMy40Nzk2ODk4NzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NTMzMzM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHNobWVtX3dyaXRlb3V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9MTU1Nj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXFxuLS1cXG5tbS9zaG1lbS5jLTE2MDYtICovXFxubW0vc2htZW0uYzoxNjA3OmludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9zaG1lbS5jLTE2MDgtXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcXG4tLVxcbm1tL3N3YXAuaD00NjY9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBzd2FwX29wcyBzd2FwX2JkZXZfb3BzO1xcbm1tL3N3YXAuaC00NjctXFxubW0vc3dhcC5oOjQ2ODppbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vc3dhcC5oLTQ2OS1cXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MDUuODY1MDI5ODgzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyMjMxNTAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgTm9uLVN0YXRpYyBGdW5jdGlvbiBVc2FnZSBhbmQgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBzaG1lbV93cml0ZW91dGAsIGBmb2xpb19hbGxvY19zd2FwYCwgYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYC4gVGhleSdyZSBhbGwgZGVjbGFyZWQgbm9uLXN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBzY29wZSBhbmQgaG93IHRoZXkncmUgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC5cblxuTm93LCBsZXQncyBjb3JyZWxhdGUgdGhlc2UgZnVuY3Rpb25zIHdpdGggdGhlIEtjb25maWcgb3B0aW9ucy4gSSBzZWUgdGhhdCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gIGFuZCBgcGFnZV9jb3VudGVyX21hcmdpbmAgcmVxdWlyZSBgQ09ORklHX01FTUNHYC4gTWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlc2UgYXJlIGNsZWFybHkgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3Vwcy4gU2ltaWxhcmx5LCBgZm9saW9fYWxsb2Nfc3dhcGAgY2xlYXJseSBkZXBlbmRzIG9uIGBDT05GSUdfU1dBUGAgZm9yLCB3ZWxsLCBzd2FwcGluZyBmdW5jdGlvbmFsaXR5LiBGaW5hbGx5LCBgc2htZW1fd3JpdGVvdXRgIG5lZWRzIGBDT05GSUdfU0hNRU1gLlxuXG5JbnRyaWd1aW5nbHksIGBDT05GSUdfVEhQX1NXQVBgIGFsc28gcG9wcyB1cCBpbiB0aGUgY29udGV4dCBvZiBgZm9saW9fYWxsb2Nfc3dhcGAuIFRoYXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYXMgaXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uIG1heSBoYXZlIHNvbWUgc3BlY2lmaWMgYmVoYXZpb3Igb3Igb3B0aW1pemF0aW9uIGluIHJlbGF0aW9uIHRvIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgYW5kIHN3YXAgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgdGhlaXIgaW50ZXJhY3Rpb24uIFRoaXMgaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGVpciByb2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0cyBvbiBzeXN0ZW0gY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyNSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMTowOS44ODczNDkxNDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMjYwNzgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeY29uZmlnIFRIUF9TV0FQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9OTY4PWVuZGNob2ljZVxcbm1tL0tjb25maWctOTY5LVxcbm1tL0tjb25maWc6OTcwOmNvbmZpZyBUSFBfU1dBUFxcbm1tL0tjb25maWctOTcxLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MTIuMTg5OTYzMzc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0NTUyMjY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqVEhQX1NXQVA6IEEgRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBgVEhQX1NXQVBgIGlzIGRlZmluZWQgYXMgYSBib29sZWFuIChgZGVmX2Jvb2wgeWApLiBUaGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlIHJlYWwgbWVhdCBsaWVzIGluIHRoZSAqZGVwZW5kZW5jaWVzKi4gSXQncyBjcml0aWNhbGx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgaXMgc2V0IHVwIHRoaXMgd2F5LiBJdCdzIGEga2V5IHBhcnQgb2YgdGhlIGRlc2lnbi5cblxuRmlyc3QsIHRoZSBkZXBlbmRlbmN5IG9uIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgbWFrZXMgcGVyZmVjdCBzZW5zZS4gV2UncmUgdGFsa2luZyBhYm91dCBzd2FwcGluZyAqdHJhbnNwYXJlbnQqIGh1Z2UgcGFnZXMgaGVyZSwgc28gY2xlYXJseSBUSFAgc3VwcG9ydCBoYXMgdG8gYmUgZW5hYmxlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIFlvdSBjYW4ndCBzd2FwIHNvbWV0aGluZyB0aGF0IGRvZXNuJ3QgZXhpc3QsIHJpZ2h0P1xuXG5BbmQgdGhlbiwgb2YgY291cnNlLCB0aGUgZGVwZW5kZW5jeSBvbiBgU1dBUGAuIFRoYXQncyB0aGUgKm9idmlvdXMqIG9uZS4gV2h5IGV2ZW4gYm90aGVyIHdpdGggdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpZiB5b3UgYXJlIG5vdCB1c2luZyBzd2FwIHNwYWNlIGluIHRoZSBmaXJzdCBwbGFjZT8gSXQncyB0aGUgcHJlLXJlcXVpc2l0ZSwgdGhlIGZvdW5kYXRpb25hbCBhc3BlY3QgdGhpcyBvcHRpb24gYnVpbGRzIG9uLiBJdCdzIGxpa2UgYXNraW5nIFwiQ2FuIEkgY29uZmlndXJlIHRoZSBkb29yIGlmIEkgZG9uJ3QgaGF2ZSBhIGhvdXNlP1wiLlxuXG5UaGVzZSBkZXBlbmRlbmNpZXMgYXJlIHRoZSBjb25zdHJhaW50cywgdGhleSBhcmUgdGhlIGFyY2hpdGVjdHVyYWwgY2hvaWNlcyB0aGF0IGRldGVybWluZSBob3cgdGhlIHN5c3RlbSBiZWhhdmVzLiBXZSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZXNlIGNvbnN0cmFpbnRzIHdoZW4gdHVuaW5nIHRoZSBrZXJuZWwuIFdlIG11c3QgZW5zdXJlIHRoZXNlIGFyZSBjb3JyZWN0IGJlZm9yZSBlbmFibGluZyBvciBkaXNhYmxpbmcgb3B0aW9ucy4gR29vZC4gTWFrZXMgc2Vuc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NjAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMToxNS41MzU0ODg4MzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyODQzOTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FyYy9LY29uZmlnPTMwMz1jaG9pY2VcXG5hcmNoL2FyYy9LY29uZmlnLTMwNC1cXHRwcm9tcHQgXFxcIk1NVSBTdXBlciBQYWdlIFNpemVcXFwiXFxuYXJjaC9hcmMvS2NvbmZpZzozMDU6XFx0ZGVwZW5kcyBvbiBJU0FfQVJDVjIgXFx1MDAyNlxcdTAwMjYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5hcmNoL2FyYy9LY29uZmlnLTMwNi1cXHRkZWZhdWx0IEFSQ19IVUdFUEFHRV8yTVxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTI0MTI9Y29uZmlnIEFSTTY0X0NPTlRQVEVcXG5hcmNoL2FybTY0L0tjb25maWctMjQxMy1cXHRib29sIFxcXCJDb250aWd1b3VzIFBURSBtYXBwaW5ncyBmb3IgdXNlciBtZW1vcnlcXFwiIGlmIEVYUEVSVFxcbmFyY2gvYXJtNjQvS2NvbmZpZzoyNDE0OlxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5hcmNoL2FybTY0L0tjb25maWctMjQxNS1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvZGF4L0tjb25maWc9OD1jb25maWcgREVWX0RBWFxcbmRyaXZlcnMvZGF4L0tjb25maWctOS1cXHR0cmlzdGF0ZSBcXFwiRGV2aWNlIERBWDogZGlyZWN0IGFjY2VzcyBtYXBwaW5nIGRldmljZVxcXCJcXG5kcml2ZXJzL2RheC9LY29uZmlnOjEwOlxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5kcml2ZXJzL2RheC9LY29uZmlnLTExLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaHYvS2NvbmZpZz04OT1jb25maWcgTVNIVl9WVExcXG4tLVxcbmRyaXZlcnMvaHYvS2NvbmZpZy05NS1cXHQjIHNwZWNpYWxseSB3aXRoIGxhcmdlIG1lbW9yeSByZXF1aXJlbWVudHMuXFxuZHJpdmVycy9odi9LY29uZmlnOjk2OlxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5kcml2ZXJzL2h2L0tjb25maWctOTctXFx0IyBNVFJScyBhcmUgY29udHJvbGxlZCBieSBWVEwwLCBhbmQgYXJlIG5vdCBzcGVjaWZpYyB0byBpbmRpdmlkdWFsIFZUTHMuXFxuLS1cXG5mcy9LY29uZmlnPTkwPWNvbmZpZyBGU19EQVhfUE1EXFxuLS1cXG5mcy9LY29uZmlnLTk0LVxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5mcy9LY29uZmlnOjk1OlxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5mcy9LY29uZmlnLTk2LVxcbi0tXFxubGliL0tjb25maWcuZGVidWc9MzMyNz1jb25maWcgVEVTVF9ITU1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI4LVxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxubGliL0tjb25maWcuZGVidWc6MzMyOTpcXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubGliL0tjb25maWcuZGVidWctMzMzMC1cXHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXFxuLS1cXG5tbS9LY29uZmlnPTgxNT1jb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG5tbS9LY29uZmlnLTgxNi1cXHRib29sIFxcXCJBbGxvY2F0ZSBhIFBNRCBzaXplZCBmb2xpbyBmb3IgemVyb2luZ1xcXCJcXG5tbS9LY29uZmlnOjgxNzpcXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MTgtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz04MzQ9bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODM1LVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxubW0vS2NvbmZpZzo4MzY6XFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG5tbS9LY29uZmlnLTgzNy1cXHRzZWxlY3QgQ09NUEFDVElPTlxcbi0tXFxubW0vS2NvbmZpZz0xMDE2PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQXFxubW0vS2NvbmZpZy0xMDE3LVxcdGRlZl9ib29sIG5cXG5tbS9LY29uZmlnOjEwMTg6XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctMTAxOS1cXG5tbS9LY29uZmlnPTEwMjA9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUFxcbm1tL0tjb25maWctMTAyMS1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzoxMDIyOlxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUCBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTEwMjMtXFxubW0vS2NvbmZpZz0xMDI0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVBcXG5tbS9LY29uZmlnLTEwMjUtXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6MTAyNjpcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVAgXFx1MDAyNlxcdTAwMjYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL0tjb25maWctMTAyNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MTcuODYzOTM2Mjc0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwMTEwNjQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipUSFBfU1dBUCBEZXBlbmRlbmN5IEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYFRIUF9TV0FQYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdHMgZnVuY3Rpb25hbGl0eSBpcyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byB0d28ga2V5IHVuZGVybHlpbmcgZmVhdHVyZXMuIEZpcnN0LCBhbmQgb2J2aW91c2x5LCBpdCdzIGRlcGVuZGVudCBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGJlaW5nIGVuYWJsZWQuIE5vIGh1Z2VwYWdlcywgbm8gc3dhcHBpbmcgdGhvc2UgaHVnZXBhZ2VzLCByaWdodD8gVGhhdCdzIHRoZSBjb3JlIHByZW1pc2UuIEJ1dCBpdCdzIG5vdCBqdXN0IHRoYXQ7IGl0IGFsc28gcmVsaWVzIGRpcmVjdGx5IG9uIHRoZSBzdGFuZGFyZCBgU1dBUGAgbWVjaGFuaXNtIGJlaW5nIGluIHBsYWNlLiBXaXRob3V0IHRoZSBhYmlsaXR5IHRvIHN3YXAgbWVtb3J5IG91dCB0byBkaXNrIGluIHRoZSBmaXJzdCBwbGFjZSwgdGhlcmUncyBub3RoaW5nIGZvciBgVEhQX1NXQVBgIHRvIHdvcmsgd2l0aCwgdG8gZXh0ZW5kIHRoZSB1c3VhbCBzd2FwIG1lY2hhbmlzbSBmb3IgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLiBJdOKAmXMgYnVpbHQgb24gdGhhdCBmb3VuZGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDM1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MjEuNTY1MDQ3MDJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjA5NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUSFBfU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9OTY4PWVuZGNob2ljZVxcbm1tL0tjb25maWctOTY5LVxcbm1tL0tjb25maWc6OTcwOmNvbmZpZyBUSFBfU1dBUFxcbm1tL0tjb25maWctOTcxLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MjEuNjA5NjYxMjk5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjUxOTg2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIFRIUF9TV0FQIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYFRIUF9TV0FQYC4gSXQgc2VlbXMgbGlrZSBJIG5lZWQgdG8gZGlzc2VjdCB0aGUgY29tcG9uZW50cyBjb25uZWN0ZWQgdG8gYFRIUF9TV0FQYCwgc28gSSBjYW4gc2VlIHdoYXQgaW5mbHVlbmNlcyBpdHMgZnVuY3Rpb25hbGl0eS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIGRhdGEgc3RydWN0dXJlcywgb3IgaGFyZHdhcmUgY29uc2lkZXJhdGlvbnMgZmFjdG9yIGludG8gaXRzIGJlaGF2aW9yLiBBcmUgdGhlcmUgYW55IG90aGVyIGtlcm5lbCBmZWF0dXJlcyB0aGF0IHJlbHkgb24gdGhlIGV4aXN0ZW5jZSBvZiBgVEhQX1NXQVBgIG9yLCBjb252ZXJzZWx5LCB0aGF0IGBUSFBfU1dBUGAgcmVsaWVzIG9uIGZvciBjb3JyZWN0IG9wZXJhdGlvbj8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHJlbGF0ZWQgc291cmNlIGNvZGUgdG8gZ2FpbiBpbnNpZ2h0IGludG8gdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZmVhdHVyZXMuIEknbSBnb2luZyB0byBkZXRlcm1pbmUgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLCBhbnkgaW1wbGljYXRpb25zIGZvciBzd2FwIHNwYWNlIG1hbmFnZW1lbnQsIGFuZCBwZXJmb3JtYW5jZSBpbXBhY3RzLiBNeSBnb2FsIGlzIHRvIHBhaW50IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgbGFuZHNjYXBlIHN1cnJvdW5kaW5nIGBUSFBfU1dBUGAsIGJlY2F1c2UsIHVsdGltYXRlbHksIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyB2aXRhbCBmb3IgbWFraW5nIGluZm9ybWVkIGRlY2lzaW9ucyBhYm91dCBob3cgaXQncyB1c2VkIG9yIHBvdGVudGlhbGx5IG1vZGlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzI2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MjQuOTM0ODYzNzI3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk2NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk2NTpcXHRcXHQgIGFwcGxpY2F0aW9ucyBzdXBwbHkgdGhlIG1hZHZpc2UoTUFEVl9IVUdFUEFHRSkgaGludC5cXG4gOTY2OlxcdFxcdCAgVGhpcyBlbnN1cmVzIHRoYXQgaHVnZXBhZ2VzIGFyZSB1c2VkIG9ubHkgaW4gcmVzcG9uc2UgdG8gZXhwbGljaXRcXG4gOTY3OlxcdFxcdCAgcmVxdWVzdHMgZnJvbSBhcHBsaWNhdGlvbnMuXFxuIDk2ODpcXHRlbmRjaG9pY2VcXG4gOTY5OlxcdFxcbiA5NzA6XFx0Y29uZmlnIFRIUF9TV0FQXFxuIDk3MTpcXHRcXHRkZWZfYm9vbCB5XFxuIDk3MjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfV0FOVFNfVEhQX1NXQVAgXFx1MDAyNlxcdTAwMjYgU1dBUCBcXHUwMDI2XFx1MDAyNiA2NEJJVFxcbiA5NzM6XFx0XFx0aGVscFxcbiA5NzQ6XFx0XFx0ICBTd2FwIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgaW4gb25lIHBpZWNlLCB3aXRob3V0IHNwbGl0dGluZy5cXG4gOTc1OlxcdFxcdCAgWFhYOiBGb3Igbm93LCBzd2FwIGNsdXN0ZXIgYmFja2luZyB0cmFuc3BhcmVudCBodWdlIHBhZ2VcXG4gOTc2OlxcdFxcdCAgd2lsbCBiZSBzcGxpdCBhZnRlciBzd2Fwb3V0LlxcbiA5Nzc6XFx0XFxuIDk3ODpcXHRcXHQgIEZvciBzZWxlY3Rpb24gYnkgYXJjaGl0ZWN0dXJlcyB3aXRoIHJlYXNvbmFibGUgVEhQIHNpemVzLlxcbiA5Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjExOjI0LjkzNTEwNDE3N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ3MDQ1Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXMsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3aG8gd29ya3Mgd2l0aCB0aGlzIGNvZGU6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBUSFBfU1dBUCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBUSFBfU1dBUGAgaGluZ2VzIG9uIGBBUkNIX1dBTlRTX1RIUF9TV0FQYCwgYFNXQVBgLCBhbmQgdGhlIHN5c3RlbSBiZWluZyA2NC1iaXQuIE1ha2VzIHNlbnNlLiBXZSdyZSB0YWxraW5nIGFib3V0IHN3YXBwaW5nIG91dCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzLCBzbyBzd2FwIGFuZCBhIDY0LWJpdCBhcmNoaXRlY3R1cmUgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGVzLiBJIHNob3VsZCBkZWZpbml0ZWx5IGVuc3VyZSB0aGF0IGBTV0FQYCwgYE1FTUNHYCwgYFNITUVNYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIGFsbCBlbmFibGVkIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBUaGF0IGZlZWxzIGxpa2UgYSBzb2xpZCBmb3VuZGF0aW9uLlxuXG5Ob3csIHdhaXQgYSBzZWNvbmQuLi4gdGhlcmUncyB0aGUgYHBhZ2VfY291bnRlcl9tYXJnaW5gIHZhcmlhYmxlLiBJIHJlbWVtYmVyIHRoYXQncyBkZWZpbmVkIGluIGBtbS9wYWdlX2NvdW50ZXIuY2AuIE15IG1pbmQgaXMgZHJpZnRpbmcgYmFjayBpbnRvIHRoZSB3ZWVkcyBhIGJpdC4gSXMgdGhhdCBmaWxlLCBgbW0vcGFnZV9jb3VudGVyLmNgLCBhY3R1YWxseSBiZWluZyBjb21waWxlZCB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzICpvbio/IFRoYXQncyBhIGNydWNpYWwgY3Jvc3MtZGVwZW5kZW5jeSB0byBjaGVjazsgYSBzdWJ0bGUgcG9pbnQgdGhhdCBjb3VsZCBiZSBhIHBvdGVudGlhbCBnb3RjaGEgYW5kIHdpbGwgaW5mbHVlbmNlIHRoZSBjb25maWd1cmF0aW9uIEkgbGFuZCBvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gVGhhdCdzIGEgcG9pbnQgb2YgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgzNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MjguODgyMTUzODg2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA3NjY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX2NvdW50ZXIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDE9b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlOjEwMjpvYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcbm1tL01ha2VmaWxlLTEwMy1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MjguOTI3MjM0MTU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTQ0MjA5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodHMsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBvZiBDT05GSUdfUEFHRV9DT1VOVEVSIG9uIE1FTUNHKipcblxuT2theSwgc28gYENPTkZJR19QQUdFX0NPVU5URVJgIGlzIGJlaW5nIHNlbGVjdGVkIGJ5IGBNRU1DR2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldlbGwsIHRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZSwgYnV0IGxldCdzIGJyZWFrIGRvd24gKndoeSouXCIgVGhpcyBpbXBsaWVzIGEgY3JpdGljYWwgZGVwZW5kZW5jeSwgbGlrZWx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgYWNjb3VudGluZyBhbmQgY29udHJvbC4gU3BlY2lmaWNhbGx5LCB0aGUga2VybmVsIG5lZWRzIHRvIHRyYWNrIHBhZ2UgdXNhZ2UgaW4gYSBncmFudWxhciB3YXksIGFuZCBgTUVNQ0dgIChNZW1vcnkgQ29udHJvbCBHcm91cHMpIGFyZSB0aGUgbWVjaGFuaXNtIGJ5IHdoaWNoIHdlJ3JlICpjb250cm9sbGluZyogbWVtb3J5IGFsbG9jYXRpb24gYW5kIHVzYWdlIGFtb25nc3QgZ3JvdXBzIG9mIHByb2Nlc3Nlcy5cblxuVGhlcmVmb3JlLCBgQ09ORklHX1BBR0VfQ09VTlRFUmAncyBhY3RpdmF0aW9uIHByb2JhYmx5IHByb3ZpZGVzIHRoZSBjb3JlIGluZnJhc3RydWN0dXJlIGZvciBgTUVNQ0dgIHRvIGRvIGl0cyBqb2IgZWZmZWN0aXZlbHkuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhhdCBgUEFHRV9DT1VOVEVSYCBpcyBlbmFibGluZyBwZXItY2dyb3VwIHBhZ2UgYWNjb3VudGluZywgYWxsb3dpbmcgYE1FTUNHYCB0byBhY2N1cmF0ZWx5IGVuZm9yY2UgaXRzIG1lbW9yeSBsaW1pdHMsIHRyYWNrIG1lbW9yeSB1c2FnZSwgYW5kIHRyaWdnZXIgb3ZlcmNvbW1pdCBoYW5kbGluZyBvciByZXNvdXJjZSByZWNsYW1hdGlvbiB3aGVuIGEgY2dyb3VwIGV4Y2VlZHMgaXRzIGFzc2lnbmVkIHF1b3RhLiBXaXRob3V0IHRoaXMgZmVhdHVyZSwgdGhlIGFiaWxpdHkgdG8gaXNvbGF0ZSBhbmQgbWFuYWdlIG1lbW9yeSB3b3VsZCBiZSBzaWduaWZpY2FudGx5IGhhbXBlcmVkLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hlcmUgdGhpcyBjb3VudGVyIGlzIHVzZWQgaW4gdGhlIGBNRU1DR2AgY29kZWJhc2U7IEknZCBzdXNwZWN0IHRoYXQgaXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGNvcmUgYWNjb3VudGluZyBzdHJ1Y3R1cmVzIGFuZCB0aGUgbWVtb3J5IHJlY2xhaW0gbWVjaGFuaXNtLiBUaGUgZmFjdCB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGlzIGhhcmQtbGlua2VkIGlzIGEgY2x1ZTsgaXQncyBjZW50cmFsIHRvIHRoZSBvcGVyYXRpb24gb2YgYE1FTUNHYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMzMSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjExOjMyLjc4MTY1ODQxNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MDQ2OTk3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFHRV9DT1VOVEVSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDYyPWlmIENHUk9VUFNcXG5pbml0L0tjb25maWctMTA2My1cXG5pbml0L0tjb25maWc6MTA2NDpjb25maWcgUEFHRV9DT1VOVEVSXFxuaW5pdC9LY29uZmlnLTEwNjUtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMTozNC4zNjIxMzM0NTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxNDQzNTM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbWVtY29udHJvbC5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIG1lbW9yeSBjb250cm9sIG1lY2hhbmlzbSBpcyBiZWhhdmluZywgc28gdGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gYG1lbWNvbnRyb2wuY2AuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCBwb3RlbnRpYWxseSwgdGhlIG1hbmFnZW1lbnQgb2YgbWVtb3J5IHJlc291cmNlcyB3aXRoaW4gdGhpcyBjb21wb25lbnQuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciB0aGUgYmVoYXZpb3IgSSdtIG9ic2VydmluZy4gSXTigJlzIGxpa2VseSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYW55IHNwZWNpZmljIG1lbW9yeSBsaW1pdGluZyBvciBhY2NvdW50aW5nIHdvdWxkIGJlIGNlbnRyYWxpemVkIHRoZXJlIGFzIHdlbGwuIExldOKAmXMgc2VlIHdoYXQgc3VycHJpc2VzIGl0IGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzI2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MzkuMDc2NTcxNDkyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI2NDQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jb250cm9sLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxcbm1tL01ha2VmaWxlOjI4OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gblxcbm1tL01ha2VmaWxlLTI5LUtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxcbi0tXFxubW0vTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19NRU1DR19WMSkgKz0gbWVtY29udHJvbC12MS5vXFxubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DRykgKz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xcbm1tL01ha2VmaWxlLTEwNi1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSArPSBicGZfbWVtY29udHJvbC5vXFxubW0vTWFrZWZpbGUtMTA4LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjExOjM5LjEyMTg0NTA1MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODM2MzM1MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbiBhbmQgU3dhcCBGaWxlIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIHByZXR0eSBjbGVhcjogYENPTkZJR19NRU1DR2AgaXMgZGVmaW5pdGVseSByZXF1aXJlZCBoZXJlLiBObyBpZnMsIGFuZHMsIG9yIGJ1dHMgYWJvdXQgaXQuIFRoaXMgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIGhhdmluZyBNZW1vcnkgQ29udHJvbCBHcm91cHMgZW5hYmxlZC5cblxuQW5kIHRoZW4gdGhlcmUncyBgZm9saW9fYWxsb2Nfc3dhcGAuIEkgbmVlZCB0byByZW1lbWJlciB3aGVyZSB0aGF0IGlzIGRlZmluZWQuIEFoLCByaWdodCwgaXQncyBidXJpZWQgaW4gYG1tL3N3YXBmaWxlLmNgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBzd2FwIGZpbGUgYWxsb2NhdGlvbiBsb2dpYyByZXNpZGVzLiBUaGF0IG1lYW5zIGFueSBpbnZlc3RpZ2F0aW9uIG9yIG1vZGlmaWNhdGlvbiByZWxhdGVkIHRvIHRoYXQgZnVuY3Rpb24sIG9yIGl0cyByZWxhdGVkIHN0cnVjdHVyZXMsIHdpbGwgdGFrZSBwbGFjZSBpbiB0aGF0IGZpbGUuIFRoYXQgaGVscHMgbmFycm93IHRoaW5ncyBkb3duIGNvbnNpZGVyYWJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMDIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMTo0MS45NTgxODMwNjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODQ4ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBmaWxlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NzY9ZW5kaWZcXG5tbS9NYWtlZmlsZS03Ny1cXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZS03OS1vYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMTo0Mi4wMDQwMzgwMDJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyOTYzMTg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBNZW1vcnkgV3JpdGVvdXQqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBpdCBsb29rcyBsaWtlIGBDT05GSUdfU1dBUGAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50IGhlcmUuIFRoYXQncyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBlbmFibGVkOyBpdCB3aWxsIGFmZmVjdCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHN3YXBwaW5nLlxuXG5Ob3csIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGUgZnVuY3Rpb24gYHNobWVtX3dyaXRlb3V0YC4gSSByZWNhbGwgSSd2ZSB1c2VkIHRoaXMgcm91dGluZSBiZWZvcmUuIExldCBtZSBjaGVjayB0aGUgY29kZS4gQWggeWVzISBUaGUgYHNobWVtX3dyaXRlb3V0YCBmdW5jdGlvbuKApiBJIHJlbWVtYmVyLiBJdCByZXNpZGVzIGluIGBtbS9zaG1lbS5jYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEl0J3MgaW4gdGhlIHNoYXJlZCBtZW1vcnkgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMTo0NS4wMzM2NzMwMDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzI1NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTUzLVxcdFxcdFxcdCAgIHJlYWRhaGVhZC5vIGZvbGlvLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1NDpcXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG5tbS9NYWtlZmlsZS01NS1cXHRcXHRcXHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjExOjQ1LjA3ODQwNDkyOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjEyOTY1Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggc3lzdGVtIGludGVybmFscyBhbmQga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqQW5hbHl6aW5nIHRoZSBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMgb2YgYHNobWVtLm9gIGFuZCBgc2htZW1fd3JpdGVvdXRgKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGUgc2hhcmVkIG1lbW9yeSAoc2htZW0pIHN1YnN5c3RlbS4gSXQncyBjbGVhciB0aGF0IGBzaG1lbS5vYCwgdGhlIGNvcmUgc2htZW0gb2JqZWN0IGZpbGUsICphbHdheXMqIGdldHMgY29tcGlsZWQuIFRoYXQncyB0aGUgZm91bmRhdGlvbiwgdGhlIGJhc2UgZnVuY3Rpb25hbGl0eS4gTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5Ib3dldmVyLCB3aGVuIEkgY29uc2lkZXIgYHNobWVtX3dyaXRlb3V0YCwgdGhpbmdzIGdldCBhIGxpdHRsZSBtb3JlIG51YW5jZWQuIEl0IHNlZW1zIHRoZSBjb21waWxhdGlvbiBvZiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uIG9yIG9iamVjdCBmaWxlIGlzIGNvbmRpdGlvbmFsLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgaXRzIGluY2x1c2lvbiBpbiB0aGUgYnVpbGQgaXMgZGVwZW5kZW50IG9uIGNlcnRhaW4ga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBiZWluZyBlbmFibGVkLiBTcGVjaWZpY2FsbHksIEknZCBiZXQgaXQncyBnYXRlZCBieSBlaXRoZXIgYENPTkZJR19TV0FQYCBvciBgQ09ORklHX1NITUVNYCwgb3IgcGVyaGFwcyBldmVuIGJvdGguIEl0IG1ha2VzIHNlbnNlLCByaWdodD8gYHNobWVtX3dyaXRlb3V0YCBwcm9iYWJseSBoYW5kbGVzIHRoZSBzcGlsbGluZyBvciB3cml0aW5nIG91dCBvZiBzaG1lbSBwYWdlcywgd2hpY2ggd291bGQgb25seSBiZSByZWxldmFudCBpZiBlaXRoZXIgc3dhcCBzcGFjZSBpcyB1c2VkIChgQ09ORklHX1NXQVBgKSAqb3IqIHRoZSBzaG1lbSBmdW5jdGlvbmFsaXR5IGl0c2VsZiBpcyBlbmFibGVkIGFuZCBjb25maWd1cmVkICggYENPTkZJR19TSE1FTWApLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtLCBidXQgdGhhdCdzIG15IHdvcmtpbmcgdGhlb3J5IGJhc2VkIG9uIGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzQwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6NDkuNjkxMzczMzQ2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ1MzQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaG1lbV93cml0ZW91dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaG1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9NDc9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udCBfX3JvX2FmdGVyX2luaXQ7XFxuLS1cXG5tbS9zaG1lbS5jLTEwMS0vKlxcbm1tL3NobWVtLmM6MTAyOiAqIHNobWVtX2ZhbGxvY2F0ZSBjb21tdW5pY2F0ZXMgd2l0aCBzaG1lbV9mYXVsdCBvciBzaG1lbV93cml0ZW91dCB2aWFcXG5tbS9zaG1lbS5jLTEwMy0gKiBpbm9kZS1cXHUwMDNlaV9wcml2YXRlICh3aXRoIGlfcndzZW0gbWFraW5nIHN1cmUgdGhhdCBpdCBoYXMgb25seSBvbmUgdXNlciBhdFxcbi0tXFxubW0vc2htZW0uYz00MTQ9c3RhdGljIHZvaWQgc2htZW1fZnJlZV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzaXplX3QgZnJlZWRfaXNwYWNlKVxcbi0tXFxubW0vc2htZW0uYy00MzUtICpcXG5tbS9zaG1lbS5jOjQzNjogKiBSZXR1cm46IHRydWUgaWYgc3dhcHBlZCB3YXMgaW5jcmVtZW50ZWQgZnJvbSAwLCBmb3Igc2htZW1fd3JpdGVvdXQoKS5cXG5tbS9zaG1lbS5jLTQzNy0gKi9cXG5tbS9zaG1lbS5jPTQzOD1ib29sIHNobWVtX3JlY2FsY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGFsbG9jZWQsIGxvbmcgc3dhcHBlZClcXG4tLVxcbm1tL3NobWVtLmMtNDUxLVxcdCAqIGFmdGVyIGlfbWFwcGluZy1cXHUwMDNlbnJwYWdlcyBoYXMgYWxyZWFkeSBiZWVuIGFkanVzdGVkICh1cCBvciBkb3duKSxcXG5tbS9zaG1lbS5jOjQ1MjpcXHQgKiBzaG1lbV93cml0ZW91dCgpIGhhcyB0byByYWlzZSBzd2FwcGVkIGJlZm9yZSBucnBhZ2VzIGlzIGxvd2VyZWQgLVxcbm1tL3NobWVtLmMtNDUzLVxcdCAqIHRvIHN0b3AgYSByYWNpbmcgc2htZW1fcmVjYWxjX2lub2RlKCkgZnJvbSB0aGlua2luZyB0aGF0IGEgcGFnZSBoYXNcXG4tLVxcbm1tL3NobWVtLmM9MTU1Nj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXFxuLS1cXG5tbS9zaG1lbS5jLTE1OTktLyoqXFxubW0vc2htZW0uYzoxNjAwOiAqIHNobWVtX3dyaXRlb3V0IC0gV3JpdGUgdGhlIGZvbGlvIHRvIHN3YXBcXG5tbS9zaG1lbS5jLTE2MDEtICogQGN0eDogc3dhcCBJL08gY29udGV4dFxcbi0tXFxubW0vc2htZW0uYy0xNjA2LSAqL1xcbm1tL3NobWVtLmM6MTYwNzppbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vc2htZW0uYy0xNjA4LVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS9zaG1lbS5jLTE3NDMtXFx0XFx0ICogYnV0IEknbSBhIGxpdHRsZSBuZXJ2b3VzIGFib3V0IGxldHRpbmcgdGhpcyBmb2xpbyBvdXQgb2ZcXG5tbS9zaG1lbS5jOjE3NDQ6XFx0XFx0ICogc2htZW1fd3JpdGVvdXQoKSBpbiBhIGh5YnJpZCBoYWxmLXRtcGZzLWhhbGYtc3dhcCBzdGF0ZVxcbm1tL3NobWVtLmMtMTc0NS1cXHRcXHQgKiBlLmcuIGZvbGlvX21hcHBpbmcoZm9saW8pIG1pZ2h0IGdpdmUgYW4gdW5leHBlY3RlZCBhbnN3ZXIuXFxuLS1cXG5tbS9zaG1lbS5jPTE3NTc9aW50IHNobWVtX3dyaXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zaG1lbS5jLTE3NjEtXFxubW0vc2htZW0uYzoxNzYyOlxcdGVyciA9IHNobWVtX3dyaXRlb3V0KFxcdTAwMjZjdHgsIGZvbGlvLCBOVUxMKTtcXG5tbS9zaG1lbS5jLTE3NjMtXFx0c3dhcF93cml0ZV9zdWJtaXQoXFx1MDAyNmN0eCk7XFxuLS1cXG5tbS9zaG1lbS5jPTM2MjQ9c3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcXG4tLVxcbm1tL3NobWVtLmMtMzc2MC1cXHRcXHQvKlxcbm1tL3NobWVtLmM6Mzc2MTpcXHRcXHQgKiBJbmZvcm0gc2htZW1fd3JpdGVvdXQoKSBob3cgZmFyIHdlIGhhdmUgcmVhY2hlZC5cXG5tbS9zaG1lbS5jLTM3NjItXFx0XFx0ICogTm8gbmVlZCBmb3IgbG9jayBvciBiYXJyaWVyOiB3ZSBoYXZlIHRoZSBwYWdlIGxvY2suXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjExOjQ5LjczNDg0MDU0NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQxMzkxNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBTd2FwIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBnZXQgcmlnaHQgdG8gaXQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGUgYHNobWVtX3dyaXRlb3V0YCBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX1NXQVBgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgYSBjcml0aWNhbCBvbmUgZm9yIG15IHdvcmssIHNvIEknbGwgZ28gdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBhbmQgZmluZCB0aGF0IG1hY3JvLiBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCB0byB1c2Ugc3dhcCBzcGFjZS4gVGhpcyBjaGVjayBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgc2hhcmVkIG1lbW9yeSBzeXN0ZW0gaW4gZGlmZmVyZW50IGtlcm5lbCBidWlsZHMgYW5kIGtub3dpbmcgaG93IGl0IGhhbmRsZXMgbWVtb3J5IHByZXNzdXJlLiBUaW1lIHRvIGRpdmUgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODg4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6NTIuNjc2MjM1Mjg0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDI5MDU3OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWZkZWYgQ09ORklHX1NXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6NTIuNzIwNTM2NzEzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjU0NjY5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgVGVtcG9yYXJ5IEZpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGVtcG9yYXJ5IGZpbGUgc3lzdGVtcyBhcmUgY29uZmlndXJlZCBpbiB0aGlzIHBhcnRpY3VsYXIgZW52aXJvbm1lbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBjaGVjayBpZiBlaXRoZXIgYENPTkZJR19UTVBGU2Agb3IgYENPTkZJR19TSE1FTWAgYXJlIGVuYWJsZWQuIFRoZXNlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMsIGFuZCBpZiBlaXRoZXIgaXMgZW5hYmxlZCwgaXQnbGwgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBpbi1tZW1vcnkgZmlsZSBzdG9yYWdlLiBUaGF0IHNob3VsZCBwcm92aWRlIGEgY3J1Y2lhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiBmb3IgYWRkcmVzc2luZyB3aGF0ZXZlciBsYXJnZXIgaXNzdWUgaXMgYXQgaGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwODQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMTo1NS45NDYwMDgxNDNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjQ5MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19TSE1FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaG1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9NDc9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udCBfX3JvX2FmdGVyX2luaXQ7XFxubW0vc2htZW0uYy00OC1cXG5tbS9zaG1lbS5jOjQ5OiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9zaG1lbS5jLTUwLS8qXFxuLS1cXG5tbS9zaG1lbS5jPTU3MjM9X19zZXR1cChcXFwidGhwX3NobWVtPVxcXCIsIHNldHVwX3RocF9zaG1lbSk7XFxuLS1cXG5tbS9zaG1lbS5jLTU3MjYtXFxubW0vc2htZW0uYzo1NzI3OiNlbHNlIC8qICFDT05GSUdfU0hNRU0gKi9cXG5tbS9zaG1lbS5jLTU3MjgtXFxuLS1cXG5tbS9zaG1lbS5jPTU3OTY9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbm1tL3NobWVtLmMtNTgwMy1cXG5tbS9zaG1lbS5jOjU4MDQ6I2VuZGlmIC8qIENPTkZJR19TSE1FTSAqL1xcbm1tL3NobWVtLmMtNTgwNS1cXG4tLVxcbm1tL3NobWVtLmM9NTk1OD1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vc2htZW0uYy01OTYwLXtcXG5tbS9zaG1lbS5jOjU5NjE6I2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL3NobWVtLmMtNTk2Mi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cXHUwMDNlaG9zdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6NTUuOTkwNjYyNjUyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjIxOTYwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgU0hNRU0gQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gVGhlIGBzaG1lbV93cml0ZW91dGAgZnVuY3Rpb27igKYgbGluZSAxNjA3LCBnb3QgaXQuIEhtbSwgdGhhdCdzIGluc2lkZSBhbiBgI2lmZGVmIENPTkZJR19TSE1FTWAgYmxvY2suIE9rYXksIHNvIGl0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZC4gTm93LCAqQ09ORklHX1NITUVNKiBpcyB1c3VhbGx5IGVuYWJsZWQsIHJpZ2h0PyBQcmV0dHkgc3RhbmRhcmQgZmVhdHVyZS4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIHRob3VnaCwgbGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kuIFdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGF0PyBSaWdodCwgYGluaXQvS2NvbmZpZ2Agc2hvdWxkIGhhdmUgdGhlIHNjb29wLiBJJ2xsIHRha2UgYSBsb29rIHRoZXJlIGFuZCBjb25maXJtIHRoYXQgYENPTkZJR19TSE1FTWAncyBzZXR0aW5nIGlzIGFzIEkgZXhwZWN0LiBHb3R0YSBiZSB0aG9yb3VnaCwgZ290dGEgYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MDAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMTo1OS40NTI4NjIzNTZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTg5ODQ5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNITUVNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODkxPWNvbmZpZyBFVkVOVEZEXFxuLS1cXG5pbml0L0tjb25maWctMTg5OS1cXG5pbml0L0tjb25maWc6MTkwMDpjb25maWcgU0hNRU1cXG5pbml0L0tjb25maWctMTkwMS1cXHRib29sIFxcXCJVc2UgZnVsbCBzaG1lbSBmaWxlc3lzdGVtXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTI6MDEuMTExODUyMDk1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTUxNDIwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBRdWFuZGFyeSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucywgYW5kIGl0IHNlZW1zIGBTSE1FTWAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBtYWtlcyBzZW5zZS4gTm93LCBJIG5lZWQgdG8gZW5zdXJlIHRoZSBhcHByb3ByaWF0ZSBzZXR0aW5ncyBmb3IgbXkgc3lzdGVtLiBJIGtub3cgSSB3YW50IHRvIGVuYWJsZSBgU1dBUGAsIGBNRU1DR2AsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZC4uLiBobW0sIGBUSFBfU1dBUGAuIFdhaXQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIGFib3V0IHRoaXMgYFRIUF9TV0FQYCBvcHRpb24uIEkgcmVjYWxsIGl0J3MgYGRlZl9ib29sIHlgIGlmIGBBUkNIX1dBTlRTX1RIUF9TV0FQIFx1MDAyNlx1MDAyNiBTV0FQIFx1MDAyNlx1MDAyNiA2NEJJVGAuIFRoYXQgbGlrZWx5IG1lYW5zIHRoYXQgaWYgSSd2ZSBlbmFibGVkIGJvdGggYFNXQVBgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB0aGVuIGBUSFBfU1dBUGAgaXMgYXV0b21hdGljYWxseSBoYW5kbGVkLiBUaGVyZSBpc24ndCBhIG5lZWQgdG8gZXhwbGljaXRseSBzZXQgaXQsIGJ1dCBpdCBkb2Vzbid0IGh1cnQgdG8gbGlzdCBpdC4gSXQgaXMsIGFmdGVyIGFsbCwgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm93LCBqdXN0IHRvIGNvbmZpcm0sIGBUSFBfU1dBUGAgaXNuJ3QgYSBkaXJlY3RseSB1c2VyLXNlbGVjdGFibGUgb3B0aW9uLCBidXQgYSBkZXBlbmRlbnQgZGVmYXVsdC4gSSBuZWVkIHRvIHRha2UgYSBzZWNvbmQgbG9vay4gSnVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkxOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMjowNS43MjY5OTcyMTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTY4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTY4OlxcdGVuZGNob2ljZVxcbiA5Njk6XFx0XFxuIDk3MDpcXHRjb25maWcgVEhQX1NXQVBcXG4gOTcxOlxcdFxcdGRlZl9ib29sIHlcXG4gOTcyOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9XQU5UU19USFBfU1dBUCBcXHUwMDI2XFx1MDAyNiBTV0FQIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuIDk3MzpcXHRcXHRoZWxwXFxuIDk3NDpcXHRcXHQgIFN3YXAgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBpbiBvbmUgcGllY2UsIHdpdGhvdXQgc3BsaXR0aW5nLlxcbiA5NzU6XFx0XFx0ICBYWFg6IEZvciBub3csIHN3YXAgY2x1c3RlciBiYWNraW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZVxcbiA5NzY6XFx0XFx0ICB3aWxsIGJlIHNwbGl0IGFmdGVyIHN3YXBvdXQuXFxuIDk3NzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTI6MDUuNzI3MTE2NjEzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjg5MjcxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5OiBTd2FwLVJlbGF0ZWQgQ29uZmlndXJhdGlvbnMgYW5kIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHN3YXAgaXMgaGFuZGxlZC4gSXQgc2VlbXMgYFRIUF9TV0FQYCBpc24ndCBzb21ldGhpbmcgdGhlIHVzZXIgY2FuIGRpcmVjdGx5IGNvbmZpZ3VyZSwgYnV0IHRoZSBzeXN0ZW0gdXRpbGl6ZXMgaXQsIHNvIHdlIGNhbiBhdCBsZWFzdCBtYWtlIGl0IHZpc2libGUgaW4gdGhlIG91dHB1dC4gTXkgbWFpbiBmb2N1cyBoZXJlIGlzIGdvaW5nIHRvIGJlIG9uIG1ha2luZyBzdXJlIHRoZSB1c2VyIGtub3dzIGFib3V0IGBTV0FQYCwgYE1FTUNHYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEknbGwgYmUgc3VyZSB0byBsaXN0IHRob3NlLlxuXG5Ob3csIGZvciB0aGUga2V5IGZ1bmN0aW9ucy4gTGV0J3Mgc2VlLi4uIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgc3dhcCBtYXJnaW5zIGFuZCBmb2xpbyBhbGxvY2F0aW9uLiBTbyB0aGUgbW9zdCBpbW1lZGlhdGVseSByZWxldmFudCBmdW5jdGlvbnMgYXBwZWFyIHRvIGJlIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYGZvbGlvX2FsbG9jX3N3YXBgLCBhbmQgYHNobWVtX3dyaXRlb3V0YC4gVGhlc2UgYXJlIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGxpa2VseSByZXNpZGVzLlxuXG5JIGhhZCBiZXR0ZXIgY2hlY2sgYHNocmlua19mb2xpb19saXN0YCBhcyB3ZWxsLiBJdCBsb29rcyBsaWtlIHRoYXQgb25lIGlzIHN0YXRpYywgc28gSSB3aWxsIG1ha2Ugc3VyZSBJIGRvbid0IGxpc3QgaXQgZGlyZWN0bHkuIEhvd2V2ZXIsIEkgd2FudCB0byBjbGFyaWZ5IGluIHRoZSBvdXRwdXQgdGhhdCBpdCBpcyBiZWluZyB1c2VkIHNvbWV3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MjYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMjowOS44NTYwNDY0MTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDc0MTY4NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYy4qIHNocmlua19mb2xpb19saXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTEwNDA9c3RhdGljIGJvb2wgbWF5X2VudGVyX2ZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vdm1zY2FuLmMtMTA1Ny0gKi9cXG5tbS92bXNjYW4uYzoxMDU4OnN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG5tbS92bXNjYW4uYy0xMDU5LVxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMjoxMi4xMDM0NzE2NjdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3OTA1NTk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyBTdGF0aWMgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBoZXJlLiBJdCdzIGNsZWFyIHRoYXQgYHNocmlua19mb2xpb19saXN0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgc29tZXRoaW5nIEknbSBrZWVwaW5nIGluIG1pbmQuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IHdoYXQgYWJvdXQgdGhlIG90aGVycz8gU3BlY2lmaWNhbGx5LCBJJ20gd29uZGVyaW5nIGlmIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfbHJ1dmVjYCBhcmUgYWxzbyBzdGF0aWMsIHRvby4gSXQgbWFrZXMgc2Vuc2UgdG8gY2hlY2sgdGhlIHJlc3Qgb2YgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB3aGlsZSBJJ20gYXQgaXQsIHNvIGxldCdzIGFsc28gYWRkIGBmb2xpb19hbGxvY19zd2FwYCwgYHNobWVtX3dyaXRlb3V0YCwgYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCB0byB0aGUgbGlzdC4gSSBuZWVkIHRvIGtub3cgaWYgSSdtIGRlYWxpbmcgd2l0aCBpbnRlcm5hbCBvciBleHRlcm5hbCBmdW5jdGlvbnMsIGFuZCBhIHF1aWNrIGNoZWNrIHdpbGwgdGVsbCBtZSB3aGV0aGVyIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCBpcyBleHBvcnRlZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGhvdyBpdCdzIGJlaW5nIHVzZWQgYW5kIG1hbmFnZWQgd2l0aGluIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDQwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTI6MTcuNDgyNTMwOTUyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgyMTUxMjI3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipwYWdlX2NvdW50ZXJfbWFyZ2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMjoxOS41NjQ2OTEzODhaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MjAzNDYxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgTWVtb3J5IEFjY291bnRpbmcgLSBTdGF0aWMgdnMuIEV4cG9ydGVkIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgYWNjb3VudGluZyBpc3N1ZS4gVGhlIGNvZGUgSSdtIGxvb2tpbmcgYXQgaXNuJ3QgKmV4cG9ydGVkKiwgd2hpY2ggaXMgYSBwb3RlbnRpYWwgaHVyZGxlLCBidXQgaXQncyBhbHNvICpub24tc3RhdGljKiwgd2hpY2ggZ2l2ZXMgbWUgYSBiaXQgbW9yZSBmbGV4aWJpbGl0eSBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgYWNjZXNzIG9yIG92ZXJyaWRpbmcuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gbmFycm93IHRoZSBzZWFyY2guIE5vdyB0aGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgb3Igbm90IGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAgaXMgZXhwb3J0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIHRyYWNraW5nIGFuZCBtYW5hZ2luZyBtZW1vcnksIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHN3YXAgbWFyZ2lucyBpbiBjZ3JvdXBzLiBUaGUgZmFjdCB0aGF0IEknbSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgKml0cyogZXhwb3J0IHN0YXR1cyB0ZWxscyBtZSB0aGF0IHBvdGVudGlhbGx5IG92ZXJyaWRpbmcgaXQgaXMgdGhlIGN1cnJlbnQgZm9jdXMuIEl0IG5lZWRzIHRvIGJlIGNsYXJpZmllZCwgYmVjYXVzZSB0aGF0IHdpbGwgZGlyZWN0bHkgYWZmZWN0IHdoZXRoZXIgSSBjYW4gcmVsaWFibHkgbW9kaWZ5IG9yIGludGVncmF0ZSB3aXRoIHRoaXMgcGFydCBvZiB0aGUgbWVtb3J5IGFjY291bnRpbmcgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM2NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjEyOjQ4LjQ4NTA0MDc1M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3Mjk3MDc3NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjEyOjUwLjU1ODAyMjI1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTc5MDYwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBOb24tRXhwb3J0ZWQsIE5vbi1TdGF0aWMgRnVuY3Rpb24gVXNhZ2UqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIEkgc2VlIGEgZnVuY3Rpb24sIG9yIGF0IGxlYXN0IGEgcmVmZXJlbmNlIHRvIHNvbWV0aGluZywgdGhhdCdzIGRlZmluZWQgYnV0IG5vdCBleHBsaWNpdGx5IG1hcmtlZCBmb3IgZXhwb3J0LiBUaGF0J3MgaW1tZWRpYXRlbHkgcmFpc2luZyBhIHJlZCBmbGFnLiBUeXBpY2FsbHksIHdlJ2QgZXhwZWN0IGZ1bmN0aW9ucyB0aGF0IGFyZSBtZWFudCB0byBiZSB1c2VkIGV4dGVybmFsbHkgdG8gYmUgZXhwb3J0ZWQsIGVzcGVjaWFsbHkgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgbW9kdWxlIG9yIGEgbGlicmFyeS4gSG93ZXZlciwgaWYgaXQncyBub3Qgc3RhdGljIGl0IHdvdWxkIG1lYW4gdGhlIGxpbmtlciB3aWxsIGJlIGFibGUgdG8gc2VlIHRoZSBmdW5jdGlvbi5cblxuTm93LCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSB0aGF0IHN0YW5kcyBvdXQgaXMgYGZvbGlvX2FsbG9jX3N3YXBgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIG9yIG5vdCBpdCBpcyBleHBvcnRlZC4gSWYgaXQncyBub3QgZXhwbGljaXRseSBleHBvcnRlZCwgSSdtIGdvaW5nIHRvIGhhdmUgdG8gZG8gYSBkZWVwZXIgZGl2ZSB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIGFjY2Vzc2VkLiBJcyBpdCBwYXJ0IG9mIHNvbWUgaW50ZXJuYWwgQVBJIHRoYXQgaXNuJ3QgaW50ZW5kZWQgZm9yIGRpcmVjdCBleHRlcm5hbCB1c2U/IElzIGl0IGJlaW5nIGFjY2Vzc2VkIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMgb3Igc29tZSBvdGhlciBtZWNoYW5pc20/IE9yIG1heWJlIHRoZXJlJ3MgYSBwcm9ibGVtIGluIHRoZSBidWlsZCBzeXN0ZW0gd2hlcmUgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBleHBvcnRlZCwgYnV0IGlzbid0P1xuXG5JIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSB2aXNpYmxlIHRvIGNvZGUgb3V0c2lkZSB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIGltcG9ydGFudCwgYXMgaXQgd2lsbCBkZXRlcm1pbmUgdGhlIHBvdGVudGlhbCBzY29wZSBvZiBpdHMgdXNhZ2UsIGFuZCBwb3RlbnRpYWwgcHJvYmxlbXMgd2l0aCBmdXR1cmUgcmVmYWN0b3JpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjQxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTI6NTQuNTU1OTMyNDY5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA3NzMzNTU5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipmb2xpb19hbGxvY19zd2FwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMjo1Ni41NjM2NzMxMDhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMTYxMjg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ29uc2lkZXJpbmcgRXhwb3J0ZWQgU3ltYm9scyBhbmQgTWVtb3J5IE9wZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcncyBidWdnaW5nIG1lLiBUaGlzIHZhcmlhYmxlIG9yIGZ1bmN0aW9uLCB3aGF0ZXZlciBpdCBpcywgaXNuJ3QgZXhwbGljaXRseSBtYXJrZWQgZm9yIGV4cG9ydCDigJMgaXQncyBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AgaW50ZXJuYWxseS4gVGhhdCBtZWFucyBpdCAqY291bGQqIGJlIHZpc2libGUgb3V0c2lkZSB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF04oCZcyBhIGtleSBkaXN0aW5jdGlvbi4gV2hldGhlciBpdCAqaXMqIGFjdHVhbGx5IGJlaW5nIHVzZWQgZXh0ZXJuYWxseSwgYW5kIHRodXMgbmVlZGluZyB0byBiZSB2aXNpYmxlLCBpcyBhbm90aGVyIG1hdHRlci5cblxuQW5kIHRoZW4gdGhlIGJpZyBxdWVzdGlvbiwgdGhlIG9uZSB0aGF0IHJlYWxseSBuZWVkcyBhbiBhbnN3ZXI6IGlzIHRoaXMgYHNobWVtX3dyaXRlb3V0YCBmdW5jdGlvbiBvciB2YXJpYWJsZSDigJMgd2hhdGV2ZXIgaXQgaXMg4oCTIGRlY2xhcmVkIGFzIGV4cG9ydGVkIGFueXdoZXJlPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSwgdGhlIGxpbmtlciBzY3JpcHRzLCB0aGUgYnVpbGQgcHJvY2Vzcy4uLiBldmVyeXdoZXJlLiBUaGlzIG1hdHRlcnMgYmVjYXVzZSBpdCBkaXJlY3RseSBpbXBhY3RzIHRoZSBjb2RlJ3MgbGlua2luZyBhbmQgdXNhYmlsaXR5LiBJZiBpdCdzIG5vdCBleHBvcnRlZCwgYW5kIHNvbWVvbmUgaXMgdHJ5aW5nIHRvIHVzZSBpdCBleHRlcm5hbGx5LCB3ZSBoYXZlIGEgbWFqb3IgcHJvYmxlbSB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoaXMgaGFzIHRvIGJlIG5haWxlZCBkb3duLCBmYXN0LCBvciB3ZSBhcmUgc2l0dGluZyBvbiBhIHRpbWUgYm9tYi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5ODgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMjo1OS44ODUyODkxNjdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODE1NTkxNDAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnNobWVtX3dyaXRlb3V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMzowMi4xNjY4NTgwOTdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU2MTM1NDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSZWNlbnQgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lICpzaWduaWZpY2FudCogZnVuY3Rpb25hbCBjaGFuZ2VzLiBUaGVzZSBhcmVuJ3QgZXhwb3J0ZWQsIGJ1dCB0aGV5J3JlIG5vbi1zdGF0aWMsIHNvIHRoZXkncmUgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIOKAkyBzcGVjaWZpY2FsbHksIHRocm91Z2ggbWVtb3J5IHByZXNzdXJlIHNjZW5hcmlvcyBsaWtlIG1lbW9yeSBhbGxvY2F0aW9uIG9yIHN3YXBwaW5nLiBUaGF0IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBoZXJlLiBNeSBleHBlcnQgaW5zdGluY3Qgc2F5cyB0aGVzZSBhcmUgZGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgY2FtcGFpZ24gdG8gc2VlIGhvdyB0aGV5IGhvbGQgdXAgdW5kZXIgc3RyZXNzLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBxdWlja2x5LiBXZSdyZSBsb29raW5nIGF0IGBTV0FQYCwgYE1FTUNHYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBTSE1FTWAuIEdvdCBpdC5cblxuTm93LCB0aGUgc3ltYm9scyB0aGF0IGhhdmUgbXkgYXR0ZW50aW9uOiBgcGFnZV9jb3VudGVyX21hcmdpbmAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGBmb2xpb19hbGxvY19zd2FwYCwgYW5kIGBzaG1lbV93cml0ZW91dGAuIFRoZSBwYXRjaCBpcyBpbnRyb2R1Y2luZyBuZXcgbG9naWMgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIHN3YXAgbWFyZ2lucy4gQ3JpdGljYWxseSwgaXQncyB1cGRhdGluZyBgZm9saW9fYWxsb2Nfc3dhcGAgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9yIGNvZGVzOiBgLUUyQklHYCwgYC1FTk9TUENgLCBhbmQgYC1FTk9NRU1gLCBpbnN0ZWFkIG9mIGEgc2ltcGxlIGJvb2xlYW4uIFRoZSBiaWcgZGVhbCBoZXJlIGlzIHRoZSByYW1pZmljYXRpb25zIGRvd25zdHJlYW0uIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgYXJlIGFsc28gYmVpbmcgdXBkYXRlZCB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZXNlIG5ldyBlcnJvciBjb2RlcywgYW5kIHRoYXQgaW5jbHVkZXMgY2hhbmdlcyB0byB0aGVpciBmYWxsYmFjayBiZWhhdmlvciB3aGVuIHN3YXBwaW5nIG91dCBsYXJnZSBmb2xpb3MgZmFpbHMuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBjaGFuZ2VzIGFmZmVjdGluZyBob3cgZm9saW9zIGFyZSBzd2FwcGVkIG91dCB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIHRvdWNoaW5nIHN3YXAsIHNobWVtLCBhbmQgdm1zY2FuIGZ1bmN0aW9uYWxpdHkuXG5cbkp1c3QgZG9pbmcgYSBxdWljayBkb3VibGUtY2hlY2suLi4gWWVzLCBgU0hNRU1gIGlzIHRoZSBjb3JyZWN0IGNvbmZpZyBmb3Igc2hhcmVkIG1lbW9yeS4gYFNXQVBgIGZvciBzd2FwLCBgTUVNQ0dgIGZvciBtZW1vcnkgY2dyb3VwcywgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZm9yIFRIUC5cblxuQWxyaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExldCdzIGdldCB0aGVzZSB0ZXN0cyBnb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNzksIk91dHB1dFRva2VucyI6MjE1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjEzOjA5LjcyODIxNTMyN1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjU4ODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV9jb3VudGVyX21hcmdpblwiLFxuICAgIFwibWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5cIixcbiAgICBcImZvbGlvX2FsbG9jX3N3YXBcIixcbiAgICBcInNobWVtX3dyaXRlb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gY2hlY2sgdGhlIHN3YXAgbWFyZ2luIGZvciBtZW1vcnkgY2dyb3VwcyBhbmQgbW9kaWZpZXMgYGZvbGlvX2FsbG9jX3N3YXBgIHRvIHJldHVybiBzcGVjaWZpYyBlcnJvciBjb2RlcyAoLUUyQklHLCAtRU5PU1BDLCAtRU5PTUVNKSBpbnN0ZWFkIG9mIGEgYm9vbGVhbi4gSXQgYWxzbyB1cGRhdGVzIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgdG8gaGFuZGxlIHRoZXNlIG5ldyBlcnJvciBjb2Rlcywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIHRoZSBmYWxsYmFjayBiZWhhdmlvciB3aGVuIHN3YXBwaW5nIG91dCBsYXJnZSBmb2xpb3MgZmFpbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoc3dhcCwgc2htZW0sIHZtc2NhbikgdGhhdCBhZmZlY3QgaG93IGZvbGlvcyBhcmUgc3dhcHBlZCBvdXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlX2NvdW50ZXJfbWFyZ2luXCIsXG4gICAgXCJtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpblwiLFxuICAgIFwiZm9saW9fYWxsb2Nfc3dhcFwiLFxuICAgIFwic2htZW1fd3JpdGVvdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBjaGVjayB0aGUgc3dhcCBtYXJnaW4gZm9yIG1lbW9yeSBjZ3JvdXBzIGFuZCBtb2RpZmllcyBgZm9saW9fYWxsb2Nfc3dhcGAgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9yIGNvZGVzICgtRTJCSUcsIC1FTk9TUEMsIC1FTk9NRU0pIGluc3RlYWQgb2YgYSBib29sZWFuLiBJdCBhbHNvIHVwZGF0ZXMgYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCB0byBoYW5kbGUgdGhlc2UgbmV3IGVycm9yIGNvZGVzLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgdGhlIGZhbGxiYWNrIGJlaGF2aW9yIHdoZW4gc3dhcHBpbmcgb3V0IGxhcmdlIGZvbGlvcyBmYWlscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChzd2FwLCBzaG1lbSwgdm1zY2FuKSB0aGF0IGFmZmVjdCBob3cgZm9saW9zIGFyZSBzd2FwcGVkIG91dCB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjEzOjA5LjgwOTQ4MjczNFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MzA3MzIwNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMzowOS44MTAwNDQ4ODRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTY1MzAxNjYwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgcmVsYXRlZCB0byBzd2FwIGFjY291bnRpbmcgYW5kIGZvbGlvIHN3YXAgYWxsb2NhdGlvbi4gSXQgaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHN3YXAgbWFyZ2lucyAoYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gKSBhbmQgcmVmaW5lcyB0aGUgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgYGZvbGlvX2FsbG9jX3N3YXBgIHRvIGJldHRlciBndWlkZSBmb2xpbyBzcGxpdHRpbmcgbG9naWMgaW4gYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YC4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGJhc2VkIG9uIG1lbW9yeS9zd2FwIGxpbWl0cyBhbmQgZG8gbm90IGludm9sdmUgYWxsb2NhdGluZyBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgbW9kaWZ5aW5nIGRhdGEgbGVuZ3RocyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgbG9naWNhbCBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDczN2ZkYzExMTdlZjZkZWY2ZjhlNjJiMWFlMDJiNGQ0NGJmODc5MTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwODoxMDo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXG5pbmRleCBkNjQ5YjZiYmJjODcxLi4wN2I3Y2IxMjI0OWM3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuQEAgLTY4LDYgKzY4LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfY291bnRlcl9yZWFkKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4gXHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZjb3VudGVyLVx1MDAzZXVzYWdlKTtcbiB9XG4gXG4rbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpO1xuIHZvaWQgcGFnZV9jb3VudGVyX2NhbmNlbChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiB2b2lkIHBhZ2VfY291bnRlcl9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gYm9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDBmOTUzZWQ5Yzg2MzAuLmE3MmVjZjEyYzAwZGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC01MTAsNiArNTEwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BcbiBcdF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7XG4gfVxuIFxuK2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIGV4dGVybiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuICNlbHNlXG5AQCAtNTIzLDYgKzUyNCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLFxuIHtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDFkMzMzOTUyMDgwOWYuLjQ0MmEyOTcxOTdkNTIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTU3OTYsMTUgKzU3OTYsMzUgQEAgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRsb25nIG5yX3N3YXBfcGFnZXMgPSBnZXRfbnJfc3dhcF9wYWdlcygpO1xuIFxuLVx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkpXG4tXHRcdHJldHVybiBucl9zd2FwX3BhZ2VzO1xuLVx0Zm9yICg7ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpOyBtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSlcbi1cdFx0bnJfc3dhcF9wYWdlcyA9IG1pbl90KGxvbmcsIG5yX3N3YXBfcGFnZXMsXG4tXHRcdFx0XHQgICAgICBSRUFEX09OQ0UobWVtY2ctXHUwMDNlc3dhcC5tYXgpIC1cbi1cdFx0XHRcdCAgICAgIHBhZ2VfY291bnRlcl9yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApKTtcbitcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhZG9fbWVtc3dfYWNjb3VudCgpKVxuK1x0XHRucl9zd2FwX3BhZ2VzID0gbWluKG5yX3N3YXBfcGFnZXMsIHBhZ2VfY291bnRlcl9tYXJnaW4oXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCkpO1xuK1xuIFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG4gfVxuIFxuKy8qKlxuKyAqIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luIC0gZ2V0IGEgZm9saW8ncyBtZW1jZyBzd2FwIG1hcmdpblxuKyAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtY2cgbWFyZ2luIGlzIHF1ZXJpZWRcbisgKlxuKyAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJ3MgbWVtY2cgaGllcmFyY2h5LlxuKyAqL1xuK2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4rXHRsb25nIG1hcmdpbjtcbitcbitcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpIHx8XG4rXHQgICAgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKVxuK1x0XHRyZXR1cm4gUEFHRV9DT1VOVEVSX01BWDtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuK1x0bWFyZ2luID0gcGFnZV9jb3VudGVyX21hcmdpbihcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIG1hcmdpbjtcbit9XG4rXG4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jXG5pbmRleCA2NjFlMGYyYTUxMjdhLi40NTA1NDNmNGIzMThiIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9jb3VudGVyLmNcbisrKyBiL21tL3BhZ2VfY291bnRlci5jXG5AQCAtNDYsNiArNDYsMjYgQEAgc3RhdGljIHZvaWQgcHJvcGFnYXRlX3Byb3RlY3RlZF91c2FnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjLFxuIFx0fVxuIH1cbiBcbisvKipcbisgKiBwYWdlX2NvdW50ZXJfbWFyZ2luIC0gcmVtYWluaW5nIHVzYWJsZSBzcGFjZSB3aXRoaW4gaGllcmFyY2hpY2FsIGxpbWl0c1xuKyAqIEBjb3VudGVyOiBjb3VudGVyXG4rICpcbisgKiBSZXR1cm46IFRoZSBtaW5pbXVtIHZhbHVlIG9mIG1heCBtaW51cyB1c2FnZSBhY3Jvc3MgQGNvdW50ZXIgYW5kIGFsbCBvZlxuKyAqIGl0cyBhbmNlc3RvcnMuIFRoZSB2YWx1ZSBtYXkgYmUgbmVnYXRpdmUgZHVyaW5nIGEgY29uY3VycmVudCBjaGFyZ2UuXG4rICovXG4rbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4re1xuK1x0bG9uZyBtYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYO1xuK1xuK1x0ZG8ge1xuK1x0XHRsb25nIG0gPSBSRUFEX09OQ0UoY291bnRlci1cdTAwM2VtYXgpIC0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7XG4rXG4rXHRcdG1hcmdpbiA9IG1pbihtYXJnaW4sIG0pO1xuK1x0fSB3aGlsZSAoKGNvdW50ZXIgPSBjb3VudGVyLVx1MDAzZXBhcmVudCkpO1xuK1xuK1x0cmV0dXJuIG1hcmdpbjtcbit9XG4rXG4gLyoqXG4gICogcGFnZV9jb3VudGVyX2NhbmNlbCAtIHRha2UgcGFnZXMgb3V0IG9mIHRoZSBsb2NhbCBjb3VudGVyXG4gICogQGNvdW50ZXI6IGNvdW50ZXJcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNTk5NjY1YTNkNmU3Yi4uNmEzNWY1ZWU4NDM3MiAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0xNjEyLDcgKzE2MTIsNyBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuIFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0cGdvZmZfdCBpbmRleDtcbi1cdGludCBucl9wYWdlcztcbitcdGludCBucl9wYWdlcywgcmV0O1xuIFx0Ym9vbCBzcGxpdCA9IGZhbHNlO1xuIFxuIFx0aWYgKChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBTSE1FTV9GX0xPQ0tFRCkgfHwgc2JpbmZvLVx1MDAzZW5vc3dhcClcbkBAIC0xNjkzLDcgKzE2OTMsOCBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIFx0fVxuIFxuLVx0aWYgKCFmb2xpb19hbGxvY19zd2FwKGZvbGlvKSkge1xuK1x0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XG4rXHRpZiAoIXJldCkge1xuIFx0XHRib29sIGZpcnN0X3N3YXBwZWQgPSBzaG1lbV9yZWNhbGNfaW5vZGUoaW5vZGUsIDAsIG5yX3BhZ2VzKTtcbiBcdFx0aW50IGVycm9yO1xuIFxuQEAgLTE3NDYsNyArMTc0Nyw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xuIFx0XHRnb3RvIHJlZGlydHk7XG4gXHR9XG4tXHRpZiAobnJfcGFnZXMgXHUwMDNlIDEpXG4rXHRpZiAobnJfcGFnZXMgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHJldCA9PSAtRTJCSUcpXG4gXHRcdGdvdG8gdHJ5X3NwbGl0O1xuIHJlZGlydHk6XG4gXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggZjVkZmM3ZTU5MTkxZS4uMmQxMjdmMWIzMGJhZSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xNzM1LDcgKzE3MzUsOSBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gICogc3dhcCBjYWNoZS5cbiAgKlxuICAqIENvbnRleHQ6IENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBmb2xpbyBsb2NrLlxuLSAqIFJldHVybjogV2hldGhlciB0aGUgZm9saW8gd2FzIGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlLlxuKyAqIFJldHVybjogJTAgb24gc3VjY2VzcywgJS1FMkJJRyBpZiBzcGxpdHRpbmcgdGhlIGZvbGlvIG1pZ2h0IGFsbG93IHN3YXBvdXQsXG4rICogJS1FTk9TUEMgaWYgbm8gZ2xvYmFsIHN3YXAgc3BhY2UgaXMgYXZhaWxhYmxlLCBvciAlLUVOT01FTSBpZiBzcGxpdHRpbmdcbisgKiB3b3VsZCBub3QgaGVscC5cbiAgKi9cbiBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbkBAIC0xNzQ3LDExICsxNzQ5LDExIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHRpZiAob3JkZXIpIHtcbiBcdFx0Lypcbi1cdFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZCxcbi1cdFx0ICogdGhlIGNhbGxlciBzaG91bGQgc3BsaXQgdGhlIGZvbGlvIGFuZCB0cnkgYWdhaW4uXG4rXHRcdCAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQuIENoZWNrIGJlbG93XG4rXHRcdCAqIHdoZXRoZXIgc3BsaXR0aW5nIGFuZCByZXRyeWluZyBjYW4gbWFrZSBwcm9ncmVzcy5cbiBcdFx0ICovXG4gXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVEhQX1NXQVApKVxuLVx0XHRcdHJldHVybiAtRUFHQUlOO1xuK1x0XHRcdGdvdG8gZmFpbGVkO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBBbGxvY2F0aW9uIHNpemUgc2hvdWxkIG5ldmVyIGV4Y2VlZCBjbHVzdGVyIHNpemVcbkBAIC0xNzU5LDcgKzE3NjEsNyBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHQgKi9cbiBcdFx0aWYgKHNpemUgXHUwMDNlIFNXQVBGSUxFX0NMVVNURVIpIHtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0UoMSk7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0xNzc1LDEzICsxNzc3LDIzIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHR9XG4gXG4gXHQvKiBOZWVkIHRvIGNhbGwgdGhpcyBldmVuIGlmIGFsbG9jYXRpb24gZmFpbGVkLCBmb3IgTUVNQ0dfU1dBUF9GQUlMLiAqL1xuLVx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpXG4rXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSkge1xuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4rXHRcdGdvdG8gZmFpbGVkO1xuK1x0fVxuIFxuIFx0aWYgKHVubGlrZWx5KCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0Z290byBmYWlsZWQ7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitmYWlsZWQ6XG4rXHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcdTAwM2M9IDApXG4rXHRcdHJldHVybiAtRU5PU1BDO1xuK1x0aWYgKG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKSBcdTAwM2M9IDApXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0dXJuIG9yZGVyID8gLUUyQklHIDogLUVOT01FTTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYmU2YmQyNmU4YzU3OC4uNzU0MzM2MDMzNjE2MCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTEyNTksNiArMTI1OSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbiBcdFx0ICovXG4gXHRcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0IWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuK1x0XHRcdGludCByZXQ7XG4rXG4gXHRcdFx0aWYgKCEoc2MtXHUwMDNlZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0lPKSlcbiBcdFx0XHRcdGdvdG8ga2VlcF9sb2NrZWQ7XG4gXHRcdFx0aWYgKGZvbGlvX21heWJlX2RtYV9waW5uZWQoZm9saW8pKVxuQEAgLTEyNzcsMTEgKzEyNzksMTQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHRcdFx0ICAgIHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKVxuIFx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcbiBcdFx0XHR9XG4tXHRcdFx0aWYgKGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7XG4rXHRcdFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XG4rXHRcdFx0aWYgKHJldCkge1xuIFx0XHRcdFx0aW50IF9fbWF5YmVfdW51c2VkIG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIFxuIFx0XHRcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcbiBcdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWRfc3BsaXQ7XG4rXHRcdFx0XHRpZiAocmV0ICE9IC1FMkJJRylcbitcdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XG4gXHRcdFx0XHQvKiBGYWxsYmFjayB0byBzd2FwIG5vcm1hbCBwYWdlcyAqL1xuIFx0XHRcdFx0aWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKVxuIFx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjEzOjA5LjgxMDA0NjYzNFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjUzMDE0MDYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBTd2FwIEFjY291bnRpbmcgYW5kIEZvbGlvIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIHByZXR0eSBjbGVhbiBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHN0YW5kcG9pbnQsIGJ1dCBhcyBhbHdheXMsIGEgZGVlcCBkaXZlIGlzIHJlcXVpcmVkLiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyB3ZSBoYW5kbGUgc3dhcCBhY2NvdW50aW5nIGFuZCBmb2xpbyBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFdlIGFyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byB0aGUgc3dhcCBhY2NvdW50aW5nLCBmb2xpbyBzd2FwIGFsbG9jYXRpb24sIGFuZCBhZGp1c3RtZW50cyBmb3IgZXJyb3IgaGFuZGxpbmcuXG5cblRoZSBrZXkgcGllY2VzIGludHJvZHVjZWQgYXJlIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYC4gVGhlc2UgYXBwZWFyIHRvIGNhbGN1bGF0ZSBhdmFpbGFibGUgc3dhcCBzcGFjZSB3aXRoaW4gdGhlIGxpbWl0cyBkZWZpbmVkIGJ5IG1lbW9yeSBjZ3JvdXBzLiBBbmFseXppbmcgdGhlIGNvZGUsIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCByZWFkcyBgY291bnRlci1cdTAwM2VtYXhgIGFuZCBgY291bnRlci1cdTAwM2V1c2FnZWAgdmlhIGBwYWdlX2NvdW50ZXJfcmVhZGAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhcmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQgaGVyZS4gYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCB0aGVuIGxldmVyYWdlcyBgcGFnZV9jb3VudGVyX21hcmdpbmAgZm9yIG1lbWNnLXNwZWNpZmljIG1hcmdpbnMuIFN0aWxsIGNsZWFuLlxuXG5UaGUgcmVhbCBoZWFydCBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmaW5pbmcgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgYGZvbGlvX2FsbG9jX3N3YXBgLiBQcmV2aW91c2x5LCBpdCBhcHBlYXJzIHRoaXMgZnVuY3Rpb24gcmV0dXJuZWQgYSBzaW1wbGUgYm9vbGVhbiBvciBhIGdlbmVyaWMgZXJyb3IsIGJ1dCBpdCBub3cgcmV0dXJucyBzcGVjaWZpYyBlcnJvciBjb2RlcyBsaWtlIGAtRTJCSUdgLCBgLUVOT1NQQ2AsIGFuZCBgLUVOT01FTWAuIFdlJ3JlIHNlZWluZyB0aGVzZSBlcnJvcnMgdXNlZCBpbiBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIGNvbnRyb2wgd2hldGhlciBhIGZvbGlvIGlzIHNwbGl0LiBJbiBgc2htZW1fd3JpdGVvdXRgLCB3ZSBjaGVjayBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGAtRTJCSUdgIGFuZCBpZiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGlzIGdyZWF0ZXIgdGhhbiAxLCB0aGVuIHdlIGluaXRpYXRlIGEgc3BsaXQuIEluIGBzaHJpbmtfZm9saW9fbGlzdGAsIHRoZSByZXR1cm4gdmFsdWUgaXMgZXZhbHVhdGVkIGFnYWluc3QgYC1FMkJJR2AgdG8gZGVjaWRlIGJldHdlZW4gYWN0aXZhdGlvbiBhbmQgc3BsaXR0aW5nLlxuXG5Ob3csIHRvIGV4cGxpY2l0bHkgYWRkcmVzcyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybjpcblxuMS4gICoqTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4qKlxuMi4gICoqTm8gbmV3IGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHVuaW5pdGlhbGl6ZWQuKipcbjMuICAqKk5vIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBhbnkgc3RydWN0cy4qKlxuNC4gICoqVGhlcmUgaXMgbm8gZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2FnZSBpbiBhbnkgY29udHJvbCBmbG93LioqXG5cbkl0J3MgY2xlYXIgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHRvIG1ha2UgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgbW9yZSBncmFudWxhciBhbmQgcm9idXN0IGluIGhvdyBpdCBoYW5kbGVzIHN3YXAgYXZhaWxhYmlsaXR5IGFuZCBtZW1vcnkgY2dyb3VwIGxpbWl0cy4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGVzZSBzcGVjaWZpYyBlcnJvciBjb2RlcyBhbGxvd3MgZm9yIG1vcmUgaW5mb3JtZWQgZGVjaXNpb25zIG9uIGZvbGlvIHNwbGl0dGluZy5cblxuT2theSwgbGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2ssIGJlY2F1c2Ugc3VidGxlIGJ1Z3MgYXJlIHRoZSB3b3JzdC4gVGhlIGNoYW5nZSBpbiB0aGUgcmV0dXJuIHR5cGUgb2YgYGZvbGlvX2FsbG9jX3N3YXBgIGZyb20gYW4gaW1wbGljaXQgYm9vbGVhbiB0byBhbiBgaW50YCB3aXRoIHNwZWNpZmljIGVycm9yIGNvZGVzIGluaXRpYWxseSByYWlzZWQgYSBjb25jZXJuLCBidXQgYWZ0ZXIgZ29pbmcgdGhyb3VnaCB0aGUgb2xkIGFuZCBuZXcgY29kZSwgaXQgYmVjb21lcyBjbGVhciB0aGF0IHRoZSBzdWNjZXNzL2ZhaWx1cmUgbG9naWMgcmVtYWlucyBpZGVudGljYWwuIFRoZSBvbGQgY29kZSBhbmQgbmV3IGNvZGUgdHJlYXQgMCBhcyBzdWNjZXNzIGFuZCBhbnkgb3RoZXIgcmV0dXJuIGFzIGFuIGVycm9yLiBUaGUgb2xkIGNvZGUgdXNlZCBib29sZWFuIGNvbXBhcmlzb24gdG8gZGV0ZXJtaW5lIGlmIGBmb2xpb19hbGxvY19zd2FwYCByZXR1cm5lZCBhbiBlcnJvciwgdGhlIG5ldyBjb2RlIGNoZWNrcyB0aGUgc3BlY2lmaWMgZXJyb3IgY29kZSBgcmV0ID09IC1FMkJJR2AuXG5cbkkndmUgY2FyZWZ1bGx5IGV4YW1pbmVkIGhvdyB0aGUgZXJyb3IgY29kZXMgYXJlIHV0aWxpemVkIGluIGJvdGggYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YC4gVGhlIG5ldyBjb2RlIGVuaGFuY2VzIGVycm9yIGhhbmRsaW5nIHdpdGhvdXQgaW50cm9kdWNpbmcgYW55IG5vdmVsIHdheXMgdG8gYWNjZXNzIG9yIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkJhc2VkIG9uIHRoaXMgdGhvcm91Z2ggYW5hbHlzaXMsIEkgY2FuIGRlZmluaXRpdmVseSBzYXkgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBLQVNBTiBhbmQgb3VyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIG1vcmUgdGhhbiBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSwgdGhvdWdoIGV2ZW4gdGhvc2UgYXJlIHVubGlrZWx5LlxuXG5UaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBmYWxzZS4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIGNoYW5nZXMgYXJlIHB1cmVseSBmb2N1c2VkIG9uIGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBhbmQgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgbm90IHJlbGF0ZWQgdG8gaW5pdGlhbGl6aW5nIG9yIGV4cG9zaW5nIG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2MiwiT3V0cHV0VG9rZW5zIjoyMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTM6MjYuMzQwMTkwNTI2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlbGF0ZWQgdG8gc3dhcCBhY2NvdW50aW5nIGFuZCBmb2xpbyBzd2FwIGFsbG9jYXRpb24uIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMgKGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCkgYW5kIHJlZmluZXMgdGhlIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGBmb2xpb19hbGxvY19zd2FwYCB0byBiZXR0ZXIgZ3VpZGUgZm9saW8gc3BsaXR0aW5nIGxvZ2ljIGluIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBtZW1vcnkvc3dhcCBsaW1pdHMgYW5kIGRvIG5vdCBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGRhdGEgc3RydWN0dXJlcywgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIGxvZ2ljYWwgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlbGF0ZWQgdG8gc3dhcCBhY2NvdW50aW5nIGFuZCBmb2xpbyBzd2FwIGFsbG9jYXRpb24uIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMgKGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCkgYW5kIHJlZmluZXMgdGhlIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGBmb2xpb19hbGxvY19zd2FwYCB0byBiZXR0ZXIgZ3VpZGUgZm9saW8gc3BsaXR0aW5nIGxvZ2ljIGluIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBtZW1vcnkvc3dhcCBsaW1pdHMgYW5kIGRvIG5vdCBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGRhdGEgc3RydWN0dXJlcywgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIGxvZ2ljYWwgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcm28h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 07:56:22 +0000 UTC FinishedAt: 2026-08-13 08:13:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9eba1ecd48e4d85eacdb2a351de4f8cc1527c395", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "TRANSPARENT_HUGEPAGE", "SHMEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9eba1ecd48e4d85eacdb2a351de4f8cc1527c395", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "TRANSPARENT_HUGEPAGE", "SHMEM" ], "series_id": "deae8dbb-d8a6-42d7-a41f-507208e3c088" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "page_counter_margin", "mem_cgroup_get_folio_swap_margin", "folio_alloc_swap", "shmem_writeout" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7U0hNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlX2NvdW50ZXJfbWFyZ2luJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luJiMzNDssCiAgICAmIzM0O2ZvbGlvX2FsbG9jX3N3YXAmIzM0OywKICAgICYjMzQ7c2htZW1fd3JpdGVvdXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlbGF0ZWQgdG8gc3dhcCBhY2NvdW50aW5nIGFuZCBmb2xpbyBzd2FwIGFsbG9jYXRpb24uIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMgKGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCkgYW5kIHJlZmluZXMgdGhlIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGBmb2xpb19hbGxvY19zd2FwYCB0byBiZXR0ZXIgZ3VpZGUgZm9saW8gc3BsaXR0aW5nIGxvZ2ljIGluIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYmFzZWQgb24gbWVtb3J5L3N3YXAgbGltaXRzIGFuZCBkbyBub3QgaW52b2x2ZSBhbGxvY2F0aW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGNvcHlpbmcgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBtb2RpZnlpbmcgZGF0YSBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBsb2dpY2FsIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGNoZWNrIHRoZSBzd2FwIG1hcmdpbiBmb3IgbWVtb3J5IGNncm91cHMgYW5kIG1vZGlmaWVzIGBmb2xpb19hbGxvY19zd2FwYCB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMgKC1FMkJJRywgLUVOT1NQQywgLUVOT01FTSkgaW5zdGVhZCBvZiBhIGJvb2xlYW4uIEl0IGFsc28gdXBkYXRlcyBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIGhhbmRsZSB0aGVzZSBuZXcgZXJyb3IgY29kZXMsIHNwZWNpZmljYWxseSBjaGFuZ2luZyB0aGUgZmFsbGJhY2sgYmVoYXZpb3Igd2hlbiBzd2FwcGluZyBvdXQgbGFyZ2UgZm9saW9zIGZhaWxzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKHN3YXAsIHNobWVtLCB2bXNjYW4pIHRoYXQgYWZmZWN0IGhvdyBmb2xpb3MgYXJlIHN3YXBwZWQgb3V0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDczN2ZkYzExMTdlZjZkZWY2ZjhlNjJiMWFlMDJiNGQ0NGJmODc5MTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwODoxMDo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuaW5kZXggZDY0OWI2YmJiYzg3MS4uMDdiN2NiMTIyNDljNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbkBAIC02OCw2ICYjNDM7NjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudGVyX3JlYWQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcbiBcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmNvdW50ZXItXHUwMDNldXNhZ2UpO1xuIH1cbiBcbiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpO1xuIHZvaWQgcGFnZV9jb3VudGVyX2NhbmNlbChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiB2b2lkIHBhZ2VfY291bnRlcl9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gYm9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDBmOTUzZWQ5Yzg2MzAuLmE3MmVjZjEyYzAwZGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC01MTAsNiAmIzQzOzUxMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wXG4gXHRfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpO1xuIH1cbiBcbiYjNDM7bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2VcbkBAIC01MjMsNiAmIzQzOzUyNCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLFxuIHtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMWQzMzM5NTIwODA5Zi4uNDQyYTI5NzE5N2Q1MiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNTc5NiwxNSAmIzQzOzU3OTYsMzUgQEAgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRsb25nIG5yX3N3YXBfcGFnZXMgPSBnZXRfbnJfc3dhcF9wYWdlcygpO1xuIFxuLVx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkpXG4tXHRcdHJldHVybiBucl9zd2FwX3BhZ2VzO1xuLVx0Zm9yICg7ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpOyBtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSlcbi1cdFx0bnJfc3dhcF9wYWdlcyA9IG1pbl90KGxvbmcsIG5yX3N3YXBfcGFnZXMsXG4tXHRcdFx0XHQgICAgICBSRUFEX09OQ0UobWVtY2ctXHUwMDNlc3dhcC5tYXgpIC1cbi1cdFx0XHRcdCAgICAgIHBhZ2VfY291bnRlcl9yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApKTtcbiYjNDM7XHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWRvX21lbXN3X2FjY291bnQoKSlcbiYjNDM7XHRcdG5yX3N3YXBfcGFnZXMgPSBtaW4obnJfc3dhcF9wYWdlcywgcGFnZV9jb3VudGVyX21hcmdpbihcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKSk7XG4mIzQzO1xuIFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4gLSBnZXQgYSBmb2xpbyYjMzk7cyBtZW1jZyBzd2FwIG1hcmdpblxuJiM0MzsgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbWNnIG1hcmdpbiBpcyBxdWVyaWVkXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJiMzOTtzIG1lbWNnIGhpZXJhcmNoeS5cbiYjNDM7ICovXG4mIzQzO2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiYjNDM7XHRsb25nIG1hcmdpbjtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkgfHxcbiYjNDM7XHQgICAgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKVxuJiM0MztcdFx0cmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbiYjNDM7XHRtYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWFyZ2luO1xuJiM0Mzt9XG4mIzQzO1xuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuY1xuaW5kZXggNjYxZTBmMmE1MTI3YS4uNDUwNTQzZjRiMzE4YiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2NvdW50ZXIuY1xuQEAgLTQ2LDYgJiM0Mzs0NiwyNiBAQCBzdGF0aWMgdm9pZCBwcm9wYWdhdGVfcHJvdGVjdGVkX3VzYWdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmMsXG4gXHR9XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogcGFnZV9jb3VudGVyX21hcmdpbiAtIHJlbWFpbmluZyB1c2FibGUgc3BhY2Ugd2l0aGluIGhpZXJhcmNoaWNhbCBsaW1pdHNcbiYjNDM7ICogQGNvdW50ZXI6IGNvdW50ZXJcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBUaGUgbWluaW11bSB2YWx1ZSBvZiBtYXggbWludXMgdXNhZ2UgYWNyb3NzIEBjb3VudGVyIGFuZCBhbGwgb2ZcbiYjNDM7ICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS5cbiYjNDM7ICovXG4mIzQzO2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxuJiM0Mzt7XG4mIzQzO1x0bG9uZyBtYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRsb25nIG0gPSBSRUFEX09OQ0UoY291bnRlci1cdTAwM2VtYXgpIC0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7XG4mIzQzO1xuJiM0MztcdFx0bWFyZ2luID0gbWluKG1hcmdpbiwgbSk7XG4mIzQzO1x0fSB3aGlsZSAoKGNvdW50ZXIgPSBjb3VudGVyLVx1MDAzZXBhcmVudCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWFyZ2luO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHBhZ2VfY291bnRlcl9jYW5jZWwgLSB0YWtlIHBhZ2VzIG91dCBvZiB0aGUgbG9jYWwgY291bnRlclxuICAqIEBjb3VudGVyOiBjb3VudGVyXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IDU5OTY2NWEzZDZlN2IuLjZhMzVmNWVlODQzNzIgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jXG5AQCAtMTYxMiw3ICYjNDM7MTYxMiw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRwZ29mZl90IGluZGV4O1xuLVx0aW50IG5yX3BhZ2VzO1xuJiM0MztcdGludCBucl9wYWdlcywgcmV0O1xuIFx0Ym9vbCBzcGxpdCA9IGZhbHNlO1xuIFxuIFx0aWYgKChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBTSE1FTV9GX0xPQ0tFRCkgfHwgc2JpbmZvLVx1MDAzZW5vc3dhcClcbkBAIC0xNjkzLDcgJiM0MzsxNjkzLDggQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcbiBcdH1cbiBcbi1cdGlmICghZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcbiYjNDM7XHRyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTtcbiYjNDM7XHRpZiAoIXJldCkge1xuIFx0XHRib29sIGZpcnN0X3N3YXBwZWQgPSBzaG1lbV9yZWNhbGNfaW5vZGUoaW5vZGUsIDAsIG5yX3BhZ2VzKTtcbiBcdFx0aW50IGVycm9yO1xuIFxuQEAgLTE3NDYsNyAmIzQzOzE3NDcsNyBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbiBcdFx0Z290byByZWRpcnR5O1xuIFx0fVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxKVxuJiM0MztcdGlmIChucl9wYWdlcyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgcmV0ID09IC1FMkJJRylcbiBcdFx0Z290byB0cnlfc3BsaXQ7XG4gcmVkaXJ0eTpcbiBcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXG5pbmRleCBmNWRmYzdlNTkxOTFlLi4yZDEyN2YxYjMwYmFlIDEwMDY0NFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuY1xuQEAgLTE3MzUsNyAmIzQzOzE3MzUsOSBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gICogc3dhcCBjYWNoZS5cbiAgKlxuICAqIENvbnRleHQ6IENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBmb2xpbyBsb2NrLlxuLSAqIFJldHVybjogV2hldGhlciB0aGUgZm9saW8gd2FzIGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlLlxuJiM0MzsgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsICUtRTJCSUcgaWYgc3BsaXR0aW5nIHRoZSBmb2xpbyBtaWdodCBhbGxvdyBzd2Fwb3V0LFxuJiM0MzsgKiAlLUVOT1NQQyBpZiBubyBnbG9iYWwgc3dhcCBzcGFjZSBpcyBhdmFpbGFibGUsIG9yICUtRU5PTUVNIGlmIHNwbGl0dGluZ1xuJiM0MzsgKiB3b3VsZCBub3QgaGVscC5cbiAgKi9cbiBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbkBAIC0xNzQ3LDExICYjNDM7MTc0OSwxMSBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0aWYgKG9yZGVyKSB7XG4gXHRcdC8qXG4tXHRcdCAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQsXG4tXHRcdCAqIHRoZSBjYWxsZXIgc2hvdWxkIHNwbGl0IHRoZSBmb2xpbyBhbmQgdHJ5IGFnYWluLlxuJiM0MztcdFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZC4gQ2hlY2sgYmVsb3dcbiYjNDM7XHRcdCAqIHdoZXRoZXIgc3BsaXR0aW5nIGFuZCByZXRyeWluZyBjYW4gbWFrZSBwcm9ncmVzcy5cbiBcdFx0ICovXG4gXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVEhQX1NXQVApKVxuLVx0XHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcdFx0XHRnb3RvIGZhaWxlZDtcbiBcbiBcdFx0LypcbiBcdFx0ICogQWxsb2NhdGlvbiBzaXplIHNob3VsZCBuZXZlciBleGNlZWQgY2x1c3RlciBzaXplXG5AQCAtMTc1OSw3ICYjNDM7MTc2MSw3IEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2l6ZSBcdTAwM2UgU1dBUEZJTEVfQ0xVU1RFUikge1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0xNzc1LDEzICYjNDM7MTc3NywyMyBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0fVxuIFxuIFx0LyogTmVlZCB0byBjYWxsIHRoaXMgZXZlbiBpZiBhbGxvY2F0aW9uIGZhaWxlZCwgZm9yIE1FTUNHX1NXQVBfRkFJTC4gKi9cbi1cdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKVxuJiM0MztcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKSB7XG4gXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbiYjNDM7XHRcdGdvdG8gZmFpbGVkO1xuJiM0MztcdH1cbiBcbiBcdGlmICh1bmxpa2VseSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGZhaWxlZDtcbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZmFpbGVkOlxuJiM0MztcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiAtRU5PU1BDO1xuJiM0MztcdGlmIChtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihmb2xpbykgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvcmRlciA/IC1FMkJJRyA6IC1FTk9NRU07XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGJlNmJkMjZlOGM1NzguLjc1NDMzNjAzMzYxNjAgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC0xMjU5LDYgJiM0MzsxMjU5LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHQgKi9cbiBcdFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4mIzQzO1x0XHRcdGludCByZXQ7XG4mIzQzO1xuIFx0XHRcdGlmICghKHNjLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9JTykpXG4gXHRcdFx0XHRnb3RvIGtlZXBfbG9ja2VkO1xuIFx0XHRcdGlmIChmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKSlcbkBAIC0xMjc3LDExICYjNDM7MTI3OSwxNCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdFx0XHQgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcbiYjNDM7XHRcdFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XG4mIzQzO1x0XHRcdGlmIChyZXQpIHtcbiBcdFx0XHRcdGludCBfX21heWJlX3VudXNlZCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbiBcbiBcdFx0XHRcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkX3NwbGl0O1xuJiM0MztcdFx0XHRcdGlmIChyZXQgIT0gLUUyQklHKVxuJiM0MztcdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XG4gXHRcdFx0XHQvKiBGYWxsYmFjayB0byBzd2FwIG5vcm1hbCBwYWdlcyAqL1xuIFx0XHRcdFx0aWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKVxuIFx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2VfY291bnRlcl9tYXJnaW4mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4mIzM0OywKICAgICYjMzQ7Zm9saW9fYWxsb2Nfc3dhcCYjMzQ7LAogICAgJiMzNDtzaG1lbV93cml0ZW91dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBjaGVjayB0aGUgc3dhcCBtYXJnaW4gZm9yIG1lbW9yeSBjZ3JvdXBzIGFuZCBtb2RpZmllcyBgZm9saW9fYWxsb2Nfc3dhcGAgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9yIGNvZGVzICgtRTJCSUcsIC1FTk9TUEMsIC1FTk9NRU0pIGluc3RlYWQgb2YgYSBib29sZWFuLiBJdCBhbHNvIHVwZGF0ZXMgYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCB0byBoYW5kbGUgdGhlc2UgbmV3IGVycm9yIGNvZGVzLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgdGhlIGZhbGxiYWNrIGJlaGF2aW9yIHdoZW4gc3dhcHBpbmcgb3V0IGxhcmdlIGZvbGlvcyBmYWlscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChzd2FwLCBzaG1lbSwgdm1zY2FuKSB0aGF0IGFmZmVjdCBob3cgZm9saW9zIGFyZSBzd2FwcGVkIG91dCB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MzdmZGMxMTE3ZWY2ZGVmNmY4ZTYyYjFhZTAyYjRkNDRiZjg3OTEyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMDg6MTA6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaAppbmRleCBkNjQ5YjZiYmJjODcxLi4wN2I3Y2IxMjI0OWM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgKQEAgLTY4LDYgJiM0Mzs2OCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKQogCXJldHVybiBhdG9taWNfbG9uZ19yZWFkKCZhbXA7Y291bnRlci0mZ3Q7dXNhZ2UpOwogfQogCiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpOwogdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogYm9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCAwZjk1M2VkOWM4NjMwLi5hNzJlY2YxMmMwMGRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtNTEwLDYgJiM0Mzs1MTAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcAogCV9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7CiB9CiAKJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7CiAjZWxzZQpAQCAtNTIzLDYgJiM0Mzs1MjQsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwKIHsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDFkMzMzOTUyMDgwOWYuLjQ0MmEyOTcxOTdkNTIgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTU3OTYsMTUgJiM0Mzs1Nzk2LDM1IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJbG9uZyBucl9zd2FwX3BhZ2VzID0gZ2V0X25yX3N3YXBfcGFnZXMoKTsKIAotCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpKQotCQlyZXR1cm4gbnJfc3dhcF9wYWdlczsKLQlmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKQotCQlucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcywKLQkJCQkgICAgICBSRUFEX09OQ0UobWVtY2ctJmd0O3N3YXAubWF4KSAtCi0JCQkJICAgICAgcGFnZV9jb3VudGVyX3JlYWQoJmFtcDttZW1jZy0mZ3Q7c3dhcCkpOwomIzQzOwlpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSAmYW1wOyZhbXA7ICFkb19tZW1zd19hY2NvdW50KCkpCiYjNDM7CQlucl9zd2FwX3BhZ2VzID0gbWluKG5yX3N3YXBfcGFnZXMsIHBhZ2VfY291bnRlcl9tYXJnaW4oJmFtcDttZW1jZy0mZ3Q7c3dhcCkpOwomIzQzOwogCXJldHVybiBucl9zd2FwX3BhZ2VzOwogfQogCiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4gLSBnZXQgYSBmb2xpbyYjMzk7cyBtZW1jZyBzd2FwIG1hcmdpbgomIzQzOyAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtY2cgbWFyZ2luIGlzIHF1ZXJpZWQKJiM0MzsgKgomIzQzOyAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJiMzOTtzIG1lbWNnIGhpZXJhcmNoeS4KJiM0MzsgKi8KJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CWxvbmcgbWFyZ2luOwomIzQzOwomIzQzOwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSB8fAomIzQzOwkgICAgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKQomIzQzOwkJcmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7CiYjNDM7CW1hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oJmFtcDttZW1jZy0mZ3Q7c3dhcCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gbWFyZ2luOwomIzQzO30KJiM0MzsKIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jCmluZGV4IDY2MWUwZjJhNTEyN2EuLjQ1MDU0M2Y0YjMxOGIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfY291bnRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfY291bnRlci5jCkBAIC00Niw2ICYjNDM7NDYsMjYgQEAgc3RhdGljIHZvaWQgcHJvcGFnYXRlX3Byb3RlY3RlZF91c2FnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjLAogCX0KIH0KIAomIzQzOy8qKgomIzQzOyAqIHBhZ2VfY291bnRlcl9tYXJnaW4gLSByZW1haW5pbmcgdXNhYmxlIHNwYWNlIHdpdGhpbiBoaWVyYXJjaGljYWwgbGltaXRzCiYjNDM7ICogQGNvdW50ZXI6IGNvdW50ZXIKJiM0MzsgKgomIzQzOyAqIFJldHVybjogVGhlIG1pbmltdW0gdmFsdWUgb2YgbWF4IG1pbnVzIHVzYWdlIGFjcm9zcyBAY291bnRlciBhbmQgYWxsIG9mCiYjNDM7ICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS4KJiM0MzsgKi8KJiM0Mztsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcikKJiM0Mzt7CiYjNDM7CWxvbmcgbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJbG9uZyBtID0gUkVBRF9PTkNFKGNvdW50ZXItJmd0O21heCkgLSBwYWdlX2NvdW50ZXJfcmVhZChjb3VudGVyKTsKJiM0MzsKJiM0MzsJCW1hcmdpbiA9IG1pbihtYXJnaW4sIG0pOwomIzQzOwl9IHdoaWxlICgoY291bnRlciA9IGNvdW50ZXItJmd0O3BhcmVudCkpOwomIzQzOwomIzQzOwlyZXR1cm4gbWFyZ2luOwomIzQzO30KJiM0MzsKIC8qKgogICogcGFnZV9jb3VudGVyX2NhbmNlbCAtIHRha2UgcGFnZXMgb3V0IG9mIHRoZSBsb2NhbCBjb3VudGVyCiAgKiBAY291bnRlcjogY291bnRlcgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggNTk5NjY1YTNkNmU3Yi4uNmEzNWY1ZWU4NDM3MiAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0xNjEyLDcgJiM0MzsxNjEyLDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7CiAJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLSZndDtpX3NiKTsKIAlwZ29mZl90IGluZGV4OwotCWludCBucl9wYWdlczsKJiM0MzsJaW50IG5yX3BhZ2VzLCByZXQ7CiAJYm9vbCBzcGxpdCA9IGZhbHNlOwogCiAJaWYgKChpbmZvLSZndDtmbGFncyAmYW1wOyBTSE1FTV9GX0xPQ0tFRCkgfHwgc2JpbmZvLSZndDtub3N3YXApCkBAIC0xNjkzLDcgJiM0MzsxNjkzLDggQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTsKIAl9CiAKLQlpZiAoIWZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7CiYjNDM7CXJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pOwomIzQzOwlpZiAoIXJldCkgewogCQlib29sIGZpcnN0X3N3YXBwZWQgPSBzaG1lbV9yZWNhbGNfaW5vZGUoaW5vZGUsIDAsIG5yX3BhZ2VzKTsKIAkJaW50IGVycm9yOwogCkBAIC0xNzQ2LDcgJiM0MzsxNzQ3LDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7CiAJCWdvdG8gcmVkaXJ0eTsKIAl9Ci0JaWYgKG5yX3BhZ2VzICZndDsgMSkKJiM0MzsJaWYgKG5yX3BhZ2VzICZndDsgMSAmYW1wOyZhbXA7IHJldCA9PSAtRTJCSUcpCiAJCWdvdG8gdHJ5X3NwbGl0OwogcmVkaXJ0eToKIAlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IGY1ZGZjN2U1OTE5MWUuLjJkMTI3ZjFiMzBiYWUgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtMTczNSw3ICYjNDM7MTczNSw5IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKICAqIHN3YXAgY2FjaGUuCiAgKgogICogQ29udGV4dDogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGZvbGlvIGxvY2suCi0gKiBSZXR1cm46IFdoZXRoZXIgdGhlIGZvbGlvIHdhcyBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZS4KJiM0MzsgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsICUtRTJCSUcgaWYgc3BsaXR0aW5nIHRoZSBmb2xpbyBtaWdodCBhbGxvdyBzd2Fwb3V0LAomIzQzOyAqICUtRU5PU1BDIGlmIG5vIGdsb2JhbCBzd2FwIHNwYWNlIGlzIGF2YWlsYWJsZSwgb3IgJS1FTk9NRU0gaWYgc3BsaXR0aW5nCiYjNDM7ICogd291bGQgbm90IGhlbHAuCiAgKi8KIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CkBAIC0xNzQ3LDExICYjNDM7MTc0OSwxMSBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAJaWYgKG9yZGVyKSB7CiAJCS8qCi0JCSAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQsCi0JCSAqIHRoZSBjYWxsZXIgc2hvdWxkIHNwbGl0IHRoZSBmb2xpbyBhbmQgdHJ5IGFnYWluLgomIzQzOwkJICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZC4gQ2hlY2sgYmVsb3cKJiM0MzsJCSAqIHdoZXRoZXIgc3BsaXR0aW5nIGFuZCByZXRyeWluZyBjYW4gbWFrZSBwcm9ncmVzcy4KIAkJICovCiAJCWlmICghSVNfRU5BQkxFRChDT05GSUdfVEhQX1NXQVApKQotCQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAKIAkJLyoKIAkJICogQWxsb2NhdGlvbiBzaXplIHNob3VsZCBuZXZlciBleGNlZWQgY2x1c3RlciBzaXplCkBAIC0xNzU5LDcgJiM0MzsxNzYxLDcgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKIAkJICovCiAJCWlmIChzaXplICZndDsgU1dBUEZJTEVfQ0xVU1RFUikgewogCQkJVk1fV0FSTl9PTl9PTkNFKDEpOwotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJZ290byBmYWlsZWQ7CiAJCX0KIAl9CiAKQEAgLTE3NzUsMTMgJiM0MzsxNzc3LDIzIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJfQogCiAJLyogTmVlZCB0byBjYWxsIHRoaXMgZXZlbiBpZiBhbGxvY2F0aW9uIGZhaWxlZCwgZm9yIE1FTUNHX1NXQVBfRkFJTC4gKi8KLQlpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSkKJiM0MzsJaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpIHsKIAkJc3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pOwomIzQzOwkJZ290byBmYWlsZWQ7CiYjNDM7CX0KIAogCWlmICh1bmxpa2VseSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlnb3RvIGZhaWxlZDsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO2ZhaWxlZDoKJiM0MzsJaWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiAtRU5PU1BDOwomIzQzOwlpZiAobWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oZm9saW8pICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9yZGVyID8gLUUyQklHIDogLUVOT01FTTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGJlNmJkMjZlOGM1NzguLjc1NDMzNjAzMzYxNjAgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xMjU5LDYgJiM0MzsxMjU5LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LAogCQkgKi8KIAkJaWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICZhbXA7JmFtcDsKIAkJCQkhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7CiYjNDM7CQkJaW50IHJldDsKJiM0MzsKIAkJCWlmICghKHNjLSZndDtnZnBfbWFzayAmYW1wOyBfX0dGUF9JTykpCiAJCQkJZ290byBrZWVwX2xvY2tlZDsKIAkJCWlmIChmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKSkKQEAgLTEyNzcsMTEgJiM0MzsxMjc5LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwKIAkJCQkgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpCiAJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJfQotCQkJaWYgKGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7CiYjNDM7CQkJcmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7CiYjNDM7CQkJaWYgKHJldCkgewogCQkJCWludCBfX21heWJlX3VudXNlZCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTsKIAogCQkJCWlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpCiAJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkX3NwbGl0OwomIzQzOwkJCQlpZiAocmV0ICE9IC1FMkJJRykKJiM0MzsJCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJCS8qIEZhbGxiYWNrIHRvIHN3YXAgbm9ybWFsIHBhZ2VzICovCiAJCQkJaWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKQogCQkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDY3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGludHJvZHVjaW5nIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBzd2FwLCBzaGFyZWQgbWVtb3J5IChzaG1lbSksIGFuZCB0aGUgdmlydHVhbCBtZW1vcnkgc2Nhbm5lciAodm1zY2FuKS4gV2UgbmVlZCB0byBhbmFseXplIHRoaXMgcGF0Y2ggZm9yIGZ1enppbmcgdGFyZ2V0cyBiZWNhdXNlIGl0IGNoYW5nZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4KCkkgc2VlIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGFyZWFzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtOiBgbW0vcGFnZV9jb3VudGVyLmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYG1tL3NobWVtLmNgLCBgbW0vc3dhcGZpbGUuY2AsIGFuZCBgbW0vdm1zY2FuLmNgLiBJbW1lZGlhdGVseSwgSSBub3RpY2UgdGhlIGludHJvZHVjdGlvbiBvZiBgcGFnZV9jb3VudGVyX21hcmdpbmAgYW5kIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGFzIHdlbGwgYXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIHJldHVybiB2YWx1ZSBvZiBgZm9saW9fYWxsb2Nfc3dhcGAuIFRoYXQgbGFzdCBvbmUgaXMgYSByZWQgZmxhZywgbWVhbmluZyBpdCBpcyBtb3JlIHRoYW4ganVzdCBhIGJlaGF2aW9yYWwgY2hhbmdlLgoKUHJldmlvdXNseSwgYGZvbGlvX2FsbG9jX3N3YXBgIHJldHVybmVkIGEgYm9vbGVhbiwgbm93IGl0JiMzOTtzIGdvaW5nIHRvIHJldHVybiBhbiBpbnRlZ2VyIHdpdGggbXVsdGlwbGUgZXJyb3IgY29kZXMuIFNwZWNpZmljYWxseTogMCBvbiBzdWNjZXNzLCBgLUUyQklHYCAoc3BsaXR0aW5nIG1pZ2h0IGFsbG93IHN3YXBvdXQpLCBgLUVOT1NQQ2AgKG5vIGdsb2JhbCBzd2FwIHNwYWNlKSwgYW5kIGAtRU5PTUVNYCAoc3BsaXR0aW5nIHdvbiYjMzk7dCBoZWxwKS4gVGhlIGNoYW5nZXMgaW4gYHNocmlua19mb2xpb19saXN0YCBhbmQgYHNobWVtX3dyaXRlb3V0YCBkZW1vbnN0cmF0ZSB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLgoKTG9va2luZyBhdCBgc2hyaW5rX2ZvbGlvX2xpc3RgLCB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSBlcnJvciBoYW5kbGluZyBmbG93LiBJZiBgZm9saW9fYWxsb2Nfc3dhcGAgZmFpbHMgd2l0aCBhbiBlcnJvciAqb3RoZXIqIHRoYW4gYC1FMkJJR2AsIGl0ICpza2lwcyogdGhlIGZvbGlvIHNwbGl0dGluZyBwcm9jZXNzIGFuZCBqdXN0IGFjdGl2YXRlcyB0aGUgZm9saW8sIHdoaWNoIGlzIGEgbWFqb3IgZGlmZmVyZW5jZSBpbiBiZWhhdmlvci4gVGhlIHNhbWUgaXMgdHJ1ZSBpbiBgc2htZW1fd3JpdGVvdXRgLCB3aGVyZSB0aGUgY29uZGl0aW9ucyBmb3IgdHJ5aW5nIHRvIHNwbGl0IGZvbGlvcyBoYXZlIGFsc28gY2hhbmdlZCB0byBjb25zaWRlciB0aGUgcmV0dXJuIGNvZGUgZnJvbSBgZm9saW9fYWxsb2Nfc3dhcGAuIFRoaXMgaXMgYSBiaWcgZGVhbCwgd2UgbmVlZCB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhlc2UgY2hhbmdlcyB0byBmaW5kIHRoZSBtb3N0IHZ1bG5lcmFibGUgcG9pbnRzLgoKU28sIHdoZXJlIHNob3VsZCBteSBmb2N1cyBiZT8gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHByaW9yaXRpemUgZnV6emluZyB0aGVzZSBmdW5jdGlvbnMgZGlyZWN0bHk6IGBmb2xpb19hbGxvY19zd2FwYCwgYHNobWVtX3dyaXRlb3V0YCwgYHNocmlua19mb2xpb19saXN0YCwgYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYC4gV2FpdCwgaXMgYHNocmlua19mb2xpb19saXN0YCBzdGF0aWM/IExldCBtZSBkb3VibGUtY2hlY2suIFllcywgaXQgbG9va3MgbGlrZSBgc2htZW1fd3JpdGVvdXRgIGlzIGFsc28gc3RhdGljLCBidXQgYGZvbGlvX2FsbG9jX3N3YXBgIGlzIGluIGBtbS9zd2FwZmlsZS5jYCwgd2hpY2ggbWFrZXMgaXQgYXZhaWxhYmxlIG91dHNpZGUgaXRzIGNvbXBpbGF0aW9uIHVuaXQuIFNvIGBmb2xpb19hbGxvY19zd2FwYCBpcyB0aGUgaGlnaCBwcmlvcml0eS4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgcHJvcGFnYXRlZCB0aHJvdWdob3V0IHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgc2htZW1fd3JpdGVvdXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz0xNTU2PWludCBzaG1lbV91bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbi0tXG5tbS9zaG1lbS5jLTE2MDYtICovXG5tbS9zaG1lbS5jOjE2MDc6aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc2htZW0uYy0xNjA4LVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxuLS1cbm1tL3N3YXAuaD00NjY9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBzd2FwX29wcyBzd2FwX2JkZXZfb3BzO1xubW0vc3dhcC5oLTQ2Ny1cbm1tL3N3YXAuaDo0Njg6aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc3dhcC5oLTQ2OS1cdFx0c3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyNQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgTm9uLVN0YXRpYyBGdW5jdGlvbiBVc2FnZSBhbmQgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYHNobWVtX3dyaXRlb3V0YCwgYGZvbGlvX2FsbG9jX3N3YXBgLCBgcGFnZV9jb3VudGVyX21hcmdpbmAsIGFuZCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLiBUaGV5JiMzOTtyZSBhbGwgZGVjbGFyZWQgbm9uLXN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBzY29wZSBhbmQgaG93IHRoZXkmIzM5O3JlIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuCgpOb3csIGxldCYjMzk7cyBjb3JyZWxhdGUgdGhlc2UgZnVuY3Rpb25zIHdpdGggdGhlIEtjb25maWcgb3B0aW9ucy4gSSBzZWUgdGhhdCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gIGFuZCBgcGFnZV9jb3VudGVyX21hcmdpbmAgcmVxdWlyZSBgQ09ORklHX01FTUNHYC4gTWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlc2UgYXJlIGNsZWFybHkgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3Vwcy4gU2ltaWxhcmx5LCBgZm9saW9fYWxsb2Nfc3dhcGAgY2xlYXJseSBkZXBlbmRzIG9uIGBDT05GSUdfU1dBUGAgZm9yLCB3ZWxsLCBzd2FwcGluZyBmdW5jdGlvbmFsaXR5LiBGaW5hbGx5LCBgc2htZW1fd3JpdGVvdXRgIG5lZWRzIGBDT05GSUdfU0hNRU1gLgoKSW50cmlndWluZ2x5LCBgQ09ORklHX1RIUF9TV0FQYCBhbHNvIHBvcHMgdXAgaW4gdGhlIGNvbnRleHQgb2YgYGZvbGlvX2FsbG9jX3N3YXBgLiBUaGF0JiMzOTtzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhcyBpdCBpbXBsaWVzIHRoaXMgZnVuY3Rpb24gbWF5IGhhdmUgc29tZSBzcGVjaWZpYyBiZWhhdmlvciBvciBvcHRpbWl6YXRpb24gaW4gcmVsYXRpb24gdG8gVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBhbmQgc3dhcCBvcGVyYXRpb25zLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciBpbnRlcmFjdGlvbi4gVGhpcyBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZWlyIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9uIHN5c3RlbSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15jb25maWcgVEhQX1NXQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz05Njg9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTk2OS1cbm1tL0tjb25maWc6OTcwOmNvbmZpZyBUSFBfU1dBUFxubW0vS2NvbmZpZy05NzEtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc2MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipUSFBfU1dBUDogQSBEZXBlbmRlbmN5IERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBgVEhQX1NXQVBgIGlzIGRlZmluZWQgYXMgYSBib29sZWFuIChgZGVmX2Jvb2wgeWApLiBUaGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlIHJlYWwgbWVhdCBsaWVzIGluIHRoZSAqZGVwZW5kZW5jaWVzKi4gSXQmIzM5O3MgY3JpdGljYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGlzIHNldCB1cCB0aGlzIHdheS4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUgZGVzaWduLgoKRmlyc3QsIHRoZSBkZXBlbmRlbmN5IG9uIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgbWFrZXMgcGVyZmVjdCBzZW5zZS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgc3dhcHBpbmcgKnRyYW5zcGFyZW50KiBodWdlIHBhZ2VzIGhlcmUsIHNvIGNsZWFybHkgVEhQIHN1cHBvcnQgaGFzIHRvIGJlIGVuYWJsZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBZb3UgY2FuJiMzOTt0IHN3YXAgc29tZXRoaW5nIHRoYXQgZG9lc24mIzM5O3QgZXhpc3QsIHJpZ2h0PwoKQW5kIHRoZW4sIG9mIGNvdXJzZSwgdGhlIGRlcGVuZGVuY3kgb24gYFNXQVBgLiBUaGF0JiMzOTtzIHRoZSAqb2J2aW91cyogb25lLiBXaHkgZXZlbiBib3RoZXIgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlmIHlvdSBhcmUgbm90IHVzaW5nIHN3YXAgc3BhY2UgaW4gdGhlIGZpcnN0IHBsYWNlPyBJdCYjMzk7cyB0aGUgcHJlLXJlcXVpc2l0ZSwgdGhlIGZvdW5kYXRpb25hbCBhc3BlY3QgdGhpcyBvcHRpb24gYnVpbGRzIG9uLiBJdCYjMzk7cyBsaWtlIGFza2luZyAmIzM0O0NhbiBJIGNvbmZpZ3VyZSB0aGUgZG9vciBpZiBJIGRvbiYjMzk7dCBoYXZlIGEgaG91c2U/JiMzNDsuCgpUaGVzZSBkZXBlbmRlbmNpZXMgYXJlIHRoZSBjb25zdHJhaW50cywgdGhleSBhcmUgdGhlIGFyY2hpdGVjdHVyYWwgY2hvaWNlcyB0aGF0IGRldGVybWluZSBob3cgdGhlIHN5c3RlbSBiZWhhdmVzLiBXZSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZXNlIGNvbnN0cmFpbnRzIHdoZW4gdHVuaW5nIHRoZSBrZXJuZWwuIFdlIG11c3QgZW5zdXJlIHRoZXNlIGFyZSBjb3JyZWN0IGJlZm9yZSBlbmFibGluZyBvciBkaXNhYmxpbmcgb3B0aW9ucy4gR29vZC4gTWFrZXMgc2Vuc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcmMvS2NvbmZpZz0zMDM9Y2hvaWNlXG5hcmNoL2FyYy9LY29uZmlnLTMwNC1cdHByb21wdCBcJiMzNDtNTVUgU3VwZXIgUGFnZSBTaXplXCYjMzQ7XG5hcmNoL2FyYy9LY29uZmlnOjMwNTpcdGRlcGVuZHMgb24gSVNBX0FSQ1YyIFx1MDAyNlx1MDAyNiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9hcmMvS2NvbmZpZy0zMDYtXHRkZWZhdWx0IEFSQ19IVUdFUEFHRV8yTVxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yNDEyPWNvbmZpZyBBUk02NF9DT05UUFRFXG5hcmNoL2FybTY0L0tjb25maWctMjQxMy1cdGJvb2wgXCYjMzQ7Q29udGlndW91cyBQVEUgbWFwcGluZ3MgZm9yIHVzZXIgbWVtb3J5XCYjMzQ7IGlmIEVYUEVSVFxuYXJjaC9hcm02NC9LY29uZmlnOjI0MTQ6XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL2FybTY0L0tjb25maWctMjQxNS1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvZGF4L0tjb25maWc9OD1jb25maWcgREVWX0RBWFxuZHJpdmVycy9kYXgvS2NvbmZpZy05LVx0dHJpc3RhdGUgXCYjMzQ7RGV2aWNlIERBWDogZGlyZWN0IGFjY2VzcyBtYXBwaW5nIGRldmljZVwmIzM0O1xuZHJpdmVycy9kYXgvS2NvbmZpZzoxMDpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmRyaXZlcnMvZGF4L0tjb25maWctMTEtXHRoZWxwXG4tLVxuZHJpdmVycy9odi9LY29uZmlnPTg5PWNvbmZpZyBNU0hWX1ZUTFxuLS1cbmRyaXZlcnMvaHYvS2NvbmZpZy05NS1cdCMgc3BlY2lhbGx5IHdpdGggbGFyZ2UgbWVtb3J5IHJlcXVpcmVtZW50cy5cbmRyaXZlcnMvaHYvS2NvbmZpZzo5NjpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmRyaXZlcnMvaHYvS2NvbmZpZy05Ny1cdCMgTVRSUnMgYXJlIGNvbnRyb2xsZWQgYnkgVlRMMCwgYW5kIGFyZSBub3Qgc3BlY2lmaWMgdG8gaW5kaXZpZHVhbCBWVExzLlxuLS1cbmZzL0tjb25maWc9OTA9Y29uZmlnIEZTX0RBWF9QTURcbi0tXG5mcy9LY29uZmlnLTk0LVx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuZnMvS2NvbmZpZzo5NTpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmZzL0tjb25maWctOTYtXG4tLVxubGliL0tjb25maWcuZGVidWc9MzMyNz1jb25maWcgVEVTVF9ITU1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjgtXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbmxpYi9LY29uZmlnLmRlYnVnOjMzMjk6XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzMwLVx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxuLS1cbm1tL0tjb25maWc9ODE1PWNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xubW0vS2NvbmZpZy04MTYtXHRib29sIFwmIzM0O0FsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXCYjMzQ7XG5tbS9LY29uZmlnOjgxNzpcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODE4LVx0aGVscFxuLS1cbm1tL0tjb25maWc9ODM0PW1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODM1LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG5tbS9LY29uZmlnOjgzNjpcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxubW0vS2NvbmZpZy04MzctXHRzZWxlY3QgQ09NUEFDVElPTlxuLS1cbm1tL0tjb25maWc9MTAxNj1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUFxubW0vS2NvbmZpZy0xMDE3LVx0ZGVmX2Jvb2wgblxubW0vS2NvbmZpZzoxMDE4Olx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy0xMDE5LVxubW0vS2NvbmZpZz0xMDIwPWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BNRF9QRk5NQVBcbm1tL0tjb25maWctMTAyMS1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6MTAyMjpcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUCBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTEwMjMtXG5tbS9LY29uZmlnPTEwMjQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUFxubW0vS2NvbmZpZy0xMDI1LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzoxMDI2Olx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIFx1MDAyNlx1MDAyNiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5tbS9LY29uZmlnLTEwMjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAzNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqVEhQX1NXQVAgRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYFRIUF9TV0FQYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gdHdvIGtleSB1bmRlcmx5aW5nIGZlYXR1cmVzLiBGaXJzdCwgYW5kIG9idmlvdXNseSwgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmVpbmcgZW5hYmxlZC4gTm8gaHVnZXBhZ2VzLCBubyBzd2FwcGluZyB0aG9zZSBodWdlcGFnZXMsIHJpZ2h0PyBUaGF0JiMzOTtzIHRoZSBjb3JlIHByZW1pc2UuIEJ1dCBpdCYjMzk7cyBub3QganVzdCB0aGF0OyBpdCBhbHNvIHJlbGllcyBkaXJlY3RseSBvbiB0aGUgc3RhbmRhcmQgYFNXQVBgIG1lY2hhbmlzbSBiZWluZyBpbiBwbGFjZS4gV2l0aG91dCB0aGUgYWJpbGl0eSB0byBzd2FwIG1lbW9yeSBvdXQgdG8gZGlzayBpbiB0aGUgZmlyc3QgcGxhY2UsIHRoZXJlJiMzOTtzIG5vdGhpbmcgZm9yIGBUSFBfU1dBUGAgdG8gd29yayB3aXRoLCB0byBleHRlbmQgdGhlIHVzdWFsIHN3YXAgbWVjaGFuaXNtIGZvciB0cmFuc3BhcmVudCBodWdlcGFnZXMuIEl04oCZcyBidWlsdCBvbiB0aGF0IGZvdW5kYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUSFBfU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz05Njg9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTk2OS1cbm1tL0tjb25maWc6OTcwOmNvbmZpZyBUSFBfU1dBUFxubW0vS2NvbmZpZy05NzEtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMjYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgVEhQX1NXQVAgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYFRIUF9TV0FQYC4gSXQgc2VlbXMgbGlrZSBJIG5lZWQgdG8gZGlzc2VjdCB0aGUgY29tcG9uZW50cyBjb25uZWN0ZWQgdG8gYFRIUF9TV0FQYCwgc28gSSBjYW4gc2VlIHdoYXQgaW5mbHVlbmNlcyBpdHMgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzLCBkYXRhIHN0cnVjdHVyZXMsIG9yIGhhcmR3YXJlIGNvbnNpZGVyYXRpb25zIGZhY3RvciBpbnRvIGl0cyBiZWhhdmlvci4gQXJlIHRoZXJlIGFueSBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhhdCByZWx5IG9uIHRoZSBleGlzdGVuY2Ugb2YgYFRIUF9TV0FQYCBvciwgY29udmVyc2VseSwgdGhhdCBgVEhQX1NXQVBgIHJlbGllcyBvbiBmb3IgY29ycmVjdCBvcGVyYXRpb24/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgcmVsYXRlZCBzb3VyY2UgY29kZSB0byBnYWluIGluc2lnaHQgaW50byB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBmZWF0dXJlcy4gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLCBhbnkgaW1wbGljYXRpb25zIGZvciBzd2FwIHNwYWNlIG1hbmFnZW1lbnQsIGFuZCBwZXJmb3JtYW5jZSBpbXBhY3RzLiBNeSBnb2FsIGlzIHRvIHBhaW50IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgbGFuZHNjYXBlIHN1cnJvdW5kaW5nIGBUSFBfU1dBUGAsIGJlY2F1c2UsIHVsdGltYXRlbHksIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyB2aXRhbCBmb3IgbWFraW5nIGluZm9ybWVkIGRlY2lzaW9ucyBhYm91dCBob3cgaXQmIzM5O3MgdXNlZCBvciBwb3RlbnRpYWxseSBtb2RpZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NjU6XHRcdCAgYXBwbGljYXRpb25zIHN1cHBseSB0aGUgbWFkdmlzZShNQURWX0hVR0VQQUdFKSBoaW50LlxuIDk2NjpcdFx0ICBUaGlzIGVuc3VyZXMgdGhhdCBodWdlcGFnZXMgYXJlIHVzZWQgb25seSBpbiByZXNwb25zZSB0byBleHBsaWNpdFxuIDk2NzpcdFx0ICByZXF1ZXN0cyBmcm9tIGFwcGxpY2F0aW9ucy5cbiA5Njg6XHRlbmRjaG9pY2VcbiA5Njk6XHRcbiA5NzA6XHRjb25maWcgVEhQX1NXQVBcbiA5NzE6XHRcdGRlZl9ib29sIHlcbiA5NzI6XHRcdGRlcGVuZHMgb24gQVJDSF9XQU5UU19USFBfU1dBUCBcdTAwMjZcdTAwMjYgU1dBUCBcdTAwMjZcdTAwMjYgNjRCSVRcbiA5NzM6XHRcdGhlbHBcbiA5NzQ6XHRcdCAgU3dhcCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGluIG9uZSBwaWVjZSwgd2l0aG91dCBzcGxpdHRpbmcuXG4gOTc1Olx0XHQgIFhYWDogRm9yIG5vdywgc3dhcCBjbHVzdGVyIGJhY2tpbmcgdHJhbnNwYXJlbnQgaHVnZSBwYWdlXG4gOTc2Olx0XHQgIHdpbGwgYmUgc3BsaXQgYWZ0ZXIgc3dhcG91dC5cbiA5Nzc6XHRcbiA5Nzg6XHRcdCAgRm9yIHNlbGVjdGlvbiBieSBhcmNoaXRlY3R1cmVzIHdpdGggcmVhc29uYWJsZSBUSFAgc2l6ZXMuXG4gOTc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGRlcGVuZGVuY2llcywgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdobyB3b3JrcyB3aXRoIHRoaXMgY29kZToKCioqVGhpbmtpbmcgVGhyb3VnaCBUSFBfU1dBUCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYFRIUF9TV0FQYCBoaW5nZXMgb24gYEFSQ0hfV0FOVFNfVEhQX1NXQVBgLCBgU1dBUGAsIGFuZCB0aGUgc3lzdGVtIGJlaW5nIDY0LWJpdC4gTWFrZXMgc2Vuc2UuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHN3YXBwaW5nIG91dCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzLCBzbyBzd2FwIGFuZCBhIDY0LWJpdCBhcmNoaXRlY3R1cmUgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGVzLiBJIHNob3VsZCBkZWZpbml0ZWx5IGVuc3VyZSB0aGF0IGBTV0FQYCwgYE1FTUNHYCwgYFNITUVNYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIGFsbCBlbmFibGVkIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBUaGF0IGZlZWxzIGxpa2UgYSBzb2xpZCBmb3VuZGF0aW9uLgoKTm93LCB3YWl0IGEgc2Vjb25kLi4uIHRoZXJlJiMzOTtzIHRoZSBgcGFnZV9jb3VudGVyX21hcmdpbmAgdmFyaWFibGUuIEkgcmVtZW1iZXIgdGhhdCYjMzk7cyBkZWZpbmVkIGluIGBtbS9wYWdlX2NvdW50ZXIuY2AuIE15IG1pbmQgaXMgZHJpZnRpbmcgYmFjayBpbnRvIHRoZSB3ZWVkcyBhIGJpdC4gSXMgdGhhdCBmaWxlLCBgbW0vcGFnZV9jb3VudGVyLmNgLCBhY3R1YWxseSBiZWluZyBjb21waWxlZCB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzICpvbio/IFRoYXQmIzM5O3MgYSBjcnVjaWFsIGNyb3NzLWRlcGVuZGVuY3kgdG8gY2hlY2s7IGEgc3VidGxlIHBvaW50IHRoYXQgY291bGQgYmUgYSBwb3RlbnRpYWwgZ290Y2hhIGFuZCB3aWxsIGluZmx1ZW5jZSB0aGUgY29uZmlndXJhdGlvbiBJIGxhbmQgb24uIEkgbmVlZCB0byBjb25maXJtIHRoYXQuIFRoYXQmIzM5O3MgYSBwb2ludCBvZiBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX2NvdW50ZXIubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEwMT1vYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGU6MTAyOm9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xubW0vTWFrZWZpbGUtMTAzLW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMzMQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgb2YgQ09ORklHX1BBR0VfQ09VTlRFUiBvbiBNRU1DRyoqCgpPa2F5LCBzbyBgQ09ORklHX1BBR0VfQ09VTlRFUmAgaXMgYmVpbmcgc2VsZWN0ZWQgYnkgYE1FTUNHYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2VsbCwgdGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLCBidXQgbGV0JiMzOTtzIGJyZWFrIGRvd24gKndoeSouJiMzNDsgVGhpcyBpbXBsaWVzIGEgY3JpdGljYWwgZGVwZW5kZW5jeSwgbGlrZWx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgYWNjb3VudGluZyBhbmQgY29udHJvbC4gU3BlY2lmaWNhbGx5LCB0aGUga2VybmVsIG5lZWRzIHRvIHRyYWNrIHBhZ2UgdXNhZ2UgaW4gYSBncmFudWxhciB3YXksIGFuZCBgTUVNQ0dgIChNZW1vcnkgQ29udHJvbCBHcm91cHMpIGFyZSB0aGUgbWVjaGFuaXNtIGJ5IHdoaWNoIHdlJiMzOTtyZSAqY29udHJvbGxpbmcqIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB1c2FnZSBhbW9uZ3N0IGdyb3VwcyBvZiBwcm9jZXNzZXMuCgpUaGVyZWZvcmUsIGBDT05GSUdfUEFHRV9DT1VOVEVSYCYjMzk7cyBhY3RpdmF0aW9uIHByb2JhYmx5IHByb3ZpZGVzIHRoZSBjb3JlIGluZnJhc3RydWN0dXJlIGZvciBgTUVNQ0dgIHRvIGRvIGl0cyBqb2IgZWZmZWN0aXZlbHkuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQgYFBBR0VfQ09VTlRFUmAgaXMgZW5hYmxpbmcgcGVyLWNncm91cCBwYWdlIGFjY291bnRpbmcsIGFsbG93aW5nIGBNRU1DR2AgdG8gYWNjdXJhdGVseSBlbmZvcmNlIGl0cyBtZW1vcnkgbGltaXRzLCB0cmFjayBtZW1vcnkgdXNhZ2UsIGFuZCB0cmlnZ2VyIG92ZXJjb21taXQgaGFuZGxpbmcgb3IgcmVzb3VyY2UgcmVjbGFtYXRpb24gd2hlbiBhIGNncm91cCBleGNlZWRzIGl0cyBhc3NpZ25lZCBxdW90YS4gV2l0aG91dCB0aGlzIGZlYXR1cmUsIHRoZSBhYmlsaXR5IHRvIGlzb2xhdGUgYW5kIG1hbmFnZSBtZW1vcnkgd291bGQgYmUgc2lnbmlmaWNhbnRseSBoYW1wZXJlZC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIHRoaXMgY291bnRlciBpcyB1c2VkIGluIHRoZSBgTUVNQ0dgIGNvZGViYXNlOyBJJiMzOTtkIHN1c3BlY3QgdGhhdCBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGNvcmUgYWNjb3VudGluZyBzdHJ1Y3R1cmVzIGFuZCB0aGUgbWVtb3J5IHJlY2xhaW0gbWVjaGFuaXNtLiBUaGUgZmFjdCB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGlzIGhhcmQtbGlua2VkIGlzIGEgY2x1ZTsgaXQmIzM5O3MgY2VudHJhbCB0byB0aGUgb3BlcmF0aW9uIG9mIGBNRU1DR2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX0NPVU5URVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjI9aWYgQ0dST1VQU1xuaW5pdC9LY29uZmlnLTEwNjMtXG5pbml0L0tjb25maWc6MTA2NDpjb25maWcgUEFHRV9DT1VOVEVSXG5pbml0L0tjb25maWctMTA2NS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcyNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1lbWNvbnRyb2wuY2AqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgbWVtb3J5IGNvbnRyb2wgbWVjaGFuaXNtIGlzIGJlaGF2aW5nLCBzbyB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byBgbWVtY29udHJvbC5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgYW5kIHBvdGVudGlhbGx5LCB0aGUgbWFuYWdlbWVudCBvZiBtZW1vcnkgcmVzb3VyY2VzIHdpdGhpbiB0aGlzIGNvbXBvbmVudC4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciB0aGUgYmVoYXZpb3IgSSYjMzk7bSBvYnNlcnZpbmcuIEl04oCZcyBsaWtlbHkgdGhlIGltcGxlbWVudGF0aW9uIG9mIGFueSBzcGVjaWZpYyBtZW1vcnkgbGltaXRpbmcgb3IgYWNjb3VudGluZyB3b3VsZCBiZSBjZW50cmFsaXplZCB0aGVyZSBhcyB3ZWxsLiBMZXTigJlzIHNlZSB3aGF0IHN1cnByaXNlcyBpdCBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY29udHJvbC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSAmIzQzOz0gbWVtY29udHJvbC12MS5vXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IGJwZl9tZW1jb250cm9sLm9cbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEwMgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBNZW1vcnkgQ29udHJvbCBHcm91cCBDb25maWd1cmF0aW9uIGFuZCBTd2FwIEZpbGUgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIHByZXR0eSBjbGVhcjogYENPTkZJR19NRU1DR2AgaXMgZGVmaW5pdGVseSByZXF1aXJlZCBoZXJlLiBObyBpZnMsIGFuZHMsIG9yIGJ1dHMgYWJvdXQgaXQuIFRoaXMgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIGhhdmluZyBNZW1vcnkgQ29udHJvbCBHcm91cHMgZW5hYmxlZC4KCkFuZCB0aGVuIHRoZXJlJiMzOTtzIGBmb2xpb19hbGxvY19zd2FwYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHdoZXJlIHRoYXQgaXMgZGVmaW5lZC4gQWgsIHJpZ2h0LCBpdCYjMzk7cyBidXJpZWQgaW4gYG1tL3N3YXBmaWxlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgc3dhcCBmaWxlIGFsbG9jYXRpb24gbG9naWMgcmVzaWRlcy4gVGhhdCBtZWFucyBhbnkgaW52ZXN0aWdhdGlvbiBvciBtb2RpZmljYXRpb24gcmVsYXRlZCB0byB0aGF0IGZ1bmN0aW9uLCBvciBpdHMgcmVsYXRlZCBzdHJ1Y3R1cmVzLCB3aWxsIHRha2UgcGxhY2UgaW4gdGhhdCBmaWxlLiBUaGF0IGhlbHBzIG5hcnJvdyB0aGluZ3MgZG93biBjb25zaWRlcmFibHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBmaWxlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03Nj1lbmRpZlxubW0vTWFrZWZpbGUtNzctXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlLTc5LW9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzkwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBNZW1vcnkgV3JpdGVvdXQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGl0IGxvb2tzIGxpa2UgYENPTkZJR19TV0FQYCBpcyBkZWZpbml0ZWx5IGEgcmVxdWlyZW1lbnQgaGVyZS4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgZW5hYmxlZDsgaXQgd2lsbCBhZmZlY3QgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzd2FwcGluZy4KCk5vdywgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGUgZnVuY3Rpb24gYHNobWVtX3dyaXRlb3V0YC4gSSByZWNhbGwgSSYjMzk7dmUgdXNlZCB0aGlzIHJvdXRpbmUgYmVmb3JlLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUuIEFoIHllcyEgVGhlIGBzaG1lbV93cml0ZW91dGAgZnVuY3Rpb27igKYgSSByZW1lbWJlci4gSXQgcmVzaWRlcyBpbiBgbW0vc2htZW0uY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQmIzM5O3MgaW4gdGhlIHNoYXJlZCBtZW1vcnkgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2htZW0ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxuLS1cbm1tL01ha2VmaWxlLTUzLVx0XHRcdCAgIHJlYWRhaGVhZC5vIGZvbGlvLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXG5tbS9NYWtlZmlsZTo1NDpcdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG5tbS9NYWtlZmlsZS01NS1cdFx0XHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc0MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIHN5c3RlbSBpbnRlcm5hbHMgYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipBbmFseXppbmcgdGhlIENvbXBpbGF0aW9uIERlcGVuZGVuY2llcyBvZiBgc2htZW0ub2AgYW5kIGBzaG1lbV93cml0ZW91dGAqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIHNoYXJlZCBtZW1vcnkgKHNobWVtKSBzdWJzeXN0ZW0uIEl0JiMzOTtzIGNsZWFyIHRoYXQgYHNobWVtLm9gLCB0aGUgY29yZSBzaG1lbSBvYmplY3QgZmlsZSwgKmFsd2F5cyogZ2V0cyBjb21waWxlZC4gVGhhdCYjMzk7cyB0aGUgZm91bmRhdGlvbiwgdGhlIGJhc2UgZnVuY3Rpb25hbGl0eS4gTm8gc3VycHJpc2VzIHRoZXJlLgoKSG93ZXZlciwgd2hlbiBJIGNvbnNpZGVyIGBzaG1lbV93cml0ZW91dGAsIHRoaW5ncyBnZXQgYSBsaXR0bGUgbW9yZSBudWFuY2VkLiBJdCBzZWVtcyB0aGUgY29tcGlsYXRpb24gb2YgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBvciBvYmplY3QgZmlsZSBpcyBjb25kaXRpb25hbC4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IGl0cyBpbmNsdXNpb24gaW4gdGhlIGJ1aWxkIGlzIGRlcGVuZGVudCBvbiBjZXJ0YWluIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmVpbmcgZW5hYmxlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtkIGJldCBpdCYjMzk7cyBnYXRlZCBieSBlaXRoZXIgYENPTkZJR19TV0FQYCBvciBgQ09ORklHX1NITUVNYCwgb3IgcGVyaGFwcyBldmVuIGJvdGguIEl0IG1ha2VzIHNlbnNlLCByaWdodD8gYHNobWVtX3dyaXRlb3V0YCBwcm9iYWJseSBoYW5kbGVzIHRoZSBzcGlsbGluZyBvciB3cml0aW5nIG91dCBvZiBzaG1lbSBwYWdlcywgd2hpY2ggd291bGQgb25seSBiZSByZWxldmFudCBpZiBlaXRoZXIgc3dhcCBzcGFjZSBpcyB1c2VkIChgQ09ORklHX1NXQVBgKSAqb3IqIHRoZSBzaG1lbSBmdW5jdGlvbmFsaXR5IGl0c2VsZiBpcyBlbmFibGVkIGFuZCBjb25maWd1cmVkICggYENPTkZJR19TSE1FTWApLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtLCBidXQgdGhhdCYjMzk7cyBteSB3b3JraW5nIHRoZW9yeSBiYXNlZCBvbiBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV93cml0ZW91dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NobWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz00Nz1zdGF0aWMgc3RydWN0IHZmc21vdW50ICpzaG1fbW50IF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5tbS9zaG1lbS5jLTEwMS0vKlxubW0vc2htZW0uYzoxMDI6ICogc2htZW1fZmFsbG9jYXRlIGNvbW11bmljYXRlcyB3aXRoIHNobWVtX2ZhdWx0IG9yIHNobWVtX3dyaXRlb3V0IHZpYVxubW0vc2htZW0uYy0xMDMtICogaW5vZGUtXHUwMDNlaV9wcml2YXRlICh3aXRoIGlfcndzZW0gbWFraW5nIHN1cmUgdGhhdCBpdCBoYXMgb25seSBvbmUgdXNlciBhdFxuLS1cbm1tL3NobWVtLmM9NDE0PXN0YXRpYyB2b2lkIHNobWVtX2ZyZWVfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2l6ZV90IGZyZWVkX2lzcGFjZSlcbi0tXG5tbS9zaG1lbS5jLTQzNS0gKlxubW0vc2htZW0uYzo0MzY6ICogUmV0dXJuOiB0cnVlIGlmIHN3YXBwZWQgd2FzIGluY3JlbWVudGVkIGZyb20gMCwgZm9yIHNobWVtX3dyaXRlb3V0KCkuXG5tbS9zaG1lbS5jLTQzNy0gKi9cbm1tL3NobWVtLmM9NDM4PWJvb2wgc2htZW1fcmVjYWxjX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgYWxsb2NlZCwgbG9uZyBzd2FwcGVkKVxuLS1cbm1tL3NobWVtLmMtNDUxLVx0ICogYWZ0ZXIgaV9tYXBwaW5nLVx1MDAzZW5ycGFnZXMgaGFzIGFscmVhZHkgYmVlbiBhZGp1c3RlZCAodXAgb3IgZG93biksXG5tbS9zaG1lbS5jOjQ1MjpcdCAqIHNobWVtX3dyaXRlb3V0KCkgaGFzIHRvIHJhaXNlIHN3YXBwZWQgYmVmb3JlIG5ycGFnZXMgaXMgbG93ZXJlZCAtXG5tbS9zaG1lbS5jLTQ1My1cdCAqIHRvIHN0b3AgYSByYWNpbmcgc2htZW1fcmVjYWxjX2lub2RlKCkgZnJvbSB0aGlua2luZyB0aGF0IGEgcGFnZSBoYXNcbi0tXG5tbS9zaG1lbS5jPTE1NTY9aW50IHNobWVtX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuLS1cbm1tL3NobWVtLmMtMTU5OS0vKipcbm1tL3NobWVtLmM6MTYwMDogKiBzaG1lbV93cml0ZW91dCAtIFdyaXRlIHRoZSBmb2xpbyB0byBzd2FwXG5tbS9zaG1lbS5jLTE2MDEtICogQGN0eDogc3dhcCBJL08gY29udGV4dFxuLS1cbm1tL3NobWVtLmMtMTYwNi0gKi9cbm1tL3NobWVtLmM6MTYwNzppbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9zaG1lbS5jLTE2MDgtXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXG4tLVxubW0vc2htZW0uYy0xNzQzLVx0XHQgKiBidXQgSSYjMzk7bSBhIGxpdHRsZSBuZXJ2b3VzIGFib3V0IGxldHRpbmcgdGhpcyBmb2xpbyBvdXQgb2Zcbm1tL3NobWVtLmM6MTc0NDpcdFx0ICogc2htZW1fd3JpdGVvdXQoKSBpbiBhIGh5YnJpZCBoYWxmLXRtcGZzLWhhbGYtc3dhcCBzdGF0ZVxubW0vc2htZW0uYy0xNzQ1LVx0XHQgKiBlLmcuIGZvbGlvX21hcHBpbmcoZm9saW8pIG1pZ2h0IGdpdmUgYW4gdW5leHBlY3RlZCBhbnN3ZXIuXG4tLVxubW0vc2htZW0uYz0xNzU3PWludCBzaG1lbV93cml0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3NobWVtLmMtMTc2MS1cbm1tL3NobWVtLmM6MTc2MjpcdGVyciA9IHNobWVtX3dyaXRlb3V0KFx1MDAyNmN0eCwgZm9saW8sIE5VTEwpO1xubW0vc2htZW0uYy0xNzYzLVx0c3dhcF93cml0ZV9zdWJtaXQoXHUwMDI2Y3R4KTtcbi0tXG5tbS9zaG1lbS5jPTM2MjQ9c3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbi0tXG5tbS9zaG1lbS5jLTM3NjAtXHRcdC8qXG5tbS9zaG1lbS5jOjM3NjE6XHRcdCAqIEluZm9ybSBzaG1lbV93cml0ZW91dCgpIGhvdyBmYXIgd2UgaGF2ZSByZWFjaGVkLlxubW0vc2htZW0uYy0zNzYyLVx0XHQgKiBObyBuZWVkIGZvciBsb2NrIG9yIGJhcnJpZXI6IHdlIGhhdmUgdGhlIHBhZ2UgbG9jay5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4ODgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgU3dhcCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgcmlnaHQgdG8gaXQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGUgYHNobWVtX3dyaXRlb3V0YCBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX1NXQVBgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgYSBjcml0aWNhbCBvbmUgZm9yIG15IHdvcmssIHNvIEkmIzM5O2xsIGdvIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvZGUgYW5kIGZpbmQgdGhhdCBtYWNyby4gSSBuZWVkIHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBiYXNlZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgc3lzdGVtIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHN3YXAgc3BhY2UuIFRoaXMgY2hlY2sgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIHNoYXJlZCBtZW1vcnkgc3lzdGVtIGluIGRpZmZlcmVudCBrZXJuZWwgYnVpbGRzIGFuZCBrbm93aW5nIGhvdyBpdCBoYW5kbGVzIG1lbW9yeSBwcmVzc3VyZS4gVGltZSB0byBkaXZlIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmZGVmIENPTkZJR19TV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDg0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgVGVtcG9yYXJ5IEZpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRlbXBvcmFyeSBmaWxlIHN5c3RlbXMgYXJlIGNvbmZpZ3VyZWQgaW4gdGhpcyBwYXJ0aWN1bGFyIGVudmlyb25tZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIGVpdGhlciBgQ09ORklHX1RNUEZTYCBvciBgQ09ORklHX1NITUVNYCBhcmUgZW5hYmxlZC4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cywgYW5kIGlmIGVpdGhlciBpcyBlbmFibGVkLCBpdCYjMzk7bGwgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBpbi1tZW1vcnkgZmlsZSBzdG9yYWdlLiBUaGF0IHNob3VsZCBwcm92aWRlIGEgY3J1Y2lhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiBmb3IgYWRkcmVzc2luZyB3aGF0ZXZlciBsYXJnZXIgaXNzdWUgaXMgYXQgaGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NITUVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTQ3PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xubW0vc2htZW0uYy00OC1cbm1tL3NobWVtLmM6NDk6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy01MC0vKlxuLS1cbm1tL3NobWVtLmM9NTcyMz1fX3NldHVwKFwmIzM0O3RocF9zaG1lbT1cJiMzNDssIHNldHVwX3RocF9zaG1lbSk7XG4tLVxubW0vc2htZW0uYy01NzI2LVxubW0vc2htZW0uYzo1NzI3OiNlbHNlIC8qICFDT05GSUdfU0hNRU0gKi9cbm1tL3NobWVtLmMtNTcyOC1cbi0tXG5tbS9zaG1lbS5jPTU3OTY9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5tbS9zaG1lbS5jLTU4MDMtXG5tbS9zaG1lbS5jOjU4MDQ6I2VuZGlmIC8qIENPTkZJR19TSE1FTSAqL1xubW0vc2htZW0uYy01ODA1LVxuLS1cbm1tL3NobWVtLmM9NTk1OD1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3NobWVtLmMtNTk2MC17XG5tbS9zaG1lbS5jOjU5NjE6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy01OTYyLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MDAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNITUVNIENvZGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gVGhlIGBzaG1lbV93cml0ZW91dGAgZnVuY3Rpb27igKYgbGluZSAxNjA3LCBnb3QgaXQuIEhtbSwgdGhhdCYjMzk7cyBpbnNpZGUgYW4gYCNpZmRlZiBDT05GSUdfU0hNRU1gIGJsb2NrLiBPa2F5LCBzbyBpdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBOb3csICpDT05GSUdfU0hNRU0qIGlzIHVzdWFsbHkgZW5hYmxlZCwgcmlnaHQ/IFByZXR0eSBzdGFuZGFyZCBmZWF0dXJlLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgdGhvdWdoLCBsZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kuIFdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhhdD8gUmlnaHQsIGBpbml0L0tjb25maWdgIHNob3VsZCBoYXZlIHRoZSBzY29vcC4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgdGhlcmUgYW5kIGNvbmZpcm0gdGhhdCBgQ09ORklHX1NITUVNYCYjMzk7cyBzZXR0aW5nIGlzIGFzIEkgZXhwZWN0LiBHb3R0YSBiZSB0aG9yb3VnaCwgZ290dGEgYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNITUVNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xODkxPWNvbmZpZyBFVkVOVEZEXG4tLVxuaW5pdC9LY29uZmlnLTE4OTktXG5pbml0L0tjb25maWc6MTkwMDpjb25maWcgU0hNRU1cbmluaXQvS2NvbmZpZy0xOTAxLVx0Ym9vbCBcJiMzNDtVc2UgZnVsbCBzaG1lbSBmaWxlc3lzdGVtXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkxOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFF1YW5kYXJ5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGFuZCBpdCBzZWVtcyBgU0hNRU1gIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hpY2ggbWFrZXMgc2Vuc2UuIE5vdywgSSBuZWVkIHRvIGVuc3VyZSB0aGUgYXBwcm9wcmlhdGUgc2V0dGluZ3MgZm9yIG15IHN5c3RlbS4gSSBrbm93IEkgd2FudCB0byBlbmFibGUgYFNXQVBgLCBgTUVNQ0dgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQuLi4gaG1tLCBgVEhQX1NXQVBgLiBXYWl0LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgYWJvdXQgdGhpcyBgVEhQX1NXQVBgIG9wdGlvbi4gSSByZWNhbGwgaXQmIzM5O3MgYGRlZl9ib29sIHlgIGlmIGBBUkNIX1dBTlRTX1RIUF9TV0FQICZhbXA7JmFtcDsgU1dBUCAmYW1wOyZhbXA7IDY0QklUYC4gVGhhdCBsaWtlbHkgbWVhbnMgdGhhdCBpZiBJJiMzOTt2ZSBlbmFibGVkIGJvdGggYFNXQVBgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB0aGVuIGBUSFBfU1dBUGAgaXMgYXV0b21hdGljYWxseSBoYW5kbGVkLiBUaGVyZSBpc24mIzM5O3QgYSBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IGl0LCBidXQgaXQgZG9lc24mIzM5O3QgaHVydCB0byBsaXN0IGl0LiBJdCBpcywgYWZ0ZXIgYWxsLCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOb3csIGp1c3QgdG8gY29uZmlybSwgYFRIUF9TV0FQYCBpc24mIzM5O3QgYSBkaXJlY3RseSB1c2VyLXNlbGVjdGFibGUgb3B0aW9uLCBidXQgYSBkZXBlbmRlbnQgZGVmYXVsdC4gSSBuZWVkIHRvIHRha2UgYSBzZWNvbmQgbG9vay4gSnVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk2ODpcdGVuZGNob2ljZVxuIDk2OTpcdFxuIDk3MDpcdGNvbmZpZyBUSFBfU1dBUFxuIDk3MTpcdFx0ZGVmX2Jvb2wgeVxuIDk3MjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRTX1RIUF9TV0FQIFx1MDAyNlx1MDAyNiBTV0FQIFx1MDAyNlx1MDAyNiA2NEJJVFxuIDk3MzpcdFx0aGVscFxuIDk3NDpcdFx0ICBTd2FwIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgaW4gb25lIHBpZWNlLCB3aXRob3V0IHNwbGl0dGluZy5cbiA5NzU6XHRcdCAgWFhYOiBGb3Igbm93LCBzd2FwIGNsdXN0ZXIgYmFja2luZyB0cmFuc3BhcmVudCBodWdlIHBhZ2VcbiA5NzY6XHRcdCAgd2lsbCBiZSBzcGxpdCBhZnRlciBzd2Fwb3V0LlxuIDk3NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUyNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IFN3YXAtUmVsYXRlZCBDb25maWd1cmF0aW9ucyBhbmQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBzd2FwIGlzIGhhbmRsZWQuIEl0IHNlZW1zIGBUSFBfU1dBUGAgaXNuJiMzOTt0IHNvbWV0aGluZyB0aGUgdXNlciBjYW4gZGlyZWN0bHkgY29uZmlndXJlLCBidXQgdGhlIHN5c3RlbSB1dGlsaXplcyBpdCwgc28gd2UgY2FuIGF0IGxlYXN0IG1ha2UgaXQgdmlzaWJsZSBpbiB0aGUgb3V0cHV0LiBNeSBtYWluIGZvY3VzIGhlcmUgaXMgZ29pbmcgdG8gYmUgb24gbWFraW5nIHN1cmUgdGhlIHVzZXIga25vd3MgYWJvdXQgYFNXQVBgLCBgTUVNQ0dgLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSYjMzk7bGwgYmUgc3VyZSB0byBsaXN0IHRob3NlLgoKTm93LCBmb3IgdGhlIGtleSBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyBzd2FwIG1hcmdpbnMgYW5kIGZvbGlvIGFsbG9jYXRpb24uIFNvIHRoZSBtb3N0IGltbWVkaWF0ZWx5IHJlbGV2YW50IGZ1bmN0aW9ucyBhcHBlYXIgdG8gYmUgYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLCBgZm9saW9fYWxsb2Nfc3dhcGAsIGFuZCBgc2htZW1fd3JpdGVvdXRgLiBUaGVzZSBhcmUgd2hlcmUgdGhlIGNvcmUgbG9naWMgbGlrZWx5IHJlc2lkZXMuCgpJIGhhZCBiZXR0ZXIgY2hlY2sgYHNocmlua19mb2xpb19saXN0YCBhcyB3ZWxsLiBJdCBsb29rcyBsaWtlIHRoYXQgb25lIGlzIHN0YXRpYywgc28gSSB3aWxsIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBsaXN0IGl0IGRpcmVjdGx5LiBIb3dldmVyLCBJIHdhbnQgdG8gY2xhcmlmeSBpbiB0aGUgb3V0cHV0IHRoYXQgaXQgaXMgYmVpbmcgdXNlZCBzb21ld2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMuKiBzaHJpbmtfZm9saW9fbGlzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0xMDQwPXN0YXRpYyBib29sIG1heV9lbnRlcl9mcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS92bXNjYW4uYy0xMDU3LSAqL1xubW0vdm1zY2FuLmM6MTA1ODpzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG5tbS92bXNjYW4uYy0xMDU5LVx0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNDAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyBTdGF0aWMgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGhlcmUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYHNocmlua19mb2xpb19saXN0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgc29tZXRoaW5nIEkmIzM5O20ga2VlcGluZyBpbiBtaW5kLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiB3aGF0IGFib3V0IHRoZSBvdGhlcnM/IFNwZWNpZmljYWxseSwgSSYjMzk7bSB3b25kZXJpbmcgaWYgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYHNocmlua19scnV2ZWNgIGFyZSBhbHNvIHN0YXRpYywgdG9vLiBJdCBtYWtlcyBzZW5zZSB0byBjaGVjayB0aGUgcmVzdCBvZiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHdoaWxlIEkmIzM5O20gYXQgaXQsIHNvIGxldCYjMzk7cyBhbHNvIGFkZCBgZm9saW9fYWxsb2Nfc3dhcGAsIGBzaG1lbV93cml0ZW91dGAsIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYW5kIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAgdG8gdGhlIGxpc3QuIEkgbmVlZCB0byBrbm93IGlmIEkmIzM5O20gZGVhbGluZyB3aXRoIGludGVybmFsIG9yIGV4dGVybmFsIGZ1bmN0aW9ucywgYW5kIGEgcXVpY2sgY2hlY2sgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgYHBhZ2VfY291bnRlcl9tYXJnaW5gIGlzIGV4cG9ydGVkLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kIG1hbmFnZWQgd2l0aGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qcGFnZV9jb3VudGVyX21hcmdpbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzY2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyBNZW1vcnkgQWNjb3VudGluZyAtIFN0YXRpYyB2cy4gRXhwb3J0ZWQgRnVuY3Rpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgbWVtb3J5IGFjY291bnRpbmcgaXNzdWUuIFRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdCBpc24mIzM5O3QgKmV4cG9ydGVkKiwgd2hpY2ggaXMgYSBwb3RlbnRpYWwgaHVyZGxlLCBidXQgaXQmIzM5O3MgYWxzbyAqbm9uLXN0YXRpYyosIHdoaWNoIGdpdmVzIG1lIGEgYml0IG1vcmUgZmxleGliaWxpdHkgaW4gdGVybXMgb2YgcG90ZW50aWFsIGFjY2VzcyBvciBvdmVycmlkaW5nLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBuYXJyb3cgdGhlIHNlYXJjaC4gTm93IHRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBvciBub3QgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCBpcyBleHBvcnRlZC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgdHJhY2tpbmcgYW5kIG1hbmFnaW5nIG1lbW9yeSwgZXNwZWNpYWxseSByZWdhcmRpbmcgc3dhcCBtYXJnaW5zIGluIGNncm91cHMuIFRoZSBmYWN0IHRoYXQgSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgKml0cyogZXhwb3J0IHN0YXR1cyB0ZWxscyBtZSB0aGF0IHBvdGVudGlhbGx5IG92ZXJyaWRpbmcgaXQgaXMgdGhlIGN1cnJlbnQgZm9jdXMuIEl0IG5lZWRzIHRvIGJlIGNsYXJpZmllZCwgYmVjYXVzZSB0aGF0IHdpbGwgZGlyZWN0bHkgYWZmZWN0IHdoZXRoZXIgSSBjYW4gcmVsaWFibHkgbW9kaWZ5IG9yIGludGVncmF0ZSB3aXRoIHRoaXMgcGFydCBvZiB0aGUgbWVtb3J5IGFjY291bnRpbmcgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NDEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgTm9uLUV4cG9ydGVkLCBOb24tU3RhdGljIEZ1bmN0aW9uIFVzYWdlKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIEkgc2VlIGEgZnVuY3Rpb24sIG9yIGF0IGxlYXN0IGEgcmVmZXJlbmNlIHRvIHNvbWV0aGluZywgdGhhdCYjMzk7cyBkZWZpbmVkIGJ1dCBub3QgZXhwbGljaXRseSBtYXJrZWQgZm9yIGV4cG9ydC4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSByYWlzaW5nIGEgcmVkIGZsYWcuIFR5cGljYWxseSwgd2UmIzM5O2QgZXhwZWN0IGZ1bmN0aW9ucyB0aGF0IGFyZSBtZWFudCB0byBiZSB1c2VkIGV4dGVybmFsbHkgdG8gYmUgZXhwb3J0ZWQsIGVzcGVjaWFsbHkgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG1vZHVsZSBvciBhIGxpYnJhcnkuIEhvd2V2ZXIsIGlmIGl0JiMzOTtzIG5vdCBzdGF0aWMgaXQgd291bGQgbWVhbiB0aGUgbGlua2VyIHdpbGwgYmUgYWJsZSB0byBzZWUgdGhlIGZ1bmN0aW9uLgoKTm93LCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSB0aGF0IHN0YW5kcyBvdXQgaXMgYGZvbGlvX2FsbG9jX3N3YXBgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIG9yIG5vdCBpdCBpcyBleHBvcnRlZC4gSWYgaXQmIzM5O3Mgbm90IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkbyBhIGRlZXBlciBkaXZlIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIGFjY2Vzc2VkLiBJcyBpdCBwYXJ0IG9mIHNvbWUgaW50ZXJuYWwgQVBJIHRoYXQgaXNuJiMzOTt0IGludGVuZGVkIGZvciBkaXJlY3QgZXh0ZXJuYWwgdXNlPyBJcyBpdCBiZWluZyBhY2Nlc3NlZCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtPyBPciBtYXliZSB0aGVyZSYjMzk7cyBhIHByb2JsZW0gaW4gdGhlIGJ1aWxkIHN5c3RlbSB3aGVyZSB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIGV4cG9ydGVkLCBidXQgaXNuJiMzOTt0PwoKSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdmlzaWJsZSB0byBjb2RlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSBpbXBvcnRhbnQsIGFzIGl0IHdpbGwgZGV0ZXJtaW5lIHRoZSBwb3RlbnRpYWwgc2NvcGUgb2YgaXRzIHVzYWdlLCBhbmQgcG90ZW50aWFsIHByb2JsZW1zIHdpdGggZnV0dXJlIHJlZmFjdG9yaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmZvbGlvX2FsbG9jX3N3YXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk4OAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25zaWRlcmluZyBFeHBvcnRlZCBTeW1ib2xzIGFuZCBNZW1vcnkgT3BlcmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgY29kZSBhbmQgc29tZXRoaW5nJiMzOTtzIGJ1Z2dpbmcgbWUuIFRoaXMgdmFyaWFibGUgb3IgZnVuY3Rpb24sIHdoYXRldmVyIGl0IGlzLCBpc24mIzM5O3QgZXhwbGljaXRseSBtYXJrZWQgZm9yIGV4cG9ydCDigJMgaXQmIzM5O3Mgbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgIGludGVybmFsbHkuIFRoYXQgbWVhbnMgaXQgKmNvdWxkKiBiZSB2aXNpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdOKAmXMgYSBrZXkgZGlzdGluY3Rpb24uIFdoZXRoZXIgaXQgKmlzKiBhY3R1YWxseSBiZWluZyB1c2VkIGV4dGVybmFsbHksIGFuZCB0aHVzIG5lZWRpbmcgdG8gYmUgdmlzaWJsZSwgaXMgYW5vdGhlciBtYXR0ZXIuCgpBbmQgdGhlbiB0aGUgYmlnIHF1ZXN0aW9uLCB0aGUgb25lIHRoYXQgcmVhbGx5IG5lZWRzIGFuIGFuc3dlcjogaXMgdGhpcyBgc2htZW1fd3JpdGVvdXRgIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIOKAkyB3aGF0ZXZlciBpdCBpcyDigJMgZGVjbGFyZWQgYXMgZXhwb3J0ZWQgYW55d2hlcmU/IEkgbmVlZCB0byBjaGVjayB0aGUgc3ltYm9sIHRhYmxlLCB0aGUgbGlua2VyIHNjcmlwdHMsIHRoZSBidWlsZCBwcm9jZXNzLi4uIGV2ZXJ5d2hlcmUuIFRoaXMgbWF0dGVycyBiZWNhdXNlIGl0IGRpcmVjdGx5IGltcGFjdHMgdGhlIGNvZGUmIzM5O3MgbGlua2luZyBhbmQgdXNhYmlsaXR5LiBJZiBpdCYjMzk7cyBub3QgZXhwb3J0ZWQsIGFuZCBzb21lb25lIGlzIHRyeWluZyB0byB1c2UgaXQgZXh0ZXJuYWxseSwgd2UgaGF2ZSBhIG1ham9yIHByb2JsZW0gd2l0aCB1bmRlZmluZWQgc3ltYm9scyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGlzIGhhcyB0byBiZSBuYWlsZWQgZG93biwgZmFzdCwgb3Igd2UgYXJlIHNpdHRpbmcgb24gYSB0aW1lIGJvbWIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qc2htZW1fd3JpdGVvdXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI3OQoJCQkJCQkJb3V0cHV0OiAyMTUKCQkJCQkJCXRob3VnaHRzOiAzMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUmVjZW50IENoYW5nZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgKnNpZ25pZmljYW50KiBmdW5jdGlvbmFsIGNoYW5nZXMuIFRoZXNlIGFyZW4mIzM5O3QgZXhwb3J0ZWQsIGJ1dCB0aGV5JiMzOTtyZSBub24tc3RhdGljLCBzbyB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2Ug4oCTIHNwZWNpZmljYWxseSwgdGhyb3VnaCBtZW1vcnkgcHJlc3N1cmUgc2NlbmFyaW9zIGxpa2UgbWVtb3J5IGFsbG9jYXRpb24gb3Igc3dhcHBpbmcuIFRoYXQgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBoZXJlLiBNeSBleHBlcnQgaW5zdGluY3Qgc2F5cyB0aGVzZSBhcmUgZGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgY2FtcGFpZ24gdG8gc2VlIGhvdyB0aGV5IGhvbGQgdXAgdW5kZXIgc3RyZXNzLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHF1aWNrbHkuIFdlJiMzOTtyZSBsb29raW5nIGF0IGBTV0FQYCwgYE1FTUNHYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBTSE1FTWAuIEdvdCBpdC4KCk5vdywgdGhlIHN5bWJvbHMgdGhhdCBoYXZlIG15IGF0dGVudGlvbjogYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLCBgZm9saW9fYWxsb2Nfc3dhcGAsIGFuZCBgc2htZW1fd3JpdGVvdXRgLiBUaGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgbmV3IGxvZ2ljIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cCBzd2FwIG1hcmdpbnMuIENyaXRpY2FsbHksIGl0JiMzOTtzIHVwZGF0aW5nIGBmb2xpb19hbGxvY19zd2FwYCB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXM6IGAtRTJCSUdgLCBgLUVOT1NQQ2AsIGFuZCBgLUVOT01FTWAsIGluc3RlYWQgb2YgYSBzaW1wbGUgYm9vbGVhbi4gVGhlIGJpZyBkZWFsIGhlcmUgaXMgdGhlIHJhbWlmaWNhdGlvbnMgZG93bnN0cmVhbS4gYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCBhcmUgYWxzbyBiZWluZyB1cGRhdGVkIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlc2UgbmV3IGVycm9yIGNvZGVzLCBhbmQgdGhhdCBpbmNsdWRlcyBjaGFuZ2VzIHRvIHRoZWlyIGZhbGxiYWNrIGJlaGF2aW9yIHdoZW4gc3dhcHBpbmcgb3V0IGxhcmdlIGZvbGlvcyBmYWlscy4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsIGNoYW5nZXMgYWZmZWN0aW5nIGhvdyBmb2xpb3MgYXJlIHN3YXBwZWQgb3V0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgdG91Y2hpbmcgc3dhcCwgc2htZW0sIGFuZCB2bXNjYW4gZnVuY3Rpb25hbGl0eS4KCkp1c3QgZG9pbmcgYSBxdWljayBkb3VibGUtY2hlY2suLi4gWWVzLCBgU0hNRU1gIGlzIHRoZSBjb3JyZWN0IGNvbmZpZyBmb3Igc2hhcmVkIG1lbW9yeS4gYFNXQVBgIGZvciBzd2FwLCBgTUVNQ0dgIGZvciBtZW1vcnkgY2dyb3VwcywgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZm9yIFRIUC4KCkFscmlnaHQsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBMZXQmIzM5O3MgZ2V0IHRoZXNlIHRlc3RzIGdvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2VfY291bnRlcl9tYXJnaW4mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4mIzM0OywKICAgICYjMzQ7Zm9saW9fYWxsb2Nfc3dhcCYjMzQ7LAogICAgJiMzNDtzaG1lbV93cml0ZW91dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBjaGVjayB0aGUgc3dhcCBtYXJnaW4gZm9yIG1lbW9yeSBjZ3JvdXBzIGFuZCBtb2RpZmllcyBgZm9saW9fYWxsb2Nfc3dhcGAgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9yIGNvZGVzICgtRTJCSUcsIC1FTk9TUEMsIC1FTk9NRU0pIGluc3RlYWQgb2YgYSBib29sZWFuLiBJdCBhbHNvIHVwZGF0ZXMgYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCB0byBoYW5kbGUgdGhlc2UgbmV3IGVycm9yIGNvZGVzLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgdGhlIGZhbGxiYWNrIGJlaGF2aW9yIHdoZW4gc3dhcHBpbmcgb3V0IGxhcmdlIGZvbGlvcyBmYWlscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChzd2FwLCBzaG1lbSwgdm1zY2FuKSB0aGF0IGFmZmVjdCBob3cgZm9saW9zIGFyZSBzd2FwcGVkIG91dCB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7U0hNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlX2NvdW50ZXJfbWFyZ2luJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luJiMzNDssCiAgICAmIzM0O2ZvbGlvX2FsbG9jX3N3YXAmIzM0OywKICAgICYjMzQ7c2htZW1fd3JpdGVvdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gY2hlY2sgdGhlIHN3YXAgbWFyZ2luIGZvciBtZW1vcnkgY2dyb3VwcyBhbmQgbW9kaWZpZXMgYGZvbGlvX2FsbG9jX3N3YXBgIHRvIHJldHVybiBzcGVjaWZpYyBlcnJvciBjb2RlcyAoLUUyQklHLCAtRU5PU1BDLCAtRU5PTUVNKSBpbnN0ZWFkIG9mIGEgYm9vbGVhbi4gSXQgYWxzbyB1cGRhdGVzIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgdG8gaGFuZGxlIHRoZXNlIG5ldyBlcnJvciBjb2Rlcywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIHRoZSBmYWxsYmFjayBiZWhhdmlvciB3aGVuIHN3YXBwaW5nIG91dCBsYXJnZSBmb2xpb3MgZmFpbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoc3dhcCwgc2htZW0sIHZtc2NhbikgdGhhdCBhZmZlY3QgaG93IGZvbGlvcyBhcmUgc3dhcHBlZCBvdXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA4OjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgcmVsYXRlZCB0byBzd2FwIGFjY291bnRpbmcgYW5kIGZvbGlvIHN3YXAgYWxsb2NhdGlvbi4gSXQgaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHN3YXAgbWFyZ2lucyAoYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gKSBhbmQgcmVmaW5lcyB0aGUgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgYGZvbGlvX2FsbG9jX3N3YXBgIHRvIGJldHRlciBndWlkZSBmb2xpbyBzcGxpdHRpbmcgbG9naWMgaW4gYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YC4gXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBtZW1vcnkvc3dhcCBsaW1pdHMgYW5kIGRvIG5vdCBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGRhdGEgc3RydWN0dXJlcywgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIGxvZ2ljYWwgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzM3ZmRjMTExN2VmNmRlZjZmOGU2MmIxYWUwMmI0ZDQ0YmY4NzkxMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA4OjEwOjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgKaW5kZXggZDY0OWI2YmJiYzg3MS4uMDdiN2NiMTIyNDljNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oCkBAIC02OCw2ICYjNDM7NjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudGVyX3JlYWQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcikKIAlyZXR1cm4gYXRvbWljX2xvbmdfcmVhZCgmYW1wO2NvdW50ZXItJmd0O3VzYWdlKTsKIH0KIAomIzQzO2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKTsKIHZvaWQgcGFnZV9jb3VudGVyX2NhbmNlbChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIHZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIGJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggMGY5NTNlZDljODYzMC4uYTcyZWNmMTJjMDBkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTUxMCw2ICYjNDM7NTEwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3AKIAlfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpOwogfQogCiYjNDM7bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIGV4dGVybiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKIGV4dGVybiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogI2Vsc2UKQEAgLTUyMyw2ICYjNDM7NTI0LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsCiB7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBQQUdFX0NPVU5URVJfTUFYOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxZDMzMzk1MjA4MDlmLi40NDJhMjk3MTk3ZDUyIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC01Nzk2LDE1ICYjNDM7NTc5NiwzNSBAQCBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCWxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7CiAKLQlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSkKLQkJcmV0dXJuIG5yX3N3YXBfcGFnZXM7Ci0JZm9yICg7ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpOyBtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSkKLQkJbnJfc3dhcF9wYWdlcyA9IG1pbl90KGxvbmcsIG5yX3N3YXBfcGFnZXMsCi0JCQkJICAgICAgUkVBRF9PTkNFKG1lbWNnLSZndDtzd2FwLm1heCkgLQotCQkJCSAgICAgIHBhZ2VfY291bnRlcl9yZWFkKCZhbXA7bWVtY2ctJmd0O3N3YXApKTsKJiM0MzsJaWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgJmFtcDsmYW1wOyAhZG9fbWVtc3dfYWNjb3VudCgpKQomIzQzOwkJbnJfc3dhcF9wYWdlcyA9IG1pbihucl9zd2FwX3BhZ2VzLCBwYWdlX2NvdW50ZXJfbWFyZ2luKCZhbXA7bWVtY2ctJmd0O3N3YXApKTsKJiM0MzsKIAlyZXR1cm4gbnJfc3dhcF9wYWdlczsKIH0KIAomIzQzOy8qKgomIzQzOyAqIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luIC0gZ2V0IGEgZm9saW8mIzM5O3MgbWVtY2cgc3dhcCBtYXJnaW4KJiM0MzsgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbWNnIG1hcmdpbiBpcyBxdWVyaWVkCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFJlbWFpbmluZyBjaGFyZ2VhYmxlIHBhZ2VzIGluIHRoZSBmb2xpbyYjMzk7cyBtZW1jZyBoaWVyYXJjaHkuCiYjNDM7ICovCiYjNDM7bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwomIzQzOwlsb25nIG1hcmdpbjsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkgfHwKJiM0MzsJICAgICFmb2xpb19tZW1jZ19jaGFyZ2VkKGZvbGlvKSkKJiM0MzsJCXJldHVybiBQQUdFX0NPVU5URVJfTUFYOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pOwomIzQzOwltYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKCZhbXA7bWVtY2ctJmd0O3N3YXApOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hcmdpbjsKJiM0Mzt9CiYjNDM7CiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuYwppbmRleCA2NjFlMGYyYTUxMjdhLi40NTA1NDNmNGIzMThiIDEwMDY0NAotLS0gYS9tbS9wYWdlX2NvdW50ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2NvdW50ZXIuYwpAQCAtNDYsNiAmIzQzOzQ2LDI2IEBAIHN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9wcm90ZWN0ZWRfdXNhZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqYywKIAl9CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBwYWdlX2NvdW50ZXJfbWFyZ2luIC0gcmVtYWluaW5nIHVzYWJsZSBzcGFjZSB3aXRoaW4gaGllcmFyY2hpY2FsIGxpbWl0cwomIzQzOyAqIEBjb3VudGVyOiBjb3VudGVyCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFRoZSBtaW5pbXVtIHZhbHVlIG9mIG1heCBtaW51cyB1c2FnZSBhY3Jvc3MgQGNvdW50ZXIgYW5kIGFsbCBvZgomIzQzOyAqIGl0cyBhbmNlc3RvcnMuIFRoZSB2YWx1ZSBtYXkgYmUgbmVnYXRpdmUgZHVyaW5nIGEgY29uY3VycmVudCBjaGFyZ2UuCiYjNDM7ICovCiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpCiYjNDM7ewomIzQzOwlsb25nIG1hcmdpbiA9IFBBR0VfQ09VTlRFUl9NQVg7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCWxvbmcgbSA9IFJFQURfT05DRShjb3VudGVyLSZndDttYXgpIC0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7CiYjNDM7CiYjNDM7CQltYXJnaW4gPSBtaW4obWFyZ2luLCBtKTsKJiM0MzsJfSB3aGlsZSAoKGNvdW50ZXIgPSBjb3VudGVyLSZndDtwYXJlbnQpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hcmdpbjsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHBhZ2VfY291bnRlcl9jYW5jZWwgLSB0YWtlIHBhZ2VzIG91dCBvZiB0aGUgbG9jYWwgY291bnRlcgogICogQGNvdW50ZXI6IGNvdW50ZXIKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDU5OTY2NWEzZDZlN2IuLjZhMzVmNWVlODQzNzIgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMTYxMiw3ICYjNDM7MTYxMiw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpOwogCXN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS0mZ3Q7aV9zYik7CiAJcGdvZmZfdCBpbmRleDsKLQlpbnQgbnJfcGFnZXM7CiYjNDM7CWludCBucl9wYWdlcywgcmV0OwogCWJvb2wgc3BsaXQgPSBmYWxzZTsKIAogCWlmICgoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgU0hNRU1fRl9MT0NLRUQpIHx8IHNiaW5mby0mZ3Q7bm9zd2FwKQpAQCAtMTY5Myw3ICYjNDM7MTY5Myw4IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7CiAJfQogCi0JaWYgKCFmb2xpb19hbGxvY19zd2FwKGZvbGlvKSkgewomIzQzOwlyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTsKJiM0MzsJaWYgKCFyZXQpIHsKIAkJYm9vbCBmaXJzdF9zd2FwcGVkID0gc2htZW1fcmVjYWxjX2lub2RlKGlub2RlLCAwLCBucl9wYWdlcyk7CiAJCWludCBlcnJvcjsKIApAQCAtMTc0Niw3ICYjNDM7MTc0Nyw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJc3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pOwogCQlnb3RvIHJlZGlydHk7CiAJfQotCWlmIChucl9wYWdlcyAmZ3Q7IDEpCiYjNDM7CWlmIChucl9wYWdlcyAmZ3Q7IDEgJmFtcDsmYW1wOyByZXQgPT0gLUUyQklHKQogCQlnb3RvIHRyeV9zcGxpdDsKIHJlZGlydHk6CiAJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCBmNWRmYzdlNTkxOTFlLi4yZDEyN2YxYjMwYmFlIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTE3MzUsNyAmIzQzOzE3MzUsOSBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAgKiBzd2FwIGNhY2hlLgogICoKICAqIENvbnRleHQ6IENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBmb2xpbyBsb2NrLgotICogUmV0dXJuOiBXaGV0aGVyIHRoZSBmb2xpbyB3YXMgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUuCiYjNDM7ICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCAlLUUyQklHIGlmIHNwbGl0dGluZyB0aGUgZm9saW8gbWlnaHQgYWxsb3cgc3dhcG91dCwKJiM0MzsgKiAlLUVOT1NQQyBpZiBubyBnbG9iYWwgc3dhcCBzcGFjZSBpcyBhdmFpbGFibGUsIG9yICUtRU5PTUVNIGlmIHNwbGl0dGluZwomIzQzOyAqIHdvdWxkIG5vdCBoZWxwLgogICovCiBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewpAQCAtMTc0NywxMSAmIzQzOzE3NDksMTEgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKIAogCWlmIChvcmRlcikgewogCQkvKgotCQkgKiBSZWplY3QgbGFyZ2UgYWxsb2NhdGlvbiB3aGVuIFRIUF9TV0FQIGlzIGRpc2FibGVkLAotCQkgKiB0aGUgY2FsbGVyIHNob3VsZCBzcGxpdCB0aGUgZm9saW8gYW5kIHRyeSBhZ2Fpbi4KJiM0MzsJCSAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQuIENoZWNrIGJlbG93CiYjNDM7CQkgKiB3aGV0aGVyIHNwbGl0dGluZyBhbmQgcmV0cnlpbmcgY2FuIG1ha2UgcHJvZ3Jlc3MuCiAJCSAqLwogCQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RIUF9TV0FQKSkKLQkJCXJldHVybiAtRUFHQUlOOwomIzQzOwkJCWdvdG8gZmFpbGVkOwogCiAJCS8qCiAJCSAqIEFsbG9jYXRpb24gc2l6ZSBzaG91bGQgbmV2ZXIgZXhjZWVkIGNsdXN0ZXIgc2l6ZQpAQCAtMTc1OSw3ICYjNDM7MTc2MSw3IEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCSAqLwogCQlpZiAoc2l6ZSAmZ3Q7IFNXQVBGSUxFX0NMVVNURVIpIHsKIAkJCVZNX1dBUk5fT05fT05DRSgxKTsKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCWdvdG8gZmFpbGVkOwogCQl9CiAJfQogCkBAIC0xNzc1LDEzICYjNDM7MTc3NywyMyBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCX0KIAogCS8qIE5lZWQgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgYWxsb2NhdGlvbiBmYWlsZWQsIGZvciBNRU1DR19TV0FQX0ZBSUwuICovCi0JaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpCiYjNDM7CWlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKSB7CiAJCXN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTsKJiM0MzsJCWdvdG8gZmFpbGVkOwomIzQzOwl9CiAKIAlpZiAodW5saWtlbHkoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwkJZ290byBmYWlsZWQ7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztmYWlsZWQ6CiYjNDM7CWlmIChnZXRfbnJfc3dhcF9wYWdlcygpICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gLUVOT1NQQzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKSAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldHVybiBvcmRlciA/IC1FMkJJRyA6IC1FTk9NRU07CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiZTZiZDI2ZThjNTc4Li43NTQzMzYwMzM2MTYwIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTI1OSw2ICYjNDM7MTI1OSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwKIAkJICovCiAJCWlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pICZhbXA7JmFtcDsgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSAmYW1wOyZhbXA7CiAJCQkJIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkgewomIzQzOwkJCWludCByZXQ7CiYjNDM7CiAJCQlpZiAoIShzYy0mZ3Q7Z2ZwX21hc2sgJmFtcDsgX19HRlBfSU8pKQogCQkJCWdvdG8ga2VlcF9sb2NrZWQ7CiAJCQlpZiAoZm9saW9fbWF5YmVfZG1hX3Bpbm5lZChmb2xpbykpCkBAIC0xMjc3LDExICYjNDM7MTI3OSwxNCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsCiAJCQkJICAgIHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKQogCQkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZDsKIAkJCX0KLQkJCWlmIChmb2xpb19hbGxvY19zd2FwKGZvbGlvKSkgewomIzQzOwkJCXJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pOwomIzQzOwkJCWlmIChyZXQpIHsKIAkJCQlpbnQgX19tYXliZV91bnVzZWQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7CiAKIAkJCQlpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKQogCQkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDsKJiM0MzsJCQkJaWYgKHJldCAhPSAtRTJCSUcpCiYjNDM7CQkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZDsKIAkJCQkvKiBGYWxsYmFjayB0byBzd2FwIG5vcm1hbCBwYWdlcyAqLwogCQkJCWlmIChzcGxpdF9mb2xpb190b19saXN0KGZvbGlvLCBmb2xpb19saXN0KSkKIAkJCQkJZ290byBhY3RpdmF0ZV9sb2NrZWQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzYyCgkJCQkJCQlvdXRwdXQ6IDIyMAoJCQkJCQkJdGhvdWdodHM6IDEyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogU3dhcCBBY2NvdW50aW5nIGFuZCBGb2xpbyBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIHByZXR0eSBjbGVhbiBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHN0YW5kcG9pbnQsIGJ1dCBhcyBhbHdheXMsIGEgZGVlcCBkaXZlIGlzIHJlcXVpcmVkLiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyB3ZSBoYW5kbGUgc3dhcCBhY2NvdW50aW5nIGFuZCBmb2xpbyBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFdlIGFyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byB0aGUgc3dhcCBhY2NvdW50aW5nLCBmb2xpbyBzd2FwIGFsbG9jYXRpb24sIGFuZCBhZGp1c3RtZW50cyBmb3IgZXJyb3IgaGFuZGxpbmcuCgpUaGUga2V5IHBpZWNlcyBpbnRyb2R1Y2VkIGFyZSBgcGFnZV9jb3VudGVyX21hcmdpbmAgYW5kIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAuIFRoZXNlIGFwcGVhciB0byBjYWxjdWxhdGUgYXZhaWxhYmxlIHN3YXAgc3BhY2Ugd2l0aGluIHRoZSBsaW1pdHMgZGVmaW5lZCBieSBtZW1vcnkgY2dyb3Vwcy4gQW5hbHl6aW5nIHRoZSBjb2RlLCBgcGFnZV9jb3VudGVyX21hcmdpbmAgcmVhZHMgYGNvdW50ZXItJmd0O21heGAgYW5kIGBjb3VudGVyLSZndDt1c2FnZWAgdmlhIGBwYWdlX2NvdW50ZXJfcmVhZGAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhcmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQgaGVyZS4gYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCB0aGVuIGxldmVyYWdlcyBgcGFnZV9jb3VudGVyX21hcmdpbmAgZm9yIG1lbWNnLXNwZWNpZmljIG1hcmdpbnMuIFN0aWxsIGNsZWFuLgoKVGhlIHJlYWwgaGVhcnQgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlZmluaW5nIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGBmb2xpb19hbGxvY19zd2FwYC4gUHJldmlvdXNseSwgaXQgYXBwZWFycyB0aGlzIGZ1bmN0aW9uIHJldHVybmVkIGEgc2ltcGxlIGJvb2xlYW4gb3IgYSBnZW5lcmljIGVycm9yLCBidXQgaXQgbm93IHJldHVybnMgc3BlY2lmaWMgZXJyb3IgY29kZXMgbGlrZSBgLUUyQklHYCwgYC1FTk9TUENgLCBhbmQgYC1FTk9NRU1gLiBXZSYjMzk7cmUgc2VlaW5nIHRoZXNlIGVycm9ycyB1c2VkIGluIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgdG8gY29udHJvbCB3aGV0aGVyIGEgZm9saW8gaXMgc3BsaXQuIEluIGBzaG1lbV93cml0ZW91dGAsIHdlIGNoZWNrIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgYC1FMkJJR2AgYW5kIGlmIHRoZSBudW1iZXIgb2YgcGFnZXMgaXMgZ3JlYXRlciB0aGFuIDEsIHRoZW4gd2UgaW5pdGlhdGUgYSBzcGxpdC4gSW4gYHNocmlua19mb2xpb19saXN0YCwgdGhlIHJldHVybiB2YWx1ZSBpcyBldmFsdWF0ZWQgYWdhaW5zdCBgLUUyQklHYCB0byBkZWNpZGUgYmV0d2VlbiBhY3RpdmF0aW9uIGFuZCBzcGxpdHRpbmcuCgpOb3csIHRvIGV4cGxpY2l0bHkgYWRkcmVzcyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybjoKCjEuICAqKk5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuKioKMi4gICoqTm8gbmV3IGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHVuaW5pdGlhbGl6ZWQuKioKMy4gICoqTm8gYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGFueSBzdHJ1Y3RzLioqCjQuICAqKlRoZXJlIGlzIG5vIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNhZ2UgaW4gYW55IGNvbnRyb2wgZmxvdy4qKgoKSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHRvIG1ha2UgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgbW9yZSBncmFudWxhciBhbmQgcm9idXN0IGluIGhvdyBpdCBoYW5kbGVzIHN3YXAgYXZhaWxhYmlsaXR5IGFuZCBtZW1vcnkgY2dyb3VwIGxpbWl0cy4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGVzZSBzcGVjaWZpYyBlcnJvciBjb2RlcyBhbGxvd3MgZm9yIG1vcmUgaW5mb3JtZWQgZGVjaXNpb25zIG9uIGZvbGlvIHNwbGl0dGluZy4KCk9rYXksIGxldCYjMzk7cyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjaywgYmVjYXVzZSBzdWJ0bGUgYnVncyBhcmUgdGhlIHdvcnN0LiBUaGUgY2hhbmdlIGluIHRoZSByZXR1cm4gdHlwZSBvZiBgZm9saW9fYWxsb2Nfc3dhcGAgZnJvbSBhbiBpbXBsaWNpdCBib29sZWFuIHRvIGFuIGBpbnRgIHdpdGggc3BlY2lmaWMgZXJyb3IgY29kZXMgaW5pdGlhbGx5IHJhaXNlZCBhIGNvbmNlcm4sIGJ1dCBhZnRlciBnb2luZyB0aHJvdWdoIHRoZSBvbGQgYW5kIG5ldyBjb2RlLCBpdCBiZWNvbWVzIGNsZWFyIHRoYXQgdGhlIHN1Y2Nlc3MvZmFpbHVyZSBsb2dpYyByZW1haW5zIGlkZW50aWNhbC4gVGhlIG9sZCBjb2RlIGFuZCBuZXcgY29kZSB0cmVhdCAwIGFzIHN1Y2Nlc3MgYW5kIGFueSBvdGhlciByZXR1cm4gYXMgYW4gZXJyb3IuIFRoZSBvbGQgY29kZSB1c2VkIGJvb2xlYW4gY29tcGFyaXNvbiB0byBkZXRlcm1pbmUgaWYgYGZvbGlvX2FsbG9jX3N3YXBgIHJldHVybmVkIGFuIGVycm9yLCB0aGUgbmV3IGNvZGUgY2hlY2tzIHRoZSBzcGVjaWZpYyBlcnJvciBjb2RlIGByZXQgPT0gLUUyQklHYC4KCkkmIzM5O3ZlIGNhcmVmdWxseSBleGFtaW5lZCBob3cgdGhlIGVycm9yIGNvZGVzIGFyZSB1dGlsaXplZCBpbiBib3RoIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFRoZSBuZXcgY29kZSBlbmhhbmNlcyBlcnJvciBoYW5kbGluZyB3aXRob3V0IGludHJvZHVjaW5nIGFueSBub3ZlbCB3YXlzIHRvIGFjY2VzcyBvciBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKQmFzZWQgb24gdGhpcyB0aG9yb3VnaCBhbmFseXNpcywgSSBjYW4gZGVmaW5pdGl2ZWx5IHNheSB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gS0FTQU4gYW5kIG91ciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHRob3VnaCBldmVuIHRob3NlIGFyZSB1bmxpa2VseS4KClRoZXJlZm9yZSwgTmVlZHNLTVNBTiA9IGZhbHNlLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgY2hhbmdlcyBhcmUgcHVyZWx5IGZvY3VzZWQgb24gY29udHJvbCBmbG93IGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIGFuZCB0aGUgY29kZSBtb2RpZmljYXRpb25zIGFyZSBub3QgcmVsYXRlZCB0byBpbml0aWFsaXppbmcgb3IgZXhwb3NpbmcgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlbGF0ZWQgdG8gc3dhcCBhY2NvdW50aW5nIGFuZCBmb2xpbyBzd2FwIGFsbG9jYXRpb24uIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMgKGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCkgYW5kIHJlZmluZXMgdGhlIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGBmb2xpb19hbGxvY19zd2FwYCB0byBiZXR0ZXIgZ3VpZGUgZm9saW8gc3BsaXR0aW5nIGxvZ2ljIGluIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYmFzZWQgb24gbWVtb3J5L3N3YXAgbGltaXRzIGFuZCBkbyBub3QgaW52b2x2ZSBhbGxvY2F0aW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGNvcHlpbmcgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBtb2RpZnlpbmcgZGF0YSBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBsb2dpY2FsIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlbGF0ZWQgdG8gc3dhcCBhY2NvdW50aW5nIGFuZCBmb2xpbyBzd2FwIGFsbG9jYXRpb24uIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMgKGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCkgYW5kIHJlZmluZXMgdGhlIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGBmb2xpb19hbGxvY19zd2FwYCB0byBiZXR0ZXIgZ3VpZGUgZm9saW8gc3BsaXR0aW5nIGxvZ2ljIGluIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYmFzZWQgb24gbWVtb3J5L3N3YXAgbGltaXRzIGFuZCBkbyBub3QgaW52b2x2ZSBhbGxvY2F0aW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMsIGNvcHlpbmcgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBtb2RpZnlpbmcgZGF0YSBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBsb2dpY2FsIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjEwOjUzLjc2Njg1OTgyNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjU3MzM2NjAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV9jb3VudGVyX21hcmdpblwiLFxuICAgIFwibWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5cIixcbiAgICBcImZvbGlvX2FsbG9jX3N3YXBcIixcbiAgICBcInNobWVtX3dyaXRlb3V0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlbGF0ZWQgdG8gc3dhcCBhY2NvdW50aW5nIGFuZCBmb2xpbyBzd2FwIGFsbG9jYXRpb24uIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMgKGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCkgYW5kIHJlZmluZXMgdGhlIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGBmb2xpb19hbGxvY19zd2FwYCB0byBiZXR0ZXIgZ3VpZGUgZm9saW8gc3BsaXR0aW5nIGxvZ2ljIGluIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBtZW1vcnkvc3dhcCBsaW1pdHMgYW5kIGRvIG5vdCBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGRhdGEgc3RydWN0dXJlcywgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIGxvZ2ljYWwgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBjaGVjayB0aGUgc3dhcCBtYXJnaW4gZm9yIG1lbW9yeSBjZ3JvdXBzIGFuZCBtb2RpZmllcyBgZm9saW9fYWxsb2Nfc3dhcGAgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9yIGNvZGVzICgtRTJCSUcsIC1FTk9TUEMsIC1FTk9NRU0pIGluc3RlYWQgb2YgYSBib29sZWFuLiBJdCBhbHNvIHVwZGF0ZXMgYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCB0byBoYW5kbGUgdGhlc2UgbmV3IGVycm9yIGNvZGVzLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgdGhlIGZhbGxiYWNrIGJlaGF2aW9yIHdoZW4gc3dhcHBpbmcgb3V0IGxhcmdlIGZvbGlvcyBmYWlscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChzd2FwLCBzaG1lbSwgdm1zY2FuKSB0aGF0IGFmZmVjdCBob3cgZm9saW9zIGFyZSBzd2FwcGVkIG91dCB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjEwOjUzLjc2Njg2NzA5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MTYwMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzM3ZmRjMTExN2VmNmRlZjZmOGU2MmIxYWUwMmI0ZDQ0YmY4NzkxMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwODoxMDo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxcbmluZGV4IGQ2NDliNmJiYmM4NzEuLjA3YjdjYjEyMjQ5YzcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcXG5AQCAtNjgsNiArNjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudGVyX3JlYWQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcXG4gXFx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNmNvdW50ZXItXFx1MDAzZXVzYWdlKTtcXG4gfVxcbiBcXG4rbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpO1xcbiB2b2lkIHBhZ2VfY291bnRlcl9jYW5jZWwoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuIHZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gYm9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuaW5kZXggMGY5NTNlZDljODYzMC4uYTcyZWNmMTJjMDBkYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuQEAgLTUxMCw2ICs1MTAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcFxcbiBcXHRfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcChpZCwgbnJfcGFnZXMpO1xcbiB9XFxuIFxcbitsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuIGV4dGVybiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiAjZWxzZVxcbkBAIC01MjMsNiArNTI0LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXFxuIHtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggMWQzMzM5NTIwODA5Zi4uNDQyYTI5NzE5N2Q1MiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtNTc5NiwxNSArNTc5NiwzNSBAQCBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XFxuIFxcbi1cXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSlcXG4tXFx0XFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XFxuLVxcdGZvciAoOyAhbWVtX2Nncm91cF9pc19yb290KG1lbWNnKTsgbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpXFxuLVxcdFxcdG5yX3N3YXBfcGFnZXMgPSBtaW5fdChsb25nLCBucl9zd2FwX3BhZ2VzLFxcbi1cXHRcXHRcXHRcXHQgICAgICBSRUFEX09OQ0UobWVtY2ctXFx1MDAzZXN3YXAubWF4KSAtXFxuLVxcdFxcdFxcdFxcdCAgICAgIHBhZ2VfY291bnRlcl9yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCkpO1xcbitcXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhZG9fbWVtc3dfYWNjb3VudCgpKVxcbitcXHRcXHRucl9zd2FwX3BhZ2VzID0gbWluKG5yX3N3YXBfcGFnZXMsIHBhZ2VfY291bnRlcl9tYXJnaW4oXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwKSk7XFxuK1xcbiBcXHRyZXR1cm4gbnJfc3dhcF9wYWdlcztcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luIC0gZ2V0IGEgZm9saW8ncyBtZW1jZyBzd2FwIG1hcmdpblxcbisgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbWNnIG1hcmdpbiBpcyBxdWVyaWVkXFxuKyAqXFxuKyAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJ3MgbWVtY2cgaGllcmFyY2h5LlxcbisgKi9cXG4rbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4rXFx0bG9uZyBtYXJnaW47XFxuK1xcbitcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSB8fFxcbitcXHQgICAgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gUEFHRV9DT1VOVEVSX01BWDtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxuK1xcdG1hcmdpbiA9IHBhZ2VfY291bnRlcl9tYXJnaW4oXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gbWFyZ2luO1xcbit9XFxuK1xcbiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jXFxuaW5kZXggNjYxZTBmMmE1MTI3YS4uNDUwNTQzZjRiMzE4YiAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2NvdW50ZXIuY1xcbisrKyBiL21tL3BhZ2VfY291bnRlci5jXFxuQEAgLTQ2LDYgKzQ2LDI2IEBAIHN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9wcm90ZWN0ZWRfdXNhZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqYyxcXG4gXFx0fVxcbiB9XFxuIFxcbisvKipcXG4rICogcGFnZV9jb3VudGVyX21hcmdpbiAtIHJlbWFpbmluZyB1c2FibGUgc3BhY2Ugd2l0aGluIGhpZXJhcmNoaWNhbCBsaW1pdHNcXG4rICogQGNvdW50ZXI6IGNvdW50ZXJcXG4rICpcXG4rICogUmV0dXJuOiBUaGUgbWluaW11bSB2YWx1ZSBvZiBtYXggbWludXMgdXNhZ2UgYWNyb3NzIEBjb3VudGVyIGFuZCBhbGwgb2ZcXG4rICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS5cXG4rICovXFxuK2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxcbit7XFxuK1xcdGxvbmcgbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0bG9uZyBtID0gUkVBRF9PTkNFKGNvdW50ZXItXFx1MDAzZW1heCkgLSBwYWdlX2NvdW50ZXJfcmVhZChjb3VudGVyKTtcXG4rXFxuK1xcdFxcdG1hcmdpbiA9IG1pbihtYXJnaW4sIG0pO1xcbitcXHR9IHdoaWxlICgoY291bnRlciA9IGNvdW50ZXItXFx1MDAzZXBhcmVudCkpO1xcbitcXG4rXFx0cmV0dXJuIG1hcmdpbjtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHBhZ2VfY291bnRlcl9jYW5jZWwgLSB0YWtlIHBhZ2VzIG91dCBvZiB0aGUgbG9jYWwgY291bnRlclxcbiAgKiBAY291bnRlcjogY291bnRlclxcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xcbmluZGV4IDU5OTY2NWEzZDZlN2IuLjZhMzVmNWVlODQzNzIgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMTYxMiw3ICsxNjEyLDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xcbiBcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbiBcXHRwZ29mZl90IGluZGV4O1xcbi1cXHRpbnQgbnJfcGFnZXM7XFxuK1xcdGludCBucl9wYWdlcywgcmV0O1xcbiBcXHRib29sIHNwbGl0ID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0hNRU1fRl9MT0NLRUQpIHx8IHNiaW5mby1cXHUwMDNlbm9zd2FwKVxcbkBAIC0xNjkzLDcgKzE2OTMsOCBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7XFxuK1xcdHJldCA9IGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pO1xcbitcXHRpZiAoIXJldCkge1xcbiBcXHRcXHRib29sIGZpcnN0X3N3YXBwZWQgPSBzaG1lbV9yZWNhbGNfaW5vZGUoaW5vZGUsIDAsIG5yX3BhZ2VzKTtcXG4gXFx0XFx0aW50IGVycm9yO1xcbiBcXG5AQCAtMTc0Niw3ICsxNzQ3LDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxuIFxcdFxcdGdvdG8gcmVkaXJ0eTtcXG4gXFx0fVxcbi1cXHRpZiAobnJfcGFnZXMgXFx1MDAzZSAxKVxcbitcXHRpZiAobnJfcGFnZXMgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IHJldCA9PSAtRTJCSUcpXFxuIFxcdFxcdGdvdG8gdHJ5X3NwbGl0O1xcbiByZWRpcnR5OlxcbiBcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcXG5pbmRleCBmNWRmYzdlNTkxOTFlLi4yZDEyN2YxYjMwYmFlIDEwMDY0NFxcbi0tLSBhL21tL3N3YXBmaWxlLmNcXG4rKysgYi9tbS9zd2FwZmlsZS5jXFxuQEAgLTE3MzUsNyArMTczNSw5IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4gICogc3dhcCBjYWNoZS5cXG4gICpcXG4gICogQ29udGV4dDogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGZvbGlvIGxvY2suXFxuLSAqIFJldHVybjogV2hldGhlciB0aGUgZm9saW8gd2FzIGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlLlxcbisgKiBSZXR1cm46ICUwIG9uIHN1Y2Nlc3MsICUtRTJCSUcgaWYgc3BsaXR0aW5nIHRoZSBmb2xpbyBtaWdodCBhbGxvdyBzd2Fwb3V0LFxcbisgKiAlLUVOT1NQQyBpZiBubyBnbG9iYWwgc3dhcCBzcGFjZSBpcyBhdmFpbGFibGUsIG9yICUtRU5PTUVNIGlmIHNwbGl0dGluZ1xcbisgKiB3b3VsZCBub3QgaGVscC5cXG4gICovXFxuIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG5AQCAtMTc0NywxMSArMTc0OSwxMSBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXG4gXFx0aWYgKG9yZGVyKSB7XFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQsXFxuLVxcdFxcdCAqIHRoZSBjYWxsZXIgc2hvdWxkIHNwbGl0IHRoZSBmb2xpbyBhbmQgdHJ5IGFnYWluLlxcbitcXHRcXHQgKiBSZWplY3QgbGFyZ2UgYWxsb2NhdGlvbiB3aGVuIFRIUF9TV0FQIGlzIGRpc2FibGVkLiBDaGVjayBiZWxvd1xcbitcXHRcXHQgKiB3aGV0aGVyIHNwbGl0dGluZyBhbmQgcmV0cnlpbmcgY2FuIG1ha2UgcHJvZ3Jlc3MuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RIUF9TV0FQKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbiBcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogQWxsb2NhdGlvbiBzaXplIHNob3VsZCBuZXZlciBleGNlZWQgY2x1c3RlciBzaXplXFxuQEAgLTE3NTksNyArMTc2MSw3IEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIFNXQVBGSUxFX0NMVVNURVIpIHtcXG4gXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKDEpO1xcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtMTc3NSwxMyArMTc3NywyMyBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBOZWVkIHRvIGNhbGwgdGhpcyBldmVuIGlmIGFsbG9jYXRpb24gZmFpbGVkLCBmb3IgTUVNQ0dfU1dBUF9GQUlMLiAqL1xcbi1cXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSlcXG4rXFx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpIHtcXG4gXFx0XFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xcbitcXHRcXHRnb3RvIGZhaWxlZDtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKHVubGlrZWx5KCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0Z290byBmYWlsZWQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2ZhaWxlZDpcXG4rXFx0aWYgKGdldF9ucl9zd2FwX3BhZ2VzKCkgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuK1xcdGlmIChtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihmb2xpbykgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXR1cm4gb3JkZXIgPyAtRTJCSUcgOiAtRU5PTUVNO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGJlNmJkMjZlOGM1NzguLjc1NDMzNjAzMzYxNjAgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC0xMjU5LDYgKzEyNTksOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG4rXFx0XFx0XFx0aW50IHJldDtcXG4rXFxuIFxcdFxcdFxcdGlmICghKHNjLVxcdTAwM2VnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0lPKSlcXG4gXFx0XFx0XFx0XFx0Z290byBrZWVwX2xvY2tlZDtcXG4gXFx0XFx0XFx0aWYgKGZvbGlvX21heWJlX2RtYV9waW5uZWQoZm9saW8pKVxcbkBAIC0xMjc3LDExICsxMjc5LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4gXFx0XFx0XFx0XFx0ICAgIHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKVxcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcXG4rXFx0XFx0XFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XFxuK1xcdFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0XFx0aW50IF9fbWF5YmVfdW51c2VkIG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xcbiBcXG4gXFx0XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBhY3RpdmF0ZV9sb2NrZWRfc3BsaXQ7XFxuK1xcdFxcdFxcdFxcdGlmIChyZXQgIT0gLUUyQklHKVxcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcXG4gXFx0XFx0XFx0XFx0LyogRmFsbGJhY2sgdG8gc3dhcCBub3JtYWwgcGFnZXMgKi9cXG4gXFx0XFx0XFx0XFx0aWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKVxcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTA6NTQuMjIyNzQyNzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzU1ODY3MzU2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJTSE1FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhZ2VfY291bnRlcl9tYXJnaW5cIixcbiAgICBcIm1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luXCIsXG4gICAgXCJmb2xpb19hbGxvY19zd2FwXCIsXG4gICAgXCJzaG1lbV93cml0ZW91dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGNoZWNrIHRoZSBzd2FwIG1hcmdpbiBmb3IgbWVtb3J5IGNncm91cHMgYW5kIG1vZGlmaWVzIGBmb2xpb19hbGxvY19zd2FwYCB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMgKC1FMkJJRywgLUVOT1NQQywgLUVOT01FTSkgaW5zdGVhZCBvZiBhIGJvb2xlYW4uIEl0IGFsc28gdXBkYXRlcyBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIGhhbmRsZSB0aGVzZSBuZXcgZXJyb3IgY29kZXMsIHNwZWNpZmljYWxseSBjaGFuZ2luZyB0aGUgZmFsbGJhY2sgYmVoYXZpb3Igd2hlbiBzd2FwcGluZyBvdXQgbGFyZ2UgZm9saW9zIGZhaWxzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKHN3YXAsIHNobWVtLCB2bXNjYW4pIHRoYXQgYWZmZWN0IGhvdyBmb2xpb3MgYXJlIHN3YXBwZWQgb3V0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzM3ZmRjMTExN2VmNmRlZjZmOGU2MmIxYWUwMmI0ZDQ0YmY4NzkxMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA4OjEwOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbmluZGV4IGQ2NDliNmJiYmM4NzEuLjA3YjdjYjEyMjQ5YzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXG5AQCAtNjgsNiArNjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudGVyX3JlYWQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcbiBcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmNvdW50ZXItXHUwMDNldXNhZ2UpO1xuIH1cbiBcbitsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcik7XG4gdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBib29sIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggMGY5NTNlZDljODYzMC4uYTcyZWNmMTJjMDBkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTUxMCw2ICs1MTAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcFxuIFx0X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTtcbiB9XG4gXG4rbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2VcbkBAIC01MjMsNiArNTI0LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXG4ge1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gUEFHRV9DT1VOVEVSX01BWDtcbit9XG4rXG4gc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMWQzMzM5NTIwODA5Zi4uNDQyYTI5NzE5N2Q1MiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNTc5NiwxNSArNTc5NiwzNSBAQCBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XG4gXG4tXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSlcbi1cdFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG4tXHRmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKVxuLVx0XHRucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcyxcbi1cdFx0XHRcdCAgICAgIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwLm1heCkgLVxuLVx0XHRcdFx0ICAgICAgcGFnZV9jb3VudGVyX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCkpO1xuK1x0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2ICFkb19tZW1zd19hY2NvdW50KCkpXG4rXHRcdG5yX3N3YXBfcGFnZXMgPSBtaW4obnJfc3dhcF9wYWdlcywgcGFnZV9jb3VudGVyX21hcmdpbihcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKSk7XG4rXG4gXHRyZXR1cm4gbnJfc3dhcF9wYWdlcztcbiB9XG4gXG4rLyoqXG4rICogbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4gLSBnZXQgYSBmb2xpbydzIG1lbWNnIHN3YXAgbWFyZ2luXG4rICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1jZyBtYXJnaW4gaXMgcXVlcmllZFxuKyAqXG4rICogUmV0dXJuOiBSZW1haW5pbmcgY2hhcmdlYWJsZSBwYWdlcyBpbiB0aGUgZm9saW8ncyBtZW1jZyBoaWVyYXJjaHkuXG4rICovXG4rbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcdGxvbmcgbWFyZ2luO1xuK1xuK1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkgfHxcbitcdCAgICAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpXG4rXHRcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4rXHRtYXJnaW4gPSBwYWdlX2NvdW50ZXJfbWFyZ2luKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gbWFyZ2luO1xuK31cbitcbiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmNcbmluZGV4IDY2MWUwZjJhNTEyN2EuLjQ1MDU0M2Y0YjMxOGIgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2NvdW50ZXIuY1xuKysrIGIvbW0vcGFnZV9jb3VudGVyLmNcbkBAIC00Niw2ICs0NiwyNiBAQCBzdGF0aWMgdm9pZCBwcm9wYWdhdGVfcHJvdGVjdGVkX3VzYWdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmMsXG4gXHR9XG4gfVxuIFxuKy8qKlxuKyAqIHBhZ2VfY291bnRlcl9tYXJnaW4gLSByZW1haW5pbmcgdXNhYmxlIHNwYWNlIHdpdGhpbiBoaWVyYXJjaGljYWwgbGltaXRzXG4rICogQGNvdW50ZXI6IGNvdW50ZXJcbisgKlxuKyAqIFJldHVybjogVGhlIG1pbmltdW0gdmFsdWUgb2YgbWF4IG1pbnVzIHVzYWdlIGFjcm9zcyBAY291bnRlciBhbmQgYWxsIG9mXG4rICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS5cbisgKi9cbitsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcbit7XG4rXHRsb25nIG1hcmdpbiA9IFBBR0VfQ09VTlRFUl9NQVg7XG4rXG4rXHRkbyB7XG4rXHRcdGxvbmcgbSA9IFJFQURfT05DRShjb3VudGVyLVx1MDAzZW1heCkgLSBwYWdlX2NvdW50ZXJfcmVhZChjb3VudGVyKTtcbitcbitcdFx0bWFyZ2luID0gbWluKG1hcmdpbiwgbSk7XG4rXHR9IHdoaWxlICgoY291bnRlciA9IGNvdW50ZXItXHUwMDNlcGFyZW50KSk7XG4rXG4rXHRyZXR1cm4gbWFyZ2luO1xuK31cbitcbiAvKipcbiAgKiBwYWdlX2NvdW50ZXJfY2FuY2VsIC0gdGFrZSBwYWdlcyBvdXQgb2YgdGhlIGxvY2FsIGNvdW50ZXJcbiAgKiBAY291bnRlcjogY291bnRlclxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA1OTk2NjVhM2Q2ZTdiLi42YTM1ZjVlZTg0MzcyIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTE2MTIsNyArMTYxMiw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRwZ29mZl90IGluZGV4O1xuLVx0aW50IG5yX3BhZ2VzO1xuK1x0aW50IG5yX3BhZ2VzLCByZXQ7XG4gXHRib29sIHNwbGl0ID0gZmFsc2U7XG4gXG4gXHRpZiAoKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IFNITUVNX0ZfTE9DS0VEKSB8fCBzYmluZm8tXHUwMDNlbm9zd2FwKVxuQEAgLTE2OTMsNyArMTY5Myw4IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4gXHR9XG4gXG4tXHRpZiAoIWZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7XG4rXHRyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTtcbitcdGlmICghcmV0KSB7XG4gXHRcdGJvb2wgZmlyc3Rfc3dhcHBlZCA9IHNobWVtX3JlY2FsY19pbm9kZShpbm9kZSwgMCwgbnJfcGFnZXMpO1xuIFx0XHRpbnQgZXJyb3I7XG4gXG5AQCAtMTc0Niw3ICsxNzQ3LDcgQEAgaW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4gXHRcdGdvdG8gcmVkaXJ0eTtcbiBcdH1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMSlcbitcdGlmIChucl9wYWdlcyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgcmV0ID09IC1FMkJJRylcbiBcdFx0Z290byB0cnlfc3BsaXQ7XG4gcmVkaXJ0eTpcbiBcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXG5pbmRleCBmNWRmYzdlNTkxOTFlLi4yZDEyN2YxYjMwYmFlIDEwMDY0NFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xuKysrIGIvbW0vc3dhcGZpbGUuY1xuQEAgLTE3MzUsNyArMTczNSw5IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiAgKiBzd2FwIGNhY2hlLlxuICAqXG4gICogQ29udGV4dDogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGZvbGlvIGxvY2suXG4tICogUmV0dXJuOiBXaGV0aGVyIHRoZSBmb2xpbyB3YXMgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUuXG4rICogUmV0dXJuOiAlMCBvbiBzdWNjZXNzLCAlLUUyQklHIGlmIHNwbGl0dGluZyB0aGUgZm9saW8gbWlnaHQgYWxsb3cgc3dhcG91dCxcbisgKiAlLUVOT1NQQyBpZiBubyBnbG9iYWwgc3dhcCBzcGFjZSBpcyBhdmFpbGFibGUsIG9yICUtRU5PTUVNIGlmIHNwbGl0dGluZ1xuKyAqIHdvdWxkIG5vdCBoZWxwLlxuICAqL1xuIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuQEAgLTE3NDcsMTEgKzE3NDksMTEgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBcdGlmIChvcmRlcikge1xuIFx0XHQvKlxuLVx0XHQgKiBSZWplY3QgbGFyZ2UgYWxsb2NhdGlvbiB3aGVuIFRIUF9TV0FQIGlzIGRpc2FibGVkLFxuLVx0XHQgKiB0aGUgY2FsbGVyIHNob3VsZCBzcGxpdCB0aGUgZm9saW8gYW5kIHRyeSBhZ2Fpbi5cbitcdFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZC4gQ2hlY2sgYmVsb3dcbitcdFx0ICogd2hldGhlciBzcGxpdHRpbmcgYW5kIHJldHJ5aW5nIGNhbiBtYWtlIHByb2dyZXNzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19USFBfU1dBUCkpXG4tXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4rXHRcdFx0Z290byBmYWlsZWQ7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEFsbG9jYXRpb24gc2l6ZSBzaG91bGQgbmV2ZXIgZXhjZWVkIGNsdXN0ZXIgc2l6ZVxuQEAgLTE3NTksNyArMTc2MSw3IEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2l6ZSBcdTAwM2UgU1dBUEZJTEVfQ0xVU1RFUikge1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRnb3RvIGZhaWxlZDtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTE3NzUsMTMgKzE3NzcsMjMgQEAgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdH1cbiBcbiBcdC8qIE5lZWQgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgYWxsb2NhdGlvbiBmYWlsZWQsIGZvciBNRU1DR19TV0FQX0ZBSUwuICovXG4tXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSlcbitcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKSB7XG4gXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbitcdFx0Z290byBmYWlsZWQ7XG4rXHR9XG4gXG4gXHRpZiAodW5saWtlbHkoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRnb3RvIGZhaWxlZDtcbiBcbiBcdHJldHVybiAwO1xuK1xuK2ZhaWxlZDpcbitcdGlmIChnZXRfbnJfc3dhcF9wYWdlcygpIFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIC1FTk9TUEM7XG4rXHRpZiAobWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oZm9saW8pIFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXR1cm4gb3JkZXIgPyAtRTJCSUcgOiAtRU5PTUVNO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBiZTZiZDI2ZThjNTc4Li43NTQzMzYwMzM2MTYwIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTI1OSw2ICsxMjU5LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHQgKi9cbiBcdFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4rXHRcdFx0aW50IHJldDtcbitcbiBcdFx0XHRpZiAoIShzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfSU8pKVxuIFx0XHRcdFx0Z290byBrZWVwX2xvY2tlZDtcbiBcdFx0XHRpZiAoZm9saW9fbWF5YmVfZG1hX3Bpbm5lZChmb2xpbykpXG5AQCAtMTI3NywxMSArMTI3OSwxNCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdFx0XHQgICAgc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAoZm9saW9fYWxsb2Nfc3dhcChmb2xpbykpIHtcbitcdFx0XHRyZXQgPSBmb2xpb19hbGxvY19zd2FwKGZvbGlvKTtcbitcdFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0XHRpbnQgX19tYXliZV91bnVzZWQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXG4gXHRcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuIFx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZF9zcGxpdDtcbitcdFx0XHRcdGlmIChyZXQgIT0gLUUyQklHKVxuK1x0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcbiBcdFx0XHRcdC8qIEZhbGxiYWNrIHRvIHN3YXAgbm9ybWFsIHBhZ2VzICovXG4gXHRcdFx0XHRpZiAoc3BsaXRfZm9saW9fdG9fbGlzdChmb2xpbywgZm9saW9fbGlzdCkpXG4gXHRcdFx0XHRcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTA6NTQuMjIyNzQ0MTMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI1Njk0MzM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBpbnRyb2R1Y2luZyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBzd2FwLCBzaGFyZWQgbWVtb3J5IChzaG1lbSksIGFuZCB0aGUgdmlydHVhbCBtZW1vcnkgc2Nhbm5lciAodm1zY2FuKS4gV2UgbmVlZCB0byBhbmFseXplIHRoaXMgcGF0Y2ggZm9yIGZ1enppbmcgdGFyZ2V0cyBiZWNhdXNlIGl0IGNoYW5nZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudC5cblxuSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBrZXkgYXJlYXMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW06IGBtbS9wYWdlX2NvdW50ZXIuY2AsIGBtbS9tZW1jb250cm9sLmNgLCBgbW0vc2htZW0uY2AsIGBtbS9zd2FwZmlsZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuIEltbWVkaWF0ZWx5LCBJIG5vdGljZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYXMgd2VsbCBhcyBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGBmb2xpb19hbGxvY19zd2FwYC4gVGhhdCBsYXN0IG9uZSBpcyBhIHJlZCBmbGFnLCBtZWFuaW5nIGl0IGlzIG1vcmUgdGhhbiBqdXN0IGEgYmVoYXZpb3JhbCBjaGFuZ2UuXG5cblByZXZpb3VzbHksIGBmb2xpb19hbGxvY19zd2FwYCByZXR1cm5lZCBhIGJvb2xlYW4sIG5vdyBpdCdzIGdvaW5nIHRvIHJldHVybiBhbiBpbnRlZ2VyIHdpdGggbXVsdGlwbGUgZXJyb3IgY29kZXMuIFNwZWNpZmljYWxseTogMCBvbiBzdWNjZXNzLCBgLUUyQklHYCAoc3BsaXR0aW5nIG1pZ2h0IGFsbG93IHN3YXBvdXQpLCBgLUVOT1NQQ2AgKG5vIGdsb2JhbCBzd2FwIHNwYWNlKSwgYW5kIGAtRU5PTUVNYCAoc3BsaXR0aW5nIHdvbid0IGhlbHApLiBUaGUgY2hhbmdlcyBpbiBgc2hyaW5rX2ZvbGlvX2xpc3RgIGFuZCBgc2htZW1fd3JpdGVvdXRgIGRlbW9uc3RyYXRlIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cbkxvb2tpbmcgYXQgYHNocmlua19mb2xpb19saXN0YCwgdGhlIHBhdGNoIGFsdGVycyB0aGUgZXJyb3IgaGFuZGxpbmcgZmxvdy4gSWYgYGZvbGlvX2FsbG9jX3N3YXBgIGZhaWxzIHdpdGggYW4gZXJyb3IgKm90aGVyKiB0aGFuIGAtRTJCSUdgLCBpdCAqc2tpcHMqIHRoZSBmb2xpbyBzcGxpdHRpbmcgcHJvY2VzcyBhbmQganVzdCBhY3RpdmF0ZXMgdGhlIGZvbGlvLCB3aGljaCBpcyBhIG1ham9yIGRpZmZlcmVuY2UgaW4gYmVoYXZpb3IuIFRoZSBzYW1lIGlzIHRydWUgaW4gYHNobWVtX3dyaXRlb3V0YCwgd2hlcmUgdGhlIGNvbmRpdGlvbnMgZm9yIHRyeWluZyB0byBzcGxpdCBmb2xpb3MgaGF2ZSBhbHNvIGNoYW5nZWQgdG8gY29uc2lkZXIgdGhlIHJldHVybiBjb2RlIGZyb20gYGZvbGlvX2FsbG9jX3N3YXBgLiBUaGlzIGlzIGEgYmlnIGRlYWwsIHdlIG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHRoZXNlIGNoYW5nZXMgdG8gZmluZCB0aGUgbW9zdCB2dWxuZXJhYmxlIHBvaW50cy5cblxuU28sIHdoZXJlIHNob3VsZCBteSBmb2N1cyBiZT8gSSdtIGdvaW5nIHRvIHdhbnQgdG8gcHJpb3JpdGl6ZSBmdXp6aW5nIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseTogYGZvbGlvX2FsbG9jX3N3YXBgLCBgc2htZW1fd3JpdGVvdXRgLCBgc2hyaW5rX2ZvbGlvX2xpc3RgLCBgcGFnZV9jb3VudGVyX21hcmdpbmAsIGFuZCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gLiBXYWl0LCBpcyBgc2hyaW5rX2ZvbGlvX2xpc3RgIHN0YXRpYz8gTGV0IG1lIGRvdWJsZS1jaGVjay4gWWVzLCBpdCBsb29rcyBsaWtlIGBzaG1lbV93cml0ZW91dGAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBgZm9saW9fYWxsb2Nfc3dhcGAgaXMgaW4gYG1tL3N3YXBmaWxlLmNgLCB3aGljaCBtYWtlcyBpdCBhdmFpbGFibGUgb3V0c2lkZSBpdHMgY29tcGlsYXRpb24gdW5pdC4gU28gYGZvbGlvX2FsbG9jX3N3YXBgIGlzIHRoZSBoaWdoIHByaW9yaXR5LiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBwcm9wYWdhdGVkIHRocm91Z2hvdXQgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NjUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMTowMy40Nzk2ODk4NzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NTMzMzM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHNobWVtX3dyaXRlb3V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9MTU1Nj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXFxuLS1cXG5tbS9zaG1lbS5jLTE2MDYtICovXFxubW0vc2htZW0uYzoxNjA3OmludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9zaG1lbS5jLTE2MDgtXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcXG4tLVxcbm1tL3N3YXAuaD00NjY9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBzd2FwX29wcyBzd2FwX2JkZXZfb3BzO1xcbm1tL3N3YXAuaC00NjctXFxubW0vc3dhcC5oOjQ2ODppbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vc3dhcC5oLTQ2OS1cXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MDUuODY1MDI5ODgzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyMjMxNTAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgTm9uLVN0YXRpYyBGdW5jdGlvbiBVc2FnZSBhbmQgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBzaG1lbV93cml0ZW91dGAsIGBmb2xpb19hbGxvY19zd2FwYCwgYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYC4gVGhleSdyZSBhbGwgZGVjbGFyZWQgbm9uLXN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBzY29wZSBhbmQgaG93IHRoZXkncmUgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC5cblxuTm93LCBsZXQncyBjb3JyZWxhdGUgdGhlc2UgZnVuY3Rpb25zIHdpdGggdGhlIEtjb25maWcgb3B0aW9ucy4gSSBzZWUgdGhhdCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gIGFuZCBgcGFnZV9jb3VudGVyX21hcmdpbmAgcmVxdWlyZSBgQ09ORklHX01FTUNHYC4gTWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlc2UgYXJlIGNsZWFybHkgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3Vwcy4gU2ltaWxhcmx5LCBgZm9saW9fYWxsb2Nfc3dhcGAgY2xlYXJseSBkZXBlbmRzIG9uIGBDT05GSUdfU1dBUGAgZm9yLCB3ZWxsLCBzd2FwcGluZyBmdW5jdGlvbmFsaXR5LiBGaW5hbGx5LCBgc2htZW1fd3JpdGVvdXRgIG5lZWRzIGBDT05GSUdfU0hNRU1gLlxuXG5JbnRyaWd1aW5nbHksIGBDT05GSUdfVEhQX1NXQVBgIGFsc28gcG9wcyB1cCBpbiB0aGUgY29udGV4dCBvZiBgZm9saW9fYWxsb2Nfc3dhcGAuIFRoYXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYXMgaXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uIG1heSBoYXZlIHNvbWUgc3BlY2lmaWMgYmVoYXZpb3Igb3Igb3B0aW1pemF0aW9uIGluIHJlbGF0aW9uIHRvIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgYW5kIHN3YXAgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgdGhlaXIgaW50ZXJhY3Rpb24uIFRoaXMgaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGVpciByb2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0cyBvbiBzeXN0ZW0gY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyNSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMTowOS44ODczNDkxNDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMjYwNzgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeY29uZmlnIFRIUF9TV0FQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9OTY4PWVuZGNob2ljZVxcbm1tL0tjb25maWctOTY5LVxcbm1tL0tjb25maWc6OTcwOmNvbmZpZyBUSFBfU1dBUFxcbm1tL0tjb25maWctOTcxLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MTIuMTg5OTYzMzc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0NTUyMjY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqVEhQX1NXQVA6IEEgRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBgVEhQX1NXQVBgIGlzIGRlZmluZWQgYXMgYSBib29sZWFuIChgZGVmX2Jvb2wgeWApLiBUaGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlIHJlYWwgbWVhdCBsaWVzIGluIHRoZSAqZGVwZW5kZW5jaWVzKi4gSXQncyBjcml0aWNhbGx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgaXMgc2V0IHVwIHRoaXMgd2F5LiBJdCdzIGEga2V5IHBhcnQgb2YgdGhlIGRlc2lnbi5cblxuRmlyc3QsIHRoZSBkZXBlbmRlbmN5IG9uIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgbWFrZXMgcGVyZmVjdCBzZW5zZS4gV2UncmUgdGFsa2luZyBhYm91dCBzd2FwcGluZyAqdHJhbnNwYXJlbnQqIGh1Z2UgcGFnZXMgaGVyZSwgc28gY2xlYXJseSBUSFAgc3VwcG9ydCBoYXMgdG8gYmUgZW5hYmxlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIFlvdSBjYW4ndCBzd2FwIHNvbWV0aGluZyB0aGF0IGRvZXNuJ3QgZXhpc3QsIHJpZ2h0P1xuXG5BbmQgdGhlbiwgb2YgY291cnNlLCB0aGUgZGVwZW5kZW5jeSBvbiBgU1dBUGAuIFRoYXQncyB0aGUgKm9idmlvdXMqIG9uZS4gV2h5IGV2ZW4gYm90aGVyIHdpdGggdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpZiB5b3UgYXJlIG5vdCB1c2luZyBzd2FwIHNwYWNlIGluIHRoZSBmaXJzdCBwbGFjZT8gSXQncyB0aGUgcHJlLXJlcXVpc2l0ZSwgdGhlIGZvdW5kYXRpb25hbCBhc3BlY3QgdGhpcyBvcHRpb24gYnVpbGRzIG9uLiBJdCdzIGxpa2UgYXNraW5nIFwiQ2FuIEkgY29uZmlndXJlIHRoZSBkb29yIGlmIEkgZG9uJ3QgaGF2ZSBhIGhvdXNlP1wiLlxuXG5UaGVzZSBkZXBlbmRlbmNpZXMgYXJlIHRoZSBjb25zdHJhaW50cywgdGhleSBhcmUgdGhlIGFyY2hpdGVjdHVyYWwgY2hvaWNlcyB0aGF0IGRldGVybWluZSBob3cgdGhlIHN5c3RlbSBiZWhhdmVzLiBXZSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZXNlIGNvbnN0cmFpbnRzIHdoZW4gdHVuaW5nIHRoZSBrZXJuZWwuIFdlIG11c3QgZW5zdXJlIHRoZXNlIGFyZSBjb3JyZWN0IGJlZm9yZSBlbmFibGluZyBvciBkaXNhYmxpbmcgb3B0aW9ucy4gR29vZC4gTWFrZXMgc2Vuc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NjAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMToxNS41MzU0ODg4MzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyODQzOTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FyYy9LY29uZmlnPTMwMz1jaG9pY2VcXG5hcmNoL2FyYy9LY29uZmlnLTMwNC1cXHRwcm9tcHQgXFxcIk1NVSBTdXBlciBQYWdlIFNpemVcXFwiXFxuYXJjaC9hcmMvS2NvbmZpZzozMDU6XFx0ZGVwZW5kcyBvbiBJU0FfQVJDVjIgXFx1MDAyNlxcdTAwMjYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5hcmNoL2FyYy9LY29uZmlnLTMwNi1cXHRkZWZhdWx0IEFSQ19IVUdFUEFHRV8yTVxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTI0MTI9Y29uZmlnIEFSTTY0X0NPTlRQVEVcXG5hcmNoL2FybTY0L0tjb25maWctMjQxMy1cXHRib29sIFxcXCJDb250aWd1b3VzIFBURSBtYXBwaW5ncyBmb3IgdXNlciBtZW1vcnlcXFwiIGlmIEVYUEVSVFxcbmFyY2gvYXJtNjQvS2NvbmZpZzoyNDE0OlxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5hcmNoL2FybTY0L0tjb25maWctMjQxNS1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvZGF4L0tjb25maWc9OD1jb25maWcgREVWX0RBWFxcbmRyaXZlcnMvZGF4L0tjb25maWctOS1cXHR0cmlzdGF0ZSBcXFwiRGV2aWNlIERBWDogZGlyZWN0IGFjY2VzcyBtYXBwaW5nIGRldmljZVxcXCJcXG5kcml2ZXJzL2RheC9LY29uZmlnOjEwOlxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5kcml2ZXJzL2RheC9LY29uZmlnLTExLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaHYvS2NvbmZpZz04OT1jb25maWcgTVNIVl9WVExcXG4tLVxcbmRyaXZlcnMvaHYvS2NvbmZpZy05NS1cXHQjIHNwZWNpYWxseSB3aXRoIGxhcmdlIG1lbW9yeSByZXF1aXJlbWVudHMuXFxuZHJpdmVycy9odi9LY29uZmlnOjk2OlxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5kcml2ZXJzL2h2L0tjb25maWctOTctXFx0IyBNVFJScyBhcmUgY29udHJvbGxlZCBieSBWVEwwLCBhbmQgYXJlIG5vdCBzcGVjaWZpYyB0byBpbmRpdmlkdWFsIFZUTHMuXFxuLS1cXG5mcy9LY29uZmlnPTkwPWNvbmZpZyBGU19EQVhfUE1EXFxuLS1cXG5mcy9LY29uZmlnLTk0LVxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5mcy9LY29uZmlnOjk1OlxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5mcy9LY29uZmlnLTk2LVxcbi0tXFxubGliL0tjb25maWcuZGVidWc9MzMyNz1jb25maWcgVEVTVF9ITU1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI4LVxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxubGliL0tjb25maWcuZGVidWc6MzMyOTpcXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubGliL0tjb25maWcuZGVidWctMzMzMC1cXHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXFxuLS1cXG5tbS9LY29uZmlnPTgxNT1jb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG5tbS9LY29uZmlnLTgxNi1cXHRib29sIFxcXCJBbGxvY2F0ZSBhIFBNRCBzaXplZCBmb2xpbyBmb3IgemVyb2luZ1xcXCJcXG5tbS9LY29uZmlnOjgxNzpcXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MTgtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz04MzQ9bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODM1LVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxubW0vS2NvbmZpZzo4MzY6XFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG5tbS9LY29uZmlnLTgzNy1cXHRzZWxlY3QgQ09NUEFDVElPTlxcbi0tXFxubW0vS2NvbmZpZz0xMDE2PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQXFxubW0vS2NvbmZpZy0xMDE3LVxcdGRlZl9ib29sIG5cXG5tbS9LY29uZmlnOjEwMTg6XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctMTAxOS1cXG5tbS9LY29uZmlnPTEwMjA9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUFxcbm1tL0tjb25maWctMTAyMS1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzoxMDIyOlxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUCBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTEwMjMtXFxubW0vS2NvbmZpZz0xMDI0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVBcXG5tbS9LY29uZmlnLTEwMjUtXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6MTAyNjpcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVAgXFx1MDAyNlxcdTAwMjYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL0tjb25maWctMTAyNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MTcuODYzOTM2Mjc0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwMTEwNjQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipUSFBfU1dBUCBEZXBlbmRlbmN5IEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYFRIUF9TV0FQYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdHMgZnVuY3Rpb25hbGl0eSBpcyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byB0d28ga2V5IHVuZGVybHlpbmcgZmVhdHVyZXMuIEZpcnN0LCBhbmQgb2J2aW91c2x5LCBpdCdzIGRlcGVuZGVudCBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGJlaW5nIGVuYWJsZWQuIE5vIGh1Z2VwYWdlcywgbm8gc3dhcHBpbmcgdGhvc2UgaHVnZXBhZ2VzLCByaWdodD8gVGhhdCdzIHRoZSBjb3JlIHByZW1pc2UuIEJ1dCBpdCdzIG5vdCBqdXN0IHRoYXQ7IGl0IGFsc28gcmVsaWVzIGRpcmVjdGx5IG9uIHRoZSBzdGFuZGFyZCBgU1dBUGAgbWVjaGFuaXNtIGJlaW5nIGluIHBsYWNlLiBXaXRob3V0IHRoZSBhYmlsaXR5IHRvIHN3YXAgbWVtb3J5IG91dCB0byBkaXNrIGluIHRoZSBmaXJzdCBwbGFjZSwgdGhlcmUncyBub3RoaW5nIGZvciBgVEhQX1NXQVBgIHRvIHdvcmsgd2l0aCwgdG8gZXh0ZW5kIHRoZSB1c3VhbCBzd2FwIG1lY2hhbmlzbSBmb3IgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLiBJdOKAmXMgYnVpbHQgb24gdGhhdCBmb3VuZGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDM1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MjEuNTY1MDQ3MDJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjA5NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUSFBfU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9OTY4PWVuZGNob2ljZVxcbm1tL0tjb25maWctOTY5LVxcbm1tL0tjb25maWc6OTcwOmNvbmZpZyBUSFBfU1dBUFxcbm1tL0tjb25maWctOTcxLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MjEuNjA5NjYxMjk5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjUxOTg2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIFRIUF9TV0FQIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYFRIUF9TV0FQYC4gSXQgc2VlbXMgbGlrZSBJIG5lZWQgdG8gZGlzc2VjdCB0aGUgY29tcG9uZW50cyBjb25uZWN0ZWQgdG8gYFRIUF9TV0FQYCwgc28gSSBjYW4gc2VlIHdoYXQgaW5mbHVlbmNlcyBpdHMgZnVuY3Rpb25hbGl0eS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIGRhdGEgc3RydWN0dXJlcywgb3IgaGFyZHdhcmUgY29uc2lkZXJhdGlvbnMgZmFjdG9yIGludG8gaXRzIGJlaGF2aW9yLiBBcmUgdGhlcmUgYW55IG90aGVyIGtlcm5lbCBmZWF0dXJlcyB0aGF0IHJlbHkgb24gdGhlIGV4aXN0ZW5jZSBvZiBgVEhQX1NXQVBgIG9yLCBjb252ZXJzZWx5LCB0aGF0IGBUSFBfU1dBUGAgcmVsaWVzIG9uIGZvciBjb3JyZWN0IG9wZXJhdGlvbj8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHJlbGF0ZWQgc291cmNlIGNvZGUgdG8gZ2FpbiBpbnNpZ2h0IGludG8gdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZmVhdHVyZXMuIEknbSBnb2luZyB0byBkZXRlcm1pbmUgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLCBhbnkgaW1wbGljYXRpb25zIGZvciBzd2FwIHNwYWNlIG1hbmFnZW1lbnQsIGFuZCBwZXJmb3JtYW5jZSBpbXBhY3RzLiBNeSBnb2FsIGlzIHRvIHBhaW50IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgbGFuZHNjYXBlIHN1cnJvdW5kaW5nIGBUSFBfU1dBUGAsIGJlY2F1c2UsIHVsdGltYXRlbHksIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyB2aXRhbCBmb3IgbWFraW5nIGluZm9ybWVkIGRlY2lzaW9ucyBhYm91dCBob3cgaXQncyB1c2VkIG9yIHBvdGVudGlhbGx5IG1vZGlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzI2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MjQuOTM0ODYzNzI3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk2NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk2NTpcXHRcXHQgIGFwcGxpY2F0aW9ucyBzdXBwbHkgdGhlIG1hZHZpc2UoTUFEVl9IVUdFUEFHRSkgaGludC5cXG4gOTY2OlxcdFxcdCAgVGhpcyBlbnN1cmVzIHRoYXQgaHVnZXBhZ2VzIGFyZSB1c2VkIG9ubHkgaW4gcmVzcG9uc2UgdG8gZXhwbGljaXRcXG4gOTY3OlxcdFxcdCAgcmVxdWVzdHMgZnJvbSBhcHBsaWNhdGlvbnMuXFxuIDk2ODpcXHRlbmRjaG9pY2VcXG4gOTY5OlxcdFxcbiA5NzA6XFx0Y29uZmlnIFRIUF9TV0FQXFxuIDk3MTpcXHRcXHRkZWZfYm9vbCB5XFxuIDk3MjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfV0FOVFNfVEhQX1NXQVAgXFx1MDAyNlxcdTAwMjYgU1dBUCBcXHUwMDI2XFx1MDAyNiA2NEJJVFxcbiA5NzM6XFx0XFx0aGVscFxcbiA5NzQ6XFx0XFx0ICBTd2FwIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgaW4gb25lIHBpZWNlLCB3aXRob3V0IHNwbGl0dGluZy5cXG4gOTc1OlxcdFxcdCAgWFhYOiBGb3Igbm93LCBzd2FwIGNsdXN0ZXIgYmFja2luZyB0cmFuc3BhcmVudCBodWdlIHBhZ2VcXG4gOTc2OlxcdFxcdCAgd2lsbCBiZSBzcGxpdCBhZnRlciBzd2Fwb3V0LlxcbiA5Nzc6XFx0XFxuIDk3ODpcXHRcXHQgIEZvciBzZWxlY3Rpb24gYnkgYXJjaGl0ZWN0dXJlcyB3aXRoIHJlYXNvbmFibGUgVEhQIHNpemVzLlxcbiA5Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjExOjI0LjkzNTEwNDE3N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ3MDQ1Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXMsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3aG8gd29ya3Mgd2l0aCB0aGlzIGNvZGU6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBUSFBfU1dBUCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBUSFBfU1dBUGAgaGluZ2VzIG9uIGBBUkNIX1dBTlRTX1RIUF9TV0FQYCwgYFNXQVBgLCBhbmQgdGhlIHN5c3RlbSBiZWluZyA2NC1iaXQuIE1ha2VzIHNlbnNlLiBXZSdyZSB0YWxraW5nIGFib3V0IHN3YXBwaW5nIG91dCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzLCBzbyBzd2FwIGFuZCBhIDY0LWJpdCBhcmNoaXRlY3R1cmUgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGVzLiBJIHNob3VsZCBkZWZpbml0ZWx5IGVuc3VyZSB0aGF0IGBTV0FQYCwgYE1FTUNHYCwgYFNITUVNYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIGFsbCBlbmFibGVkIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBUaGF0IGZlZWxzIGxpa2UgYSBzb2xpZCBmb3VuZGF0aW9uLlxuXG5Ob3csIHdhaXQgYSBzZWNvbmQuLi4gdGhlcmUncyB0aGUgYHBhZ2VfY291bnRlcl9tYXJnaW5gIHZhcmlhYmxlLiBJIHJlbWVtYmVyIHRoYXQncyBkZWZpbmVkIGluIGBtbS9wYWdlX2NvdW50ZXIuY2AuIE15IG1pbmQgaXMgZHJpZnRpbmcgYmFjayBpbnRvIHRoZSB3ZWVkcyBhIGJpdC4gSXMgdGhhdCBmaWxlLCBgbW0vcGFnZV9jb3VudGVyLmNgLCBhY3R1YWxseSBiZWluZyBjb21waWxlZCB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzICpvbio/IFRoYXQncyBhIGNydWNpYWwgY3Jvc3MtZGVwZW5kZW5jeSB0byBjaGVjazsgYSBzdWJ0bGUgcG9pbnQgdGhhdCBjb3VsZCBiZSBhIHBvdGVudGlhbCBnb3RjaGEgYW5kIHdpbGwgaW5mbHVlbmNlIHRoZSBjb25maWd1cmF0aW9uIEkgbGFuZCBvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gVGhhdCdzIGEgcG9pbnQgb2YgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgzNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MjguODgyMTUzODg2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA3NjY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX2NvdW50ZXIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDE9b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlOjEwMjpvYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcbm1tL01ha2VmaWxlLTEwMy1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MjguOTI3MjM0MTU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTQ0MjA5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodHMsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBvZiBDT05GSUdfUEFHRV9DT1VOVEVSIG9uIE1FTUNHKipcblxuT2theSwgc28gYENPTkZJR19QQUdFX0NPVU5URVJgIGlzIGJlaW5nIHNlbGVjdGVkIGJ5IGBNRU1DR2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldlbGwsIHRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZSwgYnV0IGxldCdzIGJyZWFrIGRvd24gKndoeSouXCIgVGhpcyBpbXBsaWVzIGEgY3JpdGljYWwgZGVwZW5kZW5jeSwgbGlrZWx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgYWNjb3VudGluZyBhbmQgY29udHJvbC4gU3BlY2lmaWNhbGx5LCB0aGUga2VybmVsIG5lZWRzIHRvIHRyYWNrIHBhZ2UgdXNhZ2UgaW4gYSBncmFudWxhciB3YXksIGFuZCBgTUVNQ0dgIChNZW1vcnkgQ29udHJvbCBHcm91cHMpIGFyZSB0aGUgbWVjaGFuaXNtIGJ5IHdoaWNoIHdlJ3JlICpjb250cm9sbGluZyogbWVtb3J5IGFsbG9jYXRpb24gYW5kIHVzYWdlIGFtb25nc3QgZ3JvdXBzIG9mIHByb2Nlc3Nlcy5cblxuVGhlcmVmb3JlLCBgQ09ORklHX1BBR0VfQ09VTlRFUmAncyBhY3RpdmF0aW9uIHByb2JhYmx5IHByb3ZpZGVzIHRoZSBjb3JlIGluZnJhc3RydWN0dXJlIGZvciBgTUVNQ0dgIHRvIGRvIGl0cyBqb2IgZWZmZWN0aXZlbHkuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhhdCBgUEFHRV9DT1VOVEVSYCBpcyBlbmFibGluZyBwZXItY2dyb3VwIHBhZ2UgYWNjb3VudGluZywgYWxsb3dpbmcgYE1FTUNHYCB0byBhY2N1cmF0ZWx5IGVuZm9yY2UgaXRzIG1lbW9yeSBsaW1pdHMsIHRyYWNrIG1lbW9yeSB1c2FnZSwgYW5kIHRyaWdnZXIgb3ZlcmNvbW1pdCBoYW5kbGluZyBvciByZXNvdXJjZSByZWNsYW1hdGlvbiB3aGVuIGEgY2dyb3VwIGV4Y2VlZHMgaXRzIGFzc2lnbmVkIHF1b3RhLiBXaXRob3V0IHRoaXMgZmVhdHVyZSwgdGhlIGFiaWxpdHkgdG8gaXNvbGF0ZSBhbmQgbWFuYWdlIG1lbW9yeSB3b3VsZCBiZSBzaWduaWZpY2FudGx5IGhhbXBlcmVkLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hlcmUgdGhpcyBjb3VudGVyIGlzIHVzZWQgaW4gdGhlIGBNRU1DR2AgY29kZWJhc2U7IEknZCBzdXNwZWN0IHRoYXQgaXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGNvcmUgYWNjb3VudGluZyBzdHJ1Y3R1cmVzIGFuZCB0aGUgbWVtb3J5IHJlY2xhaW0gbWVjaGFuaXNtLiBUaGUgZmFjdCB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGlzIGhhcmQtbGlua2VkIGlzIGEgY2x1ZTsgaXQncyBjZW50cmFsIHRvIHRoZSBvcGVyYXRpb24gb2YgYE1FTUNHYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMzMSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjExOjMyLjc4MTY1ODQxNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MDQ2OTk3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFHRV9DT1VOVEVSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDYyPWlmIENHUk9VUFNcXG5pbml0L0tjb25maWctMTA2My1cXG5pbml0L0tjb25maWc6MTA2NDpjb25maWcgUEFHRV9DT1VOVEVSXFxuaW5pdC9LY29uZmlnLTEwNjUtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMTozNC4zNjIxMzM0NTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxNDQzNTM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbWVtY29udHJvbC5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIG1lbW9yeSBjb250cm9sIG1lY2hhbmlzbSBpcyBiZWhhdmluZywgc28gdGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gYG1lbWNvbnRyb2wuY2AuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCBwb3RlbnRpYWxseSwgdGhlIG1hbmFnZW1lbnQgb2YgbWVtb3J5IHJlc291cmNlcyB3aXRoaW4gdGhpcyBjb21wb25lbnQuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciB0aGUgYmVoYXZpb3IgSSdtIG9ic2VydmluZy4gSXTigJlzIGxpa2VseSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYW55IHNwZWNpZmljIG1lbW9yeSBsaW1pdGluZyBvciBhY2NvdW50aW5nIHdvdWxkIGJlIGNlbnRyYWxpemVkIHRoZXJlIGFzIHdlbGwuIExldOKAmXMgc2VlIHdoYXQgc3VycHJpc2VzIGl0IGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzI2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6MzkuMDc2NTcxNDkyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI2NDQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jb250cm9sLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxcbm1tL01ha2VmaWxlOjI4OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gblxcbm1tL01ha2VmaWxlLTI5LUtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxcbi0tXFxubW0vTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19NRU1DR19WMSkgKz0gbWVtY29udHJvbC12MS5vXFxubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DRykgKz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xcbm1tL01ha2VmaWxlLTEwNi1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSArPSBicGZfbWVtY29udHJvbC5vXFxubW0vTWFrZWZpbGUtMTA4LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjExOjM5LjEyMTg0NTA1MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODM2MzM1MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbiBhbmQgU3dhcCBGaWxlIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIHByZXR0eSBjbGVhcjogYENPTkZJR19NRU1DR2AgaXMgZGVmaW5pdGVseSByZXF1aXJlZCBoZXJlLiBObyBpZnMsIGFuZHMsIG9yIGJ1dHMgYWJvdXQgaXQuIFRoaXMgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIGhhdmluZyBNZW1vcnkgQ29udHJvbCBHcm91cHMgZW5hYmxlZC5cblxuQW5kIHRoZW4gdGhlcmUncyBgZm9saW9fYWxsb2Nfc3dhcGAuIEkgbmVlZCB0byByZW1lbWJlciB3aGVyZSB0aGF0IGlzIGRlZmluZWQuIEFoLCByaWdodCwgaXQncyBidXJpZWQgaW4gYG1tL3N3YXBmaWxlLmNgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBzd2FwIGZpbGUgYWxsb2NhdGlvbiBsb2dpYyByZXNpZGVzLiBUaGF0IG1lYW5zIGFueSBpbnZlc3RpZ2F0aW9uIG9yIG1vZGlmaWNhdGlvbiByZWxhdGVkIHRvIHRoYXQgZnVuY3Rpb24sIG9yIGl0cyByZWxhdGVkIHN0cnVjdHVyZXMsIHdpbGwgdGFrZSBwbGFjZSBpbiB0aGF0IGZpbGUuIFRoYXQgaGVscHMgbmFycm93IHRoaW5ncyBkb3duIGNvbnNpZGVyYWJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMDIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMTo0MS45NTgxODMwNjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODQ4ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBmaWxlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NzY9ZW5kaWZcXG5tbS9NYWtlZmlsZS03Ny1cXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZS03OS1vYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMTo0Mi4wMDQwMzgwMDJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyOTYzMTg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBNZW1vcnkgV3JpdGVvdXQqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBpdCBsb29rcyBsaWtlIGBDT05GSUdfU1dBUGAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50IGhlcmUuIFRoYXQncyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBlbmFibGVkOyBpdCB3aWxsIGFmZmVjdCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHN3YXBwaW5nLlxuXG5Ob3csIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGUgZnVuY3Rpb24gYHNobWVtX3dyaXRlb3V0YC4gSSByZWNhbGwgSSd2ZSB1c2VkIHRoaXMgcm91dGluZSBiZWZvcmUuIExldCBtZSBjaGVjayB0aGUgY29kZS4gQWggeWVzISBUaGUgYHNobWVtX3dyaXRlb3V0YCBmdW5jdGlvbuKApiBJIHJlbWVtYmVyLiBJdCByZXNpZGVzIGluIGBtbS9zaG1lbS5jYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEl0J3MgaW4gdGhlIHNoYXJlZCBtZW1vcnkgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMTo0NS4wMzM2NzMwMDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzI1NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTUzLVxcdFxcdFxcdCAgIHJlYWRhaGVhZC5vIGZvbGlvLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1NDpcXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG5tbS9NYWtlZmlsZS01NS1cXHRcXHRcXHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjExOjQ1LjA3ODQwNDkyOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjEyOTY1Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggc3lzdGVtIGludGVybmFscyBhbmQga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqQW5hbHl6aW5nIHRoZSBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMgb2YgYHNobWVtLm9gIGFuZCBgc2htZW1fd3JpdGVvdXRgKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGUgc2hhcmVkIG1lbW9yeSAoc2htZW0pIHN1YnN5c3RlbS4gSXQncyBjbGVhciB0aGF0IGBzaG1lbS5vYCwgdGhlIGNvcmUgc2htZW0gb2JqZWN0IGZpbGUsICphbHdheXMqIGdldHMgY29tcGlsZWQuIFRoYXQncyB0aGUgZm91bmRhdGlvbiwgdGhlIGJhc2UgZnVuY3Rpb25hbGl0eS4gTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5Ib3dldmVyLCB3aGVuIEkgY29uc2lkZXIgYHNobWVtX3dyaXRlb3V0YCwgdGhpbmdzIGdldCBhIGxpdHRsZSBtb3JlIG51YW5jZWQuIEl0IHNlZW1zIHRoZSBjb21waWxhdGlvbiBvZiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uIG9yIG9iamVjdCBmaWxlIGlzIGNvbmRpdGlvbmFsLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgaXRzIGluY2x1c2lvbiBpbiB0aGUgYnVpbGQgaXMgZGVwZW5kZW50IG9uIGNlcnRhaW4ga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBiZWluZyBlbmFibGVkLiBTcGVjaWZpY2FsbHksIEknZCBiZXQgaXQncyBnYXRlZCBieSBlaXRoZXIgYENPTkZJR19TV0FQYCBvciBgQ09ORklHX1NITUVNYCwgb3IgcGVyaGFwcyBldmVuIGJvdGguIEl0IG1ha2VzIHNlbnNlLCByaWdodD8gYHNobWVtX3dyaXRlb3V0YCBwcm9iYWJseSBoYW5kbGVzIHRoZSBzcGlsbGluZyBvciB3cml0aW5nIG91dCBvZiBzaG1lbSBwYWdlcywgd2hpY2ggd291bGQgb25seSBiZSByZWxldmFudCBpZiBlaXRoZXIgc3dhcCBzcGFjZSBpcyB1c2VkIChgQ09ORklHX1NXQVBgKSAqb3IqIHRoZSBzaG1lbSBmdW5jdGlvbmFsaXR5IGl0c2VsZiBpcyBlbmFibGVkIGFuZCBjb25maWd1cmVkICggYENPTkZJR19TSE1FTWApLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtLCBidXQgdGhhdCdzIG15IHdvcmtpbmcgdGhlb3J5IGJhc2VkIG9uIGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzQwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6NDkuNjkxMzczMzQ2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ1MzQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaG1lbV93cml0ZW91dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaG1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9NDc9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udCBfX3JvX2FmdGVyX2luaXQ7XFxuLS1cXG5tbS9zaG1lbS5jLTEwMS0vKlxcbm1tL3NobWVtLmM6MTAyOiAqIHNobWVtX2ZhbGxvY2F0ZSBjb21tdW5pY2F0ZXMgd2l0aCBzaG1lbV9mYXVsdCBvciBzaG1lbV93cml0ZW91dCB2aWFcXG5tbS9zaG1lbS5jLTEwMy0gKiBpbm9kZS1cXHUwMDNlaV9wcml2YXRlICh3aXRoIGlfcndzZW0gbWFraW5nIHN1cmUgdGhhdCBpdCBoYXMgb25seSBvbmUgdXNlciBhdFxcbi0tXFxubW0vc2htZW0uYz00MTQ9c3RhdGljIHZvaWQgc2htZW1fZnJlZV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzaXplX3QgZnJlZWRfaXNwYWNlKVxcbi0tXFxubW0vc2htZW0uYy00MzUtICpcXG5tbS9zaG1lbS5jOjQzNjogKiBSZXR1cm46IHRydWUgaWYgc3dhcHBlZCB3YXMgaW5jcmVtZW50ZWQgZnJvbSAwLCBmb3Igc2htZW1fd3JpdGVvdXQoKS5cXG5tbS9zaG1lbS5jLTQzNy0gKi9cXG5tbS9zaG1lbS5jPTQzOD1ib29sIHNobWVtX3JlY2FsY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGFsbG9jZWQsIGxvbmcgc3dhcHBlZClcXG4tLVxcbm1tL3NobWVtLmMtNDUxLVxcdCAqIGFmdGVyIGlfbWFwcGluZy1cXHUwMDNlbnJwYWdlcyBoYXMgYWxyZWFkeSBiZWVuIGFkanVzdGVkICh1cCBvciBkb3duKSxcXG5tbS9zaG1lbS5jOjQ1MjpcXHQgKiBzaG1lbV93cml0ZW91dCgpIGhhcyB0byByYWlzZSBzd2FwcGVkIGJlZm9yZSBucnBhZ2VzIGlzIGxvd2VyZWQgLVxcbm1tL3NobWVtLmMtNDUzLVxcdCAqIHRvIHN0b3AgYSByYWNpbmcgc2htZW1fcmVjYWxjX2lub2RlKCkgZnJvbSB0aGlua2luZyB0aGF0IGEgcGFnZSBoYXNcXG4tLVxcbm1tL3NobWVtLmM9MTU1Nj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXFxuLS1cXG5tbS9zaG1lbS5jLTE1OTktLyoqXFxubW0vc2htZW0uYzoxNjAwOiAqIHNobWVtX3dyaXRlb3V0IC0gV3JpdGUgdGhlIGZvbGlvIHRvIHN3YXBcXG5tbS9zaG1lbS5jLTE2MDEtICogQGN0eDogc3dhcCBJL08gY29udGV4dFxcbi0tXFxubW0vc2htZW0uYy0xNjA2LSAqL1xcbm1tL3NobWVtLmM6MTYwNzppbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vc2htZW0uYy0xNjA4LVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS9zaG1lbS5jLTE3NDMtXFx0XFx0ICogYnV0IEknbSBhIGxpdHRsZSBuZXJ2b3VzIGFib3V0IGxldHRpbmcgdGhpcyBmb2xpbyBvdXQgb2ZcXG5tbS9zaG1lbS5jOjE3NDQ6XFx0XFx0ICogc2htZW1fd3JpdGVvdXQoKSBpbiBhIGh5YnJpZCBoYWxmLXRtcGZzLWhhbGYtc3dhcCBzdGF0ZVxcbm1tL3NobWVtLmMtMTc0NS1cXHRcXHQgKiBlLmcuIGZvbGlvX21hcHBpbmcoZm9saW8pIG1pZ2h0IGdpdmUgYW4gdW5leHBlY3RlZCBhbnN3ZXIuXFxuLS1cXG5tbS9zaG1lbS5jPTE3NTc9aW50IHNobWVtX3dyaXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zaG1lbS5jLTE3NjEtXFxubW0vc2htZW0uYzoxNzYyOlxcdGVyciA9IHNobWVtX3dyaXRlb3V0KFxcdTAwMjZjdHgsIGZvbGlvLCBOVUxMKTtcXG5tbS9zaG1lbS5jLTE3NjMtXFx0c3dhcF93cml0ZV9zdWJtaXQoXFx1MDAyNmN0eCk7XFxuLS1cXG5tbS9zaG1lbS5jPTM2MjQ9c3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcXG4tLVxcbm1tL3NobWVtLmMtMzc2MC1cXHRcXHQvKlxcbm1tL3NobWVtLmM6Mzc2MTpcXHRcXHQgKiBJbmZvcm0gc2htZW1fd3JpdGVvdXQoKSBob3cgZmFyIHdlIGhhdmUgcmVhY2hlZC5cXG5tbS9zaG1lbS5jLTM3NjItXFx0XFx0ICogTm8gbmVlZCBmb3IgbG9jayBvciBiYXJyaWVyOiB3ZSBoYXZlIHRoZSBwYWdlIGxvY2suXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjExOjQ5LjczNDg0MDU0NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQxMzkxNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBTd2FwIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBnZXQgcmlnaHQgdG8gaXQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGUgYHNobWVtX3dyaXRlb3V0YCBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX1NXQVBgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgYSBjcml0aWNhbCBvbmUgZm9yIG15IHdvcmssIHNvIEknbGwgZ28gdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBhbmQgZmluZCB0aGF0IG1hY3JvLiBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCB0byB1c2Ugc3dhcCBzcGFjZS4gVGhpcyBjaGVjayBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgc2hhcmVkIG1lbW9yeSBzeXN0ZW0gaW4gZGlmZmVyZW50IGtlcm5lbCBidWlsZHMgYW5kIGtub3dpbmcgaG93IGl0IGhhbmRsZXMgbWVtb3J5IHByZXNzdXJlLiBUaW1lIHRvIGRpdmUgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODg4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6NTIuNjc2MjM1Mjg0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDI5MDU3OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWZkZWYgQ09ORklHX1NXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6NTIuNzIwNTM2NzEzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjU0NjY5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgVGVtcG9yYXJ5IEZpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGVtcG9yYXJ5IGZpbGUgc3lzdGVtcyBhcmUgY29uZmlndXJlZCBpbiB0aGlzIHBhcnRpY3VsYXIgZW52aXJvbm1lbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBjaGVjayBpZiBlaXRoZXIgYENPTkZJR19UTVBGU2Agb3IgYENPTkZJR19TSE1FTWAgYXJlIGVuYWJsZWQuIFRoZXNlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMsIGFuZCBpZiBlaXRoZXIgaXMgZW5hYmxlZCwgaXQnbGwgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBpbi1tZW1vcnkgZmlsZSBzdG9yYWdlLiBUaGF0IHNob3VsZCBwcm92aWRlIGEgY3J1Y2lhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiBmb3IgYWRkcmVzc2luZyB3aGF0ZXZlciBsYXJnZXIgaXNzdWUgaXMgYXQgaGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwODQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMTo1NS45NDYwMDgxNDNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjQ5MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19TSE1FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaG1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9NDc9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udCBfX3JvX2FmdGVyX2luaXQ7XFxubW0vc2htZW0uYy00OC1cXG5tbS9zaG1lbS5jOjQ5OiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9zaG1lbS5jLTUwLS8qXFxuLS1cXG5tbS9zaG1lbS5jPTU3MjM9X19zZXR1cChcXFwidGhwX3NobWVtPVxcXCIsIHNldHVwX3RocF9zaG1lbSk7XFxuLS1cXG5tbS9zaG1lbS5jLTU3MjYtXFxubW0vc2htZW0uYzo1NzI3OiNlbHNlIC8qICFDT05GSUdfU0hNRU0gKi9cXG5tbS9zaG1lbS5jLTU3MjgtXFxuLS1cXG5tbS9zaG1lbS5jPTU3OTY9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbm1tL3NobWVtLmMtNTgwMy1cXG5tbS9zaG1lbS5jOjU4MDQ6I2VuZGlmIC8qIENPTkZJR19TSE1FTSAqL1xcbm1tL3NobWVtLmMtNTgwNS1cXG4tLVxcbm1tL3NobWVtLmM9NTk1OD1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vc2htZW0uYy01OTYwLXtcXG5tbS9zaG1lbS5jOjU5NjE6I2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL3NobWVtLmMtNTk2Mi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cXHUwMDNlaG9zdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTE6NTUuOTkwNjYyNjUyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjIxOTYwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgU0hNRU0gQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gVGhlIGBzaG1lbV93cml0ZW91dGAgZnVuY3Rpb27igKYgbGluZSAxNjA3LCBnb3QgaXQuIEhtbSwgdGhhdCdzIGluc2lkZSBhbiBgI2lmZGVmIENPTkZJR19TSE1FTWAgYmxvY2suIE9rYXksIHNvIGl0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZC4gTm93LCAqQ09ORklHX1NITUVNKiBpcyB1c3VhbGx5IGVuYWJsZWQsIHJpZ2h0PyBQcmV0dHkgc3RhbmRhcmQgZmVhdHVyZS4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIHRob3VnaCwgbGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kuIFdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGF0PyBSaWdodCwgYGluaXQvS2NvbmZpZ2Agc2hvdWxkIGhhdmUgdGhlIHNjb29wLiBJJ2xsIHRha2UgYSBsb29rIHRoZXJlIGFuZCBjb25maXJtIHRoYXQgYENPTkZJR19TSE1FTWAncyBzZXR0aW5nIGlzIGFzIEkgZXhwZWN0LiBHb3R0YSBiZSB0aG9yb3VnaCwgZ290dGEgYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MDAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMTo1OS40NTI4NjIzNTZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTg5ODQ5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNITUVNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODkxPWNvbmZpZyBFVkVOVEZEXFxuLS1cXG5pbml0L0tjb25maWctMTg5OS1cXG5pbml0L0tjb25maWc6MTkwMDpjb25maWcgU0hNRU1cXG5pbml0L0tjb25maWctMTkwMS1cXHRib29sIFxcXCJVc2UgZnVsbCBzaG1lbSBmaWxlc3lzdGVtXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTI6MDEuMTExODUyMDk1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTUxNDIwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBRdWFuZGFyeSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucywgYW5kIGl0IHNlZW1zIGBTSE1FTWAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBtYWtlcyBzZW5zZS4gTm93LCBJIG5lZWQgdG8gZW5zdXJlIHRoZSBhcHByb3ByaWF0ZSBzZXR0aW5ncyBmb3IgbXkgc3lzdGVtLiBJIGtub3cgSSB3YW50IHRvIGVuYWJsZSBgU1dBUGAsIGBNRU1DR2AsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZC4uLiBobW0sIGBUSFBfU1dBUGAuIFdhaXQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIGFib3V0IHRoaXMgYFRIUF9TV0FQYCBvcHRpb24uIEkgcmVjYWxsIGl0J3MgYGRlZl9ib29sIHlgIGlmIGBBUkNIX1dBTlRTX1RIUF9TV0FQIFx1MDAyNlx1MDAyNiBTV0FQIFx1MDAyNlx1MDAyNiA2NEJJVGAuIFRoYXQgbGlrZWx5IG1lYW5zIHRoYXQgaWYgSSd2ZSBlbmFibGVkIGJvdGggYFNXQVBgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB0aGVuIGBUSFBfU1dBUGAgaXMgYXV0b21hdGljYWxseSBoYW5kbGVkLiBUaGVyZSBpc24ndCBhIG5lZWQgdG8gZXhwbGljaXRseSBzZXQgaXQsIGJ1dCBpdCBkb2Vzbid0IGh1cnQgdG8gbGlzdCBpdC4gSXQgaXMsIGFmdGVyIGFsbCwgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm93LCBqdXN0IHRvIGNvbmZpcm0sIGBUSFBfU1dBUGAgaXNuJ3QgYSBkaXJlY3RseSB1c2VyLXNlbGVjdGFibGUgb3B0aW9uLCBidXQgYSBkZXBlbmRlbnQgZGVmYXVsdC4gSSBuZWVkIHRvIHRha2UgYSBzZWNvbmQgbG9vay4gSnVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkxOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMjowNS43MjY5OTcyMTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTY4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTY4OlxcdGVuZGNob2ljZVxcbiA5Njk6XFx0XFxuIDk3MDpcXHRjb25maWcgVEhQX1NXQVBcXG4gOTcxOlxcdFxcdGRlZl9ib29sIHlcXG4gOTcyOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9XQU5UU19USFBfU1dBUCBcXHUwMDI2XFx1MDAyNiBTV0FQIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuIDk3MzpcXHRcXHRoZWxwXFxuIDk3NDpcXHRcXHQgIFN3YXAgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBpbiBvbmUgcGllY2UsIHdpdGhvdXQgc3BsaXR0aW5nLlxcbiA5NzU6XFx0XFx0ICBYWFg6IEZvciBub3csIHN3YXAgY2x1c3RlciBiYWNraW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZVxcbiA5NzY6XFx0XFx0ICB3aWxsIGJlIHNwbGl0IGFmdGVyIHN3YXBvdXQuXFxuIDk3NzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTI6MDUuNzI3MTE2NjEzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjg5MjcxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5OiBTd2FwLVJlbGF0ZWQgQ29uZmlndXJhdGlvbnMgYW5kIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHN3YXAgaXMgaGFuZGxlZC4gSXQgc2VlbXMgYFRIUF9TV0FQYCBpc24ndCBzb21ldGhpbmcgdGhlIHVzZXIgY2FuIGRpcmVjdGx5IGNvbmZpZ3VyZSwgYnV0IHRoZSBzeXN0ZW0gdXRpbGl6ZXMgaXQsIHNvIHdlIGNhbiBhdCBsZWFzdCBtYWtlIGl0IHZpc2libGUgaW4gdGhlIG91dHB1dC4gTXkgbWFpbiBmb2N1cyBoZXJlIGlzIGdvaW5nIHRvIGJlIG9uIG1ha2luZyBzdXJlIHRoZSB1c2VyIGtub3dzIGFib3V0IGBTV0FQYCwgYE1FTUNHYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEknbGwgYmUgc3VyZSB0byBsaXN0IHRob3NlLlxuXG5Ob3csIGZvciB0aGUga2V5IGZ1bmN0aW9ucy4gTGV0J3Mgc2VlLi4uIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgc3dhcCBtYXJnaW5zIGFuZCBmb2xpbyBhbGxvY2F0aW9uLiBTbyB0aGUgbW9zdCBpbW1lZGlhdGVseSByZWxldmFudCBmdW5jdGlvbnMgYXBwZWFyIHRvIGJlIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCwgYGZvbGlvX2FsbG9jX3N3YXBgLCBhbmQgYHNobWVtX3dyaXRlb3V0YC4gVGhlc2UgYXJlIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGxpa2VseSByZXNpZGVzLlxuXG5JIGhhZCBiZXR0ZXIgY2hlY2sgYHNocmlua19mb2xpb19saXN0YCBhcyB3ZWxsLiBJdCBsb29rcyBsaWtlIHRoYXQgb25lIGlzIHN0YXRpYywgc28gSSB3aWxsIG1ha2Ugc3VyZSBJIGRvbid0IGxpc3QgaXQgZGlyZWN0bHkuIEhvd2V2ZXIsIEkgd2FudCB0byBjbGFyaWZ5IGluIHRoZSBvdXRwdXQgdGhhdCBpdCBpcyBiZWluZyB1c2VkIHNvbWV3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MjYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMjowOS44NTYwNDY0MTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDc0MTY4NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYy4qIHNocmlua19mb2xpb19saXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTEwNDA9c3RhdGljIGJvb2wgbWF5X2VudGVyX2ZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vdm1zY2FuLmMtMTA1Ny0gKi9cXG5tbS92bXNjYW4uYzoxMDU4OnN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG5tbS92bXNjYW4uYy0xMDU5LVxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMjoxMi4xMDM0NzE2NjdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3OTA1NTk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyBTdGF0aWMgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBoZXJlLiBJdCdzIGNsZWFyIHRoYXQgYHNocmlua19mb2xpb19saXN0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgc29tZXRoaW5nIEknbSBrZWVwaW5nIGluIG1pbmQuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IHdoYXQgYWJvdXQgdGhlIG90aGVycz8gU3BlY2lmaWNhbGx5LCBJJ20gd29uZGVyaW5nIGlmIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfbHJ1dmVjYCBhcmUgYWxzbyBzdGF0aWMsIHRvby4gSXQgbWFrZXMgc2Vuc2UgdG8gY2hlY2sgdGhlIHJlc3Qgb2YgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB3aGlsZSBJJ20gYXQgaXQsIHNvIGxldCdzIGFsc28gYWRkIGBmb2xpb19hbGxvY19zd2FwYCwgYHNobWVtX3dyaXRlb3V0YCwgYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCB0byB0aGUgbGlzdC4gSSBuZWVkIHRvIGtub3cgaWYgSSdtIGRlYWxpbmcgd2l0aCBpbnRlcm5hbCBvciBleHRlcm5hbCBmdW5jdGlvbnMsIGFuZCBhIHF1aWNrIGNoZWNrIHdpbGwgdGVsbCBtZSB3aGV0aGVyIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCBpcyBleHBvcnRlZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGhvdyBpdCdzIGJlaW5nIHVzZWQgYW5kIG1hbmFnZWQgd2l0aGluIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDQwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTI6MTcuNDgyNTMwOTUyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgyMTUxMjI3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipwYWdlX2NvdW50ZXJfbWFyZ2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMjoxOS41NjQ2OTEzODhaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MjAzNDYxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgTWVtb3J5IEFjY291bnRpbmcgLSBTdGF0aWMgdnMuIEV4cG9ydGVkIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgYWNjb3VudGluZyBpc3N1ZS4gVGhlIGNvZGUgSSdtIGxvb2tpbmcgYXQgaXNuJ3QgKmV4cG9ydGVkKiwgd2hpY2ggaXMgYSBwb3RlbnRpYWwgaHVyZGxlLCBidXQgaXQncyBhbHNvICpub24tc3RhdGljKiwgd2hpY2ggZ2l2ZXMgbWUgYSBiaXQgbW9yZSBmbGV4aWJpbGl0eSBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgYWNjZXNzIG9yIG92ZXJyaWRpbmcuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gbmFycm93IHRoZSBzZWFyY2guIE5vdyB0aGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgb3Igbm90IGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAgaXMgZXhwb3J0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIHRyYWNraW5nIGFuZCBtYW5hZ2luZyBtZW1vcnksIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHN3YXAgbWFyZ2lucyBpbiBjZ3JvdXBzLiBUaGUgZmFjdCB0aGF0IEknbSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgKml0cyogZXhwb3J0IHN0YXR1cyB0ZWxscyBtZSB0aGF0IHBvdGVudGlhbGx5IG92ZXJyaWRpbmcgaXQgaXMgdGhlIGN1cnJlbnQgZm9jdXMuIEl0IG5lZWRzIHRvIGJlIGNsYXJpZmllZCwgYmVjYXVzZSB0aGF0IHdpbGwgZGlyZWN0bHkgYWZmZWN0IHdoZXRoZXIgSSBjYW4gcmVsaWFibHkgbW9kaWZ5IG9yIGludGVncmF0ZSB3aXRoIHRoaXMgcGFydCBvZiB0aGUgbWVtb3J5IGFjY291bnRpbmcgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM2NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjEyOjQ4LjQ4NTA0MDc1M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3Mjk3MDc3NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjEyOjUwLjU1ODAyMjI1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTc5MDYwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBOb24tRXhwb3J0ZWQsIE5vbi1TdGF0aWMgRnVuY3Rpb24gVXNhZ2UqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIEkgc2VlIGEgZnVuY3Rpb24sIG9yIGF0IGxlYXN0IGEgcmVmZXJlbmNlIHRvIHNvbWV0aGluZywgdGhhdCdzIGRlZmluZWQgYnV0IG5vdCBleHBsaWNpdGx5IG1hcmtlZCBmb3IgZXhwb3J0LiBUaGF0J3MgaW1tZWRpYXRlbHkgcmFpc2luZyBhIHJlZCBmbGFnLiBUeXBpY2FsbHksIHdlJ2QgZXhwZWN0IGZ1bmN0aW9ucyB0aGF0IGFyZSBtZWFudCB0byBiZSB1c2VkIGV4dGVybmFsbHkgdG8gYmUgZXhwb3J0ZWQsIGVzcGVjaWFsbHkgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgbW9kdWxlIG9yIGEgbGlicmFyeS4gSG93ZXZlciwgaWYgaXQncyBub3Qgc3RhdGljIGl0IHdvdWxkIG1lYW4gdGhlIGxpbmtlciB3aWxsIGJlIGFibGUgdG8gc2VlIHRoZSBmdW5jdGlvbi5cblxuTm93LCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSB0aGF0IHN0YW5kcyBvdXQgaXMgYGZvbGlvX2FsbG9jX3N3YXBgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIG9yIG5vdCBpdCBpcyBleHBvcnRlZC4gSWYgaXQncyBub3QgZXhwbGljaXRseSBleHBvcnRlZCwgSSdtIGdvaW5nIHRvIGhhdmUgdG8gZG8gYSBkZWVwZXIgZGl2ZSB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIGFjY2Vzc2VkLiBJcyBpdCBwYXJ0IG9mIHNvbWUgaW50ZXJuYWwgQVBJIHRoYXQgaXNuJ3QgaW50ZW5kZWQgZm9yIGRpcmVjdCBleHRlcm5hbCB1c2U/IElzIGl0IGJlaW5nIGFjY2Vzc2VkIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMgb3Igc29tZSBvdGhlciBtZWNoYW5pc20/IE9yIG1heWJlIHRoZXJlJ3MgYSBwcm9ibGVtIGluIHRoZSBidWlsZCBzeXN0ZW0gd2hlcmUgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBleHBvcnRlZCwgYnV0IGlzbid0P1xuXG5JIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSB2aXNpYmxlIHRvIGNvZGUgb3V0c2lkZSB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIGltcG9ydGFudCwgYXMgaXQgd2lsbCBkZXRlcm1pbmUgdGhlIHBvdGVudGlhbCBzY29wZSBvZiBpdHMgdXNhZ2UsIGFuZCBwb3RlbnRpYWwgcHJvYmxlbXMgd2l0aCBmdXR1cmUgcmVmYWN0b3JpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjQxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTI6NTQuNTU1OTMyNDY5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA3NzMzNTU5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipmb2xpb19hbGxvY19zd2FwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMjo1Ni41NjM2NzMxMDhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMTYxMjg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ29uc2lkZXJpbmcgRXhwb3J0ZWQgU3ltYm9scyBhbmQgTWVtb3J5IE9wZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcncyBidWdnaW5nIG1lLiBUaGlzIHZhcmlhYmxlIG9yIGZ1bmN0aW9uLCB3aGF0ZXZlciBpdCBpcywgaXNuJ3QgZXhwbGljaXRseSBtYXJrZWQgZm9yIGV4cG9ydCDigJMgaXQncyBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AgaW50ZXJuYWxseS4gVGhhdCBtZWFucyBpdCAqY291bGQqIGJlIHZpc2libGUgb3V0c2lkZSB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF04oCZcyBhIGtleSBkaXN0aW5jdGlvbi4gV2hldGhlciBpdCAqaXMqIGFjdHVhbGx5IGJlaW5nIHVzZWQgZXh0ZXJuYWxseSwgYW5kIHRodXMgbmVlZGluZyB0byBiZSB2aXNpYmxlLCBpcyBhbm90aGVyIG1hdHRlci5cblxuQW5kIHRoZW4gdGhlIGJpZyBxdWVzdGlvbiwgdGhlIG9uZSB0aGF0IHJlYWxseSBuZWVkcyBhbiBhbnN3ZXI6IGlzIHRoaXMgYHNobWVtX3dyaXRlb3V0YCBmdW5jdGlvbiBvciB2YXJpYWJsZSDigJMgd2hhdGV2ZXIgaXQgaXMg4oCTIGRlY2xhcmVkIGFzIGV4cG9ydGVkIGFueXdoZXJlPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSwgdGhlIGxpbmtlciBzY3JpcHRzLCB0aGUgYnVpbGQgcHJvY2Vzcy4uLiBldmVyeXdoZXJlLiBUaGlzIG1hdHRlcnMgYmVjYXVzZSBpdCBkaXJlY3RseSBpbXBhY3RzIHRoZSBjb2RlJ3MgbGlua2luZyBhbmQgdXNhYmlsaXR5LiBJZiBpdCdzIG5vdCBleHBvcnRlZCwgYW5kIHNvbWVvbmUgaXMgdHJ5aW5nIHRvIHVzZSBpdCBleHRlcm5hbGx5LCB3ZSBoYXZlIGEgbWFqb3IgcHJvYmxlbSB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoaXMgaGFzIHRvIGJlIG5haWxlZCBkb3duLCBmYXN0LCBvciB3ZSBhcmUgc2l0dGluZyBvbiBhIHRpbWUgYm9tYi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5ODgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMjo1OS44ODUyODkxNjdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODE1NTkxNDAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnNobWVtX3dyaXRlb3V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMzowMi4xNjY4NTgwOTdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU2MTM1NDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSZWNlbnQgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lICpzaWduaWZpY2FudCogZnVuY3Rpb25hbCBjaGFuZ2VzLiBUaGVzZSBhcmVuJ3QgZXhwb3J0ZWQsIGJ1dCB0aGV5J3JlIG5vbi1zdGF0aWMsIHNvIHRoZXkncmUgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIOKAkyBzcGVjaWZpY2FsbHksIHRocm91Z2ggbWVtb3J5IHByZXNzdXJlIHNjZW5hcmlvcyBsaWtlIG1lbW9yeSBhbGxvY2F0aW9uIG9yIHN3YXBwaW5nLiBUaGF0IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBoZXJlLiBNeSBleHBlcnQgaW5zdGluY3Qgc2F5cyB0aGVzZSBhcmUgZGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgY2FtcGFpZ24gdG8gc2VlIGhvdyB0aGV5IGhvbGQgdXAgdW5kZXIgc3RyZXNzLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBxdWlja2x5LiBXZSdyZSBsb29raW5nIGF0IGBTV0FQYCwgYE1FTUNHYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBTSE1FTWAuIEdvdCBpdC5cblxuTm93LCB0aGUgc3ltYm9scyB0aGF0IGhhdmUgbXkgYXR0ZW50aW9uOiBgcGFnZV9jb3VudGVyX21hcmdpbmAsIGBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbmAsIGBmb2xpb19hbGxvY19zd2FwYCwgYW5kIGBzaG1lbV93cml0ZW91dGAuIFRoZSBwYXRjaCBpcyBpbnRyb2R1Y2luZyBuZXcgbG9naWMgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIHN3YXAgbWFyZ2lucy4gQ3JpdGljYWxseSwgaXQncyB1cGRhdGluZyBgZm9saW9fYWxsb2Nfc3dhcGAgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9yIGNvZGVzOiBgLUUyQklHYCwgYC1FTk9TUENgLCBhbmQgYC1FTk9NRU1gLCBpbnN0ZWFkIG9mIGEgc2ltcGxlIGJvb2xlYW4uIFRoZSBiaWcgZGVhbCBoZXJlIGlzIHRoZSByYW1pZmljYXRpb25zIGRvd25zdHJlYW0uIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgYXJlIGFsc28gYmVpbmcgdXBkYXRlZCB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZXNlIG5ldyBlcnJvciBjb2RlcywgYW5kIHRoYXQgaW5jbHVkZXMgY2hhbmdlcyB0byB0aGVpciBmYWxsYmFjayBiZWhhdmlvciB3aGVuIHN3YXBwaW5nIG91dCBsYXJnZSBmb2xpb3MgZmFpbHMuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBjaGFuZ2VzIGFmZmVjdGluZyBob3cgZm9saW9zIGFyZSBzd2FwcGVkIG91dCB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIHRvdWNoaW5nIHN3YXAsIHNobWVtLCBhbmQgdm1zY2FuIGZ1bmN0aW9uYWxpdHkuXG5cbkp1c3QgZG9pbmcgYSBxdWljayBkb3VibGUtY2hlY2suLi4gWWVzLCBgU0hNRU1gIGlzIHRoZSBjb3JyZWN0IGNvbmZpZyBmb3Igc2hhcmVkIG1lbW9yeS4gYFNXQVBgIGZvciBzd2FwLCBgTUVNQ0dgIGZvciBtZW1vcnkgY2dyb3VwcywgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZm9yIFRIUC5cblxuQWxyaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExldCdzIGdldCB0aGVzZSB0ZXN0cyBnb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNzksIk91dHB1dFRva2VucyI6MjE1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjEzOjA5LjcyODIxNTMyN1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjU4ODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV9jb3VudGVyX21hcmdpblwiLFxuICAgIFwibWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5cIixcbiAgICBcImZvbGlvX2FsbG9jX3N3YXBcIixcbiAgICBcInNobWVtX3dyaXRlb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gY2hlY2sgdGhlIHN3YXAgbWFyZ2luIGZvciBtZW1vcnkgY2dyb3VwcyBhbmQgbW9kaWZpZXMgYGZvbGlvX2FsbG9jX3N3YXBgIHRvIHJldHVybiBzcGVjaWZpYyBlcnJvciBjb2RlcyAoLUUyQklHLCAtRU5PU1BDLCAtRU5PTUVNKSBpbnN0ZWFkIG9mIGEgYm9vbGVhbi4gSXQgYWxzbyB1cGRhdGVzIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAgdG8gaGFuZGxlIHRoZXNlIG5ldyBlcnJvciBjb2Rlcywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIHRoZSBmYWxsYmFjayBiZWhhdmlvciB3aGVuIHN3YXBwaW5nIG91dCBsYXJnZSBmb2xpb3MgZmFpbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoc3dhcCwgc2htZW0sIHZtc2NhbikgdGhhdCBhZmZlY3QgaG93IGZvbGlvcyBhcmUgc3dhcHBlZCBvdXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlX2NvdW50ZXJfbWFyZ2luXCIsXG4gICAgXCJtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpblwiLFxuICAgIFwiZm9saW9fYWxsb2Nfc3dhcFwiLFxuICAgIFwic2htZW1fd3JpdGVvdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBjaGVjayB0aGUgc3dhcCBtYXJnaW4gZm9yIG1lbW9yeSBjZ3JvdXBzIGFuZCBtb2RpZmllcyBgZm9saW9fYWxsb2Nfc3dhcGAgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9yIGNvZGVzICgtRTJCSUcsIC1FTk9TUEMsIC1FTk9NRU0pIGluc3RlYWQgb2YgYSBib29sZWFuLiBJdCBhbHNvIHVwZGF0ZXMgYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YCB0byBoYW5kbGUgdGhlc2UgbmV3IGVycm9yIGNvZGVzLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgdGhlIGZhbGxiYWNrIGJlaGF2aW9yIHdoZW4gc3dhcHBpbmcgb3V0IGxhcmdlIGZvbGlvcyBmYWlscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChzd2FwLCBzaG1lbSwgdm1zY2FuKSB0aGF0IGFmZmVjdCBob3cgZm9saW9zIGFyZSBzd2FwcGVkIG91dCB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjEzOjA5LjgwOTQ4MjczNFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MzA3MzIwNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwODoxMzowOS44MTAwNDQ4ODRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTY1MzAxNjYwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgcmVsYXRlZCB0byBzd2FwIGFjY291bnRpbmcgYW5kIGZvbGlvIHN3YXAgYWxsb2NhdGlvbi4gSXQgaW50cm9kdWNlcyBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHN3YXAgbWFyZ2lucyAoYHBhZ2VfY291bnRlcl9tYXJnaW5gLCBgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW5gKSBhbmQgcmVmaW5lcyB0aGUgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgYGZvbGlvX2FsbG9jX3N3YXBgIHRvIGJldHRlciBndWlkZSBmb2xpbyBzcGxpdHRpbmcgbG9naWMgaW4gYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YC4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGJhc2VkIG9uIG1lbW9yeS9zd2FwIGxpbWl0cyBhbmQgZG8gbm90IGludm9sdmUgYWxsb2NhdGluZyBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgbW9kaWZ5aW5nIGRhdGEgbGVuZ3RocyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgbG9naWNhbCBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDczN2ZkYzExMTdlZjZkZWY2ZjhlNjJiMWFlMDJiNGQ0NGJmODc5MTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwODoxMDo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXG5pbmRleCBkNjQ5YjZiYmJjODcxLi4wN2I3Y2IxMjI0OWM3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuQEAgLTY4LDYgKzY4LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfY291bnRlcl9yZWFkKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4gXHRyZXR1cm4gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZjb3VudGVyLVx1MDAzZXVzYWdlKTtcbiB9XG4gXG4rbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpO1xuIHZvaWQgcGFnZV9jb3VudGVyX2NhbmNlbChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiB2b2lkIHBhZ2VfY291bnRlcl9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gYm9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDBmOTUzZWQ5Yzg2MzAuLmE3MmVjZjEyYzAwZGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC01MTAsNiArNTEwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BcbiBcdF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7XG4gfVxuIFxuK2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIGV4dGVybiBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuICNlbHNlXG5AQCAtNTIzLDYgKzUyNCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLFxuIHtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDFkMzMzOTUyMDgwOWYuLjQ0MmEyOTcxOTdkNTIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTU3OTYsMTUgKzU3OTYsMzUgQEAgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRsb25nIG5yX3N3YXBfcGFnZXMgPSBnZXRfbnJfc3dhcF9wYWdlcygpO1xuIFxuLVx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCBkb19tZW1zd19hY2NvdW50KCkpXG4tXHRcdHJldHVybiBucl9zd2FwX3BhZ2VzO1xuLVx0Zm9yICg7ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpOyBtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSlcbi1cdFx0bnJfc3dhcF9wYWdlcyA9IG1pbl90KGxvbmcsIG5yX3N3YXBfcGFnZXMsXG4tXHRcdFx0XHQgICAgICBSRUFEX09OQ0UobWVtY2ctXHUwMDNlc3dhcC5tYXgpIC1cbi1cdFx0XHRcdCAgICAgIHBhZ2VfY291bnRlcl9yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApKTtcbitcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhZG9fbWVtc3dfYWNjb3VudCgpKVxuK1x0XHRucl9zd2FwX3BhZ2VzID0gbWluKG5yX3N3YXBfcGFnZXMsIHBhZ2VfY291bnRlcl9tYXJnaW4oXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCkpO1xuK1xuIFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG4gfVxuIFxuKy8qKlxuKyAqIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luIC0gZ2V0IGEgZm9saW8ncyBtZW1jZyBzd2FwIG1hcmdpblxuKyAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtY2cgbWFyZ2luIGlzIHF1ZXJpZWRcbisgKlxuKyAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJ3MgbWVtY2cgaGllcmFyY2h5LlxuKyAqL1xuK2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4rXHRsb25nIG1hcmdpbjtcbitcbitcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpIHx8XG4rXHQgICAgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKVxuK1x0XHRyZXR1cm4gUEFHRV9DT1VOVEVSX01BWDtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuK1x0bWFyZ2luID0gcGFnZV9jb3VudGVyX21hcmdpbihcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIG1hcmdpbjtcbit9XG4rXG4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jXG5pbmRleCA2NjFlMGYyYTUxMjdhLi40NTA1NDNmNGIzMThiIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9jb3VudGVyLmNcbisrKyBiL21tL3BhZ2VfY291bnRlci5jXG5AQCAtNDYsNiArNDYsMjYgQEAgc3RhdGljIHZvaWQgcHJvcGFnYXRlX3Byb3RlY3RlZF91c2FnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjLFxuIFx0fVxuIH1cbiBcbisvKipcbisgKiBwYWdlX2NvdW50ZXJfbWFyZ2luIC0gcmVtYWluaW5nIHVzYWJsZSBzcGFjZSB3aXRoaW4gaGllcmFyY2hpY2FsIGxpbWl0c1xuKyAqIEBjb3VudGVyOiBjb3VudGVyXG4rICpcbisgKiBSZXR1cm46IFRoZSBtaW5pbXVtIHZhbHVlIG9mIG1heCBtaW51cyB1c2FnZSBhY3Jvc3MgQGNvdW50ZXIgYW5kIGFsbCBvZlxuKyAqIGl0cyBhbmNlc3RvcnMuIFRoZSB2YWx1ZSBtYXkgYmUgbmVnYXRpdmUgZHVyaW5nIGEgY29uY3VycmVudCBjaGFyZ2UuXG4rICovXG4rbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4re1xuK1x0bG9uZyBtYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYO1xuK1xuK1x0ZG8ge1xuK1x0XHRsb25nIG0gPSBSRUFEX09OQ0UoY291bnRlci1cdTAwM2VtYXgpIC0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7XG4rXG4rXHRcdG1hcmdpbiA9IG1pbihtYXJnaW4sIG0pO1xuK1x0fSB3aGlsZSAoKGNvdW50ZXIgPSBjb3VudGVyLVx1MDAzZXBhcmVudCkpO1xuK1xuK1x0cmV0dXJuIG1hcmdpbjtcbit9XG4rXG4gLyoqXG4gICogcGFnZV9jb3VudGVyX2NhbmNlbCAtIHRha2UgcGFnZXMgb3V0IG9mIHRoZSBsb2NhbCBjb3VudGVyXG4gICogQGNvdW50ZXI6IGNvdW50ZXJcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNTk5NjY1YTNkNmU3Yi4uNmEzNWY1ZWU4NDM3MiAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0xNjEyLDcgKzE2MTIsNyBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuIFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0cGdvZmZfdCBpbmRleDtcbi1cdGludCBucl9wYWdlcztcbitcdGludCBucl9wYWdlcywgcmV0O1xuIFx0Ym9vbCBzcGxpdCA9IGZhbHNlO1xuIFxuIFx0aWYgKChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBTSE1FTV9GX0xPQ0tFRCkgfHwgc2JpbmZvLVx1MDAzZW5vc3dhcClcbkBAIC0xNjkzLDcgKzE2OTMsOCBAQCBpbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIFx0fVxuIFxuLVx0aWYgKCFmb2xpb19hbGxvY19zd2FwKGZvbGlvKSkge1xuK1x0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XG4rXHRpZiAoIXJldCkge1xuIFx0XHRib29sIGZpcnN0X3N3YXBwZWQgPSBzaG1lbV9yZWNhbGNfaW5vZGUoaW5vZGUsIDAsIG5yX3BhZ2VzKTtcbiBcdFx0aW50IGVycm9yO1xuIFxuQEAgLTE3NDYsNyArMTc0Nyw3IEBAIGludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xuIFx0XHRnb3RvIHJlZGlydHk7XG4gXHR9XG4tXHRpZiAobnJfcGFnZXMgXHUwMDNlIDEpXG4rXHRpZiAobnJfcGFnZXMgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHJldCA9PSAtRTJCSUcpXG4gXHRcdGdvdG8gdHJ5X3NwbGl0O1xuIHJlZGlydHk6XG4gXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggZjVkZmM3ZTU5MTkxZS4uMmQxMjdmMWIzMGJhZSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xNzM1LDcgKzE3MzUsOSBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gICogc3dhcCBjYWNoZS5cbiAgKlxuICAqIENvbnRleHQ6IENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBmb2xpbyBsb2NrLlxuLSAqIFJldHVybjogV2hldGhlciB0aGUgZm9saW8gd2FzIGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlLlxuKyAqIFJldHVybjogJTAgb24gc3VjY2VzcywgJS1FMkJJRyBpZiBzcGxpdHRpbmcgdGhlIGZvbGlvIG1pZ2h0IGFsbG93IHN3YXBvdXQsXG4rICogJS1FTk9TUEMgaWYgbm8gZ2xvYmFsIHN3YXAgc3BhY2UgaXMgYXZhaWxhYmxlLCBvciAlLUVOT01FTSBpZiBzcGxpdHRpbmdcbisgKiB3b3VsZCBub3QgaGVscC5cbiAgKi9cbiBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbkBAIC0xNzQ3LDExICsxNzQ5LDExIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHRpZiAob3JkZXIpIHtcbiBcdFx0Lypcbi1cdFx0ICogUmVqZWN0IGxhcmdlIGFsbG9jYXRpb24gd2hlbiBUSFBfU1dBUCBpcyBkaXNhYmxlZCxcbi1cdFx0ICogdGhlIGNhbGxlciBzaG91bGQgc3BsaXQgdGhlIGZvbGlvIGFuZCB0cnkgYWdhaW4uXG4rXHRcdCAqIFJlamVjdCBsYXJnZSBhbGxvY2F0aW9uIHdoZW4gVEhQX1NXQVAgaXMgZGlzYWJsZWQuIENoZWNrIGJlbG93XG4rXHRcdCAqIHdoZXRoZXIgc3BsaXR0aW5nIGFuZCByZXRyeWluZyBjYW4gbWFrZSBwcm9ncmVzcy5cbiBcdFx0ICovXG4gXHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVEhQX1NXQVApKVxuLVx0XHRcdHJldHVybiAtRUFHQUlOO1xuK1x0XHRcdGdvdG8gZmFpbGVkO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBBbGxvY2F0aW9uIHNpemUgc2hvdWxkIG5ldmVyIGV4Y2VlZCBjbHVzdGVyIHNpemVcbkBAIC0xNzU5LDcgKzE3NjEsNyBAQCBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHQgKi9cbiBcdFx0aWYgKHNpemUgXHUwMDNlIFNXQVBGSUxFX0NMVVNURVIpIHtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0UoMSk7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0Z290byBmYWlsZWQ7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0xNzc1LDEzICsxNzc3LDIzIEBAIGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHR9XG4gXG4gXHQvKiBOZWVkIHRvIGNhbGwgdGhpcyBldmVuIGlmIGFsbG9jYXRpb24gZmFpbGVkLCBmb3IgTUVNQ0dfU1dBUF9GQUlMLiAqL1xuLVx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpXG4rXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSkge1xuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4rXHRcdGdvdG8gZmFpbGVkO1xuK1x0fVxuIFxuIFx0aWYgKHVubGlrZWx5KCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0Z290byBmYWlsZWQ7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitmYWlsZWQ6XG4rXHRpZiAoZ2V0X25yX3N3YXBfcGFnZXMoKSBcdTAwM2M9IDApXG4rXHRcdHJldHVybiAtRU5PU1BDO1xuK1x0aWYgKG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGZvbGlvKSBcdTAwM2M9IDApXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0dXJuIG9yZGVyID8gLUUyQklHIDogLUVOT01FTTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYmU2YmQyNmU4YzU3OC4uNzU0MzM2MDMzNjE2MCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTEyNTksNiArMTI1OSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbiBcdFx0ICovXG4gXHRcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0IWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuK1x0XHRcdGludCByZXQ7XG4rXG4gXHRcdFx0aWYgKCEoc2MtXHUwMDNlZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0lPKSlcbiBcdFx0XHRcdGdvdG8ga2VlcF9sb2NrZWQ7XG4gXHRcdFx0aWYgKGZvbGlvX21heWJlX2RtYV9waW5uZWQoZm9saW8pKVxuQEAgLTEyNzcsMTEgKzEyNzksMTQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuIFx0XHRcdFx0ICAgIHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKVxuIFx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcbiBcdFx0XHR9XG4tXHRcdFx0aWYgKGZvbGlvX2FsbG9jX3N3YXAoZm9saW8pKSB7XG4rXHRcdFx0cmV0ID0gZm9saW9fYWxsb2Nfc3dhcChmb2xpbyk7XG4rXHRcdFx0aWYgKHJldCkge1xuIFx0XHRcdFx0aW50IF9fbWF5YmVfdW51c2VkIG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIFxuIFx0XHRcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcbiBcdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWRfc3BsaXQ7XG4rXHRcdFx0XHRpZiAocmV0ICE9IC1FMkJJRylcbitcdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XG4gXHRcdFx0XHQvKiBGYWxsYmFjayB0byBzd2FwIG5vcm1hbCBwYWdlcyAqL1xuIFx0XHRcdFx0aWYgKHNwbGl0X2ZvbGlvX3RvX2xpc3QoZm9saW8sIGZvbGlvX2xpc3QpKVxuIFx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA4OjEzOjA5LjgxMDA0NjYzNFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjUzMDE0MDYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBTd2FwIEFjY291bnRpbmcgYW5kIEZvbGlvIEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIHByZXR0eSBjbGVhbiBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHN0YW5kcG9pbnQsIGJ1dCBhcyBhbHdheXMsIGEgZGVlcCBkaXZlIGlzIHJlcXVpcmVkLiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyB3ZSBoYW5kbGUgc3dhcCBhY2NvdW50aW5nIGFuZCBmb2xpbyBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFdlIGFyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byB0aGUgc3dhcCBhY2NvdW50aW5nLCBmb2xpbyBzd2FwIGFsbG9jYXRpb24sIGFuZCBhZGp1c3RtZW50cyBmb3IgZXJyb3IgaGFuZGxpbmcuXG5cblRoZSBrZXkgcGllY2VzIGludHJvZHVjZWQgYXJlIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYC4gVGhlc2UgYXBwZWFyIHRvIGNhbGN1bGF0ZSBhdmFpbGFibGUgc3dhcCBzcGFjZSB3aXRoaW4gdGhlIGxpbWl0cyBkZWZpbmVkIGJ5IG1lbW9yeSBjZ3JvdXBzLiBBbmFseXppbmcgdGhlIGNvZGUsIGBwYWdlX2NvdW50ZXJfbWFyZ2luYCByZWFkcyBgY291bnRlci1cdTAwM2VtYXhgIGFuZCBgY291bnRlci1cdTAwM2V1c2FnZWAgdmlhIGBwYWdlX2NvdW50ZXJfcmVhZGAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhcmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQgaGVyZS4gYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCB0aGVuIGxldmVyYWdlcyBgcGFnZV9jb3VudGVyX21hcmdpbmAgZm9yIG1lbWNnLXNwZWNpZmljIG1hcmdpbnMuIFN0aWxsIGNsZWFuLlxuXG5UaGUgcmVhbCBoZWFydCBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmaW5pbmcgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgYGZvbGlvX2FsbG9jX3N3YXBgLiBQcmV2aW91c2x5LCBpdCBhcHBlYXJzIHRoaXMgZnVuY3Rpb24gcmV0dXJuZWQgYSBzaW1wbGUgYm9vbGVhbiBvciBhIGdlbmVyaWMgZXJyb3IsIGJ1dCBpdCBub3cgcmV0dXJucyBzcGVjaWZpYyBlcnJvciBjb2RlcyBsaWtlIGAtRTJCSUdgLCBgLUVOT1NQQ2AsIGFuZCBgLUVOT01FTWAuIFdlJ3JlIHNlZWluZyB0aGVzZSBlcnJvcnMgdXNlZCBpbiBgc2htZW1fd3JpdGVvdXRgIGFuZCBgc2hyaW5rX2ZvbGlvX2xpc3RgIHRvIGNvbnRyb2wgd2hldGhlciBhIGZvbGlvIGlzIHNwbGl0LiBJbiBgc2htZW1fd3JpdGVvdXRgLCB3ZSBjaGVjayBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGAtRTJCSUdgIGFuZCBpZiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGlzIGdyZWF0ZXIgdGhhbiAxLCB0aGVuIHdlIGluaXRpYXRlIGEgc3BsaXQuIEluIGBzaHJpbmtfZm9saW9fbGlzdGAsIHRoZSByZXR1cm4gdmFsdWUgaXMgZXZhbHVhdGVkIGFnYWluc3QgYC1FMkJJR2AgdG8gZGVjaWRlIGJldHdlZW4gYWN0aXZhdGlvbiBhbmQgc3BsaXR0aW5nLlxuXG5Ob3csIHRvIGV4cGxpY2l0bHkgYWRkcmVzcyB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybjpcblxuMS4gICoqTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4qKlxuMi4gICoqTm8gbmV3IGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHVuaW5pdGlhbGl6ZWQuKipcbjMuICAqKk5vIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBhbnkgc3RydWN0cy4qKlxuNC4gICoqVGhlcmUgaXMgbm8gZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2FnZSBpbiBhbnkgY29udHJvbCBmbG93LioqXG5cbkl0J3MgY2xlYXIgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHRvIG1ha2UgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgbW9yZSBncmFudWxhciBhbmQgcm9idXN0IGluIGhvdyBpdCBoYW5kbGVzIHN3YXAgYXZhaWxhYmlsaXR5IGFuZCBtZW1vcnkgY2dyb3VwIGxpbWl0cy4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGVzZSBzcGVjaWZpYyBlcnJvciBjb2RlcyBhbGxvd3MgZm9yIG1vcmUgaW5mb3JtZWQgZGVjaXNpb25zIG9uIGZvbGlvIHNwbGl0dGluZy5cblxuT2theSwgbGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2ssIGJlY2F1c2Ugc3VidGxlIGJ1Z3MgYXJlIHRoZSB3b3JzdC4gVGhlIGNoYW5nZSBpbiB0aGUgcmV0dXJuIHR5cGUgb2YgYGZvbGlvX2FsbG9jX3N3YXBgIGZyb20gYW4gaW1wbGljaXQgYm9vbGVhbiB0byBhbiBgaW50YCB3aXRoIHNwZWNpZmljIGVycm9yIGNvZGVzIGluaXRpYWxseSByYWlzZWQgYSBjb25jZXJuLCBidXQgYWZ0ZXIgZ29pbmcgdGhyb3VnaCB0aGUgb2xkIGFuZCBuZXcgY29kZSwgaXQgYmVjb21lcyBjbGVhciB0aGF0IHRoZSBzdWNjZXNzL2ZhaWx1cmUgbG9naWMgcmVtYWlucyBpZGVudGljYWwuIFRoZSBvbGQgY29kZSBhbmQgbmV3IGNvZGUgdHJlYXQgMCBhcyBzdWNjZXNzIGFuZCBhbnkgb3RoZXIgcmV0dXJuIGFzIGFuIGVycm9yLiBUaGUgb2xkIGNvZGUgdXNlZCBib29sZWFuIGNvbXBhcmlzb24gdG8gZGV0ZXJtaW5lIGlmIGBmb2xpb19hbGxvY19zd2FwYCByZXR1cm5lZCBhbiBlcnJvciwgdGhlIG5ldyBjb2RlIGNoZWNrcyB0aGUgc3BlY2lmaWMgZXJyb3IgY29kZSBgcmV0ID09IC1FMkJJR2AuXG5cbkkndmUgY2FyZWZ1bGx5IGV4YW1pbmVkIGhvdyB0aGUgZXJyb3IgY29kZXMgYXJlIHV0aWxpemVkIGluIGJvdGggYHNobWVtX3dyaXRlb3V0YCBhbmQgYHNocmlua19mb2xpb19saXN0YC4gVGhlIG5ldyBjb2RlIGVuaGFuY2VzIGVycm9yIGhhbmRsaW5nIHdpdGhvdXQgaW50cm9kdWNpbmcgYW55IG5vdmVsIHdheXMgdG8gYWNjZXNzIG9yIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkJhc2VkIG9uIHRoaXMgdGhvcm91Z2ggYW5hbHlzaXMsIEkgY2FuIGRlZmluaXRpdmVseSBzYXkgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBLQVNBTiBhbmQgb3VyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIG1vcmUgdGhhbiBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSwgdGhvdWdoIGV2ZW4gdGhvc2UgYXJlIHVubGlrZWx5LlxuXG5UaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBmYWxzZS4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIGNoYW5nZXMgYXJlIHB1cmVseSBmb2N1c2VkIG9uIGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBhbmQgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgbm90IHJlbGF0ZWQgdG8gaW5pdGlhbGl6aW5nIG9yIGV4cG9zaW5nIG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2MiwiT3V0cHV0VG9rZW5zIjoyMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDg6MTM6MjYuMzQwMTkwNTI2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlbGF0ZWQgdG8gc3dhcCBhY2NvdW50aW5nIGFuZCBmb2xpbyBzd2FwIGFsbG9jYXRpb24uIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMgKGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCkgYW5kIHJlZmluZXMgdGhlIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGBmb2xpb19hbGxvY19zd2FwYCB0byBiZXR0ZXIgZ3VpZGUgZm9saW8gc3BsaXR0aW5nIGxvZ2ljIGluIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBtZW1vcnkvc3dhcCBsaW1pdHMgYW5kIGRvIG5vdCBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGRhdGEgc3RydWN0dXJlcywgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIGxvZ2ljYWwgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlbGF0ZWQgdG8gc3dhcCBhY2NvdW50aW5nIGFuZCBmb2xpbyBzd2FwIGFsbG9jYXRpb24uIEl0IGludHJvZHVjZXMgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBzd2FwIG1hcmdpbnMgKGBwYWdlX2NvdW50ZXJfbWFyZ2luYCwgYG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luYCkgYW5kIHJlZmluZXMgdGhlIGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGBmb2xpb19hbGxvY19zd2FwYCB0byBiZXR0ZXIgZ3VpZGUgZm9saW8gc3BsaXR0aW5nIGxvZ2ljIGluIGBzaG1lbV93cml0ZW91dGAgYW5kIGBzaHJpbmtfZm9saW9fbGlzdGAuIFxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBtZW1vcnkvc3dhcCBsaW1pdHMgYW5kIGRvIG5vdCBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGRhdGEgc3RydWN0dXJlcywgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIG1vZGlmeWluZyBkYXRhIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIGxvZ2ljYWwgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcm28h[1] Phase: Succeeded StartedAt: 2026-08-13 08:13:37 +0000 UTC FinishedAt: 2026-08-13 08:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 08:13:37 +0000 UTC FinishedAt: 2026-08-13 08:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2] Phase: Succeeded StartedAt: 2026-08-13 08:13:37 +0000 UTC FinishedAt: 2026-08-13 11:55:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 08:13:37 +0000 UTC FinishedAt: 2026-08-13 11:55:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 08:13:37 +0000 UTC FinishedAt: 2026-08-13 08:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 08:13:37 +0000 UTC FinishedAt: 2026-08-13 08:13:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcm28h/series-workflowcm28h-convert-artifact-1239488061/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 08:13:47 +0000 UTC FinishedAt: 2026-08-13 08:30:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 08:13:47 +0000 UTC FinishedAt: 2026-08-13 08:30:01 +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:*0770b2b5-1c0c-4c26-b437-3ca412c359e7,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-workflowcm28h/series-workflowcm28h-convert-artifact-1239488061/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": "45c96fb7-2b96-4a28-a073-20946d2c2a84", "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-workflowcm28h/series-workflowcm28h-build-action-1815756659/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 08:13:47 +0000 UTC FinishedAt: 2026-08-13 08:29:51 +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:*0770b2b5-1c0c-4c26-b437-3ca412c359e7,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-workflowcm28h/series-workflowcm28h-convert-artifact-1239488061/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": "45c96fb7-2b96-4a28-a073-20946d2c2a84", "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-workflowcm28h/series-workflowcm28h-build-action-1815756659/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 08:30:01 +0000 UTC FinishedAt: 2026-08-13 08:30:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 08:30:01 +0000 UTC FinishedAt: 2026-08-13 08:30:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 08:30:01 +0000 UTC FinishedAt: 2026-08-13 08:30:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 08:30:01 +0000 UTC FinishedAt: 2026-08-13 08:30:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcm28h/series-workflowcm28h-convert-artifact-3332513176/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 08:30:11 +0000 UTC FinishedAt: 2026-08-13 08:32:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 08:30:11 +0000 UTC FinishedAt: 2026-08-13 08:32:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*45c96fb7-2b96-4a28-a073-20946d2c2a84,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-workflowcm28h/series-workflowcm28h-build-action-1815756659/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-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 08:32:19 +0000 UTC FinishedAt: 2026-08-13 08:32:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 08:32:19 +0000 UTC FinishedAt: 2026-08-13 08:32:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 08:32:19 +0000 UTC FinishedAt: 2026-08-13 08:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 08:32:19 +0000 UTC FinishedAt: 2026-08-13 08:49:21 +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:*0770b2b5-1c0c-4c26-b437-3ca412c359e7,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-workflowcm28h/series-workflowcm28h-convert-artifact-3332513176/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": "5ef27ab6-2788-4010-a81a-12e6f355ebc1", "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-workflowcm28h/series-workflowcm28h-build-action-1595241988/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 08:32:19 +0000 UTC FinishedAt: 2026-08-13 08:49:11 +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:*0770b2b5-1c0c-4c26-b437-3ca412c359e7,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-workflowcm28h/series-workflowcm28h-convert-artifact-3332513176/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": "5ef27ab6-2788-4010-a81a-12e6f355ebc1", "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-workflowcm28h/series-workflowcm28h-build-action-1595241988/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 08:49:21 +0000 UTC FinishedAt: 2026-08-13 08:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 08:49:21 +0000 UTC FinishedAt: 2026-08-13 08:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 08:49:21 +0000 UTC FinishedAt: 2026-08-13 08:51:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 08:49:21 +0000 UTC FinishedAt: 2026-08-13 08:51:27 +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:*5ef27ab6-2788-4010-a81a-12e6f355ebc1,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-workflowcm28h/series-workflowcm28h-build-action-1595241988/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-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 08:51:37 +0000 UTC FinishedAt: 2026-08-13 11:55:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 08:51:37 +0000 UTC FinishedAt: 2026-08-13 11:55:46 +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":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"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:*45c96fb7-2b96-4a28-a073-20946d2c2a84,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5ef27ab6-2788-4010-a81a-12e6f355ebc1,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-workflowcm28h/series-workflowcm28h-build-action-1815756659/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-workflowcm28h/series-workflowcm28h-build-action-1595241988/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 08:51:37 +0000 UTC FinishedAt: 2026-08-13 08:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 08:51:37 +0000 UTC FinishedAt: 2026-08-13 08:51:42 +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":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"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-workflowcm28h/series-workflowcm28h-convert-artifact-4232994929/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 08:51:37 +0000 UTC FinishedAt: 2026-08-13 08:51:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 08:51:37 +0000 UTC FinishedAt: 2026-08-13 08:51:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 08:51:37 +0000 UTC FinishedAt: 2026-08-13 08:51:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 08:51:47 +0000 UTC FinishedAt: 2026-08-13 11:55:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcm28h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_counter_margin","mem_cgroup_get_folio_swap_margin","folio_alloc_swap","shmem_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9eba1ecd48e4d85eacdb2a351de4f8cc1527c395","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","TRANSPARENT_HUGEPAGE","SHMEM"],"series_id":"deae8dbb-d8a6-42d7-a41f-507208e3c088","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 08:51:47 +0000 UTC FinishedAt: 2026-08-13 11:55:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*45c96fb7-2b96-4a28-a073-20946d2c2a84,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5ef27ab6-2788-4010-a81a-12e6f355ebc1,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-workflowcm28h/series-workflowcm28h-build-action-1815756659/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-workflowcm28h/series-workflowcm28h-build-action-1595241988/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-workflowcm28h/series-workflowcm28h-convert-artifact-4232994929/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,}