Name: series-workfloww7szz Phase: Succeeded StartedAt: 2026-08-23 03:53:23 +0000 UTC FinishedAt: 2026-08-23 08:33:58 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[0] Phase: Succeeded StartedAt: 2026-08-23 03:53:23 +0000 UTC FinishedAt: 2026-08-23 04:52:12 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[0].run-triage Phase: Succeeded StartedAt: 2026-08-23 03:53:23 +0000 UTC FinishedAt: 2026-08-23 04:52:12 +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": "55ab7e14222e5f0b0fd9f7711ca391d2924b35e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "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": "55ab7e14222e5f0b0fd9f7711ca391d2924b35e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "20b1986a-77a7-4536-afb9-fb9c42f9388d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "demote_pool_huge_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+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RlbW90ZV9wb29sX2h1Z2VfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdlIHBhZ2UgZGVtb3Rpb24gbG9naWMgaW4gYG1tL2h1Z2V0bGIuY2AgYW5kIGBtbS9odWdldGxiX3N5c2ZzLmNgLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBzdXJwbHVzIHBhZ2UgYWNjb3VudGluZyBhbmQgYXZhaWxhYmxlIHBhZ2UgY2FsY3VsYXRpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbGwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMsIGxpc3QgY29ycnVwdGlvbiwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBIdWdlVExCIHBhZ2UgZGVtb3Rpb24gbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgc3VycGx1cyBhY2NvdW50aW5nIGFuZCBhdmFpbGFibGUgcGFnZSBjaGVja2luZyBkdXJpbmcgZGVtb3Rpb24uIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHRoZSAmIzM5O2RlbW90ZSYjMzk7IHN5c2ZzIGludGVyZmFjZSBmb3IgSHVnZVRMQiBwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDkzNTBmMTg0NTY5YmQ4OWIyOTZkMzM2OGUzODBiZGVkYzM5NTNmZmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAwNDo1MTowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGVkMjYxMDViODRkZTIuLmFlMjZkNDAwYWQzMWYgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTM5ODMsNiAmIzQzOzM5ODMsNyBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4gXHRzdHJ1Y3QgaHN0YXRlICpkc3Q7XG4gXHRsb25nIHJjID0gMDtcbiBcdGxvbmcgbnJfZGVtb3RlZCA9IDA7XG4mIzQzO1x0bG9uZyBucl9wZXJzaXN0ZW50ID0gMDtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcbkBAIC0zOTk1LDIyICYjNDM7Mzk5Niw2MCBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4gXG4gXHRmb3JfZWFjaF9ub2RlX21hc2tfdG9fZnJlZShzcmMsIG5yX25vZGVzLCBub2RlLCBub2Rlc19hbGxvd2VkKSB7XG4gXHRcdExJU1RfSEVBRChsaXN0KTtcbiYjNDM7XHRcdExJU1RfSEVBRChzdXJwbHVzX2xpc3QpO1xuIFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqbmV4dDtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbnJfYXZhaWxhYmxlLCBucl90YXJnZXQ7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFJlLWNoZWNrIGF2YWlsYWJsZSBlYWNoIG5vZGUgYmF0Y2g6IHRoZSBwcmV2aW91c1xuJiM0MztcdFx0ICogYmF0Y2ggcmVsZWFzZWQgaHVnZXRsYl9sb2NrIGZvciB2bWVtbWFwIHJlc3RvcmUvc3BsaXQsXG4mIzQzO1x0XHQgKiBhbmQgYSBuZXcgcmVzZXJ2YXRpb24gY291bGQgaGF2ZSBiZWVuIGFkZGVkIGluIHRoYXRcbiYjNDM7XHRcdCAqIHdpbmRvdywgc2hyaW5raW5nIHRoZSBidWRnZXQuICBhdmFpbGFibGUgaXMgZ2xvYmFsXG4mIzQzO1x0XHQgKiAocmVzdiBpcyBub3QgcGVyLW5vZGUpLCBzbyAwIG1lYW5zIG5vIG5vZGUgY2FuXG4mIzQzO1x0XHQgKiBjb250cmlidXRlIC0tIHN0b3AgdGhlIHdob2xlIHNjYW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG5yX2F2YWlsYWJsZSA9IGF2YWlsYWJsZV9odWdlX3BhZ2VzKHNyYyk7XG4mIzQzO1x0XHRpZiAoIW5yX2F2YWlsYWJsZSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIENhcCB0aGlzIGJhdGNoIGF0IHRoZSBjdXJyZW50IGJ1ZGdldDsgZXhwcmVzc2VkIGFzIGFcbiYjNDM7XHRcdCAqIGN1bXVsYXRpdmUgc3RvcCBwb2ludCBiZWNhdXNlIG5yX2RlbW90ZWQgaXMgcnVubmluZy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bnJfdGFyZ2V0ID0gbnJfZGVtb3RlZCAmIzQzOyBtaW5fdCh1bnNpZ25lZCBsb25nLFxuJiM0MztcdFx0XHRcdG5yX3RvX2RlbW90ZSAtIG5yX2RlbW90ZWQsIG5yX2F2YWlsYWJsZSk7XG4gXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXHUwMDI2c3JjLVx1MDAzZWh1Z2VwYWdlX2ZyZWVsaXN0c1tub2RlXSwgbHJ1KSB7XG4mIzQzO1x0XHRcdGJvb2wgYWRqdXN0X3N1cnBsdXM7XG4mIzQzO1xuIFx0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcbi1cdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxpc3QpO1xuJiM0MztcdFx0XHQvKiBTdXJwbHVzIGFjY291bnRpbmcgaXMgbWFpbnRhaW5lZCBwZXIgbm9kZSwgbm90IHBlciBmb2xpby4gKi9cbiYjNDM7XHRcdFx0YWRqdXN0X3N1cnBsdXMgPSBzcmMtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbbm9kZV0gXHUwMDNlIDA7XG4mIzQzO1x0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGFkanVzdF9zdXJwbHVzKTtcbiYjNDM7XHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBhZGp1c3Rfc3VycGx1cyA/IFx1MDAyNnN1cnBsdXNfbGlzdCA6IFx1MDAyNmxpc3QpO1xuJiM0MztcdFx0XHRpZiAoIWFkanVzdF9zdXJwbHVzKVxuJiM0MztcdFx0XHRcdG5yX3BlcnNpc3RlbnQmIzQzOyYjNDM7O1xuIFxuLVx0XHRcdGlmICgmIzQzOyYjNDM7bnJfZGVtb3RlZCA9PSBucl90b19kZW1vdGUpXG4mIzQzO1x0XHRcdGlmICgmIzQzOyYjNDM7bnJfZGVtb3RlZCA9PSBucl90YXJnZXQpXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuJiM0MztcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bGlzdCkgXHUwMDI2XHUwMDI2IGxpc3RfZW1wdHkoXHUwMDI2c3VycGx1c19saXN0KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcbi1cdFx0cmMgPSBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzcmMsIGRzdCwgXHUwMDI2bGlzdCk7XG4mIzQzO1x0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bGlzdCkpXG4mIzQzO1x0XHRcdHJjID0gZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3JjLCBkc3QsIFx1MDAyNmxpc3QpO1xuJiM0MztcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnN1cnBsdXNfbGlzdCkpIHtcbiYjNDM7XHRcdFx0bG9uZyB0bXBfcmM7XG4mIzQzO1xuJiM0MztcdFx0XHR0bXBfcmMgPSBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzcmMsIGRzdCwgXHUwMDI2c3VycGx1c19saXN0KTtcbiYjNDM7XHRcdFx0aWYgKHJjIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0XHRyYyA9IHRtcF9yYztcbiYjNDM7XHRcdH1cbiBcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFxuQEAgLTQwMTgsNiAmIzQzOzQwNTcsMTQgQEAgbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4gXHRcdFx0YWRkX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpO1xuIFxuJiM0MztcdFx0XHRucl9kZW1vdGVkLS07XG4mIzQzO1x0XHRcdG5yX3BlcnNpc3RlbnQtLTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFx1MDAyNnN1cnBsdXNfbGlzdCwgbHJ1KSB7XG4mIzQzO1x0XHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4mIzQzO1x0XHRcdGFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIHRydWUpO1xuJiM0MztcbiBcdFx0XHRucl9kZW1vdGVkLS07XG4gXHRcdH1cbiBcbkBAIC00MDI5LDcgJiM0Mzs0MDc2LDcgQEAgbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxuIFx0ICogTm90IGFic29sdXRlbHkgbmVjZXNzYXJ5LCBidXQgZm9yIGNvbnNpc3RlbmN5IHVwZGF0ZSBtYXhfaHVnZV9wYWdlc1xuIFx0ICogYmFzZWQgb24gcG9vbCBjaGFuZ2VzIGZvciB0aGUgZGVtb3RlZCBwYWdlLlxuIFx0ICovXG4tXHRzcmMtXHUwMDNlbWF4X2h1Z2VfcGFnZXMgLT0gbnJfZGVtb3RlZDtcbiYjNDM7XHRzcmMtXHUwMDNlbWF4X2h1Z2VfcGFnZXMgLT0gbnJfcGVyc2lzdGVudDtcbiBcdGRzdC1cdTAwM2VtYXhfaHVnZV9wYWdlcyAmIzQzOz0gbnJfZGVtb3RlZCBcdTAwM2NcdTAwM2MgKGh1Z2VfcGFnZV9vcmRlcihzcmMpIC0gaHVnZV9wYWdlX29yZGVyKGRzdCkpO1xuIFxuIFx0aWYgKHJjIFx1MDAzYyAwKVxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfc3lzZnMuYyBiL21tL2h1Z2V0bGJfc3lzZnMuY1xuaW5kZXggNzllY2U5MTQwNmJmYS4uMzI2YTU0YjRkOTkxYyAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGJfc3lzZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYl9zeXNmcy5jXG5AQCAtMjExLDE1ICYjNDM7MjExLDE1IEBAIHN0YXRpYyBzc2l6ZV90IGRlbW90ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdFx0ICogQ2hlY2sgZm9yIGF2YWlsYWJsZSBwYWdlcyB0byBkZW1vdGUgZWFjaCB0aW1lIHRob3JvdWdoIHRoZVxuIFx0XHQgKiBsb29wIGFzIGRlbW90ZV9wb29sX2h1Z2VfcGFnZSB3aWxsIGRyb3AgaHVnZXRsYl9sb2NrLlxuIFx0XHQgKi9cbiYjNDM7XHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzIC0gaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXM7XG4gXHRcdGlmIChuaWQgIT0gTlVNQV9OT19OT0RFKVxuLVx0XHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzX25vZGVbbmlkXTtcbi1cdFx0ZWxzZVxuLVx0XHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzO1xuLVx0XHRucl9hdmFpbGFibGUgLT0gaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXM7XG4mIzQzO1x0XHRcdG5yX2F2YWlsYWJsZSA9IG1pbihucl9hdmFpbGFibGUsXG4mIzQzO1x0XHRcdFx0XHQgICBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlc19ub2RlW25pZF0pO1xuIFx0XHRpZiAoIW5yX2F2YWlsYWJsZSlcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0cmMgPSBkZW1vdGVfcG9vbF9odWdlX3BhZ2UoaCwgbl9tYXNrLCBucl9kZW1vdGUpO1xuJiM0MztcdFx0cmMgPSBkZW1vdGVfcG9vbF9odWdlX3BhZ2UoaCwgbl9tYXNrLFxuJiM0MztcdFx0XHRcdFx0ICAgbWluKG5yX2RlbW90ZSwgbnJfYXZhaWxhYmxlKSk7XG4gXHRcdGlmIChyYyBcdTAwM2MgMCkge1xuIFx0XHRcdGVyciA9IHJjO1xuIFx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZW1vdGVfcG9vbF9odWdlX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSHVnZVRMQiBwYWdlIGRlbW90aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIHN1cnBsdXMgYWNjb3VudGluZyBhbmQgYXZhaWxhYmxlIHBhZ2UgY2hlY2tpbmcgZHVyaW5nIGRlbW90aW9uLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgJiMzOTtkZW1vdGUmIzM5OyBzeXNmcyBpbnRlcmZhY2UgZm9yIEh1Z2VUTEIgcGFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MzUwZjE4NDU2OWJkODliMjk2ZDMzNjhlMzgwYmRlZGMzOTUzZmZjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMDQ6NTE6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggZWQyNjEwNWI4NGRlMi4uYWUyNmQ0MDBhZDMxZiAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuYwpAQCAtMzk4Myw2ICYjNDM7Mzk4Myw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCwKIAlzdHJ1Y3QgaHN0YXRlICpkc3Q7CiAJbG9uZyByYyA9IDA7CiAJbG9uZyBucl9kZW1vdGVkID0gMDsKJiM0MzsJbG9uZyBucl9wZXJzaXN0ZW50ID0gMDsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtodWdldGxiX2xvY2spOwogCkBAIC0zOTk1LDIyICYjNDM7Mzk5Niw2MCBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsCiAKIAlmb3JfZWFjaF9ub2RlX21hc2tfdG9fZnJlZShzcmMsIG5yX25vZGVzLCBub2RlLCBub2Rlc19hbGxvd2VkKSB7CiAJCUxJU1RfSEVBRChsaXN0KTsKJiM0MzsJCUxJU1RfSEVBRChzdXJwbHVzX2xpc3QpOwogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqbmV4dDsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbnJfYXZhaWxhYmxlLCBucl90YXJnZXQ7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogUmUtY2hlY2sgYXZhaWxhYmxlIGVhY2ggbm9kZSBiYXRjaDogdGhlIHByZXZpb3VzCiYjNDM7CQkgKiBiYXRjaCByZWxlYXNlZCBodWdldGxiX2xvY2sgZm9yIHZtZW1tYXAgcmVzdG9yZS9zcGxpdCwKJiM0MzsJCSAqIGFuZCBhIG5ldyByZXNlcnZhdGlvbiBjb3VsZCBoYXZlIGJlZW4gYWRkZWQgaW4gdGhhdAomIzQzOwkJICogd2luZG93LCBzaHJpbmtpbmcgdGhlIGJ1ZGdldC4gIGF2YWlsYWJsZSBpcyBnbG9iYWwKJiM0MzsJCSAqIChyZXN2IGlzIG5vdCBwZXItbm9kZSksIHNvIDAgbWVhbnMgbm8gbm9kZSBjYW4KJiM0MzsJCSAqIGNvbnRyaWJ1dGUgLS0gc3RvcCB0aGUgd2hvbGUgc2Nhbi4KJiM0MzsJCSAqLwomIzQzOwkJbnJfYXZhaWxhYmxlID0gYXZhaWxhYmxlX2h1Z2VfcGFnZXMoc3JjKTsKJiM0MzsJCWlmICghbnJfYXZhaWxhYmxlKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIENhcCB0aGlzIGJhdGNoIGF0IHRoZSBjdXJyZW50IGJ1ZGdldDsgZXhwcmVzc2VkIGFzIGEKJiM0MzsJCSAqIGN1bXVsYXRpdmUgc3RvcCBwb2ludCBiZWNhdXNlIG5yX2RlbW90ZWQgaXMgcnVubmluZy4KJiM0MzsJCSAqLwomIzQzOwkJbnJfdGFyZ2V0ID0gbnJfZGVtb3RlZCAmIzQzOyBtaW5fdCh1bnNpZ25lZCBsb25nLAomIzQzOwkJCQlucl90b19kZW1vdGUgLSBucl9kZW1vdGVkLCBucl9hdmFpbGFibGUpOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgJmFtcDtzcmMtJmd0O2h1Z2VwYWdlX2ZyZWVsaXN0c1tub2RlXSwgbHJ1KSB7CiYjNDM7CQkJYm9vbCBhZGp1c3Rfc3VycGx1czsKJiM0MzsKIAkJCWlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkKIAkJCQljb250aW51ZTsKIAotCQkJcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpOwotCQkJbGlzdF9hZGQoJmFtcDtmb2xpby0mZ3Q7bHJ1LCAmYW1wO2xpc3QpOwomIzQzOwkJCS8qIFN1cnBsdXMgYWNjb3VudGluZyBpcyBtYWludGFpbmVkIHBlciBub2RlLCBub3QgcGVyIGZvbGlvLiAqLwomIzQzOwkJCWFkanVzdF9zdXJwbHVzID0gc3JjLSZndDtzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtub2RlXSAmZ3Q7IDA7CiYjNDM7CQkJcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgYWRqdXN0X3N1cnBsdXMpOwomIzQzOwkJCWxpc3RfYWRkKCZhbXA7Zm9saW8tJmd0O2xydSwgYWRqdXN0X3N1cnBsdXMgPyAmYW1wO3N1cnBsdXNfbGlzdCA6ICZhbXA7bGlzdCk7CiYjNDM7CQkJaWYgKCFhZGp1c3Rfc3VycGx1cykKJiM0MzsJCQkJbnJfcGVyc2lzdGVudCYjNDM7JiM0Mzs7CiAKLQkJCWlmICgmIzQzOyYjNDM7bnJfZGVtb3RlZCA9PSBucl90b19kZW1vdGUpCiYjNDM7CQkJaWYgKCYjNDM7JiM0Mztucl9kZW1vdGVkID09IG5yX3RhcmdldCkKIAkJCQlicmVhazsKIAkJfQogCiYjNDM7CQlpZiAobGlzdF9lbXB0eSgmYW1wO2xpc3QpICZhbXA7JmFtcDsgbGlzdF9lbXB0eSgmYW1wO3N1cnBsdXNfbGlzdCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAKLQkJcmMgPSBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzcmMsIGRzdCwgJmFtcDtsaXN0KTsKJiM0MzsJCWlmICghbGlzdF9lbXB0eSgmYW1wO2xpc3QpKQomIzQzOwkJCXJjID0gZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3JjLCBkc3QsICZhbXA7bGlzdCk7CiYjNDM7CQlpZiAoIWxpc3RfZW1wdHkoJmFtcDtzdXJwbHVzX2xpc3QpKSB7CiYjNDM7CQkJbG9uZyB0bXBfcmM7CiYjNDM7CiYjNDM7CQkJdG1wX3JjID0gZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3JjLCBkc3QsICZhbXA7c3VycGx1c19saXN0KTsKJiM0MzsJCQlpZiAocmMgJmd0Oz0gMCkKJiM0MzsJCQkJcmMgPSB0bXBfcmM7CiYjNDM7CQl9CiAKIAkJc3Bpbl9sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAKQEAgLTQwMTgsNiAmIzQzOzQwNTcsMTQgQEAgbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLAogCQkJbGlzdF9kZWwoJmFtcDtmb2xpby0mZ3Q7bHJ1KTsKIAkJCWFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTsKIAomIzQzOwkJCW5yX2RlbW90ZWQtLTsKJiM0MzsJCQlucl9wZXJzaXN0ZW50LS07CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsICZhbXA7c3VycGx1c19saXN0LCBscnUpIHsKJiM0MzsJCQlsaXN0X2RlbCgmYW1wO2ZvbGlvLSZndDtscnUpOwomIzQzOwkJCWFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIHRydWUpOwomIzQzOwogCQkJbnJfZGVtb3RlZC0tOwogCQl9CiAKQEAgLTQwMjksNyAmIzQzOzQwNzYsNyBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsCiAJICogTm90IGFic29sdXRlbHkgbmVjZXNzYXJ5LCBidXQgZm9yIGNvbnNpc3RlbmN5IHVwZGF0ZSBtYXhfaHVnZV9wYWdlcwogCSAqIGJhc2VkIG9uIHBvb2wgY2hhbmdlcyBmb3IgdGhlIGRlbW90ZWQgcGFnZS4KIAkgKi8KLQlzcmMtJmd0O21heF9odWdlX3BhZ2VzIC09IG5yX2RlbW90ZWQ7CiYjNDM7CXNyYy0mZ3Q7bWF4X2h1Z2VfcGFnZXMgLT0gbnJfcGVyc2lzdGVudDsKIAlkc3QtJmd0O21heF9odWdlX3BhZ2VzICYjNDM7PSBucl9kZW1vdGVkICZsdDsmbHQ7IChodWdlX3BhZ2Vfb3JkZXIoc3JjKSAtIGh1Z2VfcGFnZV9vcmRlcihkc3QpKTsKIAogCWlmIChyYyAmbHQ7IDApCmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3N5c2ZzLmMgYi9tbS9odWdldGxiX3N5c2ZzLmMKaW5kZXggNzllY2U5MTQwNmJmYS4uMzI2YTU0YjRkOTkxYyAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYl9zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGJfc3lzZnMuYwpAQCAtMjExLDE1ICYjNDM7MjExLDE1IEBAIHN0YXRpYyBzc2l6ZV90IGRlbW90ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJICogQ2hlY2sgZm9yIGF2YWlsYWJsZSBwYWdlcyB0byBkZW1vdGUgZWFjaCB0aW1lIHRob3JvdWdoIHRoZQogCQkgKiBsb29wIGFzIGRlbW90ZV9wb29sX2h1Z2VfcGFnZSB3aWxsIGRyb3AgaHVnZXRsYl9sb2NrLgogCQkgKi8KJiM0MzsJCW5yX2F2YWlsYWJsZSA9IGgtJmd0O2ZyZWVfaHVnZV9wYWdlcyAtIGgtJmd0O3Jlc3ZfaHVnZV9wYWdlczsKIAkJaWYgKG5pZCAhPSBOVU1BX05PX05PREUpCi0JCQlucl9hdmFpbGFibGUgPSBoLSZndDtmcmVlX2h1Z2VfcGFnZXNfbm9kZVtuaWRdOwotCQllbHNlCi0JCQlucl9hdmFpbGFibGUgPSBoLSZndDtmcmVlX2h1Z2VfcGFnZXM7Ci0JCW5yX2F2YWlsYWJsZSAtPSBoLSZndDtyZXN2X2h1Z2VfcGFnZXM7CiYjNDM7CQkJbnJfYXZhaWxhYmxlID0gbWluKG5yX2F2YWlsYWJsZSwKJiM0MzsJCQkJCSAgIGgtJmd0O2ZyZWVfaHVnZV9wYWdlc19ub2RlW25pZF0pOwogCQlpZiAoIW5yX2F2YWlsYWJsZSkKIAkJCWJyZWFrOwogCi0JCXJjID0gZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKGgsIG5fbWFzaywgbnJfZGVtb3RlKTsKJiM0MzsJCXJjID0gZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKGgsIG5fbWFzaywKJiM0MzsJCQkJCSAgIG1pbihucl9kZW1vdGUsIG5yX2F2YWlsYWJsZSkpOwogCQlpZiAocmMgJmx0OyAwKSB7CiAJCQllcnIgPSByYzsKIAkJCWJyZWFrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgVGhpcyBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBjbGVhcmx5IHRvdWNoaW5nIHRoZSBIdWdlVExCIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtb2RpZnlpbmcgYG1tL2h1Z2V0bGIuY2AgYW5kIGBtbS9odWdldGxiX3N5c2ZzLmNgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGFsdGVyaW5nIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGFuZCBgZGVtb3RlX3N0b3JlYCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gaHVnZSBwYWdlIGRlbW90aW9uLCBzdXJwbHVzIGFjY291bnRpbmcsIGFuZCBhdmFpbGFiaWxpdHkgY2hlY2tzIOKAkyBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhdCB0aGUga2VybmVsIGxldmVsLiBTaW5jZSBgZGVtb3RlX3N0b3JlYCBpcyB0aWVkIHRvIHN5c2ZzLCB0aGlzIHBhdGNoIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIFRoYXQgbWVhbnMgd2UgYWJzb2x1dGVseSBuZWVkIHRvIG1hcmsgdGhpcyBmb3IgZnV6emluZy4gYFdvcnRoRnV6emluZz10cnVlYCBpcyB0aGUgY29ycmVjdCBjYWxsIGhlcmUuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYG1tL2h1Z2V0bGIuY2AgaXMgZ29pbmcgdG8gYmUgY29tcGlsZWQgaWYgYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGRlcGVuZHMgb24sIHRvIHByb3Blcmx5IGRldGVybWluZSBmdXp6aW5nIHN0cmF0ZWdpZXMsIGNvdmVyYWdlIGdvYWxzLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBvbiB0aGUgcnVubmluZyBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYi5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9ODA9b2JqLSQoQ09ORklHX0hBU19ETUEpXHQmIzQzOz0gZG1hcG9vbC5vXG5tbS9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGIubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xubW0vTWFrZWZpbGUtODItaWZkZWYgQ09ORklHX0NNQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NzQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgdGhlIEZvdW5kYXRpb246IEh1Z2VUTEIgUmVxdWlyZW1lbnRzKioKCkFscmlnaHQsIHRoZSBjb2RlJiMzOTtzIGluZGljYXRpbmcgdGhhdCBgQ09ORklHX0hVR0VUTEJGU2AgaXMgYSBub24tbmVnb3RpYWJsZSBwcmVyZXF1aXNpdGUuIE1ha2VzIHNlbnNlOyBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGh1Z2UgcGFnZXMsIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnQgbmVlZHMgdG8gYmUgaW4gcGxhY2UuIE5vdywgYmVmb3JlIEkgZGl2ZSBhbnkgZGVlcGVyLCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBhbHNvIGVuYWJsZWQuIEdvdHRhIGVuc3VyZSB0aGUgY29yZSBwYWdlIHNpemUgc3VwcG9ydCBpcyBwcmVzZW50LCBiZWZvcmUgSSBzdGFydCByZWx5aW5nIG9uIGl0LiBXb3VsZG4mIzM5O3Qgd2FudCB0byBjaGFzZSBteSB0YWlsIGxhdGVyLiBCZXN0IHRvIGNvbmZpcm0gdGhlc2UgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIHJpZ2h0IGF0IHRoZSBzdGFydCwgdG8gYXZvaWQgYW55IHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLiBJdCYjMzk7cyBhIHF1aWNrIGNoZWNrLCBidXQgYSBjcnVjaWFsIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI3NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LCBzbyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byBgZnMvS2NvbmZpZ2AuIEkga25vdyB0aGF0JiMzOTtzIHRoZSBjZW50cmFsIGh1YiBmb3IgbW9zdCBmaWxlc3lzdGVtLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBMZXQmIzM5O3Mgc2VlLi4uIGFyb3VuZCBsaW5lIDI1MCwgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBtb3JlIGdlbmVyYWwgZmlsZXN5c3RlbSBvcHRpb25zIGJlZ2luLCBvciBwZXJoYXBzIHdoZXJlIGEgc3BlY2lmaWMgcmVsZXZhbnQgc2VjdGlvbiBiZWdpbnMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHJlbGV2YW50IHNlY3Rpb24gdG8gcGF5IGF0dGVudGlvbiB0by4gSG9wZWZ1bGx5LCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBnaXZlcyBtZSB3aGF0IEkgbmVlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYXJlIHR1Y2tlZCBhd2F5IGFyb3VuZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI0NjpcdFxuIDI0NzpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI0ODpcdFx0ZGVmX2Jvb2wgblxuIDI0OTpcdFxuIDI1MDpcdG1lbnVjb25maWcgSFVHRVRMQkZTXG4gMjUxOlx0XHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuIDI1MjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI1MzpcdFx0c2VsZWN0IE1FTUZEX0NSRUFURVxuIDI1NDpcdFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcbiAyNTU6XHRcdGhlbHBcbiAyNTY6XHRcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxuIDI1NzpcdFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXG4gMjU4Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMjU5Olx0XG4gMjYwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjYxOlx0XG4gMjYyOlx0aWYgSFVHRVRMQkZTXG4gMjYzOlx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbiAyNjQ6XHRcdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MDMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgSHVnZSBQYWdlcyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgcHJldHR5IGNsZWFyOiB1bmRlcnN0YW5kaW5nIGhvdyBgSFVHRVRMQkZTYCBpcyBjb25maWd1cmVkIGluIHRoaXMgc3lzdGVtLiBUaGF0IHByb2JhYmx5IG1lYW5zIEkmIzM5O2xsIGJlIGRpZ2dpbmcgaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UsIGlzIHRvIGNoZWNrIGBtbS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlLCBzbyBJJiMzOTttIGJldHRpbmcgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZWZpbml0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZXhwbGFuYXRpb25zIGZvciBob3cgYEhVR0VUTEJfUEFHRWAgcmVsYXRlcyB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTcwOC1cbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vS2NvbmZpZy03MTAtXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYEhVR0VUTEJfUEFHRWAgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgSFVHRVRMQl9QQUdFYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBJdCYjMzk7cyB1c2VkIGhlcmUsIGJ1dCBJIGhhdmUgdGhpcyBuYWdnaW5nIGZlZWxpbmcgaXQgbWlnaHQgbm90IGJlICp3aXRoaW4qIHRoaXMgcGFydGljdWxhciBmaWxlIG9yIG1vZHVsZS4gSXQmIzM5O3MgYSBwcmV0dHkgY29tbW9uIG1hY3JvLCBzbyBpdCYjMzk7cyBlbnRpcmVseSBwbGF1c2libGUgaXQmIzM5O3MgY29taW5nIGluIGZyb20gc29tZSBpbmNsdWRlIGZpbGUgb3IgYSBoaWdoZXItbGV2ZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGNvbnRleHQuIElzIGl0IGEga2VybmVsLXdpZGUgY29uc3RhbnQ/IElzIGl0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYz8gSXMgaXQgZGV0ZXJtaW5lZCBieSBhIGJ1aWxkIGZsYWc/IEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBwcm9qZWN0IGZvciBpdHMgZGVmaW5pdGlvbiB0byBzZWUgd2hlcmUgaXQgb3JpZ2luYXRlcyBmcm9tLiBGaW5kaW5nIGl0cyBkZWZpbml0aW9uIGlzIHRoZSBrZXkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcbmZzL0tjb25maWctMjcyLVxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM2MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZVRMQkZTIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBIVUdFVExCRlNgIGNvbmZpZ3VyYXRpb24uIEl0IGxvb2tzIGxpa2UgdGhhdCYjMzk7cyB0aGUgY2VudHJhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3csIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBwaW5wb2ludGluZyB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgYW5kIGBkZW1vdGVfc3RvcmVgLiBBbHJpZ2h0LCBgZGVtb3RlX3N0b3JlYCBpcyB0aGUgc3lzZnMgc3RvcmUgZnVuY3Rpb24sIHNvIHRoYXQgZ2l2ZXMgbWUgYSBoYW5kbGUgb24gaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIHVzZXIgc3BhY2UgY29uZmlndXJhdGlvbi4gQnV0LCB0aGUgcmVhbCBjb3JlIGxvZ2ljIGlzIGdvaW5nIHRvIGJlIGluIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLiBJIHNob3VsZCBjaGVjayBpZiBpdCYjMzk7cyBzdGF0aWMuIFRoYXQgd2lsbCBkZXRlcm1pbmUgd2hhdCBzY29wZSBpdCBleGlzdHMgaW4gYW5kIGlmIEkgbmVlZCB0byBsb29rIGludG8gb3RoZXIgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZW1vdGVfcG9vbF9odWdlX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTM5MTk9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXG4tLVxubW0vaHVnZXRsYi5jLTM5NzctXG5tbS9odWdldGxiLmM6Mzk3ODpsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG5tbS9odWdldGxiLmMtMzk3OS1cdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3RvX2RlbW90ZSlcbi0tXG5tbS9odWdldGxiLmMtMzk5MS1cdGlmICghc3JjLVx1MDAzZWRlbW90ZV9vcmRlcikge1xubW0vaHVnZXRsYi5jOjM5OTI6XHRcdHByX3dhcm4oXCYjMzQ7SHVnZVRMQjogTlVMTCBkZW1vdGUgb3JkZXIgcGFzc2VkIHRvIGRlbW90ZV9wb29sX2h1Z2VfcGFnZS5cXG5cJiMzNDspO1xubW0vaHVnZXRsYi5jLTM5OTMtXHRcdHJldHVybiAtRUlOVkFMO1x0XHQvKiBpbnRlcm5hbCBlcnJvciAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODgwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAmIzM5O3MgRHluYW1pYyBOYXR1cmUqKgoKUmlnaHQsIHNvIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGlzbiYjMzk7dCBhIHN0YXRpYyB2YWx1ZSwgd2hpY2ggaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGZ1bGx5LiBUaGVyZWZvcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBvcmlnaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBhbmQgd2hlbiBpdCYjMzk7cyB1cGRhdGVkLiBJIGltbWVkaWF0ZWx5IHRoaW5rIHRvIGNoZWNrIHRoZSByZWxhdGVkIGNvZGUgd2l0aGluIHRoZSBodWdlIHBhZ2VzIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFdoZXJlJiMzOTtzIHRoZSBsb2dpY2FsIGxvY2F0aW9uIHRvIGZpbmQgdGhpcz8gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgbW0vaHVnZXRsYl9zeXNmcy5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlIGZvciBgZGVtb3RlX3N0b3JlYCDigJMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgc3lzZnMgYXR0cmlidXRlIGZvciBkZW1vdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4gSSYjMzk7bGwgZGlnIGludG8gdGhhdCBmaWxlIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVtb3RlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYl9zeXNmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfc3lzZnMuYz0xNzk9SFNUQVRFX0FUVFJfUk8oc3VycGx1c19odWdlcGFnZXMpO1xubW0vaHVnZXRsYl9zeXNmcy5jLTE4MC1cbm1tL2h1Z2V0bGJfc3lzZnMuYzoxODE6c3RhdGljIHNzaXplX3QgZGVtb3RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vaHVnZXRsYl9zeXNmcy5jLTE4Mi1cdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI3MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIERlZXAgaW50byBIdWdlIFBhZ2UgRGVtb3Rpb24qKgoKQWxyaWdodCwgc28gYGRlbW90ZV9zdG9yZWAgaXMgc3RhdGljLiBUaGF0IG1lYW5zIHdlIGRvbiYjMzk7dCBoYXZlIHRvIGNvbmNlcm4gb3Vyc2VsdmVzIHdpdGggZXh0ZXJuYWwgY2FsbHMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbi4gQSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgbm90IHRoZSBjcml0aWNhbCBwYXRoIGhlcmUuIFRoaXMgaXMgYSBiaXQgb2YgYSBicmVhZCBjcnVtYiBvbiBhIHdlbGwtd29ybiBwYXRoLgoKVGhlcmVmb3JlLCBvdXIgcmVhbCBmb2N1cyBuZWVkcyB0byBiZSBvbiBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUganVpY2UgaXMuIFRoYXQmIzM5O3MgdGhlIG9uZSB3ZSBuZWVkIHRvIHNjcnV0aW5pemUuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBjYWxsaW5nICp0aGF0KiBvbmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoLCB0aGUgZGVwZW5kZW5jaWVzLiBXaGF0IHVwc3RyZWFtIGNvbXBvbmVudHMgYXJlIHRyaWdnZXJpbmcgdGhpcyBkZW1vdGlvbj8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gTGV0JiMzOTtzIHRyYWNlIGl0IG91dCBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gRGlnZ2luZyBpbiBvbiBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBiZWhhdmlvci4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZmluZCBzb21lIG90aGVyIGNvZGUgdXNpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlbW90ZV9wb29sX2h1Z2VfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MzkxOT1zdGF0aWMgbG9uZyBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpzcmMsIHN0cnVjdCBoc3RhdGUgKmRzdCxcbi0tXG5tbS9odWdldGxiLmMtMzk3Ny1cbm1tL2h1Z2V0bGIuYzozOTc4OmxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbm1tL2h1Z2V0bGIuYy0zOTc5LVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfdG9fZGVtb3RlKVxuLS1cbm1tL2h1Z2V0bGIuYy0zOTkxLVx0aWYgKCFzcmMtXHUwMDNlZGVtb3RlX29yZGVyKSB7XG5tbS9odWdldGxiLmM6Mzk5MjpcdFx0cHJfd2FybihcJiMzNDtIdWdlVExCOiBOVUxMIGRlbW90ZSBvcmRlciBwYXNzZWQgdG8gZGVtb3RlX3Bvb2xfaHVnZV9wYWdlLlxcblwmIzM0Oyk7XG5tbS9odWdldGxiLmMtMzk5My1cdFx0cmV0dXJuIC1FSU5WQUw7XHRcdC8qIGludGVybmFsIGVycm9yICovXG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oPTEwMD1leHRlcm4gdm9pZCBwcmVwX2FuZF9hZGRfYWxsb2NhdGVkX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpoLFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTEwMS1cdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaDoxMDI6ZXh0ZXJuIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYyxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0xMDMtXHRcdFx0XHQgIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jPTE4MT1zdGF0aWMgc3NpemVfdCBkZW1vdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jLTIxMS1cdFx0ICogQ2hlY2sgZm9yIGF2YWlsYWJsZSBwYWdlcyB0byBkZW1vdGUgZWFjaCB0aW1lIHRob3JvdWdoIHRoZVxubW0vaHVnZXRsYl9zeXNmcy5jOjIxMjpcdFx0ICogbG9vcCBhcyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Ugd2lsbCBkcm9wIGh1Z2V0bGJfbG9jay5cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMTMtXHRcdCAqL1xuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMjAtXG5tbS9odWdldGxiX3N5c2ZzLmM6MjIxOlx0XHRyYyA9IGRlbW90ZV9wb29sX2h1Z2VfcGFnZShoLCBuX21hc2ssXG5tbS9odWdldGxiX3N5c2ZzLmMtMjIyLVx0XHRcdFx0XHQgICBtaW4obnJfZGVtb3RlLCBucl9hdmFpbGFibGUpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzExMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZSBQYWdlIERlbW90aW9uIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBodWdlIHBhZ2UgZGVtb3Rpb24gcHJvY2Vzcy4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gYGRlbW90ZV9zdG9yZWAsIHdoaWNoIG1lYW5zIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgICppcyogdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgYml0IG9mIGxvZ2ljLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSBob3cgYWNjZXNzaWJsZSB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGlzLiBIbW0sIGxldCYjMzk7cyBzZWUsIHllcywgSSByZW1lbWJlciBpdCYjMzk7cyBleHBvc2VkIHRocm91Z2ggc3lzZnMuIFRoZSBmaWxlIG5hbWUgaXMgYGRlbW90ZWAuIEFscmlnaHQsIHRoYXQgY29uZmlybXMgcmVhY2hhYmlsaXR5LiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHdoZXJlIGBkZW1vdGVfc3RvcmVgIGlzIGJlaW5nIHVzZWQuIE1ha2luZyBzdXJlIG5vdGhpbmcgc3VycHJpc2luZyBpcyBjYWxsaW5nIGl0IG91dHNpZGUgb2YgdGhlIGV4cGVjdGVkIHBhdGggaXMgYWx3YXlzIGEgZ29vZCBpZGVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZW1vdGVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiX3N5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYl9zeXNmcy5jPTE3OT1IU1RBVEVfQVRUUl9STyhzdXJwbHVzX2h1Z2VwYWdlcyk7XG5tbS9odWdldGxiX3N5c2ZzLmMtMTgwLVxubW0vaHVnZXRsYl9zeXNmcy5jOjE4MTpzdGF0aWMgc3NpemVfdCBkZW1vdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9odWdldGxiX3N5c2ZzLmMtMTgyLVx0ICAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTQ3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkF0dHJpYnV0ZSBEZWZpbml0aW9uIENoZWNrKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgY29uY2x1c2lvbnMgb3IgYW5hbHlzZXMsIEkgbmVlZCB0byBwYXVzZS4gSXQmIzM5O3MgY3J1Y2lhbCwgYWJzb2x1dGVseSAqY3JpdGljYWwqLCB0aGF0IEkgaGF2ZSBhIHJvY2stc29saWQgZ3Jhc3Agb24gdGhlIHByZWNpc2UgZGVmaW5pdGlvbiBvZiB0aGUgYXR0cmlidXRlIGluIHF1ZXN0aW9uLiBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGggYW55IG1lYW5pbmdmdWwgZXZhbHVhdGlvbiBvciByZWFzb25pbmcgd2l0aG91dCB0aGF0IGZvdW5kYXRpb24uIEFueSBwb3RlbnRpYWwgYW1iaWd1aXR5LCBudWFuY2UsIG9yIHRlY2huaWNhbCBzcGVjaWZpY2F0aW9uIGluaGVyZW50IGluIHRoZSBhdHRyaWJ1dGUgaXRzZWxmIGRpY3RhdGVzIHRoZSBlbnRpcmUgc3Vic2VxdWVudCBsaW5lIG9mIHRob3VnaHQuIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQgZGVmaW5pdGlvbjsgZXZlbiBhIG1pbm9yIG92ZXJzaWdodCB0aGVyZSBjb3VsZCBsZWFkIG1lIGRvd24gYSBjb21wbGV0ZWx5IGVycm9uZW91cyBwYXRoLCBhbmQgSSBuZWVkIHRvIGF2b2lkIGFueSB3YXN0ZSBvZiBteSB0aW1lLiBJIG11c3QgZW5zdXJlIHRoaXMgaXMgcGVyZmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVtb3RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYl9zeXNmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfc3lzZnMuYz0xNzk9SFNUQVRFX0FUVFJfUk8oc3VycGx1c19odWdlcGFnZXMpO1xubW0vaHVnZXRsYl9zeXNmcy5jLTE4MC1cbm1tL2h1Z2V0bGJfc3lzZnMuYzoxODE6c3RhdGljIHNzaXplX3QgZGVtb3RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vaHVnZXRsYl9zeXNmcy5jLTE4Mi1cdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xODMte1xubW0vaHVnZXRsYl9zeXNmcy5jOjE4NDpcdHVuc2lnbmVkIGxvbmcgbnJfZGVtb3RlO1xubW0vaHVnZXRsYl9zeXNmcy5jLTE4NS1cdHVuc2lnbmVkIGxvbmcgbnJfYXZhaWxhYmxlO1xuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0xOTAtXG5tbS9odWdldGxiX3N5c2ZzLmM6MTkxOlx0ZXJyID0ga3N0cnRvdWwoYnVmLCAxMCwgXHUwMDI2bnJfZGVtb3RlKTtcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xOTItXHRpZiAoZXJyKVxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMDYtXG5tbS9odWdldGxiX3N5c2ZzLmM6MjA3Olx0d2hpbGUgKG5yX2RlbW90ZSkge1xubW0vaHVnZXRsYl9zeXNmcy5jLTIwOC1cdFx0bG9uZyByYztcbi0tXG5tbS9odWdldGxiX3N5c2ZzLmMtMjEwLVx0XHQvKlxubW0vaHVnZXRsYl9zeXNmcy5jOjIxMTpcdFx0ICogQ2hlY2sgZm9yIGF2YWlsYWJsZSBwYWdlcyB0byBkZW1vdGUgZWFjaCB0aW1lIHRob3JvdWdoIHRoZVxubW0vaHVnZXRsYl9zeXNmcy5jOjIxMjpcdFx0ICogbG9vcCBhcyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Ugd2lsbCBkcm9wIGh1Z2V0bGJfbG9jay5cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMTMtXHRcdCAqL1xuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMjAtXG5tbS9odWdldGxiX3N5c2ZzLmM6MjIxOlx0XHRyYyA9IGRlbW90ZV9wb29sX2h1Z2VfcGFnZShoLCBuX21hc2ssXG5tbS9odWdldGxiX3N5c2ZzLmM6MjIyOlx0XHRcdFx0XHQgICBtaW4obnJfZGVtb3RlLCBucl9hdmFpbGFibGUpKTtcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMjMtXHRcdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMjctXG5tbS9odWdldGxiX3N5c2ZzLmM6MjI4Olx0XHRucl9kZW1vdGUgLT0gcmM7XG5tbS9odWdldGxiX3N5c2ZzLmMtMjI5LVx0fVxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMzctfVxubW0vaHVnZXRsYl9zeXNmcy5jOjIzODpIU1RBVEVfQVRUUl9XTyhkZW1vdGUpO1xubW0vaHVnZXRsYl9zeXNmcy5jLTIzOS1cbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNDA6c3RhdGljIHNzaXplX3QgZGVtb3RlX3NpemVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNDEtXHRcdFx0XHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNDMtXHRzdHJ1Y3QgaHN0YXRlICpoID0ga29ial90b19oc3RhdGUoa29iaiwgTlVMTCk7XG5tbS9odWdldGxiX3N5c2ZzLmM6MjQ0Olx0dW5zaWduZWQgbG9uZyBkZW1vdGVfc2l6ZSA9IChQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIGgtXHUwMDNlZGVtb3RlX29yZGVyKSAvIFNaXzFLO1xubW0vaHVnZXRsYl9zeXNmcy5jLTI0NS1cbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNDY6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsdWtCXFxuXCYjMzQ7LCBkZW1vdGVfc2l6ZSk7XG5tbS9odWdldGxiX3N5c2ZzLmMtMjQ3LX1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNDgtXG5tbS9odWdldGxiX3N5c2ZzLmM6MjQ5OnN0YXRpYyBzc2l6ZV90IGRlbW90ZV9zaXplX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vaHVnZXRsYl9zeXNmcy5jLTI1MC1cdFx0XHRcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNTIte1xubW0vaHVnZXRsYl9zeXNmcy5jOjI1MzpcdHN0cnVjdCBoc3RhdGUgKmgsICpkZW1vdGVfaHN0YXRlO1xubW0vaHVnZXRsYl9zeXNmcy5jOjI1NDpcdHVuc2lnbmVkIGxvbmcgZGVtb3RlX3NpemU7XG5tbS9odWdldGxiX3N5c2ZzLmM6MjU1Olx0dW5zaWduZWQgaW50IGRlbW90ZV9vcmRlcjtcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNTYtXG5tbS9odWdldGxiX3N5c2ZzLmM6MjU3Olx0ZGVtb3RlX3NpemUgPSAodW5zaWduZWQgbG9uZyltZW1wYXJzZShidWYsIE5VTEwpO1xubW0vaHVnZXRsYl9zeXNmcy5jLTI1OC1cbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNTk6XHRkZW1vdGVfaHN0YXRlID0gc2l6ZV90b19oc3RhdGUoZGVtb3RlX3NpemUpO1xubW0vaHVnZXRsYl9zeXNmcy5jOjI2MDpcdGlmICghZGVtb3RlX2hzdGF0ZSlcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNjEtXHRcdHJldHVybiAtRUlOVkFMO1xubW0vaHVnZXRsYl9zeXNmcy5jOjI2MjpcdGRlbW90ZV9vcmRlciA9IGRlbW90ZV9oc3RhdGUtXHUwMDNlb3JkZXI7XG5tbS9odWdldGxiX3N5c2ZzLmM6MjYzOlx0aWYgKGRlbW90ZV9vcmRlciBcdTAwM2MgSFVHRVRMQl9QQUdFX09SREVSKVxubW0vaHVnZXRsYl9zeXNmcy5jLTI2NC1cdFx0cmV0dXJuIC1FSU5WQUw7XG5tbS9odWdldGxiX3N5c2ZzLmMtMjY1LVxubW0vaHVnZXRsYl9zeXNmcy5jOjI2NjpcdC8qIGRlbW90ZSBvcmRlciBtdXN0IGJlIHNtYWxsZXIgdGhhbiBoc3RhdGUgb3JkZXIgKi9cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNjctXHRoID0ga29ial90b19oc3RhdGUoa29iaiwgTlVMTCk7XG5tbS9odWdldGxiX3N5c2ZzLmM6MjY4Olx0aWYgKGRlbW90ZV9vcmRlciBcdTAwM2U9IGgtXHUwMDNlb3JkZXIpXG5tbS9odWdldGxiX3N5c2ZzLmMtMjY5LVx0XHRyZXR1cm4gLUVJTlZBTDtcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNzAtXG5tbS9odWdldGxiX3N5c2ZzLmM6MjcxOlx0LyogcmVzaXplX2xvY2sgc3luY2hyb25pemVzIGFjY2VzcyB0byBkZW1vdGUgc2l6ZSBhbmQgd3JpdGVzICovXG5tbS9odWdldGxiX3N5c2ZzLmMtMjcyLVx0bXV0ZXhfbG9jayhcdTAwMjZoLVx1MDAzZXJlc2l6ZV9sb2NrKTtcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNzM6XHRoLVx1MDAzZWRlbW90ZV9vcmRlciA9IGRlbW90ZV9vcmRlcjtcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNzQtXHRtdXRleF91bmxvY2soXHUwMDI2aC1cdTAwM2VyZXNpemVfbG9jayk7XG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jLTI3Ny19XG5tbS9odWdldGxiX3N5c2ZzLmM6Mjc4OkhTVEFURV9BVFRSKGRlbW90ZV9zaXplKTtcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNzktXG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jPTI5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBoc3RhdGVfYXR0cl9ncm91cCA9IHtcbi0tXG5tbS9odWdldGxiX3N5c2ZzLmMtMjk1LVxubW0vaHVnZXRsYl9zeXNmcy5jOjI5NjpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaHN0YXRlX2RlbW90ZV9hdHRyc1tdID0ge1xubW0vaHVnZXRsYl9zeXNmcy5jOjI5NzpcdFx1MDAyNmRlbW90ZV9zaXplX2F0dHIuYXR0cixcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyOTg6XHRcdTAwMjZkZW1vdGVfYXR0ci5hdHRyLFxubW0vaHVnZXRsYl9zeXNmcy5jLTI5OS1cdE5VTEwsXG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jLTMwMS1cbm1tL2h1Z2V0bGJfc3lzZnMuYzozMDI6c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaHN0YXRlX2RlbW90ZV9hdHRyX2dyb3VwID0ge1xubW0vaHVnZXRsYl9zeXNmcy5jOjMwMzpcdC5hdHRycyA9IGhzdGF0ZV9kZW1vdGVfYXR0cnMsXG5tbS9odWdldGxiX3N5c2ZzLmMtMzA0LX07XG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jPTMwNj1zdGF0aWMgaW50IGh1Z2V0bGJfc3lzZnNfYWRkX2hzdGF0ZShzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3Qga29iamVjdCAqcGFyZW50LFxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0zMjMtXG5tbS9odWdldGxiX3N5c2ZzLmM6MzI0Olx0aWYgKGgtXHUwMDNlZGVtb3RlX29yZGVyKSB7XG5tbS9odWdldGxiX3N5c2ZzLmMtMzI1LVx0XHRyZXR2YWwgPSBzeXNmc19jcmVhdGVfZ3JvdXAoaHN0YXRlX2tvYmpzW2hpXSxcbm1tL2h1Z2V0bGJfc3lzZnMuYzozMjY6XHRcdFx0XHRcdCAgICBcdTAwMjZoc3RhdGVfZGVtb3RlX2F0dHJfZ3JvdXApO1xubW0vaHVnZXRsYl9zeXNmcy5jLTMyNy1cdFx0aWYgKHJldHZhbCkge1xubW0vaHVnZXRsYl9zeXNmcy5jOjMyODpcdFx0XHRwcl93YXJuKFwmIzM0O0h1Z2VUTEIgdW5hYmxlIHRvIGNyZWF0ZSBkZW1vdGUgaW50ZXJmYWNlcyBmb3IgJXNcXG5cJiMzNDssIGgtXHUwMDNlbmFtZSk7XG5tbS9odWdldGxiX3N5c2ZzLmMtMzI5LVx0XHRcdHN5c2ZzX3JlbW92ZV9ncm91cChoc3RhdGVfa29ianNbaGldLCBoc3RhdGVfYXR0cl9ncm91cCk7XG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jPTM5Nj12b2lkIGh1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKVxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy00MDktXHRcdFx0Y29udGludWU7XG5tbS9odWdldGxiX3N5c2ZzLmM6NDEwOlx0XHRpZiAoaC1cdTAwM2VkZW1vdGVfb3JkZXIpXG5tbS9odWdldGxiX3N5c2ZzLmM6NDExOlx0XHRcdHN5c2ZzX3JlbW92ZV9ncm91cChoc3RhdGVfa29iaiwgXHUwMDI2aHN0YXRlX2RlbW90ZV9hdHRyX2dyb3VwKTtcbm1tL2h1Z2V0bGJfc3lzZnMuYy00MTItXHRcdHN5c2ZzX3JlbW92ZV9ncm91cChoc3RhdGVfa29iaiwgXHUwMDI2cGVyX25vZGVfaHN0YXRlX2F0dHJfZ3JvdXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTg1CgkJCQkJCQlvdXRwdXQ6IDkxCgkJCQkJCQl0aG91Z2h0czogNjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEh1Z2VUTEIgRGVtb3Rpb24gUGF0Y2gqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY3J1Y2lhbCBmaXggcmVsYXRlZCB0byBIdWdlVExCIHBhZ2UgZGVtb3Rpb24sIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBgZGVtb3RlYCBzeXNmcyBmaWxlIHdoZW4gYGgtJmd0O2RlbW90ZV9vcmRlcmAgaXNuJiMzOTt0IHplcm8uIEl0JiMzOTtzIGFkZHJlc3NpbmcgYSBidWcgaW4gdGhlIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBpc3N1ZXMgd2l0aCBob3cgc3VycGx1cyBhY2NvdW50aW5nIHdhcyBoYW5kbGVkIG9uIGEgcGVyLW5vZGUgYmFzaXMsIGFuZCB0aGUgY2hlY2sgZm9yIGBucl9hdmFpbGFibGVgIHdhc24mIzM5O3Qgcm9idXN0IGVub3VnaC4KCkxvb2tpbmcgY2xvc2VyLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHdhcnJhbnRzIGZ1enppbmcuIFRoZSBrZXkgZnVuY3Rpb24gdG8gemVybyBpbiBvbiBpcyBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBiZXNpZGVzIHRoZSBgSFVHRVRMQkZTYCBjb25maWcgYXJlIHJlbGV2YW50LiBCdXQgYEhVR0VUTEJfUEFHRWAgaXMgdGhlIG1haW4gdGhpbmcgYW5kIGl0IGlzIGRlZmluZWQgYXMgYGRlZl9ib29sIEhVR0VUTEJGU2AsIHNvIGBIVUdFVExCRlNgIGlzIHN1ZmZpY2llbnQuCgpJ4oCZdmUgY29uZmlybWVkIHRoYXQgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgaXMgb25seSBjYWxsZWQgZnJvbSBgZGVtb3RlX3N0b3JlYCwgYW5kIGBkZW1vdGVfc3RvcmVgIGlzIHN0YXRpYy4gVGhpcyBtZWFucyBkaXJlY3RseSB0YXJnZXRpbmcgYGRlbW90ZV9zdG9yZWAgYnkgbmFtZSBpbiBzeXprYWxsZXIgaXNuJiMzOTt0IHRoZSBiZXN0IGFwcHJvYWNoLCBzbyBJJiMzOTtsbCBzdGF5IGZvY3VzZWQgb24gYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAuCgpBZnRlciBhIHF1aWNrIHJldmlldyBvZiB0aGUgY29kZSBkaWZmLCB0aGUgZml4IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaW1wcm92ZWQgYWNjb3VudGluZyBhbmQgYXZhaWxhYmlsaXR5IGNoZWNrcyB3aXRoaW4gdGhlIHBlci1ub2RlIGxvb3AuIFRoaXMgcmVpbmZvcmNlcyBteSBpbml0aWFsIGFzc2Vzc21lbnQgdGhhdCB0aGlzIGlzIGEgdmFsdWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKVGhlcmVmb3JlLCBteSBwbGFuIGlzOgoKKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKioKKiAgICoqRm9jdXNTeW1ib2xzOiBcWyYjMzQ7ZGVtb3RlXF9wb29sXF9odWdlXF9wYWdlJiMzNDtcXSoqCiogICAqKkVuYWJsZUNvbmZpZ3M6IFxbJiMzNDtIVUdFVExCRlMmIzM0O1xdKioKKiAgICoqUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBIdWdlVExCIHBhZ2UgZGVtb3Rpb24gbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgc3VycGx1cyBhY2NvdW50aW5nIGFuZCBhdmFpbGFibGUgcGFnZSBjaGVja2luZyBkdXJpbmcgZGVtb3Rpb24uIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHRoZSAmIzM5O2RlbW90ZSYjMzk7IHN5c2ZzIGludGVyZmFjZSBmb3IgSHVnZVRMQiBwYWdlcy4mIzM0OyoqCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZW1vdGVfcG9vbF9odWdlX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSHVnZVRMQiBwYWdlIGRlbW90aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIHN1cnBsdXMgYWNjb3VudGluZyBhbmQgYXZhaWxhYmxlIHBhZ2UgY2hlY2tpbmcgZHVyaW5nIGRlbW90aW9uLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgJiMzOTtkZW1vdGUmIzM5OyBzeXNmcyBpbnRlcmZhY2UgZm9yIEh1Z2VUTEIgcGFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RlbW90ZV9wb29sX2h1Z2VfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBIdWdlVExCIHBhZ2UgZGVtb3Rpb24gbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgc3VycGx1cyBhY2NvdW50aW5nIGFuZCBhdmFpbGFibGUgcGFnZSBjaGVja2luZyBkdXJpbmcgZGVtb3Rpb24uIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHRoZSAmIzM5O2RlbW90ZSYjMzk7IHN5c2ZzIGludGVyZmFjZSBmb3IgSHVnZVRMQiBwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaHVnZSBwYWdlIGRlbW90aW9uIGxvZ2ljIGluIGBtbS9odWdldGxiLmNgIGFuZCBgbW0vaHVnZXRsYl9zeXNmcy5jYCwgc3BlY2lmaWNhbGx5IGFkZHJlc3Npbmcgc3VycGx1cyBwYWdlIGFjY291bnRpbmcgYW5kIGF2YWlsYWJsZSBwYWdlIGNhbGN1bGF0aW9ucy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcy4gQWxsIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9naWMgZXJyb3JzLCBsaXN0IGNvcnJ1cHRpb24sIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTM1MGYxODQ1NjliZDg5YjI5NmQzMzY4ZTM4MGJkZWRjMzk1M2ZmYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDA0OjUxOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IGVkMjYxMDViODRkZTIuLmFlMjZkNDAwYWQzMWYgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTM5ODMsNiAmIzQzOzM5ODMsNyBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsCiAJc3RydWN0IGhzdGF0ZSAqZHN0OwogCWxvbmcgcmMgPSAwOwogCWxvbmcgbnJfZGVtb3RlZCA9IDA7CiYjNDM7CWxvbmcgbnJfcGVyc2lzdGVudCA9IDA7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7aHVnZXRsYl9sb2NrKTsKIApAQCAtMzk5NSwyMiAmIzQzOzM5OTYsNjAgQEAgbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLAogCiAJZm9yX2VhY2hfbm9kZV9tYXNrX3RvX2ZyZWUoc3JjLCBucl9ub2Rlcywgbm9kZSwgbm9kZXNfYWxsb3dlZCkgewogCQlMSVNUX0hFQUQobGlzdCk7CiYjNDM7CQlMSVNUX0hFQUQoc3VycGx1c19saXN0KTsKIAkJc3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7CiYjNDM7CQl1bnNpZ25lZCBsb25nIG5yX2F2YWlsYWJsZSwgbnJfdGFyZ2V0OwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFJlLWNoZWNrIGF2YWlsYWJsZSBlYWNoIG5vZGUgYmF0Y2g6IHRoZSBwcmV2aW91cwomIzQzOwkJICogYmF0Y2ggcmVsZWFzZWQgaHVnZXRsYl9sb2NrIGZvciB2bWVtbWFwIHJlc3RvcmUvc3BsaXQsCiYjNDM7CQkgKiBhbmQgYSBuZXcgcmVzZXJ2YXRpb24gY291bGQgaGF2ZSBiZWVuIGFkZGVkIGluIHRoYXQKJiM0MzsJCSAqIHdpbmRvdywgc2hyaW5raW5nIHRoZSBidWRnZXQuICBhdmFpbGFibGUgaXMgZ2xvYmFsCiYjNDM7CQkgKiAocmVzdiBpcyBub3QgcGVyLW5vZGUpLCBzbyAwIG1lYW5zIG5vIG5vZGUgY2FuCiYjNDM7CQkgKiBjb250cmlidXRlIC0tIHN0b3AgdGhlIHdob2xlIHNjYW4uCiYjNDM7CQkgKi8KJiM0MzsJCW5yX2F2YWlsYWJsZSA9IGF2YWlsYWJsZV9odWdlX3BhZ2VzKHNyYyk7CiYjNDM7CQlpZiAoIW5yX2F2YWlsYWJsZSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBDYXAgdGhpcyBiYXRjaCBhdCB0aGUgY3VycmVudCBidWRnZXQ7IGV4cHJlc3NlZCBhcyBhCiYjNDM7CQkgKiBjdW11bGF0aXZlIHN0b3AgcG9pbnQgYmVjYXVzZSBucl9kZW1vdGVkIGlzIHJ1bm5pbmcuCiYjNDM7CQkgKi8KJiM0MzsJCW5yX3RhcmdldCA9IG5yX2RlbW90ZWQgJiM0MzsgbWluX3QodW5zaWduZWQgbG9uZywKJiM0MzsJCQkJbnJfdG9fZGVtb3RlIC0gbnJfZGVtb3RlZCwgbnJfYXZhaWxhYmxlKTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsICZhbXA7c3JjLSZndDtodWdlcGFnZV9mcmVlbGlzdHNbbm9kZV0sIGxydSkgewomIzQzOwkJCWJvb2wgYWRqdXN0X3N1cnBsdXM7CiYjNDM7CiAJCQlpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpCiAJCQkJY29udGludWU7CiAKLQkJCXJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTsKLQkJCWxpc3RfYWRkKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtsaXN0KTsKJiM0MzsJCQkvKiBTdXJwbHVzIGFjY291bnRpbmcgaXMgbWFpbnRhaW5lZCBwZXIgbm9kZSwgbm90IHBlciBmb2xpby4gKi8KJiM0MzsJCQlhZGp1c3Rfc3VycGx1cyA9IHNyYy0mZ3Q7c3VycGx1c19odWdlX3BhZ2VzX25vZGVbbm9kZV0gJmd0OyAwOwomIzQzOwkJCXJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGFkanVzdF9zdXJwbHVzKTsKJiM0MzsJCQlsaXN0X2FkZCgmYW1wO2ZvbGlvLSZndDtscnUsIGFkanVzdF9zdXJwbHVzID8gJmFtcDtzdXJwbHVzX2xpc3QgOiAmYW1wO2xpc3QpOwomIzQzOwkJCWlmICghYWRqdXN0X3N1cnBsdXMpCiYjNDM7CQkJCW5yX3BlcnNpc3RlbnQmIzQzOyYjNDM7OwogCi0JCQlpZiAoJiM0MzsmIzQzO25yX2RlbW90ZWQgPT0gbnJfdG9fZGVtb3RlKQomIzQzOwkJCWlmICgmIzQzOyYjNDM7bnJfZGVtb3RlZCA9PSBucl90YXJnZXQpCiAJCQkJYnJlYWs7CiAJCX0KIAomIzQzOwkJaWYgKGxpc3RfZW1wdHkoJmFtcDtsaXN0KSAmYW1wOyZhbXA7IGxpc3RfZW1wdHkoJmFtcDtzdXJwbHVzX2xpc3QpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwogCQlzcGluX3VubG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCi0JCXJjID0gZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3JjLCBkc3QsICZhbXA7bGlzdCk7CiYjNDM7CQlpZiAoIWxpc3RfZW1wdHkoJmFtcDtsaXN0KSkKJiM0MzsJCQlyYyA9IGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHNyYywgZHN0LCAmYW1wO2xpc3QpOwomIzQzOwkJaWYgKCFsaXN0X2VtcHR5KCZhbXA7c3VycGx1c19saXN0KSkgewomIzQzOwkJCWxvbmcgdG1wX3JjOwomIzQzOwomIzQzOwkJCXRtcF9yYyA9IGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHNyYywgZHN0LCAmYW1wO3N1cnBsdXNfbGlzdCk7CiYjNDM7CQkJaWYgKHJjICZndDs9IDApCiYjNDM7CQkJCXJjID0gdG1wX3JjOwomIzQzOwkJfQogCiAJCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCkBAIC00MDE4LDYgJiM0Mzs0MDU3LDE0IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCwKIAkJCWxpc3RfZGVsKCZhbXA7Zm9saW8tJmd0O2xydSk7CiAJCQlhZGRfaHVnZXRsYl9mb2xpbyhzcmMsIGZvbGlvLCBmYWxzZSk7CiAKJiM0MzsJCQlucl9kZW1vdGVkLS07CiYjNDM7CQkJbnJfcGVyc2lzdGVudC0tOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCBuZXh0LCAmYW1wO3N1cnBsdXNfbGlzdCwgbHJ1KSB7CiYjNDM7CQkJbGlzdF9kZWwoJmFtcDtmb2xpby0mZ3Q7bHJ1KTsKJiM0MzsJCQlhZGRfaHVnZXRsYl9mb2xpbyhzcmMsIGZvbGlvLCB0cnVlKTsKJiM0MzsKIAkJCW5yX2RlbW90ZWQtLTsKIAkJfQogCkBAIC00MDI5LDcgJiM0Mzs0MDc2LDcgQEAgbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLAogCSAqIE5vdCBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSwgYnV0IGZvciBjb25zaXN0ZW5jeSB1cGRhdGUgbWF4X2h1Z2VfcGFnZXMKIAkgKiBiYXNlZCBvbiBwb29sIGNoYW5nZXMgZm9yIHRoZSBkZW1vdGVkIHBhZ2UuCiAJICovCi0Jc3JjLSZndDttYXhfaHVnZV9wYWdlcyAtPSBucl9kZW1vdGVkOwomIzQzOwlzcmMtJmd0O21heF9odWdlX3BhZ2VzIC09IG5yX3BlcnNpc3RlbnQ7CiAJZHN0LSZndDttYXhfaHVnZV9wYWdlcyAmIzQzOz0gbnJfZGVtb3RlZCAmbHQ7Jmx0OyAoaHVnZV9wYWdlX29yZGVyKHNyYykgLSBodWdlX3BhZ2Vfb3JkZXIoZHN0KSk7CiAKIAlpZiAocmMgJmx0OyAwKQpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9zeXNmcy5jIGIvbW0vaHVnZXRsYl9zeXNmcy5jCmluZGV4IDc5ZWNlOTE0MDZiZmEuLjMyNmE1NGI0ZDk5MWMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGJfc3lzZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiX3N5c2ZzLmMKQEAgLTIxMSwxNSAmIzQzOzIxMSwxNSBAQCBzdGF0aWMgc3NpemVfdCBkZW1vdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCSAqIENoZWNrIGZvciBhdmFpbGFibGUgcGFnZXMgdG8gZGVtb3RlIGVhY2ggdGltZSB0aG9yb3VnaCB0aGUKIAkJICogbG9vcCBhcyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Ugd2lsbCBkcm9wIGh1Z2V0bGJfbG9jay4KIAkJICovCiYjNDM7CQlucl9hdmFpbGFibGUgPSBoLSZndDtmcmVlX2h1Z2VfcGFnZXMgLSBoLSZndDtyZXN2X2h1Z2VfcGFnZXM7CiAJCWlmIChuaWQgIT0gTlVNQV9OT19OT0RFKQotCQkJbnJfYXZhaWxhYmxlID0gaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzX25vZGVbbmlkXTsKLQkJZWxzZQotCQkJbnJfYXZhaWxhYmxlID0gaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzOwotCQlucl9hdmFpbGFibGUgLT0gaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzOwomIzQzOwkJCW5yX2F2YWlsYWJsZSA9IG1pbihucl9hdmFpbGFibGUsCiYjNDM7CQkJCQkgICBoLSZndDtmcmVlX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKTsKIAkJaWYgKCFucl9hdmFpbGFibGUpCiAJCQlicmVhazsKIAotCQlyYyA9IGRlbW90ZV9wb29sX2h1Z2VfcGFnZShoLCBuX21hc2ssIG5yX2RlbW90ZSk7CiYjNDM7CQlyYyA9IGRlbW90ZV9wb29sX2h1Z2VfcGFnZShoLCBuX21hc2ssCiYjNDM7CQkJCQkgICBtaW4obnJfZGVtb3RlLCBucl9hdmFpbGFibGUpKTsKIAkJaWYgKHJjICZsdDsgMCkgewogCQkJZXJyID0gcmM7CiAJCQlicmVhazsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MzkKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogMjM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEh1Z2UgUGFnZSBEZW1vdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGluIGBtbS9odWdldGxiLmNgIGFuZCBgZGVtb3RlX3N0b3JlYCBpbiBgbW0vaHVnZXRsYl9zeXNmcy5jYC4gSXQmIzM5O3MgYWxsIGFib3V0IGhvdyB3ZSBoYW5kbGUgaHVnZSBwYWdlIGRlbW90aW9uIOKAkyBkZWFsaW5nIHdpdGggdGhvc2Ugc3VycGx1cyBwYWdlcyBhbmQga2VlcGluZyB0aGUgYXZhaWxhYmxlIHBhZ2UgY291bnQgYWNjdXJhdGUuIEdvb2QuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmVkIGZsYWdzLiBObyBuZXcgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc2lnbiBmcm9tIGEgbWVtb3J5IHBlcnNwZWN0aXZlLiBBYnNvbHV0ZWx5IG5vIGtlcm5lbC10by11c2VyIGNvcGllcyBlaXRoZXIsIHNvIG5vIHJpc2sgdGhlcmUuIEFuZCwgYmFzZWQgb24gdGhpcyBpbml0aWFsIHNraW0sIHRoZXJlJiMzOTtzIG5vIHdheSBJIHNlZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZ2V0dGluZyBpbnRyb2R1Y2VkIG9yIHVzZWQsIHdoaWNoIGlzIGEgYmlnIGNvbmNlcm4uIFRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBwdXJlbHkgbG9naWMtZHJpdmVuLCBmb2N1c2VkIG9uIGFjY291bnRpbmcsIGxpc3QgbWFuaXB1bGF0aW9uLCBhbmQgbG9vcCBjb250cm9sIHdpdGhpbiB0aGUgZXhpc3RpbmcgaHVnZSBwYWdlIG1hbmFnZW1lbnQgZnJhbWV3b3JrLgoKTGV0JiMzOTtzIGRvIGEgbW9yZSB0aG9yb3VnaCBjaGVjayBvZiB0aGUgdmFyaWFibGVzLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gT2theSwgYG5yX3BlcnNpc3RlbnRgIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQgdG8gemVyby4gSSBjYW4gc2VlIHRoZSBjYWxjdWxhdGlvbnMgZm9yIGBucl9hdmFpbGFibGVgIGFuZCBgbnJfdGFyZ2V0YCDigJMgdGhhdCBsb29rcyByaWdodC4gVGhlIGBhZGp1c3Rfc3VycGx1c2AgYm9vbGVhbiBtYWtlcyBzZW5zZSwgYXMgZG9lcyB0aGUgdXNlIG9mIGBzdXJwbHVzX2xpc3RgIGFzIGEgbGlzdCBoZWFkLiBObyBpc3N1ZXMgdGhlcmUuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBFeGNlbGxlbnQuCgpHaXZlbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoIGRvZXMgKm5vdCogcmVxdWlyZSBLTVNBTi4gVGhlIGxvZ2ljIGlzIHNlbGYtY29udGFpbmVkLCBhbmQgdGhlIHBvdGVudGlhbCByaXNrcyBhcmUgYWRlcXVhdGVseSBhZGRyZXNzZWQgYnkgc3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiwgaWYgbmVlZGVkLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBsb2dpYyBidWdzIHdoaWNoIGFyZSBtb3JlIHJlbGV2YW50IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdlIHBhZ2UgZGVtb3Rpb24gbG9naWMgaW4gYG1tL2h1Z2V0bGIuY2AgYW5kIGBtbS9odWdldGxiX3N5c2ZzLmNgLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBzdXJwbHVzIHBhZ2UgYWNjb3VudGluZyBhbmQgYXZhaWxhYmxlIHBhZ2UgY2FsY3VsYXRpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbGwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMsIGxpc3QgY29ycnVwdGlvbiwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGh1Z2UgcGFnZSBkZW1vdGlvbiBsb2dpYyBpbiBgbW0vaHVnZXRsYi5jYCBhbmQgYG1tL2h1Z2V0bGJfc3lzZnMuY2AsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIHN1cnBsdXMgcGFnZSBhY2NvdW50aW5nIGFuZCBhdmFpbGFibGUgcGFnZSBjYWxjdWxhdGlvbnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMuIEFsbCB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIGxvZ2ljIGVycm9ycywgbGlzdCBjb3JydXB0aW9uLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjA1LjYxOTc5NTExMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODg3NjQyNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRlbW90ZV9wb29sX2h1Z2VfcGFnZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGh1Z2UgcGFnZSBkZW1vdGlvbiBsb2dpYyBpbiBgbW0vaHVnZXRsYi5jYCBhbmQgYG1tL2h1Z2V0bGJfc3lzZnMuY2AsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIHN1cnBsdXMgcGFnZSBhY2NvdW50aW5nIGFuZCBhdmFpbGFibGUgcGFnZSBjYWxjdWxhdGlvbnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMuIEFsbCB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIGxvZ2ljIGVycm9ycywgbGlzdCBjb3JydXB0aW9uLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSHVnZVRMQiBwYWdlIGRlbW90aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIHN1cnBsdXMgYWNjb3VudGluZyBhbmQgYXZhaWxhYmxlIHBhZ2UgY2hlY2tpbmcgZHVyaW5nIGRlbW90aW9uLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgJ2RlbW90ZScgc3lzZnMgaW50ZXJmYWNlIGZvciBIdWdlVExCIHBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MTowNS42MTk4MDE1OTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTMzNTY3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5MzUwZjE4NDU2OWJkODliMjk2ZDMzNjhlMzgwYmRlZGMzOTUzZmZjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIzIDA0OjUxOjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IGVkMjYxMDViODRkZTIuLmFlMjZkNDAwYWQzMWYgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYi5jXFxuKysrIGIvbW0vaHVnZXRsYi5jXFxuQEAgLTM5ODMsNiArMzk4Myw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG4gXFx0c3RydWN0IGhzdGF0ZSAqZHN0O1xcbiBcXHRsb25nIHJjID0gMDtcXG4gXFx0bG9uZyBucl9kZW1vdGVkID0gMDtcXG4rXFx0bG9uZyBucl9wZXJzaXN0ZW50ID0gMDtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcbkBAIC0zOTk1LDIyICszOTk2LDYwIEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG4gXFxuIFxcdGZvcl9lYWNoX25vZGVfbWFza190b19mcmVlKHNyYywgbnJfbm9kZXMsIG5vZGUsIG5vZGVzX2FsbG93ZWQpIHtcXG4gXFx0XFx0TElTVF9IRUFEKGxpc3QpO1xcbitcXHRcXHRMSVNUX0hFQUQoc3VycGx1c19saXN0KTtcXG4gXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgbnJfYXZhaWxhYmxlLCBucl90YXJnZXQ7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBSZS1jaGVjayBhdmFpbGFibGUgZWFjaCBub2RlIGJhdGNoOiB0aGUgcHJldmlvdXNcXG4rXFx0XFx0ICogYmF0Y2ggcmVsZWFzZWQgaHVnZXRsYl9sb2NrIGZvciB2bWVtbWFwIHJlc3RvcmUvc3BsaXQsXFxuK1xcdFxcdCAqIGFuZCBhIG5ldyByZXNlcnZhdGlvbiBjb3VsZCBoYXZlIGJlZW4gYWRkZWQgaW4gdGhhdFxcbitcXHRcXHQgKiB3aW5kb3csIHNocmlua2luZyB0aGUgYnVkZ2V0LiAgYXZhaWxhYmxlIGlzIGdsb2JhbFxcbitcXHRcXHQgKiAocmVzdiBpcyBub3QgcGVyLW5vZGUpLCBzbyAwIG1lYW5zIG5vIG5vZGUgY2FuXFxuK1xcdFxcdCAqIGNvbnRyaWJ1dGUgLS0gc3RvcCB0aGUgd2hvbGUgc2Nhbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG5yX2F2YWlsYWJsZSA9IGF2YWlsYWJsZV9odWdlX3BhZ2VzKHNyYyk7XFxuK1xcdFxcdGlmICghbnJfYXZhaWxhYmxlKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIENhcCB0aGlzIGJhdGNoIGF0IHRoZSBjdXJyZW50IGJ1ZGdldDsgZXhwcmVzc2VkIGFzIGFcXG4rXFx0XFx0ICogY3VtdWxhdGl2ZSBzdG9wIHBvaW50IGJlY2F1c2UgbnJfZGVtb3RlZCBpcyBydW5uaW5nLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bnJfdGFyZ2V0ID0gbnJfZGVtb3RlZCArIG1pbl90KHVuc2lnbmVkIGxvbmcsXFxuK1xcdFxcdFxcdFxcdG5yX3RvX2RlbW90ZSAtIG5yX2RlbW90ZWQsIG5yX2F2YWlsYWJsZSk7XFxuIFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFxcdTAwMjZzcmMtXFx1MDAzZWh1Z2VwYWdlX2ZyZWVsaXN0c1tub2RlXSwgbHJ1KSB7XFxuK1xcdFxcdFxcdGJvb2wgYWRqdXN0X3N1cnBsdXM7XFxuK1xcbiBcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpO1xcbi1cXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmxpc3QpO1xcbitcXHRcXHRcXHQvKiBTdXJwbHVzIGFjY291bnRpbmcgaXMgbWFpbnRhaW5lZCBwZXIgbm9kZSwgbm90IHBlciBmb2xpby4gKi9cXG4rXFx0XFx0XFx0YWRqdXN0X3N1cnBsdXMgPSBzcmMtXFx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25vZGVdIFxcdTAwM2UgMDtcXG4rXFx0XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgYWRqdXN0X3N1cnBsdXMpO1xcbitcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgYWRqdXN0X3N1cnBsdXMgPyBcXHUwMDI2c3VycGx1c19saXN0IDogXFx1MDAyNmxpc3QpO1xcbitcXHRcXHRcXHRpZiAoIWFkanVzdF9zdXJwbHVzKVxcbitcXHRcXHRcXHRcXHRucl9wZXJzaXN0ZW50Kys7XFxuIFxcbi1cXHRcXHRcXHRpZiAoKytucl9kZW1vdGVkID09IG5yX3RvX2RlbW90ZSlcXG4rXFx0XFx0XFx0aWYgKCsrbnJfZGVtb3RlZCA9PSBucl90YXJnZXQpXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bGlzdCkgXFx1MDAyNlxcdTAwMjYgbGlzdF9lbXB0eShcXHUwMDI2c3VycGx1c19saXN0KSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbiBcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcbi1cXHRcXHRyYyA9IGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHNyYywgZHN0LCBcXHUwMDI2bGlzdCk7XFxuK1xcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2bGlzdCkpXFxuK1xcdFxcdFxcdHJjID0gZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3JjLCBkc3QsIFxcdTAwMjZsaXN0KTtcXG4rXFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZzdXJwbHVzX2xpc3QpKSB7XFxuK1xcdFxcdFxcdGxvbmcgdG1wX3JjO1xcbitcXG4rXFx0XFx0XFx0dG1wX3JjID0gZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3JjLCBkc3QsIFxcdTAwMjZzdXJwbHVzX2xpc3QpO1xcbitcXHRcXHRcXHRpZiAocmMgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0XFx0cmMgPSB0bXBfcmM7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcbkBAIC00MDE4LDYgKzQwNTcsMTQgQEAgbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxcbiBcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSk7XFxuIFxcdFxcdFxcdGFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcXG4gXFxuK1xcdFxcdFxcdG5yX2RlbW90ZWQtLTtcXG4rXFx0XFx0XFx0bnJfcGVyc2lzdGVudC0tO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFxcdTAwMjZzdXJwbHVzX2xpc3QsIGxydSkge1xcbitcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSk7XFxuK1xcdFxcdFxcdGFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIHRydWUpO1xcbitcXG4gXFx0XFx0XFx0bnJfZGVtb3RlZC0tO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC00MDI5LDcgKzQwNzYsNyBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXFxuIFxcdCAqIE5vdCBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSwgYnV0IGZvciBjb25zaXN0ZW5jeSB1cGRhdGUgbWF4X2h1Z2VfcGFnZXNcXG4gXFx0ICogYmFzZWQgb24gcG9vbCBjaGFuZ2VzIGZvciB0aGUgZGVtb3RlZCBwYWdlLlxcbiBcXHQgKi9cXG4tXFx0c3JjLVxcdTAwM2VtYXhfaHVnZV9wYWdlcyAtPSBucl9kZW1vdGVkO1xcbitcXHRzcmMtXFx1MDAzZW1heF9odWdlX3BhZ2VzIC09IG5yX3BlcnNpc3RlbnQ7XFxuIFxcdGRzdC1cXHUwMDNlbWF4X2h1Z2VfcGFnZXMgKz0gbnJfZGVtb3RlZCBcXHUwMDNjXFx1MDAzYyAoaHVnZV9wYWdlX29yZGVyKHNyYykgLSBodWdlX3BhZ2Vfb3JkZXIoZHN0KSk7XFxuIFxcbiBcXHRpZiAocmMgXFx1MDAzYyAwKVxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3N5c2ZzLmMgYi9tbS9odWdldGxiX3N5c2ZzLmNcXG5pbmRleCA3OWVjZTkxNDA2YmZhLi4zMjZhNTRiNGQ5OTFjIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGJfc3lzZnMuY1xcbisrKyBiL21tL2h1Z2V0bGJfc3lzZnMuY1xcbkBAIC0yMTEsMTUgKzIxMSwxNSBAQCBzdGF0aWMgc3NpemVfdCBkZW1vdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuIFxcdFxcdCAqIENoZWNrIGZvciBhdmFpbGFibGUgcGFnZXMgdG8gZGVtb3RlIGVhY2ggdGltZSB0aG9yb3VnaCB0aGVcXG4gXFx0XFx0ICogbG9vcCBhcyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Ugd2lsbCBkcm9wIGh1Z2V0bGJfbG9jay5cXG4gXFx0XFx0ICovXFxuK1xcdFxcdG5yX2F2YWlsYWJsZSA9IGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlcyAtIGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcztcXG4gXFx0XFx0aWYgKG5pZCAhPSBOVU1BX05PX05PREUpXFxuLVxcdFxcdFxcdG5yX2F2YWlsYWJsZSA9IGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlc19ub2RlW25pZF07XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bnJfYXZhaWxhYmxlID0gaC1cXHUwMDNlZnJlZV9odWdlX3BhZ2VzO1xcbi1cXHRcXHRucl9hdmFpbGFibGUgLT0gaC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzO1xcbitcXHRcXHRcXHRucl9hdmFpbGFibGUgPSBtaW4obnJfYXZhaWxhYmxlLFxcbitcXHRcXHRcXHRcXHRcXHQgICBoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKTtcXG4gXFx0XFx0aWYgKCFucl9hdmFpbGFibGUpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4tXFx0XFx0cmMgPSBkZW1vdGVfcG9vbF9odWdlX3BhZ2UoaCwgbl9tYXNrLCBucl9kZW1vdGUpO1xcbitcXHRcXHRyYyA9IGRlbW90ZV9wb29sX2h1Z2VfcGFnZShoLCBuX21hc2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIG1pbihucl9kZW1vdGUsIG5yX2F2YWlsYWJsZSkpO1xcbiBcXHRcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdGVyciA9IHJjO1xcbiBcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6MDYuODczNzA5OTgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDY3OTA4NTg1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGVtb3RlX3Bvb2xfaHVnZV9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSHVnZVRMQiBwYWdlIGRlbW90aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIHN1cnBsdXMgYWNjb3VudGluZyBhbmQgYXZhaWxhYmxlIHBhZ2UgY2hlY2tpbmcgZHVyaW5nIGRlbW90aW9uLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgJ2RlbW90ZScgc3lzZnMgaW50ZXJmYWNlIGZvciBIdWdlVExCIHBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MzUwZjE4NDU2OWJkODliMjk2ZDMzNjhlMzgwYmRlZGMzOTUzZmZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMDQ6NTE6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGVkMjYxMDViODRkZTIuLmFlMjZkNDAwYWQzMWYgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTM5ODMsNiArMzk4Myw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdHN0cnVjdCBoc3RhdGUgKmRzdDtcbiBcdGxvbmcgcmMgPSAwO1xuIFx0bG9uZyBucl9kZW1vdGVkID0gMDtcbitcdGxvbmcgbnJfcGVyc2lzdGVudCA9IDA7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXG5AQCAtMzk5NSwyMiArMzk5Niw2MCBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4gXG4gXHRmb3JfZWFjaF9ub2RlX21hc2tfdG9fZnJlZShzcmMsIG5yX25vZGVzLCBub2RlLCBub2Rlc19hbGxvd2VkKSB7XG4gXHRcdExJU1RfSEVBRChsaXN0KTtcbitcdFx0TElTVF9IRUFEKHN1cnBsdXNfbGlzdCk7XG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sICpuZXh0O1xuK1x0XHR1bnNpZ25lZCBsb25nIG5yX2F2YWlsYWJsZSwgbnJfdGFyZ2V0O1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBSZS1jaGVjayBhdmFpbGFibGUgZWFjaCBub2RlIGJhdGNoOiB0aGUgcHJldmlvdXNcbitcdFx0ICogYmF0Y2ggcmVsZWFzZWQgaHVnZXRsYl9sb2NrIGZvciB2bWVtbWFwIHJlc3RvcmUvc3BsaXQsXG4rXHRcdCAqIGFuZCBhIG5ldyByZXNlcnZhdGlvbiBjb3VsZCBoYXZlIGJlZW4gYWRkZWQgaW4gdGhhdFxuK1x0XHQgKiB3aW5kb3csIHNocmlua2luZyB0aGUgYnVkZ2V0LiAgYXZhaWxhYmxlIGlzIGdsb2JhbFxuK1x0XHQgKiAocmVzdiBpcyBub3QgcGVyLW5vZGUpLCBzbyAwIG1lYW5zIG5vIG5vZGUgY2FuXG4rXHRcdCAqIGNvbnRyaWJ1dGUgLS0gc3RvcCB0aGUgd2hvbGUgc2Nhbi5cbitcdFx0ICovXG4rXHRcdG5yX2F2YWlsYWJsZSA9IGF2YWlsYWJsZV9odWdlX3BhZ2VzKHNyYyk7XG4rXHRcdGlmICghbnJfYXZhaWxhYmxlKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBDYXAgdGhpcyBiYXRjaCBhdCB0aGUgY3VycmVudCBidWRnZXQ7IGV4cHJlc3NlZCBhcyBhXG4rXHRcdCAqIGN1bXVsYXRpdmUgc3RvcCBwb2ludCBiZWNhdXNlIG5yX2RlbW90ZWQgaXMgcnVubmluZy5cbitcdFx0ICovXG4rXHRcdG5yX3RhcmdldCA9IG5yX2RlbW90ZWQgKyBtaW5fdCh1bnNpZ25lZCBsb25nLFxuK1x0XHRcdFx0bnJfdG9fZGVtb3RlIC0gbnJfZGVtb3RlZCwgbnJfYXZhaWxhYmxlKTtcbiBcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCBuZXh0LCBcdTAwMjZzcmMtXHUwMDNlaHVnZXBhZ2VfZnJlZWxpc3RzW25vZGVdLCBscnUpIHtcbitcdFx0XHRib29sIGFkanVzdF9zdXJwbHVzO1xuK1xuIFx0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcbi1cdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxpc3QpO1xuK1x0XHRcdC8qIFN1cnBsdXMgYWNjb3VudGluZyBpcyBtYWludGFpbmVkIHBlciBub2RlLCBub3QgcGVyIGZvbGlvLiAqL1xuK1x0XHRcdGFkanVzdF9zdXJwbHVzID0gc3JjLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25vZGVdIFx1MDAzZSAwO1xuK1x0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGFkanVzdF9zdXJwbHVzKTtcbitcdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIGFkanVzdF9zdXJwbHVzID8gXHUwMDI2c3VycGx1c19saXN0IDogXHUwMDI2bGlzdCk7XG4rXHRcdFx0aWYgKCFhZGp1c3Rfc3VycGx1cylcbitcdFx0XHRcdG5yX3BlcnNpc3RlbnQrKztcbiBcbi1cdFx0XHRpZiAoKytucl9kZW1vdGVkID09IG5yX3RvX2RlbW90ZSlcbitcdFx0XHRpZiAoKytucl9kZW1vdGVkID09IG5yX3RhcmdldClcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4rXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmxpc3QpIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnN1cnBsdXNfbGlzdCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFxuLVx0XHRyYyA9IGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHNyYywgZHN0LCBcdTAwMjZsaXN0KTtcbitcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmxpc3QpKVxuK1x0XHRcdHJjID0gZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3JjLCBkc3QsIFx1MDAyNmxpc3QpO1xuK1x0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2c3VycGx1c19saXN0KSkge1xuK1x0XHRcdGxvbmcgdG1wX3JjO1xuK1xuK1x0XHRcdHRtcF9yYyA9IGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHNyYywgZHN0LCBcdTAwMjZzdXJwbHVzX2xpc3QpO1xuK1x0XHRcdGlmIChyYyBcdTAwM2U9IDApXG4rXHRcdFx0XHRyYyA9IHRtcF9yYztcbitcdFx0fVxuIFxuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXG5AQCAtNDAxOCw2ICs0MDU3LDE0IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuIFx0XHRcdGFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcbiBcbitcdFx0XHRucl9kZW1vdGVkLS07XG4rXHRcdFx0bnJfcGVyc2lzdGVudC0tO1xuK1x0XHR9XG4rXG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXHUwMDI2c3VycGx1c19saXN0LCBscnUpIHtcbitcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuK1x0XHRcdGFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIHRydWUpO1xuK1xuIFx0XHRcdG5yX2RlbW90ZWQtLTtcbiBcdFx0fVxuIFxuQEAgLTQwMjksNyArNDA3Niw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdCAqIE5vdCBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSwgYnV0IGZvciBjb25zaXN0ZW5jeSB1cGRhdGUgbWF4X2h1Z2VfcGFnZXNcbiBcdCAqIGJhc2VkIG9uIHBvb2wgY2hhbmdlcyBmb3IgdGhlIGRlbW90ZWQgcGFnZS5cbiBcdCAqL1xuLVx0c3JjLVx1MDAzZW1heF9odWdlX3BhZ2VzIC09IG5yX2RlbW90ZWQ7XG4rXHRzcmMtXHUwMDNlbWF4X2h1Z2VfcGFnZXMgLT0gbnJfcGVyc2lzdGVudDtcbiBcdGRzdC1cdTAwM2VtYXhfaHVnZV9wYWdlcyArPSBucl9kZW1vdGVkIFx1MDAzY1x1MDAzYyAoaHVnZV9wYWdlX29yZGVyKHNyYykgLSBodWdlX3BhZ2Vfb3JkZXIoZHN0KSk7XG4gXG4gXHRpZiAocmMgXHUwMDNjIDApXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9zeXNmcy5jIGIvbW0vaHVnZXRsYl9zeXNmcy5jXG5pbmRleCA3OWVjZTkxNDA2YmZhLi4zMjZhNTRiNGQ5OTFjIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl9zeXNmcy5jXG4rKysgYi9tbS9odWdldGxiX3N5c2ZzLmNcbkBAIC0yMTEsMTUgKzIxMSwxNSBAQCBzdGF0aWMgc3NpemVfdCBkZW1vdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdCAqIENoZWNrIGZvciBhdmFpbGFibGUgcGFnZXMgdG8gZGVtb3RlIGVhY2ggdGltZSB0aG9yb3VnaCB0aGVcbiBcdFx0ICogbG9vcCBhcyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Ugd2lsbCBkcm9wIGh1Z2V0bGJfbG9jay5cbiBcdFx0ICovXG4rXHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzIC0gaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXM7XG4gXHRcdGlmIChuaWQgIT0gTlVNQV9OT19OT0RFKVxuLVx0XHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzX25vZGVbbmlkXTtcbi1cdFx0ZWxzZVxuLVx0XHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzO1xuLVx0XHRucl9hdmFpbGFibGUgLT0gaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXM7XG4rXHRcdFx0bnJfYXZhaWxhYmxlID0gbWluKG5yX2F2YWlsYWJsZSxcbitcdFx0XHRcdFx0ICAgaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKTtcbiBcdFx0aWYgKCFucl9hdmFpbGFibGUpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdHJjID0gZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKGgsIG5fbWFzaywgbnJfZGVtb3RlKTtcbitcdFx0cmMgPSBkZW1vdGVfcG9vbF9odWdlX3BhZ2UoaCwgbl9tYXNrLFxuK1x0XHRcdFx0XHQgICBtaW4obnJfZGVtb3RlLCBucl9hdmFpbGFibGUpKTtcbiBcdFx0aWYgKHJjIFx1MDAzYyAwKSB7XG4gXHRcdFx0ZXJyID0gcmM7XG4gXHRcdFx0YnJlYWs7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MTowNi44NzM3MTE0MzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzI1NzkwOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgVGhpcyBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyBjbGVhcmx5IHRvdWNoaW5nIHRoZSBIdWdlVExCIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyBgbW0vaHVnZXRsYi5jYCBhbmQgYG1tL2h1Z2V0bGJfc3lzZnMuY2AuIFRoZSBmYWN0IHRoYXQgaXQncyBhbHRlcmluZyBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYCBhbmQgYGRlbW90ZV9zdG9yZWAgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyByZWxhdGVkIHRvIGh1Z2UgcGFnZSBkZW1vdGlvbiwgc3VycGx1cyBhY2NvdW50aW5nLCBhbmQgYXZhaWxhYmlsaXR5IGNoZWNrcyDigJMgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYXQgdGhlIGtlcm5lbCBsZXZlbC4gU2luY2UgYGRlbW90ZV9zdG9yZWAgaXMgdGllZCB0byBzeXNmcywgdGhpcyBwYXRjaCBpcyByZWFjaGFibGUgdGhyb3VnaCB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBUaGF0IG1lYW5zIHdlIGFic29sdXRlbHkgbmVlZCB0byBtYXJrIHRoaXMgZm9yIGZ1enppbmcuIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgdGhlIGNvcnJlY3QgY2FsbCBoZXJlLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgbW0vaHVnZXRsYi5jYCBpcyBnb2luZyB0byBiZSBjb21waWxlZCBpZiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgZW5hYmxlZC4gVGltZSB0byBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggZGVwZW5kcyBvbiwgdG8gcHJvcGVybHkgZGV0ZXJtaW5lIGZ1enppbmcgc3RyYXRlZ2llcywgY292ZXJhZ2UgZ29hbHMsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIHRoZSBydW5uaW5nIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ0MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjExLjE5OTUwNDg1OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTY2MTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9ODA9b2JqLSQoQ09ORklHX0hBU19ETUEpXFx0Kz0gZG1hcG9vbC5vXFxubW0vTWFrZWZpbGU6ODE6b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcXHQrPSBodWdldGxiLm8gaHVnZXRsYl9zeXNmcy5vIGh1Z2V0bGJfc3lzY3RsLm9cXG5tbS9NYWtlZmlsZS04Mi1pZmRlZiBDT05GSUdfQ01BXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjExLjI0OTE3MTE2NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzkxOTY0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIHRoZSBGb3VuZGF0aW9uOiBIdWdlVExCIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIHRoZSBjb2RlJ3MgaW5kaWNhdGluZyB0aGF0IGBDT05GSUdfSFVHRVRMQkZTYCBpcyBhIG5vbi1uZWdvdGlhYmxlIHByZXJlcXVpc2l0ZS4gTWFrZXMgc2Vuc2U7IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBodWdlIHBhZ2VzLCB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0IG5lZWRzIHRvIGJlIGluIHBsYWNlLiBOb3csIGJlZm9yZSBJIGRpdmUgYW55IGRlZXBlciwgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBhbHNvIGVuYWJsZWQuIEdvdHRhIGVuc3VyZSB0aGUgY29yZSBwYWdlIHNpemUgc3VwcG9ydCBpcyBwcmVzZW50LCBiZWZvcmUgSSBzdGFydCByZWx5aW5nIG9uIGl0LiBXb3VsZG4ndCB3YW50IHRvIGNoYXNlIG15IHRhaWwgbGF0ZXIuIEJlc3QgdG8gY29uZmlybSB0aGVzZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgcmlnaHQgYXQgdGhlIHN0YXJ0LCB0byBhdm9pZCBhbnkgc3VycHJpc2VzIGRvd24gdGhlIGxpbmUuIEl0J3MgYSBxdWljayBjaGVjaywgYnV0IGEgY3J1Y2lhbCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MToxNC4xODgzNjk1NjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0OTkyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjE0LjIzNTg3MTQyMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjIzNTI0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCwgc28gSSdtIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byBgZnMvS2NvbmZpZ2AuIEkga25vdyB0aGF0J3MgdGhlIGNlbnRyYWwgaHViIGZvciBtb3N0IGZpbGVzeXN0ZW0tcmVsYXRlZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuIExldCdzIHNlZS4uLiBhcm91bmQgbGluZSAyNTAsIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBtb3JlIGdlbmVyYWwgZmlsZXN5c3RlbSBvcHRpb25zIGJlZ2luLCBvciBwZXJoYXBzIHdoZXJlIGEgc3BlY2lmaWMgcmVsZXZhbnQgc2VjdGlvbiBiZWdpbnMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcmVsZXZhbnQgc2VjdGlvbiB0byBwYXkgYXR0ZW50aW9uIHRvLiBIb3BlZnVsbHksIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGdpdmVzIG1lIHdoYXQgSSBuZWVkLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGFyZSB0dWNrZWQgYXdheSBhcm91bmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MToxNy4zNTgyMjY0MDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI0NjpcXHRcXG4gMjQ3OlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbiAyNDg6XFx0XFx0ZGVmX2Jvb2wgblxcbiAyNDk6XFx0XFxuIDI1MDpcXHRtZW51Y29uZmlnIEhVR0VUTEJGU1xcbiAyNTE6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAyNTI6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbiAyNTM6XFx0XFx0c2VsZWN0IE1FTUZEX0NSRUFURVxcbiAyNTQ6XFx0XFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcXG4gMjU1OlxcdFxcdGhlbHBcXG4gMjU2OlxcdFxcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxcbiAyNTc6XFx0XFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXFxuIDI1ODpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNjE6XFx0XFxuIDI2MjpcXHRpZiBIVUdFVExCRlNcXG4gMjYzOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuIDI2NDpcXHRcXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MToxNy4zNTgzMjYzMzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzI0NDY3MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgSHVnZSBQYWdlcyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyBwcmV0dHkgY2xlYXI6IHVuZGVyc3RhbmRpbmcgaG93IGBIVUdFVExCRlNgIGlzIGNvbmZpZ3VyZWQgaW4gdGhpcyBzeXN0ZW0uIFRoYXQgcHJvYmFibHkgbWVhbnMgSSdsbCBiZSBkaWdnaW5nIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlLCBpcyB0byBjaGVjayBgbW0vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlLCBzbyBJJ20gYmV0dGluZyB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZWZpbml0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZXhwbGFuYXRpb25zIGZvciBob3cgYEhVR0VUTEJfUEFHRWAgcmVsYXRlcyB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgwMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6MjAuMDgyNzk2NDE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk4NDMwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNzA4LVxcbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbm1tL0tjb25maWctNzEwLVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6MjAuMTMwNzgyNjA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDU2MTYyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgSFVHRVRMQl9QQUdFYCBEZWZpbml0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgSFVHRVRMQl9QQUdFYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBJdCdzIHVzZWQgaGVyZSwgYnV0IEkgaGF2ZSB0aGlzIG5hZ2dpbmcgZmVlbGluZyBpdCBtaWdodCBub3QgYmUgKndpdGhpbiogdGhpcyBwYXJ0aWN1bGFyIGZpbGUgb3IgbW9kdWxlLiBJdCdzIGEgcHJldHR5IGNvbW1vbiBtYWNybywgc28gaXQncyBlbnRpcmVseSBwbGF1c2libGUgaXQncyBjb21pbmcgaW4gZnJvbSBzb21lIGluY2x1ZGUgZmlsZSBvciBhIGhpZ2hlci1sZXZlbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgY29udGV4dC4gSXMgaXQgYSBrZXJuZWwtd2lkZSBjb25zdGFudD8gSXMgaXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljPyBJcyBpdCBkZXRlcm1pbmVkIGJ5IGEgYnVpbGQgZmxhZz8gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIHByb2plY3QgZm9yIGl0cyBkZWZpbml0aW9uIHRvIHNlZSB3aGVyZSBpdCBvcmlnaW5hdGVzIGZyb20uIEZpbmRpbmcgaXRzIGRlZmluaXRpb24gaXMgdGhlIGtleSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDcxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6MjMuNTc2NDAxOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNTI5MjY4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjI1LjY4MTY5ODg0N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg3MTc4NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZVRMQkZTIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgSFVHRVRMQkZTYCBjb25maWd1cmF0aW9uLiBJdCBsb29rcyBsaWtlIHRoYXQncyB0aGUgY2VudHJhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3csIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBwaW5wb2ludGluZyB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgYW5kIGBkZW1vdGVfc3RvcmVgLiBBbHJpZ2h0LCBgZGVtb3RlX3N0b3JlYCBpcyB0aGUgc3lzZnMgc3RvcmUgZnVuY3Rpb24sIHNvIHRoYXQgZ2l2ZXMgbWUgYSBoYW5kbGUgb24gaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIHVzZXIgc3BhY2UgY29uZmlndXJhdGlvbi4gQnV0LCB0aGUgcmVhbCBjb3JlIGxvZ2ljIGlzIGdvaW5nIHRvIGJlIGluIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLiBJIHNob3VsZCBjaGVjayBpZiBpdCdzIHN0YXRpYy4gVGhhdCB3aWxsIGRldGVybWluZSB3aGF0IHNjb3BlIGl0IGV4aXN0cyBpbiBhbmQgaWYgSSBuZWVkIHRvIGxvb2sgaW50byBvdGhlciBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MToyOS40Njg4ODAyNTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDc2MjYzNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVtb3RlX3Bvb2xfaHVnZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2V0bGIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MzkxOT1zdGF0aWMgbG9uZyBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpzcmMsIHN0cnVjdCBoc3RhdGUgKmRzdCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zOTc3LVxcbm1tL2h1Z2V0bGIuYzozOTc4OmxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG5tbS9odWdldGxiLmMtMzk3OS1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3RvX2RlbW90ZSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zOTkxLVxcdGlmICghc3JjLVxcdTAwM2VkZW1vdGVfb3JkZXIpIHtcXG5tbS9odWdldGxiLmM6Mzk5MjpcXHRcXHRwcl93YXJuKFxcXCJIdWdlVExCOiBOVUxMIGRlbW90ZSBvcmRlciBwYXNzZWQgdG8gZGVtb3RlX3Bvb2xfaHVnZV9wYWdlLlxcXFxuXFxcIik7XFxubW0vaHVnZXRsYi5jLTM5OTMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFx0XFx0LyogaW50ZXJuYWwgZXJyb3IgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6MzAuNjE2NTExMjcxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzYxMTAyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgJ3MgRHluYW1pYyBOYXR1cmUqKlxuXG5SaWdodCwgc28gYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgaXNuJ3QgYSBzdGF0aWMgdmFsdWUsIHdoaWNoIGlzIGNydWNpYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBmdWxseS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgb3JpZ2luLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYW5kIHdoZW4gaXQncyB1cGRhdGVkLiBJIGltbWVkaWF0ZWx5IHRoaW5rIHRvIGNoZWNrIHRoZSByZWxhdGVkIGNvZGUgd2l0aGluIHRoZSBodWdlIHBhZ2VzIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFdoZXJlJ3MgdGhlIGxvZ2ljYWwgbG9jYXRpb24gdG8gZmluZCB0aGlzPyBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBtbS9odWdldGxiX3N5c2ZzLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlIGZvciBgZGVtb3RlX3N0b3JlYCDigJMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgc3lzZnMgYXR0cmlidXRlIGZvciBkZW1vdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4gSSdsbCBkaWcgaW50byB0aGF0IGZpbGUgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODgwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6MzMuNzUyNjIzNjc4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI1NDUxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZW1vdGVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZXRsYl9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGJfc3lzZnMuYz0xNzk9SFNUQVRFX0FUVFJfUk8oc3VycGx1c19odWdlcGFnZXMpO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xODAtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjE4MTpzdGF0aWMgc3NpemVfdCBkZW1vdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vaHVnZXRsYl9zeXNmcy5jLTE4Mi1cXHQgICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjMzLjgwMDg4NDAxM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjYwODMzMDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gSHVnZSBQYWdlIERlbW90aW9uKipcblxuQWxyaWdodCwgc28gYGRlbW90ZV9zdG9yZWAgaXMgc3RhdGljLiBUaGF0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gY29uY2VybiBvdXJzZWx2ZXMgd2l0aCBleHRlcm5hbCBjYWxscyBvciBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBub3QgdGhlIGNyaXRpY2FsIHBhdGggaGVyZS4gVGhpcyBpcyBhIGJpdCBvZiBhIGJyZWFkIGNydW1iIG9uIGEgd2VsbC13b3JuIHBhdGguXG5cblRoZXJlZm9yZSwgb3VyIHJlYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAuIFRoYXQncyB3aGVyZSB0aGUganVpY2UgaXMuIFRoYXQncyB0aGUgb25lIHdlIG5lZWQgdG8gc2NydXRpbml6ZS4gV2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGNhbGxpbmcgKnRoYXQqIG9uZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGgsIHRoZSBkZXBlbmRlbmNpZXMuIFdoYXQgdXBzdHJlYW0gY29tcG9uZW50cyBhcmUgdHJpZ2dlcmluZyB0aGlzIGRlbW90aW9uPyBXaGF0J3MgdGhlIGNvbnRleHQ/IExldCdzIHRyYWNlIGl0IG91dCBhbmQgc2VlIHdoYXQncyB3aGF0LiBEaWdnaW5nIGluIG9uIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIGJlaGF2aW9yLiBMZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgc29tZSBvdGhlciBjb2RlIHVzaW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjczLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6MzcuMDYxNzE5MzE1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc0NzMxMjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlbW90ZV9wb29sX2h1Z2VfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTM5MTk9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXFxuLS1cXG5tbS9odWdldGxiLmMtMzk3Ny1cXG5tbS9odWdldGxiLmM6Mzk3ODpsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXFxubW0vaHVnZXRsYi5jLTM5NzktXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl90b19kZW1vdGUpXFxuLS1cXG5tbS9odWdldGxiLmMtMzk5MS1cXHRpZiAoIXNyYy1cXHUwMDNlZGVtb3RlX29yZGVyKSB7XFxubW0vaHVnZXRsYi5jOjM5OTI6XFx0XFx0cHJfd2FybihcXFwiSHVnZVRMQjogTlVMTCBkZW1vdGUgb3JkZXIgcGFzc2VkIHRvIGRlbW90ZV9wb29sX2h1Z2VfcGFnZS5cXFxcblxcXCIpO1xcbm1tL2h1Z2V0bGIuYy0zOTkzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcdFxcdC8qIGludGVybmFsIGVycm9yICovXFxuLS1cXG5tbS9odWdldGxiX2ludGVybmFsLmg9MTAwPWV4dGVybiB2b2lkIHByZXBfYW5kX2FkZF9hbGxvY2F0ZWRfZm9saW9zKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTEwMS1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpO1xcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaDoxMDI6ZXh0ZXJuIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYyxcXG5tbS9odWdldGxiX2ludGVybmFsLmgtMTAzLVxcdFxcdFxcdFxcdCAgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYz0xODE9c3RhdGljIHNzaXplX3QgZGVtb3RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jLTIxMS1cXHRcXHQgKiBDaGVjayBmb3IgYXZhaWxhYmxlIHBhZ2VzIHRvIGRlbW90ZSBlYWNoIHRpbWUgdGhvcm91Z2ggdGhlXFxubW0vaHVnZXRsYl9zeXNmcy5jOjIxMjpcXHRcXHQgKiBsb29wIGFzIGRlbW90ZV9wb29sX2h1Z2VfcGFnZSB3aWxsIGRyb3AgaHVnZXRsYl9sb2NrLlxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMTMtXFx0XFx0ICovXFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtMjIwLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyMjE6XFx0XFx0cmMgPSBkZW1vdGVfcG9vbF9odWdlX3BhZ2UoaCwgbl9tYXNrLFxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMjItXFx0XFx0XFx0XFx0XFx0ICAgbWluKG5yX2RlbW90ZSwgbnJfYXZhaWxhYmxlKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjM4LjczNjQ1NjYzN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjI1MTM5NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZSBQYWdlIERlbW90aW9uIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgaHVnZSBwYWdlIGRlbW90aW9uIHByb2Nlc3MuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCBpdCdzIG9ubHkgY2FsbGVkIGZyb20gYGRlbW90ZV9zdG9yZWAsIHdoaWNoIG1lYW5zIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgICppcyogdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgYml0IG9mIGxvZ2ljLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIGhvdyBhY2Nlc3NpYmxlIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgaXMuIEhtbSwgbGV0J3Mgc2VlLCB5ZXMsIEkgcmVtZW1iZXIgaXQncyBleHBvc2VkIHRocm91Z2ggc3lzZnMuIFRoZSBmaWxlIG5hbWUgaXMgYGRlbW90ZWAuIEFscmlnaHQsIHRoYXQgY29uZmlybXMgcmVhY2hhYmlsaXR5LiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgd2hlcmUgYGRlbW90ZV9zdG9yZWAgaXMgYmVpbmcgdXNlZC4gTWFraW5nIHN1cmUgbm90aGluZyBzdXJwcmlzaW5nIGlzIGNhbGxpbmcgaXQgb3V0c2lkZSBvZiB0aGUgZXhwZWN0ZWQgcGF0aCBpcyBhbHdheXMgYSBnb29kIGlkZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MTo0Mi4zNjE1OTk0NzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzcwNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlbW90ZV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiX3N5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYl9zeXNmcy5jPTE3OT1IU1RBVEVfQVRUUl9STyhzdXJwbHVzX2h1Z2VwYWdlcyk7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTE4MC1cXG5tbS9odWdldGxiX3N5c2ZzLmM6MTgxOnN0YXRpYyBzc2l6ZV90IGRlbW90ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9odWdldGxiX3N5c2ZzLmMtMTgyLVxcdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6NDIuNDE0OTc0MjIxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NjQyMzExOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBdHRyaWJ1dGUgRGVmaW5pdGlvbiBDaGVjayoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgY29uY2x1c2lvbnMgb3IgYW5hbHlzZXMsIEkgbmVlZCB0byBwYXVzZS4gSXQncyBjcnVjaWFsLCBhYnNvbHV0ZWx5ICpjcml0aWNhbCosIHRoYXQgSSBoYXZlIGEgcm9jay1zb2xpZCBncmFzcCBvbiB0aGUgcHJlY2lzZSBkZWZpbml0aW9uIG9mIHRoZSBhdHRyaWJ1dGUgaW4gcXVlc3Rpb24uIEkgY2FuJ3QgcHJvY2VlZCB3aXRoIGFueSBtZWFuaW5nZnVsIGV2YWx1YXRpb24gb3IgcmVhc29uaW5nIHdpdGhvdXQgdGhhdCBmb3VuZGF0aW9uLiBBbnkgcG90ZW50aWFsIGFtYmlndWl0eSwgbnVhbmNlLCBvciB0ZWNobmljYWwgc3BlY2lmaWNhdGlvbiBpbmhlcmVudCBpbiB0aGUgYXR0cmlidXRlIGl0c2VsZiBkaWN0YXRlcyB0aGUgZW50aXJlIHN1YnNlcXVlbnQgbGluZSBvZiB0aG91Z2h0LiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQgZGVmaW5pdGlvbjsgZXZlbiBhIG1pbm9yIG92ZXJzaWdodCB0aGVyZSBjb3VsZCBsZWFkIG1lIGRvd24gYSBjb21wbGV0ZWx5IGVycm9uZW91cyBwYXRoLCBhbmQgSSBuZWVkIHRvIGF2b2lkIGFueSB3YXN0ZSBvZiBteSB0aW1lLiBJIG11c3QgZW5zdXJlIHRoaXMgaXMgcGVyZmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU0NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjQ1LjA3OTIwODE5OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2OTU1ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVtb3RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2V0bGJfc3lzZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiX3N5c2ZzLmM9MTc5PUhTVEFURV9BVFRSX1JPKHN1cnBsdXNfaHVnZXBhZ2VzKTtcXG5tbS9odWdldGxiX3N5c2ZzLmMtMTgwLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzoxODE6c3RhdGljIHNzaXplX3QgZGVtb3RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xODItXFx0ICAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xODMte1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzoxODQ6XFx0dW5zaWduZWQgbG9uZyBucl9kZW1vdGU7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTE4NS1cXHR1bnNpZ25lZCBsb25nIG5yX2F2YWlsYWJsZTtcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xOTAtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjE5MTpcXHRlcnIgPSBrc3RydG91bChidWYsIDEwLCBcXHUwMDI2bnJfZGVtb3RlKTtcXG5tbS9odWdldGxiX3N5c2ZzLmMtMTkyLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtMjA2LVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyMDc6XFx0d2hpbGUgKG5yX2RlbW90ZSkge1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMDgtXFx0XFx0bG9uZyByYztcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMTAtXFx0XFx0LypcXG5tbS9odWdldGxiX3N5c2ZzLmM6MjExOlxcdFxcdCAqIENoZWNrIGZvciBhdmFpbGFibGUgcGFnZXMgdG8gZGVtb3RlIGVhY2ggdGltZSB0aG9yb3VnaCB0aGVcXG5tbS9odWdldGxiX3N5c2ZzLmM6MjEyOlxcdFxcdCAqIGxvb3AgYXMgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlIHdpbGwgZHJvcCBodWdldGxiX2xvY2suXFxubW0vaHVnZXRsYl9zeXNmcy5jLTIxMy1cXHRcXHQgKi9cXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMjAtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjIyMTpcXHRcXHRyYyA9IGRlbW90ZV9wb29sX2h1Z2VfcGFnZShoLCBuX21hc2ssXFxubW0vaHVnZXRsYl9zeXNmcy5jOjIyMjpcXHRcXHRcXHRcXHRcXHQgICBtaW4obnJfZGVtb3RlLCBucl9hdmFpbGFibGUpKTtcXG5tbS9odWdldGxiX3N5c2ZzLmMtMjIzLVxcdFxcdGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMjctXFxubW0vaHVnZXRsYl9zeXNmcy5jOjIyODpcXHRcXHRucl9kZW1vdGUgLT0gcmM7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTIyOS1cXHR9XFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtMjM3LX1cXG5tbS9odWdldGxiX3N5c2ZzLmM6MjM4OkhTVEFURV9BVFRSX1dPKGRlbW90ZSk7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTIzOS1cXG5tbS9odWdldGxiX3N5c2ZzLmM6MjQwOnN0YXRpYyBzc2l6ZV90IGRlbW90ZV9zaXplX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vaHVnZXRsYl9zeXNmcy5jLTI0MS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNDMtXFx0c3RydWN0IGhzdGF0ZSAqaCA9IGtvYmpfdG9faHN0YXRlKGtvYmosIE5VTEwpO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNDQ6XFx0dW5zaWduZWQgbG9uZyBkZW1vdGVfc2l6ZSA9IChQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgaC1cXHUwMDNlZGVtb3RlX29yZGVyKSAvIFNaXzFLO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNDUtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjI0NjpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVrQlxcXFxuXFxcIiwgZGVtb3RlX3NpemUpO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNDctfVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNDgtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjI0OTpzdGF0aWMgc3NpemVfdCBkZW1vdGVfc2l6ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9odWdldGxiX3N5c2ZzLmMtMjUwLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNTIte1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNTM6XFx0c3RydWN0IGhzdGF0ZSAqaCwgKmRlbW90ZV9oc3RhdGU7XFxubW0vaHVnZXRsYl9zeXNmcy5jOjI1NDpcXHR1bnNpZ25lZCBsb25nIGRlbW90ZV9zaXplO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNTU6XFx0dW5zaWduZWQgaW50IGRlbW90ZV9vcmRlcjtcXG5tbS9odWdldGxiX3N5c2ZzLmMtMjU2LVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNTc6XFx0ZGVtb3RlX3NpemUgPSAodW5zaWduZWQgbG9uZyltZW1wYXJzZShidWYsIE5VTEwpO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNTgtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjI1OTpcXHRkZW1vdGVfaHN0YXRlID0gc2l6ZV90b19oc3RhdGUoZGVtb3RlX3NpemUpO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNjA6XFx0aWYgKCFkZW1vdGVfaHN0YXRlKVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNjEtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubW0vaHVnZXRsYl9zeXNmcy5jOjI2MjpcXHRkZW1vdGVfb3JkZXIgPSBkZW1vdGVfaHN0YXRlLVxcdTAwM2VvcmRlcjtcXG5tbS9odWdldGxiX3N5c2ZzLmM6MjYzOlxcdGlmIChkZW1vdGVfb3JkZXIgXFx1MDAzYyBIVUdFVExCX1BBR0VfT1JERVIpXFxubW0vaHVnZXRsYl9zeXNmcy5jLTI2NC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5tbS9odWdldGxiX3N5c2ZzLmMtMjY1LVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNjY6XFx0LyogZGVtb3RlIG9yZGVyIG11c3QgYmUgc21hbGxlciB0aGFuIGhzdGF0ZSBvcmRlciAqL1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNjctXFx0aCA9IGtvYmpfdG9faHN0YXRlKGtvYmosIE5VTEwpO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNjg6XFx0aWYgKGRlbW90ZV9vcmRlciBcXHUwMDNlPSBoLVxcdTAwM2VvcmRlcilcXG5tbS9odWdldGxiX3N5c2ZzLmMtMjY5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNzAtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjI3MTpcXHQvKiByZXNpemVfbG9jayBzeW5jaHJvbml6ZXMgYWNjZXNzIHRvIGRlbW90ZSBzaXplIGFuZCB3cml0ZXMgKi9cXG5tbS9odWdldGxiX3N5c2ZzLmMtMjcyLVxcdG11dGV4X2xvY2soXFx1MDAyNmgtXFx1MDAzZXJlc2l6ZV9sb2NrKTtcXG5tbS9odWdldGxiX3N5c2ZzLmM6MjczOlxcdGgtXFx1MDAzZWRlbW90ZV9vcmRlciA9IGRlbW90ZV9vcmRlcjtcXG5tbS9odWdldGxiX3N5c2ZzLmMtMjc0LVxcdG11dGV4X3VubG9jayhcXHUwMDI2aC1cXHUwMDNlcmVzaXplX2xvY2spO1xcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jLTI3Ny19XFxubW0vaHVnZXRsYl9zeXNmcy5jOjI3ODpIU1RBVEVfQVRUUihkZW1vdGVfc2l6ZSk7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTI3OS1cXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYz0yOTI9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaHN0YXRlX2F0dHJfZ3JvdXAgPSB7XFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtMjk1LVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyOTY6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmhzdGF0ZV9kZW1vdGVfYXR0cnNbXSA9IHtcXG5tbS9odWdldGxiX3N5c2ZzLmM6Mjk3OlxcdFxcdTAwMjZkZW1vdGVfc2l6ZV9hdHRyLmF0dHIsXFxubW0vaHVnZXRsYl9zeXNmcy5jOjI5ODpcXHRcXHUwMDI2ZGVtb3RlX2F0dHIuYXR0cixcXG5tbS9odWdldGxiX3N5c2ZzLmMtMjk5LVxcdE5VTEwsXFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtMzAxLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzozMDI6c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaHN0YXRlX2RlbW90ZV9hdHRyX2dyb3VwID0ge1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzozMDM6XFx0LmF0dHJzID0gaHN0YXRlX2RlbW90ZV9hdHRycyxcXG5tbS9odWdldGxiX3N5c2ZzLmMtMzA0LX07XFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmM9MzA2PXN0YXRpYyBpbnQgaHVnZXRsYl9zeXNmc19hZGRfaHN0YXRlKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBrb2JqZWN0ICpwYXJlbnQsXFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtMzIzLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzozMjQ6XFx0aWYgKGgtXFx1MDAzZWRlbW90ZV9vcmRlcikge1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0zMjUtXFx0XFx0cmV0dmFsID0gc3lzZnNfY3JlYXRlX2dyb3VwKGhzdGF0ZV9rb2Jqc1toaV0sXFxubW0vaHVnZXRsYl9zeXNmcy5jOjMyNjpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmhzdGF0ZV9kZW1vdGVfYXR0cl9ncm91cCk7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTMyNy1cXHRcXHRpZiAocmV0dmFsKSB7XFxubW0vaHVnZXRsYl9zeXNmcy5jOjMyODpcXHRcXHRcXHRwcl93YXJuKFxcXCJIdWdlVExCIHVuYWJsZSB0byBjcmVhdGUgZGVtb3RlIGludGVyZmFjZXMgZm9yICVzXFxcXG5cXFwiLCBoLVxcdTAwM2VuYW1lKTtcXG5tbS9odWdldGxiX3N5c2ZzLmMtMzI5LVxcdFxcdFxcdHN5c2ZzX3JlbW92ZV9ncm91cChoc3RhdGVfa29ianNbaGldLCBoc3RhdGVfYXR0cl9ncm91cCk7XFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmM9Mzk2PXZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtNDA5LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzo0MTA6XFx0XFx0aWYgKGgtXFx1MDAzZWRlbW90ZV9vcmRlcilcXG5tbS9odWdldGxiX3N5c2ZzLmM6NDExOlxcdFxcdFxcdHN5c2ZzX3JlbW92ZV9ncm91cChoc3RhdGVfa29iaiwgXFx1MDAyNmhzdGF0ZV9kZW1vdGVfYXR0cl9ncm91cCk7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTQxMi1cXHRcXHRzeXNmc19yZW1vdmVfZ3JvdXAoaHN0YXRlX2tvYmosIFxcdTAwMjZwZXJfbm9kZV9oc3RhdGVfYXR0cl9ncm91cCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjQ1LjEyNzkwODUxNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDYyMjQ4MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEh1Z2VUTEIgRGVtb3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY3J1Y2lhbCBmaXggcmVsYXRlZCB0byBIdWdlVExCIHBhZ2UgZGVtb3Rpb24sIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBgZGVtb3RlYCBzeXNmcyBmaWxlIHdoZW4gYGgtXHUwMDNlZGVtb3RlX29yZGVyYCBpc24ndCB6ZXJvLiBJdCdzIGFkZHJlc3NpbmcgYSBidWcgaW4gdGhlIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBpc3N1ZXMgd2l0aCBob3cgc3VycGx1cyBhY2NvdW50aW5nIHdhcyBoYW5kbGVkIG9uIGEgcGVyLW5vZGUgYmFzaXMsIGFuZCB0aGUgY2hlY2sgZm9yIGBucl9hdmFpbGFibGVgIHdhc24ndCByb2J1c3QgZW5vdWdoLlxuXG5Mb29raW5nIGNsb3NlciwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IGZ1bmN0aW9uIHRvIHplcm8gaW4gb24gaXMgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgYmVzaWRlcyB0aGUgYEhVR0VUTEJGU2AgY29uZmlnIGFyZSByZWxldmFudC4gQnV0IGBIVUdFVExCX1BBR0VgIGlzIHRoZSBtYWluIHRoaW5nIGFuZCBpdCBpcyBkZWZpbmVkIGFzIGBkZWZfYm9vbCBIVUdFVExCRlNgLCBzbyBgSFVHRVRMQkZTYCBpcyBzdWZmaWNpZW50LlxuXG5J4oCZdmUgY29uZmlybWVkIHRoYXQgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgaXMgb25seSBjYWxsZWQgZnJvbSBgZGVtb3RlX3N0b3JlYCwgYW5kIGBkZW1vdGVfc3RvcmVgIGlzIHN0YXRpYy4gVGhpcyBtZWFucyBkaXJlY3RseSB0YXJnZXRpbmcgYGRlbW90ZV9zdG9yZWAgYnkgbmFtZSBpbiBzeXprYWxsZXIgaXNuJ3QgdGhlIGJlc3QgYXBwcm9hY2gsIHNvIEknbGwgc3RheSBmb2N1c2VkIG9uIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLlxuXG5BZnRlciBhIHF1aWNrIHJldmlldyBvZiB0aGUgY29kZSBkaWZmLCB0aGUgZml4IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaW1wcm92ZWQgYWNjb3VudGluZyBhbmQgYXZhaWxhYmlsaXR5IGNoZWNrcyB3aXRoaW4gdGhlIHBlci1ub2RlIGxvb3AuIFRoaXMgcmVpbmZvcmNlcyBteSBpbml0aWFsIGFzc2Vzc21lbnQgdGhhdCB0aGlzIGlzIGEgdmFsdWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5UaGVyZWZvcmUsIG15IHBsYW4gaXM6XG5cbiogICAqKldvcnRoRnV6emluZzogdHJ1ZSoqXG4qICAgKipGb2N1c1N5bWJvbHM6IFxcW1wiZGVtb3RlXFxfcG9vbFxcX2h1Z2VcXF9wYWdlXCJcXF0qKlxuKiAgICoqRW5hYmxlQ29uZmlnczogXFxbXCJIVUdFVExCRlNcIlxcXSoqXG4qICAgKipSZWFzb25pbmc6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEh1Z2VUTEIgcGFnZSBkZW1vdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyBzdXJwbHVzIGFjY291bnRpbmcgYW5kIGF2YWlsYWJsZSBwYWdlIGNoZWNraW5nIGR1cmluZyBkZW1vdGlvbi4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgdGhlICdkZW1vdGUnIHN5c2ZzIGludGVyZmFjZSBmb3IgSHVnZVRMQiBwYWdlcy5cIioqXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5ODUsIk91dHB1dFRva2VucyI6OTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6NTMuNTkwMTU5MTE0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0MDY0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRlbW90ZV9wb29sX2h1Z2VfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEh1Z2VUTEIgcGFnZSBkZW1vdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyBzdXJwbHVzIGFjY291bnRpbmcgYW5kIGF2YWlsYWJsZSBwYWdlIGNoZWNraW5nIGR1cmluZyBkZW1vdGlvbi4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgdGhlICdkZW1vdGUnIHN5c2ZzIGludGVyZmFjZSBmb3IgSHVnZVRMQiBwYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZW1vdGVfcG9vbF9odWdlX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBIdWdlVExCIHBhZ2UgZGVtb3Rpb24gbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgc3VycGx1cyBhY2NvdW50aW5nIGFuZCBhdmFpbGFibGUgcGFnZSBjaGVja2luZyBkdXJpbmcgZGVtb3Rpb24uIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHRoZSAnZGVtb3RlJyBzeXNmcyBpbnRlcmZhY2UgZm9yIEh1Z2VUTEIgcGFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjUzLjY2NDU3MTkzNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0Mjg1NTc5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjUzLjY2NTAyMTUwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2ODQyNDAwOTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaHVnZSBwYWdlIGRlbW90aW9uIGxvZ2ljIGluIGBtbS9odWdldGxiLmNgIGFuZCBgbW0vaHVnZXRsYl9zeXNmcy5jYCwgc3BlY2lmaWNhbGx5IGFkZHJlc3Npbmcgc3VycGx1cyBwYWdlIGFjY291bnRpbmcgYW5kIGF2YWlsYWJsZSBwYWdlIGNhbGN1bGF0aW9ucy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcy4gQWxsIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9naWMgZXJyb3JzLCBsaXN0IGNvcnJ1cHRpb24sIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MzUwZjE4NDU2OWJkODliMjk2ZDMzNjhlMzgwYmRlZGMzOTUzZmZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMDQ6NTE6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGVkMjYxMDViODRkZTIuLmFlMjZkNDAwYWQzMWYgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTM5ODMsNiArMzk4Myw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdHN0cnVjdCBoc3RhdGUgKmRzdDtcbiBcdGxvbmcgcmMgPSAwO1xuIFx0bG9uZyBucl9kZW1vdGVkID0gMDtcbitcdGxvbmcgbnJfcGVyc2lzdGVudCA9IDA7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXG5AQCAtMzk5NSwyMiArMzk5Niw2MCBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4gXG4gXHRmb3JfZWFjaF9ub2RlX21hc2tfdG9fZnJlZShzcmMsIG5yX25vZGVzLCBub2RlLCBub2Rlc19hbGxvd2VkKSB7XG4gXHRcdExJU1RfSEVBRChsaXN0KTtcbitcdFx0TElTVF9IRUFEKHN1cnBsdXNfbGlzdCk7XG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sICpuZXh0O1xuK1x0XHR1bnNpZ25lZCBsb25nIG5yX2F2YWlsYWJsZSwgbnJfdGFyZ2V0O1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBSZS1jaGVjayBhdmFpbGFibGUgZWFjaCBub2RlIGJhdGNoOiB0aGUgcHJldmlvdXNcbitcdFx0ICogYmF0Y2ggcmVsZWFzZWQgaHVnZXRsYl9sb2NrIGZvciB2bWVtbWFwIHJlc3RvcmUvc3BsaXQsXG4rXHRcdCAqIGFuZCBhIG5ldyByZXNlcnZhdGlvbiBjb3VsZCBoYXZlIGJlZW4gYWRkZWQgaW4gdGhhdFxuK1x0XHQgKiB3aW5kb3csIHNocmlua2luZyB0aGUgYnVkZ2V0LiAgYXZhaWxhYmxlIGlzIGdsb2JhbFxuK1x0XHQgKiAocmVzdiBpcyBub3QgcGVyLW5vZGUpLCBzbyAwIG1lYW5zIG5vIG5vZGUgY2FuXG4rXHRcdCAqIGNvbnRyaWJ1dGUgLS0gc3RvcCB0aGUgd2hvbGUgc2Nhbi5cbitcdFx0ICovXG4rXHRcdG5yX2F2YWlsYWJsZSA9IGF2YWlsYWJsZV9odWdlX3BhZ2VzKHNyYyk7XG4rXHRcdGlmICghbnJfYXZhaWxhYmxlKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBDYXAgdGhpcyBiYXRjaCBhdCB0aGUgY3VycmVudCBidWRnZXQ7IGV4cHJlc3NlZCBhcyBhXG4rXHRcdCAqIGN1bXVsYXRpdmUgc3RvcCBwb2ludCBiZWNhdXNlIG5yX2RlbW90ZWQgaXMgcnVubmluZy5cbitcdFx0ICovXG4rXHRcdG5yX3RhcmdldCA9IG5yX2RlbW90ZWQgKyBtaW5fdCh1bnNpZ25lZCBsb25nLFxuK1x0XHRcdFx0bnJfdG9fZGVtb3RlIC0gbnJfZGVtb3RlZCwgbnJfYXZhaWxhYmxlKTtcbiBcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCBuZXh0LCBcdTAwMjZzcmMtXHUwMDNlaHVnZXBhZ2VfZnJlZWxpc3RzW25vZGVdLCBscnUpIHtcbitcdFx0XHRib29sIGFkanVzdF9zdXJwbHVzO1xuK1xuIFx0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcbi1cdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxpc3QpO1xuK1x0XHRcdC8qIFN1cnBsdXMgYWNjb3VudGluZyBpcyBtYWludGFpbmVkIHBlciBub2RlLCBub3QgcGVyIGZvbGlvLiAqL1xuK1x0XHRcdGFkanVzdF9zdXJwbHVzID0gc3JjLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25vZGVdIFx1MDAzZSAwO1xuK1x0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGFkanVzdF9zdXJwbHVzKTtcbitcdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIGFkanVzdF9zdXJwbHVzID8gXHUwMDI2c3VycGx1c19saXN0IDogXHUwMDI2bGlzdCk7XG4rXHRcdFx0aWYgKCFhZGp1c3Rfc3VycGx1cylcbitcdFx0XHRcdG5yX3BlcnNpc3RlbnQrKztcbiBcbi1cdFx0XHRpZiAoKytucl9kZW1vdGVkID09IG5yX3RvX2RlbW90ZSlcbitcdFx0XHRpZiAoKytucl9kZW1vdGVkID09IG5yX3RhcmdldClcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4rXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmxpc3QpIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnN1cnBsdXNfbGlzdCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFxuLVx0XHRyYyA9IGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHNyYywgZHN0LCBcdTAwMjZsaXN0KTtcbitcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmxpc3QpKVxuK1x0XHRcdHJjID0gZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3JjLCBkc3QsIFx1MDAyNmxpc3QpO1xuK1x0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2c3VycGx1c19saXN0KSkge1xuK1x0XHRcdGxvbmcgdG1wX3JjO1xuK1xuK1x0XHRcdHRtcF9yYyA9IGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHNyYywgZHN0LCBcdTAwMjZzdXJwbHVzX2xpc3QpO1xuK1x0XHRcdGlmIChyYyBcdTAwM2U9IDApXG4rXHRcdFx0XHRyYyA9IHRtcF9yYztcbitcdFx0fVxuIFxuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXG5AQCAtNDAxOCw2ICs0MDU3LDE0IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuIFx0XHRcdGFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcbiBcbitcdFx0XHRucl9kZW1vdGVkLS07XG4rXHRcdFx0bnJfcGVyc2lzdGVudC0tO1xuK1x0XHR9XG4rXG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXHUwMDI2c3VycGx1c19saXN0LCBscnUpIHtcbitcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuK1x0XHRcdGFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIHRydWUpO1xuK1xuIFx0XHRcdG5yX2RlbW90ZWQtLTtcbiBcdFx0fVxuIFxuQEAgLTQwMjksNyArNDA3Niw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdCAqIE5vdCBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSwgYnV0IGZvciBjb25zaXN0ZW5jeSB1cGRhdGUgbWF4X2h1Z2VfcGFnZXNcbiBcdCAqIGJhc2VkIG9uIHBvb2wgY2hhbmdlcyBmb3IgdGhlIGRlbW90ZWQgcGFnZS5cbiBcdCAqL1xuLVx0c3JjLVx1MDAzZW1heF9odWdlX3BhZ2VzIC09IG5yX2RlbW90ZWQ7XG4rXHRzcmMtXHUwMDNlbWF4X2h1Z2VfcGFnZXMgLT0gbnJfcGVyc2lzdGVudDtcbiBcdGRzdC1cdTAwM2VtYXhfaHVnZV9wYWdlcyArPSBucl9kZW1vdGVkIFx1MDAzY1x1MDAzYyAoaHVnZV9wYWdlX29yZGVyKHNyYykgLSBodWdlX3BhZ2Vfb3JkZXIoZHN0KSk7XG4gXG4gXHRpZiAocmMgXHUwMDNjIDApXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9zeXNmcy5jIGIvbW0vaHVnZXRsYl9zeXNmcy5jXG5pbmRleCA3OWVjZTkxNDA2YmZhLi4zMjZhNTRiNGQ5OTFjIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl9zeXNmcy5jXG4rKysgYi9tbS9odWdldGxiX3N5c2ZzLmNcbkBAIC0yMTEsMTUgKzIxMSwxNSBAQCBzdGF0aWMgc3NpemVfdCBkZW1vdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdCAqIENoZWNrIGZvciBhdmFpbGFibGUgcGFnZXMgdG8gZGVtb3RlIGVhY2ggdGltZSB0aG9yb3VnaCB0aGVcbiBcdFx0ICogbG9vcCBhcyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Ugd2lsbCBkcm9wIGh1Z2V0bGJfbG9jay5cbiBcdFx0ICovXG4rXHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzIC0gaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXM7XG4gXHRcdGlmIChuaWQgIT0gTlVNQV9OT19OT0RFKVxuLVx0XHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzX25vZGVbbmlkXTtcbi1cdFx0ZWxzZVxuLVx0XHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzO1xuLVx0XHRucl9hdmFpbGFibGUgLT0gaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXM7XG4rXHRcdFx0bnJfYXZhaWxhYmxlID0gbWluKG5yX2F2YWlsYWJsZSxcbitcdFx0XHRcdFx0ICAgaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKTtcbiBcdFx0aWYgKCFucl9hdmFpbGFibGUpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdHJjID0gZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKGgsIG5fbWFzaywgbnJfZGVtb3RlKTtcbitcdFx0cmMgPSBkZW1vdGVfcG9vbF9odWdlX3BhZ2UoaCwgbl9tYXNrLFxuK1x0XHRcdFx0XHQgICBtaW4obnJfZGVtb3RlLCBucl9hdmFpbGFibGUpKTtcbiBcdFx0aWYgKHJjIFx1MDAzYyAwKSB7XG4gXHRcdFx0ZXJyID0gcmM7XG4gXHRcdFx0YnJlYWs7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MTo1My42NjUwMjI0MTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg0MjM3NTY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIdWdlIFBhZ2UgRGVtb3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGluIGBtbS9odWdldGxiLmNgIGFuZCBgZGVtb3RlX3N0b3JlYCBpbiBgbW0vaHVnZXRsYl9zeXNmcy5jYC4gSXQncyBhbGwgYWJvdXQgaG93IHdlIGhhbmRsZSBodWdlIHBhZ2UgZGVtb3Rpb24g4oCTIGRlYWxpbmcgd2l0aCB0aG9zZSBzdXJwbHVzIHBhZ2VzIGFuZCBrZWVwaW5nIHRoZSBhdmFpbGFibGUgcGFnZSBjb3VudCBhY2N1cmF0ZS4gR29vZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBJIGRvbid0IHNlZSBhbnkgcmVkIGZsYWdzLiBObyBuZXcgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc2lnbiBmcm9tIGEgbWVtb3J5IHBlcnNwZWN0aXZlLiBBYnNvbHV0ZWx5IG5vIGtlcm5lbC10by11c2VyIGNvcGllcyBlaXRoZXIsIHNvIG5vIHJpc2sgdGhlcmUuIEFuZCwgYmFzZWQgb24gdGhpcyBpbml0aWFsIHNraW0sIHRoZXJlJ3Mgbm8gd2F5IEkgc2VlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBnZXR0aW5nIGludHJvZHVjZWQgb3IgdXNlZCwgd2hpY2ggaXMgYSBiaWcgY29uY2Vybi4gVGhlIGNoYW5nZXMgYXBwZWFyIHRvIGJlIHB1cmVseSBsb2dpYy1kcml2ZW4sIGZvY3VzZWQgb24gYWNjb3VudGluZywgbGlzdCBtYW5pcHVsYXRpb24sIGFuZCBsb29wIGNvbnRyb2wgd2l0aGluIHRoZSBleGlzdGluZyBodWdlIHBhZ2UgbWFuYWdlbWVudCBmcmFtZXdvcmsuXG5cbkxldCdzIGRvIGEgbW9yZSB0aG9yb3VnaCBjaGVjayBvZiB0aGUgdmFyaWFibGVzLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gT2theSwgYG5yX3BlcnNpc3RlbnRgIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQgdG8gemVyby4gSSBjYW4gc2VlIHRoZSBjYWxjdWxhdGlvbnMgZm9yIGBucl9hdmFpbGFibGVgIGFuZCBgbnJfdGFyZ2V0YCDigJMgdGhhdCBsb29rcyByaWdodC4gVGhlIGBhZGp1c3Rfc3VycGx1c2AgYm9vbGVhbiBtYWtlcyBzZW5zZSwgYXMgZG9lcyB0aGUgdXNlIG9mIGBzdXJwbHVzX2xpc3RgIGFzIGEgbGlzdCBoZWFkLiBObyBpc3N1ZXMgdGhlcmUuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBFeGNlbGxlbnQuXG5cbkdpdmVuIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhpcyBwYXRjaCBkb2VzICpub3QqIHJlcXVpcmUgS01TQU4uIFRoZSBsb2dpYyBpcyBzZWxmLWNvbnRhaW5lZCwgYW5kIHRoZSBwb3RlbnRpYWwgcmlza3MgYXJlIGFkZXF1YXRlbHkgYWRkcmVzc2VkIGJ5IHN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4sIGlmIG5lZWRlZC4gSXQncyBlc3NlbnRpYWxseSBsb2dpYyBidWdzIHdoaWNoIGFyZSBtb3JlIHJlbGV2YW50IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzksIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6MDAuNTA3NDAwNTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdlIHBhZ2UgZGVtb3Rpb24gbG9naWMgaW4gYG1tL2h1Z2V0bGIuY2AgYW5kIGBtbS9odWdldGxiX3N5c2ZzLmNgLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBzdXJwbHVzIHBhZ2UgYWNjb3VudGluZyBhbmQgYXZhaWxhYmxlIHBhZ2UgY2FsY3VsYXRpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbGwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMsIGxpc3QgY29ycnVwdGlvbiwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdlIHBhZ2UgZGVtb3Rpb24gbG9naWMgaW4gYG1tL2h1Z2V0bGIuY2AgYW5kIGBtbS9odWdldGxiX3N5c2ZzLmNgLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBzdXJwbHVzIHBhZ2UgYWNjb3VudGluZyBhbmQgYXZhaWxhYmxlIHBhZ2UgY2FsY3VsYXRpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbGwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMsIGxpc3QgY29ycnVwdGlvbiwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workfloww7szz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-23 03:53:23 +0000 UTC FinishedAt: 2026-08-23 04:52:02 +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": "55ab7e14222e5f0b0fd9f7711ca391d2924b35e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "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": "55ab7e14222e5f0b0fd9f7711ca391d2924b35e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "20b1986a-77a7-4536-afb9-fb9c42f9388d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "demote_pool_huge_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+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RlbW90ZV9wb29sX2h1Z2VfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdlIHBhZ2UgZGVtb3Rpb24gbG9naWMgaW4gYG1tL2h1Z2V0bGIuY2AgYW5kIGBtbS9odWdldGxiX3N5c2ZzLmNgLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBzdXJwbHVzIHBhZ2UgYWNjb3VudGluZyBhbmQgYXZhaWxhYmxlIHBhZ2UgY2FsY3VsYXRpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbGwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMsIGxpc3QgY29ycnVwdGlvbiwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBIdWdlVExCIHBhZ2UgZGVtb3Rpb24gbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgc3VycGx1cyBhY2NvdW50aW5nIGFuZCBhdmFpbGFibGUgcGFnZSBjaGVja2luZyBkdXJpbmcgZGVtb3Rpb24uIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHRoZSAmIzM5O2RlbW90ZSYjMzk7IHN5c2ZzIGludGVyZmFjZSBmb3IgSHVnZVRMQiBwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDkzNTBmMTg0NTY5YmQ4OWIyOTZkMzM2OGUzODBiZGVkYzM5NTNmZmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAwNDo1MTowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGVkMjYxMDViODRkZTIuLmFlMjZkNDAwYWQzMWYgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTM5ODMsNiAmIzQzOzM5ODMsNyBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4gXHRzdHJ1Y3QgaHN0YXRlICpkc3Q7XG4gXHRsb25nIHJjID0gMDtcbiBcdGxvbmcgbnJfZGVtb3RlZCA9IDA7XG4mIzQzO1x0bG9uZyBucl9wZXJzaXN0ZW50ID0gMDtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcbkBAIC0zOTk1LDIyICYjNDM7Mzk5Niw2MCBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4gXG4gXHRmb3JfZWFjaF9ub2RlX21hc2tfdG9fZnJlZShzcmMsIG5yX25vZGVzLCBub2RlLCBub2Rlc19hbGxvd2VkKSB7XG4gXHRcdExJU1RfSEVBRChsaXN0KTtcbiYjNDM7XHRcdExJU1RfSEVBRChzdXJwbHVzX2xpc3QpO1xuIFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqbmV4dDtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbnJfYXZhaWxhYmxlLCBucl90YXJnZXQ7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFJlLWNoZWNrIGF2YWlsYWJsZSBlYWNoIG5vZGUgYmF0Y2g6IHRoZSBwcmV2aW91c1xuJiM0MztcdFx0ICogYmF0Y2ggcmVsZWFzZWQgaHVnZXRsYl9sb2NrIGZvciB2bWVtbWFwIHJlc3RvcmUvc3BsaXQsXG4mIzQzO1x0XHQgKiBhbmQgYSBuZXcgcmVzZXJ2YXRpb24gY291bGQgaGF2ZSBiZWVuIGFkZGVkIGluIHRoYXRcbiYjNDM7XHRcdCAqIHdpbmRvdywgc2hyaW5raW5nIHRoZSBidWRnZXQuICBhdmFpbGFibGUgaXMgZ2xvYmFsXG4mIzQzO1x0XHQgKiAocmVzdiBpcyBub3QgcGVyLW5vZGUpLCBzbyAwIG1lYW5zIG5vIG5vZGUgY2FuXG4mIzQzO1x0XHQgKiBjb250cmlidXRlIC0tIHN0b3AgdGhlIHdob2xlIHNjYW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG5yX2F2YWlsYWJsZSA9IGF2YWlsYWJsZV9odWdlX3BhZ2VzKHNyYyk7XG4mIzQzO1x0XHRpZiAoIW5yX2F2YWlsYWJsZSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIENhcCB0aGlzIGJhdGNoIGF0IHRoZSBjdXJyZW50IGJ1ZGdldDsgZXhwcmVzc2VkIGFzIGFcbiYjNDM7XHRcdCAqIGN1bXVsYXRpdmUgc3RvcCBwb2ludCBiZWNhdXNlIG5yX2RlbW90ZWQgaXMgcnVubmluZy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bnJfdGFyZ2V0ID0gbnJfZGVtb3RlZCAmIzQzOyBtaW5fdCh1bnNpZ25lZCBsb25nLFxuJiM0MztcdFx0XHRcdG5yX3RvX2RlbW90ZSAtIG5yX2RlbW90ZWQsIG5yX2F2YWlsYWJsZSk7XG4gXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXHUwMDI2c3JjLVx1MDAzZWh1Z2VwYWdlX2ZyZWVsaXN0c1tub2RlXSwgbHJ1KSB7XG4mIzQzO1x0XHRcdGJvb2wgYWRqdXN0X3N1cnBsdXM7XG4mIzQzO1xuIFx0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcbi1cdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxpc3QpO1xuJiM0MztcdFx0XHQvKiBTdXJwbHVzIGFjY291bnRpbmcgaXMgbWFpbnRhaW5lZCBwZXIgbm9kZSwgbm90IHBlciBmb2xpby4gKi9cbiYjNDM7XHRcdFx0YWRqdXN0X3N1cnBsdXMgPSBzcmMtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbbm9kZV0gXHUwMDNlIDA7XG4mIzQzO1x0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGFkanVzdF9zdXJwbHVzKTtcbiYjNDM7XHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBhZGp1c3Rfc3VycGx1cyA/IFx1MDAyNnN1cnBsdXNfbGlzdCA6IFx1MDAyNmxpc3QpO1xuJiM0MztcdFx0XHRpZiAoIWFkanVzdF9zdXJwbHVzKVxuJiM0MztcdFx0XHRcdG5yX3BlcnNpc3RlbnQmIzQzOyYjNDM7O1xuIFxuLVx0XHRcdGlmICgmIzQzOyYjNDM7bnJfZGVtb3RlZCA9PSBucl90b19kZW1vdGUpXG4mIzQzO1x0XHRcdGlmICgmIzQzOyYjNDM7bnJfZGVtb3RlZCA9PSBucl90YXJnZXQpXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuJiM0MztcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bGlzdCkgXHUwMDI2XHUwMDI2IGxpc3RfZW1wdHkoXHUwMDI2c3VycGx1c19saXN0KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcbi1cdFx0cmMgPSBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzcmMsIGRzdCwgXHUwMDI2bGlzdCk7XG4mIzQzO1x0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bGlzdCkpXG4mIzQzO1x0XHRcdHJjID0gZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3JjLCBkc3QsIFx1MDAyNmxpc3QpO1xuJiM0MztcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnN1cnBsdXNfbGlzdCkpIHtcbiYjNDM7XHRcdFx0bG9uZyB0bXBfcmM7XG4mIzQzO1xuJiM0MztcdFx0XHR0bXBfcmMgPSBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzcmMsIGRzdCwgXHUwMDI2c3VycGx1c19saXN0KTtcbiYjNDM7XHRcdFx0aWYgKHJjIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0XHRyYyA9IHRtcF9yYztcbiYjNDM7XHRcdH1cbiBcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFxuQEAgLTQwMTgsNiAmIzQzOzQwNTcsMTQgQEAgbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4gXHRcdFx0YWRkX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpO1xuIFxuJiM0MztcdFx0XHRucl9kZW1vdGVkLS07XG4mIzQzO1x0XHRcdG5yX3BlcnNpc3RlbnQtLTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFx1MDAyNnN1cnBsdXNfbGlzdCwgbHJ1KSB7XG4mIzQzO1x0XHRcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4mIzQzO1x0XHRcdGFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIHRydWUpO1xuJiM0MztcbiBcdFx0XHRucl9kZW1vdGVkLS07XG4gXHRcdH1cbiBcbkBAIC00MDI5LDcgJiM0Mzs0MDc2LDcgQEAgbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxuIFx0ICogTm90IGFic29sdXRlbHkgbmVjZXNzYXJ5LCBidXQgZm9yIGNvbnNpc3RlbmN5IHVwZGF0ZSBtYXhfaHVnZV9wYWdlc1xuIFx0ICogYmFzZWQgb24gcG9vbCBjaGFuZ2VzIGZvciB0aGUgZGVtb3RlZCBwYWdlLlxuIFx0ICovXG4tXHRzcmMtXHUwMDNlbWF4X2h1Z2VfcGFnZXMgLT0gbnJfZGVtb3RlZDtcbiYjNDM7XHRzcmMtXHUwMDNlbWF4X2h1Z2VfcGFnZXMgLT0gbnJfcGVyc2lzdGVudDtcbiBcdGRzdC1cdTAwM2VtYXhfaHVnZV9wYWdlcyAmIzQzOz0gbnJfZGVtb3RlZCBcdTAwM2NcdTAwM2MgKGh1Z2VfcGFnZV9vcmRlcihzcmMpIC0gaHVnZV9wYWdlX29yZGVyKGRzdCkpO1xuIFxuIFx0aWYgKHJjIFx1MDAzYyAwKVxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfc3lzZnMuYyBiL21tL2h1Z2V0bGJfc3lzZnMuY1xuaW5kZXggNzllY2U5MTQwNmJmYS4uMzI2YTU0YjRkOTkxYyAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGJfc3lzZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYl9zeXNmcy5jXG5AQCAtMjExLDE1ICYjNDM7MjExLDE1IEBAIHN0YXRpYyBzc2l6ZV90IGRlbW90ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdFx0ICogQ2hlY2sgZm9yIGF2YWlsYWJsZSBwYWdlcyB0byBkZW1vdGUgZWFjaCB0aW1lIHRob3JvdWdoIHRoZVxuIFx0XHQgKiBsb29wIGFzIGRlbW90ZV9wb29sX2h1Z2VfcGFnZSB3aWxsIGRyb3AgaHVnZXRsYl9sb2NrLlxuIFx0XHQgKi9cbiYjNDM7XHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzIC0gaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXM7XG4gXHRcdGlmIChuaWQgIT0gTlVNQV9OT19OT0RFKVxuLVx0XHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzX25vZGVbbmlkXTtcbi1cdFx0ZWxzZVxuLVx0XHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzO1xuLVx0XHRucl9hdmFpbGFibGUgLT0gaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXM7XG4mIzQzO1x0XHRcdG5yX2F2YWlsYWJsZSA9IG1pbihucl9hdmFpbGFibGUsXG4mIzQzO1x0XHRcdFx0XHQgICBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlc19ub2RlW25pZF0pO1xuIFx0XHRpZiAoIW5yX2F2YWlsYWJsZSlcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0cmMgPSBkZW1vdGVfcG9vbF9odWdlX3BhZ2UoaCwgbl9tYXNrLCBucl9kZW1vdGUpO1xuJiM0MztcdFx0cmMgPSBkZW1vdGVfcG9vbF9odWdlX3BhZ2UoaCwgbl9tYXNrLFxuJiM0MztcdFx0XHRcdFx0ICAgbWluKG5yX2RlbW90ZSwgbnJfYXZhaWxhYmxlKSk7XG4gXHRcdGlmIChyYyBcdTAwM2MgMCkge1xuIFx0XHRcdGVyciA9IHJjO1xuIFx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZW1vdGVfcG9vbF9odWdlX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSHVnZVRMQiBwYWdlIGRlbW90aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIHN1cnBsdXMgYWNjb3VudGluZyBhbmQgYXZhaWxhYmxlIHBhZ2UgY2hlY2tpbmcgZHVyaW5nIGRlbW90aW9uLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgJiMzOTtkZW1vdGUmIzM5OyBzeXNmcyBpbnRlcmZhY2UgZm9yIEh1Z2VUTEIgcGFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MzUwZjE4NDU2OWJkODliMjk2ZDMzNjhlMzgwYmRlZGMzOTUzZmZjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMDQ6NTE6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggZWQyNjEwNWI4NGRlMi4uYWUyNmQ0MDBhZDMxZiAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuYwpAQCAtMzk4Myw2ICYjNDM7Mzk4Myw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCwKIAlzdHJ1Y3QgaHN0YXRlICpkc3Q7CiAJbG9uZyByYyA9IDA7CiAJbG9uZyBucl9kZW1vdGVkID0gMDsKJiM0MzsJbG9uZyBucl9wZXJzaXN0ZW50ID0gMDsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtodWdldGxiX2xvY2spOwogCkBAIC0zOTk1LDIyICYjNDM7Mzk5Niw2MCBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsCiAKIAlmb3JfZWFjaF9ub2RlX21hc2tfdG9fZnJlZShzcmMsIG5yX25vZGVzLCBub2RlLCBub2Rlc19hbGxvd2VkKSB7CiAJCUxJU1RfSEVBRChsaXN0KTsKJiM0MzsJCUxJU1RfSEVBRChzdXJwbHVzX2xpc3QpOwogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqbmV4dDsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbnJfYXZhaWxhYmxlLCBucl90YXJnZXQ7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogUmUtY2hlY2sgYXZhaWxhYmxlIGVhY2ggbm9kZSBiYXRjaDogdGhlIHByZXZpb3VzCiYjNDM7CQkgKiBiYXRjaCByZWxlYXNlZCBodWdldGxiX2xvY2sgZm9yIHZtZW1tYXAgcmVzdG9yZS9zcGxpdCwKJiM0MzsJCSAqIGFuZCBhIG5ldyByZXNlcnZhdGlvbiBjb3VsZCBoYXZlIGJlZW4gYWRkZWQgaW4gdGhhdAomIzQzOwkJICogd2luZG93LCBzaHJpbmtpbmcgdGhlIGJ1ZGdldC4gIGF2YWlsYWJsZSBpcyBnbG9iYWwKJiM0MzsJCSAqIChyZXN2IGlzIG5vdCBwZXItbm9kZSksIHNvIDAgbWVhbnMgbm8gbm9kZSBjYW4KJiM0MzsJCSAqIGNvbnRyaWJ1dGUgLS0gc3RvcCB0aGUgd2hvbGUgc2Nhbi4KJiM0MzsJCSAqLwomIzQzOwkJbnJfYXZhaWxhYmxlID0gYXZhaWxhYmxlX2h1Z2VfcGFnZXMoc3JjKTsKJiM0MzsJCWlmICghbnJfYXZhaWxhYmxlKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIENhcCB0aGlzIGJhdGNoIGF0IHRoZSBjdXJyZW50IGJ1ZGdldDsgZXhwcmVzc2VkIGFzIGEKJiM0MzsJCSAqIGN1bXVsYXRpdmUgc3RvcCBwb2ludCBiZWNhdXNlIG5yX2RlbW90ZWQgaXMgcnVubmluZy4KJiM0MzsJCSAqLwomIzQzOwkJbnJfdGFyZ2V0ID0gbnJfZGVtb3RlZCAmIzQzOyBtaW5fdCh1bnNpZ25lZCBsb25nLAomIzQzOwkJCQlucl90b19kZW1vdGUgLSBucl9kZW1vdGVkLCBucl9hdmFpbGFibGUpOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgJmFtcDtzcmMtJmd0O2h1Z2VwYWdlX2ZyZWVsaXN0c1tub2RlXSwgbHJ1KSB7CiYjNDM7CQkJYm9vbCBhZGp1c3Rfc3VycGx1czsKJiM0MzsKIAkJCWlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkKIAkJCQljb250aW51ZTsKIAotCQkJcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpOwotCQkJbGlzdF9hZGQoJmFtcDtmb2xpby0mZ3Q7bHJ1LCAmYW1wO2xpc3QpOwomIzQzOwkJCS8qIFN1cnBsdXMgYWNjb3VudGluZyBpcyBtYWludGFpbmVkIHBlciBub2RlLCBub3QgcGVyIGZvbGlvLiAqLwomIzQzOwkJCWFkanVzdF9zdXJwbHVzID0gc3JjLSZndDtzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtub2RlXSAmZ3Q7IDA7CiYjNDM7CQkJcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgYWRqdXN0X3N1cnBsdXMpOwomIzQzOwkJCWxpc3RfYWRkKCZhbXA7Zm9saW8tJmd0O2xydSwgYWRqdXN0X3N1cnBsdXMgPyAmYW1wO3N1cnBsdXNfbGlzdCA6ICZhbXA7bGlzdCk7CiYjNDM7CQkJaWYgKCFhZGp1c3Rfc3VycGx1cykKJiM0MzsJCQkJbnJfcGVyc2lzdGVudCYjNDM7JiM0Mzs7CiAKLQkJCWlmICgmIzQzOyYjNDM7bnJfZGVtb3RlZCA9PSBucl90b19kZW1vdGUpCiYjNDM7CQkJaWYgKCYjNDM7JiM0Mztucl9kZW1vdGVkID09IG5yX3RhcmdldCkKIAkJCQlicmVhazsKIAkJfQogCiYjNDM7CQlpZiAobGlzdF9lbXB0eSgmYW1wO2xpc3QpICZhbXA7JmFtcDsgbGlzdF9lbXB0eSgmYW1wO3N1cnBsdXNfbGlzdCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAKLQkJcmMgPSBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzcmMsIGRzdCwgJmFtcDtsaXN0KTsKJiM0MzsJCWlmICghbGlzdF9lbXB0eSgmYW1wO2xpc3QpKQomIzQzOwkJCXJjID0gZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3JjLCBkc3QsICZhbXA7bGlzdCk7CiYjNDM7CQlpZiAoIWxpc3RfZW1wdHkoJmFtcDtzdXJwbHVzX2xpc3QpKSB7CiYjNDM7CQkJbG9uZyB0bXBfcmM7CiYjNDM7CiYjNDM7CQkJdG1wX3JjID0gZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3JjLCBkc3QsICZhbXA7c3VycGx1c19saXN0KTsKJiM0MzsJCQlpZiAocmMgJmd0Oz0gMCkKJiM0MzsJCQkJcmMgPSB0bXBfcmM7CiYjNDM7CQl9CiAKIAkJc3Bpbl9sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAKQEAgLTQwMTgsNiAmIzQzOzQwNTcsMTQgQEAgbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLAogCQkJbGlzdF9kZWwoJmFtcDtmb2xpby0mZ3Q7bHJ1KTsKIAkJCWFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTsKIAomIzQzOwkJCW5yX2RlbW90ZWQtLTsKJiM0MzsJCQlucl9wZXJzaXN0ZW50LS07CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsICZhbXA7c3VycGx1c19saXN0LCBscnUpIHsKJiM0MzsJCQlsaXN0X2RlbCgmYW1wO2ZvbGlvLSZndDtscnUpOwomIzQzOwkJCWFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIHRydWUpOwomIzQzOwogCQkJbnJfZGVtb3RlZC0tOwogCQl9CiAKQEAgLTQwMjksNyAmIzQzOzQwNzYsNyBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsCiAJICogTm90IGFic29sdXRlbHkgbmVjZXNzYXJ5LCBidXQgZm9yIGNvbnNpc3RlbmN5IHVwZGF0ZSBtYXhfaHVnZV9wYWdlcwogCSAqIGJhc2VkIG9uIHBvb2wgY2hhbmdlcyBmb3IgdGhlIGRlbW90ZWQgcGFnZS4KIAkgKi8KLQlzcmMtJmd0O21heF9odWdlX3BhZ2VzIC09IG5yX2RlbW90ZWQ7CiYjNDM7CXNyYy0mZ3Q7bWF4X2h1Z2VfcGFnZXMgLT0gbnJfcGVyc2lzdGVudDsKIAlkc3QtJmd0O21heF9odWdlX3BhZ2VzICYjNDM7PSBucl9kZW1vdGVkICZsdDsmbHQ7IChodWdlX3BhZ2Vfb3JkZXIoc3JjKSAtIGh1Z2VfcGFnZV9vcmRlcihkc3QpKTsKIAogCWlmIChyYyAmbHQ7IDApCmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3N5c2ZzLmMgYi9tbS9odWdldGxiX3N5c2ZzLmMKaW5kZXggNzllY2U5MTQwNmJmYS4uMzI2YTU0YjRkOTkxYyAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYl9zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGJfc3lzZnMuYwpAQCAtMjExLDE1ICYjNDM7MjExLDE1IEBAIHN0YXRpYyBzc2l6ZV90IGRlbW90ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJICogQ2hlY2sgZm9yIGF2YWlsYWJsZSBwYWdlcyB0byBkZW1vdGUgZWFjaCB0aW1lIHRob3JvdWdoIHRoZQogCQkgKiBsb29wIGFzIGRlbW90ZV9wb29sX2h1Z2VfcGFnZSB3aWxsIGRyb3AgaHVnZXRsYl9sb2NrLgogCQkgKi8KJiM0MzsJCW5yX2F2YWlsYWJsZSA9IGgtJmd0O2ZyZWVfaHVnZV9wYWdlcyAtIGgtJmd0O3Jlc3ZfaHVnZV9wYWdlczsKIAkJaWYgKG5pZCAhPSBOVU1BX05PX05PREUpCi0JCQlucl9hdmFpbGFibGUgPSBoLSZndDtmcmVlX2h1Z2VfcGFnZXNfbm9kZVtuaWRdOwotCQllbHNlCi0JCQlucl9hdmFpbGFibGUgPSBoLSZndDtmcmVlX2h1Z2VfcGFnZXM7Ci0JCW5yX2F2YWlsYWJsZSAtPSBoLSZndDtyZXN2X2h1Z2VfcGFnZXM7CiYjNDM7CQkJbnJfYXZhaWxhYmxlID0gbWluKG5yX2F2YWlsYWJsZSwKJiM0MzsJCQkJCSAgIGgtJmd0O2ZyZWVfaHVnZV9wYWdlc19ub2RlW25pZF0pOwogCQlpZiAoIW5yX2F2YWlsYWJsZSkKIAkJCWJyZWFrOwogCi0JCXJjID0gZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKGgsIG5fbWFzaywgbnJfZGVtb3RlKTsKJiM0MzsJCXJjID0gZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKGgsIG5fbWFzaywKJiM0MzsJCQkJCSAgIG1pbihucl9kZW1vdGUsIG5yX2F2YWlsYWJsZSkpOwogCQlpZiAocmMgJmx0OyAwKSB7CiAJCQllcnIgPSByYzsKIAkJCWJyZWFrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgVGhpcyBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBjbGVhcmx5IHRvdWNoaW5nIHRoZSBIdWdlVExCIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtb2RpZnlpbmcgYG1tL2h1Z2V0bGIuY2AgYW5kIGBtbS9odWdldGxiX3N5c2ZzLmNgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGFsdGVyaW5nIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGFuZCBgZGVtb3RlX3N0b3JlYCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gaHVnZSBwYWdlIGRlbW90aW9uLCBzdXJwbHVzIGFjY291bnRpbmcsIGFuZCBhdmFpbGFiaWxpdHkgY2hlY2tzIOKAkyBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhdCB0aGUga2VybmVsIGxldmVsLiBTaW5jZSBgZGVtb3RlX3N0b3JlYCBpcyB0aWVkIHRvIHN5c2ZzLCB0aGlzIHBhdGNoIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIFRoYXQgbWVhbnMgd2UgYWJzb2x1dGVseSBuZWVkIHRvIG1hcmsgdGhpcyBmb3IgZnV6emluZy4gYFdvcnRoRnV6emluZz10cnVlYCBpcyB0aGUgY29ycmVjdCBjYWxsIGhlcmUuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYG1tL2h1Z2V0bGIuY2AgaXMgZ29pbmcgdG8gYmUgY29tcGlsZWQgaWYgYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGRlcGVuZHMgb24sIHRvIHByb3Blcmx5IGRldGVybWluZSBmdXp6aW5nIHN0cmF0ZWdpZXMsIGNvdmVyYWdlIGdvYWxzLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBvbiB0aGUgcnVubmluZyBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYi5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9ODA9b2JqLSQoQ09ORklHX0hBU19ETUEpXHQmIzQzOz0gZG1hcG9vbC5vXG5tbS9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGIubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xubW0vTWFrZWZpbGUtODItaWZkZWYgQ09ORklHX0NNQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NzQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgdGhlIEZvdW5kYXRpb246IEh1Z2VUTEIgUmVxdWlyZW1lbnRzKioKCkFscmlnaHQsIHRoZSBjb2RlJiMzOTtzIGluZGljYXRpbmcgdGhhdCBgQ09ORklHX0hVR0VUTEJGU2AgaXMgYSBub24tbmVnb3RpYWJsZSBwcmVyZXF1aXNpdGUuIE1ha2VzIHNlbnNlOyBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGh1Z2UgcGFnZXMsIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnQgbmVlZHMgdG8gYmUgaW4gcGxhY2UuIE5vdywgYmVmb3JlIEkgZGl2ZSBhbnkgZGVlcGVyLCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBhbHNvIGVuYWJsZWQuIEdvdHRhIGVuc3VyZSB0aGUgY29yZSBwYWdlIHNpemUgc3VwcG9ydCBpcyBwcmVzZW50LCBiZWZvcmUgSSBzdGFydCByZWx5aW5nIG9uIGl0LiBXb3VsZG4mIzM5O3Qgd2FudCB0byBjaGFzZSBteSB0YWlsIGxhdGVyLiBCZXN0IHRvIGNvbmZpcm0gdGhlc2UgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIHJpZ2h0IGF0IHRoZSBzdGFydCwgdG8gYXZvaWQgYW55IHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLiBJdCYjMzk7cyBhIHF1aWNrIGNoZWNrLCBidXQgYSBjcnVjaWFsIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI3NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LCBzbyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byBgZnMvS2NvbmZpZ2AuIEkga25vdyB0aGF0JiMzOTtzIHRoZSBjZW50cmFsIGh1YiBmb3IgbW9zdCBmaWxlc3lzdGVtLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBMZXQmIzM5O3Mgc2VlLi4uIGFyb3VuZCBsaW5lIDI1MCwgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBtb3JlIGdlbmVyYWwgZmlsZXN5c3RlbSBvcHRpb25zIGJlZ2luLCBvciBwZXJoYXBzIHdoZXJlIGEgc3BlY2lmaWMgcmVsZXZhbnQgc2VjdGlvbiBiZWdpbnMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHJlbGV2YW50IHNlY3Rpb24gdG8gcGF5IGF0dGVudGlvbiB0by4gSG9wZWZ1bGx5LCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBnaXZlcyBtZSB3aGF0IEkgbmVlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYXJlIHR1Y2tlZCBhd2F5IGFyb3VuZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI0NjpcdFxuIDI0NzpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI0ODpcdFx0ZGVmX2Jvb2wgblxuIDI0OTpcdFxuIDI1MDpcdG1lbnVjb25maWcgSFVHRVRMQkZTXG4gMjUxOlx0XHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuIDI1MjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI1MzpcdFx0c2VsZWN0IE1FTUZEX0NSRUFURVxuIDI1NDpcdFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcbiAyNTU6XHRcdGhlbHBcbiAyNTY6XHRcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxuIDI1NzpcdFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXG4gMjU4Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMjU5Olx0XG4gMjYwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjYxOlx0XG4gMjYyOlx0aWYgSFVHRVRMQkZTXG4gMjYzOlx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbiAyNjQ6XHRcdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MDMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgSHVnZSBQYWdlcyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgcHJldHR5IGNsZWFyOiB1bmRlcnN0YW5kaW5nIGhvdyBgSFVHRVRMQkZTYCBpcyBjb25maWd1cmVkIGluIHRoaXMgc3lzdGVtLiBUaGF0IHByb2JhYmx5IG1lYW5zIEkmIzM5O2xsIGJlIGRpZ2dpbmcgaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UsIGlzIHRvIGNoZWNrIGBtbS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlLCBzbyBJJiMzOTttIGJldHRpbmcgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZWZpbml0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZXhwbGFuYXRpb25zIGZvciBob3cgYEhVR0VUTEJfUEFHRWAgcmVsYXRlcyB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTcwOC1cbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxubW0vS2NvbmZpZy03MTAtXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYEhVR0VUTEJfUEFHRWAgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgSFVHRVRMQl9QQUdFYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBJdCYjMzk7cyB1c2VkIGhlcmUsIGJ1dCBJIGhhdmUgdGhpcyBuYWdnaW5nIGZlZWxpbmcgaXQgbWlnaHQgbm90IGJlICp3aXRoaW4qIHRoaXMgcGFydGljdWxhciBmaWxlIG9yIG1vZHVsZS4gSXQmIzM5O3MgYSBwcmV0dHkgY29tbW9uIG1hY3JvLCBzbyBpdCYjMzk7cyBlbnRpcmVseSBwbGF1c2libGUgaXQmIzM5O3MgY29taW5nIGluIGZyb20gc29tZSBpbmNsdWRlIGZpbGUgb3IgYSBoaWdoZXItbGV2ZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGNvbnRleHQuIElzIGl0IGEga2VybmVsLXdpZGUgY29uc3RhbnQ/IElzIGl0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYz8gSXMgaXQgZGV0ZXJtaW5lZCBieSBhIGJ1aWxkIGZsYWc/IEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBwcm9qZWN0IGZvciBpdHMgZGVmaW5pdGlvbiB0byBzZWUgd2hlcmUgaXQgb3JpZ2luYXRlcyBmcm9tLiBGaW5kaW5nIGl0cyBkZWZpbml0aW9uIGlzIHRoZSBrZXkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcbmZzL0tjb25maWctMjcyLVxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM2MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZVRMQkZTIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBIVUdFVExCRlNgIGNvbmZpZ3VyYXRpb24uIEl0IGxvb2tzIGxpa2UgdGhhdCYjMzk7cyB0aGUgY2VudHJhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3csIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBwaW5wb2ludGluZyB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgYW5kIGBkZW1vdGVfc3RvcmVgLiBBbHJpZ2h0LCBgZGVtb3RlX3N0b3JlYCBpcyB0aGUgc3lzZnMgc3RvcmUgZnVuY3Rpb24sIHNvIHRoYXQgZ2l2ZXMgbWUgYSBoYW5kbGUgb24gaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIHVzZXIgc3BhY2UgY29uZmlndXJhdGlvbi4gQnV0LCB0aGUgcmVhbCBjb3JlIGxvZ2ljIGlzIGdvaW5nIHRvIGJlIGluIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLiBJIHNob3VsZCBjaGVjayBpZiBpdCYjMzk7cyBzdGF0aWMuIFRoYXQgd2lsbCBkZXRlcm1pbmUgd2hhdCBzY29wZSBpdCBleGlzdHMgaW4gYW5kIGlmIEkgbmVlZCB0byBsb29rIGludG8gb3RoZXIgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZW1vdGVfcG9vbF9odWdlX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTM5MTk9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXG4tLVxubW0vaHVnZXRsYi5jLTM5NzctXG5tbS9odWdldGxiLmM6Mzk3ODpsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG5tbS9odWdldGxiLmMtMzk3OS1cdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3RvX2RlbW90ZSlcbi0tXG5tbS9odWdldGxiLmMtMzk5MS1cdGlmICghc3JjLVx1MDAzZWRlbW90ZV9vcmRlcikge1xubW0vaHVnZXRsYi5jOjM5OTI6XHRcdHByX3dhcm4oXCYjMzQ7SHVnZVRMQjogTlVMTCBkZW1vdGUgb3JkZXIgcGFzc2VkIHRvIGRlbW90ZV9wb29sX2h1Z2VfcGFnZS5cXG5cJiMzNDspO1xubW0vaHVnZXRsYi5jLTM5OTMtXHRcdHJldHVybiAtRUlOVkFMO1x0XHQvKiBpbnRlcm5hbCBlcnJvciAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODgwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAmIzM5O3MgRHluYW1pYyBOYXR1cmUqKgoKUmlnaHQsIHNvIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGlzbiYjMzk7dCBhIHN0YXRpYyB2YWx1ZSwgd2hpY2ggaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGZ1bGx5LiBUaGVyZWZvcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBvcmlnaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBhbmQgd2hlbiBpdCYjMzk7cyB1cGRhdGVkLiBJIGltbWVkaWF0ZWx5IHRoaW5rIHRvIGNoZWNrIHRoZSByZWxhdGVkIGNvZGUgd2l0aGluIHRoZSBodWdlIHBhZ2VzIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFdoZXJlJiMzOTtzIHRoZSBsb2dpY2FsIGxvY2F0aW9uIHRvIGZpbmQgdGhpcz8gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgbW0vaHVnZXRsYl9zeXNmcy5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlIGZvciBgZGVtb3RlX3N0b3JlYCDigJMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgc3lzZnMgYXR0cmlidXRlIGZvciBkZW1vdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4gSSYjMzk7bGwgZGlnIGludG8gdGhhdCBmaWxlIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVtb3RlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYl9zeXNmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfc3lzZnMuYz0xNzk9SFNUQVRFX0FUVFJfUk8oc3VycGx1c19odWdlcGFnZXMpO1xubW0vaHVnZXRsYl9zeXNmcy5jLTE4MC1cbm1tL2h1Z2V0bGJfc3lzZnMuYzoxODE6c3RhdGljIHNzaXplX3QgZGVtb3RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vaHVnZXRsYl9zeXNmcy5jLTE4Mi1cdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI3MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIERlZXAgaW50byBIdWdlIFBhZ2UgRGVtb3Rpb24qKgoKQWxyaWdodCwgc28gYGRlbW90ZV9zdG9yZWAgaXMgc3RhdGljLiBUaGF0IG1lYW5zIHdlIGRvbiYjMzk7dCBoYXZlIHRvIGNvbmNlcm4gb3Vyc2VsdmVzIHdpdGggZXh0ZXJuYWwgY2FsbHMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbi4gQSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgbm90IHRoZSBjcml0aWNhbCBwYXRoIGhlcmUuIFRoaXMgaXMgYSBiaXQgb2YgYSBicmVhZCBjcnVtYiBvbiBhIHdlbGwtd29ybiBwYXRoLgoKVGhlcmVmb3JlLCBvdXIgcmVhbCBmb2N1cyBuZWVkcyB0byBiZSBvbiBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUganVpY2UgaXMuIFRoYXQmIzM5O3MgdGhlIG9uZSB3ZSBuZWVkIHRvIHNjcnV0aW5pemUuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBjYWxsaW5nICp0aGF0KiBvbmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoLCB0aGUgZGVwZW5kZW5jaWVzLiBXaGF0IHVwc3RyZWFtIGNvbXBvbmVudHMgYXJlIHRyaWdnZXJpbmcgdGhpcyBkZW1vdGlvbj8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gTGV0JiMzOTtzIHRyYWNlIGl0IG91dCBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gRGlnZ2luZyBpbiBvbiBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBiZWhhdmlvci4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZmluZCBzb21lIG90aGVyIGNvZGUgdXNpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlbW90ZV9wb29sX2h1Z2VfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MzkxOT1zdGF0aWMgbG9uZyBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpzcmMsIHN0cnVjdCBoc3RhdGUgKmRzdCxcbi0tXG5tbS9odWdldGxiLmMtMzk3Ny1cbm1tL2h1Z2V0bGIuYzozOTc4OmxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbm1tL2h1Z2V0bGIuYy0zOTc5LVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfdG9fZGVtb3RlKVxuLS1cbm1tL2h1Z2V0bGIuYy0zOTkxLVx0aWYgKCFzcmMtXHUwMDNlZGVtb3RlX29yZGVyKSB7XG5tbS9odWdldGxiLmM6Mzk5MjpcdFx0cHJfd2FybihcJiMzNDtIdWdlVExCOiBOVUxMIGRlbW90ZSBvcmRlciBwYXNzZWQgdG8gZGVtb3RlX3Bvb2xfaHVnZV9wYWdlLlxcblwmIzM0Oyk7XG5tbS9odWdldGxiLmMtMzk5My1cdFx0cmV0dXJuIC1FSU5WQUw7XHRcdC8qIGludGVybmFsIGVycm9yICovXG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oPTEwMD1leHRlcm4gdm9pZCBwcmVwX2FuZF9hZGRfYWxsb2NhdGVkX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpoLFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTEwMS1cdFx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaDoxMDI6ZXh0ZXJuIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYyxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0xMDMtXHRcdFx0XHQgIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jPTE4MT1zdGF0aWMgc3NpemVfdCBkZW1vdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jLTIxMS1cdFx0ICogQ2hlY2sgZm9yIGF2YWlsYWJsZSBwYWdlcyB0byBkZW1vdGUgZWFjaCB0aW1lIHRob3JvdWdoIHRoZVxubW0vaHVnZXRsYl9zeXNmcy5jOjIxMjpcdFx0ICogbG9vcCBhcyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Ugd2lsbCBkcm9wIGh1Z2V0bGJfbG9jay5cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMTMtXHRcdCAqL1xuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMjAtXG5tbS9odWdldGxiX3N5c2ZzLmM6MjIxOlx0XHRyYyA9IGRlbW90ZV9wb29sX2h1Z2VfcGFnZShoLCBuX21hc2ssXG5tbS9odWdldGxiX3N5c2ZzLmMtMjIyLVx0XHRcdFx0XHQgICBtaW4obnJfZGVtb3RlLCBucl9hdmFpbGFibGUpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzExMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZSBQYWdlIERlbW90aW9uIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBodWdlIHBhZ2UgZGVtb3Rpb24gcHJvY2Vzcy4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gYGRlbW90ZV9zdG9yZWAsIHdoaWNoIG1lYW5zIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgICppcyogdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgYml0IG9mIGxvZ2ljLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSBob3cgYWNjZXNzaWJsZSB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGlzLiBIbW0sIGxldCYjMzk7cyBzZWUsIHllcywgSSByZW1lbWJlciBpdCYjMzk7cyBleHBvc2VkIHRocm91Z2ggc3lzZnMuIFRoZSBmaWxlIG5hbWUgaXMgYGRlbW90ZWAuIEFscmlnaHQsIHRoYXQgY29uZmlybXMgcmVhY2hhYmlsaXR5LiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHdoZXJlIGBkZW1vdGVfc3RvcmVgIGlzIGJlaW5nIHVzZWQuIE1ha2luZyBzdXJlIG5vdGhpbmcgc3VycHJpc2luZyBpcyBjYWxsaW5nIGl0IG91dHNpZGUgb2YgdGhlIGV4cGVjdGVkIHBhdGggaXMgYWx3YXlzIGEgZ29vZCBpZGVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZW1vdGVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiX3N5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYl9zeXNmcy5jPTE3OT1IU1RBVEVfQVRUUl9STyhzdXJwbHVzX2h1Z2VwYWdlcyk7XG5tbS9odWdldGxiX3N5c2ZzLmMtMTgwLVxubW0vaHVnZXRsYl9zeXNmcy5jOjE4MTpzdGF0aWMgc3NpemVfdCBkZW1vdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9odWdldGxiX3N5c2ZzLmMtMTgyLVx0ICAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTQ3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkF0dHJpYnV0ZSBEZWZpbml0aW9uIENoZWNrKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgY29uY2x1c2lvbnMgb3IgYW5hbHlzZXMsIEkgbmVlZCB0byBwYXVzZS4gSXQmIzM5O3MgY3J1Y2lhbCwgYWJzb2x1dGVseSAqY3JpdGljYWwqLCB0aGF0IEkgaGF2ZSBhIHJvY2stc29saWQgZ3Jhc3Agb24gdGhlIHByZWNpc2UgZGVmaW5pdGlvbiBvZiB0aGUgYXR0cmlidXRlIGluIHF1ZXN0aW9uLiBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGggYW55IG1lYW5pbmdmdWwgZXZhbHVhdGlvbiBvciByZWFzb25pbmcgd2l0aG91dCB0aGF0IGZvdW5kYXRpb24uIEFueSBwb3RlbnRpYWwgYW1iaWd1aXR5LCBudWFuY2UsIG9yIHRlY2huaWNhbCBzcGVjaWZpY2F0aW9uIGluaGVyZW50IGluIHRoZSBhdHRyaWJ1dGUgaXRzZWxmIGRpY3RhdGVzIHRoZSBlbnRpcmUgc3Vic2VxdWVudCBsaW5lIG9mIHRob3VnaHQuIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQgZGVmaW5pdGlvbjsgZXZlbiBhIG1pbm9yIG92ZXJzaWdodCB0aGVyZSBjb3VsZCBsZWFkIG1lIGRvd24gYSBjb21wbGV0ZWx5IGVycm9uZW91cyBwYXRoLCBhbmQgSSBuZWVkIHRvIGF2b2lkIGFueSB3YXN0ZSBvZiBteSB0aW1lLiBJIG11c3QgZW5zdXJlIHRoaXMgaXMgcGVyZmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVtb3RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYl9zeXNmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfc3lzZnMuYz0xNzk9SFNUQVRFX0FUVFJfUk8oc3VycGx1c19odWdlcGFnZXMpO1xubW0vaHVnZXRsYl9zeXNmcy5jLTE4MC1cbm1tL2h1Z2V0bGJfc3lzZnMuYzoxODE6c3RhdGljIHNzaXplX3QgZGVtb3RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vaHVnZXRsYl9zeXNmcy5jLTE4Mi1cdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xODMte1xubW0vaHVnZXRsYl9zeXNmcy5jOjE4NDpcdHVuc2lnbmVkIGxvbmcgbnJfZGVtb3RlO1xubW0vaHVnZXRsYl9zeXNmcy5jLTE4NS1cdHVuc2lnbmVkIGxvbmcgbnJfYXZhaWxhYmxlO1xuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0xOTAtXG5tbS9odWdldGxiX3N5c2ZzLmM6MTkxOlx0ZXJyID0ga3N0cnRvdWwoYnVmLCAxMCwgXHUwMDI2bnJfZGVtb3RlKTtcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xOTItXHRpZiAoZXJyKVxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMDYtXG5tbS9odWdldGxiX3N5c2ZzLmM6MjA3Olx0d2hpbGUgKG5yX2RlbW90ZSkge1xubW0vaHVnZXRsYl9zeXNmcy5jLTIwOC1cdFx0bG9uZyByYztcbi0tXG5tbS9odWdldGxiX3N5c2ZzLmMtMjEwLVx0XHQvKlxubW0vaHVnZXRsYl9zeXNmcy5jOjIxMTpcdFx0ICogQ2hlY2sgZm9yIGF2YWlsYWJsZSBwYWdlcyB0byBkZW1vdGUgZWFjaCB0aW1lIHRob3JvdWdoIHRoZVxubW0vaHVnZXRsYl9zeXNmcy5jOjIxMjpcdFx0ICogbG9vcCBhcyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Ugd2lsbCBkcm9wIGh1Z2V0bGJfbG9jay5cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMTMtXHRcdCAqL1xuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMjAtXG5tbS9odWdldGxiX3N5c2ZzLmM6MjIxOlx0XHRyYyA9IGRlbW90ZV9wb29sX2h1Z2VfcGFnZShoLCBuX21hc2ssXG5tbS9odWdldGxiX3N5c2ZzLmM6MjIyOlx0XHRcdFx0XHQgICBtaW4obnJfZGVtb3RlLCBucl9hdmFpbGFibGUpKTtcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMjMtXHRcdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMjctXG5tbS9odWdldGxiX3N5c2ZzLmM6MjI4Olx0XHRucl9kZW1vdGUgLT0gcmM7XG5tbS9odWdldGxiX3N5c2ZzLmMtMjI5LVx0fVxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMzctfVxubW0vaHVnZXRsYl9zeXNmcy5jOjIzODpIU1RBVEVfQVRUUl9XTyhkZW1vdGUpO1xubW0vaHVnZXRsYl9zeXNmcy5jLTIzOS1cbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNDA6c3RhdGljIHNzaXplX3QgZGVtb3RlX3NpemVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNDEtXHRcdFx0XHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNDMtXHRzdHJ1Y3QgaHN0YXRlICpoID0ga29ial90b19oc3RhdGUoa29iaiwgTlVMTCk7XG5tbS9odWdldGxiX3N5c2ZzLmM6MjQ0Olx0dW5zaWduZWQgbG9uZyBkZW1vdGVfc2l6ZSA9IChQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIGgtXHUwMDNlZGVtb3RlX29yZGVyKSAvIFNaXzFLO1xubW0vaHVnZXRsYl9zeXNmcy5jLTI0NS1cbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNDY6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVsdWtCXFxuXCYjMzQ7LCBkZW1vdGVfc2l6ZSk7XG5tbS9odWdldGxiX3N5c2ZzLmMtMjQ3LX1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNDgtXG5tbS9odWdldGxiX3N5c2ZzLmM6MjQ5OnN0YXRpYyBzc2l6ZV90IGRlbW90ZV9zaXplX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vaHVnZXRsYl9zeXNmcy5jLTI1MC1cdFx0XHRcdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNTIte1xubW0vaHVnZXRsYl9zeXNmcy5jOjI1MzpcdHN0cnVjdCBoc3RhdGUgKmgsICpkZW1vdGVfaHN0YXRlO1xubW0vaHVnZXRsYl9zeXNmcy5jOjI1NDpcdHVuc2lnbmVkIGxvbmcgZGVtb3RlX3NpemU7XG5tbS9odWdldGxiX3N5c2ZzLmM6MjU1Olx0dW5zaWduZWQgaW50IGRlbW90ZV9vcmRlcjtcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNTYtXG5tbS9odWdldGxiX3N5c2ZzLmM6MjU3Olx0ZGVtb3RlX3NpemUgPSAodW5zaWduZWQgbG9uZyltZW1wYXJzZShidWYsIE5VTEwpO1xubW0vaHVnZXRsYl9zeXNmcy5jLTI1OC1cbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNTk6XHRkZW1vdGVfaHN0YXRlID0gc2l6ZV90b19oc3RhdGUoZGVtb3RlX3NpemUpO1xubW0vaHVnZXRsYl9zeXNmcy5jOjI2MDpcdGlmICghZGVtb3RlX2hzdGF0ZSlcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNjEtXHRcdHJldHVybiAtRUlOVkFMO1xubW0vaHVnZXRsYl9zeXNmcy5jOjI2MjpcdGRlbW90ZV9vcmRlciA9IGRlbW90ZV9oc3RhdGUtXHUwMDNlb3JkZXI7XG5tbS9odWdldGxiX3N5c2ZzLmM6MjYzOlx0aWYgKGRlbW90ZV9vcmRlciBcdTAwM2MgSFVHRVRMQl9QQUdFX09SREVSKVxubW0vaHVnZXRsYl9zeXNmcy5jLTI2NC1cdFx0cmV0dXJuIC1FSU5WQUw7XG5tbS9odWdldGxiX3N5c2ZzLmMtMjY1LVxubW0vaHVnZXRsYl9zeXNmcy5jOjI2NjpcdC8qIGRlbW90ZSBvcmRlciBtdXN0IGJlIHNtYWxsZXIgdGhhbiBoc3RhdGUgb3JkZXIgKi9cbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNjctXHRoID0ga29ial90b19oc3RhdGUoa29iaiwgTlVMTCk7XG5tbS9odWdldGxiX3N5c2ZzLmM6MjY4Olx0aWYgKGRlbW90ZV9vcmRlciBcdTAwM2U9IGgtXHUwMDNlb3JkZXIpXG5tbS9odWdldGxiX3N5c2ZzLmMtMjY5LVx0XHRyZXR1cm4gLUVJTlZBTDtcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNzAtXG5tbS9odWdldGxiX3N5c2ZzLmM6MjcxOlx0LyogcmVzaXplX2xvY2sgc3luY2hyb25pemVzIGFjY2VzcyB0byBkZW1vdGUgc2l6ZSBhbmQgd3JpdGVzICovXG5tbS9odWdldGxiX3N5c2ZzLmMtMjcyLVx0bXV0ZXhfbG9jayhcdTAwMjZoLVx1MDAzZXJlc2l6ZV9sb2NrKTtcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNzM6XHRoLVx1MDAzZWRlbW90ZV9vcmRlciA9IGRlbW90ZV9vcmRlcjtcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNzQtXHRtdXRleF91bmxvY2soXHUwMDI2aC1cdTAwM2VyZXNpemVfbG9jayk7XG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jLTI3Ny19XG5tbS9odWdldGxiX3N5c2ZzLmM6Mjc4OkhTVEFURV9BVFRSKGRlbW90ZV9zaXplKTtcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNzktXG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jPTI5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBoc3RhdGVfYXR0cl9ncm91cCA9IHtcbi0tXG5tbS9odWdldGxiX3N5c2ZzLmMtMjk1LVxubW0vaHVnZXRsYl9zeXNmcy5jOjI5NjpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaHN0YXRlX2RlbW90ZV9hdHRyc1tdID0ge1xubW0vaHVnZXRsYl9zeXNmcy5jOjI5NzpcdFx1MDAyNmRlbW90ZV9zaXplX2F0dHIuYXR0cixcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyOTg6XHRcdTAwMjZkZW1vdGVfYXR0ci5hdHRyLFxubW0vaHVnZXRsYl9zeXNmcy5jLTI5OS1cdE5VTEwsXG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jLTMwMS1cbm1tL2h1Z2V0bGJfc3lzZnMuYzozMDI6c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaHN0YXRlX2RlbW90ZV9hdHRyX2dyb3VwID0ge1xubW0vaHVnZXRsYl9zeXNmcy5jOjMwMzpcdC5hdHRycyA9IGhzdGF0ZV9kZW1vdGVfYXR0cnMsXG5tbS9odWdldGxiX3N5c2ZzLmMtMzA0LX07XG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jPTMwNj1zdGF0aWMgaW50IGh1Z2V0bGJfc3lzZnNfYWRkX2hzdGF0ZShzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3Qga29iamVjdCAqcGFyZW50LFxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0zMjMtXG5tbS9odWdldGxiX3N5c2ZzLmM6MzI0Olx0aWYgKGgtXHUwMDNlZGVtb3RlX29yZGVyKSB7XG5tbS9odWdldGxiX3N5c2ZzLmMtMzI1LVx0XHRyZXR2YWwgPSBzeXNmc19jcmVhdGVfZ3JvdXAoaHN0YXRlX2tvYmpzW2hpXSxcbm1tL2h1Z2V0bGJfc3lzZnMuYzozMjY6XHRcdFx0XHRcdCAgICBcdTAwMjZoc3RhdGVfZGVtb3RlX2F0dHJfZ3JvdXApO1xubW0vaHVnZXRsYl9zeXNmcy5jLTMyNy1cdFx0aWYgKHJldHZhbCkge1xubW0vaHVnZXRsYl9zeXNmcy5jOjMyODpcdFx0XHRwcl93YXJuKFwmIzM0O0h1Z2VUTEIgdW5hYmxlIHRvIGNyZWF0ZSBkZW1vdGUgaW50ZXJmYWNlcyBmb3IgJXNcXG5cJiMzNDssIGgtXHUwMDNlbmFtZSk7XG5tbS9odWdldGxiX3N5c2ZzLmMtMzI5LVx0XHRcdHN5c2ZzX3JlbW92ZV9ncm91cChoc3RhdGVfa29ianNbaGldLCBoc3RhdGVfYXR0cl9ncm91cCk7XG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jPTM5Nj12b2lkIGh1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKVxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy00MDktXHRcdFx0Y29udGludWU7XG5tbS9odWdldGxiX3N5c2ZzLmM6NDEwOlx0XHRpZiAoaC1cdTAwM2VkZW1vdGVfb3JkZXIpXG5tbS9odWdldGxiX3N5c2ZzLmM6NDExOlx0XHRcdHN5c2ZzX3JlbW92ZV9ncm91cChoc3RhdGVfa29iaiwgXHUwMDI2aHN0YXRlX2RlbW90ZV9hdHRyX2dyb3VwKTtcbm1tL2h1Z2V0bGJfc3lzZnMuYy00MTItXHRcdHN5c2ZzX3JlbW92ZV9ncm91cChoc3RhdGVfa29iaiwgXHUwMDI2cGVyX25vZGVfaHN0YXRlX2F0dHJfZ3JvdXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTg1CgkJCQkJCQlvdXRwdXQ6IDkxCgkJCQkJCQl0aG91Z2h0czogNjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEh1Z2VUTEIgRGVtb3Rpb24gUGF0Y2gqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY3J1Y2lhbCBmaXggcmVsYXRlZCB0byBIdWdlVExCIHBhZ2UgZGVtb3Rpb24sIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBgZGVtb3RlYCBzeXNmcyBmaWxlIHdoZW4gYGgtJmd0O2RlbW90ZV9vcmRlcmAgaXNuJiMzOTt0IHplcm8uIEl0JiMzOTtzIGFkZHJlc3NpbmcgYSBidWcgaW4gdGhlIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBpc3N1ZXMgd2l0aCBob3cgc3VycGx1cyBhY2NvdW50aW5nIHdhcyBoYW5kbGVkIG9uIGEgcGVyLW5vZGUgYmFzaXMsIGFuZCB0aGUgY2hlY2sgZm9yIGBucl9hdmFpbGFibGVgIHdhc24mIzM5O3Qgcm9idXN0IGVub3VnaC4KCkxvb2tpbmcgY2xvc2VyLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHdhcnJhbnRzIGZ1enppbmcuIFRoZSBrZXkgZnVuY3Rpb24gdG8gemVybyBpbiBvbiBpcyBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBiZXNpZGVzIHRoZSBgSFVHRVRMQkZTYCBjb25maWcgYXJlIHJlbGV2YW50LiBCdXQgYEhVR0VUTEJfUEFHRWAgaXMgdGhlIG1haW4gdGhpbmcgYW5kIGl0IGlzIGRlZmluZWQgYXMgYGRlZl9ib29sIEhVR0VUTEJGU2AsIHNvIGBIVUdFVExCRlNgIGlzIHN1ZmZpY2llbnQuCgpJ4oCZdmUgY29uZmlybWVkIHRoYXQgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgaXMgb25seSBjYWxsZWQgZnJvbSBgZGVtb3RlX3N0b3JlYCwgYW5kIGBkZW1vdGVfc3RvcmVgIGlzIHN0YXRpYy4gVGhpcyBtZWFucyBkaXJlY3RseSB0YXJnZXRpbmcgYGRlbW90ZV9zdG9yZWAgYnkgbmFtZSBpbiBzeXprYWxsZXIgaXNuJiMzOTt0IHRoZSBiZXN0IGFwcHJvYWNoLCBzbyBJJiMzOTtsbCBzdGF5IGZvY3VzZWQgb24gYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAuCgpBZnRlciBhIHF1aWNrIHJldmlldyBvZiB0aGUgY29kZSBkaWZmLCB0aGUgZml4IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaW1wcm92ZWQgYWNjb3VudGluZyBhbmQgYXZhaWxhYmlsaXR5IGNoZWNrcyB3aXRoaW4gdGhlIHBlci1ub2RlIGxvb3AuIFRoaXMgcmVpbmZvcmNlcyBteSBpbml0aWFsIGFzc2Vzc21lbnQgdGhhdCB0aGlzIGlzIGEgdmFsdWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKVGhlcmVmb3JlLCBteSBwbGFuIGlzOgoKKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKioKKiAgICoqRm9jdXNTeW1ib2xzOiBcWyYjMzQ7ZGVtb3RlXF9wb29sXF9odWdlXF9wYWdlJiMzNDtcXSoqCiogICAqKkVuYWJsZUNvbmZpZ3M6IFxbJiMzNDtIVUdFVExCRlMmIzM0O1xdKioKKiAgICoqUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBIdWdlVExCIHBhZ2UgZGVtb3Rpb24gbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgc3VycGx1cyBhY2NvdW50aW5nIGFuZCBhdmFpbGFibGUgcGFnZSBjaGVja2luZyBkdXJpbmcgZGVtb3Rpb24uIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHRoZSAmIzM5O2RlbW90ZSYjMzk7IHN5c2ZzIGludGVyZmFjZSBmb3IgSHVnZVRMQiBwYWdlcy4mIzM0OyoqCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZW1vdGVfcG9vbF9odWdlX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSHVnZVRMQiBwYWdlIGRlbW90aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIHN1cnBsdXMgYWNjb3VudGluZyBhbmQgYXZhaWxhYmxlIHBhZ2UgY2hlY2tpbmcgZHVyaW5nIGRlbW90aW9uLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgJiMzOTtkZW1vdGUmIzM5OyBzeXNmcyBpbnRlcmZhY2UgZm9yIEh1Z2VUTEIgcGFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RlbW90ZV9wb29sX2h1Z2VfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBIdWdlVExCIHBhZ2UgZGVtb3Rpb24gbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgc3VycGx1cyBhY2NvdW50aW5nIGFuZCBhdmFpbGFibGUgcGFnZSBjaGVja2luZyBkdXJpbmcgZGVtb3Rpb24uIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHRoZSAmIzM5O2RlbW90ZSYjMzk7IHN5c2ZzIGludGVyZmFjZSBmb3IgSHVnZVRMQiBwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaHVnZSBwYWdlIGRlbW90aW9uIGxvZ2ljIGluIGBtbS9odWdldGxiLmNgIGFuZCBgbW0vaHVnZXRsYl9zeXNmcy5jYCwgc3BlY2lmaWNhbGx5IGFkZHJlc3Npbmcgc3VycGx1cyBwYWdlIGFjY291bnRpbmcgYW5kIGF2YWlsYWJsZSBwYWdlIGNhbGN1bGF0aW9ucy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcy4gQWxsIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9naWMgZXJyb3JzLCBsaXN0IGNvcnJ1cHRpb24sIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTM1MGYxODQ1NjliZDg5YjI5NmQzMzY4ZTM4MGJkZWRjMzk1M2ZmYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDA0OjUxOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IGVkMjYxMDViODRkZTIuLmFlMjZkNDAwYWQzMWYgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTM5ODMsNiAmIzQzOzM5ODMsNyBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsCiAJc3RydWN0IGhzdGF0ZSAqZHN0OwogCWxvbmcgcmMgPSAwOwogCWxvbmcgbnJfZGVtb3RlZCA9IDA7CiYjNDM7CWxvbmcgbnJfcGVyc2lzdGVudCA9IDA7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7aHVnZXRsYl9sb2NrKTsKIApAQCAtMzk5NSwyMiAmIzQzOzM5OTYsNjAgQEAgbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLAogCiAJZm9yX2VhY2hfbm9kZV9tYXNrX3RvX2ZyZWUoc3JjLCBucl9ub2Rlcywgbm9kZSwgbm9kZXNfYWxsb3dlZCkgewogCQlMSVNUX0hFQUQobGlzdCk7CiYjNDM7CQlMSVNUX0hFQUQoc3VycGx1c19saXN0KTsKIAkJc3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7CiYjNDM7CQl1bnNpZ25lZCBsb25nIG5yX2F2YWlsYWJsZSwgbnJfdGFyZ2V0OwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFJlLWNoZWNrIGF2YWlsYWJsZSBlYWNoIG5vZGUgYmF0Y2g6IHRoZSBwcmV2aW91cwomIzQzOwkJICogYmF0Y2ggcmVsZWFzZWQgaHVnZXRsYl9sb2NrIGZvciB2bWVtbWFwIHJlc3RvcmUvc3BsaXQsCiYjNDM7CQkgKiBhbmQgYSBuZXcgcmVzZXJ2YXRpb24gY291bGQgaGF2ZSBiZWVuIGFkZGVkIGluIHRoYXQKJiM0MzsJCSAqIHdpbmRvdywgc2hyaW5raW5nIHRoZSBidWRnZXQuICBhdmFpbGFibGUgaXMgZ2xvYmFsCiYjNDM7CQkgKiAocmVzdiBpcyBub3QgcGVyLW5vZGUpLCBzbyAwIG1lYW5zIG5vIG5vZGUgY2FuCiYjNDM7CQkgKiBjb250cmlidXRlIC0tIHN0b3AgdGhlIHdob2xlIHNjYW4uCiYjNDM7CQkgKi8KJiM0MzsJCW5yX2F2YWlsYWJsZSA9IGF2YWlsYWJsZV9odWdlX3BhZ2VzKHNyYyk7CiYjNDM7CQlpZiAoIW5yX2F2YWlsYWJsZSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBDYXAgdGhpcyBiYXRjaCBhdCB0aGUgY3VycmVudCBidWRnZXQ7IGV4cHJlc3NlZCBhcyBhCiYjNDM7CQkgKiBjdW11bGF0aXZlIHN0b3AgcG9pbnQgYmVjYXVzZSBucl9kZW1vdGVkIGlzIHJ1bm5pbmcuCiYjNDM7CQkgKi8KJiM0MzsJCW5yX3RhcmdldCA9IG5yX2RlbW90ZWQgJiM0MzsgbWluX3QodW5zaWduZWQgbG9uZywKJiM0MzsJCQkJbnJfdG9fZGVtb3RlIC0gbnJfZGVtb3RlZCwgbnJfYXZhaWxhYmxlKTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsICZhbXA7c3JjLSZndDtodWdlcGFnZV9mcmVlbGlzdHNbbm9kZV0sIGxydSkgewomIzQzOwkJCWJvb2wgYWRqdXN0X3N1cnBsdXM7CiYjNDM7CiAJCQlpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpCiAJCQkJY29udGludWU7CiAKLQkJCXJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTsKLQkJCWxpc3RfYWRkKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtsaXN0KTsKJiM0MzsJCQkvKiBTdXJwbHVzIGFjY291bnRpbmcgaXMgbWFpbnRhaW5lZCBwZXIgbm9kZSwgbm90IHBlciBmb2xpby4gKi8KJiM0MzsJCQlhZGp1c3Rfc3VycGx1cyA9IHNyYy0mZ3Q7c3VycGx1c19odWdlX3BhZ2VzX25vZGVbbm9kZV0gJmd0OyAwOwomIzQzOwkJCXJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGFkanVzdF9zdXJwbHVzKTsKJiM0MzsJCQlsaXN0X2FkZCgmYW1wO2ZvbGlvLSZndDtscnUsIGFkanVzdF9zdXJwbHVzID8gJmFtcDtzdXJwbHVzX2xpc3QgOiAmYW1wO2xpc3QpOwomIzQzOwkJCWlmICghYWRqdXN0X3N1cnBsdXMpCiYjNDM7CQkJCW5yX3BlcnNpc3RlbnQmIzQzOyYjNDM7OwogCi0JCQlpZiAoJiM0MzsmIzQzO25yX2RlbW90ZWQgPT0gbnJfdG9fZGVtb3RlKQomIzQzOwkJCWlmICgmIzQzOyYjNDM7bnJfZGVtb3RlZCA9PSBucl90YXJnZXQpCiAJCQkJYnJlYWs7CiAJCX0KIAomIzQzOwkJaWYgKGxpc3RfZW1wdHkoJmFtcDtsaXN0KSAmYW1wOyZhbXA7IGxpc3RfZW1wdHkoJmFtcDtzdXJwbHVzX2xpc3QpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwogCQlzcGluX3VubG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCi0JCXJjID0gZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3JjLCBkc3QsICZhbXA7bGlzdCk7CiYjNDM7CQlpZiAoIWxpc3RfZW1wdHkoJmFtcDtsaXN0KSkKJiM0MzsJCQlyYyA9IGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHNyYywgZHN0LCAmYW1wO2xpc3QpOwomIzQzOwkJaWYgKCFsaXN0X2VtcHR5KCZhbXA7c3VycGx1c19saXN0KSkgewomIzQzOwkJCWxvbmcgdG1wX3JjOwomIzQzOwomIzQzOwkJCXRtcF9yYyA9IGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHNyYywgZHN0LCAmYW1wO3N1cnBsdXNfbGlzdCk7CiYjNDM7CQkJaWYgKHJjICZndDs9IDApCiYjNDM7CQkJCXJjID0gdG1wX3JjOwomIzQzOwkJfQogCiAJCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCkBAIC00MDE4LDYgJiM0Mzs0MDU3LDE0IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCwKIAkJCWxpc3RfZGVsKCZhbXA7Zm9saW8tJmd0O2xydSk7CiAJCQlhZGRfaHVnZXRsYl9mb2xpbyhzcmMsIGZvbGlvLCBmYWxzZSk7CiAKJiM0MzsJCQlucl9kZW1vdGVkLS07CiYjNDM7CQkJbnJfcGVyc2lzdGVudC0tOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCBuZXh0LCAmYW1wO3N1cnBsdXNfbGlzdCwgbHJ1KSB7CiYjNDM7CQkJbGlzdF9kZWwoJmFtcDtmb2xpby0mZ3Q7bHJ1KTsKJiM0MzsJCQlhZGRfaHVnZXRsYl9mb2xpbyhzcmMsIGZvbGlvLCB0cnVlKTsKJiM0MzsKIAkJCW5yX2RlbW90ZWQtLTsKIAkJfQogCkBAIC00MDI5LDcgJiM0Mzs0MDc2LDcgQEAgbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLAogCSAqIE5vdCBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSwgYnV0IGZvciBjb25zaXN0ZW5jeSB1cGRhdGUgbWF4X2h1Z2VfcGFnZXMKIAkgKiBiYXNlZCBvbiBwb29sIGNoYW5nZXMgZm9yIHRoZSBkZW1vdGVkIHBhZ2UuCiAJICovCi0Jc3JjLSZndDttYXhfaHVnZV9wYWdlcyAtPSBucl9kZW1vdGVkOwomIzQzOwlzcmMtJmd0O21heF9odWdlX3BhZ2VzIC09IG5yX3BlcnNpc3RlbnQ7CiAJZHN0LSZndDttYXhfaHVnZV9wYWdlcyAmIzQzOz0gbnJfZGVtb3RlZCAmbHQ7Jmx0OyAoaHVnZV9wYWdlX29yZGVyKHNyYykgLSBodWdlX3BhZ2Vfb3JkZXIoZHN0KSk7CiAKIAlpZiAocmMgJmx0OyAwKQpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9zeXNmcy5jIGIvbW0vaHVnZXRsYl9zeXNmcy5jCmluZGV4IDc5ZWNlOTE0MDZiZmEuLjMyNmE1NGI0ZDk5MWMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGJfc3lzZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiX3N5c2ZzLmMKQEAgLTIxMSwxNSAmIzQzOzIxMSwxNSBAQCBzdGF0aWMgc3NpemVfdCBkZW1vdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCSAqIENoZWNrIGZvciBhdmFpbGFibGUgcGFnZXMgdG8gZGVtb3RlIGVhY2ggdGltZSB0aG9yb3VnaCB0aGUKIAkJICogbG9vcCBhcyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Ugd2lsbCBkcm9wIGh1Z2V0bGJfbG9jay4KIAkJICovCiYjNDM7CQlucl9hdmFpbGFibGUgPSBoLSZndDtmcmVlX2h1Z2VfcGFnZXMgLSBoLSZndDtyZXN2X2h1Z2VfcGFnZXM7CiAJCWlmIChuaWQgIT0gTlVNQV9OT19OT0RFKQotCQkJbnJfYXZhaWxhYmxlID0gaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzX25vZGVbbmlkXTsKLQkJZWxzZQotCQkJbnJfYXZhaWxhYmxlID0gaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzOwotCQlucl9hdmFpbGFibGUgLT0gaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzOwomIzQzOwkJCW5yX2F2YWlsYWJsZSA9IG1pbihucl9hdmFpbGFibGUsCiYjNDM7CQkJCQkgICBoLSZndDtmcmVlX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKTsKIAkJaWYgKCFucl9hdmFpbGFibGUpCiAJCQlicmVhazsKIAotCQlyYyA9IGRlbW90ZV9wb29sX2h1Z2VfcGFnZShoLCBuX21hc2ssIG5yX2RlbW90ZSk7CiYjNDM7CQlyYyA9IGRlbW90ZV9wb29sX2h1Z2VfcGFnZShoLCBuX21hc2ssCiYjNDM7CQkJCQkgICBtaW4obnJfZGVtb3RlLCBucl9hdmFpbGFibGUpKTsKIAkJaWYgKHJjICZsdDsgMCkgewogCQkJZXJyID0gcmM7CiAJCQlicmVhazsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MzkKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogMjM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEh1Z2UgUGFnZSBEZW1vdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGluIGBtbS9odWdldGxiLmNgIGFuZCBgZGVtb3RlX3N0b3JlYCBpbiBgbW0vaHVnZXRsYl9zeXNmcy5jYC4gSXQmIzM5O3MgYWxsIGFib3V0IGhvdyB3ZSBoYW5kbGUgaHVnZSBwYWdlIGRlbW90aW9uIOKAkyBkZWFsaW5nIHdpdGggdGhvc2Ugc3VycGx1cyBwYWdlcyBhbmQga2VlcGluZyB0aGUgYXZhaWxhYmxlIHBhZ2UgY291bnQgYWNjdXJhdGUuIEdvb2QuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmVkIGZsYWdzLiBObyBuZXcgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc2lnbiBmcm9tIGEgbWVtb3J5IHBlcnNwZWN0aXZlLiBBYnNvbHV0ZWx5IG5vIGtlcm5lbC10by11c2VyIGNvcGllcyBlaXRoZXIsIHNvIG5vIHJpc2sgdGhlcmUuIEFuZCwgYmFzZWQgb24gdGhpcyBpbml0aWFsIHNraW0sIHRoZXJlJiMzOTtzIG5vIHdheSBJIHNlZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZ2V0dGluZyBpbnRyb2R1Y2VkIG9yIHVzZWQsIHdoaWNoIGlzIGEgYmlnIGNvbmNlcm4uIFRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBwdXJlbHkgbG9naWMtZHJpdmVuLCBmb2N1c2VkIG9uIGFjY291bnRpbmcsIGxpc3QgbWFuaXB1bGF0aW9uLCBhbmQgbG9vcCBjb250cm9sIHdpdGhpbiB0aGUgZXhpc3RpbmcgaHVnZSBwYWdlIG1hbmFnZW1lbnQgZnJhbWV3b3JrLgoKTGV0JiMzOTtzIGRvIGEgbW9yZSB0aG9yb3VnaCBjaGVjayBvZiB0aGUgdmFyaWFibGVzLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gT2theSwgYG5yX3BlcnNpc3RlbnRgIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQgdG8gemVyby4gSSBjYW4gc2VlIHRoZSBjYWxjdWxhdGlvbnMgZm9yIGBucl9hdmFpbGFibGVgIGFuZCBgbnJfdGFyZ2V0YCDigJMgdGhhdCBsb29rcyByaWdodC4gVGhlIGBhZGp1c3Rfc3VycGx1c2AgYm9vbGVhbiBtYWtlcyBzZW5zZSwgYXMgZG9lcyB0aGUgdXNlIG9mIGBzdXJwbHVzX2xpc3RgIGFzIGEgbGlzdCBoZWFkLiBObyBpc3N1ZXMgdGhlcmUuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBFeGNlbGxlbnQuCgpHaXZlbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIHBhdGNoIGRvZXMgKm5vdCogcmVxdWlyZSBLTVNBTi4gVGhlIGxvZ2ljIGlzIHNlbGYtY29udGFpbmVkLCBhbmQgdGhlIHBvdGVudGlhbCByaXNrcyBhcmUgYWRlcXVhdGVseSBhZGRyZXNzZWQgYnkgc3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiwgaWYgbmVlZGVkLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBsb2dpYyBidWdzIHdoaWNoIGFyZSBtb3JlIHJlbGV2YW50IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdlIHBhZ2UgZGVtb3Rpb24gbG9naWMgaW4gYG1tL2h1Z2V0bGIuY2AgYW5kIGBtbS9odWdldGxiX3N5c2ZzLmNgLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBzdXJwbHVzIHBhZ2UgYWNjb3VudGluZyBhbmQgYXZhaWxhYmxlIHBhZ2UgY2FsY3VsYXRpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbGwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMsIGxpc3QgY29ycnVwdGlvbiwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGh1Z2UgcGFnZSBkZW1vdGlvbiBsb2dpYyBpbiBgbW0vaHVnZXRsYi5jYCBhbmQgYG1tL2h1Z2V0bGJfc3lzZnMuY2AsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIHN1cnBsdXMgcGFnZSBhY2NvdW50aW5nIGFuZCBhdmFpbGFibGUgcGFnZSBjYWxjdWxhdGlvbnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMuIEFsbCB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIGxvZ2ljIGVycm9ycywgbGlzdCBjb3JydXB0aW9uLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjA1LjYxOTc5NTExMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODg3NjQyNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRlbW90ZV9wb29sX2h1Z2VfcGFnZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGh1Z2UgcGFnZSBkZW1vdGlvbiBsb2dpYyBpbiBgbW0vaHVnZXRsYi5jYCBhbmQgYG1tL2h1Z2V0bGJfc3lzZnMuY2AsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIHN1cnBsdXMgcGFnZSBhY2NvdW50aW5nIGFuZCBhdmFpbGFibGUgcGFnZSBjYWxjdWxhdGlvbnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3BpZXMuIEFsbCB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIGxvZ2ljIGVycm9ycywgbGlzdCBjb3JydXB0aW9uLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSHVnZVRMQiBwYWdlIGRlbW90aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIHN1cnBsdXMgYWNjb3VudGluZyBhbmQgYXZhaWxhYmxlIHBhZ2UgY2hlY2tpbmcgZHVyaW5nIGRlbW90aW9uLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgJ2RlbW90ZScgc3lzZnMgaW50ZXJmYWNlIGZvciBIdWdlVExCIHBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MTowNS42MTk4MDE1OTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTMzNTY3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5MzUwZjE4NDU2OWJkODliMjk2ZDMzNjhlMzgwYmRlZGMzOTUzZmZjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIzIDA0OjUxOjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IGVkMjYxMDViODRkZTIuLmFlMjZkNDAwYWQzMWYgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYi5jXFxuKysrIGIvbW0vaHVnZXRsYi5jXFxuQEAgLTM5ODMsNiArMzk4Myw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG4gXFx0c3RydWN0IGhzdGF0ZSAqZHN0O1xcbiBcXHRsb25nIHJjID0gMDtcXG4gXFx0bG9uZyBucl9kZW1vdGVkID0gMDtcXG4rXFx0bG9uZyBucl9wZXJzaXN0ZW50ID0gMDtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcbkBAIC0zOTk1LDIyICszOTk2LDYwIEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG4gXFxuIFxcdGZvcl9lYWNoX25vZGVfbWFza190b19mcmVlKHNyYywgbnJfbm9kZXMsIG5vZGUsIG5vZGVzX2FsbG93ZWQpIHtcXG4gXFx0XFx0TElTVF9IRUFEKGxpc3QpO1xcbitcXHRcXHRMSVNUX0hFQUQoc3VycGx1c19saXN0KTtcXG4gXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgbnJfYXZhaWxhYmxlLCBucl90YXJnZXQ7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBSZS1jaGVjayBhdmFpbGFibGUgZWFjaCBub2RlIGJhdGNoOiB0aGUgcHJldmlvdXNcXG4rXFx0XFx0ICogYmF0Y2ggcmVsZWFzZWQgaHVnZXRsYl9sb2NrIGZvciB2bWVtbWFwIHJlc3RvcmUvc3BsaXQsXFxuK1xcdFxcdCAqIGFuZCBhIG5ldyByZXNlcnZhdGlvbiBjb3VsZCBoYXZlIGJlZW4gYWRkZWQgaW4gdGhhdFxcbitcXHRcXHQgKiB3aW5kb3csIHNocmlua2luZyB0aGUgYnVkZ2V0LiAgYXZhaWxhYmxlIGlzIGdsb2JhbFxcbitcXHRcXHQgKiAocmVzdiBpcyBub3QgcGVyLW5vZGUpLCBzbyAwIG1lYW5zIG5vIG5vZGUgY2FuXFxuK1xcdFxcdCAqIGNvbnRyaWJ1dGUgLS0gc3RvcCB0aGUgd2hvbGUgc2Nhbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG5yX2F2YWlsYWJsZSA9IGF2YWlsYWJsZV9odWdlX3BhZ2VzKHNyYyk7XFxuK1xcdFxcdGlmICghbnJfYXZhaWxhYmxlKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIENhcCB0aGlzIGJhdGNoIGF0IHRoZSBjdXJyZW50IGJ1ZGdldDsgZXhwcmVzc2VkIGFzIGFcXG4rXFx0XFx0ICogY3VtdWxhdGl2ZSBzdG9wIHBvaW50IGJlY2F1c2UgbnJfZGVtb3RlZCBpcyBydW5uaW5nLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bnJfdGFyZ2V0ID0gbnJfZGVtb3RlZCArIG1pbl90KHVuc2lnbmVkIGxvbmcsXFxuK1xcdFxcdFxcdFxcdG5yX3RvX2RlbW90ZSAtIG5yX2RlbW90ZWQsIG5yX2F2YWlsYWJsZSk7XFxuIFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFxcdTAwMjZzcmMtXFx1MDAzZWh1Z2VwYWdlX2ZyZWVsaXN0c1tub2RlXSwgbHJ1KSB7XFxuK1xcdFxcdFxcdGJvb2wgYWRqdXN0X3N1cnBsdXM7XFxuK1xcbiBcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpO1xcbi1cXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmxpc3QpO1xcbitcXHRcXHRcXHQvKiBTdXJwbHVzIGFjY291bnRpbmcgaXMgbWFpbnRhaW5lZCBwZXIgbm9kZSwgbm90IHBlciBmb2xpby4gKi9cXG4rXFx0XFx0XFx0YWRqdXN0X3N1cnBsdXMgPSBzcmMtXFx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25vZGVdIFxcdTAwM2UgMDtcXG4rXFx0XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgYWRqdXN0X3N1cnBsdXMpO1xcbitcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgYWRqdXN0X3N1cnBsdXMgPyBcXHUwMDI2c3VycGx1c19saXN0IDogXFx1MDAyNmxpc3QpO1xcbitcXHRcXHRcXHRpZiAoIWFkanVzdF9zdXJwbHVzKVxcbitcXHRcXHRcXHRcXHRucl9wZXJzaXN0ZW50Kys7XFxuIFxcbi1cXHRcXHRcXHRpZiAoKytucl9kZW1vdGVkID09IG5yX3RvX2RlbW90ZSlcXG4rXFx0XFx0XFx0aWYgKCsrbnJfZGVtb3RlZCA9PSBucl90YXJnZXQpXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bGlzdCkgXFx1MDAyNlxcdTAwMjYgbGlzdF9lbXB0eShcXHUwMDI2c3VycGx1c19saXN0KSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbiBcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcbi1cXHRcXHRyYyA9IGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHNyYywgZHN0LCBcXHUwMDI2bGlzdCk7XFxuK1xcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2bGlzdCkpXFxuK1xcdFxcdFxcdHJjID0gZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3JjLCBkc3QsIFxcdTAwMjZsaXN0KTtcXG4rXFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZzdXJwbHVzX2xpc3QpKSB7XFxuK1xcdFxcdFxcdGxvbmcgdG1wX3JjO1xcbitcXG4rXFx0XFx0XFx0dG1wX3JjID0gZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3JjLCBkc3QsIFxcdTAwMjZzdXJwbHVzX2xpc3QpO1xcbitcXHRcXHRcXHRpZiAocmMgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0XFx0cmMgPSB0bXBfcmM7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcbkBAIC00MDE4LDYgKzQwNTcsMTQgQEAgbG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxcbiBcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSk7XFxuIFxcdFxcdFxcdGFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcXG4gXFxuK1xcdFxcdFxcdG5yX2RlbW90ZWQtLTtcXG4rXFx0XFx0XFx0bnJfcGVyc2lzdGVudC0tO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFxcdTAwMjZzdXJwbHVzX2xpc3QsIGxydSkge1xcbitcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSk7XFxuK1xcdFxcdFxcdGFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIHRydWUpO1xcbitcXG4gXFx0XFx0XFx0bnJfZGVtb3RlZC0tO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC00MDI5LDcgKzQwNzYsNyBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXFxuIFxcdCAqIE5vdCBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSwgYnV0IGZvciBjb25zaXN0ZW5jeSB1cGRhdGUgbWF4X2h1Z2VfcGFnZXNcXG4gXFx0ICogYmFzZWQgb24gcG9vbCBjaGFuZ2VzIGZvciB0aGUgZGVtb3RlZCBwYWdlLlxcbiBcXHQgKi9cXG4tXFx0c3JjLVxcdTAwM2VtYXhfaHVnZV9wYWdlcyAtPSBucl9kZW1vdGVkO1xcbitcXHRzcmMtXFx1MDAzZW1heF9odWdlX3BhZ2VzIC09IG5yX3BlcnNpc3RlbnQ7XFxuIFxcdGRzdC1cXHUwMDNlbWF4X2h1Z2VfcGFnZXMgKz0gbnJfZGVtb3RlZCBcXHUwMDNjXFx1MDAzYyAoaHVnZV9wYWdlX29yZGVyKHNyYykgLSBodWdlX3BhZ2Vfb3JkZXIoZHN0KSk7XFxuIFxcbiBcXHRpZiAocmMgXFx1MDAzYyAwKVxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX3N5c2ZzLmMgYi9tbS9odWdldGxiX3N5c2ZzLmNcXG5pbmRleCA3OWVjZTkxNDA2YmZhLi4zMjZhNTRiNGQ5OTFjIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGJfc3lzZnMuY1xcbisrKyBiL21tL2h1Z2V0bGJfc3lzZnMuY1xcbkBAIC0yMTEsMTUgKzIxMSwxNSBAQCBzdGF0aWMgc3NpemVfdCBkZW1vdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuIFxcdFxcdCAqIENoZWNrIGZvciBhdmFpbGFibGUgcGFnZXMgdG8gZGVtb3RlIGVhY2ggdGltZSB0aG9yb3VnaCB0aGVcXG4gXFx0XFx0ICogbG9vcCBhcyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Ugd2lsbCBkcm9wIGh1Z2V0bGJfbG9jay5cXG4gXFx0XFx0ICovXFxuK1xcdFxcdG5yX2F2YWlsYWJsZSA9IGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlcyAtIGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcztcXG4gXFx0XFx0aWYgKG5pZCAhPSBOVU1BX05PX05PREUpXFxuLVxcdFxcdFxcdG5yX2F2YWlsYWJsZSA9IGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlc19ub2RlW25pZF07XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bnJfYXZhaWxhYmxlID0gaC1cXHUwMDNlZnJlZV9odWdlX3BhZ2VzO1xcbi1cXHRcXHRucl9hdmFpbGFibGUgLT0gaC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzO1xcbitcXHRcXHRcXHRucl9hdmFpbGFibGUgPSBtaW4obnJfYXZhaWxhYmxlLFxcbitcXHRcXHRcXHRcXHRcXHQgICBoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKTtcXG4gXFx0XFx0aWYgKCFucl9hdmFpbGFibGUpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4tXFx0XFx0cmMgPSBkZW1vdGVfcG9vbF9odWdlX3BhZ2UoaCwgbl9tYXNrLCBucl9kZW1vdGUpO1xcbitcXHRcXHRyYyA9IGRlbW90ZV9wb29sX2h1Z2VfcGFnZShoLCBuX21hc2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIG1pbihucl9kZW1vdGUsIG5yX2F2YWlsYWJsZSkpO1xcbiBcXHRcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdGVyciA9IHJjO1xcbiBcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6MDYuODczNzA5OTgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDY3OTA4NTg1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGVtb3RlX3Bvb2xfaHVnZV9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSHVnZVRMQiBwYWdlIGRlbW90aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIHN1cnBsdXMgYWNjb3VudGluZyBhbmQgYXZhaWxhYmxlIHBhZ2UgY2hlY2tpbmcgZHVyaW5nIGRlbW90aW9uLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgJ2RlbW90ZScgc3lzZnMgaW50ZXJmYWNlIGZvciBIdWdlVExCIHBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MzUwZjE4NDU2OWJkODliMjk2ZDMzNjhlMzgwYmRlZGMzOTUzZmZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMDQ6NTE6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGVkMjYxMDViODRkZTIuLmFlMjZkNDAwYWQzMWYgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTM5ODMsNiArMzk4Myw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdHN0cnVjdCBoc3RhdGUgKmRzdDtcbiBcdGxvbmcgcmMgPSAwO1xuIFx0bG9uZyBucl9kZW1vdGVkID0gMDtcbitcdGxvbmcgbnJfcGVyc2lzdGVudCA9IDA7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXG5AQCAtMzk5NSwyMiArMzk5Niw2MCBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4gXG4gXHRmb3JfZWFjaF9ub2RlX21hc2tfdG9fZnJlZShzcmMsIG5yX25vZGVzLCBub2RlLCBub2Rlc19hbGxvd2VkKSB7XG4gXHRcdExJU1RfSEVBRChsaXN0KTtcbitcdFx0TElTVF9IRUFEKHN1cnBsdXNfbGlzdCk7XG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sICpuZXh0O1xuK1x0XHR1bnNpZ25lZCBsb25nIG5yX2F2YWlsYWJsZSwgbnJfdGFyZ2V0O1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBSZS1jaGVjayBhdmFpbGFibGUgZWFjaCBub2RlIGJhdGNoOiB0aGUgcHJldmlvdXNcbitcdFx0ICogYmF0Y2ggcmVsZWFzZWQgaHVnZXRsYl9sb2NrIGZvciB2bWVtbWFwIHJlc3RvcmUvc3BsaXQsXG4rXHRcdCAqIGFuZCBhIG5ldyByZXNlcnZhdGlvbiBjb3VsZCBoYXZlIGJlZW4gYWRkZWQgaW4gdGhhdFxuK1x0XHQgKiB3aW5kb3csIHNocmlua2luZyB0aGUgYnVkZ2V0LiAgYXZhaWxhYmxlIGlzIGdsb2JhbFxuK1x0XHQgKiAocmVzdiBpcyBub3QgcGVyLW5vZGUpLCBzbyAwIG1lYW5zIG5vIG5vZGUgY2FuXG4rXHRcdCAqIGNvbnRyaWJ1dGUgLS0gc3RvcCB0aGUgd2hvbGUgc2Nhbi5cbitcdFx0ICovXG4rXHRcdG5yX2F2YWlsYWJsZSA9IGF2YWlsYWJsZV9odWdlX3BhZ2VzKHNyYyk7XG4rXHRcdGlmICghbnJfYXZhaWxhYmxlKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBDYXAgdGhpcyBiYXRjaCBhdCB0aGUgY3VycmVudCBidWRnZXQ7IGV4cHJlc3NlZCBhcyBhXG4rXHRcdCAqIGN1bXVsYXRpdmUgc3RvcCBwb2ludCBiZWNhdXNlIG5yX2RlbW90ZWQgaXMgcnVubmluZy5cbitcdFx0ICovXG4rXHRcdG5yX3RhcmdldCA9IG5yX2RlbW90ZWQgKyBtaW5fdCh1bnNpZ25lZCBsb25nLFxuK1x0XHRcdFx0bnJfdG9fZGVtb3RlIC0gbnJfZGVtb3RlZCwgbnJfYXZhaWxhYmxlKTtcbiBcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCBuZXh0LCBcdTAwMjZzcmMtXHUwMDNlaHVnZXBhZ2VfZnJlZWxpc3RzW25vZGVdLCBscnUpIHtcbitcdFx0XHRib29sIGFkanVzdF9zdXJwbHVzO1xuK1xuIFx0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcbi1cdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxpc3QpO1xuK1x0XHRcdC8qIFN1cnBsdXMgYWNjb3VudGluZyBpcyBtYWludGFpbmVkIHBlciBub2RlLCBub3QgcGVyIGZvbGlvLiAqL1xuK1x0XHRcdGFkanVzdF9zdXJwbHVzID0gc3JjLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25vZGVdIFx1MDAzZSAwO1xuK1x0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGFkanVzdF9zdXJwbHVzKTtcbitcdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIGFkanVzdF9zdXJwbHVzID8gXHUwMDI2c3VycGx1c19saXN0IDogXHUwMDI2bGlzdCk7XG4rXHRcdFx0aWYgKCFhZGp1c3Rfc3VycGx1cylcbitcdFx0XHRcdG5yX3BlcnNpc3RlbnQrKztcbiBcbi1cdFx0XHRpZiAoKytucl9kZW1vdGVkID09IG5yX3RvX2RlbW90ZSlcbitcdFx0XHRpZiAoKytucl9kZW1vdGVkID09IG5yX3RhcmdldClcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4rXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmxpc3QpIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnN1cnBsdXNfbGlzdCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFxuLVx0XHRyYyA9IGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHNyYywgZHN0LCBcdTAwMjZsaXN0KTtcbitcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmxpc3QpKVxuK1x0XHRcdHJjID0gZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3JjLCBkc3QsIFx1MDAyNmxpc3QpO1xuK1x0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2c3VycGx1c19saXN0KSkge1xuK1x0XHRcdGxvbmcgdG1wX3JjO1xuK1xuK1x0XHRcdHRtcF9yYyA9IGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHNyYywgZHN0LCBcdTAwMjZzdXJwbHVzX2xpc3QpO1xuK1x0XHRcdGlmIChyYyBcdTAwM2U9IDApXG4rXHRcdFx0XHRyYyA9IHRtcF9yYztcbitcdFx0fVxuIFxuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXG5AQCAtNDAxOCw2ICs0MDU3LDE0IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuIFx0XHRcdGFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcbiBcbitcdFx0XHRucl9kZW1vdGVkLS07XG4rXHRcdFx0bnJfcGVyc2lzdGVudC0tO1xuK1x0XHR9XG4rXG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXHUwMDI2c3VycGx1c19saXN0LCBscnUpIHtcbitcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuK1x0XHRcdGFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIHRydWUpO1xuK1xuIFx0XHRcdG5yX2RlbW90ZWQtLTtcbiBcdFx0fVxuIFxuQEAgLTQwMjksNyArNDA3Niw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdCAqIE5vdCBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSwgYnV0IGZvciBjb25zaXN0ZW5jeSB1cGRhdGUgbWF4X2h1Z2VfcGFnZXNcbiBcdCAqIGJhc2VkIG9uIHBvb2wgY2hhbmdlcyBmb3IgdGhlIGRlbW90ZWQgcGFnZS5cbiBcdCAqL1xuLVx0c3JjLVx1MDAzZW1heF9odWdlX3BhZ2VzIC09IG5yX2RlbW90ZWQ7XG4rXHRzcmMtXHUwMDNlbWF4X2h1Z2VfcGFnZXMgLT0gbnJfcGVyc2lzdGVudDtcbiBcdGRzdC1cdTAwM2VtYXhfaHVnZV9wYWdlcyArPSBucl9kZW1vdGVkIFx1MDAzY1x1MDAzYyAoaHVnZV9wYWdlX29yZGVyKHNyYykgLSBodWdlX3BhZ2Vfb3JkZXIoZHN0KSk7XG4gXG4gXHRpZiAocmMgXHUwMDNjIDApXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9zeXNmcy5jIGIvbW0vaHVnZXRsYl9zeXNmcy5jXG5pbmRleCA3OWVjZTkxNDA2YmZhLi4zMjZhNTRiNGQ5OTFjIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl9zeXNmcy5jXG4rKysgYi9tbS9odWdldGxiX3N5c2ZzLmNcbkBAIC0yMTEsMTUgKzIxMSwxNSBAQCBzdGF0aWMgc3NpemVfdCBkZW1vdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdCAqIENoZWNrIGZvciBhdmFpbGFibGUgcGFnZXMgdG8gZGVtb3RlIGVhY2ggdGltZSB0aG9yb3VnaCB0aGVcbiBcdFx0ICogbG9vcCBhcyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Ugd2lsbCBkcm9wIGh1Z2V0bGJfbG9jay5cbiBcdFx0ICovXG4rXHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzIC0gaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXM7XG4gXHRcdGlmIChuaWQgIT0gTlVNQV9OT19OT0RFKVxuLVx0XHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzX25vZGVbbmlkXTtcbi1cdFx0ZWxzZVxuLVx0XHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzO1xuLVx0XHRucl9hdmFpbGFibGUgLT0gaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXM7XG4rXHRcdFx0bnJfYXZhaWxhYmxlID0gbWluKG5yX2F2YWlsYWJsZSxcbitcdFx0XHRcdFx0ICAgaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKTtcbiBcdFx0aWYgKCFucl9hdmFpbGFibGUpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdHJjID0gZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKGgsIG5fbWFzaywgbnJfZGVtb3RlKTtcbitcdFx0cmMgPSBkZW1vdGVfcG9vbF9odWdlX3BhZ2UoaCwgbl9tYXNrLFxuK1x0XHRcdFx0XHQgICBtaW4obnJfZGVtb3RlLCBucl9hdmFpbGFibGUpKTtcbiBcdFx0aWYgKHJjIFx1MDAzYyAwKSB7XG4gXHRcdFx0ZXJyID0gcmM7XG4gXHRcdFx0YnJlYWs7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MTowNi44NzM3MTE0MzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzI1NzkwOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgVGhpcyBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyBjbGVhcmx5IHRvdWNoaW5nIHRoZSBIdWdlVExCIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyBgbW0vaHVnZXRsYi5jYCBhbmQgYG1tL2h1Z2V0bGJfc3lzZnMuY2AuIFRoZSBmYWN0IHRoYXQgaXQncyBhbHRlcmluZyBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYCBhbmQgYGRlbW90ZV9zdG9yZWAgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyByZWxhdGVkIHRvIGh1Z2UgcGFnZSBkZW1vdGlvbiwgc3VycGx1cyBhY2NvdW50aW5nLCBhbmQgYXZhaWxhYmlsaXR5IGNoZWNrcyDigJMgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYXQgdGhlIGtlcm5lbCBsZXZlbC4gU2luY2UgYGRlbW90ZV9zdG9yZWAgaXMgdGllZCB0byBzeXNmcywgdGhpcyBwYXRjaCBpcyByZWFjaGFibGUgdGhyb3VnaCB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBUaGF0IG1lYW5zIHdlIGFic29sdXRlbHkgbmVlZCB0byBtYXJrIHRoaXMgZm9yIGZ1enppbmcuIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgdGhlIGNvcnJlY3QgY2FsbCBoZXJlLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgbW0vaHVnZXRsYi5jYCBpcyBnb2luZyB0byBiZSBjb21waWxlZCBpZiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgZW5hYmxlZC4gVGltZSB0byBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggZGVwZW5kcyBvbiwgdG8gcHJvcGVybHkgZGV0ZXJtaW5lIGZ1enppbmcgc3RyYXRlZ2llcywgY292ZXJhZ2UgZ29hbHMsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIHRoZSBydW5uaW5nIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ0MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjExLjE5OTUwNDg1OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTY2MTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9ODA9b2JqLSQoQ09ORklHX0hBU19ETUEpXFx0Kz0gZG1hcG9vbC5vXFxubW0vTWFrZWZpbGU6ODE6b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcXHQrPSBodWdldGxiLm8gaHVnZXRsYl9zeXNmcy5vIGh1Z2V0bGJfc3lzY3RsLm9cXG5tbS9NYWtlZmlsZS04Mi1pZmRlZiBDT05GSUdfQ01BXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjExLjI0OTE3MTE2NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzkxOTY0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIHRoZSBGb3VuZGF0aW9uOiBIdWdlVExCIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIHRoZSBjb2RlJ3MgaW5kaWNhdGluZyB0aGF0IGBDT05GSUdfSFVHRVRMQkZTYCBpcyBhIG5vbi1uZWdvdGlhYmxlIHByZXJlcXVpc2l0ZS4gTWFrZXMgc2Vuc2U7IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBodWdlIHBhZ2VzLCB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0IG5lZWRzIHRvIGJlIGluIHBsYWNlLiBOb3csIGJlZm9yZSBJIGRpdmUgYW55IGRlZXBlciwgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBhbHNvIGVuYWJsZWQuIEdvdHRhIGVuc3VyZSB0aGUgY29yZSBwYWdlIHNpemUgc3VwcG9ydCBpcyBwcmVzZW50LCBiZWZvcmUgSSBzdGFydCByZWx5aW5nIG9uIGl0LiBXb3VsZG4ndCB3YW50IHRvIGNoYXNlIG15IHRhaWwgbGF0ZXIuIEJlc3QgdG8gY29uZmlybSB0aGVzZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgcmlnaHQgYXQgdGhlIHN0YXJ0LCB0byBhdm9pZCBhbnkgc3VycHJpc2VzIGRvd24gdGhlIGxpbmUuIEl0J3MgYSBxdWljayBjaGVjaywgYnV0IGEgY3J1Y2lhbCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MToxNC4xODgzNjk1NjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0OTkyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjE0LjIzNTg3MTQyMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjIzNTI0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCwgc28gSSdtIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byBgZnMvS2NvbmZpZ2AuIEkga25vdyB0aGF0J3MgdGhlIGNlbnRyYWwgaHViIGZvciBtb3N0IGZpbGVzeXN0ZW0tcmVsYXRlZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuIExldCdzIHNlZS4uLiBhcm91bmQgbGluZSAyNTAsIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBtb3JlIGdlbmVyYWwgZmlsZXN5c3RlbSBvcHRpb25zIGJlZ2luLCBvciBwZXJoYXBzIHdoZXJlIGEgc3BlY2lmaWMgcmVsZXZhbnQgc2VjdGlvbiBiZWdpbnMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcmVsZXZhbnQgc2VjdGlvbiB0byBwYXkgYXR0ZW50aW9uIHRvLiBIb3BlZnVsbHksIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGdpdmVzIG1lIHdoYXQgSSBuZWVkLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGFyZSB0dWNrZWQgYXdheSBhcm91bmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MToxNy4zNTgyMjY0MDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI0NjpcXHRcXG4gMjQ3OlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbiAyNDg6XFx0XFx0ZGVmX2Jvb2wgblxcbiAyNDk6XFx0XFxuIDI1MDpcXHRtZW51Y29uZmlnIEhVR0VUTEJGU1xcbiAyNTE6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAyNTI6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbiAyNTM6XFx0XFx0c2VsZWN0IE1FTUZEX0NSRUFURVxcbiAyNTQ6XFx0XFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcXG4gMjU1OlxcdFxcdGhlbHBcXG4gMjU2OlxcdFxcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxcbiAyNTc6XFx0XFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXFxuIDI1ODpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNjE6XFx0XFxuIDI2MjpcXHRpZiBIVUdFVExCRlNcXG4gMjYzOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuIDI2NDpcXHRcXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MToxNy4zNTgzMjYzMzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzI0NDY3MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgSHVnZSBQYWdlcyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyBwcmV0dHkgY2xlYXI6IHVuZGVyc3RhbmRpbmcgaG93IGBIVUdFVExCRlNgIGlzIGNvbmZpZ3VyZWQgaW4gdGhpcyBzeXN0ZW0uIFRoYXQgcHJvYmFibHkgbWVhbnMgSSdsbCBiZSBkaWdnaW5nIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlLCBpcyB0byBjaGVjayBgbW0vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlLCBzbyBJJ20gYmV0dGluZyB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZWZpbml0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZXhwbGFuYXRpb25zIGZvciBob3cgYEhVR0VUTEJfUEFHRWAgcmVsYXRlcyB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgwMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6MjAuMDgyNzk2NDE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk4NDMwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNzA4LVxcbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbm1tL0tjb25maWctNzEwLVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6MjAuMTMwNzgyNjA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDU2MTYyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgSFVHRVRMQl9QQUdFYCBEZWZpbml0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgSFVHRVRMQl9QQUdFYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBJdCdzIHVzZWQgaGVyZSwgYnV0IEkgaGF2ZSB0aGlzIG5hZ2dpbmcgZmVlbGluZyBpdCBtaWdodCBub3QgYmUgKndpdGhpbiogdGhpcyBwYXJ0aWN1bGFyIGZpbGUgb3IgbW9kdWxlLiBJdCdzIGEgcHJldHR5IGNvbW1vbiBtYWNybywgc28gaXQncyBlbnRpcmVseSBwbGF1c2libGUgaXQncyBjb21pbmcgaW4gZnJvbSBzb21lIGluY2x1ZGUgZmlsZSBvciBhIGhpZ2hlci1sZXZlbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgY29udGV4dC4gSXMgaXQgYSBrZXJuZWwtd2lkZSBjb25zdGFudD8gSXMgaXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljPyBJcyBpdCBkZXRlcm1pbmVkIGJ5IGEgYnVpbGQgZmxhZz8gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIHByb2plY3QgZm9yIGl0cyBkZWZpbml0aW9uIHRvIHNlZSB3aGVyZSBpdCBvcmlnaW5hdGVzIGZyb20uIEZpbmRpbmcgaXRzIGRlZmluaXRpb24gaXMgdGhlIGtleSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDcxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6MjMuNTc2NDAxOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNTI5MjY4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjI1LjY4MTY5ODg0N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg3MTc4NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZVRMQkZTIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgSFVHRVRMQkZTYCBjb25maWd1cmF0aW9uLiBJdCBsb29rcyBsaWtlIHRoYXQncyB0aGUgY2VudHJhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3csIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBwaW5wb2ludGluZyB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgYW5kIGBkZW1vdGVfc3RvcmVgLiBBbHJpZ2h0LCBgZGVtb3RlX3N0b3JlYCBpcyB0aGUgc3lzZnMgc3RvcmUgZnVuY3Rpb24sIHNvIHRoYXQgZ2l2ZXMgbWUgYSBoYW5kbGUgb24gaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIHVzZXIgc3BhY2UgY29uZmlndXJhdGlvbi4gQnV0LCB0aGUgcmVhbCBjb3JlIGxvZ2ljIGlzIGdvaW5nIHRvIGJlIGluIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLiBJIHNob3VsZCBjaGVjayBpZiBpdCdzIHN0YXRpYy4gVGhhdCB3aWxsIGRldGVybWluZSB3aGF0IHNjb3BlIGl0IGV4aXN0cyBpbiBhbmQgaWYgSSBuZWVkIHRvIGxvb2sgaW50byBvdGhlciBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MToyOS40Njg4ODAyNTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDc2MjYzNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVtb3RlX3Bvb2xfaHVnZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2V0bGIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MzkxOT1zdGF0aWMgbG9uZyBkZW1vdGVfZnJlZV9odWdldGxiX2ZvbGlvcyhzdHJ1Y3QgaHN0YXRlICpzcmMsIHN0cnVjdCBoc3RhdGUgKmRzdCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zOTc3LVxcbm1tL2h1Z2V0bGIuYzozOTc4OmxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG5tbS9odWdldGxiLmMtMzk3OS1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3RvX2RlbW90ZSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zOTkxLVxcdGlmICghc3JjLVxcdTAwM2VkZW1vdGVfb3JkZXIpIHtcXG5tbS9odWdldGxiLmM6Mzk5MjpcXHRcXHRwcl93YXJuKFxcXCJIdWdlVExCOiBOVUxMIGRlbW90ZSBvcmRlciBwYXNzZWQgdG8gZGVtb3RlX3Bvb2xfaHVnZV9wYWdlLlxcXFxuXFxcIik7XFxubW0vaHVnZXRsYi5jLTM5OTMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFx0XFx0LyogaW50ZXJuYWwgZXJyb3IgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6MzAuNjE2NTExMjcxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzYxMTAyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgJ3MgRHluYW1pYyBOYXR1cmUqKlxuXG5SaWdodCwgc28gYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgaXNuJ3QgYSBzdGF0aWMgdmFsdWUsIHdoaWNoIGlzIGNydWNpYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBmdWxseS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgb3JpZ2luLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYW5kIHdoZW4gaXQncyB1cGRhdGVkLiBJIGltbWVkaWF0ZWx5IHRoaW5rIHRvIGNoZWNrIHRoZSByZWxhdGVkIGNvZGUgd2l0aGluIHRoZSBodWdlIHBhZ2VzIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFdoZXJlJ3MgdGhlIGxvZ2ljYWwgbG9jYXRpb24gdG8gZmluZCB0aGlzPyBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBtbS9odWdldGxiX3N5c2ZzLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlIGZvciBgZGVtb3RlX3N0b3JlYCDigJMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgc3lzZnMgYXR0cmlidXRlIGZvciBkZW1vdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4gSSdsbCBkaWcgaW50byB0aGF0IGZpbGUgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODgwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6MzMuNzUyNjIzNjc4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI1NDUxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZW1vdGVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZXRsYl9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGJfc3lzZnMuYz0xNzk9SFNUQVRFX0FUVFJfUk8oc3VycGx1c19odWdlcGFnZXMpO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xODAtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjE4MTpzdGF0aWMgc3NpemVfdCBkZW1vdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vaHVnZXRsYl9zeXNmcy5jLTE4Mi1cXHQgICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjMzLjgwMDg4NDAxM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjYwODMzMDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gSHVnZSBQYWdlIERlbW90aW9uKipcblxuQWxyaWdodCwgc28gYGRlbW90ZV9zdG9yZWAgaXMgc3RhdGljLiBUaGF0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gY29uY2VybiBvdXJzZWx2ZXMgd2l0aCBleHRlcm5hbCBjYWxscyBvciBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBub3QgdGhlIGNyaXRpY2FsIHBhdGggaGVyZS4gVGhpcyBpcyBhIGJpdCBvZiBhIGJyZWFkIGNydW1iIG9uIGEgd2VsbC13b3JuIHBhdGguXG5cblRoZXJlZm9yZSwgb3VyIHJlYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAuIFRoYXQncyB3aGVyZSB0aGUganVpY2UgaXMuIFRoYXQncyB0aGUgb25lIHdlIG5lZWQgdG8gc2NydXRpbml6ZS4gV2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGNhbGxpbmcgKnRoYXQqIG9uZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGgsIHRoZSBkZXBlbmRlbmNpZXMuIFdoYXQgdXBzdHJlYW0gY29tcG9uZW50cyBhcmUgdHJpZ2dlcmluZyB0aGlzIGRlbW90aW9uPyBXaGF0J3MgdGhlIGNvbnRleHQ/IExldCdzIHRyYWNlIGl0IG91dCBhbmQgc2VlIHdoYXQncyB3aGF0LiBEaWdnaW5nIGluIG9uIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIGJlaGF2aW9yLiBMZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgc29tZSBvdGhlciBjb2RlIHVzaW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjczLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6MzcuMDYxNzE5MzE1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc0NzMxMjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlbW90ZV9wb29sX2h1Z2VfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTM5MTk9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXFxuLS1cXG5tbS9odWdldGxiLmMtMzk3Ny1cXG5tbS9odWdldGxiLmM6Mzk3ODpsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXFxubW0vaHVnZXRsYi5jLTM5NzktXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl90b19kZW1vdGUpXFxuLS1cXG5tbS9odWdldGxiLmMtMzk5MS1cXHRpZiAoIXNyYy1cXHUwMDNlZGVtb3RlX29yZGVyKSB7XFxubW0vaHVnZXRsYi5jOjM5OTI6XFx0XFx0cHJfd2FybihcXFwiSHVnZVRMQjogTlVMTCBkZW1vdGUgb3JkZXIgcGFzc2VkIHRvIGRlbW90ZV9wb29sX2h1Z2VfcGFnZS5cXFxcblxcXCIpO1xcbm1tL2h1Z2V0bGIuYy0zOTkzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcdFxcdC8qIGludGVybmFsIGVycm9yICovXFxuLS1cXG5tbS9odWdldGxiX2ludGVybmFsLmg9MTAwPWV4dGVybiB2b2lkIHByZXBfYW5kX2FkZF9hbGxvY2F0ZWRfZm9saW9zKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTEwMS1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpO1xcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaDoxMDI6ZXh0ZXJuIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYyxcXG5tbS9odWdldGxiX2ludGVybmFsLmgtMTAzLVxcdFxcdFxcdFxcdCAgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYz0xODE9c3RhdGljIHNzaXplX3QgZGVtb3RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jLTIxMS1cXHRcXHQgKiBDaGVjayBmb3IgYXZhaWxhYmxlIHBhZ2VzIHRvIGRlbW90ZSBlYWNoIHRpbWUgdGhvcm91Z2ggdGhlXFxubW0vaHVnZXRsYl9zeXNmcy5jOjIxMjpcXHRcXHQgKiBsb29wIGFzIGRlbW90ZV9wb29sX2h1Z2VfcGFnZSB3aWxsIGRyb3AgaHVnZXRsYl9sb2NrLlxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMTMtXFx0XFx0ICovXFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtMjIwLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyMjE6XFx0XFx0cmMgPSBkZW1vdGVfcG9vbF9odWdlX3BhZ2UoaCwgbl9tYXNrLFxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMjItXFx0XFx0XFx0XFx0XFx0ICAgbWluKG5yX2RlbW90ZSwgbnJfYXZhaWxhYmxlKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjM4LjczNjQ1NjYzN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjI1MTM5NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZSBQYWdlIERlbW90aW9uIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgaHVnZSBwYWdlIGRlbW90aW9uIHByb2Nlc3MuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCBpdCdzIG9ubHkgY2FsbGVkIGZyb20gYGRlbW90ZV9zdG9yZWAsIHdoaWNoIG1lYW5zIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgICppcyogdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgYml0IG9mIGxvZ2ljLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIGhvdyBhY2Nlc3NpYmxlIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgaXMuIEhtbSwgbGV0J3Mgc2VlLCB5ZXMsIEkgcmVtZW1iZXIgaXQncyBleHBvc2VkIHRocm91Z2ggc3lzZnMuIFRoZSBmaWxlIG5hbWUgaXMgYGRlbW90ZWAuIEFscmlnaHQsIHRoYXQgY29uZmlybXMgcmVhY2hhYmlsaXR5LiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgd2hlcmUgYGRlbW90ZV9zdG9yZWAgaXMgYmVpbmcgdXNlZC4gTWFraW5nIHN1cmUgbm90aGluZyBzdXJwcmlzaW5nIGlzIGNhbGxpbmcgaXQgb3V0c2lkZSBvZiB0aGUgZXhwZWN0ZWQgcGF0aCBpcyBhbHdheXMgYSBnb29kIGlkZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MTo0Mi4zNjE1OTk0NzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzcwNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlbW90ZV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiX3N5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYl9zeXNmcy5jPTE3OT1IU1RBVEVfQVRUUl9STyhzdXJwbHVzX2h1Z2VwYWdlcyk7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTE4MC1cXG5tbS9odWdldGxiX3N5c2ZzLmM6MTgxOnN0YXRpYyBzc2l6ZV90IGRlbW90ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9odWdldGxiX3N5c2ZzLmMtMTgyLVxcdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6NDIuNDE0OTc0MjIxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NjQyMzExOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBdHRyaWJ1dGUgRGVmaW5pdGlvbiBDaGVjayoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgY29uY2x1c2lvbnMgb3IgYW5hbHlzZXMsIEkgbmVlZCB0byBwYXVzZS4gSXQncyBjcnVjaWFsLCBhYnNvbHV0ZWx5ICpjcml0aWNhbCosIHRoYXQgSSBoYXZlIGEgcm9jay1zb2xpZCBncmFzcCBvbiB0aGUgcHJlY2lzZSBkZWZpbml0aW9uIG9mIHRoZSBhdHRyaWJ1dGUgaW4gcXVlc3Rpb24uIEkgY2FuJ3QgcHJvY2VlZCB3aXRoIGFueSBtZWFuaW5nZnVsIGV2YWx1YXRpb24gb3IgcmVhc29uaW5nIHdpdGhvdXQgdGhhdCBmb3VuZGF0aW9uLiBBbnkgcG90ZW50aWFsIGFtYmlndWl0eSwgbnVhbmNlLCBvciB0ZWNobmljYWwgc3BlY2lmaWNhdGlvbiBpbmhlcmVudCBpbiB0aGUgYXR0cmlidXRlIGl0c2VsZiBkaWN0YXRlcyB0aGUgZW50aXJlIHN1YnNlcXVlbnQgbGluZSBvZiB0aG91Z2h0LiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQgZGVmaW5pdGlvbjsgZXZlbiBhIG1pbm9yIG92ZXJzaWdodCB0aGVyZSBjb3VsZCBsZWFkIG1lIGRvd24gYSBjb21wbGV0ZWx5IGVycm9uZW91cyBwYXRoLCBhbmQgSSBuZWVkIHRvIGF2b2lkIGFueSB3YXN0ZSBvZiBteSB0aW1lLiBJIG11c3QgZW5zdXJlIHRoaXMgaXMgcGVyZmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU0NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjQ1LjA3OTIwODE5OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2OTU1ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVtb3RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2V0bGJfc3lzZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiX3N5c2ZzLmM9MTc5PUhTVEFURV9BVFRSX1JPKHN1cnBsdXNfaHVnZXBhZ2VzKTtcXG5tbS9odWdldGxiX3N5c2ZzLmMtMTgwLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzoxODE6c3RhdGljIHNzaXplX3QgZGVtb3RlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xODItXFx0ICAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xODMte1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzoxODQ6XFx0dW5zaWduZWQgbG9uZyBucl9kZW1vdGU7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTE4NS1cXHR1bnNpZ25lZCBsb25nIG5yX2F2YWlsYWJsZTtcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xOTAtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjE5MTpcXHRlcnIgPSBrc3RydG91bChidWYsIDEwLCBcXHUwMDI2bnJfZGVtb3RlKTtcXG5tbS9odWdldGxiX3N5c2ZzLmMtMTkyLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtMjA2LVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyMDc6XFx0d2hpbGUgKG5yX2RlbW90ZSkge1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMDgtXFx0XFx0bG9uZyByYztcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMTAtXFx0XFx0LypcXG5tbS9odWdldGxiX3N5c2ZzLmM6MjExOlxcdFxcdCAqIENoZWNrIGZvciBhdmFpbGFibGUgcGFnZXMgdG8gZGVtb3RlIGVhY2ggdGltZSB0aG9yb3VnaCB0aGVcXG5tbS9odWdldGxiX3N5c2ZzLmM6MjEyOlxcdFxcdCAqIGxvb3AgYXMgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlIHdpbGwgZHJvcCBodWdldGxiX2xvY2suXFxubW0vaHVnZXRsYl9zeXNmcy5jLTIxMy1cXHRcXHQgKi9cXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMjAtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjIyMTpcXHRcXHRyYyA9IGRlbW90ZV9wb29sX2h1Z2VfcGFnZShoLCBuX21hc2ssXFxubW0vaHVnZXRsYl9zeXNmcy5jOjIyMjpcXHRcXHRcXHRcXHRcXHQgICBtaW4obnJfZGVtb3RlLCBucl9hdmFpbGFibGUpKTtcXG5tbS9odWdldGxiX3N5c2ZzLmMtMjIzLVxcdFxcdGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yMjctXFxubW0vaHVnZXRsYl9zeXNmcy5jOjIyODpcXHRcXHRucl9kZW1vdGUgLT0gcmM7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTIyOS1cXHR9XFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtMjM3LX1cXG5tbS9odWdldGxiX3N5c2ZzLmM6MjM4OkhTVEFURV9BVFRSX1dPKGRlbW90ZSk7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTIzOS1cXG5tbS9odWdldGxiX3N5c2ZzLmM6MjQwOnN0YXRpYyBzc2l6ZV90IGRlbW90ZV9zaXplX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vaHVnZXRsYl9zeXNmcy5jLTI0MS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNDMtXFx0c3RydWN0IGhzdGF0ZSAqaCA9IGtvYmpfdG9faHN0YXRlKGtvYmosIE5VTEwpO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNDQ6XFx0dW5zaWduZWQgbG9uZyBkZW1vdGVfc2l6ZSA9IChQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgaC1cXHUwMDNlZGVtb3RlX29yZGVyKSAvIFNaXzFLO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNDUtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjI0NjpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVrQlxcXFxuXFxcIiwgZGVtb3RlX3NpemUpO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNDctfVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNDgtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjI0OTpzdGF0aWMgc3NpemVfdCBkZW1vdGVfc2l6ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9odWdldGxiX3N5c2ZzLmMtMjUwLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNTIte1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNTM6XFx0c3RydWN0IGhzdGF0ZSAqaCwgKmRlbW90ZV9oc3RhdGU7XFxubW0vaHVnZXRsYl9zeXNmcy5jOjI1NDpcXHR1bnNpZ25lZCBsb25nIGRlbW90ZV9zaXplO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNTU6XFx0dW5zaWduZWQgaW50IGRlbW90ZV9vcmRlcjtcXG5tbS9odWdldGxiX3N5c2ZzLmMtMjU2LVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNTc6XFx0ZGVtb3RlX3NpemUgPSAodW5zaWduZWQgbG9uZyltZW1wYXJzZShidWYsIE5VTEwpO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNTgtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjI1OTpcXHRkZW1vdGVfaHN0YXRlID0gc2l6ZV90b19oc3RhdGUoZGVtb3RlX3NpemUpO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNjA6XFx0aWYgKCFkZW1vdGVfaHN0YXRlKVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNjEtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubW0vaHVnZXRsYl9zeXNmcy5jOjI2MjpcXHRkZW1vdGVfb3JkZXIgPSBkZW1vdGVfaHN0YXRlLVxcdTAwM2VvcmRlcjtcXG5tbS9odWdldGxiX3N5c2ZzLmM6MjYzOlxcdGlmIChkZW1vdGVfb3JkZXIgXFx1MDAzYyBIVUdFVExCX1BBR0VfT1JERVIpXFxubW0vaHVnZXRsYl9zeXNmcy5jLTI2NC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5tbS9odWdldGxiX3N5c2ZzLmMtMjY1LVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNjY6XFx0LyogZGVtb3RlIG9yZGVyIG11c3QgYmUgc21hbGxlciB0aGFuIGhzdGF0ZSBvcmRlciAqL1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNjctXFx0aCA9IGtvYmpfdG9faHN0YXRlKGtvYmosIE5VTEwpO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyNjg6XFx0aWYgKGRlbW90ZV9vcmRlciBcXHUwMDNlPSBoLVxcdTAwM2VvcmRlcilcXG5tbS9odWdldGxiX3N5c2ZzLmMtMjY5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0yNzAtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjI3MTpcXHQvKiByZXNpemVfbG9jayBzeW5jaHJvbml6ZXMgYWNjZXNzIHRvIGRlbW90ZSBzaXplIGFuZCB3cml0ZXMgKi9cXG5tbS9odWdldGxiX3N5c2ZzLmMtMjcyLVxcdG11dGV4X2xvY2soXFx1MDAyNmgtXFx1MDAzZXJlc2l6ZV9sb2NrKTtcXG5tbS9odWdldGxiX3N5c2ZzLmM6MjczOlxcdGgtXFx1MDAzZWRlbW90ZV9vcmRlciA9IGRlbW90ZV9vcmRlcjtcXG5tbS9odWdldGxiX3N5c2ZzLmMtMjc0LVxcdG11dGV4X3VubG9jayhcXHUwMDI2aC1cXHUwMDNlcmVzaXplX2xvY2spO1xcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jLTI3Ny19XFxubW0vaHVnZXRsYl9zeXNmcy5jOjI3ODpIU1RBVEVfQVRUUihkZW1vdGVfc2l6ZSk7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTI3OS1cXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYz0yOTI9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaHN0YXRlX2F0dHJfZ3JvdXAgPSB7XFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtMjk1LVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzoyOTY6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmhzdGF0ZV9kZW1vdGVfYXR0cnNbXSA9IHtcXG5tbS9odWdldGxiX3N5c2ZzLmM6Mjk3OlxcdFxcdTAwMjZkZW1vdGVfc2l6ZV9hdHRyLmF0dHIsXFxubW0vaHVnZXRsYl9zeXNmcy5jOjI5ODpcXHRcXHUwMDI2ZGVtb3RlX2F0dHIuYXR0cixcXG5tbS9odWdldGxiX3N5c2ZzLmMtMjk5LVxcdE5VTEwsXFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtMzAxLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzozMDI6c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaHN0YXRlX2RlbW90ZV9hdHRyX2dyb3VwID0ge1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzozMDM6XFx0LmF0dHJzID0gaHN0YXRlX2RlbW90ZV9hdHRycyxcXG5tbS9odWdldGxiX3N5c2ZzLmMtMzA0LX07XFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmM9MzA2PXN0YXRpYyBpbnQgaHVnZXRsYl9zeXNmc19hZGRfaHN0YXRlKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBrb2JqZWN0ICpwYXJlbnQsXFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtMzIzLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYzozMjQ6XFx0aWYgKGgtXFx1MDAzZWRlbW90ZV9vcmRlcikge1xcbm1tL2h1Z2V0bGJfc3lzZnMuYy0zMjUtXFx0XFx0cmV0dmFsID0gc3lzZnNfY3JlYXRlX2dyb3VwKGhzdGF0ZV9rb2Jqc1toaV0sXFxubW0vaHVnZXRsYl9zeXNmcy5jOjMyNjpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmhzdGF0ZV9kZW1vdGVfYXR0cl9ncm91cCk7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTMyNy1cXHRcXHRpZiAocmV0dmFsKSB7XFxubW0vaHVnZXRsYl9zeXNmcy5jOjMyODpcXHRcXHRcXHRwcl93YXJuKFxcXCJIdWdlVExCIHVuYWJsZSB0byBjcmVhdGUgZGVtb3RlIGludGVyZmFjZXMgZm9yICVzXFxcXG5cXFwiLCBoLVxcdTAwM2VuYW1lKTtcXG5tbS9odWdldGxiX3N5c2ZzLmMtMzI5LVxcdFxcdFxcdHN5c2ZzX3JlbW92ZV9ncm91cChoc3RhdGVfa29ianNbaGldLCBoc3RhdGVfYXR0cl9ncm91cCk7XFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmM9Mzk2PXZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXFxuLS1cXG5tbS9odWdldGxiX3N5c2ZzLmMtNDA5LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2h1Z2V0bGJfc3lzZnMuYzo0MTA6XFx0XFx0aWYgKGgtXFx1MDAzZWRlbW90ZV9vcmRlcilcXG5tbS9odWdldGxiX3N5c2ZzLmM6NDExOlxcdFxcdFxcdHN5c2ZzX3JlbW92ZV9ncm91cChoc3RhdGVfa29iaiwgXFx1MDAyNmhzdGF0ZV9kZW1vdGVfYXR0cl9ncm91cCk7XFxubW0vaHVnZXRsYl9zeXNmcy5jLTQxMi1cXHRcXHRzeXNmc19yZW1vdmVfZ3JvdXAoaHN0YXRlX2tvYmosIFxcdTAwMjZwZXJfbm9kZV9oc3RhdGVfYXR0cl9ncm91cCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjQ1LjEyNzkwODUxNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDYyMjQ4MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEh1Z2VUTEIgRGVtb3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY3J1Y2lhbCBmaXggcmVsYXRlZCB0byBIdWdlVExCIHBhZ2UgZGVtb3Rpb24sIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBgZGVtb3RlYCBzeXNmcyBmaWxlIHdoZW4gYGgtXHUwMDNlZGVtb3RlX29yZGVyYCBpc24ndCB6ZXJvLiBJdCdzIGFkZHJlc3NpbmcgYSBidWcgaW4gdGhlIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBpc3N1ZXMgd2l0aCBob3cgc3VycGx1cyBhY2NvdW50aW5nIHdhcyBoYW5kbGVkIG9uIGEgcGVyLW5vZGUgYmFzaXMsIGFuZCB0aGUgY2hlY2sgZm9yIGBucl9hdmFpbGFibGVgIHdhc24ndCByb2J1c3QgZW5vdWdoLlxuXG5Mb29raW5nIGNsb3NlciwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IGZ1bmN0aW9uIHRvIHplcm8gaW4gb24gaXMgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgYmVzaWRlcyB0aGUgYEhVR0VUTEJGU2AgY29uZmlnIGFyZSByZWxldmFudC4gQnV0IGBIVUdFVExCX1BBR0VgIGlzIHRoZSBtYWluIHRoaW5nIGFuZCBpdCBpcyBkZWZpbmVkIGFzIGBkZWZfYm9vbCBIVUdFVExCRlNgLCBzbyBgSFVHRVRMQkZTYCBpcyBzdWZmaWNpZW50LlxuXG5J4oCZdmUgY29uZmlybWVkIHRoYXQgYGRlbW90ZV9wb29sX2h1Z2VfcGFnZWAgaXMgb25seSBjYWxsZWQgZnJvbSBgZGVtb3RlX3N0b3JlYCwgYW5kIGBkZW1vdGVfc3RvcmVgIGlzIHN0YXRpYy4gVGhpcyBtZWFucyBkaXJlY3RseSB0YXJnZXRpbmcgYGRlbW90ZV9zdG9yZWAgYnkgbmFtZSBpbiBzeXprYWxsZXIgaXNuJ3QgdGhlIGJlc3QgYXBwcm9hY2gsIHNvIEknbGwgc3RheSBmb2N1c2VkIG9uIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgLlxuXG5BZnRlciBhIHF1aWNrIHJldmlldyBvZiB0aGUgY29kZSBkaWZmLCB0aGUgZml4IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaW1wcm92ZWQgYWNjb3VudGluZyBhbmQgYXZhaWxhYmlsaXR5IGNoZWNrcyB3aXRoaW4gdGhlIHBlci1ub2RlIGxvb3AuIFRoaXMgcmVpbmZvcmNlcyBteSBpbml0aWFsIGFzc2Vzc21lbnQgdGhhdCB0aGlzIGlzIGEgdmFsdWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5UaGVyZWZvcmUsIG15IHBsYW4gaXM6XG5cbiogICAqKldvcnRoRnV6emluZzogdHJ1ZSoqXG4qICAgKipGb2N1c1N5bWJvbHM6IFxcW1wiZGVtb3RlXFxfcG9vbFxcX2h1Z2VcXF9wYWdlXCJcXF0qKlxuKiAgICoqRW5hYmxlQ29uZmlnczogXFxbXCJIVUdFVExCRlNcIlxcXSoqXG4qICAgKipSZWFzb25pbmc6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEh1Z2VUTEIgcGFnZSBkZW1vdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyBzdXJwbHVzIGFjY291bnRpbmcgYW5kIGF2YWlsYWJsZSBwYWdlIGNoZWNraW5nIGR1cmluZyBkZW1vdGlvbi4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgdGhlICdkZW1vdGUnIHN5c2ZzIGludGVyZmFjZSBmb3IgSHVnZVRMQiBwYWdlcy5cIioqXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5ODUsIk91dHB1dFRva2VucyI6OTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTE6NTMuNTkwMTU5MTE0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0MDY0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRlbW90ZV9wb29sX2h1Z2VfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEh1Z2VUTEIgcGFnZSBkZW1vdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyBzdXJwbHVzIGFjY291bnRpbmcgYW5kIGF2YWlsYWJsZSBwYWdlIGNoZWNraW5nIGR1cmluZyBkZW1vdGlvbi4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgdGhlICdkZW1vdGUnIHN5c2ZzIGludGVyZmFjZSBmb3IgSHVnZVRMQiBwYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZW1vdGVfcG9vbF9odWdlX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBIdWdlVExCIHBhZ2UgZGVtb3Rpb24gbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgc3VycGx1cyBhY2NvdW50aW5nIGFuZCBhdmFpbGFibGUgcGFnZSBjaGVja2luZyBkdXJpbmcgZGVtb3Rpb24uIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHRoZSAnZGVtb3RlJyBzeXNmcyBpbnRlcmZhY2UgZm9yIEh1Z2VUTEIgcGFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjUzLjY2NDU3MTkzNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0Mjg1NTc5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUxOjUzLjY2NTAyMTUwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2ODQyNDAwOTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaHVnZSBwYWdlIGRlbW90aW9uIGxvZ2ljIGluIGBtbS9odWdldGxiLmNgIGFuZCBgbW0vaHVnZXRsYl9zeXNmcy5jYCwgc3BlY2lmaWNhbGx5IGFkZHJlc3Npbmcgc3VycGx1cyBwYWdlIGFjY291bnRpbmcgYW5kIGF2YWlsYWJsZSBwYWdlIGNhbGN1bGF0aW9ucy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcy4gQWxsIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9naWMgZXJyb3JzLCBsaXN0IGNvcnJ1cHRpb24sIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MzUwZjE4NDU2OWJkODliMjk2ZDMzNjhlMzgwYmRlZGMzOTUzZmZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMDQ6NTE6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGVkMjYxMDViODRkZTIuLmFlMjZkNDAwYWQzMWYgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTM5ODMsNiArMzk4Myw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdHN0cnVjdCBoc3RhdGUgKmRzdDtcbiBcdGxvbmcgcmMgPSAwO1xuIFx0bG9uZyBucl9kZW1vdGVkID0gMDtcbitcdGxvbmcgbnJfcGVyc2lzdGVudCA9IDA7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXG5AQCAtMzk5NSwyMiArMzk5Niw2MCBAQCBsb25nIGRlbW90ZV9wb29sX2h1Z2VfcGFnZShzdHJ1Y3QgaHN0YXRlICpzcmMsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4gXG4gXHRmb3JfZWFjaF9ub2RlX21hc2tfdG9fZnJlZShzcmMsIG5yX25vZGVzLCBub2RlLCBub2Rlc19hbGxvd2VkKSB7XG4gXHRcdExJU1RfSEVBRChsaXN0KTtcbitcdFx0TElTVF9IRUFEKHN1cnBsdXNfbGlzdCk7XG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sICpuZXh0O1xuK1x0XHR1bnNpZ25lZCBsb25nIG5yX2F2YWlsYWJsZSwgbnJfdGFyZ2V0O1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBSZS1jaGVjayBhdmFpbGFibGUgZWFjaCBub2RlIGJhdGNoOiB0aGUgcHJldmlvdXNcbitcdFx0ICogYmF0Y2ggcmVsZWFzZWQgaHVnZXRsYl9sb2NrIGZvciB2bWVtbWFwIHJlc3RvcmUvc3BsaXQsXG4rXHRcdCAqIGFuZCBhIG5ldyByZXNlcnZhdGlvbiBjb3VsZCBoYXZlIGJlZW4gYWRkZWQgaW4gdGhhdFxuK1x0XHQgKiB3aW5kb3csIHNocmlua2luZyB0aGUgYnVkZ2V0LiAgYXZhaWxhYmxlIGlzIGdsb2JhbFxuK1x0XHQgKiAocmVzdiBpcyBub3QgcGVyLW5vZGUpLCBzbyAwIG1lYW5zIG5vIG5vZGUgY2FuXG4rXHRcdCAqIGNvbnRyaWJ1dGUgLS0gc3RvcCB0aGUgd2hvbGUgc2Nhbi5cbitcdFx0ICovXG4rXHRcdG5yX2F2YWlsYWJsZSA9IGF2YWlsYWJsZV9odWdlX3BhZ2VzKHNyYyk7XG4rXHRcdGlmICghbnJfYXZhaWxhYmxlKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBDYXAgdGhpcyBiYXRjaCBhdCB0aGUgY3VycmVudCBidWRnZXQ7IGV4cHJlc3NlZCBhcyBhXG4rXHRcdCAqIGN1bXVsYXRpdmUgc3RvcCBwb2ludCBiZWNhdXNlIG5yX2RlbW90ZWQgaXMgcnVubmluZy5cbitcdFx0ICovXG4rXHRcdG5yX3RhcmdldCA9IG5yX2RlbW90ZWQgKyBtaW5fdCh1bnNpZ25lZCBsb25nLFxuK1x0XHRcdFx0bnJfdG9fZGVtb3RlIC0gbnJfZGVtb3RlZCwgbnJfYXZhaWxhYmxlKTtcbiBcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCBuZXh0LCBcdTAwMjZzcmMtXHUwMDNlaHVnZXBhZ2VfZnJlZWxpc3RzW25vZGVdLCBscnUpIHtcbitcdFx0XHRib29sIGFkanVzdF9zdXJwbHVzO1xuK1xuIFx0XHRcdGlmIChmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcbi1cdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxpc3QpO1xuK1x0XHRcdC8qIFN1cnBsdXMgYWNjb3VudGluZyBpcyBtYWludGFpbmVkIHBlciBub2RlLCBub3QgcGVyIGZvbGlvLiAqL1xuK1x0XHRcdGFkanVzdF9zdXJwbHVzID0gc3JjLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25vZGVdIFx1MDAzZSAwO1xuK1x0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGFkanVzdF9zdXJwbHVzKTtcbitcdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIGFkanVzdF9zdXJwbHVzID8gXHUwMDI2c3VycGx1c19saXN0IDogXHUwMDI2bGlzdCk7XG4rXHRcdFx0aWYgKCFhZGp1c3Rfc3VycGx1cylcbitcdFx0XHRcdG5yX3BlcnNpc3RlbnQrKztcbiBcbi1cdFx0XHRpZiAoKytucl9kZW1vdGVkID09IG5yX3RvX2RlbW90ZSlcbitcdFx0XHRpZiAoKytucl9kZW1vdGVkID09IG5yX3RhcmdldClcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4rXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmxpc3QpIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnN1cnBsdXNfbGlzdCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFxuLVx0XHRyYyA9IGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHNyYywgZHN0LCBcdTAwMjZsaXN0KTtcbitcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmxpc3QpKVxuK1x0XHRcdHJjID0gZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3JjLCBkc3QsIFx1MDAyNmxpc3QpO1xuK1x0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2c3VycGx1c19saXN0KSkge1xuK1x0XHRcdGxvbmcgdG1wX3JjO1xuK1xuK1x0XHRcdHRtcF9yYyA9IGRlbW90ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHNyYywgZHN0LCBcdTAwMjZzdXJwbHVzX2xpc3QpO1xuK1x0XHRcdGlmIChyYyBcdTAwM2U9IDApXG4rXHRcdFx0XHRyYyA9IHRtcF9yYztcbitcdFx0fVxuIFxuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXG5AQCAtNDAxOCw2ICs0MDU3LDE0IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuIFx0XHRcdGFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIGZhbHNlKTtcbiBcbitcdFx0XHRucl9kZW1vdGVkLS07XG4rXHRcdFx0bnJfcGVyc2lzdGVudC0tO1xuK1x0XHR9XG4rXG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXHUwMDI2c3VycGx1c19saXN0LCBscnUpIHtcbitcdFx0XHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuK1x0XHRcdGFkZF9odWdldGxiX2ZvbGlvKHNyYywgZm9saW8sIHRydWUpO1xuK1xuIFx0XHRcdG5yX2RlbW90ZWQtLTtcbiBcdFx0fVxuIFxuQEAgLTQwMjksNyArNDA3Niw3IEBAIGxvbmcgZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKHN0cnVjdCBoc3RhdGUgKnNyYywgbm9kZW1hc2tfdCAqbm9kZXNfYWxsb3dlZCxcbiBcdCAqIE5vdCBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSwgYnV0IGZvciBjb25zaXN0ZW5jeSB1cGRhdGUgbWF4X2h1Z2VfcGFnZXNcbiBcdCAqIGJhc2VkIG9uIHBvb2wgY2hhbmdlcyBmb3IgdGhlIGRlbW90ZWQgcGFnZS5cbiBcdCAqL1xuLVx0c3JjLVx1MDAzZW1heF9odWdlX3BhZ2VzIC09IG5yX2RlbW90ZWQ7XG4rXHRzcmMtXHUwMDNlbWF4X2h1Z2VfcGFnZXMgLT0gbnJfcGVyc2lzdGVudDtcbiBcdGRzdC1cdTAwM2VtYXhfaHVnZV9wYWdlcyArPSBucl9kZW1vdGVkIFx1MDAzY1x1MDAzYyAoaHVnZV9wYWdlX29yZGVyKHNyYykgLSBodWdlX3BhZ2Vfb3JkZXIoZHN0KSk7XG4gXG4gXHRpZiAocmMgXHUwMDNjIDApXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9zeXNmcy5jIGIvbW0vaHVnZXRsYl9zeXNmcy5jXG5pbmRleCA3OWVjZTkxNDA2YmZhLi4zMjZhNTRiNGQ5OTFjIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYl9zeXNmcy5jXG4rKysgYi9tbS9odWdldGxiX3N5c2ZzLmNcbkBAIC0yMTEsMTUgKzIxMSwxNSBAQCBzdGF0aWMgc3NpemVfdCBkZW1vdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdCAqIENoZWNrIGZvciBhdmFpbGFibGUgcGFnZXMgdG8gZGVtb3RlIGVhY2ggdGltZSB0aG9yb3VnaCB0aGVcbiBcdFx0ICogbG9vcCBhcyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Ugd2lsbCBkcm9wIGh1Z2V0bGJfbG9jay5cbiBcdFx0ICovXG4rXHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzIC0gaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXM7XG4gXHRcdGlmIChuaWQgIT0gTlVNQV9OT19OT0RFKVxuLVx0XHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzX25vZGVbbmlkXTtcbi1cdFx0ZWxzZVxuLVx0XHRcdG5yX2F2YWlsYWJsZSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzO1xuLVx0XHRucl9hdmFpbGFibGUgLT0gaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXM7XG4rXHRcdFx0bnJfYXZhaWxhYmxlID0gbWluKG5yX2F2YWlsYWJsZSxcbitcdFx0XHRcdFx0ICAgaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZVtuaWRdKTtcbiBcdFx0aWYgKCFucl9hdmFpbGFibGUpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdHJjID0gZGVtb3RlX3Bvb2xfaHVnZV9wYWdlKGgsIG5fbWFzaywgbnJfZGVtb3RlKTtcbitcdFx0cmMgPSBkZW1vdGVfcG9vbF9odWdlX3BhZ2UoaCwgbl9tYXNrLFxuK1x0XHRcdFx0XHQgICBtaW4obnJfZGVtb3RlLCBucl9hdmFpbGFibGUpKTtcbiBcdFx0aWYgKHJjIFx1MDAzYyAwKSB7XG4gXHRcdFx0ZXJyID0gcmM7XG4gXHRcdFx0YnJlYWs7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MTo1My42NjUwMjI0MTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg0MjM3NTY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIdWdlIFBhZ2UgRGVtb3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkZW1vdGVfcG9vbF9odWdlX3BhZ2VgIGluIGBtbS9odWdldGxiLmNgIGFuZCBgZGVtb3RlX3N0b3JlYCBpbiBgbW0vaHVnZXRsYl9zeXNmcy5jYC4gSXQncyBhbGwgYWJvdXQgaG93IHdlIGhhbmRsZSBodWdlIHBhZ2UgZGVtb3Rpb24g4oCTIGRlYWxpbmcgd2l0aCB0aG9zZSBzdXJwbHVzIHBhZ2VzIGFuZCBrZWVwaW5nIHRoZSBhdmFpbGFibGUgcGFnZSBjb3VudCBhY2N1cmF0ZS4gR29vZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBJIGRvbid0IHNlZSBhbnkgcmVkIGZsYWdzLiBObyBuZXcgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2Qgc2lnbiBmcm9tIGEgbWVtb3J5IHBlcnNwZWN0aXZlLiBBYnNvbHV0ZWx5IG5vIGtlcm5lbC10by11c2VyIGNvcGllcyBlaXRoZXIsIHNvIG5vIHJpc2sgdGhlcmUuIEFuZCwgYmFzZWQgb24gdGhpcyBpbml0aWFsIHNraW0sIHRoZXJlJ3Mgbm8gd2F5IEkgc2VlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBnZXR0aW5nIGludHJvZHVjZWQgb3IgdXNlZCwgd2hpY2ggaXMgYSBiaWcgY29uY2Vybi4gVGhlIGNoYW5nZXMgYXBwZWFyIHRvIGJlIHB1cmVseSBsb2dpYy1kcml2ZW4sIGZvY3VzZWQgb24gYWNjb3VudGluZywgbGlzdCBtYW5pcHVsYXRpb24sIGFuZCBsb29wIGNvbnRyb2wgd2l0aGluIHRoZSBleGlzdGluZyBodWdlIHBhZ2UgbWFuYWdlbWVudCBmcmFtZXdvcmsuXG5cbkxldCdzIGRvIGEgbW9yZSB0aG9yb3VnaCBjaGVjayBvZiB0aGUgdmFyaWFibGVzLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gT2theSwgYG5yX3BlcnNpc3RlbnRgIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQgdG8gemVyby4gSSBjYW4gc2VlIHRoZSBjYWxjdWxhdGlvbnMgZm9yIGBucl9hdmFpbGFibGVgIGFuZCBgbnJfdGFyZ2V0YCDigJMgdGhhdCBsb29rcyByaWdodC4gVGhlIGBhZGp1c3Rfc3VycGx1c2AgYm9vbGVhbiBtYWtlcyBzZW5zZSwgYXMgZG9lcyB0aGUgdXNlIG9mIGBzdXJwbHVzX2xpc3RgIGFzIGEgbGlzdCBoZWFkLiBObyBpc3N1ZXMgdGhlcmUuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBFeGNlbGxlbnQuXG5cbkdpdmVuIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhpcyBwYXRjaCBkb2VzICpub3QqIHJlcXVpcmUgS01TQU4uIFRoZSBsb2dpYyBpcyBzZWxmLWNvbnRhaW5lZCwgYW5kIHRoZSBwb3RlbnRpYWwgcmlza3MgYXJlIGFkZXF1YXRlbHkgYWRkcmVzc2VkIGJ5IHN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4sIGlmIG5lZWRlZC4gSXQncyBlc3NlbnRpYWxseSBsb2dpYyBidWdzIHdoaWNoIGFyZSBtb3JlIHJlbGV2YW50IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzksIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6MDAuNTA3NDAwNTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdlIHBhZ2UgZGVtb3Rpb24gbG9naWMgaW4gYG1tL2h1Z2V0bGIuY2AgYW5kIGBtbS9odWdldGxiX3N5c2ZzLmNgLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBzdXJwbHVzIHBhZ2UgYWNjb3VudGluZyBhbmQgYXZhaWxhYmxlIHBhZ2UgY2FsY3VsYXRpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbGwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMsIGxpc3QgY29ycnVwdGlvbiwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdlIHBhZ2UgZGVtb3Rpb24gbG9naWMgaW4gYG1tL2h1Z2V0bGIuY2AgYW5kIGBtbS9odWdldGxiX3N5c2ZzLmNgLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBzdXJwbHVzIHBhZ2UgYWNjb3VudGluZyBhbmQgYXZhaWxhYmxlIHBhZ2UgY2FsY3VsYXRpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLiBBbGwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMsIGxpc3QgY29ycnVwdGlvbiwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workfloww7szz[1] Phase: Succeeded StartedAt: 2026-08-23 04:52:12 +0000 UTC FinishedAt: 2026-08-23 04:52:12 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-23 04:52:12 +0000 UTC FinishedAt: 2026-08-23 04:52:12 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2] Phase: Succeeded StartedAt: 2026-08-23 04:52:12 +0000 UTC FinishedAt: 2026-08-23 08:33:58 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 04:52:12 +0000 UTC FinishedAt: 2026-08-23 08:33:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 04:52:12 +0000 UTC FinishedAt: 2026-08-23 04:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 04:52:12 +0000 UTC FinishedAt: 2026-08-23 04:52:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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-workfloww7szz/series-workfloww7szz-convert-artifact-4113976608/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 04:52:22 +0000 UTC FinishedAt: 2026-08-23 05:08:57 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 04:52:22 +0000 UTC FinishedAt: 2026-08-23 05:08:57 +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:*433dd018-dc94-421e-8d66-c4495c5be932,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-workfloww7szz/series-workfloww7szz-convert-artifact-4113976608/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": "859cc4e5-798a-4e13-8487-e863b548044a", "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-workfloww7szz/series-workfloww7szz-build-action-212282342/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 04:52:22 +0000 UTC FinishedAt: 2026-08-23 05:08:47 +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:*433dd018-dc94-421e-8d66-c4495c5be932,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-workfloww7szz/series-workfloww7szz-convert-artifact-4113976608/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": "859cc4e5-798a-4e13-8487-e863b548044a", "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-workfloww7szz/series-workfloww7szz-build-action-212282342/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:08:57 +0000 UTC FinishedAt: 2026-08-23 05:08:57 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:08:57 +0000 UTC FinishedAt: 2026-08-23 05:08:57 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:08:57 +0000 UTC FinishedAt: 2026-08-23 05:09:07 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:08:57 +0000 UTC FinishedAt: 2026-08-23 05:09:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-workfloww7szz/series-workfloww7szz-convert-artifact-2791190343/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:09:07 +0000 UTC FinishedAt: 2026-08-23 05:11:02 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:09:07 +0000 UTC FinishedAt: 2026-08-23 05:10:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*859cc4e5-798a-4e13-8487-e863b548044a,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-workfloww7szz/series-workfloww7szz-build-action-212282342/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-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:11:02 +0000 UTC FinishedAt: 2026-08-23 05:11:02 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:11:02 +0000 UTC FinishedAt: 2026-08-23 05:11:02 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:11:02 +0000 UTC FinishedAt: 2026-08-23 05:27:52 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:11:02 +0000 UTC FinishedAt: 2026-08-23 05:27:52 +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:*433dd018-dc94-421e-8d66-c4495c5be932,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-workfloww7szz/series-workfloww7szz-convert-artifact-2791190343/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": "80a3e66e-930c-47b3-b46e-a5ef044dd51a", "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-workfloww7szz/series-workfloww7szz-build-action-2268753611/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:11:02 +0000 UTC FinishedAt: 2026-08-23 05:27:42 +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:*433dd018-dc94-421e-8d66-c4495c5be932,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-workfloww7szz/series-workfloww7szz-convert-artifact-2791190343/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": "80a3e66e-930c-47b3-b46e-a5ef044dd51a", "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-workfloww7szz/series-workfloww7szz-build-action-2268753611/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:27:52 +0000 UTC FinishedAt: 2026-08-23 05:27:52 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:27:52 +0000 UTC FinishedAt: 2026-08-23 05:27:52 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:27:52 +0000 UTC FinishedAt: 2026-08-23 05:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:27:52 +0000 UTC FinishedAt: 2026-08-23 05:29:32 +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:*80a3e66e-930c-47b3-b46e-a5ef044dd51a,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-workfloww7szz/series-workfloww7szz-build-action-2268753611/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-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:29:42 +0000 UTC FinishedAt: 2026-08-23 08:33:58 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:29:42 +0000 UTC FinishedAt: 2026-08-23 08:33:58 +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":["demote_pool_huge_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:*859cc4e5-798a-4e13-8487-e863b548044a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*80a3e66e-930c-47b3-b46e-a5ef044dd51a,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-workfloww7szz/series-workfloww7szz-build-action-212282342/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-workfloww7szz/series-workfloww7szz-build-action-2268753611/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:29:42 +0000 UTC FinishedAt: 2026-08-23 05:29:52 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:29:42 +0000 UTC FinishedAt: 2026-08-23 05:29:46 +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":["demote_pool_huge_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-workfloww7szz/series-workfloww7szz-convert-artifact-2646381600/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:29:42 +0000 UTC FinishedAt: 2026-08-23 05:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:29:42 +0000 UTC FinishedAt: 2026-08-23 05:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:29:42 +0000 UTC FinishedAt: 2026-08-23 05:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:29:52 +0000 UTC FinishedAt: 2026-08-23 08:33:58 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7szz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["demote_pool_huge_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"20b1986a-77a7-4536-afb9-fb9c42f9388d","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-23 05:29:52 +0000 UTC FinishedAt: 2026-08-23 08:33:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*859cc4e5-798a-4e13-8487-e863b548044a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*80a3e66e-930c-47b3-b46e-a5ef044dd51a,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-workfloww7szz/series-workfloww7szz-build-action-212282342/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-workfloww7szz/series-workfloww7szz-build-action-2268753611/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-workfloww7szz/series-workfloww7szz-convert-artifact-2646381600/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,}