Name: series-workflowhf4jw Phase: Succeeded StartedAt: 2026-08-06 22:17:41 +0000 UTC FinishedAt: 2026-08-07 02:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[0] Phase: Succeeded StartedAt: 2026-08-06 22:17:41 +0000 UTC FinishedAt: 2026-08-06 22:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 22:17:41 +0000 UTC FinishedAt: 2026-08-06 22:37:34 +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": "08634129366ed347e70a5d09b6b8966e60044fdf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "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": "08634129366ed347e70a5d09b6b8966e60044fdf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "212b3ff5-7e9d-470e-96db-a6fc12ca475e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_charge_hugetlb", "mem_cgroup_swapin_charge_folio", "mem_cgroup_sk_charge", "__memcg_kmem_charge_page" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMgaW4gYHRyeV9jaGFyZ2VfbWVtY2dgLiBJdCByZXBsYWNlcyBhIGBnb3RvIHJldHJ5YCBsb29wIHdpdGggYSBgZm9yYCBsb29wIHRoYXQgZGVjcmVtZW50cyB0aGUgcmV0cnkgY291bnRlciBvbiBldmVyeSBpdGVyYXRpb24sIHdoaWNoIHNpZ25pZmljYW50bHkgYWx0ZXJzIHRoZSByZXRyeSBiZWhhdmlvciBhbmQgY2FuIGxlYWQgdG8gcHJlbWF0dXJlIE9PTXMgb3IgZGlmZmVyZW50IHJlY2xhaW0gYmVoYXZpb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNmRiMDAxMzIyZmM5MTE5MGExZjFiMDczYjk3MmRmYmRhM2Q0MjZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAyMjozNTozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDZkYzQ4ODhhOTBmM2YuLjc4MWJjY2VkNTg0OGYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTI2MDcsOTggJiM0MzsyNjA3LDk3IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHRib29sIGFsbG93X3NwaW5uaW5nID0gZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZ2ZwX21hc2spO1xuIFxuLXJldHJ5OlxuLVx0aWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0Zm9yICg7IG5yX3JldHJpZXMgXHUwMDNlPSAwOyBucl9yZXRyaWVzLS0pIHtcbiBcbi1cdGlmICghYWxsb3dfc3Bpbm5pbmcpXG4tXHRcdC8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqL1xuLVx0XHRiYXRjaCA9IG5yX3BhZ2VzO1xuJiM0MztcdFx0aWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuLVx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbi1cdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG4tXHRcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIGJhdGNoLCBcdTAwMjZjb3VudGVyKSlcbi1cdFx0XHRnb3RvIGRvbmVfcmVzdG9jaztcbi1cdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbi1cdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIGJhdGNoKTtcbi1cdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpO1xuLVx0fSBlbHNlIHtcbi1cdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XG4tXHRcdHJlY2xhaW1fb3B0aW9ucyBcdTAwMjY9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuLVx0fVxuJiM0MztcdFx0aWYgKCFhbGxvd19zcGlubmluZylcbiYjNDM7XHRcdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG4mIzQzO1x0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4gXG4tXHRpZiAoYmF0Y2ggXHUwMDNlIG5yX3BhZ2VzKSB7XG4tXHRcdGJhdGNoID0gbnJfcGFnZXM7XG4tXHRcdGdvdG8gcmV0cnk7XG4tXHR9XG4mIzQzO1x0XHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuJiM0MztcdFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbiYjNDM7XHRcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG4mIzQzO1x0XHRcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIGJhdGNoLCBcdTAwMjZjb3VudGVyKSlcbiYjNDM7XHRcdFx0XHRnb3RvIGRvbmVfcmVzdG9jaztcbiYjNDM7XHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbiYjNDM7XHRcdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIGJhdGNoKTtcbiYjNDM7XHRcdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XG4mIzQzO1x0XHRcdHJlY2xhaW1fb3B0aW9ucyBcdTAwMjY9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuJiM0MztcdFx0fVxuIFxuLVx0Lypcbi1cdCAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvXG4tXHQgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksXG4tXHQgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrXG4tXHQgKiB1bmRlciB0aGUgbGltaXQgb3ZlciB0cmlnZ2VyaW5nIE9PTSBraWxscyBpbiB0aGVzZSBjYXNlcy5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKSlcbi1cdFx0Z290byBmb3JjZTtcbiYjNDM7XHRcdGlmIChiYXRjaCBcdTAwM2UgbnJfcGFnZXMpIHtcbiYjNDM7XHRcdFx0YmF0Y2ggPSBucl9wYWdlcztcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4gXG4tXHRpZiAodW5saWtlbHkodGFza19pbl9tZW1jZ19vb20oY3VycmVudCkpKVxuLVx0XHRnb3RvIG5vbWVtO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvXG4mIzQzO1x0XHQgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksXG4mIzQzO1x0XHQgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrXG4mIzQzO1x0XHQgKiB1bmRlciB0aGUgbGltaXQgb3ZlciB0cmlnZ2VyaW5nIE9PTSBraWxscyBpbiB0aGVzZSBjYXNlcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKSlcbiYjNDM7XHRcdFx0Z290byBmb3JjZTtcbiBcbi1cdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxuLVx0XHRnb3RvIG5vbWVtO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KHRhc2tfaW5fbWVtY2dfb29tKGN1cnJlbnQpKSlcbiYjNDM7XHRcdFx0Z290byBub21lbTtcbiBcbi1cdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbi1cdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xuJiM0MztcdFx0aWYgKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykpXG4mIzQzO1x0XHRcdGdvdG8gbm9tZW07XG4gXG4tXHRwc2lfbWVtc3RhbGxfZW50ZXIoXHUwMDI2cGZsYWdzKTtcbi1cdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxuLVx0XHRcdFx0XHRcdCAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTtcbi1cdHBzaV9tZW1zdGFsbF9sZWF2ZShcdTAwMjZwZmxhZ3MpO1xuJiM0MztcdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xuJiM0MztcdFx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XG4gXG4tXHRpZiAobWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpIFx1MDAzZT0gbnJfcGFnZXMpXG4tXHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0XHRwc2lfbWVtc3RhbGxfZW50ZXIoXHUwMDI2cGZsYWdzKTtcbiYjNDM7XHRcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgZ2ZwX21hc2ssIHJlY2xhaW1fb3B0aW9ucywgTlVMTCk7XG4mIzQzO1x0XHRwc2lfbWVtc3RhbGxfbGVhdmUoXHUwMDI2cGZsYWdzKTtcbiBcbi1cdGlmICghZHJhaW5lZCkge1xuLVx0XHRkcmFpbl9hbGxfc3RvY2sobWVtX292ZXJfbGltaXQpO1xuLVx0XHRkcmFpbmVkID0gdHJ1ZTtcbi1cdFx0Z290byByZXRyeTtcbi1cdH1cbiYjNDM7XHRcdGlmIChtZW1fY2dyb3VwX21hcmdpbihtZW1fb3Zlcl9saW1pdCkgXHUwMDNlPSBucl9wYWdlcylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4tXHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpXG4tXHRcdGdvdG8gbm9tZW07XG4tXHQvKlxuLVx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cbi1cdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXG4tXHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cbi1cdCAqXG4tXHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxuLVx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcbi1cdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cbi1cdCAqL1xuLVx0aWYgKG5yX3JlY2xhaW1lZCBcdTAwMjZcdTAwMjYgbnJfcGFnZXMgXHUwMDNjPSAoMSBcdTAwM2NcdTAwM2MgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKVxuLVx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0aWYgKCFkcmFpbmVkKSB7XG4mIzQzO1x0XHRcdGRyYWluX2FsbF9zdG9jayhtZW1fb3Zlcl9saW1pdCk7XG4mIzQzO1x0XHRcdGRyYWluZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiBcbi1cdGlmIChucl9yZXRyaWVzLS0pXG4tXHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0XHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpXG4mIzQzO1x0XHRcdGdvdG8gbm9tZW07XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cbiYjNDM7XHRcdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXG4mIzQzO1x0XHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxuJiM0MztcdFx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcbiYjNDM7XHRcdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKG5yX3JlY2xhaW1lZCBcdTAwMjZcdTAwMjYgbnJfcGFnZXMgXHUwMDNjPSAoMSBcdTAwM2NcdTAwM2MgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcbi1cdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfUkVUUllfTUFZRkFJTClcbi1cdFx0Z290byBub21lbTtcbiYjNDM7XHRcdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfUkVUUllfTUFZRkFJTClcbiYjNDM7XHRcdFx0Z290byBub21lbTtcbiBcbi1cdC8qIEF2b2lkIGVuZGxlc3MgbG9vcCBmb3IgdGFza3MgYnlwYXNzZWQgYnkgdGhlIG9vbSBraWxsZXIgKi9cbi1cdGlmIChwYXNzZWRfb29tIFx1MDAyNlx1MDAyNiB0YXNrX2lzX2R5aW5nKCkpXG4tXHRcdGdvdG8gbm9tZW07XG4mIzQzO1x0XHQvKiBBdm9pZCBlbmRsZXNzIGxvb3AgZm9yIHRhc2tzIGJ5cGFzc2VkIGJ5IHRoZSBvb20ga2lsbGVyICovXG4mIzQzO1x0XHRpZiAocGFzc2VkX29vbSBcdTAwMjZcdTAwMjYgdGFza19pc19keWluZygpKVxuJiM0MztcdFx0XHRnb3RvIG5vbWVtO1xuIFxuLVx0Lypcbi1cdCAqIGtlZXAgcmV0cnlpbmcgYXMgbG9uZyBhcyB0aGUgbWVtY2cgb29tIGtpbGxlciBpcyBhYmxlIHRvIG1ha2Vcbi1cdCAqIGEgZm9yd2FyZCBwcm9ncmVzcyBvciBieXBhc3MgdGhlIGNoYXJnZSBpZiB0aGUgb29tIGtpbGxlclxuLVx0ICogY291bGRuJiMzOTt0IG1ha2UgYW55IHByb2dyZXNzLlxuLVx0ICovXG4tXHRpZiAobWVtX2Nncm91cF9vb20obWVtX292ZXJfbGltaXQsIGdmcF9tYXNrLFxuLVx0XHRcdCAgIGdldF9vcmRlcihucl9wYWdlcyAqIFBBR0VfU0laRSkpKSB7XG4tXHRcdHBhc3NlZF9vb20gPSB0cnVlO1xuLVx0XHRucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbi1cdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBrZWVwIHJldHJ5aW5nIGFzIGxvbmcgYXMgdGhlIG1lbWNnIG9vbSBraWxsZXIgaXMgYWJsZSB0byBtYWtlXG4mIzQzO1x0XHQgKiBhIGZvcndhcmQgcHJvZ3Jlc3Mgb3IgYnlwYXNzIHRoZSBjaGFyZ2UgaWYgdGhlIG9vbSBraWxsZXJcbiYjNDM7XHRcdCAqIGNvdWxkbiYjMzk7dCBtYWtlIGFueSBwcm9ncmVzcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKG1lbV9jZ3JvdXBfb29tKG1lbV9vdmVyX2xpbWl0LCBnZnBfbWFzayxcbiYjNDM7XHRcdFx0XHQgICBnZXRfb3JkZXIobnJfcGFnZXMgKiBQQUdFX1NJWkUpKSkge1xuJiM0MztcdFx0XHRwYXNzZWRfb29tID0gdHJ1ZTtcbiYjNDM7XHRcdFx0bnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuIFx0fVxuIG5vbWVtOlxuIFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3NrX2NoYXJnZSYjMzQ7LAogICAgJiMzNDtfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGNncm91cCBjaGFyZ2luZyBsb2dpYyBpbiBgdHJ5X2NoYXJnZV9tZW1jZ2AuIEl0IHJlcGxhY2VzIGEgYGdvdG8gcmV0cnlgIGxvb3Agd2l0aCBhIGBmb3JgIGxvb3AgdGhhdCBkZWNyZW1lbnRzIHRoZSByZXRyeSBjb3VudGVyIG9uIGV2ZXJ5IGl0ZXJhdGlvbiwgd2hpY2ggc2lnbmlmaWNhbnRseSBhbHRlcnMgdGhlIHJldHJ5IGJlaGF2aW9yIGFuZCBjYW4gbGVhZCB0byBwcmVtYXR1cmUgT09NcyBvciBkaWZmZXJlbnQgcmVjbGFpbSBiZWhhdmlvci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE2ZGIwMDEzMjJmYzkxMTkwYTFmMWIwNzNiOTcyZGZiZGEzZDQyNmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyA2IDIyOjM1OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDZkYzQ4ODhhOTBmM2YuLjc4MWJjY2VkNTg0OGYgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTI2MDcsOTggJiM0MzsyNjA3LDk3IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLAogCXVuc2lnbmVkIGxvbmcgcGZsYWdzOwogCWJvb2wgYWxsb3dfc3Bpbm5pbmcgPSBnZnBmbGFnc19hbGxvd19zcGlubmluZyhnZnBfbWFzayk7CiAKLXJldHJ5OgotCWlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpCi0JCXJldHVybiAwOwomIzQzOwlmb3IgKDsgbnJfcmV0cmllcyAmZ3Q7PSAwOyBucl9yZXRyaWVzLS0pIHsKIAotCWlmICghYWxsb3dfc3Bpbm5pbmcpCi0JCS8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqLwotCQliYXRjaCA9IG5yX3BhZ2VzOwomIzQzOwkJaWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSkKJiM0MzsJCQlyZXR1cm4gMDsKIAotCXJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7Ci0JaWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHwKLQkgICAgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIGJhdGNoLCAmYW1wO2NvdW50ZXIpKSB7Ci0JCWlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZSgmYW1wO21lbWNnLSZndDttZW1vcnksIGJhdGNoLCAmYW1wO2NvdW50ZXIpKQotCQkJZ290byBkb25lX3Jlc3RvY2s7Ci0JCWlmIChkb19tZW1zd19hY2NvdW50KCkpCi0JCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIGJhdGNoKTsKLQkJbWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpOwotCX0gZWxzZSB7Ci0JCW1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtc3cpOwotCQlyZWNsYWltX29wdGlvbnMgJmFtcDs9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQOwotCX0KJiM0MzsJCWlmICghYWxsb3dfc3Bpbm5pbmcpCiYjNDM7CQkJLyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovCiYjNDM7CQkJYmF0Y2ggPSBucl9wYWdlczsKIAotCWlmIChiYXRjaCAmZ3Q7IG5yX3BhZ2VzKSB7Ci0JCWJhdGNoID0gbnJfcGFnZXM7Ci0JCWdvdG8gcmV0cnk7Ci0JfQomIzQzOwkJcmVjbGFpbV9vcHRpb25zID0gTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUDsKJiM0MzsJCWlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8CiYjNDM7CQkgICAgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIGJhdGNoLCAmYW1wO2NvdW50ZXIpKSB7CiYjNDM7CQkJaWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKCZhbXA7bWVtY2ctJmd0O21lbW9yeSwgYmF0Y2gsICZhbXA7Y291bnRlcikpCiYjNDM7CQkJCWdvdG8gZG9uZV9yZXN0b2NrOwomIzQzOwkJCWlmIChkb19tZW1zd19hY2NvdW50KCkpCiYjNDM7CQkJCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmYW1wO21lbWNnLSZndDttZW1zdywgYmF0Y2gpOwomIzQzOwkJCW1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtb3J5KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7CiYjNDM7CQkJcmVjbGFpbV9vcHRpb25zICZhbXA7PSB+TUVNQ0dfUkVDTEFJTV9NQVlfU1dBUDsKJiM0MzsJCX0KIAotCS8qCi0JICogUHJldmVudCB1bmJvdW5kZWQgcmVjdXJzaW9uIHdoZW4gcmVjbGFpbSBvcGVyYXRpb25zIG5lZWQgdG8KLQkgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksCi0JICogYnV0IHdlIHByZWZlciBmYWNpbGl0YXRpbmcgbWVtb3J5IHJlY2xhaW0gYW5kIGdldHRpbmcgYmFjawotCSAqIHVuZGVyIHRoZSBsaW1pdCBvdmVyIHRyaWdnZXJpbmcgT09NIGtpbGxzIGluIHRoZXNlIGNhc2VzLgotCSAqLwotCWlmICh1bmxpa2VseShjdXJyZW50LSZndDtmbGFncyAmYW1wOyBQRl9NRU1BTExPQykpCi0JCWdvdG8gZm9yY2U7CiYjNDM7CQlpZiAoYmF0Y2ggJmd0OyBucl9wYWdlcykgewomIzQzOwkJCWJhdGNoID0gbnJfcGFnZXM7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiAKLQlpZiAodW5saWtlbHkodGFza19pbl9tZW1jZ19vb20oY3VycmVudCkpKQotCQlnb3RvIG5vbWVtOwomIzQzOwkJLyoKJiM0MzsJCSAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvCiYjNDM7CQkgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksCiYjNDM7CQkgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrCiYjNDM7CQkgKiB1bmRlciB0aGUgbGltaXQgb3ZlciB0cmlnZ2VyaW5nIE9PTSBraWxscyBpbiB0aGVzZSBjYXNlcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHVubGlrZWx5KGN1cnJlbnQtJmd0O2ZsYWdzICZhbXA7IFBGX01FTUFMTE9DKSkKJiM0MzsJCQlnb3RvIGZvcmNlOwogCi0JaWYgKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykpCi0JCWdvdG8gbm9tZW07CiYjNDM7CQlpZiAodW5saWtlbHkodGFza19pbl9tZW1jZ19vb20oY3VycmVudCkpKQomIzQzOwkJCWdvdG8gbm9tZW07CiAKLQlfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7Ci0JcmFpc2VkX21heF9ldmVudCA9IHRydWU7CiYjNDM7CQlpZiAoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSkKJiM0MzsJCQlnb3RvIG5vbWVtOwogCi0JcHNpX21lbXN0YWxsX2VudGVyKCZhbXA7cGZsYWdzKTsKLQlucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcywKLQkJCQkJCSAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTsKLQlwc2lfbWVtc3RhbGxfbGVhdmUoJmFtcDtwZmxhZ3MpOwomIzQzOwkJX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpOwomIzQzOwkJcmFpc2VkX21heF9ldmVudCA9IHRydWU7CiAKLQlpZiAobWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpICZndDs9IG5yX3BhZ2VzKQotCQlnb3RvIHJldHJ5OwomIzQzOwkJcHNpX21lbXN0YWxsX2VudGVyKCZhbXA7cGZsYWdzKTsKJiM0MzsJCW5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLAomIzQzOwkJCQkJCSAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTsKJiM0MzsJCXBzaV9tZW1zdGFsbF9sZWF2ZSgmYW1wO3BmbGFncyk7CiAKLQlpZiAoIWRyYWluZWQpIHsKLQkJZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTsKLQkJZHJhaW5lZCA9IHRydWU7Ci0JCWdvdG8gcmV0cnk7Ci0JfQomIzQzOwkJaWYgKG1lbV9jZ3JvdXBfbWFyZ2luKG1lbV9vdmVyX2xpbWl0KSAmZ3Q7PSBucl9wYWdlcykKJiM0MzsJCQljb250aW51ZTsKIAotCWlmIChnZnBfbWFzayAmYW1wOyBfX0dGUF9OT1JFVFJZKQotCQlnb3RvIG5vbWVtOwotCS8qCi0JICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW0KLQkgKiBtYXkgaGF2ZSBiZWVuIGFibGUgdG8gZnJlZSBzb21lIHBhZ2VzLiAgUmV0cnkgdGhlIGNoYXJnZQotCSAqIGJlZm9yZSBraWxsaW5nIHRoZSB0YXNrLgotCSAqCi0JICogT25seSBmb3IgcmVndWxhciBwYWdlcywgdGhvdWdoOiBodWdlIHBhZ2VzIGFyZSByYXRoZXIKLQkgKiB1bmxpa2VseSB0byBzdWNjZWVkIHNvIGNsb3NlIHRvIHRoZSBsaW1pdCwgYW5kIHdlIGZhbGwgYmFjawotCSAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS4KLQkgKi8KLQlpZiAobnJfcmVjbGFpbWVkICZhbXA7JmFtcDsgbnJfcGFnZXMgJmx0Oz0gKDEgJmx0OyZsdDsgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKQotCQlnb3RvIHJldHJ5OwomIzQzOwkJaWYgKCFkcmFpbmVkKSB7CiYjNDM7CQkJZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTsKJiM0MzsJCQlkcmFpbmVkID0gdHJ1ZTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KIAotCWlmIChucl9yZXRyaWVzLS0pCi0JCWdvdG8gcmV0cnk7CiYjNDM7CQlpZiAoZ2ZwX21hc2sgJmFtcDsgX19HRlBfTk9SRVRSWSkKJiM0MzsJCQlnb3RvIG5vbWVtOwomIzQzOwkJLyoKJiM0MzsJCSAqIEV2ZW4gdGhvdWdoIHRoZSBsaW1pdCBpcyBleGNlZWRlZCBhdCB0aGlzIHBvaW50LCByZWNsYWltCiYjNDM7CQkgKiBtYXkgaGF2ZSBiZWVuIGFibGUgdG8gZnJlZSBzb21lIHBhZ2VzLiAgUmV0cnkgdGhlIGNoYXJnZQomIzQzOwkJICogYmVmb3JlIGtpbGxpbmcgdGhlIHRhc2suCiYjNDM7CQkgKgomIzQzOwkJICogT25seSBmb3IgcmVndWxhciBwYWdlcywgdGhvdWdoOiBodWdlIHBhZ2VzIGFyZSByYXRoZXIKJiM0MzsJCSAqIHVubGlrZWx5IHRvIHN1Y2NlZWQgc28gY2xvc2UgdG8gdGhlIGxpbWl0LCBhbmQgd2UgZmFsbCBiYWNrCiYjNDM7CQkgKiB0byByZWd1bGFyIHBhZ2VzIGFueXdheSBpbiBjYXNlIG9mIGZhaWx1cmUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChucl9yZWNsYWltZWQgJmFtcDsmYW1wOyBucl9wYWdlcyAmbHQ7PSAoMSAmbHQ7Jmx0OyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikpCiYjNDM7CQkJY29udGludWU7CiAKLQlpZiAoZ2ZwX21hc2sgJmFtcDsgX19HRlBfUkVUUllfTUFZRkFJTCkKLQkJZ290byBub21lbTsKJiM0MzsJCWlmIChnZnBfbWFzayAmYW1wOyBfX0dGUF9SRVRSWV9NQVlGQUlMKQomIzQzOwkJCWdvdG8gbm9tZW07CiAKLQkvKiBBdm9pZCBlbmRsZXNzIGxvb3AgZm9yIHRhc2tzIGJ5cGFzc2VkIGJ5IHRoZSBvb20ga2lsbGVyICovCi0JaWYgKHBhc3NlZF9vb20gJmFtcDsmYW1wOyB0YXNrX2lzX2R5aW5nKCkpCi0JCWdvdG8gbm9tZW07CiYjNDM7CQkvKiBBdm9pZCBlbmRsZXNzIGxvb3AgZm9yIHRhc2tzIGJ5cGFzc2VkIGJ5IHRoZSBvb20ga2lsbGVyICovCiYjNDM7CQlpZiAocGFzc2VkX29vbSAmYW1wOyZhbXA7IHRhc2tfaXNfZHlpbmcoKSkKJiM0MzsJCQlnb3RvIG5vbWVtOwogCi0JLyoKLQkgKiBrZWVwIHJldHJ5aW5nIGFzIGxvbmcgYXMgdGhlIG1lbWNnIG9vbSBraWxsZXIgaXMgYWJsZSB0byBtYWtlCi0JICogYSBmb3J3YXJkIHByb2dyZXNzIG9yIGJ5cGFzcyB0aGUgY2hhcmdlIGlmIHRoZSBvb20ga2lsbGVyCi0JICogY291bGRuJiMzOTt0IG1ha2UgYW55IHByb2dyZXNzLgotCSAqLwotCWlmIChtZW1fY2dyb3VwX29vbShtZW1fb3Zlcl9saW1pdCwgZ2ZwX21hc2ssCi0JCQkgICBnZXRfb3JkZXIobnJfcGFnZXMgKiBQQUdFX1NJWkUpKSkgewotCQlwYXNzZWRfb29tID0gdHJ1ZTsKLQkJbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7Ci0JCWdvdG8gcmV0cnk7CiYjNDM7CQkvKgomIzQzOwkJICoga2VlcCByZXRyeWluZyBhcyBsb25nIGFzIHRoZSBtZW1jZyBvb20ga2lsbGVyIGlzIGFibGUgdG8gbWFrZQomIzQzOwkJICogYSBmb3J3YXJkIHByb2dyZXNzIG9yIGJ5cGFzcyB0aGUgY2hhcmdlIGlmIHRoZSBvb20ga2lsbGVyCiYjNDM7CQkgKiBjb3VsZG4mIzM5O3QgbWFrZSBhbnkgcHJvZ3Jlc3MuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtZW1fY2dyb3VwX29vbShtZW1fb3Zlcl9saW1pdCwgZ2ZwX21hc2ssCiYjNDM7CQkJCSAgIGdldF9vcmRlcihucl9wYWdlcyAqIFBBR0VfU0laRSkpKSB7CiYjNDM7CQkJcGFzc2VkX29vbSA9IHRydWU7CiYjNDM7CQkJbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiAJfQogbm9tZW06CiAJLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDExNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFJlZ3Jlc3Npb24gaW4gYHRyeV9jaGFyZ2VfbWVtY2dgKioKCk9rYXksIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgbW9kaWZ5aW5nIGBtbS9tZW1jb250cm9sLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB0cnlfY2hhcmdlX21lbWNnYCBmdW5jdGlvbi4gIEl0JiMzOTtzIHJlcGxhY2luZyBhIGJ1bmNoIG9mIGBnb3RvIHJldHJ5O2Agc3RhdGVtZW50cyB3aXRoIGEgYGZvcmAgbG9vcC4gQXQgZmlyc3QgZ2xhbmNlLCBpdCBsb29rcyBsaWtlIGEgc3R5bGlzdGljIGNoYW5nZSwgYnV0IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBMZXQmIzM5O3MgY29tcGFyZSB0aGUgYmVmb3JlIGFuZCBhZnRlciBjb2RlIHNpZGUtYnktc2lkZToKCkluaXRpYWxseSwgSSBzZWUgdGhlIG9yaWdpbmFsIGNvZGUgdXNpbmcgYHJldHJ5OmAgbGFiZWxzIHdpdGggYGdvdG8gcmV0cnk7YCBmb3IgY29udHJvbCBmbG93LiBUaGUgbG9naWMgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczogSWYgYGNvbnN1bWVfc3RvY2tgIHN1Y2NlZWRzLCB3ZSYjMzk7cmUgZ29vZC4gT3RoZXJ3aXNlLCBpdCBjaGVja3Mgc2V2ZXJhbCBjb25kaXRpb25zLiBJZiB0aGUgYGJhdGNoYCBzaXplIGV4Y2VlZHMgYG5yX3BhZ2VzYCwgb3IgdGhlcmUmIzM5O3MgaW5zdWZmaWNpZW50IG1hcmdpbiwgdGhlIHN5c3RlbSBoYXNuJiMzOTt0IGRyYWluZWQsIG9yIHBhZ2VzIGFyZSByZWNsYWltZWQgdGhlbiB0aGUgY29kZSByZXRyaWVzLiAgQ3J1Y2lhbGx5LCBgbnJfcmV0cmllc2AgaXMgb25seSAqZGVjcmVtZW50ZWQqIGluIG9uZSBzcGVjaWZpYyBgaWZgIGJsb2NrLCBvdGhlcndpc2UgdGhlIHJldHJ5IGhhcHBlbnMgd2l0aG91dCBkZWNyZW1lbnRpbmcuIEFuZCBpZiB3ZSBoaXQgdGhlIE9PTSBjb25kaXRpb24sIHRoZW4gd2Ugc2V0IGBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFU2AgYW5kIHJldHJ5IGFnYWluLgoKTm93LCB0aGUgcGF0Y2ggcmV3cml0ZXMgdGhpcyB1c2luZyBhIGBmb3JgIGxvb3A6IGBmb3IgKDsgbnJfcmV0cmllcyAmZ3Q7PSAwOyBucl9yZXRyaWVzLS0pYC4gIFRoZSBjb2RlIHVzZXMgYGNvbnRpbnVlYCBpbnN0ZWFkIG9mIGBnb3RvYC4gIEhhbmcgb24gYSBzZWNvbmQuLi4gdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiAgVGhlIGBmb3JgIGxvb3AgZGVjcmVtZW50cyBgbnJfcmV0cmllc2AgKm9uIGV2ZXJ5IHNpbmdsZSBgY29udGludWVgKi4gSW4gdGhlIG9yaWdpbmFsIGNvZGUsIGBucl9yZXRyaWVzYCB3YXMgb25seSBkZWNyZW1lbnRlZCAqb25jZSosIGluIHRoZSBjb25kaXRpb24gYGlmIChucl9yZXRyaWVzLS0pIGdvdG8gcmV0cnk7YC4KClNvLCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHJldHJ5IGxvZ2ljIHNpZ25pZmljYW50bHkuIFRoZSBvcmlnaW5hbCBjb2RlIGNvdWxkIGVmZmVjdGl2ZWx5IHJldHJ5IGluZGVmaW5pdGVseSB1bmRlciBzb21lIGNvbmRpdGlvbnMgKHN1Y2ggYXMgdGhlIGBiYXRjaCAmZ3Q7IG5yX3BhZ2VzYCBjb25kaXRpb24pICp3aXRob3V0KiBleGhhdXN0aW5nIHRoZSByZXRyeSBjb3VudGVyLiBUaGUgbmV3IGxvb3AgZm9yY2VzIGEgZGVjcmVtZW50IG9mIGBucl9yZXRyaWVzYCBmb3IgKmV2ZXJ5KiByZXRyeSBjb25kaXRpb24uICBFc3NlbnRpYWxseSwgdGhlIG5ldyBjb2RlIHdpbGwgaW1wb3NlIGEgaGFyZCBsaW1pdCBvbiB0aGUgKnRvdGFsKiBudW1iZXIgb2YgcmV0cmllcywgd2hlcmVhcyB0aGUgb3JpZ2luYWwgaGFkIGEgbW9yZSBudWFuY2VkIHJldHJ5IGJlaGF2aW9yLgoKWWVzLCB0aGlzIG1lYW5zIHRoZSBwYXRjaCAqd2lsbCogY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBgdHJ5X2NoYXJnZV9tZW1jZ2AuIFRoZSBudW1iZXIgb2YgYXR0ZW1wdHMgdG8gYWxsb2NhdGUgbWVtb3J5IHVuZGVyIGxvYWQgd2lsbCBiZSBkaWZmZXJlbnQgdGhhbiBiZWZvcmUuCgpJcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiAgYHRyeV9jaGFyZ2VfbWVtY2dgIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiwgaGFuZGxpbmcgY3JpdGljYWwgbWVtb3J5IGNncm91cCBsb2dpYy4gVGhpcyBjaGFuZ2UgKmNvdWxkKiBsZWFkIHRvIGVhcmxpZXIgT09NIHNpdHVhdGlvbnMsIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb2YgbWVtb3J5IGNncm91cHMsIG9yIGV2ZW4gc3VidGxlIHJlZ3Jlc3Npb25zLiBJJiMzOTtkIGJldHRlciBiZSBzdXJlIHRoZSBwYXRjaCBpcyBjb3JyZWN0LgoKSSYjMzk7bSBjaGVja2luZyB0aGUgZ3VpZGVsaW5lcyBub3cgdG8gYmUgY2VydGFpbiBpZiB0aGlzIGNoYW5nZSB3YXJyYW50cyBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIHRvIGEgY29yZSBrZXJuZWwgbG9naWMgZnVuY3Rpb24sIG5vdCBhIGRvY3VtZW50YXRpb24sIGNvbW1lbnQsIGRlY29yYXRpdmUsIG9yIGRyaXZlciBjb2RlIGNoYW5nZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBZZXMsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXJ0aGVyIHRlc3RpbmcgYW5kIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X2NoYXJnZV9tZW1jZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MjUwNT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNTk0LVxubW0vbWVtY29udHJvbC5jOjI1OTU6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9tZW1jb250cm9sLmMtMjU5Ni1cdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNzkwPXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjc5NS1cbm1tL21lbWNvbnRyb2wuYzoyNzk2Olx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMjc5Ny19XG4tLVxubW0vbWVtY29udHJvbC5jPTMwODg9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzA5NS1cbm1tL21lbWNvbnRyb2wuYzozMDk2Olx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzA5Ny1cdGlmIChyZXQpXG4tLVxubW0vbWVtY29udHJvbC5jPTUxMTY9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MTI0LVx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxubW0vbWVtY29udHJvbC5jOjUxMjU6XHRcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01MTI2LVx0aWYgKHJldCkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NDcwPWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU0NzctXG5tbS9tZW1jb250cm9sLmM6NTQ3ODpcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcbm1tL21lbWNvbnRyb2wuYy01NDc5LVx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzQ5CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQ2hhcmdlIEZ1bmN0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHRyeV9jaGFyZ2VfbWVtY2dgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgem9vbSBpbiBvbiBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIERvZXMgdGhpcyBtb2RpZmljYXRpb24gcmVseSBvbiBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZyBvcHRpb25zPyBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzIGBDT05GSUdfTUVNQ0dgLCBhcyB0aGF0IHNlZW1zIGhpZ2hseSByZWxldmFudCB0byBtZW1vcnkgY29udHJvbCBncm91cHMuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgaXMgdGhlIGNhc2Ugb3IgaWYgb3RoZXIgcmVsYXRlZCBvcHRpb25zIGNvbWUgaW50byBwbGF5LiBUbyBpbnZlc3RpZ2F0ZSwgSSYjMzk7bGwgbmVlZCB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBndXQgc2F5cyBgbW0vS2NvbmZpZ2AgaXMgdGhlIG1vc3QgbGlrZWx5IHNwb3QsIGJ1dCBJJiMzOTtsbCBhbHNvIGdsYW5jZSBhdCBgaW5pdC9LY29uZmlnYCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyBjcnVjaWFsIHJlbGF0ZWQgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBtb2R1bGUuIFRpbWUgdG8gY2hlY2sgdGhvc2UgS2NvbmZpZyBmaWxlcyBhbmQgY29uZmlybSB0aGVzZSBzdXNwaWNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2Nj1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3NS1cbmluaXQvS2NvbmZpZzoxMDc2OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzctXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwODYtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTEtXG5pbml0L0tjb25maWc6MTA5Mjpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDkzLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk4LVxuaW5pdC9LY29uZmlnOjEwOTk6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwMC1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBDYW5kaWRhdGUgQXNzZXNzbWVudDogdHJ5X2NoYXJnZV9tZW1jZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgTUVNQ0dgIGNvbmZpZyBjaGFuZ2UsIGFuZCBmaXJzdCBJIG5lZWQgdG8gY29uZmlybSBpZiBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXMgdGhlIG9ubHkgZnVuY3Rpb24gbW9kaWZpZWQuIFllcywgaXQgaXMuIE5vdywgaXMgdGhpcyBjaGFuZ2Ugd29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgYmVjYXVzZSBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4KClRoaXMgY2hhbmdlIHNlZW1zIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGR1ZSB0byB0aGUgYWx0ZXJlZCByZXRyeSBsb2dpYy4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgb3JpZ2luYWwgY29kZS4uLiBva2F5LCBzbyB0aGUgb2xkIGNvZGUgZGVjcmVtZW50ZWQgYG5yX3JldHJpZXNgIG9ubHkgYXQgdGhlIGByZXRyeWAgbGFiZWwsIGJ1dCB0aGUgbmV3IGNvZGUgZGVjcmVtZW50cyBgbnJfcmV0cmllc2Agd2l0aGluIHRoZSBgZm9yYCBsb29wIG9uIGV2ZXJ5IGBjb250aW51ZWAuIFRoYXQgbWVhbnMgYG5yX3JldHJpZXNgIGlzIHJlZHVjZWQgZmFyIG1vcmUgb2Z0ZW4uIFRoaXMgY2hhbmdlIGNvdWxkIHZlcnkgd2VsbCBpbnRyb2R1Y2UgcHJlbWF0dXJlIE9PTSBjb25kaXRpb25zLiBJcyB0aGlzIGEgYnVnIGZpeCwgb3IgYSBidWcgKmludHJvZHVjdGlvbio/IEl0IGxvb2tzIG1vcmUgbGlrZSBhbiBpbmFkdmVydGVudCBiZWhhdmlvciBjaGFuZ2UuIEVpdGhlciB3YXksIHRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuIEl0IHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgYW5kIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4gYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgdGhlIGZvY3VzIGhlcmUgaXMgb24gYHRyeV9jaGFyZ2VfbWVtY2dgLiBIb2xkIG9uLCB0aGlzIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IGlubGluZWQgYmVjYXVzZSBJIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGlzIGlzIHN0YXRpYzogYHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyguLi4pYC4gWWVwLCBpdCYjMzk7cyBzdGF0aWMuIEdpdmVuIGl0cyBzaXplLCBpdCYjMzk7cyB1bmxpa2VseSB0byBiZSBpbmxpbmVkLCBidXQgdG8gYmUgc3VyZSwgbGV0JiMzOTtzIHRyYWNlIGl0cyBjYWxsZXJzLiBMZXQmIzM5O3Mgc2VlLi4uIGl0JiMzOTtzIGNhbGxlZCBieSBgdHJ5X2NoYXJnZWAgKHN0YXRpYyBpbmxpbmUpLCBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgIChzdGF0aWMpLCBgY2hhcmdlX21lbWNnYCAoc3RhdGljKSBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCAoYSBib29sLCBub24tc3RhdGljKS4gTGV0JiMzOTtzIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaXMgcG90ZW50aWFsbHkgaW5saW5lZCBhcyBgc3RhdGljIGlubGluZWAgY2FsbHMgYW5kIHRoZSBgc3RhdGljYCBmdW5jdGlvbiBjYWxscyBhcmUgbm90IGlkZWFsIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTU0NDU9dm9pZCBtZW1fY2dyb3VwX3NrX2luaGVyaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXG4tLVxubW0vbWVtY29udHJvbC5jLTU0NjktICovXG5tbS9tZW1jb250cm9sLmM6NTQ3MDpib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxubW0vbWVtY29udHJvbC5jLTU0NzEtXHRcdFx0ICBnZnBfdCBnZnBfbWFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODQyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBEb3duIENhbGxzIHRvIGBjaGFyZ2VfbWVtY2dgKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gcGlucG9pbnQgdGhlIGNhbGxlcnMgb2YgYGNoYXJnZV9tZW1jZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgd2UgbmVlZCB0byBzdGFydC4gV2UgYXJlIG1vc3QgbGlrZWx5IGRlYWxpbmcgd2l0aCBtZW1vcnkgYWNjb3VudGluZyBoZXJlLCBsaWtlbHkgYXQgdGhlIG1lbW9yeSBjb250cm9sbGVyIChtZW1jZykgbGV2ZWwuIFRoZSBgY2hhcmdlX21lbWNnYCBmdW5jdGlvbiBpdHNlbGYgaXMgcHJldHR5IGZvdW5kYXRpb25hbCwgc28gaXQmIzM5O3MgcHJvYmFibHkgdG91Y2hlZCBieSBhIGxvdCBvZiBkaWZmZXJlbnQgc3Vic3lzdGVtcy4gVGhpbmtpbmcgdGhyb3VnaCB0aGlzLCBteSBhcHByb2FjaCB3b3VsZCBiZSB0byBmaXJzdCBsZXZlcmFnZSBgZ2l0IGdyZXBgIG9yIGEgc2ltaWxhciBjb2RlIHNlYXJjaCB0b29sLCBhcyB0aGlzIGlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBsb29raW5nIGF0IGRpcmVjdCBmdW5jdGlvbiBjYWxscy4gSSYjMzk7ZCBiZWdpbiB3aXRoIGEgc2ltcGxlIHNlYXJjaCBmb3IgJiMzNDtjaGFyZ2VfbWVtY2cmIzM0OyBpbiB0aGUga2VybmVsIHNvdXJjZSBjb2RlLgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgaW5kaXJlY3QgY2FsbHMgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycywgSSBhbHNvIG5lZWQgdG8gYmUgcHJlcGFyZWQgZm9yIHRoZSBmYWN0IHRoYXQgYSBzdHJhaWdodGZvcndhcmQgZ3JlcCB3b24mIzM5O3QgdGVsbCB0aGUgd2hvbGUgc3RvcnkuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gdXNlIHNvbWUga2luZCBvZiBzdGF0aWMgYW5hbHlzaXMsIG9yIGV2ZW4gcnVuIHNvbWUgdGVzdCB0byBzZWUgdGhlIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4gSSB3aWxsIGRlZmluaXRlbHkgYmUgbG9va2luZyBhdCBhIGNhbGwgZ3JhcGggZ2VuZXJhdGVkIGZyb20gdGhlIGNvZGUsIGlmIGF2YWlsYWJsZS4gVGhhdCB3aWxsIGhlbHAgbWUgbmF2aWdhdGUgcG90ZW50aWFsIGluZGlyZWN0IGNhbGxzLCB3aGljaCBhcmUgdmVyeSBjb21tb24uIEFub3RoZXIgaW1wb3J0YW50IGF2ZW51ZSBpcyB0byBsb29rIGF0IGNyb3NzLXJlZmVyZW5jZXMuIFRoYXQgd291bGQgaWxsdW1pbmF0ZSB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHdobyBjYWxscyBpdC4gSSBuZWVkIHRvIGJlIHByZXBhcmVkIGZvciBpbmRpcmVjdCBjYWxscywgcG9zc2libHkgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycyBvciwgbGVzcyBsaWtlbHksIG1hY3JvcyB0aGF0IGV4cGFuZCBpbnRvIGEgY2FsbC4KCk9uY2UgSSBoYXZlIGEgbGlzdCBvZiBwb3RlbnRpYWwgY2FsbCBzaXRlcywgSSYjMzk7ZCB0aGVuIHN0YXJ0IGZpbHRlcmluZy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMgd291bGQgYmUgdGhlIGhpZ2hlc3QgcHJvYmFiaWxpdHkgY2FuZGlkYXRlcy4gUGFnZXMsIHNsYWJzLCBrbWVtLCBhbmQgc3dhcCB3aWxsIGJlIGhpZ2ggb24gdGhlIGxpc3QuIEFsc28sIEkgd291bGQgY29uc2lkZXIgdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgcmVjbGFpbSBsb2dpYy4gVGhlc2UgYXJlIGFyZWFzIHdoZXJlIG1lbW9yeSBjb25zdW1wdGlvbiBpcyBleHBsaWNpdGx5IHRyYWNrZWQsIGFuZCB0aGF0IGZ1bmN0aW9uIGlzIGFsbW9zdCBjZXJ0YWlubHkgaW52b2x2ZWQuCgpJIGFudGljaXBhdGUgdGhhdCB0aGVyZSB3aWxsIGJlIHF1aXRlIGEgZmV3IGhpdHMuIFRoZSByZWFsIGNoYWxsZW5nZSB3aWxsIGJlIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCBlYWNoIGNhbGwg4oCTIHdoYXQmIzM5O3MgZHJpdmluZyB0aGUgbWVtb3J5IGFjY291bnRpbmcsIHdoYXQgdGhlIGNvbnRleHQgaXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIGFzIGludGVuZGVkIGFuZCBpZiB0aGVyZSBtYXkgYmUgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSB1bHRpbWF0ZSBnb2FsIGlzIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBjaGFyZ2VzIGFyZSBiZWluZyBoYW5kbGVkIGluIHRoaXMgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFyZ2VfbWVtY2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI1MDU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjU5NC1cbm1tL21lbWNvbnRyb2wuYzoyNTk1OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxubW0vbWVtY29udHJvbC5jLTI1OTYtXHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjc5MD1zdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vbWVtY29udHJvbC5jLTI3OTUtXG5tbS9tZW1jb250cm9sLmM6Mjc5NjpcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTI3OTctfVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zMDg4PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG4tLVxubW0vbWVtY29udHJvbC5jLTMwOTUtXG5tbS9tZW1jb250cm9sLmM6MzA5NjpcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTMwOTctXHRpZiAocmV0KVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MTAxPXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTExNS1cbm1tL21lbWNvbnRyb2wuYzo1MTE2OnN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wuYy01MTE3LVx0XHRcdGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTEyNC1cdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcbm1tL21lbWNvbnRyb2wuYzo1MTI1Olx0XHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG5tbS9tZW1jb250cm9sLmMtNTEyNi1cdGlmIChyZXQpIHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTEzNj1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MTQxLVx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcbm1tL21lbWNvbnRyb2wuYzo1MTQyOlx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcbm1tL21lbWNvbnRyb2wuYy01MTQzLVx0Y3NzX3B1dChcdTAwMjZtZW1jZy1cdTAwM2Vjc3MpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MTYwPWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTE3My1cbm1tL21lbWNvbnRyb2wuYzo1MTc0Olx0aWYgKGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCkpXG5tbS9tZW1jb250cm9sLmMtNTE3NS1cdFx0cmV0ID0gLUVOT01FTTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTE5ND1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjA4LVxubW0vbWVtY29udHJvbC5jOjUyMDk6XHRyZXQgPSBjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApO1xubW0vbWVtY29udHJvbC5jLTUyMTAtXG4tLVxubW0vbWVtY29udHJvbC5jPTU0NzA9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTQ3Ny1cbm1tL21lbWNvbnRyb2wuYzo1NDc4Olx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xubW0vbWVtY29udHJvbC5jLTU0NzktXHRcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzIyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIENoYXJnZSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgZnVuY3Rpb25zLiBJIHNlZSBhIHBhdHRlcm4gaGVyZTogYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBhcmUgYWxsIGRlZmluZWQgYXMgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuIFRoYXQgdGVsbHMgbWUgdGhleSYjMzk7cmUgZGVzaWduZWQgdG8gYmUgY2FsbGVkIGZyb20gKm91dHNpZGUqIHRoZSBtb2R1bGUgd2hlcmUgdGhleSYjMzk7cmUgZGVmaW5lZCwgbGlrZWx5IGFzIHBhcnQgb2YgYSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGluZnJhc3RydWN0dXJlLiBNYWtlcyBzZW5zZS4KCkJ1dCB0aGVuIHRoZXJlJiMzOTtzIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AuIEFoLCAqdGhhdCogb25lIGlzIHN0YXRpYy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gSWYgaXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyBzY29wZWQgdG8gYSBzcGVjaWZpYyBmaWxlIG9yIG1vZHVsZS4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCYjMzk7cyBzdGF0aWMgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY2FsbCBzaXRlcyBvZiBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiBpdHMgdXNlLCB3aGljaCB3aWxsIGdpdmUgbWUgaW5zaWdodCBpbnRvIHRoZSBpbnRlcm5hbCB3b3JraW5ncyBvZiB0aGUgbWVtb3J5IGNncm91cCBzdWJzeXN0ZW0sIGFuZCBpdCYjMzk7bGwgaGVscCBtZSBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gaXMgc3BlY2lmaWNhbGx5IHJlc3BvbnNpYmxlIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTMwNjU9c3RhdGljIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTMwODAtLypcbm1tL21lbWNvbnRyb2wuYzozMDgxOiAqIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzOiBjaGFyZ2UgYSBudW1iZXIgb2Yga2VybmVsIHBhZ2VzIHRvIGEgb2JqY2dcbm1tL21lbWNvbnRyb2wuYy0zMDgyLSAqIEBvYmpjZzogb2JqZWN0IGNncm91cCB0byBjaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtMzA4Ny0gKi9cbm1tL21lbWNvbnRyb2wuYzozMDg4OnN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG5tbS9tZW1jb250cm9sLmMtMzA4OS1cdFx0XHRcdCAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmM9MzEzMz1pbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsIGludCBvcmRlcilcbi0tXG5tbS9tZW1jb250cm9sLmMtMzEzOS1cdGlmIChvYmpjZyBcdTAwMjZcdTAwMjYgIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpIHtcbm1tL21lbWNvbnRyb2wuYzozMTQwOlx0XHRyZXQgPSBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhvYmpjZywgZ2ZwLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG5tbS9tZW1jb250cm9sLmMtMzE0MS1cdFx0aWYgKCFyZXQpIHtcbi0tXG5tbS9tZW1jb250cm9sLmM9MzQ3MD1zdGF0aWMgaW50IF9fb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG4tLVxubW0vbWVtY29udHJvbC5jLTM0NzYtXHRjaGFyZ2Vfc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XG5tbS9tZW1jb250cm9sLmM6MzQ3NzpcdHJldCA9IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKG9iamNnLCBnZnAsIGNoYXJnZV9zaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbm1tL21lbWNvbnRyb2wuYy0zNDc4LVx0aWYgKCFyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQWNjb3VudGluZyBpbiB0aGUgS2VybmVsKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZWAuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBidXQgaXQmIzM5O3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uIHNvIHRoZXJlJiMzOTtzIG5vdCBtdWNoIEkgY2FuIGxlYXJuIGFib3V0IGl0IHdpdGggc3RhdGljIGFuYWx5c2lzLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgYnVtbWVyLiBUaGVuIHRoZXJlJiMzOTtzIGBfX29ial9jZ3JvdXBfY2hhcmdlYCB3aGljaCAqaXMqIHN0YXRpYy4gSG1tLCB0aGlzIG1lYW5zIEkgY2FuIHVzZSBzdGFuZGFyZCB0b29scyB0byB0cmFjZSB3aGljaCBmdW5jdGlvbiBjYWxscyBhcmUgaW52b2x2ZWQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyBjYWxscyB0byB0aGF0IGZ1bmN0aW9uIHRvIHNlZSB3aGVyZSBtZW1vcnkgY2hhcmdlcyBhcmUgYWN0dWFsbHkgaGFwcGVuaW5nLCBpbiByZWxhdGlvbiB0byBjZ3JvdXBzLiBUaGlzIHNob3VsZCBoZWxwIG1lIGJldHRlciB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGZsb3cgYW5kIHBpbnBvaW50IHdoZXJlIHNwZWNpZmljIG1lbW9yeSBhY2NvdW50aW5nIGlzIGJlaW5nIHBlcmZvcm1lZC4gVGltZSB0byBkaWcgaW50byB0aGUgY2FsbCBzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19vYmpfY2dyb3VwX2NoYXJnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MzQ2MT1zdGF0aWMgdm9pZCByZWZpbGxfb2JqX3N0b2NrKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzQ2OS1cbm1tL21lbWNvbnRyb2wuYzozNDcwOnN0YXRpYyBpbnQgX19vYmpfY2dyb3VwX2NoYXJnZShzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbm1tL21lbWNvbnRyb2wuYy0zNDcxLVx0XHRcdCAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90ICpyZW1haW5kZXIpXG4tLVxubW0vbWVtY29udHJvbC5jPTM0ODQ9aW50IG9ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLCBzaXplX3Qgc2l6ZSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMzUxNC1cdCAqL1xubW0vbWVtY29udHJvbC5jOjM1MTU6XHRyZXQgPSBfX29ial9jZ3JvdXBfY2hhcmdlKG9iamNnLCBnZnAsIHNpemUsIFx1MDAyNnJlbWFpbmRlcik7XG5tbS9tZW1jb250cm9sLmMtMzUxNi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiByZW1haW5kZXIpXG4tLVxubW0vbWVtY29udHJvbC5jPTM1MzY9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzYwNS1cdFx0XHR1bmxvY2tfc3RvY2soc3RvY2spO1xubW0vbWVtY29udHJvbC5jOjM2MDY6XHRcdFx0aWYgKF9fb2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIGZsYWdzLCBvYmpfc2l6ZSwgXHUwMDI2cmVtYWluZGVyKSlcbm1tL21lbWNvbnRyb2wuYy0zNjA3LVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc2NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJZGVudGlmeWluZyBLZXkgTWVtb3J5IEFjY291bnRpbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGZ1bmN0aW9ucywgYW5kIHRoZSBvYmplY3RpdmUgaXMgdG8gaWRlbnRpZnkgcmVsZXZhbnQgZW50cnkgcG9pbnRzLiBJIHNlZSB0aGF0IGBvYmpfY2dyb3VwX2NoYXJnZWAgYW5kIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhcmUgbm9uLXN0YXRpYywgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGlzIHN1Z2dlc3RzIHRoZXNlIGFzIHByaW1hcnkgY2FuZGlkYXRlczoKCiogICBgX19tZW1fY2dyb3VwX2NoYXJnZWAKKiAgIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYAoqICAgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AKKiAgIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAKKiAgIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgCiogICBgb2JqX2Nncm91cF9jaGFyZ2VgCiogICBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AKCkhvd2V2ZXIsIHRoZSByZWFsIGFjdGlvbiBzZWVtcyB0byBiZSBhcm91bmQgYHRyeV9jaGFyZ2VfbWVtY2dgLiBUaGUgcHJldmlvdXMgbW9kaWZpY2F0aW9uIHdhcyB0byB0aGlzIGZ1bmN0aW9uLiBJdCYjMzk7cyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgYSByZWQgZmxhZyBpbiB0aGlzIGNvbnRleHQsIGJ1dCBpdCYjMzk7cyBhICpsYXJnZSogc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGNvdWxkIG1lYW4gaXQmIzM5O3MgKm5vdCogaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIGFuZCB0aGVyZWZvcmUgc3RpbGwgYSByZWxldmFudCBlbnRyeSBwb2ludC4gR2l2ZW4gdGhlIGluc3RydWN0aW9uIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVycywgaXQmIzM5O3Mgd29ydGggZG91YmxlLWNoZWNraW5nIGlmIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBhY3R1YWxseSBpbmxpbmVkLiBJdCYjMzk7cyBiZXN0IHRvIGJlIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV9jaGFyZ2VfbWVtY2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI1MDU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjU5NC1cbm1tL21lbWNvbnRyb2wuYzoyNTk1OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxubW0vbWVtY29udHJvbC5jLTI1OTYtXHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjc5MD1zdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vbWVtY29udHJvbC5jLTI3OTUtXG5tbS9tZW1jb250cm9sLmM6Mjc5NjpcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTI3OTctfVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zMDg4PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG4tLVxubW0vbWVtY29udHJvbC5jLTMwOTUtXG5tbS9tZW1jb250cm9sLmM6MzA5NjpcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTMwOTctXHRpZiAocmV0KVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MTE2PXN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTEyNC1cdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcbm1tL21lbWNvbnRyb2wuYzo1MTI1Olx0XHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG5tbS9tZW1jb250cm9sLmMtNTEyNi1cdGlmIChyZXQpIHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTQ3MD1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01NDc3LVxubW0vbWVtY29udHJvbC5jOjU0Nzg6XHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XG5tbS9tZW1jb250cm9sLmMtNTQ3OS1cdFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTM3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1lbW9yeSBDZ3JvdXAgQ2hhcmdpbmcgTG9naWMgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGludm9sdmVkIGxpc3Rpbmcgb3V0IHRoZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cCBjaGFyZ2luZzogYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYCwgYG9ial9jZ3JvdXBfY2hhcmdlYCwgYW5kIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYC4gSSB3YXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gYF9fbWVtX2Nncm91cF9jaGFyZ2VgIGFzIGEgY2VudHJhbCBwb2ludCBvZiBpbnRlcmVzdCwgYXMgZXhwZWN0ZWQuIEkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgTUVNQ0dgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGF0IHBsYXkgaGVyZS4KCk5vdywgbGV0JiMzOTtzIHJldmlldyB0aGUgcGF0Y2ggaXRzZWxmLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHJlcGxhY2luZyBhIGBnb3RvIHJldHJ5YCBsb29wIHdpdGggYSBgZm9yYCBsb29wIHRoYXQgdXNlcyBhIGBucl9yZXRyaWVzYCBjb3VudGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uOyBpdCYjMzk7cyBub3QgbWVyZWx5IHN5bnRhY3RpYy4gVGhlIGxvb3AmIzM5O3Mgb3JpZ2luYWwgcmV0cnkgY29uZGl0aW9ucyBpbnZvbHZlZCBzY2VuYXJpb3MgbGlrZSBgYmF0Y2ggJmd0OyBucl9wYWdlc2AsIGBtZW1fY2dyb3VwX21hcmdpbihtZW1fb3Zlcl9saW1pdCkgJmd0Oz0gbnJfcGFnZXNgLCBgIWRyYWluZWRgLCBvciBgbnJfcmVjbGFpbWVkICZhbXA7JmFtcDsgbnJfcGFnZXMgJmx0Oz0gKDEgJmx0OyZsdDsgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpYC4gQ3JpdGljYWxseSwgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIGBucl9yZXRyaWVzYCB3YXMgb25seSBkZWNyZW1lbnRlZCBhdCB0aGUgKmVuZCogb2YgdGhlIGxvb3AgaWYgYSByZXRyeSB3YXMgYWxsb3dlZC4gTm93LCB3ZSBkZWNyZW1lbnQgYG5yX3JldHJpZXNgIG9uICpldmVyeSogaXRlcmF0aW9uIG9mIHRoZSBgZm9yYCBsb29wLgoKVGhlIGltcGxpY2F0aW9uIGlzIHNpZ25pZmljYW50LiBUaGlzIGFsdGVyYXRpb24gaW4gcmV0cnkgYmVoYXZpb3IgcG90ZW50aWFsbHkgbW9kaWZpZXMgdGhlIHRpbWluZyBhbmQgY29uZGl0aW9ucyB1bmRlciB3aGljaCBtZW1vcnkgY2dyb3VwIGNoYXJnZXMgYXJlIGFwcGxpZWQgYW5kLCBpbXBvcnRhbnRseSwgd2hlbiBPT00gc2l0dWF0aW9ucyBhcmUgdHJpZ2dlcmVkLiBUaGUgY2hhbmdlIGRpcmVjdGx5IGluZmx1ZW5jZXMgcmVjbGFpbSBiZWhhdmlvciwgbWFraW5nIHRoaXMgY2hhbmdlIGEgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCBlZGdlIGNhc2VzIGFuZCB1bmV4cGVjdGVkIGJlaGF2aW9ycy4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgZWFybGllciBPT01zIG9yIG1vZGlmaWVkIHJlY2xhaW0gYmVoYXZpb3IsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtX2Nncm91cF9jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTUxMTY9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MTM1LVxubW0vbWVtY29udHJvbC5jOjUxMzY6aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbm1tL21lbWNvbnRyb2wuYy01MTM3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5OTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqQ2hlY2tpbmcgYSBWYXJpYWJsZSBEZWZpbml0aW9uKioKClllcywgdGhhdCBvYnNlcnZhdGlvbiBpcyBjb3JyZWN0LiBNeSBjdXJyZW50IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgdmFyaWFibGUgaXMgcHJvcGVybHkgZGVmaW5lZCB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGNvbnRleHQuIEl0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBhbmFseXNpcywgYW5kIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGV4aXN0ZW5jZSBiZWZvcmUgSSBjYW4gcHJvY2VlZCB3aXRoIGFueSByZWxhdGVkIGNhbGN1bGF0aW9ucyBvciBhc3Nlc3NtZW50cy4gVGltZSB0byBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NTEzNj1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MTQ4LS8qKlxubW0vbWVtY29udHJvbC5jOjUxNDk6ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xubW0vbWVtY29udHJvbC5jLTUxNTAtICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXG4tLVxubW0vbWVtY29udHJvbC5jLTUxNTktICovXG5tbS9tZW1jb250cm9sLmM6NTE2MDppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG5tbS9tZW1jb250cm9sLmMtNTE2MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzQyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqQ2hlY2tpbmcgYSBLZXkgS2VybmVsIFBhcmFtZXRlcioqCgpBbHJpZ2h0LCB0aGF0IGNvbmZpcm1hdGlvbiBpcyBhIGdpdmVuLCB3ZSYjMzk7cmUgb24gdGhlIHJpZ2h0IHRyYWNrLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHNvbWV0aGluZyBjcnVjaWFsOiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIHBhcmFtZXRlciBpcyBhY3R1YWxseSBkZWZpbmVkIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIga2VybmVsIGNvbnRleHQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIHdpdGhvdXQgaXQsIGEgY2VydGFpbiBsaW5lIG9mIGludmVzdGlnYXRpb24gaXMgZ29pbmcgdG8gYmUgYSBjb21wbGV0ZSBub24tc3RhcnRlci4gU28sIHRpbWUgdG8gY2hlY2sgdGhhdCBkZWZpbml0aW9uLCBhbmQgdGhlbiB3ZSYjMzk7bGwgY29udGludWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NTE2MD1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUxODItLyoqXG5tbS9tZW1jb250cm9sLmM6NTE4MzogKiBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8gLSBDaGFyZ2UgYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gZm9yIHN3YXBpbi5cbm1tL21lbWNvbnRyb2wuYy01MTg0LSAqIEBmb2xpbzogdGhlIGZvbGlvIHRvIGNoYXJnZVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MTkzLSAqL1xubW0vbWVtY29udHJvbC5jOjUxOTQ6aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbm1tL21lbWNvbnRyb2wuYy01MTk1LVx0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqQ29uZmlybWF0aW9uIGFuZCBJbml0aWFsIEZvY3VzKioKClllcywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSBjYXNlLiBBbHJpZ2h0LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgZnVuY3Rpb25hbGl0eS4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyB0byB1bmRlcnN0YW5kIHRoaXMgZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc2tfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz01NDQ1PXZvaWQgbWVtX2Nncm91cF9za19pbmhlcml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NDYxLS8qKlxubW0vbWVtY29udHJvbC5jOjU0NjI6ICogbWVtX2Nncm91cF9za19jaGFyZ2UgLSBjaGFyZ2Ugc29ja2V0IG1lbW9yeVxubW0vbWVtY29udHJvbC5jLTU0NjMtICogQHNrOiBzb2NrZXQgaW4gbWVtY2cgdG8gY2hhcmdlXG4tLVxubW0vbWVtY29udHJvbC5jLTU0NjktICovXG5tbS9tZW1jb250cm9sLmM6NTQ3MDpib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxubW0vbWVtY29udHJvbC5jLTU0NzEtXHRcdFx0ICBnZnBfdCBnZnBfbWFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBNZW1vcnkgQWNjb3VudGluZyBDaGVjayoqCgpSaWdodCwgdGhhdCYjMzk7cyBzZXR0bGVkIHRoZW4sIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY29uZmlybWVkLiBOb3csIGxldCYjMzk7cyBkaXZlIGRlZXBlciBhbmQgaW52ZXN0aWdhdGUgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGUgY29yZSBtZW1vcnkgY2dyb3VwIGtlcm5lbCBtZW1vcnkgY2hhcmdlIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYC4gVGhpcyBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBhY2NvdW50aW5nIGRlY2lzaW9ucyBhcmUgbWFkZSwgc28gYSBjbG9zZSBleGFtaW5hdGlvbiBoZXJlIGlzIHdhcnJhbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0zMTIwPXN0YXRpYyB2b2lkIHBhZ2Vfc2V0X29iamNnKHN0cnVjdCBwYWdlICpwYWdlLCBjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTMxMjUtLyoqXG5tbS9tZW1jb250cm9sLmM6MzEyNjogKiBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2U6IGNoYXJnZSBhIGttZW0gcGFnZSB0byB0aGUgY3VycmVudCBtZW1vcnkgY2dyb3VwXG5tbS9tZW1jb250cm9sLmMtMzEyNy0gKiBAcGFnZTogcGFnZSB0byBjaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtMzEzMi0gKi9cbm1tL21lbWNvbnRyb2wuYzozMTMzOmludCBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCwgaW50IG9yZGVyKVxubW0vbWVtY29udHJvbC5jLTMxMzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQyMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQ29uZmlybWluZyBhbmQgRGlyZWN0aW5nIEZvY3VzKioKClllcywgdGhhdCYjMzk7cyBjb3JyZWN0LiBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjay4gTm93LCB0aGUgY3JpdGljYWwgcGllY2UgaW4gdGhpcyBwdXp6bGUsIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYG9ial9jZ3JvdXBfY2hhcmdlYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBtZWNoYW5pc20gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGxpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29ial9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0zMDY1PXN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMDgwLS8qXG5tbS9tZW1jb250cm9sLmM6MzA4MTogKiBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlczogY2hhcmdlIGEgbnVtYmVyIG9mIGtlcm5lbCBwYWdlcyB0byBhIG9iamNnXG5tbS9tZW1jb250cm9sLmMtMzA4Mi0gKiBAb2JqY2c6IG9iamVjdCBjZ3JvdXAgdG8gY2hhcmdlXG4tLVxubW0vbWVtY29udHJvbC5jLTMwODctICovXG5tbS9tZW1jb250cm9sLmM6MzA4ODpzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxubW0vbWVtY29udHJvbC5jLTMwODktXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jPTMxMzM9aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpXG4tLVxubW0vbWVtY29udHJvbC5jLTMxMzktXHRpZiAob2JqY2cgXHUwMDI2XHUwMDI2ICFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKSB7XG5tbS9tZW1jb250cm9sLmM6MzE0MDpcdFx0cmV0ID0gb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMob2JqY2csIGdmcCwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xubW0vbWVtY29udHJvbC5jLTMxNDEtXHRcdGlmICghcmV0KSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTM0NjE9c3RhdGljIHZvaWQgcmVmaWxsX29ial9zdG9jayhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTM0NjktXG5tbS9tZW1jb250cm9sLmM6MzQ3MDpzdGF0aWMgaW50IF9fb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG5tbS9tZW1jb250cm9sLmMtMzQ3MS1cdFx0XHQgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCAqcmVtYWluZGVyKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNDc2LVx0Y2hhcmdlX3NpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xubW0vbWVtY29udHJvbC5jOjM0Nzc6XHRyZXQgPSBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhvYmpjZywgZ2ZwLCBjaGFyZ2Vfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5tbS9tZW1jb250cm9sLmMtMzQ3OC1cdGlmICghcmV0KVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNDgzLVxubW0vbWVtY29udHJvbC5jOjM0ODQ6aW50IG9ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLCBzaXplX3Qgc2l6ZSlcbm1tL21lbWNvbnRyb2wuYy0zNDg1LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMzUxNC1cdCAqL1xubW0vbWVtY29udHJvbC5jOjM1MTU6XHRyZXQgPSBfX29ial9jZ3JvdXBfY2hhcmdlKG9iamNnLCBnZnAsIHNpemUsIFx1MDAyNnJlbWFpbmRlcik7XG5tbS9tZW1jb250cm9sLmMtMzUxNi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiByZW1haW5kZXIpXG4tLVxubW0vbWVtY29udHJvbC5jPTM1MzY9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzYwNS1cdFx0XHR1bmxvY2tfc3RvY2soc3RvY2spO1xubW0vbWVtY29udHJvbC5jOjM2MDY6XHRcdFx0aWYgKF9fb2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIGZsYWdzLCBvYmpfc2l6ZSwgXHUwMDI2cmVtYWluZGVyKSlcbm1tL21lbWNvbnRyb2wuYy0zNjA3LVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01ODM2PWJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01ODY5LS8qKlxubW0vbWVtY29udHJvbC5jOjU4NzA6ICogb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAgLSBjaGFyZ2UgY29tcHJlc3Npb24gYmFja2VuZCBtZW1vcnlcbm1tL21lbWNvbnRyb2wuYy01ODcxLSAqIEBvYmpjZzogdGhlIG9iamVjdCBjZ3JvdXBcbi0tXG5tbS9tZW1jb250cm9sLmMtNTg3Ni0gKi9cbm1tL21lbWNvbnRyb2wuYzo1ODc3OnZvaWQgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSlcbm1tL21lbWNvbnRyb2wuYy01ODc4LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTg4OS1cdC8qIFBGX01FTUFMTE9DIGNvbnRleHQsIGNoYXJnaW5nIG11c3Qgc3VjY2VlZCAqL1xubW0vbWVtY29udHJvbC5jOjU4OTA6XHRpZiAob2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIEdGUF9LRVJORUwsIHNpemUpKVxubW0vbWVtY29udHJvbC5jLTU4OTEtXHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1OTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEFsbG9jYXRpb24gSG9vayoqCgpZZXAsIHRoYXQmIzM5O3MgaXQsIHRoYXQmIzM5O3MgdGhlIGNvbmZpcm1hdGlvbiBJIG5lZWRlZC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbnRvIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBpbnRlcmVzdGluZyBzdHVmZiBoYXBwZW5zLCByaWdodD8gSSYjMzk7bSBiZXR0aW5nIHRoYXQmIzM5O3Mgd2hlcmUgSSBjYW4gZmluZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgYWxsb2NhdGlvbiBob29rLCBJIHN1c3BlY3QgdGhhdCBpcyB3aGVyZSB0aGUgaW5mb3JtYXRpb24gaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM1Mjc9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzUzNS1cbm1tL21lbWNvbnRyb2wuYzozNTM2OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG5tbS9tZW1jb250cm9sLmMtMzUzNy1cdFx0XHRcdCAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBzbGFiX2FsbG9jX2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkwMQoJCQkJCQkJb3V0cHV0OiAxNTgKCQkJCQkJCXRob3VnaHRzOiAxMDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBTZWxlY3Rpb24gZm9yIE1lbW9yeSBDZ3JvdXAgQ2hhcmdlIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gYW5hbHl6aW5nIHRoZSBjaGFuZ2VzIGluIHRoZSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGB0cnlfY2hhcmdlX21lbWNnYC4gVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyByZXRyaWVzIHdvcmssIHdoaWNoIGhhcyBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucyBvbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY291bGQgYWZmZWN0IE9PTSBiZWhhdmlvciBvciByZWNsYWltLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzaWduaWZpY2FudCBjaGFuZ2UuIEl0JiMzOTtzIHRhcmdldGluZyBgTUVNQ0dgLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpOb3csIEkgbmVlZCB0byBwaWNrIGFwcHJvcHJpYXRlIGZvY3VzIHN5bWJvbHMuIEluaXRpYWxseSwgbXkgbGlzdCBsb29rZWQgbGlrZSB0aGlzOiBgX19tZW1fY2dyb3VwX2NoYXJnZWAsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAsIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCBgb2JqX2Nncm91cF9jaGFyZ2VgLCBhbmQgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLgoKSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyBzdGF0ZSwgSSBzaG91bGQgJiMzNDtBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zJiMzNDsgYW5kIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhbmQgYF9fbWVtX2Nncm91cF9jaGFyZ2VgIGFyZSBkZWZpbml0ZWx5IGhvdCBwYXRocywgdGhlIGZvcm1lciBvbiBzbGFiIGFsbG9jYXRpb25zIGFuZCB0aGUgbGF0dGVyIG9uIHBhZ2UgZmF1bHRzLiBTbywgdGhvc2UgYXJlIG91dC4gV2hpbGUgYHRyeV9jaGFyZ2VfbWVtY2dgIGl0c2VsZiBpcyB0aGUgb25lIGJlaW5nIG1vZGlmaWVkLCBpdCYjMzk7cyBzdGF0aWMsIHNvIGl0JiMzOTtzIG5vdCBhIGdvb2QgY2hvaWNlLgoKTXkgdGhpbmtpbmcgaXMgdG8gYWltIGZvciBhIGxlc3MgaG90IGJ1dCByZXByZXNlbnRhdGl2ZSBsaXN0LiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgZm9yIGh1Z2UgcGFnZXMsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGZvciBzd2FwLWluIG9wZXJhdGlvbnMsIGFuZCBgbWVtX2Nncm91cF9za19jaGFyZ2VgIGZvciBzb2NrZXQgbWVtb3J5IGNoYXJnaW5nIGFyZSBhbGwgZ29vZCBjYW5kaWRhdGVzLiBBbHRob3VnaCBgbWVtX2Nncm91cF9za19jaGFyZ2VgIGNvdWxkIGJlIHJlbGF0aXZlbHkgaG90LCB0aGUgY29yZSBsb2dpYyBpcyBub3QgdGhlcmUsIHNvIEkmIzM5O2xsIGluY2x1ZGUgaXQuCgpUaGVuLCBJIHJlbWVtYmVyIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCB3aGljaCBoYW5kbGVzIGttZW0gcGFnZXMsIGFuZCB3aGlsZSBub3Qgc3VwZXItaG90LCBpdCYjMzk7cyBhbiBlbnRyeSBwb2ludC4gSXQgc2VlbXMgbGlrZSB0aGlzIHNhdGlzZmllcyB0aGUgJiMzNDtub24taG90IHBhdGgmIzM0OyByZXF1aXJlbWVudC4KClNvLCBJJiMzOTttIGdvaW5nIHdpdGg6CgoqICAgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgCiogICBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYAoqICAgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYAoqICAgYF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZWAKCkFuZCB0aGUgY29uZmlnIGlzIHNpbXBseSBgTUVNQ0dgLiBJIHRoaW5rIHRoaXMgaXMgYSBnb29kLCBzcGVjaWZpYyBsaXN0IHRoYXQgYWNjdXJhdGVseSByZWZsZWN0cyB0aGUgY29yZSBjaGFuZ2VzIGFuZCBhdm9pZHMgb3Zlcmx5IGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiBOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2tfY2hhcmdlJiMzNDssCiAgICAmIzM0O19fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGxvZ2ljIGluIGB0cnlfY2hhcmdlX21lbWNnYC4gSXQgcmVwbGFjZXMgYSBgZ290byByZXRyeWAgbG9vcCB3aXRoIGEgYGZvcmAgbG9vcCB0aGF0IGRlY3JlbWVudHMgdGhlIHJldHJ5IGNvdW50ZXIgb24gZXZlcnkgaXRlcmF0aW9uLCB3aGljaCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgcmV0cnkgYmVoYXZpb3IgYW5kIGNhbiBsZWFkIHRvIHByZW1hdHVyZSBPT01zIG9yIGRpZmZlcmVudCByZWNsYWltIGJlaGF2aW9yLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2tfY2hhcmdlJiMzNDssCiAgICAmIzM0O19fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGxvZ2ljIGluIGB0cnlfY2hhcmdlX21lbWNnYC4gSXQgcmVwbGFjZXMgYSBgZ290byByZXRyeWAgbG9vcCB3aXRoIGEgYGZvcmAgbG9vcCB0aGF0IGRlY3JlbWVudHMgdGhlIHJldHJ5IGNvdW50ZXIgb24gZXZlcnkgaXRlcmF0aW9uLCB3aGljaCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgcmV0cnkgYmVoYXZpb3IgYW5kIGNhbiBsZWFkIHRvIHByZW1hdHVyZSBPT01zIG9yIGRpZmZlcmVudCByZWNsYWltIGJlaGF2aW9yLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzU6MzcuOTM0NjI0ODA3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5NDEzMjc0OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCIsXG4gICAgXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIixcbiAgICBcIm1lbV9jZ3JvdXBfc2tfY2hhcmdlXCIsXG4gICAgXCJfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGxvZ2ljIGluIGB0cnlfY2hhcmdlX21lbWNnYC4gSXQgcmVwbGFjZXMgYSBgZ290byByZXRyeWAgbG9vcCB3aXRoIGEgYGZvcmAgbG9vcCB0aGF0IGRlY3JlbWVudHMgdGhlIHJldHJ5IGNvdW50ZXIgb24gZXZlcnkgaXRlcmF0aW9uLCB3aGljaCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgcmV0cnkgYmVoYXZpb3IgYW5kIGNhbiBsZWFkIHRvIHByZW1hdHVyZSBPT01zIG9yIGRpZmZlcmVudCByZWNsYWltIGJlaGF2aW9yLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNTozNy45MzQ2MzI3NTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTM3ODEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE2ZGIwMDEzMjJmYzkxMTkwYTFmMWIwNzNiOTcyZGZiZGEzZDQyNmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAyMjozNTozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA2ZGM0ODg4YTkwZjNmLi43ODFiY2NlZDU4NDhmIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0yNjA3LDk4ICsyNjA3LDk3IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbiBcXHR1bnNpZ25lZCBsb25nIHBmbGFncztcXG4gXFx0Ym9vbCBhbGxvd19zcGlubmluZyA9IGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKGdmcF9tYXNrKTtcXG4gXFxuLXJldHJ5Olxcbi1cXHRpZiAoY29uc3VtZV9zdG9jayhtZW1jZywgbnJfcGFnZXMpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0Zm9yICg7IG5yX3JldHJpZXMgXFx1MDAzZT0gMDsgbnJfcmV0cmllcy0tKSB7XFxuIFxcbi1cXHRpZiAoIWFsbG93X3NwaW5uaW5nKVxcbi1cXHRcXHQvKiBBdm9pZCB0aGUgcmVmaWxsIGFuZCBmbHVzaCBvZiB0aGUgb2xkZXIgc3RvY2sgKi9cXG4tXFx0XFx0YmF0Y2ggPSBucl9wYWdlcztcXG4rXFx0XFx0aWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xcbi1cXHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSB8fFxcbi1cXHQgICAgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSkge1xcbi1cXHRcXHRpZiAocGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpXFxuLVxcdFxcdFxcdGdvdG8gZG9uZV9yZXN0b2NrO1xcbi1cXHRcXHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxcbi1cXHRcXHRcXHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgYmF0Y2gpO1xcbi1cXHRcXHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbW9yeSk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdG1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtc3cpO1xcbi1cXHRcXHRyZWNsYWltX29wdGlvbnMgXFx1MDAyNj0gfk1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XFxuLVxcdH1cXG4rXFx0XFx0aWYgKCFhbGxvd19zcGlubmluZylcXG4rXFx0XFx0XFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXFxuK1xcdFxcdFxcdGJhdGNoID0gbnJfcGFnZXM7XFxuIFxcbi1cXHRpZiAoYmF0Y2ggXFx1MDAzZSBucl9wYWdlcykge1xcbi1cXHRcXHRiYXRjaCA9IG5yX3BhZ2VzO1xcbi1cXHRcXHRnb3RvIHJldHJ5O1xcbi1cXHR9XFxuK1xcdFxcdHJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XFxuK1xcdFxcdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XFxuK1xcdFxcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBiYXRjaCwgXFx1MDAyNmNvdW50ZXIpKSB7XFxuK1xcdFxcdFxcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSlcXG4rXFx0XFx0XFx0XFx0Z290byBkb25lX3Jlc3RvY2s7XFxuK1xcdFxcdFxcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXFxuK1xcdFxcdFxcdFxcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBiYXRjaCk7XFxuK1xcdFxcdFxcdG1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtb3J5KTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XFxuK1xcdFxcdFxcdHJlY2xhaW1fb3B0aW9ucyBcXHUwMDI2PSB+TUVNQ0dfUkVDTEFJTV9NQVlfU1dBUDtcXG4rXFx0XFx0fVxcbiBcXG4tXFx0LypcXG4tXFx0ICogUHJldmVudCB1bmJvdW5kZWQgcmVjdXJzaW9uIHdoZW4gcmVjbGFpbSBvcGVyYXRpb25zIG5lZWQgdG9cXG4tXFx0ICogYWxsb2NhdGUgbWVtb3J5LiBUaGlzIG1pZ2h0IGV4Y2VlZCB0aGUgbGltaXRzIHRlbXBvcmFyaWx5LFxcbi1cXHQgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrXFxuLVxcdCAqIHVuZGVyIHRoZSBsaW1pdCBvdmVyIHRyaWdnZXJpbmcgT09NIGtpbGxzIGluIHRoZXNlIGNhc2VzLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpKVxcbi1cXHRcXHRnb3RvIGZvcmNlO1xcbitcXHRcXHRpZiAoYmF0Y2ggXFx1MDAzZSBucl9wYWdlcykge1xcbitcXHRcXHRcXHRiYXRjaCA9IG5yX3BhZ2VzO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbiBcXG4tXFx0aWYgKHVubGlrZWx5KHRhc2tfaW5fbWVtY2dfb29tKGN1cnJlbnQpKSlcXG4tXFx0XFx0Z290byBub21lbTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUHJldmVudCB1bmJvdW5kZWQgcmVjdXJzaW9uIHdoZW4gcmVjbGFpbSBvcGVyYXRpb25zIG5lZWQgdG9cXG4rXFx0XFx0ICogYWxsb2NhdGUgbWVtb3J5LiBUaGlzIG1pZ2h0IGV4Y2VlZCB0aGUgbGltaXRzIHRlbXBvcmFyaWx5LFxcbitcXHRcXHQgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrXFxuK1xcdFxcdCAqIHVuZGVyIHRoZSBsaW1pdCBvdmVyIHRyaWdnZXJpbmcgT09NIGtpbGxzIGluIHRoZXNlIGNhc2VzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpKVxcbitcXHRcXHRcXHRnb3RvIGZvcmNlO1xcbiBcXG4tXFx0aWYgKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykpXFxuLVxcdFxcdGdvdG8gbm9tZW07XFxuK1xcdFxcdGlmICh1bmxpa2VseSh0YXNrX2luX21lbWNnX29vbShjdXJyZW50KSkpXFxuK1xcdFxcdFxcdGdvdG8gbm9tZW07XFxuIFxcbi1cXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XFxuLVxcdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xcbitcXHRcXHRpZiAoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcXG4rXFx0XFx0XFx0Z290byBub21lbTtcXG4gXFxuLVxcdHBzaV9tZW1zdGFsbF9lbnRlcihcXHUwMDI2cGZsYWdzKTtcXG4tXFx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTtcXG4tXFx0cHNpX21lbXN0YWxsX2xlYXZlKFxcdTAwMjZwZmxhZ3MpO1xcbitcXHRcXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XFxuK1xcdFxcdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xcbiBcXG4tXFx0aWYgKG1lbV9jZ3JvdXBfbWFyZ2luKG1lbV9vdmVyX2xpbWl0KSBcXHUwMDNlPSBucl9wYWdlcylcXG4tXFx0XFx0Z290byByZXRyeTtcXG4rXFx0XFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbitcXHRcXHRucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xcbitcXHRcXHRwc2lfbWVtc3RhbGxfbGVhdmUoXFx1MDAyNnBmbGFncyk7XFxuIFxcbi1cXHRpZiAoIWRyYWluZWQpIHtcXG4tXFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTtcXG4tXFx0XFx0ZHJhaW5lZCA9IHRydWU7XFxuLVxcdFxcdGdvdG8gcmV0cnk7XFxuLVxcdH1cXG4rXFx0XFx0aWYgKG1lbV9jZ3JvdXBfbWFyZ2luKG1lbV9vdmVyX2xpbWl0KSBcXHUwMDNlPSBucl9wYWdlcylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9OT1JFVFJZKVxcbi1cXHRcXHRnb3RvIG5vbWVtO1xcbi1cXHQvKlxcbi1cXHQgKiBFdmVuIHRob3VnaCB0aGUgbGltaXQgaXMgZXhjZWVkZWQgYXQgdGhpcyBwb2ludCwgcmVjbGFpbVxcbi1cXHQgKiBtYXkgaGF2ZSBiZWVuIGFibGUgdG8gZnJlZSBzb21lIHBhZ2VzLiAgUmV0cnkgdGhlIGNoYXJnZVxcbi1cXHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cXG4tXFx0ICpcXG4tXFx0ICogT25seSBmb3IgcmVndWxhciBwYWdlcywgdGhvdWdoOiBodWdlIHBhZ2VzIGFyZSByYXRoZXJcXG4tXFx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcXG4tXFx0ICogdG8gcmVndWxhciBwYWdlcyBhbnl3YXkgaW4gY2FzZSBvZiBmYWlsdXJlLlxcbi1cXHQgKi9cXG4tXFx0aWYgKG5yX3JlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiBucl9wYWdlcyBcXHUwMDNjPSAoMSBcXHUwMDNjXFx1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikpXFxuLVxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdGlmICghZHJhaW5lZCkge1xcbitcXHRcXHRcXHRkcmFpbl9hbGxfc3RvY2sobWVtX292ZXJfbGltaXQpO1xcbitcXHRcXHRcXHRkcmFpbmVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdGlmIChucl9yZXRyaWVzLS0pXFxuLVxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdGlmIChnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX05PUkVUUlkpXFxuK1xcdFxcdFxcdGdvdG8gbm9tZW07XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEV2ZW4gdGhvdWdoIHRoZSBsaW1pdCBpcyBleGNlZWRlZCBhdCB0aGlzIHBvaW50LCByZWNsYWltXFxuK1xcdFxcdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXFxuK1xcdFxcdCAqIGJlZm9yZSBraWxsaW5nIHRoZSB0YXNrLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxcbitcXHRcXHQgKiB1bmxpa2VseSB0byBzdWNjZWVkIHNvIGNsb3NlIHRvIHRoZSBsaW1pdCwgYW5kIHdlIGZhbGwgYmFja1xcbitcXHRcXHQgKiB0byByZWd1bGFyIHBhZ2VzIGFueXdheSBpbiBjYXNlIG9mIGZhaWx1cmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobnJfcmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2IG5yX3BhZ2VzIFxcdTAwM2M9ICgxIFxcdTAwM2NcXHUwMDNjIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9SRVRSWV9NQVlGQUlMKVxcbi1cXHRcXHRnb3RvIG5vbWVtO1xcbitcXHRcXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9SRVRSWV9NQVlGQUlMKVxcbitcXHRcXHRcXHRnb3RvIG5vbWVtO1xcbiBcXG4tXFx0LyogQXZvaWQgZW5kbGVzcyBsb29wIGZvciB0YXNrcyBieXBhc3NlZCBieSB0aGUgb29tIGtpbGxlciAqL1xcbi1cXHRpZiAocGFzc2VkX29vbSBcXHUwMDI2XFx1MDAyNiB0YXNrX2lzX2R5aW5nKCkpXFxuLVxcdFxcdGdvdG8gbm9tZW07XFxuK1xcdFxcdC8qIEF2b2lkIGVuZGxlc3MgbG9vcCBmb3IgdGFza3MgYnlwYXNzZWQgYnkgdGhlIG9vbSBraWxsZXIgKi9cXG4rXFx0XFx0aWYgKHBhc3NlZF9vb20gXFx1MDAyNlxcdTAwMjYgdGFza19pc19keWluZygpKVxcbitcXHRcXHRcXHRnb3RvIG5vbWVtO1xcbiBcXG4tXFx0LypcXG4tXFx0ICoga2VlcCByZXRyeWluZyBhcyBsb25nIGFzIHRoZSBtZW1jZyBvb20ga2lsbGVyIGlzIGFibGUgdG8gbWFrZVxcbi1cXHQgKiBhIGZvcndhcmQgcHJvZ3Jlc3Mgb3IgYnlwYXNzIHRoZSBjaGFyZ2UgaWYgdGhlIG9vbSBraWxsZXJcXG4tXFx0ICogY291bGRuJ3QgbWFrZSBhbnkgcHJvZ3Jlc3MuXFxuLVxcdCAqL1xcbi1cXHRpZiAobWVtX2Nncm91cF9vb20obWVtX292ZXJfbGltaXQsIGdmcF9tYXNrLFxcbi1cXHRcXHRcXHQgICBnZXRfb3JkZXIobnJfcGFnZXMgKiBQQUdFX1NJWkUpKSkge1xcbi1cXHRcXHRwYXNzZWRfb29tID0gdHJ1ZTtcXG4tXFx0XFx0bnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuLVxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGtlZXAgcmV0cnlpbmcgYXMgbG9uZyBhcyB0aGUgbWVtY2cgb29tIGtpbGxlciBpcyBhYmxlIHRvIG1ha2VcXG4rXFx0XFx0ICogYSBmb3J3YXJkIHByb2dyZXNzIG9yIGJ5cGFzcyB0aGUgY2hhcmdlIGlmIHRoZSBvb20ga2lsbGVyXFxuK1xcdFxcdCAqIGNvdWxkbid0IG1ha2UgYW55IHByb2dyZXNzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG1lbV9jZ3JvdXBfb29tKG1lbV9vdmVyX2xpbWl0LCBnZnBfbWFzayxcXG4rXFx0XFx0XFx0XFx0ICAgZ2V0X29yZGVyKG5yX3BhZ2VzICogUEFHRV9TSVpFKSkpIHtcXG4rXFx0XFx0XFx0cGFzc2VkX29vbSA9IHRydWU7XFxuK1xcdFxcdFxcdG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIG5vbWVtOlxcbiBcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNTozOC40MDQ2NzYzOTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MjQ3MTI2NjIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiLFxuICAgIFwibWVtX2Nncm91cF9za19jaGFyZ2VcIixcbiAgICBcIl9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMgaW4gYHRyeV9jaGFyZ2VfbWVtY2dgLiBJdCByZXBsYWNlcyBhIGBnb3RvIHJldHJ5YCBsb29wIHdpdGggYSBgZm9yYCBsb29wIHRoYXQgZGVjcmVtZW50cyB0aGUgcmV0cnkgY291bnRlciBvbiBldmVyeSBpdGVyYXRpb24sIHdoaWNoIHNpZ25pZmljYW50bHkgYWx0ZXJzIHRoZSByZXRyeSBiZWhhdmlvciBhbmQgY2FuIGxlYWQgdG8gcHJlbWF0dXJlIE9PTXMgb3IgZGlmZmVyZW50IHJlY2xhaW0gYmVoYXZpb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE2ZGIwMDEzMjJmYzkxMTkwYTFmMWIwNzNiOTcyZGZiZGEzZDQyNmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDIyOjM1OjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2ZGM0ODg4YTkwZjNmLi43ODFiY2NlZDU4NDhmIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0yNjA3LDk4ICsyNjA3LDk3IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHRib29sIGFsbG93X3NwaW5uaW5nID0gZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZ2ZwX21hc2spO1xuIFxuLXJldHJ5OlxuLVx0aWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRmb3IgKDsgbnJfcmV0cmllcyBcdTAwM2U9IDA7IG5yX3JldHJpZXMtLSkge1xuIFxuLVx0aWYgKCFhbGxvd19zcGlubmluZylcbi1cdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG4tXHRcdGJhdGNoID0gbnJfcGFnZXM7XG4rXHRcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4rXHRcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuLVx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbi1cdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG4tXHRcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIGJhdGNoLCBcdTAwMjZjb3VudGVyKSlcbi1cdFx0XHRnb3RvIGRvbmVfcmVzdG9jaztcbi1cdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbi1cdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIGJhdGNoKTtcbi1cdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpO1xuLVx0fSBlbHNlIHtcbi1cdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XG4tXHRcdHJlY2xhaW1fb3B0aW9ucyBcdTAwMjY9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuLVx0fVxuK1x0XHRpZiAoIWFsbG93X3NwaW5uaW5nKVxuK1x0XHRcdC8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqL1xuK1x0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4gXG4tXHRpZiAoYmF0Y2ggXHUwMDNlIG5yX3BhZ2VzKSB7XG4tXHRcdGJhdGNoID0gbnJfcGFnZXM7XG4tXHRcdGdvdG8gcmV0cnk7XG4tXHR9XG4rXHRcdHJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XG4rXHRcdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XG4rXHRcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG4rXHRcdFx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKVxuK1x0XHRcdFx0Z290byBkb25lX3Jlc3RvY2s7XG4rXHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbitcdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gpO1xuK1x0XHRcdG1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtb3J5KTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbXN3KTtcbitcdFx0XHRyZWNsYWltX29wdGlvbnMgXHUwMDI2PSB+TUVNQ0dfUkVDTEFJTV9NQVlfU1dBUDtcbitcdFx0fVxuIFxuLVx0Lypcbi1cdCAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvXG4tXHQgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksXG4tXHQgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrXG4tXHQgKiB1bmRlciB0aGUgbGltaXQgb3ZlciB0cmlnZ2VyaW5nIE9PTSBraWxscyBpbiB0aGVzZSBjYXNlcy5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKSlcbi1cdFx0Z290byBmb3JjZTtcbitcdFx0aWYgKGJhdGNoIFx1MDAzZSBucl9wYWdlcykge1xuK1x0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbiBcbi1cdGlmICh1bmxpa2VseSh0YXNrX2luX21lbWNnX29vbShjdXJyZW50KSkpXG4tXHRcdGdvdG8gbm9tZW07XG4rXHRcdC8qXG4rXHRcdCAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvXG4rXHRcdCAqIGFsbG9jYXRlIG1lbW9yeS4gVGhpcyBtaWdodCBleGNlZWQgdGhlIGxpbWl0cyB0ZW1wb3JhcmlseSxcbitcdFx0ICogYnV0IHdlIHByZWZlciBmYWNpbGl0YXRpbmcgbWVtb3J5IHJlY2xhaW0gYW5kIGdldHRpbmcgYmFja1xuK1x0XHQgKiB1bmRlciB0aGUgbGltaXQgb3ZlciB0cmlnZ2VyaW5nIE9PTSBraWxscyBpbiB0aGVzZSBjYXNlcy5cbitcdFx0ICovXG4rXHRcdGlmICh1bmxpa2VseShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQykpXG4rXHRcdFx0Z290byBmb3JjZTtcbiBcbi1cdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxuLVx0XHRnb3RvIG5vbWVtO1xuK1x0XHRpZiAodW5saWtlbHkodGFza19pbl9tZW1jZ19vb20oY3VycmVudCkpKVxuK1x0XHRcdGdvdG8gbm9tZW07XG4gXG4tXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XG4tXHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcbitcdFx0aWYgKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykpXG4rXHRcdFx0Z290byBub21lbTtcbiBcbi1cdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuLVx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXG4tXHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuLVx0cHNpX21lbXN0YWxsX2xlYXZlKFx1MDAyNnBmbGFncyk7XG4rXHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbitcdFx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XG4gXG4tXHRpZiAobWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpIFx1MDAzZT0gbnJfcGFnZXMpXG4tXHRcdGdvdG8gcmV0cnk7XG4rXHRcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuK1x0XHRucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcyxcbitcdFx0XHRcdFx0XHQgICAgZ2ZwX21hc2ssIHJlY2xhaW1fb3B0aW9ucywgTlVMTCk7XG4rXHRcdHBzaV9tZW1zdGFsbF9sZWF2ZShcdTAwMjZwZmxhZ3MpO1xuIFxuLVx0aWYgKCFkcmFpbmVkKSB7XG4tXHRcdGRyYWluX2FsbF9zdG9jayhtZW1fb3Zlcl9saW1pdCk7XG4tXHRcdGRyYWluZWQgPSB0cnVlO1xuLVx0XHRnb3RvIHJldHJ5O1xuLVx0fVxuK1x0XHRpZiAobWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpIFx1MDAzZT0gbnJfcGFnZXMpXG4rXHRcdFx0Y29udGludWU7XG4gXG4tXHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpXG4tXHRcdGdvdG8gbm9tZW07XG4tXHQvKlxuLVx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cbi1cdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXG4tXHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cbi1cdCAqXG4tXHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxuLVx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcbi1cdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cbi1cdCAqL1xuLVx0aWYgKG5yX3JlY2xhaW1lZCBcdTAwMjZcdTAwMjYgbnJfcGFnZXMgXHUwMDNjPSAoMSBcdTAwM2NcdTAwM2MgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKVxuLVx0XHRnb3RvIHJldHJ5O1xuK1x0XHRpZiAoIWRyYWluZWQpIHtcbitcdFx0XHRkcmFpbl9hbGxfc3RvY2sobWVtX292ZXJfbGltaXQpO1xuK1x0XHRcdGRyYWluZWQgPSB0cnVlO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4gXG4tXHRpZiAobnJfcmV0cmllcy0tKVxuLVx0XHRnb3RvIHJldHJ5O1xuK1x0XHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpXG4rXHRcdFx0Z290byBub21lbTtcbitcdFx0LypcbitcdFx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cbitcdFx0ICogbWF5IGhhdmUgYmVlbiBhYmxlIHRvIGZyZWUgc29tZSBwYWdlcy4gIFJldHJ5IHRoZSBjaGFyZ2VcbitcdFx0ICogYmVmb3JlIGtpbGxpbmcgdGhlIHRhc2suXG4rXHRcdCAqXG4rXHRcdCAqIE9ubHkgZm9yIHJlZ3VsYXIgcGFnZXMsIHRob3VnaDogaHVnZSBwYWdlcyBhcmUgcmF0aGVyXG4rXHRcdCAqIHVubGlrZWx5IHRvIHN1Y2NlZWQgc28gY2xvc2UgdG8gdGhlIGxpbWl0LCBhbmQgd2UgZmFsbCBiYWNrXG4rXHRcdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cbitcdFx0ICovXG4rXHRcdGlmIChucl9yZWNsYWltZWQgXHUwMDI2XHUwMDI2IG5yX3BhZ2VzIFx1MDAzYz0gKDEgXHUwMDNjXHUwMDNjIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSlcbitcdFx0XHRjb250aW51ZTtcbiBcbi1cdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfUkVUUllfTUFZRkFJTClcbi1cdFx0Z290byBub21lbTtcbitcdFx0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9SRVRSWV9NQVlGQUlMKVxuK1x0XHRcdGdvdG8gbm9tZW07XG4gXG4tXHQvKiBBdm9pZCBlbmRsZXNzIGxvb3AgZm9yIHRhc2tzIGJ5cGFzc2VkIGJ5IHRoZSBvb20ga2lsbGVyICovXG4tXHRpZiAocGFzc2VkX29vbSBcdTAwMjZcdTAwMjYgdGFza19pc19keWluZygpKVxuLVx0XHRnb3RvIG5vbWVtO1xuK1x0XHQvKiBBdm9pZCBlbmRsZXNzIGxvb3AgZm9yIHRhc2tzIGJ5cGFzc2VkIGJ5IHRoZSBvb20ga2lsbGVyICovXG4rXHRcdGlmIChwYXNzZWRfb29tIFx1MDAyNlx1MDAyNiB0YXNrX2lzX2R5aW5nKCkpXG4rXHRcdFx0Z290byBub21lbTtcbiBcbi1cdC8qXG4tXHQgKiBrZWVwIHJldHJ5aW5nIGFzIGxvbmcgYXMgdGhlIG1lbWNnIG9vbSBraWxsZXIgaXMgYWJsZSB0byBtYWtlXG4tXHQgKiBhIGZvcndhcmQgcHJvZ3Jlc3Mgb3IgYnlwYXNzIHRoZSBjaGFyZ2UgaWYgdGhlIG9vbSBraWxsZXJcbi1cdCAqIGNvdWxkbid0IG1ha2UgYW55IHByb2dyZXNzLlxuLVx0ICovXG4tXHRpZiAobWVtX2Nncm91cF9vb20obWVtX292ZXJfbGltaXQsIGdmcF9tYXNrLFxuLVx0XHRcdCAgIGdldF9vcmRlcihucl9wYWdlcyAqIFBBR0VfU0laRSkpKSB7XG4tXHRcdHBhc3NlZF9vb20gPSB0cnVlO1xuLVx0XHRucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbi1cdFx0Z290byByZXRyeTtcbitcdFx0LypcbitcdFx0ICoga2VlcCByZXRyeWluZyBhcyBsb25nIGFzIHRoZSBtZW1jZyBvb20ga2lsbGVyIGlzIGFibGUgdG8gbWFrZVxuK1x0XHQgKiBhIGZvcndhcmQgcHJvZ3Jlc3Mgb3IgYnlwYXNzIHRoZSBjaGFyZ2UgaWYgdGhlIG9vbSBraWxsZXJcbitcdFx0ICogY291bGRuJ3QgbWFrZSBhbnkgcHJvZ3Jlc3MuXG4rXHRcdCAqL1xuK1x0XHRpZiAobWVtX2Nncm91cF9vb20obWVtX292ZXJfbGltaXQsIGdmcF9tYXNrLFxuK1x0XHRcdFx0ICAgZ2V0X29yZGVyKG5yX3BhZ2VzICogUEFHRV9TSVpFKSkpIHtcbitcdFx0XHRwYXNzZWRfb29tID0gdHJ1ZTtcbitcdFx0XHRucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuIFx0fVxuIG5vbWVtOlxuIFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM1OjM4LjQwNDY3NzUzM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTM3NTgxMjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBSZWdyZXNzaW9uIGluIGB0cnlfY2hhcmdlX21lbWNnYCoqXG5cbk9rYXksIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIG1vZGlmeWluZyBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdHJ5X2NoYXJnZV9tZW1jZ2AgZnVuY3Rpb24uICBJdCdzIHJlcGxhY2luZyBhIGJ1bmNoIG9mIGBnb3RvIHJldHJ5O2Agc3RhdGVtZW50cyB3aXRoIGEgYGZvcmAgbG9vcC4gQXQgZmlyc3QgZ2xhbmNlLCBpdCBsb29rcyBsaWtlIGEgc3R5bGlzdGljIGNoYW5nZSwgYnV0IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBMZXQncyBjb21wYXJlIHRoZSBiZWZvcmUgYW5kIGFmdGVyIGNvZGUgc2lkZS1ieS1zaWRlOlxuXG5Jbml0aWFsbHksIEkgc2VlIHRoZSBvcmlnaW5hbCBjb2RlIHVzaW5nIGByZXRyeTpgIGxhYmVscyB3aXRoIGBnb3RvIHJldHJ5O2AgZm9yIGNvbnRyb2wgZmxvdy4gVGhlIGxvZ2ljIGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6IElmIGBjb25zdW1lX3N0b2NrYCBzdWNjZWVkcywgd2UncmUgZ29vZC4gT3RoZXJ3aXNlLCBpdCBjaGVja3Mgc2V2ZXJhbCBjb25kaXRpb25zLiBJZiB0aGUgYGJhdGNoYCBzaXplIGV4Y2VlZHMgYG5yX3BhZ2VzYCwgb3IgdGhlcmUncyBpbnN1ZmZpY2llbnQgbWFyZ2luLCB0aGUgc3lzdGVtIGhhc24ndCBkcmFpbmVkLCBvciBwYWdlcyBhcmUgcmVjbGFpbWVkIHRoZW4gdGhlIGNvZGUgcmV0cmllcy4gIENydWNpYWxseSwgYG5yX3JldHJpZXNgIGlzIG9ubHkgKmRlY3JlbWVudGVkKiBpbiBvbmUgc3BlY2lmaWMgYGlmYCBibG9jaywgb3RoZXJ3aXNlIHRoZSByZXRyeSBoYXBwZW5zIHdpdGhvdXQgZGVjcmVtZW50aW5nLiBBbmQgaWYgd2UgaGl0IHRoZSBPT00gY29uZGl0aW9uLCB0aGVuIHdlIHNldCBgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVNgIGFuZCByZXRyeSBhZ2Fpbi5cblxuTm93LCB0aGUgcGF0Y2ggcmV3cml0ZXMgdGhpcyB1c2luZyBhIGBmb3JgIGxvb3A6IGBmb3IgKDsgbnJfcmV0cmllcyBcdTAwM2U9IDA7IG5yX3JldHJpZXMtLSlgLiAgVGhlIGNvZGUgdXNlcyBgY29udGludWVgIGluc3RlYWQgb2YgYGdvdG9gLiAgSGFuZyBvbiBhIHNlY29uZC4uLiB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuICBUaGUgYGZvcmAgbG9vcCBkZWNyZW1lbnRzIGBucl9yZXRyaWVzYCAqb24gZXZlcnkgc2luZ2xlIGBjb250aW51ZWAqLiBJbiB0aGUgb3JpZ2luYWwgY29kZSwgYG5yX3JldHJpZXNgIHdhcyBvbmx5IGRlY3JlbWVudGVkICpvbmNlKiwgaW4gdGhlIGNvbmRpdGlvbiBgaWYgKG5yX3JldHJpZXMtLSkgZ290byByZXRyeTtgLlxuXG5TbywgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSByZXRyeSBsb2dpYyBzaWduaWZpY2FudGx5LiBUaGUgb3JpZ2luYWwgY29kZSBjb3VsZCBlZmZlY3RpdmVseSByZXRyeSBpbmRlZmluaXRlbHkgdW5kZXIgc29tZSBjb25kaXRpb25zIChzdWNoIGFzIHRoZSBgYmF0Y2ggXHUwMDNlIG5yX3BhZ2VzYCBjb25kaXRpb24pICp3aXRob3V0KiBleGhhdXN0aW5nIHRoZSByZXRyeSBjb3VudGVyLiBUaGUgbmV3IGxvb3AgZm9yY2VzIGEgZGVjcmVtZW50IG9mIGBucl9yZXRyaWVzYCBmb3IgKmV2ZXJ5KiByZXRyeSBjb25kaXRpb24uICBFc3NlbnRpYWxseSwgdGhlIG5ldyBjb2RlIHdpbGwgaW1wb3NlIGEgaGFyZCBsaW1pdCBvbiB0aGUgKnRvdGFsKiBudW1iZXIgb2YgcmV0cmllcywgd2hlcmVhcyB0aGUgb3JpZ2luYWwgaGFkIGEgbW9yZSBudWFuY2VkIHJldHJ5IGJlaGF2aW9yLlxuXG5ZZXMsIHRoaXMgbWVhbnMgdGhlIHBhdGNoICp3aWxsKiBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIGB0cnlfY2hhcmdlX21lbWNnYC4gVGhlIG51bWJlciBvZiBhdHRlbXB0cyB0byBhbGxvY2F0ZSBtZW1vcnkgdW5kZXIgbG9hZCB3aWxsIGJlIGRpZmZlcmVudCB0aGFuIGJlZm9yZS5cblxuSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24sIGhhbmRsaW5nIGNyaXRpY2FsIG1lbW9yeSBjZ3JvdXAgbG9naWMuIFRoaXMgY2hhbmdlICpjb3VsZCogbGVhZCB0byBlYXJsaWVyIE9PTSBzaXR1YXRpb25zLCB1bmV4cGVjdGVkIGJlaGF2aW9yIG9mIG1lbW9yeSBjZ3JvdXBzLCBvciBldmVuIHN1YnRsZSByZWdyZXNzaW9ucy4gSSdkIGJldHRlciBiZSBzdXJlIHRoZSBwYXRjaCBpcyBjb3JyZWN0LlxuXG5JJ20gY2hlY2tpbmcgdGhlIGd1aWRlbGluZXMgbm93IHRvIGJlIGNlcnRhaW4gaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy4gVGhlIGNoYW5nZSBpcyB0byBhIGNvcmUga2VybmVsIGxvZ2ljIGZ1bmN0aW9uLCBub3QgYSBkb2N1bWVudGF0aW9uLCBjb21tZW50LCBkZWNvcmF0aXZlLCBvciBkcml2ZXIgY29kZSBjaGFuZ2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gWWVzLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnVydGhlciB0ZXN0aW5nIGFuZCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTU1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM1OjUwLjU0MjI2MzQxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDQwMTI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfY2hhcmdlX21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjUwNT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI1OTQtXFxubW0vbWVtY29udHJvbC5jOjI1OTU6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI1OTYtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNzkwPXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNzk1LVxcbm1tL21lbWNvbnRyb2wuYzoyNzk2OlxcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0yNzk3LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMDg4PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzA5NS1cXG5tbS9tZW1jb250cm9sLmM6MzA5NjpcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzA5Ny1cXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxMTY9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxMjQtXFx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxcbm1tL21lbWNvbnRyb2wuYzo1MTI1OlxcdFxcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG5tbS9tZW1jb250cm9sLmMtNTEyNi1cXHRpZiAocmV0KSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTQ3MD1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU0NzctXFxubW0vbWVtY29udHJvbC5jOjU0Nzg6XFx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xcbm1tL21lbWNvbnRyb2wuYy01NDc5LVxcdFxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNTo1MC42MTI2NzE4MDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzEzNTk4MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IENoYXJnZSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHRyeV9jaGFyZ2VfbWVtY2dgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgem9vbSBpbiBvbiBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIERvZXMgdGhpcyBtb2RpZmljYXRpb24gcmVseSBvbiBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZyBvcHRpb25zPyBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzIGBDT05GSUdfTUVNQ0dgLCBhcyB0aGF0IHNlZW1zIGhpZ2hseSByZWxldmFudCB0byBtZW1vcnkgY29udHJvbCBncm91cHMuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgaXMgdGhlIGNhc2Ugb3IgaWYgb3RoZXIgcmVsYXRlZCBvcHRpb25zIGNvbWUgaW50byBwbGF5LiBUbyBpbnZlc3RpZ2F0ZSwgSSdsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGd1dCBzYXlzIGBtbS9LY29uZmlnYCBpcyB0aGUgbW9zdCBsaWtlbHkgc3BvdCwgYnV0IEknbGwgYWxzbyBnbGFuY2UgYXQgYGluaXQvS2NvbmZpZ2AganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZW5zdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyBjcnVjaWFsIHJlbGF0ZWQgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBtb2R1bGUuIFRpbWUgdG8gY2hlY2sgdGhvc2UgS2NvbmZpZyBmaWxlcyBhbmQgY29uZmlybSB0aGVzZSBzdXNwaWNpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzQ5LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzU6NTQuMzI2MjczNzE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTcwMjgyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDY2PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzUtXFxuaW5pdC9LY29uZmlnOjEwNzY6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzctXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4NC1cXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkxLVxcbmluaXQvS2NvbmZpZzoxMDkyOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDkzLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk4LVxcbmluaXQvS2NvbmZpZzoxMDk5OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM1OjU2LjY4MzMwODEyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3ODEyMzUxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBDYW5kaWRhdGUgQXNzZXNzbWVudDogdHJ5X2NoYXJnZV9tZW1jZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYE1FTUNHYCBjb25maWcgY2hhbmdlLCBhbmQgZmlyc3QgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYHRyeV9jaGFyZ2VfbWVtY2dgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIG1vZGlmaWVkLiBZZXMsIGl0IGlzLiBOb3csIGlzIHRoaXMgY2hhbmdlIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIGJlY2F1c2UgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy5cblxuVGhpcyBjaGFuZ2Ugc2VlbXMgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgZHVlIHRvIHRoZSBhbHRlcmVkIHJldHJ5IGxvZ2ljLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBvcmlnaW5hbCBjb2RlLi4uIG9rYXksIHNvIHRoZSBvbGQgY29kZSBkZWNyZW1lbnRlZCBgbnJfcmV0cmllc2Agb25seSBhdCB0aGUgYHJldHJ5YCBsYWJlbCwgYnV0IHRoZSBuZXcgY29kZSBkZWNyZW1lbnRzIGBucl9yZXRyaWVzYCB3aXRoaW4gdGhlIGBmb3JgIGxvb3Agb24gZXZlcnkgYGNvbnRpbnVlYC4gVGhhdCBtZWFucyBgbnJfcmV0cmllc2AgaXMgcmVkdWNlZCBmYXIgbW9yZSBvZnRlbi4gVGhpcyBjaGFuZ2UgY291bGQgdmVyeSB3ZWxsIGludHJvZHVjZSBwcmVtYXR1cmUgT09NIGNvbmRpdGlvbnMuIElzIHRoaXMgYSBidWcgZml4LCBvciBhIGJ1ZyAqaW50cm9kdWN0aW9uKj8gSXQgbG9va3MgbW9yZSBsaWtlIGFuIGluYWR2ZXJ0ZW50IGJlaGF2aW9yIGNoYW5nZS4gRWl0aGVyIHdheSwgdGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4gSXQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBhbmQgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIHRoZSBmb2N1cyBoZXJlIGlzIG9uIGB0cnlfY2hhcmdlX21lbWNnYC4gSG9sZCBvbiwgdGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IGlubGluZWQgYmVjYXVzZSBJIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGlzIGlzIHN0YXRpYzogYHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyguLi4pYC4gWWVwLCBpdCdzIHN0YXRpYy4gR2l2ZW4gaXRzIHNpemUsIGl0J3MgdW5saWtlbHkgdG8gYmUgaW5saW5lZCwgYnV0IHRvIGJlIHN1cmUsIGxldCdzIHRyYWNlIGl0cyBjYWxsZXJzLiBMZXQncyBzZWUuLi4gaXQncyBjYWxsZWQgYnkgYHRyeV9jaGFyZ2VgIChzdGF0aWMgaW5saW5lKSwgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCAoc3RhdGljKSwgYGNoYXJnZV9tZW1jZ2AgKHN0YXRpYykgYW5kIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgKGEgYm9vbCwgbm9uLXN0YXRpYykuIExldCdzIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaXMgcG90ZW50aWFsbHkgaW5saW5lZCBhcyBgc3RhdGljIGlubGluZWAgY2FsbHMgYW5kIHRoZSBgc3RhdGljYCBmdW5jdGlvbiBjYWxscyBhcmUgbm90IGlkZWFsIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODEwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM2OjA0LjQ2NDU0NjIzM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTM5NTIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NTQ0NT12b2lkIG1lbV9jZ3JvdXBfc2tfaW5oZXJpdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NDY5LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1NDcwOmJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxubW0vbWVtY29udHJvbC5jLTU0NzEtXFx0XFx0XFx0ICBnZnBfdCBnZnBfbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6MDQuNTQ5OTQ3NjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTk0MDg5NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gQ2FsbHMgdG8gYGNoYXJnZV9tZW1jZ2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHBpbnBvaW50IHRoZSBjYWxsZXJzIG9mIGBjaGFyZ2VfbWVtY2dgLiBUaGF0J3Mgd2hlcmUgd2UgbmVlZCB0byBzdGFydC4gV2UgYXJlIG1vc3QgbGlrZWx5IGRlYWxpbmcgd2l0aCBtZW1vcnkgYWNjb3VudGluZyBoZXJlLCBsaWtlbHkgYXQgdGhlIG1lbW9yeSBjb250cm9sbGVyIChtZW1jZykgbGV2ZWwuIFRoZSBgY2hhcmdlX21lbWNnYCBmdW5jdGlvbiBpdHNlbGYgaXMgcHJldHR5IGZvdW5kYXRpb25hbCwgc28gaXQncyBwcm9iYWJseSB0b3VjaGVkIGJ5IGEgbG90IG9mIGRpZmZlcmVudCBzdWJzeXN0ZW1zLiBUaGlua2luZyB0aHJvdWdoIHRoaXMsIG15IGFwcHJvYWNoIHdvdWxkIGJlIHRvIGZpcnN0IGxldmVyYWdlIGBnaXQgZ3JlcGAgb3IgYSBzaW1pbGFyIGNvZGUgc2VhcmNoIHRvb2wsIGFzIHRoaXMgaXMgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgZm9yIGxvb2tpbmcgYXQgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzLiBJJ2QgYmVnaW4gd2l0aCBhIHNpbXBsZSBzZWFyY2ggZm9yIFwiY2hhcmdlX21lbWNnXCIgaW4gdGhlIGtlcm5lbCBzb3VyY2UgY29kZS5cblxuR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgaW5kaXJlY3QgY2FsbHMgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycywgSSBhbHNvIG5lZWQgdG8gYmUgcHJlcGFyZWQgZm9yIHRoZSBmYWN0IHRoYXQgYSBzdHJhaWdodGZvcndhcmQgZ3JlcCB3b24ndCB0ZWxsIHRoZSB3aG9sZSBzdG9yeS4gVGhlIG5leHQgc3RlcCBpcyB0byB1c2Ugc29tZSBraW5kIG9mIHN0YXRpYyBhbmFseXNpcywgb3IgZXZlbiBydW4gc29tZSB0ZXN0IHRvIHNlZSB0aGUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkLiBJIHdpbGwgZGVmaW5pdGVseSBiZSBsb29raW5nIGF0IGEgY2FsbCBncmFwaCBnZW5lcmF0ZWQgZnJvbSB0aGUgY29kZSwgaWYgYXZhaWxhYmxlLiBUaGF0IHdpbGwgaGVscCBtZSBuYXZpZ2F0ZSBwb3RlbnRpYWwgaW5kaXJlY3QgY2FsbHMsIHdoaWNoIGFyZSB2ZXJ5IGNvbW1vbi4gQW5vdGhlciBpbXBvcnRhbnQgYXZlbnVlIGlzIHRvIGxvb2sgYXQgY3Jvc3MtcmVmZXJlbmNlcy4gVGhhdCB3b3VsZCBpbGx1bWluYXRlIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygd2hvIGNhbGxzIGl0LiBJIG5lZWQgdG8gYmUgcHJlcGFyZWQgZm9yIGluZGlyZWN0IGNhbGxzLCBwb3NzaWJseSB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIG9yLCBsZXNzIGxpa2VseSwgbWFjcm9zIHRoYXQgZXhwYW5kIGludG8gYSBjYWxsLlxuXG5PbmNlIEkgaGF2ZSBhIGxpc3Qgb2YgcG90ZW50aWFsIGNhbGwgc2l0ZXMsIEknZCB0aGVuIHN0YXJ0IGZpbHRlcmluZy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMgd291bGQgYmUgdGhlIGhpZ2hlc3QgcHJvYmFiaWxpdHkgY2FuZGlkYXRlcy4gUGFnZXMsIHNsYWJzLCBrbWVtLCBhbmQgc3dhcCB3aWxsIGJlIGhpZ2ggb24gdGhlIGxpc3QuIEFsc28sIEkgd291bGQgY29uc2lkZXIgdGhlIGtlcm5lbCdzIG1lbW9yeSByZWNsYWltIGxvZ2ljLiBUaGVzZSBhcmUgYXJlYXMgd2hlcmUgbWVtb3J5IGNvbnN1bXB0aW9uIGlzIGV4cGxpY2l0bHkgdHJhY2tlZCwgYW5kIHRoYXQgZnVuY3Rpb24gaXMgYWxtb3N0IGNlcnRhaW5seSBpbnZvbHZlZC5cblxuSSBhbnRpY2lwYXRlIHRoYXQgdGhlcmUgd2lsbCBiZSBxdWl0ZSBhIGZldyBoaXRzLiBUaGUgcmVhbCBjaGFsbGVuZ2Ugd2lsbCBiZSB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgZWFjaCBjYWxsIOKAkyB3aGF0J3MgZHJpdmluZyB0aGUgbWVtb3J5IGFjY291bnRpbmcsIHdoYXQgdGhlIGNvbnRleHQgaXMuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgYXMgaW50ZW5kZWQgYW5kIGlmIHRoZXJlIG1heSBiZSBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGlzc3Vlcy4gVGhlIHVsdGltYXRlIGdvYWwgaXMgdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGNoYXJnZXMgYXJlIGJlaW5nIGhhbmRsZWQgaW4gdGhpcyBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NDIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNjoxMC4xNDQwNDExMzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0Njk3MTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYXJnZV9tZW1jZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTI1MDU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTk0LVxcbm1tL21lbWNvbnRyb2wuYzoyNTk1OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbm1tL21lbWNvbnRyb2wuYy0yNTk2LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjc5MD1zdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjc5NS1cXG5tbS9tZW1jb250cm9sLmM6Mjc5NjpcXHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMjc5Ny19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzA4OD1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMwOTUtXFxubW0vbWVtY29udHJvbC5jOjMwOTY6XFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTMwOTctXFx0aWYgKHJldClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTAxPXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTE1LVxcbm1tL21lbWNvbnRyb2wuYzo1MTE2OnN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLmMtNTExNy1cXHRcXHRcXHRnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTEyNC1cXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXFxubW0vbWVtY29udHJvbC5jOjUxMjU6XFx0XFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbm1tL21lbWNvbnRyb2wuYy01MTI2LVxcdGlmIChyZXQpIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTM2PWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE0MS1cXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xcbm1tL21lbWNvbnRyb2wuYzo1MTQyOlxcdHJldCA9IGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCk7XFxubW0vbWVtY29udHJvbC5jLTUxNDMtXFx0Y3NzX3B1dChcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcyk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE2MD1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE3My1cXG5tbS9tZW1jb250cm9sLmM6NTE3NDpcXHRpZiAoY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKSlcXG5tbS9tZW1jb250cm9sLmMtNTE3NS1cXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxOTQ9aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjA4LVxcbm1tL21lbWNvbnRyb2wuYzo1MjA5OlxcdHJldCA9IGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCk7XFxubW0vbWVtY29udHJvbC5jLTUyMTAtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTQ3MD1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU0NzctXFxubW0vbWVtY29udHJvbC5jOjU0Nzg6XFx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xcbm1tL21lbWNvbnRyb2wuYy01NDc5LVxcdFxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNjoxMC4yMDg3NDQ2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzc0ODMyMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIENoYXJnZSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGZ1bmN0aW9ucy4gSSBzZWUgYSBwYXR0ZXJuIGhlcmU6IGBfX21lbV9jZ3JvdXBfY2hhcmdlYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCwgYW5kIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgYXJlIGFsbCBkZWZpbmVkIGFzIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBUaGF0IHRlbGxzIG1lIHRoZXkncmUgZGVzaWduZWQgdG8gYmUgY2FsbGVkIGZyb20gKm91dHNpZGUqIHRoZSBtb2R1bGUgd2hlcmUgdGhleSdyZSBkZWZpbmVkLCBsaWtlbHkgYXMgcGFydCBvZiBhIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgaW5mcmFzdHJ1Y3R1cmUuIE1ha2VzIHNlbnNlLlxuXG5CdXQgdGhlbiB0aGVyZSdzIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AuIEFoLCAqdGhhdCogb25lIGlzIHN0YXRpYy4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBJZiBpdCdzIHN0YXRpYywgaXQncyBzY29wZWQgdG8gYSBzcGVjaWZpYyBmaWxlIG9yIG1vZHVsZS4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCdzIHN0YXRpYyBhbmQgd2hlcmUgaXQncyBiZWluZyB1c2VkLiBMZXQncyBkaWcgaW50byB0aGUgY2FsbCBzaXRlcyBvZiBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiBpdHMgdXNlLCB3aGljaCB3aWxsIGdpdmUgbWUgaW5zaWdodCBpbnRvIHRoZSBpbnRlcm5hbCB3b3JraW5ncyBvZiB0aGUgbWVtb3J5IGNncm91cCBzdWJzeXN0ZW0sIGFuZCBpdCdsbCBoZWxwIG1lIHNlZSB3aGF0IHRoZSBmdW5jdGlvbiBpcyBzcGVjaWZpY2FsbHkgcmVzcG9uc2libGUgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzIyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM2OjEzLjk4MzU3OTU3N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NDEzODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MzA2NT1zdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMDgwLS8qXFxubW0vbWVtY29udHJvbC5jOjMwODE6ICogb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXM6IGNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdG8gYSBvYmpjZ1xcbm1tL21lbWNvbnRyb2wuYy0zMDgyLSAqIEBvYmpjZzogb2JqZWN0IGNncm91cCB0byBjaGFyZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMDg3LSAqL1xcbm1tL21lbWNvbnRyb2wuYzozMDg4OnN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxubW0vbWVtY29udHJvbC5jLTMwODktXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTMxMzM9aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzEzOS1cXHRpZiAob2JqY2cgXFx1MDAyNlxcdTAwMjYgIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpIHtcXG5tbS9tZW1jb250cm9sLmM6MzE0MDpcXHRcXHRyZXQgPSBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhvYmpjZywgZ2ZwLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG5tbS9tZW1jb250cm9sLmMtMzE0MS1cXHRcXHRpZiAoIXJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTM0NzA9c3RhdGljIGludCBfX29ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM0NzYtXFx0Y2hhcmdlX3NpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xcbm1tL21lbWNvbnRyb2wuYzozNDc3OlxcdHJldCA9IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKG9iamNnLCBnZnAsIGNoYXJnZV9zaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbm1tL21lbWNvbnRyb2wuYy0zNDc4LVxcdGlmICghcmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNjoxNC4wODg5OTg2NjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0MzkzMDA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQWNjb3VudGluZyBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLiBJdCdzIGEga2V5IGZ1bmN0aW9uLCBidXQgaXQncyBub3QgYSBzdGF0aWMgZnVuY3Rpb24gc28gdGhlcmUncyBub3QgbXVjaCBJIGNhbiBsZWFybiBhYm91dCBpdCB3aXRoIHN0YXRpYyBhbmFseXNpcy4gVGhhdCdzIGEgYml0IG9mIGEgYnVtbWVyLiBUaGVuIHRoZXJlJ3MgYF9fb2JqX2Nncm91cF9jaGFyZ2VgIHdoaWNoICppcyogc3RhdGljLiBIbW0sIHRoaXMgbWVhbnMgSSBjYW4gdXNlIHN0YW5kYXJkIHRvb2xzIHRvIHRyYWNlIHdoaWNoIGZ1bmN0aW9uIGNhbGxzIGFyZSBpbnZvbHZlZC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbiB0byBzZWUgd2hlcmUgbWVtb3J5IGNoYXJnZXMgYXJlIGFjdHVhbGx5IGhhcHBlbmluZywgaW4gcmVsYXRpb24gdG8gY2dyb3Vwcy4gVGhpcyBzaG91bGQgaGVscCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBmbG93IGFuZCBwaW5wb2ludCB3aGVyZSBzcGVjaWZpYyBtZW1vcnkgYWNjb3VudGluZyBpcyBiZWluZyBwZXJmb3JtZWQuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6MTcuNzMyOTMyNTE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjU2NzM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX29ial9jZ3JvdXBfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MzQ2MT1zdGF0aWMgdm9pZCByZWZpbGxfb2JqX3N0b2NrKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNDY5LVxcbm1tL21lbWNvbnRyb2wuYzozNDcwOnN0YXRpYyBpbnQgX19vYmpfY2dyb3VwX2NoYXJnZShzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcXG5tbS9tZW1jb250cm9sLmMtMzQ3MS1cXHRcXHRcXHQgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCAqcmVtYWluZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTM0ODQ9aW50IG9ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTE0LVxcdCAqL1xcbm1tL21lbWNvbnRyb2wuYzozNTE1OlxcdHJldCA9IF9fb2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIGdmcCwgc2l6ZSwgXFx1MDAyNnJlbWFpbmRlcik7XFxubW0vbWVtY29udHJvbC5jLTM1MTYtXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcmVtYWluZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTM1MzY9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNjA1LVxcdFxcdFxcdHVubG9ja19zdG9jayhzdG9jayk7XFxubW0vbWVtY29udHJvbC5jOjM2MDY6XFx0XFx0XFx0aWYgKF9fb2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIGZsYWdzLCBvYmpfc2l6ZSwgXFx1MDAyNnJlbWFpbmRlcikpXFxubW0vbWVtY29udHJvbC5jLTM2MDctXFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNjoxNy44MDk1MDQ4MDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIyNTE5NTg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJZGVudGlmeWluZyBLZXkgTWVtb3J5IEFjY291bnRpbmcgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgbWVtb3J5IGNncm91cCBjaGFyZ2luZyBmdW5jdGlvbnMsIGFuZCB0aGUgb2JqZWN0aXZlIGlzIHRvIGlkZW50aWZ5IHJlbGV2YW50IGVudHJ5IHBvaW50cy4gSSBzZWUgdGhhdCBgb2JqX2Nncm91cF9jaGFyZ2VgIGFuZCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AgYXJlIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyBzdWdnZXN0cyB0aGVzZSBhcyBwcmltYXJ5IGNhbmRpZGF0ZXM6XG5cbiogICBgX19tZW1fY2dyb3VwX2NoYXJnZWBcbiogICBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmBcbiogICBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYFxuKiAgIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWBcbiogICBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYFxuKiAgIGBvYmpfY2dyb3VwX2NoYXJnZWBcbiogICBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2BcblxuSG93ZXZlciwgdGhlIHJlYWwgYWN0aW9uIHNlZW1zIHRvIGJlIGFyb3VuZCBgdHJ5X2NoYXJnZV9tZW1jZ2AuIFRoZSBwcmV2aW91cyBtb2RpZmljYXRpb24gd2FzIHRvIHRoaXMgZnVuY3Rpb24uIEl0J3Mgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IGEgcmVkIGZsYWcgaW4gdGhpcyBjb250ZXh0LCBidXQgaXQncyBhICpsYXJnZSogc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGNvdWxkIG1lYW4gaXQncyAqbm90KiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgYW5kIHRoZXJlZm9yZSBzdGlsbCBhIHJlbGV2YW50IGVudHJ5IHBvaW50LiBHaXZlbiB0aGUgaW5zdHJ1Y3Rpb24gdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLCBpdCdzIHdvcnRoIGRvdWJsZS1jaGVja2luZyBpZiBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXMgYWN0dWFsbHkgaW5saW5lZC4gSXQncyBiZXN0IHRvIGJlIHNhZmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzY3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM2OjI0LjAzNDcwMzQ1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE1NDIwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X2NoYXJnZV9tZW1jZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTI1MDU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTk0LVxcbm1tL21lbWNvbnRyb2wuYzoyNTk1OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbm1tL21lbWNvbnRyb2wuYy0yNTk2LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjc5MD1zdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjc5NS1cXG5tbS9tZW1jb250cm9sLmM6Mjc5NjpcXHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMjc5Ny19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzA4OD1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMwOTUtXFxubW0vbWVtY29udHJvbC5jOjMwOTY6XFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTMwOTctXFx0aWYgKHJldClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTE2PXN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTI0LVxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG5tbS9tZW1jb250cm9sLmM6NTEyNTpcXHRcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTUxMjYtXFx0aWYgKHJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU0NzA9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NDc3LVxcbm1tL21lbWNvbnRyb2wuYzo1NDc4OlxcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcXG5tbS9tZW1jb250cm9sLmMtNTQ3OS1cXHRcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6MjQuMTA2MjUwMTI0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNDgwODc2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTWVtb3J5IENncm91cCBDaGFyZ2luZyBMb2dpYyBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGludm9sdmVkIGxpc3Rpbmcgb3V0IHRoZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cCBjaGFyZ2luZzogYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYCwgYG9ial9jZ3JvdXBfY2hhcmdlYCwgYW5kIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYC4gSSB3YXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gYF9fbWVtX2Nncm91cF9jaGFyZ2VgIGFzIGEgY2VudHJhbCBwb2ludCBvZiBpbnRlcmVzdCwgYXMgZXhwZWN0ZWQuIEkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgTUVNQ0dgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGF0IHBsYXkgaGVyZS5cblxuTm93LCBsZXQncyByZXZpZXcgdGhlIHBhdGNoIGl0c2VsZi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyByZXBsYWNpbmcgYSBgZ290byByZXRyeWAgbG9vcCB3aXRoIGEgYGZvcmAgbG9vcCB0aGF0IHVzZXMgYSBgbnJfcmV0cmllc2AgY291bnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbjsgaXQncyBub3QgbWVyZWx5IHN5bnRhY3RpYy4gVGhlIGxvb3AncyBvcmlnaW5hbCByZXRyeSBjb25kaXRpb25zIGludm9sdmVkIHNjZW5hcmlvcyBsaWtlIGBiYXRjaCBcdTAwM2UgbnJfcGFnZXNgLCBgbWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpIFx1MDAzZT0gbnJfcGFnZXNgLCBgIWRyYWluZWRgLCBvciBgbnJfcmVjbGFpbWVkIFx1MDAyNlx1MDAyNiBucl9wYWdlcyBcdTAwM2M9ICgxIFx1MDAzY1x1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUilgLiBDcml0aWNhbGx5LCBpbiB0aGUgb3JpZ2luYWwgY29kZSwgYG5yX3JldHJpZXNgIHdhcyBvbmx5IGRlY3JlbWVudGVkIGF0IHRoZSAqZW5kKiBvZiB0aGUgbG9vcCBpZiBhIHJldHJ5IHdhcyBhbGxvd2VkLiBOb3csIHdlIGRlY3JlbWVudCBgbnJfcmV0cmllc2Agb24gKmV2ZXJ5KiBpdGVyYXRpb24gb2YgdGhlIGBmb3JgIGxvb3AuXG5cblRoZSBpbXBsaWNhdGlvbiBpcyBzaWduaWZpY2FudC4gVGhpcyBhbHRlcmF0aW9uIGluIHJldHJ5IGJlaGF2aW9yIHBvdGVudGlhbGx5IG1vZGlmaWVzIHRoZSB0aW1pbmcgYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbWVtb3J5IGNncm91cCBjaGFyZ2VzIGFyZSBhcHBsaWVkIGFuZCwgaW1wb3J0YW50bHksIHdoZW4gT09NIHNpdHVhdGlvbnMgYXJlIHRyaWdnZXJlZC4gVGhlIGNoYW5nZSBkaXJlY3RseSBpbmZsdWVuY2VzIHJlY2xhaW0gYmVoYXZpb3IsIG1ha2luZyB0aGlzIGNoYW5nZSBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhbmQgdW5leHBlY3RlZCBiZWhhdmlvcnMuIEdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGVhcmxpZXIgT09NcyBvciBtb2RpZmllZCByZWNsYWltIGJlaGF2aW9yLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkzNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNjozMi4yNTQzNDIxN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5ODQ5NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1fY2dyb3VwX2NoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTUxMTY9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxMzUtXFxubW0vbWVtY29udHJvbC5jOjUxMzY6aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG5tbS9tZW1jb250cm9sLmMtNTEzNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM2OjMyLjMxNjMzMzgxOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIxNjI2OTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqQ2hlY2tpbmcgYSBWYXJpYWJsZSBEZWZpbml0aW9uKipcblxuWWVzLCB0aGF0IG9ic2VydmF0aW9uIGlzIGNvcnJlY3QuIE15IGN1cnJlbnQgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCB2YXJpYWJsZSBpcyBwcm9wZXJseSBkZWZpbmVkIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dC4gSXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYW5hbHlzaXMsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2UgYmVmb3JlIEkgY2FuIHByb2NlZWQgd2l0aCBhbnkgcmVsYXRlZCBjYWxjdWxhdGlvbnMgb3IgYXNzZXNzbWVudHMuIFRpbWUgdG8gY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTkyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6MzYuMjM3OTYzNjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NzI1MjU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NTEzNj1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxNDgtLyoqXFxubW0vbWVtY29udHJvbC5jOjUxNDk6ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xcbm1tL21lbWNvbnRyb2wuYy01MTUwLSAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxNTktICovXFxubW0vbWVtY29udHJvbC5jOjUxNjA6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbm1tL21lbWNvbnRyb2wuYy01MTYxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6MzYuNjI1MjI0ODY5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3Njg0ODg3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkNoZWNraW5nIGEgS2V5IEtlcm5lbCBQYXJhbWV0ZXIqKlxuXG5BbHJpZ2h0LCB0aGF0IGNvbmZpcm1hdGlvbiBpcyBhIGdpdmVuLCB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2suIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSBzb21ldGhpbmcgY3J1Y2lhbDogSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCBjb250ZXh0LiBJdCdzIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIHdpdGhvdXQgaXQsIGEgY2VydGFpbiBsaW5lIG9mIGludmVzdGlnYXRpb24gaXMgZ29pbmcgdG8gYmUgYSBjb21wbGV0ZSBub24tc3RhcnRlci4gU28sIHRpbWUgdG8gY2hlY2sgdGhhdCBkZWZpbml0aW9uLCBhbmQgdGhlbiB3ZSdsbCBjb250aW51ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNjo0MC4zOTM3MTgwNDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1ODY1NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTUxNjA9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxODItLyoqXFxubW0vbWVtY29udHJvbC5jOjUxODM6ICogbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvIC0gQ2hhcmdlIGEgbmV3bHkgYWxsb2NhdGVkIGZvbGlvIGZvciBzd2FwaW4uXFxubW0vbWVtY29udHJvbC5jLTUxODQtICogQGZvbGlvOiB0aGUgZm9saW8gdG8gY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE5My0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTE5NDppbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbm1tL21lbWNvbnRyb2wuYy01MTk1LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM2OjQwLjQ0OTU5MzQxNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzU1NzY4Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqQ29uZmlybWF0aW9uIGFuZCBJbml0aWFsIEZvY3VzKipcblxuWWVzLCB0aGF0J3MgZGVmaW5pdGVseSB0aGUgY2FzZS4gQWxyaWdodCwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgbWVtX2Nncm91cF9za19jaGFyZ2VgIGZ1bmN0aW9uYWxpdHkuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyB0byB1bmRlcnN0YW5kIHRoaXMgZnVsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzQ5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6NDQuODA1MzY0OTQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUxMzUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3NrX2NoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTU0NDU9dm9pZCBtZW1fY2dyb3VwX3NrX2luaGVyaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQ2MS0vKipcXG5tbS9tZW1jb250cm9sLmM6NTQ2MjogKiBtZW1fY2dyb3VwX3NrX2NoYXJnZSAtIGNoYXJnZSBzb2NrZXQgbWVtb3J5XFxubW0vbWVtY29udHJvbC5jLTU0NjMtICogQHNrOiBzb2NrZXQgaW4gbWVtY2cgdG8gY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQ2OS0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTQ3MDpib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbm1tL21lbWNvbnRyb2wuYy01NDcxLVxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwX21hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM2OjQ0Ljg0OTg4MzE2MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY3NjY4MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBNZW1vcnkgQWNjb3VudGluZyBDaGVjayoqXG5cblJpZ2h0LCB0aGF0J3Mgc2V0dGxlZCB0aGVuLCB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvbmZpcm1lZC4gTm93LCBsZXQncyBkaXZlIGRlZXBlciBhbmQgaW52ZXN0aWdhdGUgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGUgY29yZSBtZW1vcnkgY2dyb3VwIGtlcm5lbCBtZW1vcnkgY2hhcmdlIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYC4gVGhpcyBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBhY2NvdW50aW5nIGRlY2lzaW9ucyBhcmUgbWFkZSwgc28gYSBjbG9zZSBleGFtaW5hdGlvbiBoZXJlIGlzIHdhcnJhbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHNpdHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNjo0OC41MTc1NTQwMzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDc0MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTMxMjA9c3RhdGljIHZvaWQgcGFnZV9zZXRfb2JqY2coc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTI1LS8qKlxcbm1tL21lbWNvbnRyb2wuYzozMTI2OiAqIF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZTogY2hhcmdlIGEga21lbSBwYWdlIHRvIHRoZSBjdXJyZW50IG1lbW9yeSBjZ3JvdXBcXG5tbS9tZW1jb250cm9sLmMtMzEyNy0gKiBAcGFnZTogcGFnZSB0byBjaGFyZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTMyLSAqL1xcbm1tL21lbWNvbnRyb2wuYzozMTMzOmludCBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCwgaW50IG9yZGVyKVxcbm1tL21lbWNvbnRyb2wuYy0zMTM0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6NDguNTYyNjMyNjRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwNTkxMjYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDb25maXJtaW5nIGFuZCBEaXJlY3RpbmcgRm9jdXMqKlxuXG5ZZXMsIHRoYXQncyBjb3JyZWN0LiBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrLiBOb3csIHRoZSBjcml0aWNhbCBwaWVjZSBpbiB0aGlzIHB1enpsZSwgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBvYmpfY2dyb3VwX2NoYXJnZWAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbWVjaGFuaXNtIEknbSBpbnRlcmVzdGVkIGluIGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDIyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6NTEuODY4NTQ4NDYxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM1NTU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmpfY2dyb3VwX2NoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTMwNjU9c3RhdGljIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzA4MC0vKlxcbm1tL21lbWNvbnRyb2wuYzozMDgxOiAqIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzOiBjaGFyZ2UgYSBudW1iZXIgb2Yga2VybmVsIHBhZ2VzIHRvIGEgb2JqY2dcXG5tbS9tZW1jb250cm9sLmMtMzA4Mi0gKiBAb2JqY2c6IG9iamVjdCBjZ3JvdXAgdG8gY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzA4Ny0gKi9cXG5tbS9tZW1jb250cm9sLmM6MzA4ODpzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbm1tL21lbWNvbnRyb2wuYy0zMDg5LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMTMzPWludCBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCwgaW50IG9yZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxMzktXFx0aWYgKG9iamNnIFxcdTAwMjZcXHUwMDI2ICFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKSB7XFxubW0vbWVtY29udHJvbC5jOjMxNDA6XFx0XFx0cmV0ID0gb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMob2JqY2csIGdmcCwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxubW0vbWVtY29udHJvbC5jLTMxNDEtXFx0XFx0aWYgKCFyZXQpIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zNDYxPXN0YXRpYyB2b2lkIHJlZmlsbF9vYmpfc3RvY2soc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM0NjktXFxubW0vbWVtY29udHJvbC5jOjM0NzA6c3RhdGljIGludCBfX29ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbm1tL21lbWNvbnRyb2wuYy0zNDcxLVxcdFxcdFxcdCAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90ICpyZW1haW5kZXIpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzQ3Ni1cXHRjaGFyZ2Vfc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XFxubW0vbWVtY29udHJvbC5jOjM0Nzc6XFx0cmV0ID0gb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMob2JqY2csIGdmcCwgY2hhcmdlX3NpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxubW0vbWVtY29udHJvbC5jLTM0NzgtXFx0aWYgKCFyZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzQ4My1cXG5tbS9tZW1jb250cm9sLmM6MzQ4NDppbnQgb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplKVxcbm1tL21lbWNvbnRyb2wuYy0zNDg1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTE0LVxcdCAqL1xcbm1tL21lbWNvbnRyb2wuYzozNTE1OlxcdHJldCA9IF9fb2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIGdmcCwgc2l6ZSwgXFx1MDAyNnJlbWFpbmRlcik7XFxubW0vbWVtY29udHJvbC5jLTM1MTYtXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcmVtYWluZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTM1MzY9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNjA1LVxcdFxcdFxcdHVubG9ja19zdG9jayhzdG9jayk7XFxubW0vbWVtY29udHJvbC5jOjM2MDY6XFx0XFx0XFx0aWYgKF9fb2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIGZsYWdzLCBvYmpfc2l6ZSwgXFx1MDAyNnJlbWFpbmRlcikpXFxubW0vbWVtY29udHJvbC5jLTM2MDctXFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU4MzY9Ym9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTg2OS0vKipcXG5tbS9tZW1jb250cm9sLmM6NTg3MDogKiBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcCAtIGNoYXJnZSBjb21wcmVzc2lvbiBiYWNrZW5kIG1lbW9yeVxcbm1tL21lbWNvbnRyb2wuYy01ODcxLSAqIEBvYmpjZzogdGhlIG9iamVjdCBjZ3JvdXBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODc2LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1ODc3OnZvaWQgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSlcXG5tbS9tZW1jb250cm9sLmMtNTg3OC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTg4OS1cXHQvKiBQRl9NRU1BTExPQyBjb250ZXh0LCBjaGFyZ2luZyBtdXN0IHN1Y2NlZWQgKi9cXG5tbS9tZW1jb250cm9sLmM6NTg5MDpcXHRpZiAob2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIEdGUF9LRVJORUwsIHNpemUpKVxcbm1tL21lbWNvbnRyb2wuYy01ODkxLVxcdFxcdFZNX1dBUk5fT05fT05DRSgxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6NTEuOTE5OTExNjNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0Nzc1ODQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBBbGxvY2F0aW9uIEhvb2sqKlxuXG5ZZXAsIHRoYXQncyBpdCwgdGhhdCdzIHRoZSBjb25maXJtYXRpb24gSSBuZWVkZWQuIE5vdywgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbnRvIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYC4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGludGVyZXN0aW5nIHN0dWZmIGhhcHBlbnMsIHJpZ2h0PyBJJ20gYmV0dGluZyB0aGF0J3Mgd2hlcmUgSSBjYW4gZmluZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBhbGxvY2F0aW9uIGhvb2ssIEkgc3VzcGVjdCB0aGF0IGlzIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1OTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNjo1NS41Njc2NzM1OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1Mzc4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTM1Mjc9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTM1LVxcbm1tL21lbWNvbnRyb2wuYzozNTM2OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxubW0vbWVtY29udHJvbC5jLTM1MzctXFx0XFx0XFx0XFx0ICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IHNsYWJfYWxsb2NfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM2OjU1LjYxNjIxNzY2OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTE3NDEwMTQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgU2VsZWN0aW9uIGZvciBNZW1vcnkgQ2dyb3VwIENoYXJnZSBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBhbmFseXppbmcgdGhlIGNoYW5nZXMgaW4gdGhlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMsIHNwZWNpZmljYWxseSBhcm91bmQgYHRyeV9jaGFyZ2VfbWVtY2dgLiBUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHJldHJpZXMgd29yaywgd2hpY2ggaGFzIGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zIG9uIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjb3VsZCBhZmZlY3QgT09NIGJlaGF2aW9yIG9yIHJlY2xhaW0uIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNpZ25pZmljYW50IGNoYW5nZS4gSXQncyB0YXJnZXRpbmcgYE1FTUNHYCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIEkgbmVlZCB0byBwaWNrIGFwcHJvcHJpYXRlIGZvY3VzIHN5bWJvbHMuIEluaXRpYWxseSwgbXkgbGlzdCBsb29rZWQgbGlrZSB0aGlzOiBgX19tZW1fY2dyb3VwX2NoYXJnZWAsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAsIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCBgb2JqX2Nncm91cF9jaGFyZ2VgLCBhbmQgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLlxuXG5Ib3dldmVyLCB0aGUgaW5zdHJ1Y3Rpb25zIHN0YXRlLCBJIHNob3VsZCBcIkF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnNcIiBhbmQgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIGFuZCBgX19tZW1fY2dyb3VwX2NoYXJnZWAgYXJlIGRlZmluaXRlbHkgaG90IHBhdGhzLCB0aGUgZm9ybWVyIG9uIHNsYWIgYWxsb2NhdGlvbnMgYW5kIHRoZSBsYXR0ZXIgb24gcGFnZSBmYXVsdHMuIFNvLCB0aG9zZSBhcmUgb3V0LiBXaGlsZSBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXRzZWxmIGlzIHRoZSBvbmUgYmVpbmcgbW9kaWZpZWQsIGl0J3Mgc3RhdGljLCBzbyBpdCdzIG5vdCBhIGdvb2QgY2hvaWNlLlxuXG5NeSB0aGlua2luZyBpcyB0byBhaW0gZm9yIGEgbGVzcyBob3QgYnV0IHJlcHJlc2VudGF0aXZlIGxpc3QuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBmb3IgaHVnZSBwYWdlcywgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AgZm9yIHN3YXAtaW4gb3BlcmF0aW9ucywgYW5kIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgZm9yIHNvY2tldCBtZW1vcnkgY2hhcmdpbmcgYXJlIGFsbCBnb29kIGNhbmRpZGF0ZXMuIEFsdGhvdWdoIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgY291bGQgYmUgcmVsYXRpdmVseSBob3QsIHRoZSBjb3JlIGxvZ2ljIGlzIG5vdCB0aGVyZSwgc28gSSdsbCBpbmNsdWRlIGl0LlxuXG5UaGVuLCBJIHJlbWVtYmVyIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCB3aGljaCBoYW5kbGVzIGttZW0gcGFnZXMsIGFuZCB3aGlsZSBub3Qgc3VwZXItaG90LCBpdCdzIGFuIGVudHJ5IHBvaW50LiBJdCBzZWVtcyBsaWtlIHRoaXMgc2F0aXNmaWVzIHRoZSBcIm5vbi1ob3QgcGF0aFwiIHJlcXVpcmVtZW50LlxuXG5TbywgSSdtIGdvaW5nIHdpdGg6XG5cbiogICBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmBcbiogICBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYFxuKiAgIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWBcbiogICBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYFxuXG5BbmQgdGhlIGNvbmZpZyBpcyBzaW1wbHkgYE1FTUNHYC4gSSB0aGluayB0aGlzIGlzIGEgZ29vZCwgc3BlY2lmaWMgbGlzdCB0aGF0IGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIGNvcmUgY2hhbmdlcyBhbmQgYXZvaWRzIG92ZXJseSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTAxLCJPdXRwdXRUb2tlbnMiOjE1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6Mzc6MTAuNzkwMzIxNTkzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU2MTcyNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiLFxuICAgIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCIsXG4gICAgXCJtZW1fY2dyb3VwX3NrX2NoYXJnZVwiLFxuICAgIFwiX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGNncm91cCBjaGFyZ2luZyBsb2dpYyBpbiBgdHJ5X2NoYXJnZV9tZW1jZ2AuIEl0IHJlcGxhY2VzIGEgYGdvdG8gcmV0cnlgIGxvb3Agd2l0aCBhIGBmb3JgIGxvb3AgdGhhdCBkZWNyZW1lbnRzIHRoZSByZXRyeSBjb3VudGVyIG9uIGV2ZXJ5IGl0ZXJhdGlvbiwgd2hpY2ggc2lnbmlmaWNhbnRseSBhbHRlcnMgdGhlIHJldHJ5IGJlaGF2aW9yIGFuZCBjYW4gbGVhZCB0byBwcmVtYXR1cmUgT09NcyBvciBkaWZmZXJlbnQgcmVjbGFpbSBiZWhhdmlvci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiLFxuICAgIFwibWVtX2Nncm91cF9za19jaGFyZ2VcIixcbiAgICBcIl9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMgaW4gYHRyeV9jaGFyZ2VfbWVtY2dgLiBJdCByZXBsYWNlcyBhIGBnb3RvIHJldHJ5YCBsb29wIHdpdGggYSBgZm9yYCBsb29wIHRoYXQgZGVjcmVtZW50cyB0aGUgcmV0cnkgY291bnRlciBvbiBldmVyeSBpdGVyYXRpb24sIHdoaWNoIHNpZ25pZmljYW50bHkgYWx0ZXJzIHRoZSByZXRyeSBiZWhhdmlvciBhbmQgY2FuIGxlYWQgdG8gcHJlbWF0dXJlIE9PTXMgb3IgZGlmZmVyZW50IHJlY2xhaW0gYmVoYXZpb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf4jw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 22:17:41 +0000 UTC FinishedAt: 2026-08-06 22:37:11 +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": "08634129366ed347e70a5d09b6b8966e60044fdf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "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": "08634129366ed347e70a5d09b6b8966e60044fdf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "212b3ff5-7e9d-470e-96db-a6fc12ca475e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_charge_hugetlb", "mem_cgroup_swapin_charge_folio", "mem_cgroup_sk_charge", "__memcg_kmem_charge_page" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMgaW4gYHRyeV9jaGFyZ2VfbWVtY2dgLiBJdCByZXBsYWNlcyBhIGBnb3RvIHJldHJ5YCBsb29wIHdpdGggYSBgZm9yYCBsb29wIHRoYXQgZGVjcmVtZW50cyB0aGUgcmV0cnkgY291bnRlciBvbiBldmVyeSBpdGVyYXRpb24sIHdoaWNoIHNpZ25pZmljYW50bHkgYWx0ZXJzIHRoZSByZXRyeSBiZWhhdmlvciBhbmQgY2FuIGxlYWQgdG8gcHJlbWF0dXJlIE9PTXMgb3IgZGlmZmVyZW50IHJlY2xhaW0gYmVoYXZpb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNmRiMDAxMzIyZmM5MTE5MGExZjFiMDczYjk3MmRmYmRhM2Q0MjZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAyMjozNTozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDZkYzQ4ODhhOTBmM2YuLjc4MWJjY2VkNTg0OGYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTI2MDcsOTggJiM0MzsyNjA3LDk3IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHRib29sIGFsbG93X3NwaW5uaW5nID0gZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZ2ZwX21hc2spO1xuIFxuLXJldHJ5OlxuLVx0aWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0Zm9yICg7IG5yX3JldHJpZXMgXHUwMDNlPSAwOyBucl9yZXRyaWVzLS0pIHtcbiBcbi1cdGlmICghYWxsb3dfc3Bpbm5pbmcpXG4tXHRcdC8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqL1xuLVx0XHRiYXRjaCA9IG5yX3BhZ2VzO1xuJiM0MztcdFx0aWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuLVx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbi1cdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG4tXHRcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIGJhdGNoLCBcdTAwMjZjb3VudGVyKSlcbi1cdFx0XHRnb3RvIGRvbmVfcmVzdG9jaztcbi1cdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbi1cdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIGJhdGNoKTtcbi1cdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpO1xuLVx0fSBlbHNlIHtcbi1cdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XG4tXHRcdHJlY2xhaW1fb3B0aW9ucyBcdTAwMjY9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuLVx0fVxuJiM0MztcdFx0aWYgKCFhbGxvd19zcGlubmluZylcbiYjNDM7XHRcdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG4mIzQzO1x0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4gXG4tXHRpZiAoYmF0Y2ggXHUwMDNlIG5yX3BhZ2VzKSB7XG4tXHRcdGJhdGNoID0gbnJfcGFnZXM7XG4tXHRcdGdvdG8gcmV0cnk7XG4tXHR9XG4mIzQzO1x0XHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuJiM0MztcdFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbiYjNDM7XHRcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG4mIzQzO1x0XHRcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIGJhdGNoLCBcdTAwMjZjb3VudGVyKSlcbiYjNDM7XHRcdFx0XHRnb3RvIGRvbmVfcmVzdG9jaztcbiYjNDM7XHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbiYjNDM7XHRcdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIGJhdGNoKTtcbiYjNDM7XHRcdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XG4mIzQzO1x0XHRcdHJlY2xhaW1fb3B0aW9ucyBcdTAwMjY9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuJiM0MztcdFx0fVxuIFxuLVx0Lypcbi1cdCAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvXG4tXHQgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksXG4tXHQgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrXG4tXHQgKiB1bmRlciB0aGUgbGltaXQgb3ZlciB0cmlnZ2VyaW5nIE9PTSBraWxscyBpbiB0aGVzZSBjYXNlcy5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKSlcbi1cdFx0Z290byBmb3JjZTtcbiYjNDM7XHRcdGlmIChiYXRjaCBcdTAwM2UgbnJfcGFnZXMpIHtcbiYjNDM7XHRcdFx0YmF0Y2ggPSBucl9wYWdlcztcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4gXG4tXHRpZiAodW5saWtlbHkodGFza19pbl9tZW1jZ19vb20oY3VycmVudCkpKVxuLVx0XHRnb3RvIG5vbWVtO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvXG4mIzQzO1x0XHQgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksXG4mIzQzO1x0XHQgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrXG4mIzQzO1x0XHQgKiB1bmRlciB0aGUgbGltaXQgb3ZlciB0cmlnZ2VyaW5nIE9PTSBraWxscyBpbiB0aGVzZSBjYXNlcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKSlcbiYjNDM7XHRcdFx0Z290byBmb3JjZTtcbiBcbi1cdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxuLVx0XHRnb3RvIG5vbWVtO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KHRhc2tfaW5fbWVtY2dfb29tKGN1cnJlbnQpKSlcbiYjNDM7XHRcdFx0Z290byBub21lbTtcbiBcbi1cdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbi1cdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xuJiM0MztcdFx0aWYgKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykpXG4mIzQzO1x0XHRcdGdvdG8gbm9tZW07XG4gXG4tXHRwc2lfbWVtc3RhbGxfZW50ZXIoXHUwMDI2cGZsYWdzKTtcbi1cdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxuLVx0XHRcdFx0XHRcdCAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTtcbi1cdHBzaV9tZW1zdGFsbF9sZWF2ZShcdTAwMjZwZmxhZ3MpO1xuJiM0MztcdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xuJiM0MztcdFx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XG4gXG4tXHRpZiAobWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpIFx1MDAzZT0gbnJfcGFnZXMpXG4tXHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0XHRwc2lfbWVtc3RhbGxfZW50ZXIoXHUwMDI2cGZsYWdzKTtcbiYjNDM7XHRcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgZ2ZwX21hc2ssIHJlY2xhaW1fb3B0aW9ucywgTlVMTCk7XG4mIzQzO1x0XHRwc2lfbWVtc3RhbGxfbGVhdmUoXHUwMDI2cGZsYWdzKTtcbiBcbi1cdGlmICghZHJhaW5lZCkge1xuLVx0XHRkcmFpbl9hbGxfc3RvY2sobWVtX292ZXJfbGltaXQpO1xuLVx0XHRkcmFpbmVkID0gdHJ1ZTtcbi1cdFx0Z290byByZXRyeTtcbi1cdH1cbiYjNDM7XHRcdGlmIChtZW1fY2dyb3VwX21hcmdpbihtZW1fb3Zlcl9saW1pdCkgXHUwMDNlPSBucl9wYWdlcylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4tXHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpXG4tXHRcdGdvdG8gbm9tZW07XG4tXHQvKlxuLVx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cbi1cdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXG4tXHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cbi1cdCAqXG4tXHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxuLVx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcbi1cdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cbi1cdCAqL1xuLVx0aWYgKG5yX3JlY2xhaW1lZCBcdTAwMjZcdTAwMjYgbnJfcGFnZXMgXHUwMDNjPSAoMSBcdTAwM2NcdTAwM2MgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKVxuLVx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0aWYgKCFkcmFpbmVkKSB7XG4mIzQzO1x0XHRcdGRyYWluX2FsbF9zdG9jayhtZW1fb3Zlcl9saW1pdCk7XG4mIzQzO1x0XHRcdGRyYWluZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiBcbi1cdGlmIChucl9yZXRyaWVzLS0pXG4tXHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0XHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpXG4mIzQzO1x0XHRcdGdvdG8gbm9tZW07XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cbiYjNDM7XHRcdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXG4mIzQzO1x0XHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxuJiM0MztcdFx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcbiYjNDM7XHRcdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKG5yX3JlY2xhaW1lZCBcdTAwMjZcdTAwMjYgbnJfcGFnZXMgXHUwMDNjPSAoMSBcdTAwM2NcdTAwM2MgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcbi1cdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfUkVUUllfTUFZRkFJTClcbi1cdFx0Z290byBub21lbTtcbiYjNDM7XHRcdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfUkVUUllfTUFZRkFJTClcbiYjNDM7XHRcdFx0Z290byBub21lbTtcbiBcbi1cdC8qIEF2b2lkIGVuZGxlc3MgbG9vcCBmb3IgdGFza3MgYnlwYXNzZWQgYnkgdGhlIG9vbSBraWxsZXIgKi9cbi1cdGlmIChwYXNzZWRfb29tIFx1MDAyNlx1MDAyNiB0YXNrX2lzX2R5aW5nKCkpXG4tXHRcdGdvdG8gbm9tZW07XG4mIzQzO1x0XHQvKiBBdm9pZCBlbmRsZXNzIGxvb3AgZm9yIHRhc2tzIGJ5cGFzc2VkIGJ5IHRoZSBvb20ga2lsbGVyICovXG4mIzQzO1x0XHRpZiAocGFzc2VkX29vbSBcdTAwMjZcdTAwMjYgdGFza19pc19keWluZygpKVxuJiM0MztcdFx0XHRnb3RvIG5vbWVtO1xuIFxuLVx0Lypcbi1cdCAqIGtlZXAgcmV0cnlpbmcgYXMgbG9uZyBhcyB0aGUgbWVtY2cgb29tIGtpbGxlciBpcyBhYmxlIHRvIG1ha2Vcbi1cdCAqIGEgZm9yd2FyZCBwcm9ncmVzcyBvciBieXBhc3MgdGhlIGNoYXJnZSBpZiB0aGUgb29tIGtpbGxlclxuLVx0ICogY291bGRuJiMzOTt0IG1ha2UgYW55IHByb2dyZXNzLlxuLVx0ICovXG4tXHRpZiAobWVtX2Nncm91cF9vb20obWVtX292ZXJfbGltaXQsIGdmcF9tYXNrLFxuLVx0XHRcdCAgIGdldF9vcmRlcihucl9wYWdlcyAqIFBBR0VfU0laRSkpKSB7XG4tXHRcdHBhc3NlZF9vb20gPSB0cnVlO1xuLVx0XHRucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbi1cdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBrZWVwIHJldHJ5aW5nIGFzIGxvbmcgYXMgdGhlIG1lbWNnIG9vbSBraWxsZXIgaXMgYWJsZSB0byBtYWtlXG4mIzQzO1x0XHQgKiBhIGZvcndhcmQgcHJvZ3Jlc3Mgb3IgYnlwYXNzIHRoZSBjaGFyZ2UgaWYgdGhlIG9vbSBraWxsZXJcbiYjNDM7XHRcdCAqIGNvdWxkbiYjMzk7dCBtYWtlIGFueSBwcm9ncmVzcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKG1lbV9jZ3JvdXBfb29tKG1lbV9vdmVyX2xpbWl0LCBnZnBfbWFzayxcbiYjNDM7XHRcdFx0XHQgICBnZXRfb3JkZXIobnJfcGFnZXMgKiBQQUdFX1NJWkUpKSkge1xuJiM0MztcdFx0XHRwYXNzZWRfb29tID0gdHJ1ZTtcbiYjNDM7XHRcdFx0bnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuIFx0fVxuIG5vbWVtOlxuIFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3NrX2NoYXJnZSYjMzQ7LAogICAgJiMzNDtfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGNncm91cCBjaGFyZ2luZyBsb2dpYyBpbiBgdHJ5X2NoYXJnZV9tZW1jZ2AuIEl0IHJlcGxhY2VzIGEgYGdvdG8gcmV0cnlgIGxvb3Agd2l0aCBhIGBmb3JgIGxvb3AgdGhhdCBkZWNyZW1lbnRzIHRoZSByZXRyeSBjb3VudGVyIG9uIGV2ZXJ5IGl0ZXJhdGlvbiwgd2hpY2ggc2lnbmlmaWNhbnRseSBhbHRlcnMgdGhlIHJldHJ5IGJlaGF2aW9yIGFuZCBjYW4gbGVhZCB0byBwcmVtYXR1cmUgT09NcyBvciBkaWZmZXJlbnQgcmVjbGFpbSBiZWhhdmlvci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE2ZGIwMDEzMjJmYzkxMTkwYTFmMWIwNzNiOTcyZGZiZGEzZDQyNmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyA2IDIyOjM1OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDZkYzQ4ODhhOTBmM2YuLjc4MWJjY2VkNTg0OGYgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTI2MDcsOTggJiM0MzsyNjA3LDk3IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLAogCXVuc2lnbmVkIGxvbmcgcGZsYWdzOwogCWJvb2wgYWxsb3dfc3Bpbm5pbmcgPSBnZnBmbGFnc19hbGxvd19zcGlubmluZyhnZnBfbWFzayk7CiAKLXJldHJ5OgotCWlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpCi0JCXJldHVybiAwOwomIzQzOwlmb3IgKDsgbnJfcmV0cmllcyAmZ3Q7PSAwOyBucl9yZXRyaWVzLS0pIHsKIAotCWlmICghYWxsb3dfc3Bpbm5pbmcpCi0JCS8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqLwotCQliYXRjaCA9IG5yX3BhZ2VzOwomIzQzOwkJaWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSkKJiM0MzsJCQlyZXR1cm4gMDsKIAotCXJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7Ci0JaWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHwKLQkgICAgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIGJhdGNoLCAmYW1wO2NvdW50ZXIpKSB7Ci0JCWlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZSgmYW1wO21lbWNnLSZndDttZW1vcnksIGJhdGNoLCAmYW1wO2NvdW50ZXIpKQotCQkJZ290byBkb25lX3Jlc3RvY2s7Ci0JCWlmIChkb19tZW1zd19hY2NvdW50KCkpCi0JCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIGJhdGNoKTsKLQkJbWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpOwotCX0gZWxzZSB7Ci0JCW1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtc3cpOwotCQlyZWNsYWltX29wdGlvbnMgJmFtcDs9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQOwotCX0KJiM0MzsJCWlmICghYWxsb3dfc3Bpbm5pbmcpCiYjNDM7CQkJLyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovCiYjNDM7CQkJYmF0Y2ggPSBucl9wYWdlczsKIAotCWlmIChiYXRjaCAmZ3Q7IG5yX3BhZ2VzKSB7Ci0JCWJhdGNoID0gbnJfcGFnZXM7Ci0JCWdvdG8gcmV0cnk7Ci0JfQomIzQzOwkJcmVjbGFpbV9vcHRpb25zID0gTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUDsKJiM0MzsJCWlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8CiYjNDM7CQkgICAgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIGJhdGNoLCAmYW1wO2NvdW50ZXIpKSB7CiYjNDM7CQkJaWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKCZhbXA7bWVtY2ctJmd0O21lbW9yeSwgYmF0Y2gsICZhbXA7Y291bnRlcikpCiYjNDM7CQkJCWdvdG8gZG9uZV9yZXN0b2NrOwomIzQzOwkJCWlmIChkb19tZW1zd19hY2NvdW50KCkpCiYjNDM7CQkJCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmYW1wO21lbWNnLSZndDttZW1zdywgYmF0Y2gpOwomIzQzOwkJCW1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtb3J5KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7CiYjNDM7CQkJcmVjbGFpbV9vcHRpb25zICZhbXA7PSB+TUVNQ0dfUkVDTEFJTV9NQVlfU1dBUDsKJiM0MzsJCX0KIAotCS8qCi0JICogUHJldmVudCB1bmJvdW5kZWQgcmVjdXJzaW9uIHdoZW4gcmVjbGFpbSBvcGVyYXRpb25zIG5lZWQgdG8KLQkgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksCi0JICogYnV0IHdlIHByZWZlciBmYWNpbGl0YXRpbmcgbWVtb3J5IHJlY2xhaW0gYW5kIGdldHRpbmcgYmFjawotCSAqIHVuZGVyIHRoZSBsaW1pdCBvdmVyIHRyaWdnZXJpbmcgT09NIGtpbGxzIGluIHRoZXNlIGNhc2VzLgotCSAqLwotCWlmICh1bmxpa2VseShjdXJyZW50LSZndDtmbGFncyAmYW1wOyBQRl9NRU1BTExPQykpCi0JCWdvdG8gZm9yY2U7CiYjNDM7CQlpZiAoYmF0Y2ggJmd0OyBucl9wYWdlcykgewomIzQzOwkJCWJhdGNoID0gbnJfcGFnZXM7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiAKLQlpZiAodW5saWtlbHkodGFza19pbl9tZW1jZ19vb20oY3VycmVudCkpKQotCQlnb3RvIG5vbWVtOwomIzQzOwkJLyoKJiM0MzsJCSAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvCiYjNDM7CQkgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksCiYjNDM7CQkgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrCiYjNDM7CQkgKiB1bmRlciB0aGUgbGltaXQgb3ZlciB0cmlnZ2VyaW5nIE9PTSBraWxscyBpbiB0aGVzZSBjYXNlcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHVubGlrZWx5KGN1cnJlbnQtJmd0O2ZsYWdzICZhbXA7IFBGX01FTUFMTE9DKSkKJiM0MzsJCQlnb3RvIGZvcmNlOwogCi0JaWYgKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykpCi0JCWdvdG8gbm9tZW07CiYjNDM7CQlpZiAodW5saWtlbHkodGFza19pbl9tZW1jZ19vb20oY3VycmVudCkpKQomIzQzOwkJCWdvdG8gbm9tZW07CiAKLQlfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7Ci0JcmFpc2VkX21heF9ldmVudCA9IHRydWU7CiYjNDM7CQlpZiAoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSkKJiM0MzsJCQlnb3RvIG5vbWVtOwogCi0JcHNpX21lbXN0YWxsX2VudGVyKCZhbXA7cGZsYWdzKTsKLQlucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcywKLQkJCQkJCSAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTsKLQlwc2lfbWVtc3RhbGxfbGVhdmUoJmFtcDtwZmxhZ3MpOwomIzQzOwkJX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpOwomIzQzOwkJcmFpc2VkX21heF9ldmVudCA9IHRydWU7CiAKLQlpZiAobWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpICZndDs9IG5yX3BhZ2VzKQotCQlnb3RvIHJldHJ5OwomIzQzOwkJcHNpX21lbXN0YWxsX2VudGVyKCZhbXA7cGZsYWdzKTsKJiM0MzsJCW5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLAomIzQzOwkJCQkJCSAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTsKJiM0MzsJCXBzaV9tZW1zdGFsbF9sZWF2ZSgmYW1wO3BmbGFncyk7CiAKLQlpZiAoIWRyYWluZWQpIHsKLQkJZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTsKLQkJZHJhaW5lZCA9IHRydWU7Ci0JCWdvdG8gcmV0cnk7Ci0JfQomIzQzOwkJaWYgKG1lbV9jZ3JvdXBfbWFyZ2luKG1lbV9vdmVyX2xpbWl0KSAmZ3Q7PSBucl9wYWdlcykKJiM0MzsJCQljb250aW51ZTsKIAotCWlmIChnZnBfbWFzayAmYW1wOyBfX0dGUF9OT1JFVFJZKQotCQlnb3RvIG5vbWVtOwotCS8qCi0JICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW0KLQkgKiBtYXkgaGF2ZSBiZWVuIGFibGUgdG8gZnJlZSBzb21lIHBhZ2VzLiAgUmV0cnkgdGhlIGNoYXJnZQotCSAqIGJlZm9yZSBraWxsaW5nIHRoZSB0YXNrLgotCSAqCi0JICogT25seSBmb3IgcmVndWxhciBwYWdlcywgdGhvdWdoOiBodWdlIHBhZ2VzIGFyZSByYXRoZXIKLQkgKiB1bmxpa2VseSB0byBzdWNjZWVkIHNvIGNsb3NlIHRvIHRoZSBsaW1pdCwgYW5kIHdlIGZhbGwgYmFjawotCSAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS4KLQkgKi8KLQlpZiAobnJfcmVjbGFpbWVkICZhbXA7JmFtcDsgbnJfcGFnZXMgJmx0Oz0gKDEgJmx0OyZsdDsgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKQotCQlnb3RvIHJldHJ5OwomIzQzOwkJaWYgKCFkcmFpbmVkKSB7CiYjNDM7CQkJZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTsKJiM0MzsJCQlkcmFpbmVkID0gdHJ1ZTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KIAotCWlmIChucl9yZXRyaWVzLS0pCi0JCWdvdG8gcmV0cnk7CiYjNDM7CQlpZiAoZ2ZwX21hc2sgJmFtcDsgX19HRlBfTk9SRVRSWSkKJiM0MzsJCQlnb3RvIG5vbWVtOwomIzQzOwkJLyoKJiM0MzsJCSAqIEV2ZW4gdGhvdWdoIHRoZSBsaW1pdCBpcyBleGNlZWRlZCBhdCB0aGlzIHBvaW50LCByZWNsYWltCiYjNDM7CQkgKiBtYXkgaGF2ZSBiZWVuIGFibGUgdG8gZnJlZSBzb21lIHBhZ2VzLiAgUmV0cnkgdGhlIGNoYXJnZQomIzQzOwkJICogYmVmb3JlIGtpbGxpbmcgdGhlIHRhc2suCiYjNDM7CQkgKgomIzQzOwkJICogT25seSBmb3IgcmVndWxhciBwYWdlcywgdGhvdWdoOiBodWdlIHBhZ2VzIGFyZSByYXRoZXIKJiM0MzsJCSAqIHVubGlrZWx5IHRvIHN1Y2NlZWQgc28gY2xvc2UgdG8gdGhlIGxpbWl0LCBhbmQgd2UgZmFsbCBiYWNrCiYjNDM7CQkgKiB0byByZWd1bGFyIHBhZ2VzIGFueXdheSBpbiBjYXNlIG9mIGZhaWx1cmUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChucl9yZWNsYWltZWQgJmFtcDsmYW1wOyBucl9wYWdlcyAmbHQ7PSAoMSAmbHQ7Jmx0OyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikpCiYjNDM7CQkJY29udGludWU7CiAKLQlpZiAoZ2ZwX21hc2sgJmFtcDsgX19HRlBfUkVUUllfTUFZRkFJTCkKLQkJZ290byBub21lbTsKJiM0MzsJCWlmIChnZnBfbWFzayAmYW1wOyBfX0dGUF9SRVRSWV9NQVlGQUlMKQomIzQzOwkJCWdvdG8gbm9tZW07CiAKLQkvKiBBdm9pZCBlbmRsZXNzIGxvb3AgZm9yIHRhc2tzIGJ5cGFzc2VkIGJ5IHRoZSBvb20ga2lsbGVyICovCi0JaWYgKHBhc3NlZF9vb20gJmFtcDsmYW1wOyB0YXNrX2lzX2R5aW5nKCkpCi0JCWdvdG8gbm9tZW07CiYjNDM7CQkvKiBBdm9pZCBlbmRsZXNzIGxvb3AgZm9yIHRhc2tzIGJ5cGFzc2VkIGJ5IHRoZSBvb20ga2lsbGVyICovCiYjNDM7CQlpZiAocGFzc2VkX29vbSAmYW1wOyZhbXA7IHRhc2tfaXNfZHlpbmcoKSkKJiM0MzsJCQlnb3RvIG5vbWVtOwogCi0JLyoKLQkgKiBrZWVwIHJldHJ5aW5nIGFzIGxvbmcgYXMgdGhlIG1lbWNnIG9vbSBraWxsZXIgaXMgYWJsZSB0byBtYWtlCi0JICogYSBmb3J3YXJkIHByb2dyZXNzIG9yIGJ5cGFzcyB0aGUgY2hhcmdlIGlmIHRoZSBvb20ga2lsbGVyCi0JICogY291bGRuJiMzOTt0IG1ha2UgYW55IHByb2dyZXNzLgotCSAqLwotCWlmIChtZW1fY2dyb3VwX29vbShtZW1fb3Zlcl9saW1pdCwgZ2ZwX21hc2ssCi0JCQkgICBnZXRfb3JkZXIobnJfcGFnZXMgKiBQQUdFX1NJWkUpKSkgewotCQlwYXNzZWRfb29tID0gdHJ1ZTsKLQkJbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7Ci0JCWdvdG8gcmV0cnk7CiYjNDM7CQkvKgomIzQzOwkJICoga2VlcCByZXRyeWluZyBhcyBsb25nIGFzIHRoZSBtZW1jZyBvb20ga2lsbGVyIGlzIGFibGUgdG8gbWFrZQomIzQzOwkJICogYSBmb3J3YXJkIHByb2dyZXNzIG9yIGJ5cGFzcyB0aGUgY2hhcmdlIGlmIHRoZSBvb20ga2lsbGVyCiYjNDM7CQkgKiBjb3VsZG4mIzM5O3QgbWFrZSBhbnkgcHJvZ3Jlc3MuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtZW1fY2dyb3VwX29vbShtZW1fb3Zlcl9saW1pdCwgZ2ZwX21hc2ssCiYjNDM7CQkJCSAgIGdldF9vcmRlcihucl9wYWdlcyAqIFBBR0VfU0laRSkpKSB7CiYjNDM7CQkJcGFzc2VkX29vbSA9IHRydWU7CiYjNDM7CQkJbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiAJfQogbm9tZW06CiAJLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDExNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFJlZ3Jlc3Npb24gaW4gYHRyeV9jaGFyZ2VfbWVtY2dgKioKCk9rYXksIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgbW9kaWZ5aW5nIGBtbS9tZW1jb250cm9sLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB0cnlfY2hhcmdlX21lbWNnYCBmdW5jdGlvbi4gIEl0JiMzOTtzIHJlcGxhY2luZyBhIGJ1bmNoIG9mIGBnb3RvIHJldHJ5O2Agc3RhdGVtZW50cyB3aXRoIGEgYGZvcmAgbG9vcC4gQXQgZmlyc3QgZ2xhbmNlLCBpdCBsb29rcyBsaWtlIGEgc3R5bGlzdGljIGNoYW5nZSwgYnV0IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBMZXQmIzM5O3MgY29tcGFyZSB0aGUgYmVmb3JlIGFuZCBhZnRlciBjb2RlIHNpZGUtYnktc2lkZToKCkluaXRpYWxseSwgSSBzZWUgdGhlIG9yaWdpbmFsIGNvZGUgdXNpbmcgYHJldHJ5OmAgbGFiZWxzIHdpdGggYGdvdG8gcmV0cnk7YCBmb3IgY29udHJvbCBmbG93LiBUaGUgbG9naWMgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczogSWYgYGNvbnN1bWVfc3RvY2tgIHN1Y2NlZWRzLCB3ZSYjMzk7cmUgZ29vZC4gT3RoZXJ3aXNlLCBpdCBjaGVja3Mgc2V2ZXJhbCBjb25kaXRpb25zLiBJZiB0aGUgYGJhdGNoYCBzaXplIGV4Y2VlZHMgYG5yX3BhZ2VzYCwgb3IgdGhlcmUmIzM5O3MgaW5zdWZmaWNpZW50IG1hcmdpbiwgdGhlIHN5c3RlbSBoYXNuJiMzOTt0IGRyYWluZWQsIG9yIHBhZ2VzIGFyZSByZWNsYWltZWQgdGhlbiB0aGUgY29kZSByZXRyaWVzLiAgQ3J1Y2lhbGx5LCBgbnJfcmV0cmllc2AgaXMgb25seSAqZGVjcmVtZW50ZWQqIGluIG9uZSBzcGVjaWZpYyBgaWZgIGJsb2NrLCBvdGhlcndpc2UgdGhlIHJldHJ5IGhhcHBlbnMgd2l0aG91dCBkZWNyZW1lbnRpbmcuIEFuZCBpZiB3ZSBoaXQgdGhlIE9PTSBjb25kaXRpb24sIHRoZW4gd2Ugc2V0IGBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFU2AgYW5kIHJldHJ5IGFnYWluLgoKTm93LCB0aGUgcGF0Y2ggcmV3cml0ZXMgdGhpcyB1c2luZyBhIGBmb3JgIGxvb3A6IGBmb3IgKDsgbnJfcmV0cmllcyAmZ3Q7PSAwOyBucl9yZXRyaWVzLS0pYC4gIFRoZSBjb2RlIHVzZXMgYGNvbnRpbnVlYCBpbnN0ZWFkIG9mIGBnb3RvYC4gIEhhbmcgb24gYSBzZWNvbmQuLi4gdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiAgVGhlIGBmb3JgIGxvb3AgZGVjcmVtZW50cyBgbnJfcmV0cmllc2AgKm9uIGV2ZXJ5IHNpbmdsZSBgY29udGludWVgKi4gSW4gdGhlIG9yaWdpbmFsIGNvZGUsIGBucl9yZXRyaWVzYCB3YXMgb25seSBkZWNyZW1lbnRlZCAqb25jZSosIGluIHRoZSBjb25kaXRpb24gYGlmIChucl9yZXRyaWVzLS0pIGdvdG8gcmV0cnk7YC4KClNvLCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHJldHJ5IGxvZ2ljIHNpZ25pZmljYW50bHkuIFRoZSBvcmlnaW5hbCBjb2RlIGNvdWxkIGVmZmVjdGl2ZWx5IHJldHJ5IGluZGVmaW5pdGVseSB1bmRlciBzb21lIGNvbmRpdGlvbnMgKHN1Y2ggYXMgdGhlIGBiYXRjaCAmZ3Q7IG5yX3BhZ2VzYCBjb25kaXRpb24pICp3aXRob3V0KiBleGhhdXN0aW5nIHRoZSByZXRyeSBjb3VudGVyLiBUaGUgbmV3IGxvb3AgZm9yY2VzIGEgZGVjcmVtZW50IG9mIGBucl9yZXRyaWVzYCBmb3IgKmV2ZXJ5KiByZXRyeSBjb25kaXRpb24uICBFc3NlbnRpYWxseSwgdGhlIG5ldyBjb2RlIHdpbGwgaW1wb3NlIGEgaGFyZCBsaW1pdCBvbiB0aGUgKnRvdGFsKiBudW1iZXIgb2YgcmV0cmllcywgd2hlcmVhcyB0aGUgb3JpZ2luYWwgaGFkIGEgbW9yZSBudWFuY2VkIHJldHJ5IGJlaGF2aW9yLgoKWWVzLCB0aGlzIG1lYW5zIHRoZSBwYXRjaCAqd2lsbCogY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBgdHJ5X2NoYXJnZV9tZW1jZ2AuIFRoZSBudW1iZXIgb2YgYXR0ZW1wdHMgdG8gYWxsb2NhdGUgbWVtb3J5IHVuZGVyIGxvYWQgd2lsbCBiZSBkaWZmZXJlbnQgdGhhbiBiZWZvcmUuCgpJcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiAgYHRyeV9jaGFyZ2VfbWVtY2dgIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiwgaGFuZGxpbmcgY3JpdGljYWwgbWVtb3J5IGNncm91cCBsb2dpYy4gVGhpcyBjaGFuZ2UgKmNvdWxkKiBsZWFkIHRvIGVhcmxpZXIgT09NIHNpdHVhdGlvbnMsIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb2YgbWVtb3J5IGNncm91cHMsIG9yIGV2ZW4gc3VidGxlIHJlZ3Jlc3Npb25zLiBJJiMzOTtkIGJldHRlciBiZSBzdXJlIHRoZSBwYXRjaCBpcyBjb3JyZWN0LgoKSSYjMzk7bSBjaGVja2luZyB0aGUgZ3VpZGVsaW5lcyBub3cgdG8gYmUgY2VydGFpbiBpZiB0aGlzIGNoYW5nZSB3YXJyYW50cyBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIHRvIGEgY29yZSBrZXJuZWwgbG9naWMgZnVuY3Rpb24sIG5vdCBhIGRvY3VtZW50YXRpb24sIGNvbW1lbnQsIGRlY29yYXRpdmUsIG9yIGRyaXZlciBjb2RlIGNoYW5nZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBZZXMsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXJ0aGVyIHRlc3RpbmcgYW5kIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X2NoYXJnZV9tZW1jZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MjUwNT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNTk0LVxubW0vbWVtY29udHJvbC5jOjI1OTU6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9tZW1jb250cm9sLmMtMjU5Ni1cdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNzkwPXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjc5NS1cbm1tL21lbWNvbnRyb2wuYzoyNzk2Olx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMjc5Ny19XG4tLVxubW0vbWVtY29udHJvbC5jPTMwODg9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzA5NS1cbm1tL21lbWNvbnRyb2wuYzozMDk2Olx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzA5Ny1cdGlmIChyZXQpXG4tLVxubW0vbWVtY29udHJvbC5jPTUxMTY9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MTI0LVx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxubW0vbWVtY29udHJvbC5jOjUxMjU6XHRcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01MTI2LVx0aWYgKHJldCkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NDcwPWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU0NzctXG5tbS9tZW1jb250cm9sLmM6NTQ3ODpcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcbm1tL21lbWNvbnRyb2wuYy01NDc5LVx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzQ5CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQ2hhcmdlIEZ1bmN0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHRyeV9jaGFyZ2VfbWVtY2dgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgem9vbSBpbiBvbiBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIERvZXMgdGhpcyBtb2RpZmljYXRpb24gcmVseSBvbiBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZyBvcHRpb25zPyBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzIGBDT05GSUdfTUVNQ0dgLCBhcyB0aGF0IHNlZW1zIGhpZ2hseSByZWxldmFudCB0byBtZW1vcnkgY29udHJvbCBncm91cHMuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgaXMgdGhlIGNhc2Ugb3IgaWYgb3RoZXIgcmVsYXRlZCBvcHRpb25zIGNvbWUgaW50byBwbGF5LiBUbyBpbnZlc3RpZ2F0ZSwgSSYjMzk7bGwgbmVlZCB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBndXQgc2F5cyBgbW0vS2NvbmZpZ2AgaXMgdGhlIG1vc3QgbGlrZWx5IHNwb3QsIGJ1dCBJJiMzOTtsbCBhbHNvIGdsYW5jZSBhdCBgaW5pdC9LY29uZmlnYCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyBjcnVjaWFsIHJlbGF0ZWQgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBtb2R1bGUuIFRpbWUgdG8gY2hlY2sgdGhvc2UgS2NvbmZpZyBmaWxlcyBhbmQgY29uZmlybSB0aGVzZSBzdXNwaWNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2Nj1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3NS1cbmluaXQvS2NvbmZpZzoxMDc2OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzctXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwODYtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTEtXG5pbml0L0tjb25maWc6MTA5Mjpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDkzLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk4LVxuaW5pdC9LY29uZmlnOjEwOTk6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwMC1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBDYW5kaWRhdGUgQXNzZXNzbWVudDogdHJ5X2NoYXJnZV9tZW1jZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgTUVNQ0dgIGNvbmZpZyBjaGFuZ2UsIGFuZCBmaXJzdCBJIG5lZWQgdG8gY29uZmlybSBpZiBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXMgdGhlIG9ubHkgZnVuY3Rpb24gbW9kaWZpZWQuIFllcywgaXQgaXMuIE5vdywgaXMgdGhpcyBjaGFuZ2Ugd29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgYmVjYXVzZSBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4KClRoaXMgY2hhbmdlIHNlZW1zIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGR1ZSB0byB0aGUgYWx0ZXJlZCByZXRyeSBsb2dpYy4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgb3JpZ2luYWwgY29kZS4uLiBva2F5LCBzbyB0aGUgb2xkIGNvZGUgZGVjcmVtZW50ZWQgYG5yX3JldHJpZXNgIG9ubHkgYXQgdGhlIGByZXRyeWAgbGFiZWwsIGJ1dCB0aGUgbmV3IGNvZGUgZGVjcmVtZW50cyBgbnJfcmV0cmllc2Agd2l0aGluIHRoZSBgZm9yYCBsb29wIG9uIGV2ZXJ5IGBjb250aW51ZWAuIFRoYXQgbWVhbnMgYG5yX3JldHJpZXNgIGlzIHJlZHVjZWQgZmFyIG1vcmUgb2Z0ZW4uIFRoaXMgY2hhbmdlIGNvdWxkIHZlcnkgd2VsbCBpbnRyb2R1Y2UgcHJlbWF0dXJlIE9PTSBjb25kaXRpb25zLiBJcyB0aGlzIGEgYnVnIGZpeCwgb3IgYSBidWcgKmludHJvZHVjdGlvbio/IEl0IGxvb2tzIG1vcmUgbGlrZSBhbiBpbmFkdmVydGVudCBiZWhhdmlvciBjaGFuZ2UuIEVpdGhlciB3YXksIHRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuIEl0IHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgYW5kIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4gYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgdGhlIGZvY3VzIGhlcmUgaXMgb24gYHRyeV9jaGFyZ2VfbWVtY2dgLiBIb2xkIG9uLCB0aGlzIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IGlubGluZWQgYmVjYXVzZSBJIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGlzIGlzIHN0YXRpYzogYHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyguLi4pYC4gWWVwLCBpdCYjMzk7cyBzdGF0aWMuIEdpdmVuIGl0cyBzaXplLCBpdCYjMzk7cyB1bmxpa2VseSB0byBiZSBpbmxpbmVkLCBidXQgdG8gYmUgc3VyZSwgbGV0JiMzOTtzIHRyYWNlIGl0cyBjYWxsZXJzLiBMZXQmIzM5O3Mgc2VlLi4uIGl0JiMzOTtzIGNhbGxlZCBieSBgdHJ5X2NoYXJnZWAgKHN0YXRpYyBpbmxpbmUpLCBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgIChzdGF0aWMpLCBgY2hhcmdlX21lbWNnYCAoc3RhdGljKSBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCAoYSBib29sLCBub24tc3RhdGljKS4gTGV0JiMzOTtzIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaXMgcG90ZW50aWFsbHkgaW5saW5lZCBhcyBgc3RhdGljIGlubGluZWAgY2FsbHMgYW5kIHRoZSBgc3RhdGljYCBmdW5jdGlvbiBjYWxscyBhcmUgbm90IGlkZWFsIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTU0NDU9dm9pZCBtZW1fY2dyb3VwX3NrX2luaGVyaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXG4tLVxubW0vbWVtY29udHJvbC5jLTU0NjktICovXG5tbS9tZW1jb250cm9sLmM6NTQ3MDpib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxubW0vbWVtY29udHJvbC5jLTU0NzEtXHRcdFx0ICBnZnBfdCBnZnBfbWFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODQyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBEb3duIENhbGxzIHRvIGBjaGFyZ2VfbWVtY2dgKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gcGlucG9pbnQgdGhlIGNhbGxlcnMgb2YgYGNoYXJnZV9tZW1jZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgd2UgbmVlZCB0byBzdGFydC4gV2UgYXJlIG1vc3QgbGlrZWx5IGRlYWxpbmcgd2l0aCBtZW1vcnkgYWNjb3VudGluZyBoZXJlLCBsaWtlbHkgYXQgdGhlIG1lbW9yeSBjb250cm9sbGVyIChtZW1jZykgbGV2ZWwuIFRoZSBgY2hhcmdlX21lbWNnYCBmdW5jdGlvbiBpdHNlbGYgaXMgcHJldHR5IGZvdW5kYXRpb25hbCwgc28gaXQmIzM5O3MgcHJvYmFibHkgdG91Y2hlZCBieSBhIGxvdCBvZiBkaWZmZXJlbnQgc3Vic3lzdGVtcy4gVGhpbmtpbmcgdGhyb3VnaCB0aGlzLCBteSBhcHByb2FjaCB3b3VsZCBiZSB0byBmaXJzdCBsZXZlcmFnZSBgZ2l0IGdyZXBgIG9yIGEgc2ltaWxhciBjb2RlIHNlYXJjaCB0b29sLCBhcyB0aGlzIGlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBsb29raW5nIGF0IGRpcmVjdCBmdW5jdGlvbiBjYWxscy4gSSYjMzk7ZCBiZWdpbiB3aXRoIGEgc2ltcGxlIHNlYXJjaCBmb3IgJiMzNDtjaGFyZ2VfbWVtY2cmIzM0OyBpbiB0aGUga2VybmVsIHNvdXJjZSBjb2RlLgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgaW5kaXJlY3QgY2FsbHMgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycywgSSBhbHNvIG5lZWQgdG8gYmUgcHJlcGFyZWQgZm9yIHRoZSBmYWN0IHRoYXQgYSBzdHJhaWdodGZvcndhcmQgZ3JlcCB3b24mIzM5O3QgdGVsbCB0aGUgd2hvbGUgc3RvcnkuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gdXNlIHNvbWUga2luZCBvZiBzdGF0aWMgYW5hbHlzaXMsIG9yIGV2ZW4gcnVuIHNvbWUgdGVzdCB0byBzZWUgdGhlIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4gSSB3aWxsIGRlZmluaXRlbHkgYmUgbG9va2luZyBhdCBhIGNhbGwgZ3JhcGggZ2VuZXJhdGVkIGZyb20gdGhlIGNvZGUsIGlmIGF2YWlsYWJsZS4gVGhhdCB3aWxsIGhlbHAgbWUgbmF2aWdhdGUgcG90ZW50aWFsIGluZGlyZWN0IGNhbGxzLCB3aGljaCBhcmUgdmVyeSBjb21tb24uIEFub3RoZXIgaW1wb3J0YW50IGF2ZW51ZSBpcyB0byBsb29rIGF0IGNyb3NzLXJlZmVyZW5jZXMuIFRoYXQgd291bGQgaWxsdW1pbmF0ZSB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHdobyBjYWxscyBpdC4gSSBuZWVkIHRvIGJlIHByZXBhcmVkIGZvciBpbmRpcmVjdCBjYWxscywgcG9zc2libHkgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycyBvciwgbGVzcyBsaWtlbHksIG1hY3JvcyB0aGF0IGV4cGFuZCBpbnRvIGEgY2FsbC4KCk9uY2UgSSBoYXZlIGEgbGlzdCBvZiBwb3RlbnRpYWwgY2FsbCBzaXRlcywgSSYjMzk7ZCB0aGVuIHN0YXJ0IGZpbHRlcmluZy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMgd291bGQgYmUgdGhlIGhpZ2hlc3QgcHJvYmFiaWxpdHkgY2FuZGlkYXRlcy4gUGFnZXMsIHNsYWJzLCBrbWVtLCBhbmQgc3dhcCB3aWxsIGJlIGhpZ2ggb24gdGhlIGxpc3QuIEFsc28sIEkgd291bGQgY29uc2lkZXIgdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgcmVjbGFpbSBsb2dpYy4gVGhlc2UgYXJlIGFyZWFzIHdoZXJlIG1lbW9yeSBjb25zdW1wdGlvbiBpcyBleHBsaWNpdGx5IHRyYWNrZWQsIGFuZCB0aGF0IGZ1bmN0aW9uIGlzIGFsbW9zdCBjZXJ0YWlubHkgaW52b2x2ZWQuCgpJIGFudGljaXBhdGUgdGhhdCB0aGVyZSB3aWxsIGJlIHF1aXRlIGEgZmV3IGhpdHMuIFRoZSByZWFsIGNoYWxsZW5nZSB3aWxsIGJlIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCBlYWNoIGNhbGwg4oCTIHdoYXQmIzM5O3MgZHJpdmluZyB0aGUgbWVtb3J5IGFjY291bnRpbmcsIHdoYXQgdGhlIGNvbnRleHQgaXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIGFzIGludGVuZGVkIGFuZCBpZiB0aGVyZSBtYXkgYmUgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSB1bHRpbWF0ZSBnb2FsIGlzIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBjaGFyZ2VzIGFyZSBiZWluZyBoYW5kbGVkIGluIHRoaXMgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFyZ2VfbWVtY2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI1MDU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjU5NC1cbm1tL21lbWNvbnRyb2wuYzoyNTk1OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxubW0vbWVtY29udHJvbC5jLTI1OTYtXHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjc5MD1zdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vbWVtY29udHJvbC5jLTI3OTUtXG5tbS9tZW1jb250cm9sLmM6Mjc5NjpcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTI3OTctfVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zMDg4PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG4tLVxubW0vbWVtY29udHJvbC5jLTMwOTUtXG5tbS9tZW1jb250cm9sLmM6MzA5NjpcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTMwOTctXHRpZiAocmV0KVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MTAxPXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTExNS1cbm1tL21lbWNvbnRyb2wuYzo1MTE2OnN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wuYy01MTE3LVx0XHRcdGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTEyNC1cdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcbm1tL21lbWNvbnRyb2wuYzo1MTI1Olx0XHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG5tbS9tZW1jb250cm9sLmMtNTEyNi1cdGlmIChyZXQpIHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTEzNj1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MTQxLVx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcbm1tL21lbWNvbnRyb2wuYzo1MTQyOlx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcbm1tL21lbWNvbnRyb2wuYy01MTQzLVx0Y3NzX3B1dChcdTAwMjZtZW1jZy1cdTAwM2Vjc3MpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MTYwPWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTE3My1cbm1tL21lbWNvbnRyb2wuYzo1MTc0Olx0aWYgKGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCkpXG5tbS9tZW1jb250cm9sLmMtNTE3NS1cdFx0cmV0ID0gLUVOT01FTTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTE5ND1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjA4LVxubW0vbWVtY29udHJvbC5jOjUyMDk6XHRyZXQgPSBjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApO1xubW0vbWVtY29udHJvbC5jLTUyMTAtXG4tLVxubW0vbWVtY29udHJvbC5jPTU0NzA9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTQ3Ny1cbm1tL21lbWNvbnRyb2wuYzo1NDc4Olx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xubW0vbWVtY29udHJvbC5jLTU0NzktXHRcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzIyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIENoYXJnZSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgZnVuY3Rpb25zLiBJIHNlZSBhIHBhdHRlcm4gaGVyZTogYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBhcmUgYWxsIGRlZmluZWQgYXMgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuIFRoYXQgdGVsbHMgbWUgdGhleSYjMzk7cmUgZGVzaWduZWQgdG8gYmUgY2FsbGVkIGZyb20gKm91dHNpZGUqIHRoZSBtb2R1bGUgd2hlcmUgdGhleSYjMzk7cmUgZGVmaW5lZCwgbGlrZWx5IGFzIHBhcnQgb2YgYSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGluZnJhc3RydWN0dXJlLiBNYWtlcyBzZW5zZS4KCkJ1dCB0aGVuIHRoZXJlJiMzOTtzIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AuIEFoLCAqdGhhdCogb25lIGlzIHN0YXRpYy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gSWYgaXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyBzY29wZWQgdG8gYSBzcGVjaWZpYyBmaWxlIG9yIG1vZHVsZS4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCYjMzk7cyBzdGF0aWMgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY2FsbCBzaXRlcyBvZiBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiBpdHMgdXNlLCB3aGljaCB3aWxsIGdpdmUgbWUgaW5zaWdodCBpbnRvIHRoZSBpbnRlcm5hbCB3b3JraW5ncyBvZiB0aGUgbWVtb3J5IGNncm91cCBzdWJzeXN0ZW0sIGFuZCBpdCYjMzk7bGwgaGVscCBtZSBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gaXMgc3BlY2lmaWNhbGx5IHJlc3BvbnNpYmxlIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTMwNjU9c3RhdGljIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTMwODAtLypcbm1tL21lbWNvbnRyb2wuYzozMDgxOiAqIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzOiBjaGFyZ2UgYSBudW1iZXIgb2Yga2VybmVsIHBhZ2VzIHRvIGEgb2JqY2dcbm1tL21lbWNvbnRyb2wuYy0zMDgyLSAqIEBvYmpjZzogb2JqZWN0IGNncm91cCB0byBjaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtMzA4Ny0gKi9cbm1tL21lbWNvbnRyb2wuYzozMDg4OnN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG5tbS9tZW1jb250cm9sLmMtMzA4OS1cdFx0XHRcdCAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmM9MzEzMz1pbnQgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsIGludCBvcmRlcilcbi0tXG5tbS9tZW1jb250cm9sLmMtMzEzOS1cdGlmIChvYmpjZyBcdTAwMjZcdTAwMjYgIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpIHtcbm1tL21lbWNvbnRyb2wuYzozMTQwOlx0XHRyZXQgPSBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhvYmpjZywgZ2ZwLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG5tbS9tZW1jb250cm9sLmMtMzE0MS1cdFx0aWYgKCFyZXQpIHtcbi0tXG5tbS9tZW1jb250cm9sLmM9MzQ3MD1zdGF0aWMgaW50IF9fb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG4tLVxubW0vbWVtY29udHJvbC5jLTM0NzYtXHRjaGFyZ2Vfc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XG5tbS9tZW1jb250cm9sLmM6MzQ3NzpcdHJldCA9IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKG9iamNnLCBnZnAsIGNoYXJnZV9zaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbm1tL21lbWNvbnRyb2wuYy0zNDc4LVx0aWYgKCFyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQWNjb3VudGluZyBpbiB0aGUgS2VybmVsKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZWAuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBidXQgaXQmIzM5O3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uIHNvIHRoZXJlJiMzOTtzIG5vdCBtdWNoIEkgY2FuIGxlYXJuIGFib3V0IGl0IHdpdGggc3RhdGljIGFuYWx5c2lzLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgYnVtbWVyLiBUaGVuIHRoZXJlJiMzOTtzIGBfX29ial9jZ3JvdXBfY2hhcmdlYCB3aGljaCAqaXMqIHN0YXRpYy4gSG1tLCB0aGlzIG1lYW5zIEkgY2FuIHVzZSBzdGFuZGFyZCB0b29scyB0byB0cmFjZSB3aGljaCBmdW5jdGlvbiBjYWxscyBhcmUgaW52b2x2ZWQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyBjYWxscyB0byB0aGF0IGZ1bmN0aW9uIHRvIHNlZSB3aGVyZSBtZW1vcnkgY2hhcmdlcyBhcmUgYWN0dWFsbHkgaGFwcGVuaW5nLCBpbiByZWxhdGlvbiB0byBjZ3JvdXBzLiBUaGlzIHNob3VsZCBoZWxwIG1lIGJldHRlciB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGZsb3cgYW5kIHBpbnBvaW50IHdoZXJlIHNwZWNpZmljIG1lbW9yeSBhY2NvdW50aW5nIGlzIGJlaW5nIHBlcmZvcm1lZC4gVGltZSB0byBkaWcgaW50byB0aGUgY2FsbCBzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19vYmpfY2dyb3VwX2NoYXJnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MzQ2MT1zdGF0aWMgdm9pZCByZWZpbGxfb2JqX3N0b2NrKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzQ2OS1cbm1tL21lbWNvbnRyb2wuYzozNDcwOnN0YXRpYyBpbnQgX19vYmpfY2dyb3VwX2NoYXJnZShzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbm1tL21lbWNvbnRyb2wuYy0zNDcxLVx0XHRcdCAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90ICpyZW1haW5kZXIpXG4tLVxubW0vbWVtY29udHJvbC5jPTM0ODQ9aW50IG9ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLCBzaXplX3Qgc2l6ZSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMzUxNC1cdCAqL1xubW0vbWVtY29udHJvbC5jOjM1MTU6XHRyZXQgPSBfX29ial9jZ3JvdXBfY2hhcmdlKG9iamNnLCBnZnAsIHNpemUsIFx1MDAyNnJlbWFpbmRlcik7XG5tbS9tZW1jb250cm9sLmMtMzUxNi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiByZW1haW5kZXIpXG4tLVxubW0vbWVtY29udHJvbC5jPTM1MzY9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzYwNS1cdFx0XHR1bmxvY2tfc3RvY2soc3RvY2spO1xubW0vbWVtY29udHJvbC5jOjM2MDY6XHRcdFx0aWYgKF9fb2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIGZsYWdzLCBvYmpfc2l6ZSwgXHUwMDI2cmVtYWluZGVyKSlcbm1tL21lbWNvbnRyb2wuYy0zNjA3LVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc2NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJZGVudGlmeWluZyBLZXkgTWVtb3J5IEFjY291bnRpbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGZ1bmN0aW9ucywgYW5kIHRoZSBvYmplY3RpdmUgaXMgdG8gaWRlbnRpZnkgcmVsZXZhbnQgZW50cnkgcG9pbnRzLiBJIHNlZSB0aGF0IGBvYmpfY2dyb3VwX2NoYXJnZWAgYW5kIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhcmUgbm9uLXN0YXRpYywgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGlzIHN1Z2dlc3RzIHRoZXNlIGFzIHByaW1hcnkgY2FuZGlkYXRlczoKCiogICBgX19tZW1fY2dyb3VwX2NoYXJnZWAKKiAgIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYAoqICAgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AKKiAgIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAKKiAgIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgCiogICBgb2JqX2Nncm91cF9jaGFyZ2VgCiogICBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AKCkhvd2V2ZXIsIHRoZSByZWFsIGFjdGlvbiBzZWVtcyB0byBiZSBhcm91bmQgYHRyeV9jaGFyZ2VfbWVtY2dgLiBUaGUgcHJldmlvdXMgbW9kaWZpY2F0aW9uIHdhcyB0byB0aGlzIGZ1bmN0aW9uLiBJdCYjMzk7cyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgYSByZWQgZmxhZyBpbiB0aGlzIGNvbnRleHQsIGJ1dCBpdCYjMzk7cyBhICpsYXJnZSogc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGNvdWxkIG1lYW4gaXQmIzM5O3MgKm5vdCogaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIGFuZCB0aGVyZWZvcmUgc3RpbGwgYSByZWxldmFudCBlbnRyeSBwb2ludC4gR2l2ZW4gdGhlIGluc3RydWN0aW9uIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVycywgaXQmIzM5O3Mgd29ydGggZG91YmxlLWNoZWNraW5nIGlmIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBhY3R1YWxseSBpbmxpbmVkLiBJdCYjMzk7cyBiZXN0IHRvIGJlIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV9jaGFyZ2VfbWVtY2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI1MDU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjU5NC1cbm1tL21lbWNvbnRyb2wuYzoyNTk1OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxubW0vbWVtY29udHJvbC5jLTI1OTYtXHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjc5MD1zdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vbWVtY29udHJvbC5jLTI3OTUtXG5tbS9tZW1jb250cm9sLmM6Mjc5NjpcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTI3OTctfVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zMDg4PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG4tLVxubW0vbWVtY29udHJvbC5jLTMwOTUtXG5tbS9tZW1jb250cm9sLmM6MzA5NjpcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTMwOTctXHRpZiAocmV0KVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MTE2PXN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTEyNC1cdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcbm1tL21lbWNvbnRyb2wuYzo1MTI1Olx0XHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG5tbS9tZW1jb250cm9sLmMtNTEyNi1cdGlmIChyZXQpIHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTQ3MD1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01NDc3LVxubW0vbWVtY29udHJvbC5jOjU0Nzg6XHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XG5tbS9tZW1jb250cm9sLmMtNTQ3OS1cdFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTM3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1lbW9yeSBDZ3JvdXAgQ2hhcmdpbmcgTG9naWMgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGludm9sdmVkIGxpc3Rpbmcgb3V0IHRoZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cCBjaGFyZ2luZzogYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYCwgYG9ial9jZ3JvdXBfY2hhcmdlYCwgYW5kIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYC4gSSB3YXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gYF9fbWVtX2Nncm91cF9jaGFyZ2VgIGFzIGEgY2VudHJhbCBwb2ludCBvZiBpbnRlcmVzdCwgYXMgZXhwZWN0ZWQuIEkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgTUVNQ0dgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGF0IHBsYXkgaGVyZS4KCk5vdywgbGV0JiMzOTtzIHJldmlldyB0aGUgcGF0Y2ggaXRzZWxmLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHJlcGxhY2luZyBhIGBnb3RvIHJldHJ5YCBsb29wIHdpdGggYSBgZm9yYCBsb29wIHRoYXQgdXNlcyBhIGBucl9yZXRyaWVzYCBjb3VudGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uOyBpdCYjMzk7cyBub3QgbWVyZWx5IHN5bnRhY3RpYy4gVGhlIGxvb3AmIzM5O3Mgb3JpZ2luYWwgcmV0cnkgY29uZGl0aW9ucyBpbnZvbHZlZCBzY2VuYXJpb3MgbGlrZSBgYmF0Y2ggJmd0OyBucl9wYWdlc2AsIGBtZW1fY2dyb3VwX21hcmdpbihtZW1fb3Zlcl9saW1pdCkgJmd0Oz0gbnJfcGFnZXNgLCBgIWRyYWluZWRgLCBvciBgbnJfcmVjbGFpbWVkICZhbXA7JmFtcDsgbnJfcGFnZXMgJmx0Oz0gKDEgJmx0OyZsdDsgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpYC4gQ3JpdGljYWxseSwgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIGBucl9yZXRyaWVzYCB3YXMgb25seSBkZWNyZW1lbnRlZCBhdCB0aGUgKmVuZCogb2YgdGhlIGxvb3AgaWYgYSByZXRyeSB3YXMgYWxsb3dlZC4gTm93LCB3ZSBkZWNyZW1lbnQgYG5yX3JldHJpZXNgIG9uICpldmVyeSogaXRlcmF0aW9uIG9mIHRoZSBgZm9yYCBsb29wLgoKVGhlIGltcGxpY2F0aW9uIGlzIHNpZ25pZmljYW50LiBUaGlzIGFsdGVyYXRpb24gaW4gcmV0cnkgYmVoYXZpb3IgcG90ZW50aWFsbHkgbW9kaWZpZXMgdGhlIHRpbWluZyBhbmQgY29uZGl0aW9ucyB1bmRlciB3aGljaCBtZW1vcnkgY2dyb3VwIGNoYXJnZXMgYXJlIGFwcGxpZWQgYW5kLCBpbXBvcnRhbnRseSwgd2hlbiBPT00gc2l0dWF0aW9ucyBhcmUgdHJpZ2dlcmVkLiBUaGUgY2hhbmdlIGRpcmVjdGx5IGluZmx1ZW5jZXMgcmVjbGFpbSBiZWhhdmlvciwgbWFraW5nIHRoaXMgY2hhbmdlIGEgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCBlZGdlIGNhc2VzIGFuZCB1bmV4cGVjdGVkIGJlaGF2aW9ycy4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgZWFybGllciBPT01zIG9yIG1vZGlmaWVkIHJlY2xhaW0gYmVoYXZpb3IsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtX2Nncm91cF9jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTUxMTY9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MTM1LVxubW0vbWVtY29udHJvbC5jOjUxMzY6aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbm1tL21lbWNvbnRyb2wuYy01MTM3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5OTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqQ2hlY2tpbmcgYSBWYXJpYWJsZSBEZWZpbml0aW9uKioKClllcywgdGhhdCBvYnNlcnZhdGlvbiBpcyBjb3JyZWN0LiBNeSBjdXJyZW50IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgdmFyaWFibGUgaXMgcHJvcGVybHkgZGVmaW5lZCB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGNvbnRleHQuIEl0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBhbmFseXNpcywgYW5kIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGV4aXN0ZW5jZSBiZWZvcmUgSSBjYW4gcHJvY2VlZCB3aXRoIGFueSByZWxhdGVkIGNhbGN1bGF0aW9ucyBvciBhc3Nlc3NtZW50cy4gVGltZSB0byBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NTEzNj1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MTQ4LS8qKlxubW0vbWVtY29udHJvbC5jOjUxNDk6ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xubW0vbWVtY29udHJvbC5jLTUxNTAtICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXG4tLVxubW0vbWVtY29udHJvbC5jLTUxNTktICovXG5tbS9tZW1jb250cm9sLmM6NTE2MDppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG5tbS9tZW1jb250cm9sLmMtNTE2MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzQyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqQ2hlY2tpbmcgYSBLZXkgS2VybmVsIFBhcmFtZXRlcioqCgpBbHJpZ2h0LCB0aGF0IGNvbmZpcm1hdGlvbiBpcyBhIGdpdmVuLCB3ZSYjMzk7cmUgb24gdGhlIHJpZ2h0IHRyYWNrLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHNvbWV0aGluZyBjcnVjaWFsOiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIHBhcmFtZXRlciBpcyBhY3R1YWxseSBkZWZpbmVkIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIga2VybmVsIGNvbnRleHQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIHdpdGhvdXQgaXQsIGEgY2VydGFpbiBsaW5lIG9mIGludmVzdGlnYXRpb24gaXMgZ29pbmcgdG8gYmUgYSBjb21wbGV0ZSBub24tc3RhcnRlci4gU28sIHRpbWUgdG8gY2hlY2sgdGhhdCBkZWZpbml0aW9uLCBhbmQgdGhlbiB3ZSYjMzk7bGwgY29udGludWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NTE2MD1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUxODItLyoqXG5tbS9tZW1jb250cm9sLmM6NTE4MzogKiBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8gLSBDaGFyZ2UgYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gZm9yIHN3YXBpbi5cbm1tL21lbWNvbnRyb2wuYy01MTg0LSAqIEBmb2xpbzogdGhlIGZvbGlvIHRvIGNoYXJnZVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MTkzLSAqL1xubW0vbWVtY29udHJvbC5jOjUxOTQ6aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbm1tL21lbWNvbnRyb2wuYy01MTk1LVx0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqQ29uZmlybWF0aW9uIGFuZCBJbml0aWFsIEZvY3VzKioKClllcywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSBjYXNlLiBBbHJpZ2h0LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgZnVuY3Rpb25hbGl0eS4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyB0byB1bmRlcnN0YW5kIHRoaXMgZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc2tfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz01NDQ1PXZvaWQgbWVtX2Nncm91cF9za19pbmhlcml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NDYxLS8qKlxubW0vbWVtY29udHJvbC5jOjU0NjI6ICogbWVtX2Nncm91cF9za19jaGFyZ2UgLSBjaGFyZ2Ugc29ja2V0IG1lbW9yeVxubW0vbWVtY29udHJvbC5jLTU0NjMtICogQHNrOiBzb2NrZXQgaW4gbWVtY2cgdG8gY2hhcmdlXG4tLVxubW0vbWVtY29udHJvbC5jLTU0NjktICovXG5tbS9tZW1jb250cm9sLmM6NTQ3MDpib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxubW0vbWVtY29udHJvbC5jLTU0NzEtXHRcdFx0ICBnZnBfdCBnZnBfbWFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBNZW1vcnkgQWNjb3VudGluZyBDaGVjayoqCgpSaWdodCwgdGhhdCYjMzk7cyBzZXR0bGVkIHRoZW4sIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY29uZmlybWVkLiBOb3csIGxldCYjMzk7cyBkaXZlIGRlZXBlciBhbmQgaW52ZXN0aWdhdGUgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGUgY29yZSBtZW1vcnkgY2dyb3VwIGtlcm5lbCBtZW1vcnkgY2hhcmdlIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYC4gVGhpcyBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBhY2NvdW50aW5nIGRlY2lzaW9ucyBhcmUgbWFkZSwgc28gYSBjbG9zZSBleGFtaW5hdGlvbiBoZXJlIGlzIHdhcnJhbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0zMTIwPXN0YXRpYyB2b2lkIHBhZ2Vfc2V0X29iamNnKHN0cnVjdCBwYWdlICpwYWdlLCBjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTMxMjUtLyoqXG5tbS9tZW1jb250cm9sLmM6MzEyNjogKiBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2U6IGNoYXJnZSBhIGttZW0gcGFnZSB0byB0aGUgY3VycmVudCBtZW1vcnkgY2dyb3VwXG5tbS9tZW1jb250cm9sLmMtMzEyNy0gKiBAcGFnZTogcGFnZSB0byBjaGFyZ2Vcbi0tXG5tbS9tZW1jb250cm9sLmMtMzEzMi0gKi9cbm1tL21lbWNvbnRyb2wuYzozMTMzOmludCBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCwgaW50IG9yZGVyKVxubW0vbWVtY29udHJvbC5jLTMxMzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQyMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQ29uZmlybWluZyBhbmQgRGlyZWN0aW5nIEZvY3VzKioKClllcywgdGhhdCYjMzk7cyBjb3JyZWN0LiBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjay4gTm93LCB0aGUgY3JpdGljYWwgcGllY2UgaW4gdGhpcyBwdXp6bGUsIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYG9ial9jZ3JvdXBfY2hhcmdlYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBtZWNoYW5pc20gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGxpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29ial9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0zMDY1PXN0YXRpYyB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMDgwLS8qXG5tbS9tZW1jb250cm9sLmM6MzA4MTogKiBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlczogY2hhcmdlIGEgbnVtYmVyIG9mIGtlcm5lbCBwYWdlcyB0byBhIG9iamNnXG5tbS9tZW1jb250cm9sLmMtMzA4Mi0gKiBAb2JqY2c6IG9iamVjdCBjZ3JvdXAgdG8gY2hhcmdlXG4tLVxubW0vbWVtY29udHJvbC5jLTMwODctICovXG5tbS9tZW1jb250cm9sLmM6MzA4ODpzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxubW0vbWVtY29udHJvbC5jLTMwODktXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jPTMxMzM9aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpXG4tLVxubW0vbWVtY29udHJvbC5jLTMxMzktXHRpZiAob2JqY2cgXHUwMDI2XHUwMDI2ICFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKSB7XG5tbS9tZW1jb250cm9sLmM6MzE0MDpcdFx0cmV0ID0gb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMob2JqY2csIGdmcCwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xubW0vbWVtY29udHJvbC5jLTMxNDEtXHRcdGlmICghcmV0KSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTM0NjE9c3RhdGljIHZvaWQgcmVmaWxsX29ial9zdG9jayhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTM0NjktXG5tbS9tZW1jb250cm9sLmM6MzQ3MDpzdGF0aWMgaW50IF9fb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG5tbS9tZW1jb250cm9sLmMtMzQ3MS1cdFx0XHQgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCAqcmVtYWluZGVyKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNDc2LVx0Y2hhcmdlX3NpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xubW0vbWVtY29udHJvbC5jOjM0Nzc6XHRyZXQgPSBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhvYmpjZywgZ2ZwLCBjaGFyZ2Vfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5tbS9tZW1jb250cm9sLmMtMzQ3OC1cdGlmICghcmV0KVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNDgzLVxubW0vbWVtY29udHJvbC5jOjM0ODQ6aW50IG9ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLCBzaXplX3Qgc2l6ZSlcbm1tL21lbWNvbnRyb2wuYy0zNDg1LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMzUxNC1cdCAqL1xubW0vbWVtY29udHJvbC5jOjM1MTU6XHRyZXQgPSBfX29ial9jZ3JvdXBfY2hhcmdlKG9iamNnLCBnZnAsIHNpemUsIFx1MDAyNnJlbWFpbmRlcik7XG5tbS9tZW1jb250cm9sLmMtMzUxNi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiByZW1haW5kZXIpXG4tLVxubW0vbWVtY29udHJvbC5jPTM1MzY9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzYwNS1cdFx0XHR1bmxvY2tfc3RvY2soc3RvY2spO1xubW0vbWVtY29udHJvbC5jOjM2MDY6XHRcdFx0aWYgKF9fb2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIGZsYWdzLCBvYmpfc2l6ZSwgXHUwMDI2cmVtYWluZGVyKSlcbm1tL21lbWNvbnRyb2wuYy0zNjA3LVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01ODM2PWJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01ODY5LS8qKlxubW0vbWVtY29udHJvbC5jOjU4NzA6ICogb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAgLSBjaGFyZ2UgY29tcHJlc3Npb24gYmFja2VuZCBtZW1vcnlcbm1tL21lbWNvbnRyb2wuYy01ODcxLSAqIEBvYmpjZzogdGhlIG9iamVjdCBjZ3JvdXBcbi0tXG5tbS9tZW1jb250cm9sLmMtNTg3Ni0gKi9cbm1tL21lbWNvbnRyb2wuYzo1ODc3OnZvaWQgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSlcbm1tL21lbWNvbnRyb2wuYy01ODc4LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTg4OS1cdC8qIFBGX01FTUFMTE9DIGNvbnRleHQsIGNoYXJnaW5nIG11c3Qgc3VjY2VlZCAqL1xubW0vbWVtY29udHJvbC5jOjU4OTA6XHRpZiAob2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIEdGUF9LRVJORUwsIHNpemUpKVxubW0vbWVtY29udHJvbC5jLTU4OTEtXHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1OTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEFsbG9jYXRpb24gSG9vayoqCgpZZXAsIHRoYXQmIzM5O3MgaXQsIHRoYXQmIzM5O3MgdGhlIGNvbmZpcm1hdGlvbiBJIG5lZWRlZC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbnRvIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBpbnRlcmVzdGluZyBzdHVmZiBoYXBwZW5zLCByaWdodD8gSSYjMzk7bSBiZXR0aW5nIHRoYXQmIzM5O3Mgd2hlcmUgSSBjYW4gZmluZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgYWxsb2NhdGlvbiBob29rLCBJIHN1c3BlY3QgdGhhdCBpcyB3aGVyZSB0aGUgaW5mb3JtYXRpb24gaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM1Mjc9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzUzNS1cbm1tL21lbWNvbnRyb2wuYzozNTM2OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG5tbS9tZW1jb250cm9sLmMtMzUzNy1cdFx0XHRcdCAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBzbGFiX2FsbG9jX2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkwMQoJCQkJCQkJb3V0cHV0OiAxNTgKCQkJCQkJCXRob3VnaHRzOiAxMDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBTZWxlY3Rpb24gZm9yIE1lbW9yeSBDZ3JvdXAgQ2hhcmdlIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gYW5hbHl6aW5nIHRoZSBjaGFuZ2VzIGluIHRoZSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGB0cnlfY2hhcmdlX21lbWNnYC4gVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyByZXRyaWVzIHdvcmssIHdoaWNoIGhhcyBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucyBvbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY291bGQgYWZmZWN0IE9PTSBiZWhhdmlvciBvciByZWNsYWltLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzaWduaWZpY2FudCBjaGFuZ2UuIEl0JiMzOTtzIHRhcmdldGluZyBgTUVNQ0dgLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpOb3csIEkgbmVlZCB0byBwaWNrIGFwcHJvcHJpYXRlIGZvY3VzIHN5bWJvbHMuIEluaXRpYWxseSwgbXkgbGlzdCBsb29rZWQgbGlrZSB0aGlzOiBgX19tZW1fY2dyb3VwX2NoYXJnZWAsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAsIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCBgb2JqX2Nncm91cF9jaGFyZ2VgLCBhbmQgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLgoKSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyBzdGF0ZSwgSSBzaG91bGQgJiMzNDtBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zJiMzNDsgYW5kIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhbmQgYF9fbWVtX2Nncm91cF9jaGFyZ2VgIGFyZSBkZWZpbml0ZWx5IGhvdCBwYXRocywgdGhlIGZvcm1lciBvbiBzbGFiIGFsbG9jYXRpb25zIGFuZCB0aGUgbGF0dGVyIG9uIHBhZ2UgZmF1bHRzLiBTbywgdGhvc2UgYXJlIG91dC4gV2hpbGUgYHRyeV9jaGFyZ2VfbWVtY2dgIGl0c2VsZiBpcyB0aGUgb25lIGJlaW5nIG1vZGlmaWVkLCBpdCYjMzk7cyBzdGF0aWMsIHNvIGl0JiMzOTtzIG5vdCBhIGdvb2QgY2hvaWNlLgoKTXkgdGhpbmtpbmcgaXMgdG8gYWltIGZvciBhIGxlc3MgaG90IGJ1dCByZXByZXNlbnRhdGl2ZSBsaXN0LiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgZm9yIGh1Z2UgcGFnZXMsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGZvciBzd2FwLWluIG9wZXJhdGlvbnMsIGFuZCBgbWVtX2Nncm91cF9za19jaGFyZ2VgIGZvciBzb2NrZXQgbWVtb3J5IGNoYXJnaW5nIGFyZSBhbGwgZ29vZCBjYW5kaWRhdGVzLiBBbHRob3VnaCBgbWVtX2Nncm91cF9za19jaGFyZ2VgIGNvdWxkIGJlIHJlbGF0aXZlbHkgaG90LCB0aGUgY29yZSBsb2dpYyBpcyBub3QgdGhlcmUsIHNvIEkmIzM5O2xsIGluY2x1ZGUgaXQuCgpUaGVuLCBJIHJlbWVtYmVyIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCB3aGljaCBoYW5kbGVzIGttZW0gcGFnZXMsIGFuZCB3aGlsZSBub3Qgc3VwZXItaG90LCBpdCYjMzk7cyBhbiBlbnRyeSBwb2ludC4gSXQgc2VlbXMgbGlrZSB0aGlzIHNhdGlzZmllcyB0aGUgJiMzNDtub24taG90IHBhdGgmIzM0OyByZXF1aXJlbWVudC4KClNvLCBJJiMzOTttIGdvaW5nIHdpdGg6CgoqICAgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgCiogICBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYAoqICAgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYAoqICAgYF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZWAKCkFuZCB0aGUgY29uZmlnIGlzIHNpbXBseSBgTUVNQ0dgLiBJIHRoaW5rIHRoaXMgaXMgYSBnb29kLCBzcGVjaWZpYyBsaXN0IHRoYXQgYWNjdXJhdGVseSByZWZsZWN0cyB0aGUgY29yZSBjaGFuZ2VzIGFuZCBhdm9pZHMgb3Zlcmx5IGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiBOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2tfY2hhcmdlJiMzNDssCiAgICAmIzM0O19fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGxvZ2ljIGluIGB0cnlfY2hhcmdlX21lbWNnYC4gSXQgcmVwbGFjZXMgYSBgZ290byByZXRyeWAgbG9vcCB3aXRoIGEgYGZvcmAgbG9vcCB0aGF0IGRlY3JlbWVudHMgdGhlIHJldHJ5IGNvdW50ZXIgb24gZXZlcnkgaXRlcmF0aW9uLCB3aGljaCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgcmV0cnkgYmVoYXZpb3IgYW5kIGNhbiBsZWFkIHRvIHByZW1hdHVyZSBPT01zIG9yIGRpZmZlcmVudCByZWNsYWltIGJlaGF2aW9yLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2tfY2hhcmdlJiMzNDssCiAgICAmIzM0O19fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGxvZ2ljIGluIGB0cnlfY2hhcmdlX21lbWNnYC4gSXQgcmVwbGFjZXMgYSBgZ290byByZXRyeWAgbG9vcCB3aXRoIGEgYGZvcmAgbG9vcCB0aGF0IGRlY3JlbWVudHMgdGhlIHJldHJ5IGNvdW50ZXIgb24gZXZlcnkgaXRlcmF0aW9uLCB3aGljaCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgcmV0cnkgYmVoYXZpb3IgYW5kIGNhbiBsZWFkIHRvIHByZW1hdHVyZSBPT01zIG9yIGRpZmZlcmVudCByZWNsYWltIGJlaGF2aW9yLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzU6MzcuOTM0NjI0ODA3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5NDEzMjc0OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCIsXG4gICAgXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIixcbiAgICBcIm1lbV9jZ3JvdXBfc2tfY2hhcmdlXCIsXG4gICAgXCJfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGxvZ2ljIGluIGB0cnlfY2hhcmdlX21lbWNnYC4gSXQgcmVwbGFjZXMgYSBgZ290byByZXRyeWAgbG9vcCB3aXRoIGEgYGZvcmAgbG9vcCB0aGF0IGRlY3JlbWVudHMgdGhlIHJldHJ5IGNvdW50ZXIgb24gZXZlcnkgaXRlcmF0aW9uLCB3aGljaCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgcmV0cnkgYmVoYXZpb3IgYW5kIGNhbiBsZWFkIHRvIHByZW1hdHVyZSBPT01zIG9yIGRpZmZlcmVudCByZWNsYWltIGJlaGF2aW9yLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNTozNy45MzQ2MzI3NTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTM3ODEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE2ZGIwMDEzMjJmYzkxMTkwYTFmMWIwNzNiOTcyZGZiZGEzZDQyNmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAyMjozNTozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA2ZGM0ODg4YTkwZjNmLi43ODFiY2NlZDU4NDhmIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0yNjA3LDk4ICsyNjA3LDk3IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbiBcXHR1bnNpZ25lZCBsb25nIHBmbGFncztcXG4gXFx0Ym9vbCBhbGxvd19zcGlubmluZyA9IGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKGdmcF9tYXNrKTtcXG4gXFxuLXJldHJ5Olxcbi1cXHRpZiAoY29uc3VtZV9zdG9jayhtZW1jZywgbnJfcGFnZXMpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0Zm9yICg7IG5yX3JldHJpZXMgXFx1MDAzZT0gMDsgbnJfcmV0cmllcy0tKSB7XFxuIFxcbi1cXHRpZiAoIWFsbG93X3NwaW5uaW5nKVxcbi1cXHRcXHQvKiBBdm9pZCB0aGUgcmVmaWxsIGFuZCBmbHVzaCBvZiB0aGUgb2xkZXIgc3RvY2sgKi9cXG4tXFx0XFx0YmF0Y2ggPSBucl9wYWdlcztcXG4rXFx0XFx0aWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xcbi1cXHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSB8fFxcbi1cXHQgICAgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSkge1xcbi1cXHRcXHRpZiAocGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpXFxuLVxcdFxcdFxcdGdvdG8gZG9uZV9yZXN0b2NrO1xcbi1cXHRcXHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxcbi1cXHRcXHRcXHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgYmF0Y2gpO1xcbi1cXHRcXHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbW9yeSk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdG1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtc3cpO1xcbi1cXHRcXHRyZWNsYWltX29wdGlvbnMgXFx1MDAyNj0gfk1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XFxuLVxcdH1cXG4rXFx0XFx0aWYgKCFhbGxvd19zcGlubmluZylcXG4rXFx0XFx0XFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXFxuK1xcdFxcdFxcdGJhdGNoID0gbnJfcGFnZXM7XFxuIFxcbi1cXHRpZiAoYmF0Y2ggXFx1MDAzZSBucl9wYWdlcykge1xcbi1cXHRcXHRiYXRjaCA9IG5yX3BhZ2VzO1xcbi1cXHRcXHRnb3RvIHJldHJ5O1xcbi1cXHR9XFxuK1xcdFxcdHJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XFxuK1xcdFxcdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XFxuK1xcdFxcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBiYXRjaCwgXFx1MDAyNmNvdW50ZXIpKSB7XFxuK1xcdFxcdFxcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSlcXG4rXFx0XFx0XFx0XFx0Z290byBkb25lX3Jlc3RvY2s7XFxuK1xcdFxcdFxcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXFxuK1xcdFxcdFxcdFxcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBiYXRjaCk7XFxuK1xcdFxcdFxcdG1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtb3J5KTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XFxuK1xcdFxcdFxcdHJlY2xhaW1fb3B0aW9ucyBcXHUwMDI2PSB+TUVNQ0dfUkVDTEFJTV9NQVlfU1dBUDtcXG4rXFx0XFx0fVxcbiBcXG4tXFx0LypcXG4tXFx0ICogUHJldmVudCB1bmJvdW5kZWQgcmVjdXJzaW9uIHdoZW4gcmVjbGFpbSBvcGVyYXRpb25zIG5lZWQgdG9cXG4tXFx0ICogYWxsb2NhdGUgbWVtb3J5LiBUaGlzIG1pZ2h0IGV4Y2VlZCB0aGUgbGltaXRzIHRlbXBvcmFyaWx5LFxcbi1cXHQgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrXFxuLVxcdCAqIHVuZGVyIHRoZSBsaW1pdCBvdmVyIHRyaWdnZXJpbmcgT09NIGtpbGxzIGluIHRoZXNlIGNhc2VzLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpKVxcbi1cXHRcXHRnb3RvIGZvcmNlO1xcbitcXHRcXHRpZiAoYmF0Y2ggXFx1MDAzZSBucl9wYWdlcykge1xcbitcXHRcXHRcXHRiYXRjaCA9IG5yX3BhZ2VzO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbiBcXG4tXFx0aWYgKHVubGlrZWx5KHRhc2tfaW5fbWVtY2dfb29tKGN1cnJlbnQpKSlcXG4tXFx0XFx0Z290byBub21lbTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUHJldmVudCB1bmJvdW5kZWQgcmVjdXJzaW9uIHdoZW4gcmVjbGFpbSBvcGVyYXRpb25zIG5lZWQgdG9cXG4rXFx0XFx0ICogYWxsb2NhdGUgbWVtb3J5LiBUaGlzIG1pZ2h0IGV4Y2VlZCB0aGUgbGltaXRzIHRlbXBvcmFyaWx5LFxcbitcXHRcXHQgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrXFxuK1xcdFxcdCAqIHVuZGVyIHRoZSBsaW1pdCBvdmVyIHRyaWdnZXJpbmcgT09NIGtpbGxzIGluIHRoZXNlIGNhc2VzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpKVxcbitcXHRcXHRcXHRnb3RvIGZvcmNlO1xcbiBcXG4tXFx0aWYgKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykpXFxuLVxcdFxcdGdvdG8gbm9tZW07XFxuK1xcdFxcdGlmICh1bmxpa2VseSh0YXNrX2luX21lbWNnX29vbShjdXJyZW50KSkpXFxuK1xcdFxcdFxcdGdvdG8gbm9tZW07XFxuIFxcbi1cXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XFxuLVxcdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xcbitcXHRcXHRpZiAoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcXG4rXFx0XFx0XFx0Z290byBub21lbTtcXG4gXFxuLVxcdHBzaV9tZW1zdGFsbF9lbnRlcihcXHUwMDI2cGZsYWdzKTtcXG4tXFx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTtcXG4tXFx0cHNpX21lbXN0YWxsX2xlYXZlKFxcdTAwMjZwZmxhZ3MpO1xcbitcXHRcXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XFxuK1xcdFxcdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xcbiBcXG4tXFx0aWYgKG1lbV9jZ3JvdXBfbWFyZ2luKG1lbV9vdmVyX2xpbWl0KSBcXHUwMDNlPSBucl9wYWdlcylcXG4tXFx0XFx0Z290byByZXRyeTtcXG4rXFx0XFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbitcXHRcXHRucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xcbitcXHRcXHRwc2lfbWVtc3RhbGxfbGVhdmUoXFx1MDAyNnBmbGFncyk7XFxuIFxcbi1cXHRpZiAoIWRyYWluZWQpIHtcXG4tXFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTtcXG4tXFx0XFx0ZHJhaW5lZCA9IHRydWU7XFxuLVxcdFxcdGdvdG8gcmV0cnk7XFxuLVxcdH1cXG4rXFx0XFx0aWYgKG1lbV9jZ3JvdXBfbWFyZ2luKG1lbV9vdmVyX2xpbWl0KSBcXHUwMDNlPSBucl9wYWdlcylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9OT1JFVFJZKVxcbi1cXHRcXHRnb3RvIG5vbWVtO1xcbi1cXHQvKlxcbi1cXHQgKiBFdmVuIHRob3VnaCB0aGUgbGltaXQgaXMgZXhjZWVkZWQgYXQgdGhpcyBwb2ludCwgcmVjbGFpbVxcbi1cXHQgKiBtYXkgaGF2ZSBiZWVuIGFibGUgdG8gZnJlZSBzb21lIHBhZ2VzLiAgUmV0cnkgdGhlIGNoYXJnZVxcbi1cXHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cXG4tXFx0ICpcXG4tXFx0ICogT25seSBmb3IgcmVndWxhciBwYWdlcywgdGhvdWdoOiBodWdlIHBhZ2VzIGFyZSByYXRoZXJcXG4tXFx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcXG4tXFx0ICogdG8gcmVndWxhciBwYWdlcyBhbnl3YXkgaW4gY2FzZSBvZiBmYWlsdXJlLlxcbi1cXHQgKi9cXG4tXFx0aWYgKG5yX3JlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiBucl9wYWdlcyBcXHUwMDNjPSAoMSBcXHUwMDNjXFx1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikpXFxuLVxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdGlmICghZHJhaW5lZCkge1xcbitcXHRcXHRcXHRkcmFpbl9hbGxfc3RvY2sobWVtX292ZXJfbGltaXQpO1xcbitcXHRcXHRcXHRkcmFpbmVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdGlmIChucl9yZXRyaWVzLS0pXFxuLVxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdGlmIChnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX05PUkVUUlkpXFxuK1xcdFxcdFxcdGdvdG8gbm9tZW07XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEV2ZW4gdGhvdWdoIHRoZSBsaW1pdCBpcyBleGNlZWRlZCBhdCB0aGlzIHBvaW50LCByZWNsYWltXFxuK1xcdFxcdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXFxuK1xcdFxcdCAqIGJlZm9yZSBraWxsaW5nIHRoZSB0YXNrLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxcbitcXHRcXHQgKiB1bmxpa2VseSB0byBzdWNjZWVkIHNvIGNsb3NlIHRvIHRoZSBsaW1pdCwgYW5kIHdlIGZhbGwgYmFja1xcbitcXHRcXHQgKiB0byByZWd1bGFyIHBhZ2VzIGFueXdheSBpbiBjYXNlIG9mIGZhaWx1cmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobnJfcmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2IG5yX3BhZ2VzIFxcdTAwM2M9ICgxIFxcdTAwM2NcXHUwMDNjIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9SRVRSWV9NQVlGQUlMKVxcbi1cXHRcXHRnb3RvIG5vbWVtO1xcbitcXHRcXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9SRVRSWV9NQVlGQUlMKVxcbitcXHRcXHRcXHRnb3RvIG5vbWVtO1xcbiBcXG4tXFx0LyogQXZvaWQgZW5kbGVzcyBsb29wIGZvciB0YXNrcyBieXBhc3NlZCBieSB0aGUgb29tIGtpbGxlciAqL1xcbi1cXHRpZiAocGFzc2VkX29vbSBcXHUwMDI2XFx1MDAyNiB0YXNrX2lzX2R5aW5nKCkpXFxuLVxcdFxcdGdvdG8gbm9tZW07XFxuK1xcdFxcdC8qIEF2b2lkIGVuZGxlc3MgbG9vcCBmb3IgdGFza3MgYnlwYXNzZWQgYnkgdGhlIG9vbSBraWxsZXIgKi9cXG4rXFx0XFx0aWYgKHBhc3NlZF9vb20gXFx1MDAyNlxcdTAwMjYgdGFza19pc19keWluZygpKVxcbitcXHRcXHRcXHRnb3RvIG5vbWVtO1xcbiBcXG4tXFx0LypcXG4tXFx0ICoga2VlcCByZXRyeWluZyBhcyBsb25nIGFzIHRoZSBtZW1jZyBvb20ga2lsbGVyIGlzIGFibGUgdG8gbWFrZVxcbi1cXHQgKiBhIGZvcndhcmQgcHJvZ3Jlc3Mgb3IgYnlwYXNzIHRoZSBjaGFyZ2UgaWYgdGhlIG9vbSBraWxsZXJcXG4tXFx0ICogY291bGRuJ3QgbWFrZSBhbnkgcHJvZ3Jlc3MuXFxuLVxcdCAqL1xcbi1cXHRpZiAobWVtX2Nncm91cF9vb20obWVtX292ZXJfbGltaXQsIGdmcF9tYXNrLFxcbi1cXHRcXHRcXHQgICBnZXRfb3JkZXIobnJfcGFnZXMgKiBQQUdFX1NJWkUpKSkge1xcbi1cXHRcXHRwYXNzZWRfb29tID0gdHJ1ZTtcXG4tXFx0XFx0bnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuLVxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGtlZXAgcmV0cnlpbmcgYXMgbG9uZyBhcyB0aGUgbWVtY2cgb29tIGtpbGxlciBpcyBhYmxlIHRvIG1ha2VcXG4rXFx0XFx0ICogYSBmb3J3YXJkIHByb2dyZXNzIG9yIGJ5cGFzcyB0aGUgY2hhcmdlIGlmIHRoZSBvb20ga2lsbGVyXFxuK1xcdFxcdCAqIGNvdWxkbid0IG1ha2UgYW55IHByb2dyZXNzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG1lbV9jZ3JvdXBfb29tKG1lbV9vdmVyX2xpbWl0LCBnZnBfbWFzayxcXG4rXFx0XFx0XFx0XFx0ICAgZ2V0X29yZGVyKG5yX3BhZ2VzICogUEFHRV9TSVpFKSkpIHtcXG4rXFx0XFx0XFx0cGFzc2VkX29vbSA9IHRydWU7XFxuK1xcdFxcdFxcdG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIG5vbWVtOlxcbiBcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNTozOC40MDQ2NzYzOTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MjQ3MTI2NjIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiLFxuICAgIFwibWVtX2Nncm91cF9za19jaGFyZ2VcIixcbiAgICBcIl9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMgaW4gYHRyeV9jaGFyZ2VfbWVtY2dgLiBJdCByZXBsYWNlcyBhIGBnb3RvIHJldHJ5YCBsb29wIHdpdGggYSBgZm9yYCBsb29wIHRoYXQgZGVjcmVtZW50cyB0aGUgcmV0cnkgY291bnRlciBvbiBldmVyeSBpdGVyYXRpb24sIHdoaWNoIHNpZ25pZmljYW50bHkgYWx0ZXJzIHRoZSByZXRyeSBiZWhhdmlvciBhbmQgY2FuIGxlYWQgdG8gcHJlbWF0dXJlIE9PTXMgb3IgZGlmZmVyZW50IHJlY2xhaW0gYmVoYXZpb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE2ZGIwMDEzMjJmYzkxMTkwYTFmMWIwNzNiOTcyZGZiZGEzZDQyNmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDIyOjM1OjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2ZGM0ODg4YTkwZjNmLi43ODFiY2NlZDU4NDhmIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0yNjA3LDk4ICsyNjA3LDk3IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHRib29sIGFsbG93X3NwaW5uaW5nID0gZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZ2ZwX21hc2spO1xuIFxuLXJldHJ5OlxuLVx0aWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRmb3IgKDsgbnJfcmV0cmllcyBcdTAwM2U9IDA7IG5yX3JldHJpZXMtLSkge1xuIFxuLVx0aWYgKCFhbGxvd19zcGlubmluZylcbi1cdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG4tXHRcdGJhdGNoID0gbnJfcGFnZXM7XG4rXHRcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4rXHRcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuLVx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbi1cdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG4tXHRcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIGJhdGNoLCBcdTAwMjZjb3VudGVyKSlcbi1cdFx0XHRnb3RvIGRvbmVfcmVzdG9jaztcbi1cdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbi1cdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIGJhdGNoKTtcbi1cdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpO1xuLVx0fSBlbHNlIHtcbi1cdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XG4tXHRcdHJlY2xhaW1fb3B0aW9ucyBcdTAwMjY9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuLVx0fVxuK1x0XHRpZiAoIWFsbG93X3NwaW5uaW5nKVxuK1x0XHRcdC8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqL1xuK1x0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4gXG4tXHRpZiAoYmF0Y2ggXHUwMDNlIG5yX3BhZ2VzKSB7XG4tXHRcdGJhdGNoID0gbnJfcGFnZXM7XG4tXHRcdGdvdG8gcmV0cnk7XG4tXHR9XG4rXHRcdHJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XG4rXHRcdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XG4rXHRcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG4rXHRcdFx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKVxuK1x0XHRcdFx0Z290byBkb25lX3Jlc3RvY2s7XG4rXHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbitcdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gpO1xuK1x0XHRcdG1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtb3J5KTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbXN3KTtcbitcdFx0XHRyZWNsYWltX29wdGlvbnMgXHUwMDI2PSB+TUVNQ0dfUkVDTEFJTV9NQVlfU1dBUDtcbitcdFx0fVxuIFxuLVx0Lypcbi1cdCAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvXG4tXHQgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksXG4tXHQgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrXG4tXHQgKiB1bmRlciB0aGUgbGltaXQgb3ZlciB0cmlnZ2VyaW5nIE9PTSBraWxscyBpbiB0aGVzZSBjYXNlcy5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKSlcbi1cdFx0Z290byBmb3JjZTtcbitcdFx0aWYgKGJhdGNoIFx1MDAzZSBucl9wYWdlcykge1xuK1x0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbiBcbi1cdGlmICh1bmxpa2VseSh0YXNrX2luX21lbWNnX29vbShjdXJyZW50KSkpXG4tXHRcdGdvdG8gbm9tZW07XG4rXHRcdC8qXG4rXHRcdCAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvXG4rXHRcdCAqIGFsbG9jYXRlIG1lbW9yeS4gVGhpcyBtaWdodCBleGNlZWQgdGhlIGxpbWl0cyB0ZW1wb3JhcmlseSxcbitcdFx0ICogYnV0IHdlIHByZWZlciBmYWNpbGl0YXRpbmcgbWVtb3J5IHJlY2xhaW0gYW5kIGdldHRpbmcgYmFja1xuK1x0XHQgKiB1bmRlciB0aGUgbGltaXQgb3ZlciB0cmlnZ2VyaW5nIE9PTSBraWxscyBpbiB0aGVzZSBjYXNlcy5cbitcdFx0ICovXG4rXHRcdGlmICh1bmxpa2VseShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQykpXG4rXHRcdFx0Z290byBmb3JjZTtcbiBcbi1cdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxuLVx0XHRnb3RvIG5vbWVtO1xuK1x0XHRpZiAodW5saWtlbHkodGFza19pbl9tZW1jZ19vb20oY3VycmVudCkpKVxuK1x0XHRcdGdvdG8gbm9tZW07XG4gXG4tXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XG4tXHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcbitcdFx0aWYgKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykpXG4rXHRcdFx0Z290byBub21lbTtcbiBcbi1cdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuLVx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXG4tXHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuLVx0cHNpX21lbXN0YWxsX2xlYXZlKFx1MDAyNnBmbGFncyk7XG4rXHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbitcdFx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XG4gXG4tXHRpZiAobWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpIFx1MDAzZT0gbnJfcGFnZXMpXG4tXHRcdGdvdG8gcmV0cnk7XG4rXHRcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuK1x0XHRucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcyxcbitcdFx0XHRcdFx0XHQgICAgZ2ZwX21hc2ssIHJlY2xhaW1fb3B0aW9ucywgTlVMTCk7XG4rXHRcdHBzaV9tZW1zdGFsbF9sZWF2ZShcdTAwMjZwZmxhZ3MpO1xuIFxuLVx0aWYgKCFkcmFpbmVkKSB7XG4tXHRcdGRyYWluX2FsbF9zdG9jayhtZW1fb3Zlcl9saW1pdCk7XG4tXHRcdGRyYWluZWQgPSB0cnVlO1xuLVx0XHRnb3RvIHJldHJ5O1xuLVx0fVxuK1x0XHRpZiAobWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpIFx1MDAzZT0gbnJfcGFnZXMpXG4rXHRcdFx0Y29udGludWU7XG4gXG4tXHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpXG4tXHRcdGdvdG8gbm9tZW07XG4tXHQvKlxuLVx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cbi1cdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXG4tXHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cbi1cdCAqXG4tXHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxuLVx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcbi1cdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cbi1cdCAqL1xuLVx0aWYgKG5yX3JlY2xhaW1lZCBcdTAwMjZcdTAwMjYgbnJfcGFnZXMgXHUwMDNjPSAoMSBcdTAwM2NcdTAwM2MgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKVxuLVx0XHRnb3RvIHJldHJ5O1xuK1x0XHRpZiAoIWRyYWluZWQpIHtcbitcdFx0XHRkcmFpbl9hbGxfc3RvY2sobWVtX292ZXJfbGltaXQpO1xuK1x0XHRcdGRyYWluZWQgPSB0cnVlO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4gXG4tXHRpZiAobnJfcmV0cmllcy0tKVxuLVx0XHRnb3RvIHJldHJ5O1xuK1x0XHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpXG4rXHRcdFx0Z290byBub21lbTtcbitcdFx0LypcbitcdFx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cbitcdFx0ICogbWF5IGhhdmUgYmVlbiBhYmxlIHRvIGZyZWUgc29tZSBwYWdlcy4gIFJldHJ5IHRoZSBjaGFyZ2VcbitcdFx0ICogYmVmb3JlIGtpbGxpbmcgdGhlIHRhc2suXG4rXHRcdCAqXG4rXHRcdCAqIE9ubHkgZm9yIHJlZ3VsYXIgcGFnZXMsIHRob3VnaDogaHVnZSBwYWdlcyBhcmUgcmF0aGVyXG4rXHRcdCAqIHVubGlrZWx5IHRvIHN1Y2NlZWQgc28gY2xvc2UgdG8gdGhlIGxpbWl0LCBhbmQgd2UgZmFsbCBiYWNrXG4rXHRcdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cbitcdFx0ICovXG4rXHRcdGlmIChucl9yZWNsYWltZWQgXHUwMDI2XHUwMDI2IG5yX3BhZ2VzIFx1MDAzYz0gKDEgXHUwMDNjXHUwMDNjIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSlcbitcdFx0XHRjb250aW51ZTtcbiBcbi1cdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfUkVUUllfTUFZRkFJTClcbi1cdFx0Z290byBub21lbTtcbitcdFx0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9SRVRSWV9NQVlGQUlMKVxuK1x0XHRcdGdvdG8gbm9tZW07XG4gXG4tXHQvKiBBdm9pZCBlbmRsZXNzIGxvb3AgZm9yIHRhc2tzIGJ5cGFzc2VkIGJ5IHRoZSBvb20ga2lsbGVyICovXG4tXHRpZiAocGFzc2VkX29vbSBcdTAwMjZcdTAwMjYgdGFza19pc19keWluZygpKVxuLVx0XHRnb3RvIG5vbWVtO1xuK1x0XHQvKiBBdm9pZCBlbmRsZXNzIGxvb3AgZm9yIHRhc2tzIGJ5cGFzc2VkIGJ5IHRoZSBvb20ga2lsbGVyICovXG4rXHRcdGlmIChwYXNzZWRfb29tIFx1MDAyNlx1MDAyNiB0YXNrX2lzX2R5aW5nKCkpXG4rXHRcdFx0Z290byBub21lbTtcbiBcbi1cdC8qXG4tXHQgKiBrZWVwIHJldHJ5aW5nIGFzIGxvbmcgYXMgdGhlIG1lbWNnIG9vbSBraWxsZXIgaXMgYWJsZSB0byBtYWtlXG4tXHQgKiBhIGZvcndhcmQgcHJvZ3Jlc3Mgb3IgYnlwYXNzIHRoZSBjaGFyZ2UgaWYgdGhlIG9vbSBraWxsZXJcbi1cdCAqIGNvdWxkbid0IG1ha2UgYW55IHByb2dyZXNzLlxuLVx0ICovXG4tXHRpZiAobWVtX2Nncm91cF9vb20obWVtX292ZXJfbGltaXQsIGdmcF9tYXNrLFxuLVx0XHRcdCAgIGdldF9vcmRlcihucl9wYWdlcyAqIFBBR0VfU0laRSkpKSB7XG4tXHRcdHBhc3NlZF9vb20gPSB0cnVlO1xuLVx0XHRucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbi1cdFx0Z290byByZXRyeTtcbitcdFx0LypcbitcdFx0ICoga2VlcCByZXRyeWluZyBhcyBsb25nIGFzIHRoZSBtZW1jZyBvb20ga2lsbGVyIGlzIGFibGUgdG8gbWFrZVxuK1x0XHQgKiBhIGZvcndhcmQgcHJvZ3Jlc3Mgb3IgYnlwYXNzIHRoZSBjaGFyZ2UgaWYgdGhlIG9vbSBraWxsZXJcbitcdFx0ICogY291bGRuJ3QgbWFrZSBhbnkgcHJvZ3Jlc3MuXG4rXHRcdCAqL1xuK1x0XHRpZiAobWVtX2Nncm91cF9vb20obWVtX292ZXJfbGltaXQsIGdmcF9tYXNrLFxuK1x0XHRcdFx0ICAgZ2V0X29yZGVyKG5yX3BhZ2VzICogUEFHRV9TSVpFKSkpIHtcbitcdFx0XHRwYXNzZWRfb29tID0gdHJ1ZTtcbitcdFx0XHRucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuIFx0fVxuIG5vbWVtOlxuIFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM1OjM4LjQwNDY3NzUzM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTM3NTgxMjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBSZWdyZXNzaW9uIGluIGB0cnlfY2hhcmdlX21lbWNnYCoqXG5cbk9rYXksIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIG1vZGlmeWluZyBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdHJ5X2NoYXJnZV9tZW1jZ2AgZnVuY3Rpb24uICBJdCdzIHJlcGxhY2luZyBhIGJ1bmNoIG9mIGBnb3RvIHJldHJ5O2Agc3RhdGVtZW50cyB3aXRoIGEgYGZvcmAgbG9vcC4gQXQgZmlyc3QgZ2xhbmNlLCBpdCBsb29rcyBsaWtlIGEgc3R5bGlzdGljIGNoYW5nZSwgYnV0IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBMZXQncyBjb21wYXJlIHRoZSBiZWZvcmUgYW5kIGFmdGVyIGNvZGUgc2lkZS1ieS1zaWRlOlxuXG5Jbml0aWFsbHksIEkgc2VlIHRoZSBvcmlnaW5hbCBjb2RlIHVzaW5nIGByZXRyeTpgIGxhYmVscyB3aXRoIGBnb3RvIHJldHJ5O2AgZm9yIGNvbnRyb2wgZmxvdy4gVGhlIGxvZ2ljIGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6IElmIGBjb25zdW1lX3N0b2NrYCBzdWNjZWVkcywgd2UncmUgZ29vZC4gT3RoZXJ3aXNlLCBpdCBjaGVja3Mgc2V2ZXJhbCBjb25kaXRpb25zLiBJZiB0aGUgYGJhdGNoYCBzaXplIGV4Y2VlZHMgYG5yX3BhZ2VzYCwgb3IgdGhlcmUncyBpbnN1ZmZpY2llbnQgbWFyZ2luLCB0aGUgc3lzdGVtIGhhc24ndCBkcmFpbmVkLCBvciBwYWdlcyBhcmUgcmVjbGFpbWVkIHRoZW4gdGhlIGNvZGUgcmV0cmllcy4gIENydWNpYWxseSwgYG5yX3JldHJpZXNgIGlzIG9ubHkgKmRlY3JlbWVudGVkKiBpbiBvbmUgc3BlY2lmaWMgYGlmYCBibG9jaywgb3RoZXJ3aXNlIHRoZSByZXRyeSBoYXBwZW5zIHdpdGhvdXQgZGVjcmVtZW50aW5nLiBBbmQgaWYgd2UgaGl0IHRoZSBPT00gY29uZGl0aW9uLCB0aGVuIHdlIHNldCBgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVNgIGFuZCByZXRyeSBhZ2Fpbi5cblxuTm93LCB0aGUgcGF0Y2ggcmV3cml0ZXMgdGhpcyB1c2luZyBhIGBmb3JgIGxvb3A6IGBmb3IgKDsgbnJfcmV0cmllcyBcdTAwM2U9IDA7IG5yX3JldHJpZXMtLSlgLiAgVGhlIGNvZGUgdXNlcyBgY29udGludWVgIGluc3RlYWQgb2YgYGdvdG9gLiAgSGFuZyBvbiBhIHNlY29uZC4uLiB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuICBUaGUgYGZvcmAgbG9vcCBkZWNyZW1lbnRzIGBucl9yZXRyaWVzYCAqb24gZXZlcnkgc2luZ2xlIGBjb250aW51ZWAqLiBJbiB0aGUgb3JpZ2luYWwgY29kZSwgYG5yX3JldHJpZXNgIHdhcyBvbmx5IGRlY3JlbWVudGVkICpvbmNlKiwgaW4gdGhlIGNvbmRpdGlvbiBgaWYgKG5yX3JldHJpZXMtLSkgZ290byByZXRyeTtgLlxuXG5TbywgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSByZXRyeSBsb2dpYyBzaWduaWZpY2FudGx5LiBUaGUgb3JpZ2luYWwgY29kZSBjb3VsZCBlZmZlY3RpdmVseSByZXRyeSBpbmRlZmluaXRlbHkgdW5kZXIgc29tZSBjb25kaXRpb25zIChzdWNoIGFzIHRoZSBgYmF0Y2ggXHUwMDNlIG5yX3BhZ2VzYCBjb25kaXRpb24pICp3aXRob3V0KiBleGhhdXN0aW5nIHRoZSByZXRyeSBjb3VudGVyLiBUaGUgbmV3IGxvb3AgZm9yY2VzIGEgZGVjcmVtZW50IG9mIGBucl9yZXRyaWVzYCBmb3IgKmV2ZXJ5KiByZXRyeSBjb25kaXRpb24uICBFc3NlbnRpYWxseSwgdGhlIG5ldyBjb2RlIHdpbGwgaW1wb3NlIGEgaGFyZCBsaW1pdCBvbiB0aGUgKnRvdGFsKiBudW1iZXIgb2YgcmV0cmllcywgd2hlcmVhcyB0aGUgb3JpZ2luYWwgaGFkIGEgbW9yZSBudWFuY2VkIHJldHJ5IGJlaGF2aW9yLlxuXG5ZZXMsIHRoaXMgbWVhbnMgdGhlIHBhdGNoICp3aWxsKiBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIGB0cnlfY2hhcmdlX21lbWNnYC4gVGhlIG51bWJlciBvZiBhdHRlbXB0cyB0byBhbGxvY2F0ZSBtZW1vcnkgdW5kZXIgbG9hZCB3aWxsIGJlIGRpZmZlcmVudCB0aGFuIGJlZm9yZS5cblxuSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24sIGhhbmRsaW5nIGNyaXRpY2FsIG1lbW9yeSBjZ3JvdXAgbG9naWMuIFRoaXMgY2hhbmdlICpjb3VsZCogbGVhZCB0byBlYXJsaWVyIE9PTSBzaXR1YXRpb25zLCB1bmV4cGVjdGVkIGJlaGF2aW9yIG9mIG1lbW9yeSBjZ3JvdXBzLCBvciBldmVuIHN1YnRsZSByZWdyZXNzaW9ucy4gSSdkIGJldHRlciBiZSBzdXJlIHRoZSBwYXRjaCBpcyBjb3JyZWN0LlxuXG5JJ20gY2hlY2tpbmcgdGhlIGd1aWRlbGluZXMgbm93IHRvIGJlIGNlcnRhaW4gaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy4gVGhlIGNoYW5nZSBpcyB0byBhIGNvcmUga2VybmVsIGxvZ2ljIGZ1bmN0aW9uLCBub3QgYSBkb2N1bWVudGF0aW9uLCBjb21tZW50LCBkZWNvcmF0aXZlLCBvciBkcml2ZXIgY29kZSBjaGFuZ2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gWWVzLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnVydGhlciB0ZXN0aW5nIGFuZCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTU1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM1OjUwLjU0MjI2MzQxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDQwMTI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfY2hhcmdlX21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjUwNT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI1OTQtXFxubW0vbWVtY29udHJvbC5jOjI1OTU6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI1OTYtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNzkwPXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNzk1LVxcbm1tL21lbWNvbnRyb2wuYzoyNzk2OlxcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0yNzk3LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMDg4PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzA5NS1cXG5tbS9tZW1jb250cm9sLmM6MzA5NjpcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzA5Ny1cXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxMTY9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxMjQtXFx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxcbm1tL21lbWNvbnRyb2wuYzo1MTI1OlxcdFxcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG5tbS9tZW1jb250cm9sLmMtNTEyNi1cXHRpZiAocmV0KSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTQ3MD1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU0NzctXFxubW0vbWVtY29udHJvbC5jOjU0Nzg6XFx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xcbm1tL21lbWNvbnRyb2wuYy01NDc5LVxcdFxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNTo1MC42MTI2NzE4MDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzEzNTk4MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IENoYXJnZSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHRyeV9jaGFyZ2VfbWVtY2dgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgem9vbSBpbiBvbiBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIERvZXMgdGhpcyBtb2RpZmljYXRpb24gcmVseSBvbiBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZyBvcHRpb25zPyBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzIGBDT05GSUdfTUVNQ0dgLCBhcyB0aGF0IHNlZW1zIGhpZ2hseSByZWxldmFudCB0byBtZW1vcnkgY29udHJvbCBncm91cHMuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgaXMgdGhlIGNhc2Ugb3IgaWYgb3RoZXIgcmVsYXRlZCBvcHRpb25zIGNvbWUgaW50byBwbGF5LiBUbyBpbnZlc3RpZ2F0ZSwgSSdsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGd1dCBzYXlzIGBtbS9LY29uZmlnYCBpcyB0aGUgbW9zdCBsaWtlbHkgc3BvdCwgYnV0IEknbGwgYWxzbyBnbGFuY2UgYXQgYGluaXQvS2NvbmZpZ2AganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZW5zdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyBjcnVjaWFsIHJlbGF0ZWQgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBtb2R1bGUuIFRpbWUgdG8gY2hlY2sgdGhvc2UgS2NvbmZpZyBmaWxlcyBhbmQgY29uZmlybSB0aGVzZSBzdXNwaWNpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzQ5LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzU6NTQuMzI2MjczNzE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTcwMjgyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDY2PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzUtXFxuaW5pdC9LY29uZmlnOjEwNzY6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzctXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4NC1cXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkxLVxcbmluaXQvS2NvbmZpZzoxMDkyOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDkzLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk4LVxcbmluaXQvS2NvbmZpZzoxMDk5OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM1OjU2LjY4MzMwODEyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3ODEyMzUxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBDYW5kaWRhdGUgQXNzZXNzbWVudDogdHJ5X2NoYXJnZV9tZW1jZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYE1FTUNHYCBjb25maWcgY2hhbmdlLCBhbmQgZmlyc3QgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYHRyeV9jaGFyZ2VfbWVtY2dgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIG1vZGlmaWVkLiBZZXMsIGl0IGlzLiBOb3csIGlzIHRoaXMgY2hhbmdlIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIGJlY2F1c2UgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy5cblxuVGhpcyBjaGFuZ2Ugc2VlbXMgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgZHVlIHRvIHRoZSBhbHRlcmVkIHJldHJ5IGxvZ2ljLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBvcmlnaW5hbCBjb2RlLi4uIG9rYXksIHNvIHRoZSBvbGQgY29kZSBkZWNyZW1lbnRlZCBgbnJfcmV0cmllc2Agb25seSBhdCB0aGUgYHJldHJ5YCBsYWJlbCwgYnV0IHRoZSBuZXcgY29kZSBkZWNyZW1lbnRzIGBucl9yZXRyaWVzYCB3aXRoaW4gdGhlIGBmb3JgIGxvb3Agb24gZXZlcnkgYGNvbnRpbnVlYC4gVGhhdCBtZWFucyBgbnJfcmV0cmllc2AgaXMgcmVkdWNlZCBmYXIgbW9yZSBvZnRlbi4gVGhpcyBjaGFuZ2UgY291bGQgdmVyeSB3ZWxsIGludHJvZHVjZSBwcmVtYXR1cmUgT09NIGNvbmRpdGlvbnMuIElzIHRoaXMgYSBidWcgZml4LCBvciBhIGJ1ZyAqaW50cm9kdWN0aW9uKj8gSXQgbG9va3MgbW9yZSBsaWtlIGFuIGluYWR2ZXJ0ZW50IGJlaGF2aW9yIGNoYW5nZS4gRWl0aGVyIHdheSwgdGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4gSXQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBhbmQgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIHRoZSBmb2N1cyBoZXJlIGlzIG9uIGB0cnlfY2hhcmdlX21lbWNnYC4gSG9sZCBvbiwgdGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IGlubGluZWQgYmVjYXVzZSBJIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGlzIGlzIHN0YXRpYzogYHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyguLi4pYC4gWWVwLCBpdCdzIHN0YXRpYy4gR2l2ZW4gaXRzIHNpemUsIGl0J3MgdW5saWtlbHkgdG8gYmUgaW5saW5lZCwgYnV0IHRvIGJlIHN1cmUsIGxldCdzIHRyYWNlIGl0cyBjYWxsZXJzLiBMZXQncyBzZWUuLi4gaXQncyBjYWxsZWQgYnkgYHRyeV9jaGFyZ2VgIChzdGF0aWMgaW5saW5lKSwgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCAoc3RhdGljKSwgYGNoYXJnZV9tZW1jZ2AgKHN0YXRpYykgYW5kIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgKGEgYm9vbCwgbm9uLXN0YXRpYykuIExldCdzIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaXMgcG90ZW50aWFsbHkgaW5saW5lZCBhcyBgc3RhdGljIGlubGluZWAgY2FsbHMgYW5kIHRoZSBgc3RhdGljYCBmdW5jdGlvbiBjYWxscyBhcmUgbm90IGlkZWFsIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODEwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM2OjA0LjQ2NDU0NjIzM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTM5NTIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NTQ0NT12b2lkIG1lbV9jZ3JvdXBfc2tfaW5oZXJpdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NDY5LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1NDcwOmJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxubW0vbWVtY29udHJvbC5jLTU0NzEtXFx0XFx0XFx0ICBnZnBfdCBnZnBfbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6MDQuNTQ5OTQ3NjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTk0MDg5NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gQ2FsbHMgdG8gYGNoYXJnZV9tZW1jZ2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHBpbnBvaW50IHRoZSBjYWxsZXJzIG9mIGBjaGFyZ2VfbWVtY2dgLiBUaGF0J3Mgd2hlcmUgd2UgbmVlZCB0byBzdGFydC4gV2UgYXJlIG1vc3QgbGlrZWx5IGRlYWxpbmcgd2l0aCBtZW1vcnkgYWNjb3VudGluZyBoZXJlLCBsaWtlbHkgYXQgdGhlIG1lbW9yeSBjb250cm9sbGVyIChtZW1jZykgbGV2ZWwuIFRoZSBgY2hhcmdlX21lbWNnYCBmdW5jdGlvbiBpdHNlbGYgaXMgcHJldHR5IGZvdW5kYXRpb25hbCwgc28gaXQncyBwcm9iYWJseSB0b3VjaGVkIGJ5IGEgbG90IG9mIGRpZmZlcmVudCBzdWJzeXN0ZW1zLiBUaGlua2luZyB0aHJvdWdoIHRoaXMsIG15IGFwcHJvYWNoIHdvdWxkIGJlIHRvIGZpcnN0IGxldmVyYWdlIGBnaXQgZ3JlcGAgb3IgYSBzaW1pbGFyIGNvZGUgc2VhcmNoIHRvb2wsIGFzIHRoaXMgaXMgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgZm9yIGxvb2tpbmcgYXQgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzLiBJJ2QgYmVnaW4gd2l0aCBhIHNpbXBsZSBzZWFyY2ggZm9yIFwiY2hhcmdlX21lbWNnXCIgaW4gdGhlIGtlcm5lbCBzb3VyY2UgY29kZS5cblxuR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgaW5kaXJlY3QgY2FsbHMgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycywgSSBhbHNvIG5lZWQgdG8gYmUgcHJlcGFyZWQgZm9yIHRoZSBmYWN0IHRoYXQgYSBzdHJhaWdodGZvcndhcmQgZ3JlcCB3b24ndCB0ZWxsIHRoZSB3aG9sZSBzdG9yeS4gVGhlIG5leHQgc3RlcCBpcyB0byB1c2Ugc29tZSBraW5kIG9mIHN0YXRpYyBhbmFseXNpcywgb3IgZXZlbiBydW4gc29tZSB0ZXN0IHRvIHNlZSB0aGUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkLiBJIHdpbGwgZGVmaW5pdGVseSBiZSBsb29raW5nIGF0IGEgY2FsbCBncmFwaCBnZW5lcmF0ZWQgZnJvbSB0aGUgY29kZSwgaWYgYXZhaWxhYmxlLiBUaGF0IHdpbGwgaGVscCBtZSBuYXZpZ2F0ZSBwb3RlbnRpYWwgaW5kaXJlY3QgY2FsbHMsIHdoaWNoIGFyZSB2ZXJ5IGNvbW1vbi4gQW5vdGhlciBpbXBvcnRhbnQgYXZlbnVlIGlzIHRvIGxvb2sgYXQgY3Jvc3MtcmVmZXJlbmNlcy4gVGhhdCB3b3VsZCBpbGx1bWluYXRlIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygd2hvIGNhbGxzIGl0LiBJIG5lZWQgdG8gYmUgcHJlcGFyZWQgZm9yIGluZGlyZWN0IGNhbGxzLCBwb3NzaWJseSB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIG9yLCBsZXNzIGxpa2VseSwgbWFjcm9zIHRoYXQgZXhwYW5kIGludG8gYSBjYWxsLlxuXG5PbmNlIEkgaGF2ZSBhIGxpc3Qgb2YgcG90ZW50aWFsIGNhbGwgc2l0ZXMsIEknZCB0aGVuIHN0YXJ0IGZpbHRlcmluZy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMgd291bGQgYmUgdGhlIGhpZ2hlc3QgcHJvYmFiaWxpdHkgY2FuZGlkYXRlcy4gUGFnZXMsIHNsYWJzLCBrbWVtLCBhbmQgc3dhcCB3aWxsIGJlIGhpZ2ggb24gdGhlIGxpc3QuIEFsc28sIEkgd291bGQgY29uc2lkZXIgdGhlIGtlcm5lbCdzIG1lbW9yeSByZWNsYWltIGxvZ2ljLiBUaGVzZSBhcmUgYXJlYXMgd2hlcmUgbWVtb3J5IGNvbnN1bXB0aW9uIGlzIGV4cGxpY2l0bHkgdHJhY2tlZCwgYW5kIHRoYXQgZnVuY3Rpb24gaXMgYWxtb3N0IGNlcnRhaW5seSBpbnZvbHZlZC5cblxuSSBhbnRpY2lwYXRlIHRoYXQgdGhlcmUgd2lsbCBiZSBxdWl0ZSBhIGZldyBoaXRzLiBUaGUgcmVhbCBjaGFsbGVuZ2Ugd2lsbCBiZSB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgZWFjaCBjYWxsIOKAkyB3aGF0J3MgZHJpdmluZyB0aGUgbWVtb3J5IGFjY291bnRpbmcsIHdoYXQgdGhlIGNvbnRleHQgaXMuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgYXMgaW50ZW5kZWQgYW5kIGlmIHRoZXJlIG1heSBiZSBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGlzc3Vlcy4gVGhlIHVsdGltYXRlIGdvYWwgaXMgdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGNoYXJnZXMgYXJlIGJlaW5nIGhhbmRsZWQgaW4gdGhpcyBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NDIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNjoxMC4xNDQwNDExMzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0Njk3MTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYXJnZV9tZW1jZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTI1MDU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTk0LVxcbm1tL21lbWNvbnRyb2wuYzoyNTk1OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbm1tL21lbWNvbnRyb2wuYy0yNTk2LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjc5MD1zdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjc5NS1cXG5tbS9tZW1jb250cm9sLmM6Mjc5NjpcXHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMjc5Ny19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzA4OD1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMwOTUtXFxubW0vbWVtY29udHJvbC5jOjMwOTY6XFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTMwOTctXFx0aWYgKHJldClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTAxPXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTE1LVxcbm1tL21lbWNvbnRyb2wuYzo1MTE2OnN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLmMtNTExNy1cXHRcXHRcXHRnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTEyNC1cXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXFxubW0vbWVtY29udHJvbC5jOjUxMjU6XFx0XFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbm1tL21lbWNvbnRyb2wuYy01MTI2LVxcdGlmIChyZXQpIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTM2PWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE0MS1cXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xcbm1tL21lbWNvbnRyb2wuYzo1MTQyOlxcdHJldCA9IGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCk7XFxubW0vbWVtY29udHJvbC5jLTUxNDMtXFx0Y3NzX3B1dChcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcyk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE2MD1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE3My1cXG5tbS9tZW1jb250cm9sLmM6NTE3NDpcXHRpZiAoY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKSlcXG5tbS9tZW1jb250cm9sLmMtNTE3NS1cXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxOTQ9aW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjA4LVxcbm1tL21lbWNvbnRyb2wuYzo1MjA5OlxcdHJldCA9IGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCk7XFxubW0vbWVtY29udHJvbC5jLTUyMTAtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTQ3MD1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU0NzctXFxubW0vbWVtY29udHJvbC5jOjU0Nzg6XFx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xcbm1tL21lbWNvbnRyb2wuYy01NDc5LVxcdFxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNjoxMC4yMDg3NDQ2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzc0ODMyMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIENoYXJnZSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGZ1bmN0aW9ucy4gSSBzZWUgYSBwYXR0ZXJuIGhlcmU6IGBfX21lbV9jZ3JvdXBfY2hhcmdlYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCwgYW5kIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgYXJlIGFsbCBkZWZpbmVkIGFzIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBUaGF0IHRlbGxzIG1lIHRoZXkncmUgZGVzaWduZWQgdG8gYmUgY2FsbGVkIGZyb20gKm91dHNpZGUqIHRoZSBtb2R1bGUgd2hlcmUgdGhleSdyZSBkZWZpbmVkLCBsaWtlbHkgYXMgcGFydCBvZiBhIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgaW5mcmFzdHJ1Y3R1cmUuIE1ha2VzIHNlbnNlLlxuXG5CdXQgdGhlbiB0aGVyZSdzIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AuIEFoLCAqdGhhdCogb25lIGlzIHN0YXRpYy4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBJZiBpdCdzIHN0YXRpYywgaXQncyBzY29wZWQgdG8gYSBzcGVjaWZpYyBmaWxlIG9yIG1vZHVsZS4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCdzIHN0YXRpYyBhbmQgd2hlcmUgaXQncyBiZWluZyB1c2VkLiBMZXQncyBkaWcgaW50byB0aGUgY2FsbCBzaXRlcyBvZiBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiBpdHMgdXNlLCB3aGljaCB3aWxsIGdpdmUgbWUgaW5zaWdodCBpbnRvIHRoZSBpbnRlcm5hbCB3b3JraW5ncyBvZiB0aGUgbWVtb3J5IGNncm91cCBzdWJzeXN0ZW0sIGFuZCBpdCdsbCBoZWxwIG1lIHNlZSB3aGF0IHRoZSBmdW5jdGlvbiBpcyBzcGVjaWZpY2FsbHkgcmVzcG9uc2libGUgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzIyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM2OjEzLjk4MzU3OTU3N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NDEzODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MzA2NT1zdGF0aWMgdm9pZCBvYmpfY2dyb3VwX3VuY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMDgwLS8qXFxubW0vbWVtY29udHJvbC5jOjMwODE6ICogb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXM6IGNoYXJnZSBhIG51bWJlciBvZiBrZXJuZWwgcGFnZXMgdG8gYSBvYmpjZ1xcbm1tL21lbWNvbnRyb2wuYy0zMDgyLSAqIEBvYmpjZzogb2JqZWN0IGNncm91cCB0byBjaGFyZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMDg3LSAqL1xcbm1tL21lbWNvbnRyb2wuYzozMDg4OnN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxubW0vbWVtY29udHJvbC5jLTMwODktXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTMxMzM9aW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzEzOS1cXHRpZiAob2JqY2cgXFx1MDAyNlxcdTAwMjYgIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpIHtcXG5tbS9tZW1jb250cm9sLmM6MzE0MDpcXHRcXHRyZXQgPSBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhvYmpjZywgZ2ZwLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG5tbS9tZW1jb250cm9sLmMtMzE0MS1cXHRcXHRpZiAoIXJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTM0NzA9c3RhdGljIGludCBfX29ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM0NzYtXFx0Y2hhcmdlX3NpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xcbm1tL21lbWNvbnRyb2wuYzozNDc3OlxcdHJldCA9IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKG9iamNnLCBnZnAsIGNoYXJnZV9zaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbm1tL21lbWNvbnRyb2wuYy0zNDc4LVxcdGlmICghcmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNjoxNC4wODg5OTg2NjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0MzkzMDA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQWNjb3VudGluZyBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLiBJdCdzIGEga2V5IGZ1bmN0aW9uLCBidXQgaXQncyBub3QgYSBzdGF0aWMgZnVuY3Rpb24gc28gdGhlcmUncyBub3QgbXVjaCBJIGNhbiBsZWFybiBhYm91dCBpdCB3aXRoIHN0YXRpYyBhbmFseXNpcy4gVGhhdCdzIGEgYml0IG9mIGEgYnVtbWVyLiBUaGVuIHRoZXJlJ3MgYF9fb2JqX2Nncm91cF9jaGFyZ2VgIHdoaWNoICppcyogc3RhdGljLiBIbW0sIHRoaXMgbWVhbnMgSSBjYW4gdXNlIHN0YW5kYXJkIHRvb2xzIHRvIHRyYWNlIHdoaWNoIGZ1bmN0aW9uIGNhbGxzIGFyZSBpbnZvbHZlZC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbiB0byBzZWUgd2hlcmUgbWVtb3J5IGNoYXJnZXMgYXJlIGFjdHVhbGx5IGhhcHBlbmluZywgaW4gcmVsYXRpb24gdG8gY2dyb3Vwcy4gVGhpcyBzaG91bGQgaGVscCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBmbG93IGFuZCBwaW5wb2ludCB3aGVyZSBzcGVjaWZpYyBtZW1vcnkgYWNjb3VudGluZyBpcyBiZWluZyBwZXJmb3JtZWQuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6MTcuNzMyOTMyNTE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjU2NzM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX29ial9jZ3JvdXBfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MzQ2MT1zdGF0aWMgdm9pZCByZWZpbGxfb2JqX3N0b2NrKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNDY5LVxcbm1tL21lbWNvbnRyb2wuYzozNDcwOnN0YXRpYyBpbnQgX19vYmpfY2dyb3VwX2NoYXJnZShzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcXG5tbS9tZW1jb250cm9sLmMtMzQ3MS1cXHRcXHRcXHQgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCAqcmVtYWluZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTM0ODQ9aW50IG9ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTE0LVxcdCAqL1xcbm1tL21lbWNvbnRyb2wuYzozNTE1OlxcdHJldCA9IF9fb2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIGdmcCwgc2l6ZSwgXFx1MDAyNnJlbWFpbmRlcik7XFxubW0vbWVtY29udHJvbC5jLTM1MTYtXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcmVtYWluZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTM1MzY9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNjA1LVxcdFxcdFxcdHVubG9ja19zdG9jayhzdG9jayk7XFxubW0vbWVtY29udHJvbC5jOjM2MDY6XFx0XFx0XFx0aWYgKF9fb2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIGZsYWdzLCBvYmpfc2l6ZSwgXFx1MDAyNnJlbWFpbmRlcikpXFxubW0vbWVtY29udHJvbC5jLTM2MDctXFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNjoxNy44MDk1MDQ4MDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIyNTE5NTg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJZGVudGlmeWluZyBLZXkgTWVtb3J5IEFjY291bnRpbmcgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgbWVtb3J5IGNncm91cCBjaGFyZ2luZyBmdW5jdGlvbnMsIGFuZCB0aGUgb2JqZWN0aXZlIGlzIHRvIGlkZW50aWZ5IHJlbGV2YW50IGVudHJ5IHBvaW50cy4gSSBzZWUgdGhhdCBgb2JqX2Nncm91cF9jaGFyZ2VgIGFuZCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AgYXJlIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyBzdWdnZXN0cyB0aGVzZSBhcyBwcmltYXJ5IGNhbmRpZGF0ZXM6XG5cbiogICBgX19tZW1fY2dyb3VwX2NoYXJnZWBcbiogICBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmBcbiogICBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYFxuKiAgIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWBcbiogICBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYFxuKiAgIGBvYmpfY2dyb3VwX2NoYXJnZWBcbiogICBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2BcblxuSG93ZXZlciwgdGhlIHJlYWwgYWN0aW9uIHNlZW1zIHRvIGJlIGFyb3VuZCBgdHJ5X2NoYXJnZV9tZW1jZ2AuIFRoZSBwcmV2aW91cyBtb2RpZmljYXRpb24gd2FzIHRvIHRoaXMgZnVuY3Rpb24uIEl0J3Mgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IGEgcmVkIGZsYWcgaW4gdGhpcyBjb250ZXh0LCBidXQgaXQncyBhICpsYXJnZSogc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGNvdWxkIG1lYW4gaXQncyAqbm90KiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgYW5kIHRoZXJlZm9yZSBzdGlsbCBhIHJlbGV2YW50IGVudHJ5IHBvaW50LiBHaXZlbiB0aGUgaW5zdHJ1Y3Rpb24gdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLCBpdCdzIHdvcnRoIGRvdWJsZS1jaGVja2luZyBpZiBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXMgYWN0dWFsbHkgaW5saW5lZC4gSXQncyBiZXN0IHRvIGJlIHNhZmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzY3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM2OjI0LjAzNDcwMzQ1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE1NDIwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X2NoYXJnZV9tZW1jZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTI1MDU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTk0LVxcbm1tL21lbWNvbnRyb2wuYzoyNTk1OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbm1tL21lbWNvbnRyb2wuYy0yNTk2LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjc5MD1zdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjc5NS1cXG5tbS9tZW1jb250cm9sLmM6Mjc5NjpcXHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMjc5Ny19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzA4OD1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMwOTUtXFxubW0vbWVtY29udHJvbC5jOjMwOTY6XFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTMwOTctXFx0aWYgKHJldClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTE2PXN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTI0LVxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG5tbS9tZW1jb250cm9sLmM6NTEyNTpcXHRcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTUxMjYtXFx0aWYgKHJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU0NzA9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NDc3LVxcbm1tL21lbWNvbnRyb2wuYzo1NDc4OlxcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcXG5tbS9tZW1jb250cm9sLmMtNTQ3OS1cXHRcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6MjQuMTA2MjUwMTI0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNDgwODc2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTWVtb3J5IENncm91cCBDaGFyZ2luZyBMb2dpYyBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGludm9sdmVkIGxpc3Rpbmcgb3V0IHRoZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cCBjaGFyZ2luZzogYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYCwgYG9ial9jZ3JvdXBfY2hhcmdlYCwgYW5kIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYC4gSSB3YXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gYF9fbWVtX2Nncm91cF9jaGFyZ2VgIGFzIGEgY2VudHJhbCBwb2ludCBvZiBpbnRlcmVzdCwgYXMgZXhwZWN0ZWQuIEkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgTUVNQ0dgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGF0IHBsYXkgaGVyZS5cblxuTm93LCBsZXQncyByZXZpZXcgdGhlIHBhdGNoIGl0c2VsZi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyByZXBsYWNpbmcgYSBgZ290byByZXRyeWAgbG9vcCB3aXRoIGEgYGZvcmAgbG9vcCB0aGF0IHVzZXMgYSBgbnJfcmV0cmllc2AgY291bnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbjsgaXQncyBub3QgbWVyZWx5IHN5bnRhY3RpYy4gVGhlIGxvb3AncyBvcmlnaW5hbCByZXRyeSBjb25kaXRpb25zIGludm9sdmVkIHNjZW5hcmlvcyBsaWtlIGBiYXRjaCBcdTAwM2UgbnJfcGFnZXNgLCBgbWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpIFx1MDAzZT0gbnJfcGFnZXNgLCBgIWRyYWluZWRgLCBvciBgbnJfcmVjbGFpbWVkIFx1MDAyNlx1MDAyNiBucl9wYWdlcyBcdTAwM2M9ICgxIFx1MDAzY1x1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUilgLiBDcml0aWNhbGx5LCBpbiB0aGUgb3JpZ2luYWwgY29kZSwgYG5yX3JldHJpZXNgIHdhcyBvbmx5IGRlY3JlbWVudGVkIGF0IHRoZSAqZW5kKiBvZiB0aGUgbG9vcCBpZiBhIHJldHJ5IHdhcyBhbGxvd2VkLiBOb3csIHdlIGRlY3JlbWVudCBgbnJfcmV0cmllc2Agb24gKmV2ZXJ5KiBpdGVyYXRpb24gb2YgdGhlIGBmb3JgIGxvb3AuXG5cblRoZSBpbXBsaWNhdGlvbiBpcyBzaWduaWZpY2FudC4gVGhpcyBhbHRlcmF0aW9uIGluIHJldHJ5IGJlaGF2aW9yIHBvdGVudGlhbGx5IG1vZGlmaWVzIHRoZSB0aW1pbmcgYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbWVtb3J5IGNncm91cCBjaGFyZ2VzIGFyZSBhcHBsaWVkIGFuZCwgaW1wb3J0YW50bHksIHdoZW4gT09NIHNpdHVhdGlvbnMgYXJlIHRyaWdnZXJlZC4gVGhlIGNoYW5nZSBkaXJlY3RseSBpbmZsdWVuY2VzIHJlY2xhaW0gYmVoYXZpb3IsIG1ha2luZyB0aGlzIGNoYW5nZSBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgZWRnZSBjYXNlcyBhbmQgdW5leHBlY3RlZCBiZWhhdmlvcnMuIEdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGVhcmxpZXIgT09NcyBvciBtb2RpZmllZCByZWNsYWltIGJlaGF2aW9yLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkzNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNjozMi4yNTQzNDIxN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5ODQ5NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1fY2dyb3VwX2NoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTUxMTY9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxMzUtXFxubW0vbWVtY29udHJvbC5jOjUxMzY6aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG5tbS9tZW1jb250cm9sLmMtNTEzNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM2OjMyLjMxNjMzMzgxOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIxNjI2OTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqQ2hlY2tpbmcgYSBWYXJpYWJsZSBEZWZpbml0aW9uKipcblxuWWVzLCB0aGF0IG9ic2VydmF0aW9uIGlzIGNvcnJlY3QuIE15IGN1cnJlbnQgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCB2YXJpYWJsZSBpcyBwcm9wZXJseSBkZWZpbmVkIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dC4gSXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYW5hbHlzaXMsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2UgYmVmb3JlIEkgY2FuIHByb2NlZWQgd2l0aCBhbnkgcmVsYXRlZCBjYWxjdWxhdGlvbnMgb3IgYXNzZXNzbWVudHMuIFRpbWUgdG8gY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTkyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6MzYuMjM3OTYzNjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NzI1MjU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NTEzNj1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxNDgtLyoqXFxubW0vbWVtY29udHJvbC5jOjUxNDk6ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xcbm1tL21lbWNvbnRyb2wuYy01MTUwLSAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxNTktICovXFxubW0vbWVtY29udHJvbC5jOjUxNjA6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbm1tL21lbWNvbnRyb2wuYy01MTYxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6MzYuNjI1MjI0ODY5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3Njg0ODg3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkNoZWNraW5nIGEgS2V5IEtlcm5lbCBQYXJhbWV0ZXIqKlxuXG5BbHJpZ2h0LCB0aGF0IGNvbmZpcm1hdGlvbiBpcyBhIGdpdmVuLCB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2suIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSBzb21ldGhpbmcgY3J1Y2lhbDogSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCBjb250ZXh0LiBJdCdzIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIHdpdGhvdXQgaXQsIGEgY2VydGFpbiBsaW5lIG9mIGludmVzdGlnYXRpb24gaXMgZ29pbmcgdG8gYmUgYSBjb21wbGV0ZSBub24tc3RhcnRlci4gU28sIHRpbWUgdG8gY2hlY2sgdGhhdCBkZWZpbml0aW9uLCBhbmQgdGhlbiB3ZSdsbCBjb250aW51ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNjo0MC4zOTM3MTgwNDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1ODY1NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTUxNjA9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxODItLyoqXFxubW0vbWVtY29udHJvbC5jOjUxODM6ICogbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvIC0gQ2hhcmdlIGEgbmV3bHkgYWxsb2NhdGVkIGZvbGlvIGZvciBzd2FwaW4uXFxubW0vbWVtY29udHJvbC5jLTUxODQtICogQGZvbGlvOiB0aGUgZm9saW8gdG8gY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE5My0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTE5NDppbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbm1tL21lbWNvbnRyb2wuYy01MTk1LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM2OjQwLjQ0OTU5MzQxNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzU1NzY4Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqQ29uZmlybWF0aW9uIGFuZCBJbml0aWFsIEZvY3VzKipcblxuWWVzLCB0aGF0J3MgZGVmaW5pdGVseSB0aGUgY2FzZS4gQWxyaWdodCwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgbWVtX2Nncm91cF9za19jaGFyZ2VgIGZ1bmN0aW9uYWxpdHkuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyB0byB1bmRlcnN0YW5kIHRoaXMgZnVsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzQ5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6NDQuODA1MzY0OTQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUxMzUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3NrX2NoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTU0NDU9dm9pZCBtZW1fY2dyb3VwX3NrX2luaGVyaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQ2MS0vKipcXG5tbS9tZW1jb250cm9sLmM6NTQ2MjogKiBtZW1fY2dyb3VwX3NrX2NoYXJnZSAtIGNoYXJnZSBzb2NrZXQgbWVtb3J5XFxubW0vbWVtY29udHJvbC5jLTU0NjMtICogQHNrOiBzb2NrZXQgaW4gbWVtY2cgdG8gY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTQ2OS0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTQ3MDpib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbm1tL21lbWNvbnRyb2wuYy01NDcxLVxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwX21hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM2OjQ0Ljg0OTg4MzE2MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY3NjY4MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBNZW1vcnkgQWNjb3VudGluZyBDaGVjayoqXG5cblJpZ2h0LCB0aGF0J3Mgc2V0dGxlZCB0aGVuLCB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvbmZpcm1lZC4gTm93LCBsZXQncyBkaXZlIGRlZXBlciBhbmQgaW52ZXN0aWdhdGUgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGUgY29yZSBtZW1vcnkgY2dyb3VwIGtlcm5lbCBtZW1vcnkgY2hhcmdlIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYC4gVGhpcyBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBhY2NvdW50aW5nIGRlY2lzaW9ucyBhcmUgbWFkZSwgc28gYSBjbG9zZSBleGFtaW5hdGlvbiBoZXJlIGlzIHdhcnJhbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHNpdHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNjo0OC41MTc1NTQwMzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDc0MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTMxMjA9c3RhdGljIHZvaWQgcGFnZV9zZXRfb2JqY2coc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTI1LS8qKlxcbm1tL21lbWNvbnRyb2wuYzozMTI2OiAqIF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZTogY2hhcmdlIGEga21lbSBwYWdlIHRvIHRoZSBjdXJyZW50IG1lbW9yeSBjZ3JvdXBcXG5tbS9tZW1jb250cm9sLmMtMzEyNy0gKiBAcGFnZTogcGFnZSB0byBjaGFyZ2VcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTMyLSAqL1xcbm1tL21lbWNvbnRyb2wuYzozMTMzOmludCBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCwgaW50IG9yZGVyKVxcbm1tL21lbWNvbnRyb2wuYy0zMTM0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6NDguNTYyNjMyNjRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwNTkxMjYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDb25maXJtaW5nIGFuZCBEaXJlY3RpbmcgRm9jdXMqKlxuXG5ZZXMsIHRoYXQncyBjb3JyZWN0LiBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrLiBOb3csIHRoZSBjcml0aWNhbCBwaWVjZSBpbiB0aGlzIHB1enpsZSwgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBvYmpfY2dyb3VwX2NoYXJnZWAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbWVjaGFuaXNtIEknbSBpbnRlcmVzdGVkIGluIGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDIyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6NTEuODY4NTQ4NDYxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM1NTU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmpfY2dyb3VwX2NoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTMwNjU9c3RhdGljIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzA4MC0vKlxcbm1tL21lbWNvbnRyb2wuYzozMDgxOiAqIG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzOiBjaGFyZ2UgYSBudW1iZXIgb2Yga2VybmVsIHBhZ2VzIHRvIGEgb2JqY2dcXG5tbS9tZW1jb250cm9sLmMtMzA4Mi0gKiBAb2JqY2c6IG9iamVjdCBjZ3JvdXAgdG8gY2hhcmdlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzA4Ny0gKi9cXG5tbS9tZW1jb250cm9sLmM6MzA4ODpzdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbm1tL21lbWNvbnRyb2wuYy0zMDg5LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMTMzPWludCBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCwgaW50IG9yZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxMzktXFx0aWYgKG9iamNnIFxcdTAwMjZcXHUwMDI2ICFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKSB7XFxubW0vbWVtY29udHJvbC5jOjMxNDA6XFx0XFx0cmV0ID0gb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMob2JqY2csIGdmcCwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxubW0vbWVtY29udHJvbC5jLTMxNDEtXFx0XFx0aWYgKCFyZXQpIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zNDYxPXN0YXRpYyB2b2lkIHJlZmlsbF9vYmpfc3RvY2soc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM0NjktXFxubW0vbWVtY29udHJvbC5jOjM0NzA6c3RhdGljIGludCBfX29ial9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbm1tL21lbWNvbnRyb2wuYy0zNDcxLVxcdFxcdFxcdCAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90ICpyZW1haW5kZXIpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzQ3Ni1cXHRjaGFyZ2Vfc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XFxubW0vbWVtY29udHJvbC5jOjM0Nzc6XFx0cmV0ID0gb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMob2JqY2csIGdmcCwgY2hhcmdlX3NpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxubW0vbWVtY29udHJvbC5jLTM0NzgtXFx0aWYgKCFyZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzQ4My1cXG5tbS9tZW1jb250cm9sLmM6MzQ4NDppbnQgb2JqX2Nncm91cF9jaGFyZ2Uoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsIHNpemVfdCBzaXplKVxcbm1tL21lbWNvbnRyb2wuYy0zNDg1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTE0LVxcdCAqL1xcbm1tL21lbWNvbnRyb2wuYzozNTE1OlxcdHJldCA9IF9fb2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIGdmcCwgc2l6ZSwgXFx1MDAyNnJlbWFpbmRlcik7XFxubW0vbWVtY29udHJvbC5jLTM1MTYtXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcmVtYWluZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTM1MzY9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNjA1LVxcdFxcdFxcdHVubG9ja19zdG9jayhzdG9jayk7XFxubW0vbWVtY29udHJvbC5jOjM2MDY6XFx0XFx0XFx0aWYgKF9fb2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIGZsYWdzLCBvYmpfc2l6ZSwgXFx1MDAyNnJlbWFpbmRlcikpXFxubW0vbWVtY29udHJvbC5jLTM2MDctXFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU4MzY9Ym9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTg2OS0vKipcXG5tbS9tZW1jb250cm9sLmM6NTg3MDogKiBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcCAtIGNoYXJnZSBjb21wcmVzc2lvbiBiYWNrZW5kIG1lbW9yeVxcbm1tL21lbWNvbnRyb2wuYy01ODcxLSAqIEBvYmpjZzogdGhlIG9iamVjdCBjZ3JvdXBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODc2LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1ODc3OnZvaWQgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSlcXG5tbS9tZW1jb250cm9sLmMtNTg3OC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTg4OS1cXHQvKiBQRl9NRU1BTExPQyBjb250ZXh0LCBjaGFyZ2luZyBtdXN0IHN1Y2NlZWQgKi9cXG5tbS9tZW1jb250cm9sLmM6NTg5MDpcXHRpZiAob2JqX2Nncm91cF9jaGFyZ2Uob2JqY2csIEdGUF9LRVJORUwsIHNpemUpKVxcbm1tL21lbWNvbnRyb2wuYy01ODkxLVxcdFxcdFZNX1dBUk5fT05fT05DRSgxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6MzY6NTEuOTE5OTExNjNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0Nzc1ODQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBBbGxvY2F0aW9uIEhvb2sqKlxuXG5ZZXAsIHRoYXQncyBpdCwgdGhhdCdzIHRoZSBjb25maXJtYXRpb24gSSBuZWVkZWQuIE5vdywgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbnRvIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYC4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGludGVyZXN0aW5nIHN0dWZmIGhhcHBlbnMsIHJpZ2h0PyBJJ20gYmV0dGluZyB0aGF0J3Mgd2hlcmUgSSBjYW4gZmluZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBhbGxvY2F0aW9uIGhvb2ssIEkgc3VzcGVjdCB0aGF0IGlzIHdoZXJlIHRoZSBpbmZvcm1hdGlvbiBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1OTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMjozNjo1NS41Njc2NzM1OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1Mzc4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTM1Mjc9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTM1LVxcbm1tL21lbWNvbnRyb2wuYzozNTM2OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxubW0vbWVtY29udHJvbC5jLTM1MzctXFx0XFx0XFx0XFx0ICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IHNsYWJfYWxsb2NfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIyOjM2OjU1LjYxNjIxNzY2OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTE3NDEwMTQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgU2VsZWN0aW9uIGZvciBNZW1vcnkgQ2dyb3VwIENoYXJnZSBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBhbmFseXppbmcgdGhlIGNoYW5nZXMgaW4gdGhlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMsIHNwZWNpZmljYWxseSBhcm91bmQgYHRyeV9jaGFyZ2VfbWVtY2dgLiBUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHJldHJpZXMgd29yaywgd2hpY2ggaGFzIGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zIG9uIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjb3VsZCBhZmZlY3QgT09NIGJlaGF2aW9yIG9yIHJlY2xhaW0uIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNpZ25pZmljYW50IGNoYW5nZS4gSXQncyB0YXJnZXRpbmcgYE1FTUNHYCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIEkgbmVlZCB0byBwaWNrIGFwcHJvcHJpYXRlIGZvY3VzIHN5bWJvbHMuIEluaXRpYWxseSwgbXkgbGlzdCBsb29rZWQgbGlrZSB0aGlzOiBgX19tZW1fY2dyb3VwX2NoYXJnZWAsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAsIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCBgb2JqX2Nncm91cF9jaGFyZ2VgLCBhbmQgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLlxuXG5Ib3dldmVyLCB0aGUgaW5zdHJ1Y3Rpb25zIHN0YXRlLCBJIHNob3VsZCBcIkF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnNcIiBhbmQgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIGFuZCBgX19tZW1fY2dyb3VwX2NoYXJnZWAgYXJlIGRlZmluaXRlbHkgaG90IHBhdGhzLCB0aGUgZm9ybWVyIG9uIHNsYWIgYWxsb2NhdGlvbnMgYW5kIHRoZSBsYXR0ZXIgb24gcGFnZSBmYXVsdHMuIFNvLCB0aG9zZSBhcmUgb3V0LiBXaGlsZSBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXRzZWxmIGlzIHRoZSBvbmUgYmVpbmcgbW9kaWZpZWQsIGl0J3Mgc3RhdGljLCBzbyBpdCdzIG5vdCBhIGdvb2QgY2hvaWNlLlxuXG5NeSB0aGlua2luZyBpcyB0byBhaW0gZm9yIGEgbGVzcyBob3QgYnV0IHJlcHJlc2VudGF0aXZlIGxpc3QuIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBmb3IgaHVnZSBwYWdlcywgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AgZm9yIHN3YXAtaW4gb3BlcmF0aW9ucywgYW5kIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgZm9yIHNvY2tldCBtZW1vcnkgY2hhcmdpbmcgYXJlIGFsbCBnb29kIGNhbmRpZGF0ZXMuIEFsdGhvdWdoIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgY291bGQgYmUgcmVsYXRpdmVseSBob3QsIHRoZSBjb3JlIGxvZ2ljIGlzIG5vdCB0aGVyZSwgc28gSSdsbCBpbmNsdWRlIGl0LlxuXG5UaGVuLCBJIHJlbWVtYmVyIGBfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2VgLCB3aGljaCBoYW5kbGVzIGttZW0gcGFnZXMsIGFuZCB3aGlsZSBub3Qgc3VwZXItaG90LCBpdCdzIGFuIGVudHJ5IHBvaW50LiBJdCBzZWVtcyBsaWtlIHRoaXMgc2F0aXNmaWVzIHRoZSBcIm5vbi1ob3QgcGF0aFwiIHJlcXVpcmVtZW50LlxuXG5TbywgSSdtIGdvaW5nIHdpdGg6XG5cbiogICBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmBcbiogICBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYFxuKiAgIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWBcbiogICBgX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlYFxuXG5BbmQgdGhlIGNvbmZpZyBpcyBzaW1wbHkgYE1FTUNHYC4gSSB0aGluayB0aGlzIGlzIGEgZ29vZCwgc3BlY2lmaWMgbGlzdCB0aGF0IGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIGNvcmUgY2hhbmdlcyBhbmQgYXZvaWRzIG92ZXJseSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTAxLCJPdXRwdXRUb2tlbnMiOjE1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjI6Mzc6MTAuNzkwMzIxNTkzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU2MTcyNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiLFxuICAgIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCIsXG4gICAgXCJtZW1fY2dyb3VwX3NrX2NoYXJnZVwiLFxuICAgIFwiX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGNncm91cCBjaGFyZ2luZyBsb2dpYyBpbiBgdHJ5X2NoYXJnZV9tZW1jZ2AuIEl0IHJlcGxhY2VzIGEgYGdvdG8gcmV0cnlgIGxvb3Agd2l0aCBhIGBmb3JgIGxvb3AgdGhhdCBkZWNyZW1lbnRzIHRoZSByZXRyeSBjb3VudGVyIG9uIGV2ZXJ5IGl0ZXJhdGlvbiwgd2hpY2ggc2lnbmlmaWNhbnRseSBhbHRlcnMgdGhlIHJldHJ5IGJlaGF2aW9yIGFuZCBjYW4gbGVhZCB0byBwcmVtYXR1cmUgT09NcyBvciBkaWZmZXJlbnQgcmVjbGFpbSBiZWhhdmlvci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiLFxuICAgIFwibWVtX2Nncm91cF9za19jaGFyZ2VcIixcbiAgICBcIl9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgbG9naWMgaW4gYHRyeV9jaGFyZ2VfbWVtY2dgLiBJdCByZXBsYWNlcyBhIGBnb3RvIHJldHJ5YCBsb29wIHdpdGggYSBgZm9yYCBsb29wIHRoYXQgZGVjcmVtZW50cyB0aGUgcmV0cnkgY291bnRlciBvbiBldmVyeSBpdGVyYXRpb24sIHdoaWNoIHNpZ25pZmljYW50bHkgYWx0ZXJzIHRoZSByZXRyeSBiZWhhdmlvciBhbmQgY2FuIGxlYWQgdG8gcHJlbWF0dXJlIE9PTXMgb3IgZGlmZmVyZW50IHJlY2xhaW0gYmVoYXZpb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf4jw[1] Phase: Succeeded StartedAt: 2026-08-06 22:37:34 +0000 UTC FinishedAt: 2026-08-06 22:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 22:37:34 +0000 UTC FinishedAt: 2026-08-06 22:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2] Phase: Succeeded StartedAt: 2026-08-06 22:37:34 +0000 UTC FinishedAt: 2026-08-07 02:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 22:37:34 +0000 UTC FinishedAt: 2026-08-07 02:33:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 22:37:34 +0000 UTC FinishedAt: 2026-08-06 22:37:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 22:37:34 +0000 UTC FinishedAt: 2026-08-06 22:37:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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-workflowhf4jw/series-workflowhf4jw-convert-artifact-959389113/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 22:37:44 +0000 UTC FinishedAt: 2026-08-06 22:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 22:37:44 +0000 UTC FinishedAt: 2026-08-06 22:59: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:*c8c0c344-2c7a-4d9f-a9ad-eb5b2cab8f00,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-workflowhf4jw/series-workflowhf4jw-convert-artifact-959389113/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": "49e73e39-c10a-4b07-adc9-1b3e3df06bb2", "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-workflowhf4jw/series-workflowhf4jw-build-action-2540931799/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 22:37:44 +0000 UTC FinishedAt: 2026-08-06 22:59:41 +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:*c8c0c344-2c7a-4d9f-a9ad-eb5b2cab8f00,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-workflowhf4jw/series-workflowhf4jw-convert-artifact-959389113/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": "49e73e39-c10a-4b07-adc9-1b3e3df06bb2", "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-workflowhf4jw/series-workflowhf4jw-build-action-2540931799/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 22:59:51 +0000 UTC FinishedAt: 2026-08-06 22:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 22:59:51 +0000 UTC FinishedAt: 2026-08-06 22:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 22:59:51 +0000 UTC FinishedAt: 2026-08-06 23:00:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 22:59:51 +0000 UTC FinishedAt: 2026-08-06 22:59:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-workflowhf4jw/series-workflowhf4jw-convert-artifact-1226080140/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:00:01 +0000 UTC FinishedAt: 2026-08-06 23:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:00:01 +0000 UTC FinishedAt: 2026-08-06 23:02:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49e73e39-c10a-4b07-adc9-1b3e3df06bb2,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-workflowhf4jw/series-workflowhf4jw-build-action-2540931799/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-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:02:20 +0000 UTC FinishedAt: 2026-08-06 23:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:02:20 +0000 UTC FinishedAt: 2026-08-06 23:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:02:20 +0000 UTC FinishedAt: 2026-08-06 23:25:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:02:20 +0000 UTC FinishedAt: 2026-08-06 23:25:18 +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:*c8c0c344-2c7a-4d9f-a9ad-eb5b2cab8f00,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-workflowhf4jw/series-workflowhf4jw-convert-artifact-1226080140/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": "d0096761-2874-47d4-9d05-c6ec51bb11e0", "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-workflowhf4jw/series-workflowhf4jw-build-action-2667504552/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:02:20 +0000 UTC FinishedAt: 2026-08-06 23:24:57 +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:*c8c0c344-2c7a-4d9f-a9ad-eb5b2cab8f00,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-workflowhf4jw/series-workflowhf4jw-convert-artifact-1226080140/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": "d0096761-2874-47d4-9d05-c6ec51bb11e0", "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-workflowhf4jw/series-workflowhf4jw-build-action-2667504552/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:25:18 +0000 UTC FinishedAt: 2026-08-06 23:25:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:25:18 +0000 UTC FinishedAt: 2026-08-06 23:25:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:25:18 +0000 UTC FinishedAt: 2026-08-06 23:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:25:18 +0000 UTC FinishedAt: 2026-08-06 23:27:10 +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:*d0096761-2874-47d4-9d05-c6ec51bb11e0,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-workflowhf4jw/series-workflowhf4jw-build-action-2667504552/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-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:27:20 +0000 UTC FinishedAt: 2026-08-07 02:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:27:20 +0000 UTC FinishedAt: 2026-08-07 02:33:56 +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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"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:*49e73e39-c10a-4b07-adc9-1b3e3df06bb2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d0096761-2874-47d4-9d05-c6ec51bb11e0,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-workflowhf4jw/series-workflowhf4jw-build-action-2540931799/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-workflowhf4jw/series-workflowhf4jw-build-action-2667504552/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:27:20 +0000 UTC FinishedAt: 2026-08-06 23:27:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:27:20 +0000 UTC FinishedAt: 2026-08-06 23:27:36 +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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"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-workflowhf4jw/series-workflowhf4jw-convert-artifact-1783787253/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:27:20 +0000 UTC FinishedAt: 2026-08-06 23:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:27:20 +0000 UTC FinishedAt: 2026-08-06 23:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:27:20 +0000 UTC FinishedAt: 2026-08-06 23:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:27:43 +0000 UTC FinishedAt: 2026-08-07 02:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf4jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"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":["mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_kmem_charge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"08634129366ed347e70a5d09b6b8966e60044fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"212b3ff5-7e9d-470e-96db-a6fc12ca475e","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-06 23:27:43 +0000 UTC FinishedAt: 2026-08-07 02:33:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49e73e39-c10a-4b07-adc9-1b3e3df06bb2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d0096761-2874-47d4-9d05-c6ec51bb11e0,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-workflowhf4jw/series-workflowhf4jw-build-action-2540931799/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-workflowhf4jw/series-workflowhf4jw-build-action-2667504552/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-workflowhf4jw/series-workflowhf4jw-convert-artifact-1783787253/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,}