Name: series-workflowh9x9h Phase: Succeeded StartedAt: 2026-08-11 07:42:17 +0000 UTC FinishedAt: 2026-08-11 11:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[0] Phase: Succeeded StartedAt: 2026-08-11 07:42:17 +0000 UTC FinishedAt: 2026-08-11 08:04:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 07:42:17 +0000 UTC FinishedAt: 2026-08-11 08:04:39 +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": "486d992fddf1e26f35a924d85bfbfd8d866a2ac2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "HIBERNATION", "NUMA" ], "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": "486d992fddf1e26f35a924d85bfbfd8d866a2ac2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "HIBERNATION", "NUMA" ], "series_id": "b59f645e-2944-4e0f-803b-46464c406ba1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_free_mem_cgroup_pages", "shrink_all_memory", "user_proactive_reclaim", "mem_cgroup_shrink_node", "node_reclaim" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0hJQkVSTkFUSU9OJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zaHJpbmtfbm9kZSYjMzQ7LAogICAgJiMzNDtub2RlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgVk0gcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZpZWxkIGBucl9pc29sYXRlX3NjYW5uZWRgIHRvIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIHNjYW5uZWQgcGFnZXMsIHJlcGxhY2luZyBhbiBvdXRwdXQgcG9pbnRlciBhcmd1bWVudCBpbiBgaXNvbGF0ZV9scnVfZm9saW9zKClgLiBUaGUgZmllbGQgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKGVpdGhlciBleHBsaWNpdGx5IHRvIDAgaW4gYHNocmlua19scnV2ZWMoKWAgb3IgdW5jb25kaXRpb25hbGx5IGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgYGlzb2xhdGVfbHJ1X2ZvbGlvcygpYCkuIFRoZSBwYXRjaCBhbHNvIGNoYW5nZXMgdGhlIGxvZ2ljIHRvIHN0b3AgaXNvbGF0aW5nIGZvbGlvcyB3aGVuIGEgc2tpcCB0aHJlc2hvbGQgaXMgcmVhY2hlZC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IGludGVybmFsIHRvIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRvIG5vdCBpbnZvbHZlIGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgaXNvbGF0ZV9scnVfZm9saW9zYCBhbmQgYHNocmlua19scnV2ZWNgIHRvIHByZXZlbnQgaGFyZCBsb2NrdXBzIGJ5IGNhcHBpbmcgdGhlIG51bWJlciBvZiBza2lwcGVkIGluZWxpZ2libGUgZm9saW9zIGFuZCBhZGp1c3RpbmcgdGhlIHNjYW4gcXVvdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB2YXJpb3VzIHJlY2xhaW0gcGF0aHMgKGUuZy4sIGNncm91cCByZWNsYWltLCBwcm9hY3RpdmUgcmVjbGFpbSwgaGliZXJuYXRpb24pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDQ3ODNhZTc2NjEyOTBiMDEzYjBhYzFhZWJkOGFjMWMyMWQzYjJiZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA4OjAxOjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDU2NzA4ZDFkMmRmZDUuLmFjMzIzN2E1OGNiMjkgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC0xNjQsNiAmIzQzOzE2NCw5IEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuIFx0LyogSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBpbmFjdGl2ZSBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xuIFxuJiM0MztcdC8qIE51bWJlciBvZiBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCBmcm9tIGlzb2xhdGVfbHJ1X2ZvbGlvcygpICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9pc29sYXRlX3NjYW5uZWQ7XG4mIzQzO1xuIFx0LyogTnVtYmVyIG9mIHBhZ2VzIGZyZWVkIHNvIGZhciBkdXJpbmcgYSBjYWxsIHRvIHNocmlua196b25lcygpICovXG4gXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcbiBcbkBAIC0xNjczLDcgJiM0MzsxNjc2LDYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuICAqIEBucl90b19zY2FuOlx0VGhlIG51bWJlciBvZiBlbGlnaWJsZSBwYWdlcyB0byBsb29rIHRocm91Z2ggb24gdGhlIGxpc3QuXG4gICogQGxydXZlYzpcdFRoZSBMUlUgdmVjdG9yIHRvIHB1bGwgcGFnZXMgZnJvbS5cbiAgKiBAZHN0Olx0VGhlIHRlbXAgbGlzdCB0byBwdXQgcGFnZXMgb24gdG8uXG4tICogQG5yX3NjYW5uZWQ6XHRUaGUgbnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkLlxuICAqIEBzYzpcdFx0VGhlIHNjYW5fY29udHJvbCBzdHJ1Y3QgZm9yIHRoaXMgcmVjbGFpbSBzZXNzaW9uXG4gICogQGxydTpcdExSVSBsaXN0IGlkIGZvciBpc29sYXRpbmdcbiAgKlxuQEAgLTE2ODEsOCAmIzQzOzE2ODMsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdXBkYXRlX2xydV9zaXplcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gICovXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QsXG4tXHRcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLVx0XHRlbnVtIGxydV9saXN0IGxydSlcbiYjNDM7XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBlbnVtIGxydV9saXN0IGxydSlcbiB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICpzcmMgPSBcdTAwMjZscnV2ZWMtXHUwMDNlbGlzdHNbbHJ1XTtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4gPSAwO1xuQEAgLTE3MDMsMTIgJiM0MzsxNzA0LDIwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRcdG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFx0XHR0b3RhbF9zY2FuICYjNDM7PSBucl9wYWdlcztcbiBcbi1cdFx0LyogVXNpbmcgbWF4X25yX3NraXBwZWQgdG8gcHJldmVudCBoYXJkIExPQ0tVUCovXG4tXHRcdGlmIChtYXhfbnJfc2tpcHBlZCBcdTAwM2MgU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgKGZvbGlvX3pvbmVudW0oZm9saW8pIFx1MDAzZSBzYy1cdTAwM2VyZWNsYWltX2lkeCkpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBVc2luZyBtYXhfbnJfc2tpcHBlZCB0byBwcmV2ZW50IGhhcmQgTE9DS1VQLlxuJiM0MztcdFx0ICogT25jZSB0aGUgY2FwIGlzIGhpdCwgc3RvcCByYXRoZXIgdGhhbiBmb3JjZS1pc29sYXRpbmc6XG4mIzQzO1x0XHQgKiByZWNsYWltaW5nIGluZWxpZ2libGUgZm9saW9zIG9ubHkgaW5mbGF0ZXMgbnJfcmVjbGFpbWVkXG4mIzQzO1x0XHQgKiBpbnRvIGEgZmFsc2UgcHJvZ3Jlc3MuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChmb2xpb196b25lbnVtKGZvbGlvKSBcdTAwM2Ugc2MtXHUwMDNlcmVjbGFpbV9pZHgpIHtcbiBcdFx0XHRucl9za2lwcGVkW2ZvbGlvX3pvbmVudW0oZm9saW8pXSAmIzQzOz0gbnJfcGFnZXM7XG4tXHRcdFx0bW92ZV90byA9IFx1MDAyNmZvbGlvc19za2lwcGVkO1xuIFx0XHRcdG1heF9ucl9za2lwcGVkJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0aWYgKG1heF9ucl9za2lwcGVkIFx1MDAzZT0gU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEKSB7XG4mIzQzO1x0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2Zm9saW9zX3NraXBwZWQpO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdG1vdmVfdG8gPSBcdTAwMjZmb2xpb3Nfc2tpcHBlZDtcbiBcdFx0XHRnb3RvIG1vdmU7XG4gXHRcdH1cbiBcbkBAIC0xNzY2LDcgJiM0MzsxNzc1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0XHRza2lwcGVkICYjNDM7PSBucl9za2lwcGVkW3ppZF07XG4gXHRcdH1cbiBcdH1cbi1cdCpucl9zY2FubmVkID0gdG90YWxfc2NhbjtcbiYjNDM7XHRzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQgPSB0b3RhbF9zY2FuO1xuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9pc29sYXRlKHNjLVx1MDAzZXJlY2xhaW1faWR4LCBzYy1cdTAwM2VvcmRlciwgbnJfdG9fc2NhbixcbiBcdFx0XHRcdCAgICB0b3RhbF9zY2FuLCBza2lwcGVkLCBucl90YWtlbiwgbHJ1KTtcbiBcdHVwZGF0ZV9scnVfc2l6ZXMobHJ1dmVjLCBscnUsIG5yX3pvbmVfdGFrZW4pO1xuQEAgLTIwMTQsOCAmIzQzOzIwMjMsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbi1cdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2Zm9saW9fbGlzdCxcbi1cdFx0XHRcdCAgICAgXHUwMDI2bnJfc2Nhbm5lZCwgc2MsIGxydSk7XG4mIzQzO1x0bnJfdGFrZW4gPSBpc29sYXRlX2xydV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBcdTAwMjZmb2xpb19saXN0LCBzYywgbHJ1KTtcbiYjNDM7XHRucl9zY2FubmVkID0gc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkO1xuIFxuIFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IGZpbGUsIG5yX3Rha2VuKTtcbiBcdGl0ZW0gPSBQR1NDQU5fS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xuQEAgLTIwNzEsNyAmIzQzOzIwODAsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0XHRcdCAgICAgICBlbnVtIGxydV9saXN0IGxydSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuO1xuLVx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xuIFx0dm1fZmxhZ3NfdCB2bV9mbGFncztcbiBcdExJU1RfSEVBRChsX2hvbGQpO1x0LyogVGhlIGZvbGlvcyB3aGljaCB3ZXJlIHNuaXBwZWQgb2ZmICovXG4gXHRMSVNUX0hFQUQobF9hY3RpdmUpO1xuQEAgLTIwODUsMTIgJiM0MzsyMDkzLDExIEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbi1cdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2bF9ob2xkLFxuLVx0XHRcdFx0ICAgICBcdTAwMjZucl9zY2FubmVkLCBzYywgbHJ1KTtcbiYjNDM7XHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFx1MDAyNmxfaG9sZCwgc2MsIGxydSk7XG4gXG4gXHRfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgZmlsZSwgbnJfdGFrZW4pO1xuIFxuLVx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBucl9zY2FubmVkKTtcbiYjNDM7XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdSRUZJTEwsIHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCk7XG4gXG4gXHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xuIFxuQEAgLTU5MjAsMTAgJiM0Mzs1OTI3LDIxIEBAIHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdFx0Zm9yX2VhY2hfZXZpY3RhYmxlX2xydShscnUpIHtcbiBcdFx0XHRpZiAobnJbbHJ1XSkge1xuIFx0XHRcdFx0bnJfdG9fc2NhbiA9IG1pbihucltscnVdLCBTV0FQX0NMVVNURVJfTUFYKTtcbi1cdFx0XHRcdG5yW2xydV0gLT0gbnJfdG9fc2NhbjtcbiBcbiYjNDM7XHRcdFx0XHRzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQgPSAwO1xuIFx0XHRcdFx0bnJfcmVjbGFpbWVkICYjNDM7PSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sXG4gXHRcdFx0XHRcdFx0XHQgICAgbHJ1dmVjLCBzYyk7XG4mIzQzO1x0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHQgKiBpc29sYXRlX2xydV9mb2xpb3MoKSBtYXkgc2NhbiBmYXIgbW9yZVxuJiM0MztcdFx0XHRcdCAqIHRoYW4gbnJfdG9fc2NhbiB3aGVuIHRoZSBMUlUgaG9sZHNcbiYjNDM7XHRcdFx0XHQgKiBpbmVsaWdpYmxlIGZvbGlvcyAoem9uZS1za2lwKSBvciBsYXJnZVxuJiM0MztcdFx0XHRcdCAqIGZvbGlvcy4gQ2hhcmdlIHRoYXQgb3ZlcnNob290IGFnYWluc3QgdGhlXG4mIzQzO1x0XHRcdFx0ICogcmVtYWluaW5nIHF1b3RhIChjbGFtcGVkIGJ5IG1pbigpIHNvIGl0XG4mIzQzO1x0XHRcdFx0ICogY2Fubm90IGdvIG5lZ2F0aXZlKSBzbyB0aGUgbmV4dCBpdGVyYXRpb25cbiYjNDM7XHRcdFx0XHQgKiBkb2VzIG5vdCByZXNjYW4gdGhlIHNhbWUgc2tpcHBlZCBmb2xpb3MuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0bnJbbHJ1XSAtPSBtaW4obnJbbHJ1XSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBtYXgobnJfdG9fc2Nhbiwgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkKSk7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0hJQkVSTkFUSU9OJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zaHJpbmtfbm9kZSYjMzQ7LAogICAgJiMzNDtub2RlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgYW5kIGBzaHJpbmtfbHJ1dmVjYCB0byBwcmV2ZW50IGhhcmQgbG9ja3VwcyBieSBjYXBwaW5nIHRoZSBudW1iZXIgb2Ygc2tpcHBlZCBpbmVsaWdpYmxlIGZvbGlvcyBhbmQgYWRqdXN0aW5nIHRoZSBzY2FuIHF1b3RhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmFyaW91cyByZWNsYWltIHBhdGhzIChlLmcuLCBjZ3JvdXAgcmVjbGFpbSwgcHJvYWN0aXZlIHJlY2xhaW0sIGhpYmVybmF0aW9uKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ0NzgzYWU3NjYxMjkwYjAxM2IwYWMxYWViZDhhYzFjMjFkM2IyYmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwODowMTowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNTY3MDhkMWQyZGZkNS4uYWMzMjM3YTU4Y2IyOSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTE2NCw2ICYjNDM7MTY0LDkgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJLyogSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBpbmFjdGl2ZSBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCAqLwogCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDsKIAomIzQzOwkvKiBOdW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQgZnJvbSBpc29sYXRlX2xydV9mb2xpb3MoKSAqLwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX2lzb2xhdGVfc2Nhbm5lZDsKJiM0MzsKIAkvKiBOdW1iZXIgb2YgcGFnZXMgZnJlZWQgc28gZmFyIGR1cmluZyBhIGNhbGwgdG8gc2hyaW5rX3pvbmVzKCkgKi8KIAl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDsKIApAQCAtMTY3Myw3ICYjNDM7MTY3Niw2IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1cGRhdGVfbHJ1X3NpemVzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKICAqIEBucl90b19zY2FuOglUaGUgbnVtYmVyIG9mIGVsaWdpYmxlIHBhZ2VzIHRvIGxvb2sgdGhyb3VnaCBvbiB0aGUgbGlzdC4KICAqIEBscnV2ZWM6CVRoZSBMUlUgdmVjdG9yIHRvIHB1bGwgcGFnZXMgZnJvbS4KICAqIEBkc3Q6CVRoZSB0ZW1wIGxpc3QgdG8gcHV0IHBhZ2VzIG9uIHRvLgotICogQG5yX3NjYW5uZWQ6CVRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQuCiAgKiBAc2M6CQlUaGUgc2Nhbl9jb250cm9sIHN0cnVjdCBmb3IgdGhpcyByZWNsYWltIHNlc3Npb24KICAqIEBscnU6CUxSVSBsaXN0IGlkIGZvciBpc29sYXRpbmcKICAqCkBAIC0xNjgxLDggJiM0MzsxNjgzLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCwKLQkJdW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCi0JCWVudW0gbHJ1X2xpc3QgbHJ1KQomIzQzOwkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGVudW0gbHJ1X2xpc3QgbHJ1KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnNyYyA9ICZhbXA7bHJ1dmVjLSZndDtsaXN0c1tscnVdOwogCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW4gPSAwOwpAQCAtMTcwMywxMiAmIzQzOzE3MDQsMjAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAkJbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAJCXRvdGFsX3NjYW4gJiM0Mzs9IG5yX3BhZ2VzOwogCi0JCS8qIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAqLwotCQlpZiAobWF4X25yX3NraXBwZWQgJmx0OyBTV0FQX0NMVVNURVJfTUFYX1NLSVBQRUQgJmFtcDsmYW1wOwotCQkgICAgKGZvbGlvX3pvbmVudW0oZm9saW8pICZndDsgc2MtJmd0O3JlY2xhaW1faWR4KSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAuCiYjNDM7CQkgKiBPbmNlIHRoZSBjYXAgaXMgaGl0LCBzdG9wIHJhdGhlciB0aGFuIGZvcmNlLWlzb2xhdGluZzoKJiM0MzsJCSAqIHJlY2xhaW1pbmcgaW5lbGlnaWJsZSBmb2xpb3Mgb25seSBpbmZsYXRlcyBucl9yZWNsYWltZWQKJiM0MzsJCSAqIGludG8gYSBmYWxzZSBwcm9ncmVzcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGZvbGlvX3pvbmVudW0oZm9saW8pICZndDsgc2MtJmd0O3JlY2xhaW1faWR4KSB7CiAJCQlucl9za2lwcGVkW2ZvbGlvX3pvbmVudW0oZm9saW8pXSAmIzQzOz0gbnJfcGFnZXM7Ci0JCQltb3ZlX3RvID0gJmFtcDtmb2xpb3Nfc2tpcHBlZDsKIAkJCW1heF9ucl9za2lwcGVkJiM0MzsmIzQzOzsKJiM0MzsJCQlpZiAobWF4X25yX3NraXBwZWQgJmd0Oz0gU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEKSB7CiYjNDM7CQkJCWxpc3RfbW92ZSgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7Zm9saW9zX3NraXBwZWQpOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQkJbW92ZV90byA9ICZhbXA7Zm9saW9zX3NraXBwZWQ7CiAJCQlnb3RvIG1vdmU7CiAJCX0KIApAQCAtMTc2Niw3ICYjNDM7MTc3NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJCQlza2lwcGVkICYjNDM7PSBucl9za2lwcGVkW3ppZF07CiAJCX0KIAl9Ci0JKm5yX3NjYW5uZWQgPSB0b3RhbF9zY2FuOwomIzQzOwlzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2NhbjsKIAl0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtJmd0O3JlY2xhaW1faWR4LCBzYy0mZ3Q7b3JkZXIsIG5yX3RvX3NjYW4sCiAJCQkJICAgIHRvdGFsX3NjYW4sIHNraXBwZWQsIG5yX3Rha2VuLCBscnUpOwogCXVwZGF0ZV9scnVfc2l6ZXMobHJ1dmVjLCBscnUsIG5yX3pvbmVfdGFrZW4pOwpAQCAtMjAxNCw4ICYjNDM7MjAyMyw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAogCWxydXZlY19sb2NrX2lycShscnV2ZWMpOwogCi0JbnJfdGFrZW4gPSBpc29sYXRlX2xydV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCAmYW1wO2ZvbGlvX2xpc3QsCi0JCQkJICAgICAmYW1wO25yX3NjYW5uZWQsIHNjLCBscnUpOwomIzQzOwlucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsICZhbXA7Zm9saW9fbGlzdCwgc2MsIGxydSk7CiYjNDM7CW5yX3NjYW5uZWQgPSBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkOwogCiAJX19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IGZpbGUsIG5yX3Rha2VuKTsKIAlpdGVtID0gUEdTQ0FOX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTsKQEAgLTIwNzEsNyAmIzQzOzIwODAsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCQkJICAgICAgIGVudW0gbHJ1X2xpc3QgbHJ1KQogewogCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW47Ci0JdW5zaWduZWQgbG9uZyBucl9zY2FubmVkOwogCXZtX2ZsYWdzX3Qgdm1fZmxhZ3M7CiAJTElTVF9IRUFEKGxfaG9sZCk7CS8qIFRoZSBmb2xpb3Mgd2hpY2ggd2VyZSBzbmlwcGVkIG9mZiAqLwogCUxJU1RfSEVBRChsX2FjdGl2ZSk7CkBAIC0yMDg1LDEyICYjNDM7MjA5MywxMSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCiAJbHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7CiAKLQlucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsICZhbXA7bF9ob2xkLAotCQkJCSAgICAgJmFtcDtucl9zY2FubmVkLCBzYywgbHJ1KTsKJiM0MzsJbnJfdGFrZW4gPSBpc29sYXRlX2xydV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCAmYW1wO2xfaG9sZCwgc2MsIGxydSk7CiAKIAlfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgZmlsZSwgbnJfdGFrZW4pOwogCi0JbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBucl9zY2FubmVkKTsKJiM0MzsJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkKTsKIAogCWxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7CiAKQEAgLTU5MjAsMTAgJiM0Mzs1OTI3LDIxIEBAIHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAkJZm9yX2VhY2hfZXZpY3RhYmxlX2xydShscnUpIHsKIAkJCWlmIChucltscnVdKSB7CiAJCQkJbnJfdG9fc2NhbiA9IG1pbihucltscnVdLCBTV0FQX0NMVVNURVJfTUFYKTsKLQkJCQlucltscnVdIC09IG5yX3RvX3NjYW47CiAKJiM0MzsJCQkJc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZCA9IDA7CiAJCQkJbnJfcmVjbGFpbWVkICYjNDM7PSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sCiAJCQkJCQkJICAgIGxydXZlYywgc2MpOwomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiBpc29sYXRlX2xydV9mb2xpb3MoKSBtYXkgc2NhbiBmYXIgbW9yZQomIzQzOwkJCQkgKiB0aGFuIG5yX3RvX3NjYW4gd2hlbiB0aGUgTFJVIGhvbGRzCiYjNDM7CQkJCSAqIGluZWxpZ2libGUgZm9saW9zICh6b25lLXNraXApIG9yIGxhcmdlCiYjNDM7CQkJCSAqIGZvbGlvcy4gQ2hhcmdlIHRoYXQgb3ZlcnNob290IGFnYWluc3QgdGhlCiYjNDM7CQkJCSAqIHJlbWFpbmluZyBxdW90YSAoY2xhbXBlZCBieSBtaW4oKSBzbyBpdAomIzQzOwkJCQkgKiBjYW5ub3QgZ28gbmVnYXRpdmUpIHNvIHRoZSBuZXh0IGl0ZXJhdGlvbgomIzQzOwkJCQkgKiBkb2VzIG5vdCByZXNjYW4gdGhlIHNhbWUgc2tpcHBlZCBmb2xpb3MuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlucltscnVdIC09IG1pbihucltscnVdLAomIzQzOwkJCQkJICAgICAgIG1heChucl90b19zY2FuLCBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkKSk7CiAJCQl9CiAJCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjEwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNzI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFZNU2NhbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3Ztc2Nhbi5jYCwgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSB0YXJnZXRlZCBjaGFuZ2VzIHdpdGhpbiB0aGUgcGFnZSByZWNsYWltIHN1YnN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBzb21ldGhpbmcgY3J1Y2lhbDsgYW55IHR3ZWFrcyB0byBtZW1vcnkgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiB0aGVzZSBjb3JlIGZ1bmN0aW9ucywgbmVlZCBjYXJlZnVsIHNjcnV0aW55LiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGBpc29sYXRlX2xydV9mb2xpb3NgIGFuZCBgc2hyaW5rX2xydXZlY2AsIGJvdGggb2Ygd2hpY2ggYXJlIGNlbnRyYWwgdG8gdGhlIGV2aWN0aW9uIGFuZCBzY2FubmluZyBwcm9jZXNzZXMuCgpTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBhbHRlcnMgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgdG8gdXNlIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCBpbnN0ZWFkIG9mIGEgZGVkaWNhdGVkIHBvaW50ZXIgZm9yIHRoZSBzY2FubmVkIGNvdW50LiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyBpdCBsb29rcyBsaWtlIHRoZSBpbnRlbnQgaXMgdG8gY29uc29saWRhdGUgc3RhdGUgd2l0aGluIHRoZSBgc2NgIChzY2FuKSBzdHJ1Y3R1cmUsIHBvdGVudGlhbGx5IGZvciBiZXR0ZXIgdHJhY2tpbmcgb3Igc3luY2hyb25pemF0aW9uLiBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRoaXMgZmllbGQgaXMgdXNlZCBhbmQgaWYgaXQmIzM5O3MgY29uc2lzdGVudC4KClRoZSBsb2dpYyBjaGFuZ2UgcmVnYXJkaW5nIGBtYXhfbnJfc2tpcHBlZGAgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgY2F0Y2hlcyBteSBleWUgdG9vLiBUaGV5JiMzOTtyZSB0cnlpbmcgdG8gcHJldmVudCBsb2NrdXBzLCB0aGF0IG11Y2ggaXMgY2xlYXIsIHdpdGggYSBsaW1pdCBiYXNlZCBvbiB0aGUgem9uZSBvZiB0aGUgZm9saW8uIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1c2luZyBgbWF4X25yX3NraXBwZWRgLCBidXQgdGhlIHBhdGNoIHNlZW1zIHRvIGhhdmUgcmV3b3JrZWQgdGhhdC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBub3cgZGVzaWduZWQgdG8gYmFpbCBvdXQgd2hlbiBpdCBoaXRzIGEgdGhyZXNob2xkIChgU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEYCkgaW5zdGVhZCBvZiBmb3JjaW5nIHRoZSBpc29sYXRpb24gb2YgZm9saW9zLiBUaGUgY29tbWVudCBtZW50aW9ucyAmIzM0O3JlY2xhaW1pbmcgaW5lbGlnaWJsZSBmb2xpb3Mgb25seSBpbmZsYXRlcyBucl9yZWNsYWltZWQgaW50byBhIGZhbHNlIHByb2dyZXNzLiYjMzQ7IEFoLCBzbyB0aGUgaW50ZW50aW9uIGhlcmUgaXMgdG8gYXZvaWQgY2h1cm5pbmcgdGhyb3VnaCBmb2xpb3MgdGhhdCBjYW4mIzM5O3QgYmUgcmVjbGFpbWVkLCB3aGljaCBpcyBhIGNvbW1vbiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGluIHRoZXNlIHN5c3RlbXMuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCB0aGlzIGlzIGEgY2FzZSB3aGVyZSB0aGUgJiMzNDttYXgmIzM0OyBsaW1pdCBtYXkgY2F1c2UgYSBoYXJkIGxvb3AuCgpUaGUgY2hhbmdlcyB0byBgc2hyaW5rX2xydXZlY2AgYXJlIGFsc28gcmVsZXZhbnQuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBtYW5hZ2luZyB0aGUgcXVvdGEgKGBucltscnVdYCkgbW9yZSBjYXJlZnVsbHksIGZhY3RvcmluZyBpbiBwb3RlbnRpYWwgJiMzNDtvdmVyc2hvb3QmIzM0OyBkdXJpbmcgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AuIFRoZSBjb2RlIGlzIGNvbXBlbnNhdGluZyBmb3IgdGhlIGZhY3QgdGhhdCBgaXNvbGF0ZV9scnVfZm9saW9zYCBtaWdodCBzY2FuIG1vcmUgdGhhbiBgbnJfdG9fc2NhbmAsIGR1ZSB0byBza2lwcGVkIHpvbmVzIG9yIGxhcmdlIGZvbGlvcy4gVGhlIGdvYWwgYXBwZWFycyB0byBiZSBtb3JlIHByZWNpc2UgYWNjb3VudGluZywgcHJldmVudGluZyB0aGUgbmV4dCBpdGVyYXRpb24gZnJvbSByZXZpc2l0aW5nIHNraXBwZWQgZm9saW9zLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGltcHJvdmVtZW50IGluIGVmZmljaWVuY3kgYW5kIGF2b2lkaW5nIHVubmVjZXNzYXJ5IHNjYW5uaW5nLCBidXQgSSBuZWVkIHRvIGVuc3VyZSB0aGUgbWF0aCBpcyBjb3JyZWN0IGFuZCB0aGVyZSBpc24mIzM5O3QgYSBuZXcgb2ZmLWJ5LW9uZSBidWcuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBgc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbGlzdGAsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBhbmQgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgZW50cnkgcG9pbnRzIGZvciBwYWdlIHJlY2xhaW0gaW4gZ2VuZXJhbDsgSSB3aWxsIGNoZWNrIGBtbS92bXNjYW4uY2AgdG8gcmVtaW5kIG15c2VsZi4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kLCBpZiB0aGlzIGlzIGEgbWFpbmxpbmUgcGF0Y2gsIGl0IG11c3QgaGF2ZSBnb25lIHRocm91Z2ggc2VyaW91cyBzY3J1dGlueSwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMgaW50byB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIHNlZSBob3cgdGhpcyBhZmZlY3RzIHRoZWlyIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odW5zaWduZWQgbG9uZ3x2b2lkfGludHxib29sKVxccyYjNDM7W2EtekEtWjAtOV9dJiM0MztcXCguKnNocmlua19scnV2ZWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBzaHJpbmtfbHJ1dmVjYCBpbiBgbW0vdm1zY2FuLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhhdCBgc2hyaW5rX2xydXZlY2AgZnVuY3Rpb24uIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcm5hbHMsIEkmIzM5O20gdGhpbmtpbmcgdGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGlzIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gdGhlIGBtbS92bXNjYW4uY2AgZmlsZS4gU2VhcmNoaW5nIGZvciB0aGUgZnVuY3Rpb24gYHNocmlua19scnV2ZWNgIGRpcmVjdGx5IHNlZW1zIGxpa2UgdGhlIHF1aWNrZXN0IHBhdGggdG8gZGlzc2VjdGluZyBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgcGFnZSByZWNsYWltIHN0cmF0ZWd5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfbHJ1dmVjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDkzMT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5NjUtICovXG5tbS92bXNjYW4uYzo0OTY2OnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy00OTY3LXtcbi0tXG5tbS92bXNjYW4uYz01MDExPXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwMzAtXG5tbS92bXNjYW4uYzo1MDMxOlx0bmVlZF9yb3RhdGUgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUwMzItXG4tLVxubW0vdm1zY2FuLmM9NTA1Mj1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTIxLVxubW0vdm1zY2FuLmM6NTEyMjpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUxMjMte1xuLS1cbm1tL3Ztc2Nhbi5jLTUxMzQtXG5tbS92bXNjYW4uYzo1MTM1Olx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNTEzNi1cdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xuLS1cbm1tL3Ztc2Nhbi5jPTU4NjY9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01ODcwLVxubW0vdm1zY2FuLmM6NTg3MTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTU4NzIte1xuLS1cbm1tL3Ztc2Nhbi5jPTU4NzY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01ODgyLVxubW0vdm1zY2FuLmM6NTg4MzpzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01ODg0LXtcbi0tXG5tbS92bXNjYW4uYy01ODk0LVx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jOjU4OTU6XHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTU4OTYtXG4tLVxubW0vdm1zY2FuLmM9NjA4NT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjE0NC1cbm1tL3Ztc2Nhbi5jOjYxNDU6XHRcdHNocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy02MTQ2LVxuLS1cbm1tL3Ztc2Nhbi5jPTY3NDA9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy02NzcwLVx0ICovXG5tbS92bXNjYW4uYzo2NzcxOlx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY3NzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE1NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYW5kIHRoZSBjb250ZXh0IGlzIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudDoKCioqSHVudGluZyBEb3duIFNocmluayBGdW5jdGlvbiBDYWxsZXJzKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyB3aXRoaW4gdGhlIGNvZGUgd2hlcmUgZWl0aGVyIGBzaHJpbmtfbm9kZV9tZW1jZ3NgIG9yIGBzaHJpbmtfbHJ1dmVjYCBhcmUgYmVpbmcgaW52b2tlZC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgYW5kIGhvdyB0aGV5JiMzOTtyZSBpbnRlZ3JhdGVkIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IHJlY2xhaW0gc3RyYXRlZ3kuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGVzZSBhcmUgY29yZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBzaHJpbmtpbmcgbWVtb3J5IGZyb20gbm9kZSBvciBMUlUtYmFzZWQgbWVtb3J5IHBvb2xzLiBUaGlzIGNvdWxkIGJlIHRvIGRlYWwgd2l0aCBtZW1vcnkgcHJlc3N1cmUsIHJlY2xhaW0gcGFnZXMsIG9yIG1heWJlIGV2ZW4gaW4gcHJlcGFyYXRpb24gZm9yIHNvbWUgc29ydCBvZiBOVU1BIGJhbGFuY2luZyBvciBtaWdyYXRpb24uCgpUaGUga2V5IGlzIGlkZW50aWZ5aW5nICpub24tc3RhdGljKiBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBjYWxsIHRoZXNlIHNocmluayBmdW5jdGlvbnMuIFRoZSAmIzM0O25vbi1zdGF0aWMmIzM0OyBwYXJ0IGlzIGltcG9ydGFudDsgaXQgc3VnZ2VzdHMgdGhhdCB0aGVzZSBhcmUgZnVuY3Rpb25zIG1lYW50IHRvIGJlIGFjY2Vzc2VkIGZyb20gbXVsdGlwbGUgcG9pbnRzIHdpdGhpbiB0aGUga2VybmVsLCBtYWtpbmcgdGhlbSBnb29kIGNhbmRpZGF0ZXMgZm9yIHRyYWNpbmcgdGhlIGNhbGwgZmxvdyBhbmQgdW5kZXJzdGFuZCB3aGljaCBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSB0cmlnZ2VyaW5nIG1lbW9yeSBzaHJpbmtpbmcuIE5vdywgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgc291cmNlIGNvZGUgYW5kIGZpbmQgdGhlIGNhbGwgc2l0ZXMgZm9yIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcC4gTmV4dCwgSSBuZWVkIHRvIHdvcmsgb3V0IHRoZSB3aWRlciBjb250ZXh0IG9mIGhvdyBlYWNoIGZ1bmN0aW9uIGNhbGxzIHRoZSBzaHJpbmsgbWV0aG9kcywgd2hhdCBkYXRhIGl0IHBhc3NlcyB0byB0aGVzZSBtZXRob2RzLCBhbmQgaW4gd2hpY2ggY2lyY3Vtc3RhbmNlcyB0aGVzZSBjYWxscyBvY2N1ci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfbm9kZV9tZW1jZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz02MDMzPXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTYwODQtXG5tbS92bXNjYW4uYzo2MDg1OnN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYwODYte1xuLS1cbm1tL3Ztc2Nhbi5jPTYxNjQ9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjE4OC1cbm1tL3Ztc2Nhbi5jOjYxODk6XHRzaHJpbmtfbm9kZV9tZW1jZ3MocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYxOTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcwMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipUcmFjaW5nIHRoZSBFeGVjdXRpb24gUGF0aDogYHNocmlua19ub2RlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHNocmlua19ub2RlYCBmdW5jdGlvbi4gTXkgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcGxhY2Ugd2l0aGluIHRoZSBicm9hZGVyIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbiBjb250ZXh0LiBXaGVyZSBpcyBpdCBjYWxsZWQ/IFdoYXQmIzM5O3MgdGhlIHByZWNvbmRpdGlvbiBmb3IgY2FsbGluZyBpdD8gQW5kIHdoYXQgc3RhdGUgZG9lcyBpdCBsZWF2ZSB0aGUgc3lzdGVtIGluIGFmdGVyd2FyZD8gSSBpbW1lZGlhdGVseSBzdGFydCB2aXN1YWxpemluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUgaW4gbXkgaGVhZCwgaXRzIG5vZGVzIGFuZCBsaW5rcywgYW50aWNpcGF0aW5nIGhvdyBgc2hyaW5rX25vZGVgIG1pZ2h0IGFsdGVyIHRoZW0uIElzIHRoaXMgYSB0cmVlLCBhIGdyYXBoLCBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHR5cGUgb2Ygc3RydWN0dXJlIGRyYW1hdGljYWxseSBpbmZsdWVuY2VzIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLgoKSSB3YW50IHRvIGtub3cgdGhlICYjMzQ7d2h5JiMzNDsgYmVoaW5kIHRoaXMgZnVuY3Rpb24mIzM5O3MgZXhpc3RlbmNlLCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkZXNpZ24gZ29hbHMuIElzIHRoaXMgYWJvdXQgbWVtb3J5IG9wdGltaXphdGlvbj8gUGVyZm9ybWFuY2UgdHVuaW5nPyBPciBwZXJoYXBzIG1haW50YWluaW5nIHNvbWUga2luZCBvZiBzdHJ1Y3R1cmFsIGludmFyaWFudD8gQSBzbWFsbGVyIG5vZGUgb2Z0ZW4gc3VnZ2VzdHMgd2UmIzM5O3JlIGNvbnNvbGlkYXRpbmcgaW5mb3JtYXRpb24sIHJlbW92aW5nIHJlZHVuZGFuY2llcywgb3IgcGVyaGFwcyBwcmVwYXJpbmcgZm9yIGEgbW9yZSBlZmZpY2llbnQgc2VhcmNoIG9yIHRyYXZlcnNhbC4gSSBzdGFydCBtZW50YWxseSBjb21wb3NpbmcgdGVzdCBjYXNlczsgZWRnZSBjYXNlcywgYm91bmRhcnkgY29uZGl0aW9ucywgYW5kIHR5cGljYWwgc2NlbmFyaW9zLCB0byBtYWtlIHN1cmUgdGhlIHByb2Nlc3MgaXMgcm9idXN0LCBhcyBleHBlY3RlZC4KCkkgd2lsbCBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzICYjMzQ7c2hyaW5raW5nJiMzNDsgaXMgYWNoaWV2ZWQ6IGRvZXMgaXQgaW52b2x2ZSBub2RlIG1lcmdpbmcsIGRlYWxsb2NhdGlvbiwgcG9pbnRlciBhZGp1c3RtZW50cywgb3IgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBjcmVhdGl2ZS4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgaXQgcmVsaWVzIHVwb24/IEhvdyBhcmUgY29uY3VycmVudCBhY2Nlc3MgY29uY2VybnMgaGFuZGxlZCwgaWYgYW55PyBJJiMzOTtsbCBwcm9iYWJseSBzcGVuZCBhIGdvb2QgYW1vdW50IG9mIHRpbWUgcmV2aWV3aW5nIHRoZSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGlmIGF2YWlsYWJsZSwgb3IgaWYgbm90LCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgb3BlcmF0aW9uIGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGJlIGFibGUgdG8gZm9sbG93IHRoZSBmbG93LCBzdGVwIGJ5IHN0ZXAsIGFuZCBtZW50YWxseSB2ZXJpZnkgdGhhdCB0aGVyZSBhcmUgbm8gbGVha3Mgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuIFVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGBzaHJpbmtfbm9kZWAgZnVuY3Rpb24gKm1lYW5zKiBpbiB0aGlzIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0xOTUzPXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxuLS1cbm1tL3Ztc2Nhbi5jLTE5OTEtLypcbm1tL3Ztc2Nhbi5jOjE5OTI6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxubW0vdm1zY2FuLmMtMTk5My0gKiBvZiByZWNsYWltZWQgcGFnZXNcbi0tXG5tbS92bXNjYW4uYz01MTIyPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxNDItXG5tbS92bXNjYW4uYzo1MTQzOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MTQ0LXtcbi0tXG5tbS92bXNjYW4uYz01ODcxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU4NzUtXG5tbS92bXNjYW4uYzo1ODc2OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01ODc3LXtcbi0tXG5tbS92bXNjYW4uYz02MDMzPXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTYwODQtXG5tbS92bXNjYW4uYzo2MDg1OnN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYwODYte1xuLS1cbm1tL3Ztc2Nhbi5jLTYxNjMtXG5tbS92bXNjYW4uYzo2MTY0OnN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjE2NS17XG4tLVxubW0vdm1zY2FuLmMtNjE3MS1cdFx0bWVtc2V0KFx1MDAyNnNjLVx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXHUwMDNlbnIpKTtcbm1tL3Ztc2Nhbi5jOjYxNzI6XHRcdGxydV9nZW5fc2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYxNzMtXG4tLVxubW0vdm1zY2FuLmMtNjE4OC1cbm1tL3Ztc2Nhbi5jOjYxODk6XHRzaHJpbmtfbm9kZV9tZW1jZ3MocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYxOTAtXG4tLVxubW0vdm1zY2FuLmM9NjM0OT1zdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjQyNy1cdFx0bGFzdF9wZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbm1tL3Ztc2Nhbi5jOjY0Mjg6XHRcdHNocmlua19ub2RlKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjQyOS1cdH1cbi0tXG5tbS92bXNjYW4uYz02Njk0PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3MzktLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xubW0vdm1zY2FuLmM6Njc0MDp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjc0MS1cdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4tLVxubW0vdm1zY2FuLmMtNjc2Ni1cdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxubW0vdm1zY2FuLmM6Njc2NzpcdCAqIGlmIHdlIGRvbiYjMzk7dCByZWNsYWltIGhlcmUsIHRoZSBzaHJpbmtfbm9kZSBmcm9tIGJhbGFuY2VfcGdkYXRcbm1tL3Ztc2Nhbi5jLTY3NjgtXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJiMzOTtzIGFzIHdlbGwuIFdlIGhhY2tcbi0tXG5tbS92bXNjYW4uYz02ODg4PXN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy02OTEyLVx0XHQgKiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC4gT25jZSBpdCYjMzk7c1xubW0vdm1zY2FuLmM6NjkxMzpcdFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcbm1tL3Ztc2Nhbi5jLTY5MTQtXHRcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcbi0tXG5tbS92bXNjYW4uYz02OTcwPXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy03MDA4LSAqL1xubW0vdm1zY2FuLmM6NzAwOTpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTcwMTAtXHRcdFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTcwMjUtXHQgKi9cbm1tL3Ztc2Nhbi5jOjcwMjY6XHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNzAyNy1cbi0tXG5tbS92bXNjYW4uYz03MDgyPXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzE5MS1cbm1tL3Ztc2Nhbi5jOjcxOTI6XHRcdC8qIENhbGwgc29mdCBsaW1pdCByZWNsYWltIGJlZm9yZSBjYWxsaW5nIHNocmlua19ub2RlLiAqL1xubW0vdm1zY2FuLmMtNzE5My1cdFx0c2MubnJfc2Nhbm5lZCA9IDA7XG4tLVxubW0vdm1zY2FuLmMtNzIwMy1cdFx0ICovXG5tbS92bXNjYW4uYzo3MjA0Olx0XHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcdTAwMjZzYykpXG5tbS92bXNjYW4uYy03MjA1LVx0XHRcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9Nzc1OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS92bXNjYW4uYy03Nzg2LVx0XHRkbyB7XG5tbS92bXNjYW4uYzo3Nzg3Olx0XHRcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy03Nzg4LVx0XHR9IHdoaWxlIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNjIG5yX3BhZ2VzIFx1MDAyNlx1MDAyNiAtLXNjLVx1MDAzZXByaW9yaXR5IFx1MDAzZT0gMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSwgYnJlYWtpbmcgZG93biB0aGUgZnVuY3Rpb24gYWNjZXNzaWJpbGl0eToKCioqQXNzZXNzaW5nIFBvdGVudGlhbCBFbnRyeSBQb2ludHMgZm9yIE1lbW9yeSBSZWNsYW1hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byB0cmlnZ2VyIG1lbW9yeSByZWNsYWltIGluIHRoaXMgc3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIHNlZW1zIGxpa2UgYSBzb2xpZCBub24tc3RhdGljIGVudHJ5IHBvaW50LiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwbGFjZSwgYW5kIGl0IHdpbGwgYmUgYWNjZXNzaWJsZSB0byB3aGF0ZXZlciBpcyBjYWxsaW5nIHRoZSBmdW5jdGlvbi4KCk5vdywgbGV0JiMzOTtzIHNlZSwgSSBhbHNvIHNlZSB0aGF0IGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBpcyBub24tc3RhdGljIGFzIHdlbGwuIEdvb2QgdG8ga25vdy4gSXQgZXhwYW5kcyB0aGUgcG9zc2libGUgZW50cnkgcG9pbnRzIGZvciBtZS4KCkhtbSwgaW50ZXJlc3RpbmcuIFRoZW4sIGBfX25vZGVfcmVjbGFpbWAgaXMgc3RhdGljLCB3aGljaCBtZWFucyBpdCBoYXMgbGltaXRlZCBzY29wZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIG1pZ2h0IG1lYW4gaXQmIzM5O3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiBCdXQsIHRoZSBmdW5jdGlvbiBgbm9kZV9yZWNsYWltYCBpdHNlbGYgaXMgbm9uLXN0YXRpYywgd2hpY2ggbWVhbnMgaXQgd2lsbCBiZSBleHBvc2VkIGZvciBleHRlcm5hbCB1c2UuIEkgdGhpbmsgdGhhdCBpcyBhbiBpbXBvcnRhbnQgcG9pbnQgdG8gbm90ZS4KClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIHNlZSB3aGF0IGl0JiMzOTtzIHJlYWxseSBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz02NDQxPXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjQ3MS0gKi9cbm1tL3Ztc2Nhbi5jOjY0NzI6c3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcbm1tL3Ztc2Nhbi5jLTY0NzMtXHRcdFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmM9NjYxND1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcbi0tXG5tbS92bXNjYW4uYy02NjkzLVxubW0vdm1zY2FuLmM6NjY5NDp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbm1tL3Ztc2Nhbi5jLTY2OTUtXHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vdm1zY2FuLmMtNjcyOC1cbm1tL3Ztc2Nhbi5jOjY3Mjk6XHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNjczMC1cbi0tXG5tbS92bXNjYW4uYz02NzgwPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjgxMS1cbm1tL3Ztc2Nhbi5jOjY4MTI6XHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNjgxMy1cbi0tXG5tbS92bXNjYW4uYz03NTc4PXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuLS1cbm1tL3Ztc2Nhbi5jLTc1OTctXG5tbS92bXNjYW4uYzo3NTk4Olx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTc1OTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IHB1enpsZS4KCioqRGlnZ2luZyBpbnRvIE1lbW9yeSBSZWNsYW1hdGlvbiBNZWNoYW5pc21zKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUga2VybmVsIGFjdHVhbGx5IGZyZWVzIHVwIG1lbW9yeS4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGEgZmV3IGtleSBmdW5jdGlvbnM6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIHRoZSBtb3JlIGdlbmVyYWwgYHNocmlua19hbGxfbWVtb3J5YC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBtYWluIHBsYXllcnMgaW4gdGhlIHJlY2xhbWF0aW9uIGdhbWUuIEJ1dCB0aGVuIEkgaGF2ZSB0byB0aGluayBhYm91dCB0aGUgbW9yZSBwcm9hY3RpdmUgZWxlbWVudCwgdGhlIGJhY2tncm91bmQgcmVjbGFpbSBhY3Rpdml0eS4gSSYjMzk7bSByZWNhbGxpbmcgdGhhdCBgYmFsYW5jZV9wZ2RhdGAgcGxheXMgYSBwYXJ0LCBhbmQgdGhhdCYjMzk7cyB0cmlnZ2VyZWQgYnkgYGtzd2FwZGAuIEFscmlnaHQsIHRoYXQmIzM5O3MgbXkgbmV4dCBwb2ludCBvZiBmb2N1cy4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gaG93IGBrc3dhcGRgIHdvcmtzIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3N3YXBkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUyNCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vdm1zY2FuLmMtNS0gKiAgU3dhcCByZW9yZ2FuaXNlZCAyOS4xMi45NSwgU3RlcGhlbiBUd2VlZGllLlxubW0vdm1zY2FuLmM6NjogKiAga3N3YXBkIGFkZGVkOiA3LjEuOTYgIHNjdFxubW0vdm1zY2FuLmM6NzogKiAgUmVtb3ZlZCBrc3dhcGRfY3RsIGxpbWl0cywgYW5kIHN3YXAgb3V0IGFzIG1hbnkgcGFnZXMgYXMgbmVlZGVkXG5tbS92bXNjYW4uYy04LSAqICB0byBicmluZyB0aGUgc3lzdGVtIGJhY2sgdG8gZnJlZXBhZ2VzLmhpZ2g6IDIuNC45NywgUmlrIHZhbiBSaWVsLlxubW0vdm1zY2FuLmM6OTogKiAgWm9uZSBhd2FyZSBrc3dhcGQgc3RhcnRlZCAwMi8wMCwgS2Fub2ogU2FyY2FyIChrYW5vakBzZ2kuY29tKS5cbm1tL3Ztc2Nhbi5jLTEwLSAqICBNdWx0aXF1ZXVlIFZNIHN0YXJ0ZWQgNS44LjAwLCBSaWsgdmFuIFJpZWwuXG4tLVxubW0vdm1zY2FuLmM9NDQ3PXN0YXRpYyBpbnQgcmVjbGFpbWVyX29mZnNldChzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00NTItXG5tbS92bXNjYW4uYzo0NTM6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTQ1NC1cdFx0cmV0dXJuIDA7XG4tLVxubW0vdm1zY2FuLmM9NDgzPXN0YXRpYyBib29sIHNraXBfdGhyb3R0bGVfbm9wcm9ncmVzcyhwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTQ4OC1cdC8qXG5tbS92bXNjYW4uYzo0ODk6XHQgKiBJZiBrc3dhcGQgaXMgZGlzYWJsZWQsIHJlc2NoZWR1bGUgaWYgbmVjZXNzYXJ5IGJ1dCBkbyBub3Rcbm1tL3Ztc2Nhbi5jLTQ5MC1cdCAqIHRocm90dGxlIGFzIHRoZSBzeXN0ZW0gaXMgbGlrZWx5IG5lYXIgT09NLlxubW0vdm1zY2FuLmMtNDkxLVx0ICovXG5tbS92bXNjYW4uYzo0OTI6XHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxubW0vdm1zY2FuLmMtNDkzLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS92bXNjYW4uYz01MTE9dm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbilcbi0tXG5tbS92bXNjYW4uYy01MTctXHQvKlxubW0vdm1zY2FuLmM6NTE4Olx0ICogRG8gbm90IHRocm90dGxlIHVzZXIgd29ya2Vycywga3RocmVhZHMgb3RoZXIgdGhhbiBrc3dhcGQgb3Jcbm1tL3Ztc2Nhbi5jLTUxOS1cdCAqIHdvcmtxdWV1ZXMuIFRoZXkgbWF5IGJlIHJlcXVpcmVkIGZvciByZWNsYWltIHRvIG1ha2Vcbi0tXG5tbS92bXNjYW4uYy01MjEtXHQgKi9cbm1tL3Ztc2Nhbi5jOjUyMjpcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jLTUyMy1cdCAgICBjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiAoUEZfVVNFUl9XT1JLRVJ8UEZfS1RIUkVBRCkpIHtcbi0tXG5tbS92bXNjYW4uYz05NjU9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZGVtb3RlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqc3JjLFxuLS1cbm1tL3Ztc2Nhbi5jLTk3NC1cdCAqIG1ha2Ugc3VyZSB3ZSBhbGxvY2F0ZSBmcm9tIHRoZSB0YXJnZXQgbm9kZSBmaXJzdCBhbHNvIHRyeWluZyB0b1xubW0vdm1zY2FuLmM6OTc1Olx0ICogZGVtb3RlIG9yIHJlY2xhaW0gcGFnZXMgZnJvbSB0aGUgdGFyZ2V0IG5vZGUgdmlhIGtzd2FwZCBpZiB3ZSBhcmVcbm1tL3Ztc2Nhbi5jLTk3Ni1cdCAqIGxvdyBvbiBmcmVlIG1lbW9yeSBvbiB0YXJnZXQgbm9kZS4gSWYgd2UgZG9uJiMzOTt0IGRvIHRoaXMgYW5kIGlmXG4tLVxubW0vdm1zY2FuLmM9MTA1OD1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMTEyMS1cdFx0ICogVGhlIG51bWJlciBvZiBkaXJ0eSBwYWdlcyBkZXRlcm1pbmVzIGlmIGEgbm9kZSBpcyBtYXJrZWRcbm1tL3Ztc2Nhbi5jOjExMjI6XHRcdCAqIHJlY2xhaW1fY29uZ2VzdGVkLiBrc3dhcGQgd2lsbCBzdGFsbCBhbmQgc3RhcnQgd3JpdGluZ1xubW0vdm1zY2FuLmMtMTEyMy1cdFx0ICogZm9saW9zIGlmIHRoZSB0YWlsIG9mIHRoZSBMUlUgaXMgYWxsIGRpcnR5IHVucXVldWVkIGZvbGlvcy5cbi0tXG5tbS92bXNjYW4uYy0xMTkwLVx0XHRcdC8qIENhc2UgMSBhYm92ZSAqL1xubW0vdm1zY2FuLmM6MTE5MTpcdFx0XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jLTExOTItXHRcdFx0ICAgIGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykgXHUwMDI2XHUwMDI2XG4tLVxubW0vdm1zY2FuLmM9MTU5NT11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vdm1zY2FuLmMtMTYyMC1cdCAqIFdlIHNob3VsZCBiZSBzYWZlIGhlcmUgc2luY2Ugd2UgYXJlIG9ubHkgZGVhbGluZyB3aXRoIGZpbGUgcGFnZXMgYW5kXG5tbS92bXNjYW4uYzoxNjIxOlx0ICogd2UgYXJlIG5vdCBrc3dhcGQgYW5kIHRoZXJlZm9yZSBjYW5ub3Qgd3JpdGUgZGlydHkgZmlsZSBwYWdlcy4gQnV0XG5tbS92bXNjYW4uYy0xNjIyLVx0ICogY2FsbCBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpIGFueXdheSwganVzdCBpbiBjYXNlIHRoZXNlIGNvbmRpdGlvbnNcbi0tXG5tbS92bXNjYW4uYz0xODM0PXN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLFxuLS1cbm1tL3Ztc2Nhbi5jLTE4MzktXG5tbS92bXNjYW4uYzoxODQwOlx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy0xODQxLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9Mzc5OD1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcbi0tXG5tbS92bXNjYW4uYy0zODAxLVxubW0vdm1zY2FuLmM6MzgwMjpcdGlmIChwZ2RhdCBcdTAwMjZcdTAwMjYgY3VycmVudF9pc19rc3dhcGQoKSkge1xubW0vdm1zY2FuLmMtMzgwMy1cdFx0Vk1fV0FSTl9PTl9PTkNFKHdhbGspO1xuLS1cbm1tL3Ztc2Nhbi5jLTM4MDYtXHR9IGVsc2UgaWYgKCF3YWxrIFx1MDAyNlx1MDAyNiBmb3JjZV9hbGxvYykge1xubW0vdm1zY2FuLmM6MzgwNzpcdFx0Vk1fV0FSTl9PTl9PTkNFKGN1cnJlbnRfaXNfa3N3YXBkKCkpO1xubW0vdm1zY2FuLmMtMzgwOC1cbi0tXG5tbS92bXNjYW4uYz0zODE4PXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcbi0tXG5tbS92bXNjYW4uYy0zODI2LVxubW0vdm1zY2FuLmM6MzgyNzpcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTM4MjgtXHRcdGtmcmVlKHdhbGspO1xuLS1cbm1tL3Ztc2Nhbi5jPTQxNDA9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MTQ1LVxubW0vdm1zY2FuLmM6NDE0NjpcdFZNX1dBUk5fT05fT05DRSghY3VycmVudF9pc19rc3dhcGQoKSk7XG5tbS92bXNjYW4uYy00MTQ3LVxuLS1cbm1tL3Ztc2Nhbi5jPTQ5MzE9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00OTQyLVx0LyogY2hlY2sgdGhlIG9yZGVyIHRvIGV4Y2x1ZGUgY29tcGFjdGlvbi1pbmR1Y2VkIHJlY2xhaW0gKi9cbm1tL3Ztc2Nhbi5jOjQ5NDM6XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXHUwMDNlb3JkZXIpXG5tbS92bXNjYW4uYy00OTQ0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmMtNDk1Ni1cbm1tL3Ztc2Nhbi5jOjQ5NTc6XHQvKiBrc3dhcGQgc2hvdWxkIGFib3J0IGlmIGFsbCBlbGlnaWJsZSB6b25lcyBhcmUgc2FmZSAqL1xubW0vdm1zY2FuLmMtNDk1OC1cdHJldHVybiB0cnVlO1xuLS1cbm1tL3Ztc2Nhbi5jPTUxNDM9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTY1LVxubW0vdm1zY2FuLmM6NTE2NjpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtNTE2Ny1cdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkID0gMDtcbi0tXG5tbS92bXNjYW4uYy01MTczLVxubW0vdm1zY2FuLmM6NTE3NDpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtNTE3NS1cdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG4tLVxubW0vdm1zY2FuLmMtNTE4MS1cdGlmIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNlIHJlY2xhaW1lZClcbm1tL3Ztc2Nhbi5jOjUxODI6XHRcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVx1MDAzZW9yZGVyLCBzYy1cdTAwM2VyZWNsYWltX2lkeCk7XG5tbS92bXNjYW4uYy01MTgzLX1cbi0tXG5tbS92bXNjYW4uYz01ODgzPXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTEyLVx0ICogREVGX1BSSU9SSVRZIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGZhY3Qgd2UgYXJlIGRpcmVjdFxubW0vdm1zY2FuLmM6NTkxMzpcdCAqIHJlY2xhaW1pbmcgaW1wbGllcyB0aGF0IGtzd2FwZCBpcyBub3Qga2VlcGluZyB1cCBhbmQgaXQgaXMgYmVzdCB0b1xubW0vdm1zY2FuLmMtNTkxNC1cdCAqIGRvIGEgYmF0Y2ggb2Ygd29yayBhdCBvbmNlLiBGb3IgbWVtY2cgcmVjbGFpbSBvbmUgY2hlY2sgaXMgbWFkZSB0b1xuLS1cbm1tL3Ztc2Nhbi5jLTU5MTctXHQgKi9cbm1tL3Ztc2Nhbi5jOjU5MTg6XHRwcm9wb3J0aW9uYWxfcmVjbGFpbSA9ICghY2dyb3VwX3JlY2xhaW0oc2MpIFx1MDAyNlx1MDAyNiAhY3VycmVudF9pc19rc3dhcGQoKSBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jLTU5MTktXHRcdFx0XHRzYy1cdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpO1xuLS1cbm1tL3Ztc2Nhbi5jLTU5NTMtXHRcdC8qXG5tbS92bXNjYW4uYzo1OTU0Olx0XHQgKiBGb3Iga3N3YXBkIGFuZCBtZW1jZywgcmVjbGFpbSBhdCBsZWFzdCB0aGUgbnVtYmVyIG9mIHBhZ2VzXG5tbS92bXNjYW4uYy01OTU1LVx0XHQgKiByZXF1ZXN0ZWQuIEVuc3VyZSB0aGF0IHRoZSBhbm9uIGFuZCBmaWxlIExSVXMgYXJlIHNjYW5uZWRcbi0tXG5tbS92bXNjYW4uYz02MDg1PXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDk5LVx0ICpcbm1tL3Ztc2Nhbi5jOjYxMDA6XHQgKiBGb3Iga3N3YXBkLCByZWxpYWJsZSBmb3J3YXJkIHByb2dyZXNzIGlzIG1vcmUgaW1wb3J0YW50XG5tbS92bXNjYW4uYy02MTAxLVx0ICogdGhhbiBhIHF1aWNrIHJldHVybiB0byBpZGxlLiBBbHdheXMgZG8gZnVsbCB3YWxrcy5cbm1tL3Ztc2Nhbi5jLTYxMDItXHQgKi9cbm1tL3Ztc2Nhbi5jOjYxMDM6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSB8fCBzYy1cdTAwM2VtZW1jZ19mdWxsX3dhbGspXG5tbS92bXNjYW4uYy02MTA0LVx0XHRwYXJ0aWFsID0gTlVMTDtcbi0tXG5tbS92bXNjYW4uYz02MTY0PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYyMDItXG5tbS92bXNjYW4uYzo2MjAzOlx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpIHtcbm1tL3Ztc2Nhbi5jLTYyMDQtXHRcdC8qXG4tLVxubW0vdm1zY2FuLmMtNjIxNS1cdFx0ICpcbm1tL3Ztc2Nhbi5jOjYyMTY6XHRcdCAqIE9uY2UgYSBub2RlIGlzIGZsYWdnZWQgUEdEQVRfV1JJVEVCQUNLLCBrc3dhcGQgd2lsbFxubW0vdm1zY2FuLmMtNjIxNy1cdFx0ICogY291bnQgdGhlIG51bWJlciBvZiBwYWdlcyB1bmRlciBwYWdlcyBmbGFnZ2VkIGZvclxuLS1cbm1tL3Ztc2Nhbi5jLTYyMjQtXHRcdC8qXG5tbS92bXNjYW4uYzo2MjI1Olx0XHQgKiBJZiBrc3dhcGQgc2NhbnMgcGFnZXMgbWFya2VkIGZvciBpbW1lZGlhdGVcbm1tL3Ztc2Nhbi5jLTYyMjYtXHRcdCAqIHJlY2xhaW0gYW5kIHVuZGVyIHdyaXRlYmFjayAobnJfaW1tZWRpYXRlKSwgaXRcbi0tXG5tbS92bXNjYW4uYy02MjQ1LVxubW0vdm1zY2FuLmM6NjI0NjpcdFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy02MjQ3LVx0XHRcdHNldF9iaXQoTFJVVkVDX05PREVfQ09OR0VTVEVELCBcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWZsYWdzKTtcbi0tXG5tbS92bXNjYW4uYy02MjUxLVx0ICogU3RhbGwgZGlyZWN0IHJlY2xhaW0gZm9yIElPIGNvbXBsZXRpb25zIGlmIHRoZSBscnV2ZWMgaXNcbm1tL3Ztc2Nhbi5jOjYyNTI6XHQgKiBub2RlIGlzIGNvbmdlc3RlZC4gQWxsb3cga3N3YXBkIHRvIGNvbnRpbnVlIHVudGlsIGl0XG5tbS92bXNjYW4uYy02MjUzLVx0ICogc3RhcnRzIGVuY291bnRlcmluZyB1bnF1ZXVlZCBkaXJ0eSBwYWdlcyBvciBjeWNsaW5nIHRocm91Z2hcbi0tXG5tbS92bXNjYW4uYy02MjU1LVx0ICovXG5tbS92bXNjYW4uYzo2MjU2Olx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNiBjdXJyZW50X21heV90aHJvdHRsZSgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtNjI1Ny1cdCAgICAhc2MtXHUwMDNlaGliZXJuYXRpb25fbW9kZSBcdTAwMjZcdTAwMjZcbi0tXG5tbS92bXNjYW4uYy02MjY4LVx0ICogc2xlZXAuIE9uIHJlY2xhaW0gcHJvZ3Jlc3MsIHJlc2V0IHRoZSBmYWlsdXJlIGNvdW50ZXIuIEFcbm1tL3Ztc2Nhbi5jOjYyNjk6XHQgKiBzdWNjZXNzZnVsIGRpcmVjdCByZWNsYWltIHJ1biB3aWxsIHJldml2ZSBhIGRvcm1hbnQga3N3YXBkLlxubW0vdm1zY2FuLmMtNjI3MC1cdCAqL1xubW0vdm1zY2FuLmMtNjI3MS1cdGlmIChyZWNsYWltYWJsZSlcbm1tL3Ztc2Nhbi5jOjYyNzI6XHRcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVx1MDAzZW9yZGVyLCBzYy1cdTAwM2VyZWNsYWltX2lkeCk7XG5tbS92bXNjYW4uYy02MjczLVx0ZWxzZSBpZiAoc2MtXHUwMDNlY2FjaGVfdHJpbV9tb2RlKVxuLS1cbm1tL3Ztc2Nhbi5jPTYzMTE9c3RhdGljIHZvaWQgY29uc2lkZXJfcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MzI3LVx0Lypcbm1tL3Ztc2Nhbi5jOjYzMjg6XHQgKiBEbyBub3QgdGhyb3R0bGUga3N3YXBkIG9yIGNncm91cCByZWNsYWltIG9uIE5PUFJPR1JFU1MgYXMgaXQgd2lsbFxubW0vdm1zY2FuLmMtNjMyOS1cdCAqIHRocm90dGxlIG9uIFZNU0NBTl9USFJPVFRMRV9XUklURUJBQ0sgaWYgdGhlcmUgYXJlIHRvbyBtYW55IHBhZ2VzXG4tLVxubW0vdm1zY2FuLmMtNjMzMi1cdCAqL1xubW0vdm1zY2FuLmM6NjMzMzpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIHx8IGNncm91cF9yZWNsYWltKHNjKSlcbm1tL3Ztc2Nhbi5jLTYzMzQtXHRcdHJldHVybjtcbi0tXG5tbS92bXNjYW4uYz02NTY5PXN0YXRpYyBib29sIGFsbG93X2RpcmVjdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjU3Ni1cbm1tL3Ztc2Nhbi5jOjY1Nzc6XHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxubW0vdm1zY2FuLmMtNjU3OC1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vdm1zY2FuLmMtNjU5My1cbm1tL3Ztc2Nhbi5jOjY1OTQ6XHQvKiBrc3dhcGQgbXVzdCBiZSBhd2FrZSBpZiBwcm9jZXNzZXMgYXJlIGJlaW5nIHRocm90dGxlZCAqL1xubW0vdm1zY2FuLmM6NjU5NTpcdGlmICghd21hcmtfb2sgXHUwMDI2XHUwMDI2IHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQpKSB7XG5tbS92bXNjYW4uYzo2NTk2Olx0XHRpZiAoUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgpIFx1MDAzZSBaT05FX05PUk1BTClcbm1tL3Ztc2Nhbi5jOjY1OTc6XHRcdFx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBaT05FX05PUk1BTCk7XG5tbS92bXNjYW4uYy02NTk4LVxubW0vdm1zY2FuLmM6NjU5OTpcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0KTtcbm1tL3Ztc2Nhbi5jLTY2MDAtXHR9XG4tLVxubW0vdm1zY2FuLmMtNjYwNy0gKiBhbmQgdGhlIFBGTUVNQUxMT0MgcmVzZXJ2ZSBmb3IgdGhlIHByZWZlcnJlZCBub2RlIGlzIGdldHRpbmcgZGFuZ2Vyb3VzbHlcbm1tL3Ztc2Nhbi5jOjY2MDg6ICogZGVwbGV0ZWQuIGtzd2FwZCB3aWxsIGNvbnRpbnVlIHRvIG1ha2UgcHJvZ3Jlc3MgYW5kIHdha2UgdGhlIHByb2Nlc3Nlc1xubW0vdm1zY2FuLmMtNjYwOS0gKiB3aGVuIHRoZSBsb3cgd2F0ZXJtYXJrIGlzIHJlYWNoZWQuXG4tLVxubW0vdm1zY2FuLmM9NjYxND1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcbi0tXG5tbS92bXNjYW4uYy02NjQ0LVx0ICogVGhyb3R0bGluZyBpcyBiYXNlZCBvbiB0aGUgZmlyc3QgdXNhYmxlIG5vZGUgYW5kIHRocm90dGxlZCBwcm9jZXNzZXNcbm1tL3Ztc2Nhbi5jOjY2NDU6XHQgKiB3YWl0IG9uIGEgcXVldWUgdW50aWwga3N3YXBkIG1ha2VzIHByb2dyZXNzIGFuZCB3YWtlcyB0aGVtLiBUaGVyZVxubW0vdm1zY2FuLmMtNjY0Ni1cdCAqIGlzIGFuIGFmZmluaXR5IHRoZW4gYmV0d2VlbiBwcm9jZXNzZXMgd2FraW5nIHVwIGFuZCB3aGVyZSByZWNsYWltXG4tLVxubW0vdm1zY2FuLmMtNjY3NC1cdCAqIHRyYW5zYWN0aW9uIGluIHRoZSBjYXNlIG9mIGEgZmlsZXN5c3RlbSBsaWtlIGV4dFszfDRdLiBJbiB0aGlzIGNhc2UsXG5tbS92bXNjYW4uYzo2Njc1Olx0ICogaXQgaXMgbm90IHNhZmUgdG8gYmxvY2sgb24gcGZtZW1hbGxvY193YWl0IGFzIGtzd2FwZCBjb3VsZCBiZVxubW0vdm1zY2FuLmMtNjY3Ni1cdCAqIGJsb2NrZWQgd2FpdGluZyBvbiB0aGUgc2FtZSBsb2NrLiBJbnN0ZWFkLCB0aHJvdHRsZSBmb3IgdXAgdG8gYVxuLS1cbm1tL3Ztc2Nhbi5jLTY2ODItXHRlbHNlXG5tbS92bXNjYW4uYzo2NjgzOlx0XHQvKiBUaHJvdHRsZSB1bnRpbCBrc3dhcGQgd2FrZXMgdGhlIHByb2Nlc3MgKi9cbm1tL3Ztc2Nhbi5jLTY2ODQtXHRcdHdhaXRfZXZlbnRfa2lsbGFibGUoem9uZS1cdTAwM2V6b25lX3BnZGF0LVx1MDAzZXBmbWVtYWxsb2Nfd2FpdCxcbi0tXG5tbS92bXNjYW4uYz02ODIxPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjgzMC1cbm1tL3Ztc2Nhbi5jOjY4MzE6c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjgzMi17XG4tLVxubW0vdm1zY2FuLmM9Njg4OD1zdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNjkxMC1cdFx0ICpcbm1tL3Ztc2Nhbi5jOjY5MTE6XHRcdCAqIEhvd2V2ZXIsIGtzd2FwZCB1c3VhbGx5IGNhbm5vdCBhY2NvbXBsaXNoIHRoaXMgb25cbm1tL3Ztc2Nhbi5jLTY5MTItXHRcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0JiMzOTtzXG5tbS92bXNjYW4uYzo2OTEzOlx0XHQgKiByZWNsYWltZWQgYSBjb21wYWN0aW9uIGdhcCwgYW5kIGtzd2FwZF9zaHJpbmtfbm9kZVxubW0vdm1zY2FuLmMtNjkxNC1cdFx0ICogaGFzIGRyb3BwZWQgb3JkZXIsIHNpbXBseSBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaFxuLS1cbm1tL3Ztc2Nhbi5jLTY5NDUtXHQgKiBuZWVkIGJhbGFuY2luZyBieSBkZWZpbml0aW9uLiBUaGlzIGNhbiBoYXBwZW4gaWYgYSB6b25lLXJlc3RyaWN0ZWRcbm1tL3Ztc2Nhbi5jOjY5NDY6XHQgKiBhbGxvY2F0aW9uIHRyaWVzIHRvIHdha2UgYSByZW1vdGUga3N3YXBkLlxubW0vdm1zY2FuLmMtNjk0Ny1cdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jPTY5NTU9c3RhdGljIHZvaWQgY2xlYXJfcGdkYXRfY29uZ2VzdGVkKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjk2NC0vKlxubW0vdm1zY2FuLmM6Njk2NTogKiBQcmVwYXJlIGtzd2FwZCBmb3Igc2xlZXBpbmcuIFRoaXMgdmVyaWZpZXMgdGhhdCB0aGVyZSBhcmUgbm8gcHJvY2Vzc2VzXG5tbS92bXNjYW4uYy02OTY2LSAqIHdhaXRpbmcgaW4gdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oKSBhbmQgdGhhdCB3YXRlcm1hcmtzIGhhdmUgYmVlbiBtZXQuXG5tbS92bXNjYW4uYy02OTY3LSAqXG5tbS92bXNjYW4uYzo2OTY4OiAqIFJldHVybnMgdHJ1ZSBpZiBrc3dhcGQgaXMgcmVhZHkgdG8gc2xlZXBcbm1tL3Ztc2Nhbi5jLTY5NjktICovXG5tbS92bXNjYW4uYzo2OTcwOnN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbm1tL3Ztc2Nhbi5jLTY5NzEtXHRcdFx0XHRpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTY5NzUtXHQgKiBzb29uIGFzIGFsbG93X2RpcmVjdF9yZWNsYWltKCkgaXMgdHJ1ZS4gQnV0IHRoZXJlIGlzIGEgcG90ZW50aWFsXG5tbS92bXNjYW4uYzo2OTc2Olx0ICogcmFjZSBiZXR3ZWVuIHdoZW4ga3N3YXBkIGNoZWNrcyB0aGUgd2F0ZXJtYXJrcyBhbmQgYSBwcm9jZXNzIGdldHNcbm1tL3Ztc2Nhbi5jLTY5NzctXHQgKiB0aHJvdHRsZWQuIFRoZXJlIGlzIGFsc28gYSBwb3RlbnRpYWwgcmFjZSBpZiBwcm9jZXNzZXMgZ2V0XG5tbS92bXNjYW4uYzo2OTc4Olx0ICogdGhyb3R0bGVkLCBrc3dhcGQgd2FrZXMsIGEgbGFyZ2UgcHJvY2VzcyBleGl0cyB0aGVyZWJ5IGJhbGFuY2luZyB0aGVcbm1tL3Ztc2Nhbi5jOjY5Nzk6XHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcbm1tL3Ztc2Nhbi5jOjY5ODA6XHQgKiB0aGUgd2FrZSB1cCBjaGVja3MuIElmIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgbm8gcHJvY2VzcyBzaG91bGRcbm1tL3Ztc2Nhbi5jLTY5ODEtXHQgKiBiZSBzbGVlcGluZyBvbiBwZm1lbWFsbG9jX3dhaXQsIHNvIHdha2UgdGhlbSBub3cgaWYgbmVjZXNzYXJ5LiBJZlxubW0vdm1zY2FuLmM6Njk4MjpcdCAqIHRoZSB3YWtlIHVwIGlzIHByZW1hdHVyZSwgcHJvY2Vzc2VzIHdpbGwgd2FrZSBrc3dhcGQgYW5kIGdldFxubW0vdm1zY2FuLmMtNjk4My1cdCAqIHRocm90dGxlZCBhZ2Fpbi4gVGhlIGRpZmZlcmVuY2UgZnJvbSB3YWtlIHVwcyBpbiBiYWxhbmNlX3BnZGF0KCkgaXNcbi0tXG5tbS92bXNjYW4uYy02OTg5LVx0LyogSG9wZWxlc3Mgbm9kZSwgbGVhdmUgaXQgdG8gZGlyZWN0IHJlY2xhaW0gKi9cbm1tL3Ztc2Nhbi5jOjY5OTA6XHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxubW0vdm1zY2FuLmMtNjk5MS1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vdm1zY2FuLmMtNzAwMS0vKlxubW0vdm1zY2FuLmM6NzAwMjogKiBrc3dhcGQgc2hyaW5rcyBhIG5vZGUgb2YgcGFnZXMgdGhhdCBhcmUgYXQgb3IgYmVsb3cgdGhlIGhpZ2hlc3QgdXNhYmxlXG5tbS92bXNjYW4uYy03MDAzLSAqIHpvbmUgdGhhdCBpcyBjdXJyZW50bHkgdW5iYWxhbmNlZC5cbm1tL3Ztc2Nhbi5jLTcwMDQtICpcbm1tL3Ztc2Nhbi5jOjcwMDU6ICogUmV0dXJucyB0cnVlIGlmIGtzd2FwZCBzY2FubmVkIGF0IGxlYXN0IHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHBhZ2VzIHRvXG5tbS92bXNjYW4uYy03MDA2LSAqIHJlY2xhaW0gb3IgaWYgdGhlIGxhY2sgb2YgcHJvZ3Jlc3Mgd2FzIGR1ZSB0byBwYWdlcyB1bmRlciB3cml0ZWJhY2suXG4tLVxubW0vdm1zY2FuLmMtNzAwOC0gKi9cbm1tL3Ztc2Nhbi5jOjcwMDk6c3RhdGljIGJvb2wga3N3YXBkX3Nocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsXG5tbS92bXNjYW4uYy03MDEwLVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz03MDY0PWNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzA2OS0vKlxubW0vdm1zY2FuLmM6NzA3MDogKiBGb3Iga3N3YXBkLCBiYWxhbmNlX3BnZGF0KCkgd2lsbCByZWNsYWltIHBhZ2VzIGFjcm9zcyBhIG5vZGUgZnJvbSB6b25lc1xubW0vdm1zY2FuLmMtNzA3MS0gKiB0aGF0IGFyZSBlbGlnaWJsZSBmb3IgdXNlIGJ5IHRoZSBjYWxsZXIgdW50aWwgYXQgbGVhc3Qgb25lIHpvbmUgaXNcbi0tXG5tbS92bXNjYW4uYy03MDczLSAqXG5tbS92bXNjYW4uYzo3MDc0OiAqIFJldHVybnMgdGhlIG9yZGVyIGtzd2FwZCBmaW5pc2hlZCByZWNsYWltaW5nIGF0LlxubW0vdm1zY2FuLmMtNzA3NS0gKlxubW0vdm1zY2FuLmM6NzA3NjogKiBrc3dhcGQgc2NhbnMgdGhlIHpvbmVzIGluIHRoZSBoaWdobWVtLVx1MDAzZW5vcm1hbC1cdTAwM2VkbWEgZGlyZWN0aW9uLiAgSXQgc2tpcHNcbm1tL3Ztc2Nhbi5jLTcwNzctICogem9uZXMgd2hpY2ggaGF2ZSBmcmVlX3BhZ2VzIFx1MDAzZSBoaWdoX3dtYXJrX3BhZ2VzKHpvbmUpLCBidXQgb25jZSBhIHpvbmUgaXNcbi0tXG5tbS92bXNjYW4uYz03MDgyPXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzEwOC1cdCAqIHBsYWNlIHNvIHRoYXQgcGFyYWxsZWwgYWxsb2NhdGlvbnMgdGhhdCBhcmUgbmVhciB0aGUgd2F0ZXJtYXJrIHdpbGxcbm1tL3Ztc2Nhbi5jOjcxMDk6XHQgKiBzdGFsbCBvciBkaXJlY3QgcmVjbGFpbSB1bnRpbCBrc3dhcGQgaXMgZmluaXNoZWQuXG5tbS92bXNjYW4uYy03MTEwLVx0ICovXG4tLVxubW0vdm1zY2FuLmMtNzEzNy1cdFx0ICogZ28gYWhlYWQgaWYgYWxsIGVsaWdpYmxlIHpvbmVzIGZvciB0aGUgb3JpZ2luYWwgYWxsb2NhdGlvblxubW0vdm1zY2FuLmM6NzEzODpcdFx0ICogcmVxdWVzdCBhcmUgYmFsYW5jZWQgdG8gYXZvaWQgZXhjZXNzaXZlIHJlY2xhaW0gZnJvbSBrc3dhcGQuXG5tbS92bXNjYW4uYy03MTM5LVx0XHQgKi9cbi0tXG5tbS92bXNjYW4uYy03MTU1LVx0XHQgKiBvbiB0aGUgZ3JvdW5kcyB0aGF0IHRoZSBub3JtYWwgcmVjbGFpbSBzaG91bGQgYmUgZW5vdWdoIHRvXG5tbS92bXNjYW4uYzo3MTU2Olx0XHQgKiByZS1ldmFsdWF0ZSBpZiBib29zdGluZyBpcyByZXF1aXJlZCB3aGVuIGtzd2FwZCBuZXh0IHdha2VzLlxubW0vdm1zY2FuLmMtNzE1Ny1cdFx0ICovXG4tLVxubW0vdm1zY2FuLmMtNzE4OS1cdFx0ICovXG5tbS92bXNjYW4uYzo3MTkwOlx0XHRrc3dhcGRfYWdlX25vZGUocGdkYXQsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTcxOTEtXG4tLVxubW0vdm1zY2FuLmMtNzIwMy1cdFx0ICovXG5tbS92bXNjYW4uYzo3MjA0Olx0XHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcdTAwMjZzYykpXG5tbS92bXNjYW4uYy03MjA1LVx0XHRcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmMtNzIxNS1cbm1tL3Ztc2Nhbi5jOjcyMTY6XHRcdC8qIENoZWNrIGlmIGtzd2FwZCBzaG91bGQgYmUgc3VzcGVuZGluZyAqL1xubW0vdm1zY2FuLmMtNzIxNy1cdFx0X19mc19yZWNsYWltX3JlbGVhc2UoX1RISVNfSVBfKTtcbi0tXG5tbS92bXNjYW4uYy03MjU0LVx0ICogd2F0ZXJtYXJrX2hpZ2ggYXQgdGhpcyBwb2ludC4gV2UgbmVlZCB0byBhdm9pZCBpbmNyZWFzaW5nIHRoZVxubW0vdm1zY2FuLmM6NzI1NTpcdCAqIGZhaWx1cmUgY291bnQgdG8gcHJldmVudCB0aGUga3N3YXBkIHRocmVhZCBmcm9tIHN0b3BwaW5nLlxubW0vdm1zY2FuLmMtNzI1Ni1cdCAqL1xubW0vdm1zY2FuLmMtNzI1Ny1cdGlmICghc2MubnJfcmVjbGFpbWVkIFx1MDAyNlx1MDAyNiAhYm9vc3RlZCkge1xubW0vdm1zY2FuLmM6NzI1ODpcdFx0aW50IGZhaWxfY250ID0gYXRvbWljX2luY19yZXR1cm4oXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX2ZhaWx1cmVzKTtcbm1tL3Ztc2Nhbi5jOjcyNTk6XHRcdC8qIGtzd2FwZCBjb250ZXh0LCBsb3cgb3ZlcmhlYWQgdG8gdHJhY2UgZXZlcnkgZmFpbHVyZSAqL1xubW0vdm1zY2FuLmM6NzI2MDpcdFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9yZWNsYWltX2ZhaWwocGdkYXQtXHUwMDNlbm9kZV9pZCwgZmFpbF9jbnQpO1xubW0vdm1zY2FuLmMtNzI2MS1cdH1cbi0tXG5tbS92bXNjYW4uYy03Mjk2LVx0Lypcbm1tL3Ztc2Nhbi5jOjcyOTc6XHQgKiBSZXR1cm4gdGhlIG9yZGVyIGtzd2FwZCBzdG9wcGVkIHJlY2xhaW1pbmcgYXQgYXNcbm1tL3Ztc2Nhbi5jOjcyOTg6XHQgKiBwcmVwYXJlX2tzd2FwZF9zbGVlcCgpIHRha2VzIGl0IGludG8gYWNjb3VudC4gSWYgYW5vdGhlciBjYWxsZXJcbm1tL3Ztc2Nhbi5jOjcyOTk6XHQgKiBlbnRlcmVkIHRoZSBhbGxvY2F0b3Igc2xvdyBwYXRoIHdoaWxlIGtzd2FwZCB3YXMgYXdha2UsIG9yZGVyIHdpbGxcbm1tL3Ztc2Nhbi5jLTczMDAtXHQgKiByZW1haW4gYXQgdGhlIGhpZ2hlciBsZXZlbC5cbi0tXG5tbS92bXNjYW4uYy03MzA1LS8qXG5tbS92bXNjYW4uYzo3MzA2OiAqIFRoZSBwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4IGlzIHVzZWQgdG8gcGFzcyB0aGUgaGlnaGVzdCB6b25lIGluZGV4IHRvXG5tbS92bXNjYW4uYzo3MzA3OiAqIGJlIHJlY2xhaW1lZCBieSBrc3dhcGQgZnJvbSB0aGUgd2FrZXIuIElmIHRoZSB2YWx1ZSBpcyBNQVhfTlJfWk9ORVMgd2hpY2ggaXNcbm1tL3Ztc2Nhbi5jOjczMDg6ICogbm90IGEgdmFsaWQgaW5kZXggdGhlbiBlaXRoZXIga3N3YXBkIHJ1bnMgZm9yIGZpcnN0IHRpbWUgb3Iga3N3YXBkIGNvdWxkbiYjMzk7dFxubW0vdm1zY2FuLmMtNzMwOS0gKiBzbGVlcCBhZnRlciBwcmV2aW91cyByZWNsYWltIGF0dGVtcHQgKG5vZGUgaXMgc3RpbGwgdW5iYWxhbmNlZCkuIEluIHRoYXRcbm1tL3Ztc2Nhbi5jOjczMTA6ICogY2FzZSByZXR1cm4gdGhlIHpvbmUgaW5kZXggb2YgdGhlIHByZXZpb3VzIGtzd2FwZCByZWNsYWltIGN5Y2xlLlxubW0vdm1zY2FuLmMtNzMxMS0gKi9cbm1tL3Ztc2Nhbi5jOjczMTI6c3RhdGljIGVudW0gem9uZV90eXBlIGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdfZGF0YV90ICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTczMTMtXHRcdFx0XHRcdCAgIGVudW0gem9uZV90eXBlIHByZXZfaGlnaGVzdF96b25laWR4KVxubW0vdm1zY2FuLmMtNzMxNC17XG5tbS92bXNjYW4uYzo3MzE1Olx0ZW51bSB6b25lX3R5cGUgY3Vycl9pZHggPSBSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCk7XG5tbS92bXNjYW4uYy03MzE2LVxuLS1cbm1tL3Ztc2Nhbi5jLTczMTktXG5tbS92bXNjYW4uYzo3MzIwOnN0YXRpYyB2b2lkIGtzd2FwZF90cnlfdG9fc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IGFsbG9jX29yZGVyLCBpbnQgcmVjbGFpbV9vcmRlcixcbm1tL3Ztc2Nhbi5jLTczMjEtXHRcdFx0XHR1bnNpZ25lZCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTczMjgtXG5tbS92bXNjYW4uYzo3MzI5Olx0cHJlcGFyZV90b193YWl0KFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0LCBcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xubW0vdm1zY2FuLmMtNzMzMC1cbi0tXG5tbS92bXNjYW4uYy03MzM3LVx0ICovXG5tbS92bXNjYW4uYzo3MzM4Olx0aWYgKHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnZGF0LCByZWNsYWltX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKSB7XG5tbS92bXNjYW4uYy03MzM5LVx0XHQvKlxuLS1cbm1tL3Ztc2Nhbi5jLTczNDEtXHRcdCAqIGlzb2xhdGUgcGFnZXMgZnJvbSBhbmQgc2tpcHMgdGhlbSBpbiB0aGUgZnV0dXJlIHNjYW5uaW5nLlxubW0vdm1zY2FuLmM6NzM0MjpcdFx0ICogV2hlbiBrc3dhcGQgaXMgZ29pbmcgdG8gc2xlZXAsIGl0IGlzIHJlYXNvbmFibGUgdG8gYXNzdW1lXG5tbS92bXNjYW4uYy03MzQzLVx0XHQgKiB0aGF0IHBhZ2VzIGFuZCBjb21wYWN0aW9uIG1heSBzdWNjZWVkIHNvIHJlc2V0IHRoZSBjYWNoZS5cbi0tXG5tbS92bXNjYW4uYy03MzU1LVx0XHQvKlxubW0vdm1zY2FuLmM6NzM1NjpcdFx0ICogSWYgd29rZW4gcHJlbWF0dXJlbHkgdGhlbiByZXNldCBrc3dhcGRfaGlnaGVzdF96b25laWR4IGFuZFxubW0vdm1zY2FuLmMtNzM1Ny1cdFx0ICogb3JkZXIuIFRoZSB2YWx1ZXMgd2lsbCBlaXRoZXIgYmUgZnJvbSBhIHdha2V1cCByZXF1ZXN0IG9yXG4tLVxubW0vdm1zY2FuLmMtNzM2MC1cdFx0aWYgKHJlbWFpbmluZykge1xubW0vdm1zY2FuLmM6NzM2MTpcdFx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsXG5tbS92bXNjYW4uYzo3MzYyOlx0XHRcdFx0XHRrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxubW0vdm1zY2FuLmMtNzM2My1cdFx0XHRcdFx0XHRcdGhpZ2hlc3Rfem9uZWlkeCkpO1xubW0vdm1zY2FuLmMtNzM2NC1cbm1tL3Ztc2Nhbi5jOjczNjU6XHRcdFx0aWYgKFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIpIFx1MDAzYyByZWNsYWltX29yZGVyKVxubW0vdm1zY2FuLmM6NzM2NjpcdFx0XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyLCByZWNsYWltX29yZGVyKTtcbm1tL3Ztc2Nhbi5jLTczNjctXHRcdH1cbm1tL3Ztc2Nhbi5jLTczNjgtXG5tbS92bXNjYW4uYzo3MzY5Olx0XHRmaW5pc2hfd2FpdChcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCwgXHUwMDI2d2FpdCk7XG5tbS92bXNjYW4uYzo3MzcwOlx0XHRwcmVwYXJlX3RvX3dhaXQoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQsIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG5tbS92bXNjYW4uYy03MzcxLVx0fVxuLS1cbm1tL3Ztc2Nhbi5jLTczNzctXHRpZiAoIXJlbWFpbmluZyBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jOjczNzg6XHQgICAgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdkYXQsIHJlY2xhaW1fb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpIHtcbm1tL3Ztc2Nhbi5jOjczNzk6XHRcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfc2xlZXAocGdkYXQtXHUwMDNlbm9kZV9pZCk7XG5tbS92bXNjYW4uYy03MzgwLVxuLS1cbm1tL3Ztc2Nhbi5jLTczODUtXHRcdCAqIHdhdGVybWFya3MgYmVpbmcgYnJlYWNoZWQgd2hpbGUgdW5kZXIgcHJlc3N1cmUsIHdlIHJlZHVjZSB0aGVcbm1tL3Ztc2Nhbi5jOjczODY6XHRcdCAqIHBlci1jcHUgdm1zdGF0IHRocmVzaG9sZCB3aGlsZSBrc3dhcGQgaXMgYXdha2UgYW5kIHJlc3RvcmVcbm1tL3Ztc2Nhbi5jLTczODctXHRcdCAqIHRoZW0gYmVmb3JlIGdvaW5nIGJhY2sgdG8gc2xlZXAuXG4tLVxubW0vdm1zY2FuLmMtNzQwMC1cdH1cbm1tL3Ztc2Nhbi5jOjc0MDE6XHRmaW5pc2hfd2FpdChcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCwgXHUwMDI2d2FpdCk7XG5tbS92bXNjYW4uYy03NDAyLX1cbi0tXG5tbS92bXNjYW4uYy03NDE2LSAqL1xubW0vdm1zY2FuLmM6NzQxNzpzdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxubW0vdm1zY2FuLmMtNzQxOC17XG4tLVxubW0vdm1zY2FuLmMtNzQyNi1cdCAqIGFuZCB0aGF0IGlmIHdlIG5lZWQgbW9yZSBtZW1vcnkgd2Ugc2hvdWxkIGdldCBhY2Nlc3MgdG8gaXRcbm1tL3Ztc2Nhbi5jOjc0Mjc6XHQgKiByZWdhcmRsZXNzIChzZWUgXCYjMzQ7X19hbGxvY19wYWdlcygpXCYjMzQ7KS4gXCYjMzQ7a3N3YXBkXCYjMzQ7IHNob3VsZFxubW0vdm1zY2FuLmMtNzQyOC1cdCAqIG5ldmVyIGdldCBjYXVnaHQgaW4gdGhlIG5vcm1hbCBwYWdlIGZyZWVpbmcgbG9naWMuXG4tLVxubW0vdm1zY2FuLmMtNzQzOC1cbm1tL3Ztc2Nhbi5jOjc0Mzk6XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XG5tbS92bXNjYW4uYzo3NDQwOlx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBNQVhfTlJfWk9ORVMpO1xubW0vdm1zY2FuLmMtNzQ0MS1cdGF0b21pY19zZXQoXHUwMDI2cGdkYXQtXHUwMDNlbnJfd3JpdGViYWNrX3Rocm90dGxlZCwgMCk7XG4tLVxubW0vdm1zY2FuLmMtNzQ0NC1cbm1tL3Ztc2Nhbi5jOjc0NDU6XHRcdGFsbG9jX29yZGVyID0gcmVjbGFpbV9vcmRlciA9IFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIpO1xubW0vdm1zY2FuLmM6NzQ0NjpcdFx0aGlnaGVzdF96b25laWR4ID0ga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc0NDctXHRcdFx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpO1xubW0vdm1zY2FuLmMtNzQ0OC1cbm1tL3Ztc2Nhbi5jOjc0NDk6a3N3YXBkX3RyeV9zbGVlcDpcbm1tL3Ztc2Nhbi5jOjc0NTA6XHRcdGtzd2FwZF90cnlfdG9fc2xlZXAocGdkYXQsIGFsbG9jX29yZGVyLCByZWNsYWltX29yZGVyLFxubW0vdm1zY2FuLmMtNzQ1MS1cdFx0XHRcdFx0aGlnaGVzdF96b25laWR4KTtcbi0tXG5tbS92bXNjYW4uYy03NDUzLVx0XHQvKiBSZWFkIHRoZSBuZXcgb3JkZXIgYW5kIGhpZ2hlc3Rfem9uZWlkeCAqL1xubW0vdm1zY2FuLmM6NzQ1NDpcdFx0YWxsb2Nfb3JkZXIgPSBSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyKTtcbm1tL3Ztc2Nhbi5jOjc0NTU6XHRcdGhpZ2hlc3Rfem9uZWlkeCA9IGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdkYXQsXG5tbS92bXNjYW4uYy03NDU2LVx0XHRcdFx0XHRcdFx0aGlnaGVzdF96b25laWR4KTtcbm1tL3Ztc2Nhbi5jOjc0NTc6XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyLCAwKTtcbm1tL3Ztc2Nhbi5jOjc0NTg6XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgTUFYX05SX1pPTkVTKTtcbm1tL3Ztc2Nhbi5jLTc0NTktXG4tLVxubW0vdm1zY2FuLmMtNzQ3MS1cdFx0ICogUmVjbGFpbSBiZWdpbnMgYXQgdGhlIHJlcXVlc3RlZCBvcmRlciBidXQgaWYgYSBoaWdoLW9yZGVyXG5tbS92bXNjYW4uYzo3NDcyOlx0XHQgKiByZWNsYWltIGZhaWxzIHRoZW4ga3N3YXBkIGZhbGxzIGJhY2sgdG8gcmVjbGFpbWluZyBmb3Jcbm1tL3Ztc2Nhbi5jOjc0NzM6XHRcdCAqIG9yZGVyLTAuIElmIHRoYXQgaGFwcGVucywga3N3YXBkIHdpbGwgY29uc2lkZXIgc2xlZXBpbmdcbm1tL3Ztc2Nhbi5jLTc0NzQtXHRcdCAqIGZvciB0aGUgb3JkZXIgaXQgZmluaXNoZWQgcmVjbGFpbWluZyBhdCAocmVjbGFpbV9vcmRlcilcbi0tXG5tbS92bXNjYW4uYy03NDc3LVx0XHQgKi9cbm1tL3Ztc2Nhbi5jOjc0Nzg6XHRcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfd2FrZShwZ2RhdC1cdTAwM2Vub2RlX2lkLCBoaWdoZXN0X3pvbmVpZHgsXG5tbS92bXNjYW4uYy03NDc5LVx0XHRcdFx0XHRcdGFsbG9jX29yZGVyKTtcbi0tXG5tbS92bXNjYW4uYy03NDgyLVx0XHRpZiAocmVjbGFpbV9vcmRlciBcdTAwM2MgYWxsb2Nfb3JkZXIpXG5tbS92bXNjYW4uYzo3NDgzOlx0XHRcdGdvdG8ga3N3YXBkX3RyeV9zbGVlcDtcbm1tL3Ztc2Nhbi5jLTc0ODQtXHR9XG4tLVxubW0vdm1zY2FuLmMtNzQ5Mi0gKiBBIHpvbmUgaXMgbG93IG9uIGZyZWUgbWVtb3J5IG9yIHRvbyBmcmFnbWVudGVkIGZvciBoaWdoLW9yZGVyIG1lbW9yeS4gIElmXG5tbS92bXNjYW4uYzo3NDkzOiAqIGtzd2FwZCBzaG91bGQgcmVjbGFpbSAoZGlyZWN0IHJlY2xhaW0gaXMgZGVmZXJyZWQpLCB3YWtlIGl0IHVwIGZvciB0aGUgem9uZSYjMzk7c1xubW0vdm1zY2FuLmM6NzQ5NDogKiBwZ2RhdC4gIEl0IHdpbGwgd2FrZSB1cCBrY29tcGFjdGQgYWZ0ZXIgcmVjbGFpbWluZyBtZW1vcnkuICBJZiBrc3dhcGQgcmVjbGFpbVxubW0vdm1zY2FuLmMtNzQ5NS0gKiBoYXMgZmFpbGVkIG9yIGlzIG5vdCBuZWVkZWQsIHN0aWxsIHdha2UgdXAga2NvbXBhY3RkIGlmIG9ubHkgY29tcGFjdGlvbiBpc1xuLS1cbm1tL3Ztc2Nhbi5jLTc0OTctICovXG5tbS92bXNjYW4uYzo3NDk4OnZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy03NDk5LVx0XHQgICBlbnVtIHpvbmVfdHlwZSBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzUxMC1cdHBnZGF0ID0gem9uZS1cdTAwM2V6b25lX3BnZGF0O1xubW0vdm1zY2FuLmM6NzUxMTpcdGN1cnJfaWR4ID0gUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgpO1xubW0vdm1zY2FuLmMtNzUxMi1cbm1tL3Ztc2Nhbi5jLTc1MTMtXHRpZiAoY3Vycl9pZHggPT0gTUFYX05SX1pPTkVTIHx8IGN1cnJfaWR4IFx1MDAzYyBoaWdoZXN0X3pvbmVpZHgpXG5tbS92bXNjYW4uYzo3NTE0Olx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIGhpZ2hlc3Rfem9uZWlkeCk7XG5tbS92bXNjYW4uYy03NTE1LVxubW0vdm1zY2FuLmM6NzUxNjpcdGlmIChSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyKSBcdTAwM2Mgb3JkZXIpXG5tbS92bXNjYW4uYzo3NTE3Olx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlciwgb3JkZXIpO1xubW0vdm1zY2FuLmMtNzUxOC1cbm1tL3Ztc2Nhbi5jOjc1MTk6XHRpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQpKVxubW0vdm1zY2FuLmMtNzUyMC1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jLTc1MjItXHQvKiBIb3BlbGVzcyBub2RlLCBsZWF2ZSBpdCB0byBkaXJlY3QgcmVjbGFpbSBpZiBwb3NzaWJsZSAqL1xubW0vdm1zY2FuLmM6NzUyMzpcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkgfHxcbm1tL3Ztc2Nhbi5jLTc1MjQtXHQgICAgKHBnZGF0X2JhbGFuY2VkKHBnZGF0LCBvcmRlciwgaGlnaGVzdF96b25laWR4KSBcdTAwMjZcdTAwMjZcbi0tXG5tbS92bXNjYW4uYy03NTM3LVxubW0vdm1zY2FuLmM6NzUzODpcdHRyYWNlX21tX3Ztc2Nhbl93YWtldXBfa3N3YXBkKHBnZGF0LVx1MDAzZW5vZGVfaWQsIGhpZ2hlc3Rfem9uZWlkeCwgb3JkZXIsXG5tbS92bXNjYW4uYy03NTM5LVx0XHRcdFx0ICAgICAgZ2ZwX2ZsYWdzKTtcbm1tL3Ztc2Nhbi5jOjc1NDA6XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQpO1xubW0vdm1zY2FuLmMtNzU0MS19XG5tbS92bXNjYW4uYy03NTQyLVxubW0vdm1zY2FuLmM6NzU0Mzp2b2lkIGtzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIGtzd2FwZF9jbGVhcl9ob3BlbGVzc19yZWFzb24gcmVhc29uKVxubW0vdm1zY2FuLmMtNzU0NC17XG5tbS92bXNjYW4uYy03NTQ1LVx0LyogT25seSB0cmFjZSBhY3R1YWwgcmVzZXRzLCBub3QgcmVkdW5kYW50IHplcm8tdG8temVybyAqL1xubW0vdm1zY2FuLmM6NzU0NjpcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfZmFpbHVyZXMsIDApKVxubW0vdm1zY2FuLmM6NzU0NzpcdFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ2RhdC1cdTAwM2Vub2RlX2lkLCByZWFzb24pO1xubW0vdm1zY2FuLmMtNzU0OC19XG4tLVxubW0vdm1zY2FuLmMtNzU1MC0vKlxubW0vdm1zY2FuLmM6NzU1MTogKiBSZXNldCBrc3dhcGRfZmFpbHVyZXMgb25seSB3aGVuIHRoZSBub2RlIGlzIGJhbGFuY2VkLiBXaXRob3V0IHRoaXNcbm1tL3Ztc2Nhbi5jLTc1NTItICogY2hlY2ssIHN1Y2Nlc3NmdWwgZGlyZWN0IHJlY2xhaW0gKGUuZy4sIGZyb20gY2dyb3VwIG1lbW9yeS5oaWdoXG5tbS92bXNjYW4uYzo3NTUzOiAqIHRocm90dGxpbmcpIGNhbiBrZWVwIHJlc2V0dGluZyBrc3dhcGRfZmFpbHVyZXMgZXZlbiB3aGVuIHRoZSBub2RlXG5tbS92bXNjYW4uYzo3NTU0OiAqIGNhbm5vdCBiZSBiYWxhbmNlZCwgY2F1c2luZyBrc3dhcGQgdG8gcnVuIGVuZGxlc3NseS5cbm1tL3Ztc2Nhbi5jLTc1NTUtICovXG5tbS92bXNjYW4uYzo3NTU2OnZvaWQga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzU1Ny1cdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTc1NTktXHRpZiAocGdkYXRfYmFsYW5jZWQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKVxubW0vdm1zY2FuLmM6NzU2MDpcdFx0a3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBjdXJyZW50X2lzX2tzd2FwZCgpID9cbm1tL3Ztc2Nhbi5jLTc1NjEtXHRcdFx0S1NXQVBEX0NMRUFSX0hPUEVMRVNTX0tTV0FQRCA6IEtTV0FQRF9DTEVBUl9IT1BFTEVTU19ESVJFQ1QpO1xuLS1cbm1tL3Ztc2Nhbi5jLTc1NjMtXG5tbS92bXNjYW4uYzo3NTY0OmJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcbm1tL3Ztc2Nhbi5jLTc1NjUte1xubW0vdm1zY2FuLmM6NzU2NjpcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfZmFpbHVyZXMpIFx1MDAzZT0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbm1tL3Ztc2Nhbi5jLTc1NjctfVxuLS1cbm1tL3Ztc2Nhbi5jPTc1Nzg9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG4tLVxubW0vdm1zY2FuLmMtNzYwOC0vKlxubW0vdm1zY2FuLmM6NzYwOTogKiBUaGlzIGtzd2FwZCBzdGFydCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBpbml0IGFuZCBub2RlLWhvdC1hZGQuXG5tbS92bXNjYW4uYy03NjEwLSAqL1xubW0vdm1zY2FuLmM6NzYxMTp2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpXG5tbS92bXNjYW4uYy03NjEyLXtcbi0tXG5tbS92bXNjYW4uYy03NjE0LVxubW0vdm1zY2FuLmM6NzYxNTpcdHBnZGF0X2tzd2FwZF9sb2NrKHBnZGF0KTtcbm1tL3Ztc2Nhbi5jOjc2MTY6XHRpZiAoIXBnZGF0LVx1MDAzZWtzd2FwZCkge1xubW0vdm1zY2FuLmM6NzYxNzpcdFx0cGdkYXQtXHUwMDNla3N3YXBkID0ga3RocmVhZF9jcmVhdGVfb25fbm9kZShrc3dhcGQsIHBnZGF0LCBuaWQsIFwmIzM0O2tzd2FwZCVkXCYjMzQ7LCBuaWQpO1xubW0vdm1zY2FuLmM6NzYxODpcdFx0aWYgKElTX0VSUihwZ2RhdC1cdTAwM2Vrc3dhcGQpKSB7XG5tbS92bXNjYW4uYy03NjE5LVx0XHRcdC8qIGZhaWx1cmUgYXQgYm9vdCBpcyBmYXRhbCAqL1xubW0vdm1zY2FuLmM6NzYyMDpcdFx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHN0YXJ0IGtzd2FwZCBvbiBub2RlICVkLCByZXQ9JXBlXFxuXCYjMzQ7LFxubW0vdm1zY2FuLmM6NzYyMTpcdFx0XHRcdCAgIG5pZCwgcGdkYXQtXHUwMDNla3N3YXBkKTtcbm1tL3Ztc2Nhbi5jLTc2MjItXHRcdFx0QlVHX09OKHN5c3RlbV9zdGF0ZSBcdTAwM2MgU1lTVEVNX1JVTk5JTkcpO1xubW0vdm1zY2FuLmM6NzYyMzpcdFx0XHRwZ2RhdC1cdTAwM2Vrc3dhcGQgPSBOVUxMO1xubW0vdm1zY2FuLmMtNzYyNC1cdFx0fSBlbHNlIHtcbm1tL3Ztc2Nhbi5jOjc2MjU6XHRcdFx0d2FrZV91cF9wcm9jZXNzKHBnZGF0LVx1MDAzZWtzd2FwZCk7XG5tbS92bXNjYW4uYy03NjI2LVx0XHR9XG5tbS92bXNjYW4uYy03NjI3LVx0fVxubW0vdm1zY2FuLmM6NzYyODpcdHBnZGF0X2tzd2FwZF91bmxvY2socGdkYXQpO1xubW0vdm1zY2FuLmMtNzYyOS19XG4tLVxubW0vdm1zY2FuLmMtNzYzNC0gKi9cbm1tL3Ztc2Nhbi5jOjc2MzU6dm9pZCBfX21lbWluaXQga3N3YXBkX3N0b3AoaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTc2MzYte1xubW0vdm1zY2FuLmMtNzYzNy1cdHBnX2RhdGFfdCAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc5NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIE1lbW9yeSBNYW5hZ2VtZW50KioKClJpZ2h0LCBzbyBga3N3YXBkYCBpcyBydW5uaW5nIGFzIGEga2VybmVsIHRocmVhZCwgd2hpY2ggSSBhbHJlYWR5IGtub3cuIEJ1dCBsZXQmIzM5O3MgY2xhcmlmeSB0aGF0IGluIG15IG1pbmQuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHJlY2xhaW0gcHJvY2Vzcy4gV2hlcmUgY2FuIEkgc3RhcnQgdG8gc2VlIGhvdyBtZW1vcnkgaXMgZnJlZWQ/IEFoLCB5ZXMsIGB0cnlfdG9fZnJlZV9wYWdlc2AsIHRoYXQmIzM5O3MgYSBjbGFzc2ljIGVudHJ5IHBvaW50LiBBbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBpbXBvcnRhbnQgZm9yIGNncm91cCBtZW1vcnkgbWFuYWdlbWVudCwgb2YgY291cnNlLiBgc2hyaW5rX2FsbF9tZW1vcnlgIGlzIGFsc28gYSBicm9hZCBhcHByb2FjaC4gTm93LCB3aGVyZSB0byBnbyBkZWVwZXI/IEkmIzM5O2xsIGRyaWxsIGRvd24gb24gYG5vZGVfcmVjbGFpbWAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBwZXItbm9kZSByZWNsYWltIGFjdGl2aXRpZXMsIHdoaWNoIGlzIGtleS4gSSYjMzk7bGwgZ2V0IHN0YXJ0ZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vZGVfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTYxNjQ9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02MTY1LXtcbm1tL3Ztc2Nhbi5jOjYxNjY6XHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQ7XG5tbS92bXNjYW4uYy02MTY3LVx0c3RydWN0IGxydXZlYyAqdGFyZ2V0X2xydXZlYztcbi0tXG5tbS92bXNjYW4uYy02MTkyLVxubW0vdm1zY2FuLmM6NjE5MzpcdG5yX25vZGVfcmVjbGFpbWVkID0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkIC0gbnJfcmVjbGFpbWVkO1xubW0vdm1zY2FuLmMtNjE5NC1cbi0tXG5tbS92bXNjYW4uYy02MTk3LVx0XHR2bXByZXNzdXJlKHNjLVx1MDAzZWdmcF9tYXNrLCBzYy1cdTAwM2VvcmRlciwgc2MtXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHRydWUsXG5tbS92bXNjYW4uYzo2MTk4Olx0XHRcdCAgIHNjLVx1MDAzZW5yX3NjYW5uZWQgLSBucl9zY2FubmVkLCBucl9ub2RlX3JlY2xhaW1lZCk7XG5tbS92bXNjYW4uYy02MTk5LVxubW0vdm1zY2FuLmM6NjIwMDpcdGlmIChucl9ub2RlX3JlY2xhaW1lZClcbm1tL3Ztc2Nhbi5jLTYyMDEtXHRcdHJlY2xhaW1hYmxlID0gdHJ1ZTtcbi0tXG5tbS92bXNjYW4uYy02MjYxLVxubW0vdm1zY2FuLmM6NjI2MjpcdGlmIChzaG91bGRfY29udGludWVfcmVjbGFpbShwZ2RhdCwgbnJfbm9kZV9yZWNsYWltZWQsIHNjKSlcbm1tL3Ztc2Nhbi5jLTYyNjMtXHRcdGdvdG8gYWdhaW47XG4tLVxubW0vdm1zY2FuLmM9NzY0OT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubW0vdm1zY2FuLmMtNzY2MS1cdFx0LnByb2NuYW1lXHQ9IFwmIzM0O3pvbmVfcmVjbGFpbV9tb2RlXCYjMzQ7LFxubW0vdm1zY2FuLmM6NzY2MjpcdFx0LmRhdGFcdFx0PSBcdTAwMjZub2RlX3JlY2xhaW1fbW9kZSxcbm1tL3Ztc2Nhbi5jOjc2NjM6XHRcdC5tYXhsZW5cdFx0PSBzaXplb2Yobm9kZV9yZWNsYWltX21vZGUpLFxubW0vdm1zY2FuLmMtNzY2NC1cdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuLS1cbm1tL3Ztc2Nhbi5jPTc2ODI9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXG4tLVxubW0vdm1zY2FuLmMtNzY4Ny0gKlxubW0vdm1zY2FuLmM6NzY4ODogKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xubW0vdm1zY2FuLmMtNzY4OS0gKiB0aGUgd2F0ZXJtYXJrcy5cbm1tL3Ztc2Nhbi5jLTc2OTAtICovXG5tbS92bXNjYW4uYzo3NjkxOmludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xubW0vdm1zY2FuLmMtNzY5Mi1cbi0tXG5tbS92bXNjYW4uYy03NzAwLS8qXG5tbS92bXNjYW4uYzo3NzAxOiAqIFBlcmNlbnRhZ2Ugb2YgcGFnZXMgaW4gYSB6b25lIHRoYXQgbXVzdCBiZSB1bm1hcHBlZCBmb3Igbm9kZV9yZWNsYWltIHRvXG5tbS92bXNjYW4uYy03NzAyLSAqIG9jY3VyLlxuLS1cbm1tL3Ztc2Nhbi5jPTc3Mjc9c3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03NzM3LVx0ICovXG5tbS92bXNjYW4uYzo3NzM4Olx0aWYgKG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiBSRUNMQUlNX1VOTUFQKVxubW0vdm1zY2FuLmMtNzczOS1cdFx0bnJfcGFnZWNhY2hlX3JlY2xhaW1hYmxlID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9GSUxFX1BBR0VTKTtcbi0tXG5tbS92bXNjYW4uYy03NzU4LSAqL1xubW0vdm1zY2FuLmM6Nzc1OTpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzayxcbm1tL3Ztc2Nhbi5jLTc3NjAtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYy03NzY2LVxubW0vdm1zY2FuLmM6Nzc2NzpcdHRyYWNlX21tX3Ztc2Nhbl9ub2RlX3JlY2xhaW1fYmVnaW4ocGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MtXHUwMDNlb3JkZXIsXG5tbS92bXNjYW4uYy03NzY4LVx0XHRcdFx0XHQgICBzYy1cdTAwM2VnZnBfbWFzayk7XG4tLVxubW0vdm1zY2FuLmMtNzc5Ni1cbm1tL3Ztc2Nhbi5jOjc3OTc6XHR0cmFjZV9tbV92bXNjYW5fbm9kZV9yZWNsYWltX2VuZChzYy1cdTAwM2Vucl9yZWNsYWltZWQsIE5VTEwpO1xubW0vdm1zY2FuLmMtNzc5OC1cbi0tXG5tbS92bXNjYW4uYy03ODAxLVxubW0vdm1zY2FuLmM6NzgwMjppbnQgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5tbS92bXNjYW4uYy03ODAzLXtcbi0tXG5tbS92bXNjYW4uYy03ODExLVx0XHQucHJpb3JpdHkgPSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFksXG5tbS92bXNjYW4uYzo3ODEyOlx0XHQubWF5X3dyaXRlcGFnZSA9ICEhKG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiBSRUNMQUlNX1dSSVRFKSxcbm1tL3Ztc2Nhbi5jOjc4MTM6XHRcdC5tYXlfdW5tYXAgPSAhIShub2RlX3JlY2xhaW1fbW9kZSBcdTAwMjYgUkVDTEFJTV9VTk1BUCksXG5tbS92bXNjYW4uYy03ODE0LVx0XHQubWF5X3N3YXAgPSAxLFxuLS1cbm1tL3Ztc2Nhbi5jLTc4NTAtXG5tbS92bXNjYW4uYzo3ODUxOlx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGdmcF9tYXNrLCBucl9wYWdlcywgXHUwMDI2c2MpIFx1MDAzZT0gbnJfcGFnZXM7XG5tbS92bXNjYW4uYy03ODUyLVx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpO1xuLS1cbm1tL3Ztc2Nhbi5jLTc4NjMtXG5tbS92bXNjYW4uYzo3ODY0OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLFxubW0vdm1zY2FuLmMtNzg2NS1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL3Ztc2Nhbi5jPTc4ODQ9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuLS1cbm1tL3Ztc2Nhbi5jLTc5NzItXG5tbS92bXNjYW4uYzo3OTczOlx0XHRcdHJlY2xhaW1lZCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBnZnBfbWFzayxcbm1tL3Ztc2Nhbi5jLTc5NzQtXHRcdFx0XHRcdFx0ICAgYmF0Y2hfc2l6ZSwgXHUwMDI2c2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU4MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgRW50cnkgUG9pbnRzIGZvciBSZXNvdXJjZSBSZWNsYW1hdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBzdGFydGluZyBwb2ludHMgZm9yIHRoaXMgcmVzb3VyY2UgcmVjbGFtYXRpb24gZWZmb3J0LiBgbm9kZV9yZWNsYWltYCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgbG9vazsgaXQmIzM5O3MgYSBjb21tb24gYXJlYSBmb3IgdGhpcyB0eXBlIG9mIG9wZXJhdGlvbiwgYW5kIGl0JiMzOTtzIHNvbWV0aGluZyBJJiMzOTttIHZlcnkgZmFtaWxpYXIgd2l0aC4gQnV0IGxldCYjMzk7cyBicm9hZGVuIHRoZSBzY29wZSBhIGJpdCwgYmVjYXVzZSBJIHdhbnQgdG8gYmUgY29tcHJlaGVuc2l2ZS4gTGV0IG1lIHNoaWZ0IG15IGZvY3VzLiBNeSBuZXh0IGNoZWNrIHdpbGwgYmUgb24gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBJdCYjMzk7cyBwb3NzaWJsZSB3ZSBtaWdodCBmaW5kIHNvbWUgaW50ZXJlc3RpbmcgYW5nbGVzIG9yIG92ZXJsYXBzIHRoZXJlLiBNeSBnb2FsIHJpZ2h0IG5vdyBpcyB0byBpZGVudGlmeSBhbGwgcHJvbWlzaW5nIGFyZWFzIHRvIGVuc3VyZSB3ZSYjMzk7cmUgdGFyZ2V0aW5nIHRoZSBtb3N0IGltcGFjdGZ1bCBhcmVhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc4Nzg9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc4ODMtXG5tbS92bXNjYW4uYzo3ODg0OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL3Ztc2Nhbi5jLTc4ODUtXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jPTgwMzQ9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxubW0vdm1zY2FuLmMtODAzOS1cbm1tL3Ztc2Nhbi5jOjgwNDA6XHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XG5tbS92bXNjYW4uYy04MDQxLVx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMDYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVjbGFpbSBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGZ1bmN0aW9uLCB3aGljaCBpcyB0cmlnZ2VyZWQgdmlhIGEgc3lzZnMgYXR0cmlidXRlIGluIGByZWNsYWltX3N0b3JlYCwgZml0cyBpbnRvIHRoZSBsYXJnZXIgbWVtb3J5IG1hbmFnZW1lbnQgcGljdHVyZS4gSSBrbm93IHRoYXQgYG1lbW9yeV9yZWNsYWltYCBpbiBgbW0vbWVtY29udHJvbC5jYCBhbHNvIGNhbGxzIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYC4gTXkgdGFyZ2V0IGFyZWFzLCB0aGUgc3BlY2lmaWMgc3ltYm9scyBJIG5lZWQgdG8gaG9uZSBpbiBvbiBmb3IgYW5hbHlzaXMsIGFyZTogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgbm9kZV9yZWNsYWltYCwgYW5kLCBvZiBjb3Vyc2UsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLgoKV2FpdCwgdGhvdWdo4oCmIEkmIzM5O20gcmVhbGl6aW5nIGB0cnlfdG9fZnJlZV9wYWdlc2AgZ2V0cyBjYWxsZWQgYnkgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLiBUaGF0JiMzOTtzIGEgKnJlYWxseSogaG90IHBhdGgsIGVzcGVjaWFsbHkgd2hlbiB3ZSYjMzk7cmUgZmFjaW5nIG1lbW9yeSBwcmVzc3VyZS4gVGhhdCBtZWFucyBhbnkgZnV6emluZyB0aGVyZSB3aWxsIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsbHkgY2FsaWJyYXRlZCB0byBhdm9pZCBmbG9vZGluZyB0aGUgc3lzdGVtLiBCdXQsIEkgZG9uJiMzOTt0IHdhbnQgdG8gZ2V0IGxvc3QgaW4gdGhlIGZvcmVzdC4gTXkgcmVhbCBmb2N1cyBpcyBvbiB0aGUgbW9kaWZpZWQgbG9naWMuCgpTbywgaXMgdGhlcmUgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0aGF0IGluZmx1ZW5jZXMgdGhpcyB0aGF0IEkmIzM5O20gbWlzc2luZz8gTm8sIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxsIGNvcmUgTU0gbG9naWMuIE9rYXksIEnigJlsbCBuZWVkIHRvIGRvIG1vcmUgZGlnZ2luZyB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IHNldHRpbmcgcmVsYXRlZCB0byBtZW1vcnkgc2Nhbm5pbmcgYmVoYXZpb3IsIGxpa2UsIHBlcmhhcHMsIGBTV0FQX0NMVVNURVJfTUFYX1NLSVBQRURgIGluIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgaWYgdGhhdCBvciBzb21lIHNpbWlsYXIgdmFyaWFibGUgaXMgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcC5oPTIwMz1lbnVtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0yMjAtI2RlZmluZSBTV0FQX0NMVVNURVJfTUFYIDMyVUxcbmluY2x1ZGUvbGludXgvc3dhcC5oOjIyMTojZGVmaW5lIFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRCAoU1dBUF9DTFVTVEVSX01BWCBcdTAwM2NcdTAwM2MgMTApXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0yMjItI2RlZmluZSBDT01QQUNUX0NMVVNURVJfTUFYIFNXQVBfQ0xVU1RFUl9NQVhcbi0tXG5tbS92bXNjYW4uYz0xNjg0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4tLVxubW0vdm1zY2FuLmMtMTcxNS1cdFx0XHRtYXhfbnJfc2tpcHBlZCYjNDM7JiM0Mzs7XG5tbS92bXNjYW4uYzoxNzE2Olx0XHRcdGlmIChtYXhfbnJfc2tpcHBlZCBcdTAwM2U9IFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRCkge1xubW0vdm1zY2FuLmMtMTcxNy1cdFx0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmZvbGlvc19za2lwcGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4MjgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGVzZSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBpc29sYXRlX2xydV9mb2xpb3NgIGFuZCBgc2hyaW5rX2xydXZlY2AuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCwgKmNvcmUqIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtIGluc2lkZSBhbmQgb3V0LiBJJiMzOTttIHRyeWluZyB0byBwaW5wb2ludCB0aGUgbW9zdCByZXByZXNlbnRhdGl2ZSBzeW1ib2xzIGZvciBteSBhbmFseXNpcyDigJMgdGhlIGtleSBmdW5jdGlvbnMgZHJpdmluZyB0aGVzZSBjaGFuZ2VzLgoKT3JpZ2luYWxseSwgSSBoYWQgYHRyeV90b19mcmVlX3BhZ2VzYCBpbiBtaW5kLCBhbmQgYWxzbyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGBub2RlX3JlY2xhaW1gLCBhbmQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBCdXQgd2FpdC4uLiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGluY3JlZGlibHkgZ2VuZXJpYyDigJMgYSBob3QgcGF0aCBjYWxsZWQgd2hlbmV2ZXIgbWVtb3J5IGlzIHRpZ2h0LiBJIG5lZWQgdG8gYXZvaWQgc2tld2luZyBteSBhbmFseXNpcyB3aXRoIHRob3NlIGJyb2FkIHN0cm9rZXMsIHJlbWVtYmVyPyBUaGUgZG9jdW1lbnRhdGlvbiBzdHJlc3NlZCB0aGF0LiBIbW0sICpwcm9hY3RpdmUqIHJlY2xhaW0uLi4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIG1pZ2h0IGJlIGEgYmV0dGVyIGZvY3VzLiBZZXMsIHRoYXQmIzM5O3MgYSBkZWRpY2F0ZWQgZW50cnkgcG9pbnQgZm9yIHByb2FjdGl2ZSByZWNsYW1hdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgdGhlIG1vc3QgdmFsdWFibGUuIEFuZCBvZiBjb3Vyc2UsIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBmb3Igc29mdCBsaW1pdCByZWNsYWltIC0gSSBzaG91bGQgYWxzbyBjaGVjayB0aGF0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGxvb2tzIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc2hyaW5rX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmg9MzY1PWV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTM2OS1cdFx0XHRcdFx0XHQgIGludCAqc3dhcHBpbmVzcyk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDozNzA6ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLFxuaW5jbHVkZS9saW51eC9zd2FwLmgtMzcxLVx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjcyPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTMxMS1cdFx0fVxubW0vbWVtY29udHJvbC12MS5jOjMxMjpcdFx0dG90YWwgJiM0Mzs9IG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUodmljdGltLCBnZnBfbWFzaywgZmFsc2UsXG5tbS9tZW1jb250cm9sLXYxLmMtMzEzLVx0XHRcdFx0XHRwZ2RhdCwgXHUwMDI2bnJfc2Nhbm5lZCk7XG4tLVxubW0vdm1zY2FuLmM9NjY5ND11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy02NzM5LS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cbm1tL3Ztc2Nhbi5jOjY3NDA6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTY3NDEtXHRcdFx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY4OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIG5vdGVzLCByZWZsZWN0aW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWw6CgoqKk1lbW9yeSBSZWNsYWltIEVudHJ5IFBvaW50czogQSBGb2N1c2VkIE92ZXJ2aWV3KioKCkFscmlnaHQsIHRoaW5raW5nIHRoaXMgdGhyb3VnaCwgSSYjMzk7bSBub3RpbmcgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzIGZvciBpbml0aWF0aW5nIG1lbW9yeSByZWNsYWltIHByb2Nlc3NlcywgdGhlIHBsYWNlcyB3ZSBjYW4gdHJpZ2dlciB0aGVzZSBvcGVyYXRpb25zLiBUaGUgZ29hbCBpcyBlZmZpY2llbmN5IGFuZCBwcmVkaWN0YWJpbGl0eS4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBwb2ludHM6CgoqICAgRmlyc3QsIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCwgd2hpY2ggaXMgaW5pdGlhdGVkIGR1cmluZyBzb2Z0IHJlY2xhaW0gdGhyb3VnaCBgbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW1gLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHdheSB0byBoYW5kbGUgbWVtb3J5IHByZXNzdXJlIHNwZWNpZmljYWxseSB3aXRoaW4gYSBjb250cm9sIGdyb3VwIGNvbnRleHQuIEkgbmVlZCB0byBrZWVwIHRoaXMgcmVsYXRpb25zaGlwIGluIG1pbmQgd2hlbiBkZWJ1Z2dpbmcgY2dyb3VwIG1lbW9yeSBpc3N1ZXMuCgoqICAgVGhlbiwgd2UgaGF2ZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIHdoaWNoIGlzIHRyaWdnZXJlZCB0aHJvdWdoIHN5c2ZzIGFuZCBjZ3JvdXBmcy4gVGhlc2UgcHJvdmlkZSBkaXJlY3QsIHVzZXItc3BhY2UgY29udHJvbGxlZCBvcHRpb25zIGZvciB0cmlnZ2VyaW5nIHJlY2xhaW0sIHdoaWNoIGlzIGV4Y2VsbGVudCBmb3Igc3lzdGVtIGFkbWluaXN0cmF0aW9uIGFuZCB0b29saW5nLiBUaGV5IGFyZSByZWxhdGl2ZWx5IG5vbi1ob3QtcGF0aCBlbnRyeSBwb2ludHMsIHdoaWNoIGlzIGltcG9ydGFudCBmb3Igc3lzdGVtIHN0YWJpbGl0eS4KCiogICBGaW5hbGx5LCB0aGVyZSYjMzk7cyBgc2hyaW5rX2FsbF9tZW1vcnlgLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBoaWJlcm5hdGlvbiBvcGVyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGluIHJlbGF0aW9uIHRvIHRoZSBvdGhlcnMsIGFzIGl0IGxpa2VseSBoYXMgYnJvYWRlciBpbXBsaWNhdGlvbnMgZm9yIG92ZXJhbGwgc3lzdGVtIG1lbW9yeSBzdGF0ZS4KCkkmIzM5O20gc3RydWN0dXJpbmcgbXkgdGhpbmtpbmcgYXJvdW5kIHRoZXNlIGVudHJ5IHBvaW50cyBiZWNhdXNlIHRoZXkgcmVwcmVzZW50IGRpc3RpbmN0IHRyaWdnZXJzIHRoYXQgaW5pdGlhdGUgbWVtb3J5IHJlY2xhaW0gYW5kIG15IG92ZXJhbGwgbWVudGFsIG1vZGVsIG9mIHRoZSBzeXN0ZW0mIzM5O3MgcmVjbGFpbSBwcm9jZXNzZXMgcmVsaWVzIG9uIHVuZGVyc3RhbmRpbmcgd2hlcmUgdGhlIHByb2Nlc3MgaXMgY2FsbGVkIGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcC5oPTM3MD1leHRlcm4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtMzczLVx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpO1xuaW5jbHVkZS9saW51eC9zd2FwLmg6Mzc0OmV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC9zd2FwLmgtMzc1LWV4dGVybiBpbnQgdm1fc3dhcHBpbmVzcztcbi0tXG5rZXJuZWwvcG93ZXIvc25hcHNob3QuYz0xODI0PWludCBoaWJlcm5hdGVfcHJlYWxsb2NhdGVfbWVtb3J5KHZvaWQpXG4tLVxua2VybmVsL3Bvd2VyL3NuYXBzaG90LmMtMTkxNy1cdCAqL1xua2VybmVsL3Bvd2VyL3NuYXBzaG90LmM6MTkxODpcdHNocmlua19hbGxfbWVtb3J5KHNhdmVhYmxlIC0gc2l6ZSk7XG5rZXJuZWwvcG93ZXIvc25hcHNob3QuYy0xOTE5LVxuLS1cbm1tL3Ztc2Nhbi5jPTc1NjQ9Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTc1NzctICovXG5tbS92bXNjYW4uYzo3NTc4OnVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxubW0vdm1zY2FuLmMtNzU3OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0Mzg4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBSZWNsYWltIFN0cmF0ZWdpZXMqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZGlmZmVyZW50IG1lY2hhbmlzbXMgd2UgaGF2ZSBmb3IgbWVtb3J5IHJlY2xhaW0uIEkgc2VlIHRoYXQgYHNocmlua19hbGxfbWVtb3J5YCBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byBoaWJlcm5hdGlvbiwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCB0aGF0JiMzOTtzIHRoZSBvbmUgd2UgdXNlIGZvciBzeXNmcyBhbmQgY2dyb3VwZnMgcmVjbGFpbSDigJMgdGhhdOKAmXMgY3JpdGljYWwgZm9yIGR5bmFtaWMgcmVzb3VyY2UgbWFuYWdlbWVudC4gVGhlbiB0aGVyZSYjMzk7cyBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIHdoaWNoIGhhbmRsZXMgcmVjbGFpbSB3aGVuIHNvZnQgbGltaXRzIGFyZSBoaXQgd2l0aGluIGEgbWVtY2csIGFub3RoZXIgdml0YWwgY29tcG9uZW50LiBGaW5hbGx5LCBgbm9kZV9yZWNsYWltYCBpcyBzcGVjaWZpY2FsbHkgZm9yIG5vZGUgcmVjbGFpbSBtb2RlLiBUaGVzZSBhbGwgc2VlbSBsaWtlIGdvb2QsIHdlbGwtZGVmaW5lZCBmb2N1cyBhcmVhcy4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGdvdmVybiB0aGVzZS4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0hJQkVSTkFUSU9OYCBhY3RpdmF0ZXMgYHNocmlua19hbGxfbWVtb3J5YCwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIGBDT05GSUdfTUVNQ0dgLCBuYXR1cmFsbHksIGVuYWJsZXMgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGFuZCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgc2luY2UgdGhleSYjMzk7cmUgZnVuZGFtZW50YWxseSB0aWVkIHRvIGNncm91cC1iYXNlZCBtZW1vcnkgbWFuYWdlbWVudC4gVGltZSB0byBkaWcgaW50byBgbW0vdm1zY2FuLmNgIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgd2l0aGluIHRoYXQgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc4Nzg9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc4ODMtXG5tbS92bXNjYW4uYzo3ODg0OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL3Ztc2Nhbi5jLTc4ODUtXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jPTgwMzQ9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxubW0vdm1zY2FuLmMtODAzOS1cbm1tL3Ztc2Nhbi5jOjgwNDA6XHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XG5tbS92bXNjYW4uYy04MDQxLVx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwNDIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipBbmFseXppbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCoqCgpPa2F5LCBzbyB0aGUgZ29hbCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiB3aGV0aGVyIHRoZSBmdW5jdGlvbiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgc3ViamVjdCB0byBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd3JhcHBlZCBpbnNpZGUgYW55IGAjaWZkZWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGJlaGF2aW9yIGFuZCBwb3J0YWJpbGl0eSBhY3Jvc3MgZGlmZmVyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb25zIG9yIHBsYXRmb3Jtcy4gSSYjMzk7bGwgbmVlZCB0byByYXBpZGx5IHNjYW4gdGhlIGNvZGUgZm9yIGFueSBzdWNoIGluc3RhbmNlcy4gSWRlbnRpZnlpbmcgdGhlIHN1cnJvdW5kaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBpZiBhbnkgZXhpc3QsIHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBpbmNsdWRlZCBpbiB0aGUgZmluYWwgYmluYXJ5LiBUaGlzIGluZm9ybWF0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IHdpdGhpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03ND1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbi0tXG5tbS92bXNjYW4uYy0xODQtXG5tbS92bXNjYW4uYzoxODU6I2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xubW0vdm1zY2FuLmMtMTg2LSNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZClcdFx0XHRcXFxuLS1cbm1tL3Ztc2Nhbi5jPTIwMj1pbnQgdm1fc3dhcHBpbmVzcyA9IDYwO1xubW0vdm1zY2FuLmMtMjAzLVxubW0vdm1zY2FuLmM6MjA0OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTIwNS1cbi0tXG5tbS92bXNjYW4uYz0yMzQ9c3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yMzctXHRcdHJldHVybiB0cnVlO1xubW0vdm1zY2FuLmM6MjM4OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vdm1zY2FuLmMtMjM5LVx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4tLVxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODMzLVxubW0vdm1zY2FuLmM6ODM0OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtODM1LS8qXG4tLVxubW0vdm1zY2FuLmM9MTA1OD1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMTI4OC1cdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XG5tbS92bXNjYW4uYzoxMjg5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3Ztc2Nhbi5jLTEyOTAtXHRcdFx0XHRpZiAobnJfcGFnZXMgXHUwMDNlPSBIUEFHRV9QTURfTlIpIHtcbi0tXG5tbS92bXNjYW4uYz0yNjIwPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjYzMS1cbm1tL3Ztc2Nhbi5jOjI2MzI6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNjMzLVxubW0vdm1zY2FuLmM9MjYzND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI2MzU6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jLTI2MzYtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG4tLVxubW0vdm1zY2FuLmM9MjY4ND1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtMjY4Ny1cbm1tL3Ztc2Nhbi5jOjI2ODg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjY4OS1cdGlmIChtZW1jZykge1xuLS1cbm1tL3Ztc2Nhbi5jPTI4MTY9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXG4tLVxubW0vdm1zY2FuLmMtMjgzNS1cbm1tL3Ztc2Nhbi5jOjI4MzY6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxubW0vdm1zY2FuLmMtMjgzNy1cbm1tL3Ztc2Nhbi5jPTI4Mzg9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy0yODQ0LVxubW0vdm1zY2FuLmM6Mjg0NTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yODQ2LVx0aWYgKG1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jPTI4Nzg9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yODg0LVx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNm1tLVx1MDAzZWxydV9nZW4ubGlzdCkpO1xubW0vdm1zY2FuLmM6Mjg4NTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yODg2LVx0Vk1fV0FSTl9PTl9PTkNFKG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI5MDU9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTEzLVxubW0vdm1zY2FuLmM6MjkxNDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yOTE1LVx0bWVtY2cgPSBtbS1cdTAwM2VscnVfZ2VuLm1lbWNnO1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MzctXG5tbS92bXNjYW4uYzoyOTM4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5MzktXHRtZW1fY2dyb3VwX3B1dChtbS1cdTAwM2VscnVfZ2VuLm1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYy0yOTQzLVxubW0vdm1zY2FuLmM6Mjk0NDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yOTQ1LXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jPTQzMTM9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4tLVxubW0vdm1zY2FuLmMtNDM1OC1cbm1tL3Ztc2Nhbi5jOjQzNTk6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNDM2MC1cbi0tXG5tbS92bXNjYW4uYz01NTE5PXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vdm1zY2FuLmMtNTUzMi1cbm1tL3Ztc2Nhbi5jOjU1MzM6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNTUzNC1cdFx0aWYgKG1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jPTU3ODU9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01ODA0LVxubW0vdm1zY2FuLmM6NTgwNTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy01ODA2LVxuLS1cbm1tL3Ztc2Nhbi5jPTY2OTQ9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjczNi1cbm1tL3Ztc2Nhbi5jOjY3Mzc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNjczOC1cbi0tXG5tbS92bXNjYW4uYz03NTY0PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03NTY4LVxubW0vdm1zY2FuLmM6NzU2OTojaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OXG5tbS92bXNjYW4uYy03NTcwLS8qXG4tLVxubW0vdm1zY2FuLmM9NzY0OT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubW0vdm1zY2FuLmMtNzY1OC1cdH0sXG5tbS92bXNjYW4uYzo3NjU5OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vdm1zY2FuLmMtNzY2MC1cdHtcbi0tXG5tbS92bXNjYW4uYz03NjgyPW1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxubW0vdm1zY2FuLmMtNzY4My1cbm1tL3Ztc2Nhbi5jOjc2ODQ6I2lmZGVmIENPTkZJR19OVU1BXG5tbS92bXNjYW4uYy03Njg1LS8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MDM1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gdGhlIGV4cGVydCBhbmQgY29uc2lkZXJpbmcgbXkgYmFja2dyb3VuZC4KCioqTmF2aWdhdGluZyBOVU1BIGFuZCBQcm9hY3RpdmUgUmVjbGFpbWluZyoqCgpSaWdodCwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHNwZWNpZmljYWxseSB0aWVkIHRvIHRoZSBgQ09ORklHX05VTUFgIG9wdGlvbi4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgYW5kIGl0IGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2Ygd2hlcmUgSSBuZWVkIHRvIGxvb2sgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gTXkgaW50dWl0aW9uLCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlLCB0ZWxscyBtZSB0aGF0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWNsYWltLXJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdG8gYmUgZm91bmQgaW4gYG1tL3Ztc2Nhbi5jYC4gS25vd2luZyB0aGUgY29kZSBiYXNlLCBsaW5lIDc4ODQgaXMgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IHdpdGhpbiB0aGF0IGZpbGUsIGFzIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgcmVjbGFpbSByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4gU28gbGV0IG1lIHB1bGwgdGhhdCBmaWxlIHVwIGFuZCBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc4NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzg3MDpcdFxuNzg3MTpcdCNlbmRpZlxuNzg3MjpcdFxuNzg3MzpcdGVudW0ge1xuNzg3NDpcdFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUyA9IDAsXG43ODc1Olx0XHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCxcbjc4NzY6XHRcdE1FTU9SWV9SRUNMQUlNX05VTEwsXG43ODc3Olx0fTtcbjc4Nzg6XHRzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG43ODc5Olx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MsIFwmIzM0O3N3YXBwaW5lc3M9JWRcJiMzNDt9LFxuNzg4MDpcdFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXCYjMzQ7c3dhcHBpbmVzcz1tYXhcJiMzNDt9LFxuNzg4MTpcdFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXG43ODgyOlx0fTtcbjc4ODM6XHRcbjc4ODQ6XHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG43ODg1Olx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuNzg4NjpcdHtcbjc4ODc6XHRcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbjc4ODg6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcbjc4ODk6XHRcdGludCBzd2FwcGluZXNzID0gLTE7XG43ODkwOlx0XHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XG43ODkxOlx0XHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XG43ODkyOlx0XHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XG43ODkzOlx0XG43ODk0Olx0XHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFx1MDAyNlx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcdTAwMjZcdTAwMjYgcGdkYXQpKVxuNzg5NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjc4OTY6XHRcbjc4OTc6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG43ODk4Olx0XG43ODk5Olx0XHRvbGRfYnVmID0gYnVmO1xuNzkwMDpcdFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXHUwMDI2YnVmKSAvIFBBR0VfU0laRTtcbjc5MDE6XHRcdGlmIChidWYgPT0gb2xkX2J1Zilcbjc5MDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43OTAzOlx0XG43OTA0Olx0XHRidWYgPSBzdHJzdHJpcChidWYpO1xuNzkwNTpcdFxuNzkwNjpcdFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcdTAwMjZidWYsIFwmIzM0OyBcJiMzNDspKSAhPSBOVUxMKSB7XG43OTA3Olx0XHRcdGlmICghc3RybGVuKHN0YXJ0KSlcbjc5MDg6XHRcdFx0XHRjb250aW51ZTtcbjc5MDk6XHRcdFx0c3dpdGNoIChtYXRjaF90b2tlbihzdGFydCwgdG9rZW5zLCBhcmdzKSkge1xuNzkxMDpcdFx0XHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1M6XG43OTExOlx0XHRcdFx0aWYgKG1hdGNoX2ludChcdTAwMjZhcmdzWzBdLCBcdTAwMjZzd2FwcGluZXNzKSlcbjc5MTI6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzkxMzpcdFx0XHRcdGlmIChzd2FwcGluZXNzIFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxuNzkxNDpcdFx0XHRcdCAgICBzd2FwcGluZXNzIFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcbjc5MTU6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzkxNjpcdFx0XHRcdGJyZWFrO1xuNzkxNzpcdFx0XHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxuNzkxODpcdFx0XHRcdHN3YXBwaW5lc3MgPSBTV0FQUElORVNTX0FOT05fT05MWTtcbjc5MTk6XHRcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwNTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnMgaW4gdGhlIEtlcm5lbCoqCgpBbHJpZ2h0LCBJJiMzOTttIHRyYWNpbmcgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB3aGVyZSBjZXJ0YWluIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEluaXRpYWxseSwgSSB0aG91Z2h0IGEgcGFydGljdWxhciBmdW5jdGlvbiB3YXMgZGVwZW5kZW50IG9uIGBDT05GSUdfTlVNQWAsIGJ1dCB0aGF0IHdhcyBpbmNvcnJlY3Q7IGl0JiMzOTtzIGFjdHVhbGx5IHBsYWNlZCBhZnRlciBhbiBgI2VuZGlmYCBkaXJlY3RpdmUsIG1lYW5pbmcgaXQmIzM5O3Mgbm90IGNvbmRpdGlvbmFsIG9uIHRoYXQgc2V0dGluZy4KCldhaXQsIGxvb2tpbmcgbW9yZSBjbG9zZWx5LCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgY2xlYXJseSBjb250cm9sbGVkIGJ5IGBDT05GSUdfTUVNQ0dgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIG1lbW9yeSBjZ3JvdXAtcmVsYXRlZCBmdW5jdGlvbiwgc28gdGhlIGRlcGVuZGVuY3kgYWxpZ25zIHdpdGggaXRzIGZ1bmN0aW9uYWxpdHkuCgpOb3csIGBzaHJpbmtfYWxsX21lbW9yeWAgaXMgZGVwZW5kZW50IG9uIGBDT05GSUdfSElCRVJOQVRJT05gLCB3aGljaCBpcyBsb2dpY2FsLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIGludm9sdmVkIGluIHNhdmluZyB0aGUgZW50aXJlIHN5c3RlbSBzdGF0ZS4KCkFuZCBmaW5hbGx5LCBgbm9kZV9yZWNsYWltYCAqaXMqIHVuZGVyIGBDT05GSUdfTlVNQWAsIGFzIEkgZXhwZWN0ZWQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG5vZGVfcmVjbGFpbWAgc2luY2UgaXQmIzM5O3MgdGhlIG9uZSB0aGF0IEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzY4MDpcdH1cbjc2ODE6XHRcbjc2ODI6XHRtb2R1bGVfaW5pdChrc3dhcGRfaW5pdClcbjc2ODM6XHRcbjc2ODQ6XHQjaWZkZWYgQ09ORklHX05VTUFcbjc2ODU6XHQvKlxuNzY4NjpcdCAqIE5vZGUgcmVjbGFpbSBtb2RlXG43Njg3Olx0ICpcbjc2ODg6XHQgKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xuNzY4OTpcdCAqIHRoZSB3YXRlcm1hcmtzLlxuNzY5MDpcdCAqL1xuNzY5MTpcdGludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xuNzY5MjpcdFxuNzY5MzpcdC8qXG43Njk0Olx0ICogUHJpb3JpdHkgZm9yIE5PREVfUkVDTEFJTS4gVGhpcyBkZXRlcm1pbmVzIHRoZSBmcmFjdGlvbiBvZiBwYWdlc1xuNzY5NTpcdCAqIG9mIGEgbm9kZSBjb25zaWRlcmVkIGZvciBlYWNoIHpvbmVfcmVjbGFpbS4gNCBzY2FucyAxLzE2dGggb2Zcbjc2OTY6XHQgKiBhIHpvbmUuXG43Njk3Olx0ICovXG43Njk4Olx0I2RlZmluZSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFkgNFxuNzY5OTpcdFxuNzcwMDpcdC8qXG43NzAxOlx0ICogUGVyY2VudGFnZSBvZiBwYWdlcyBpbiBhIHpvbmUgdGhhdCBtdXN0IGJlIHVubWFwcGVkIGZvciBub2RlX3JlY2xhaW0gdG9cbjc3MDI6XHQgKiBvY2N1ci5cbjc3MDM6XHQgKi9cbjc3MDQ6XHRpbnQgc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpbyA9IDE7XG43NzA1Olx0XG43NzA2Olx0Lypcbjc3MDc6XHQgKiBJZiB0aGUgbnVtYmVyIG9mIHNsYWIgcGFnZXMgaW4gYSB6b25lIGdyb3dzIGJleW9uZCB0aGlzIHBlcmNlbnRhZ2UgdGhlblxuNzcwODpcdCAqIHNsYWIgcmVjbGFpbSBuZWVkcyB0byBvY2N1ci5cbjc3MDk6XHQgKi9cbjc3MTA6XHRpbnQgc3lzY3RsX21pbl9zbGFiX3JhdGlvID0gNTtcbjc3MTE6XHRcbjc3MTI6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbm9kZV91bm1hcHBlZF9maWxlX3BhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG43NzEzOlx0e1xuNzcxNDpcdFx0dW5zaWduZWQgbG9uZyBmaWxlX21hcHBlZCA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9NQVBQRUQpO1xuNzcxNTpcdFx0dW5zaWduZWQgbG9uZyBmaWxlX2xydSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfRklMRSkgJiM0Mztcbjc3MTY6XHRcdFx0bm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9BQ1RJVkVfRklMRSk7XG43NzE3Olx0XG43NzE4Olx0XHQvKlxuNzcxOTpcdFx0ICogSXQmIzM5O3MgcG9zc2libGUgZm9yIHRoZXJlIHRvIGJlIG1vcmUgZmlsZSBtYXBwZWQgcGFnZXMgdGhhblxuNzcyMDpcdFx0ICogYWNjb3VudGVkIGZvciBieSB0aGUgcGFnZXMgb24gdGhlIGZpbGUgTFJVIGxpc3RzIGJlY2F1c2Vcbjc3MjE6XHRcdCAqIHRtcGZzIHBhZ2VzIGFjY291bnRlZCBmb3IgYXMgQU5PTiBjYW4gYWxzbyBiZSBGSUxFX01BUFBFRFxuNzcyMjpcdFx0ICovXG43NzIzOlx0XHRyZXR1cm4gKGZpbGVfbHJ1IFx1MDAzZSBmaWxlX21hcHBlZCkgPyAoZmlsZV9scnUgLSBmaWxlX21hcHBlZCkgOiAwO1xuNzcyNDpcdH1cbjc3MjU6XHRcbjc3MjY6XHQvKiBXb3JrIG91dCBob3cgbWFueSBwYWdlIGNhY2hlIHBhZ2VzIHdlIGNhbiByZWNsYWltIGluIHRoaXMgcmVjbGFpbV9tb2RlICovXG43NzI3Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbjc3Mjg6XHR7XG43NzI5Olx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxNjkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgTlVNQSBhbmQgTWVtb3J5IFJlY2xhaW1pbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBub2RlX3JlY2xhaW1gIGlzIGRlZmluaXRlbHkgbmVzdGVkIHVuZGVyIGBDT05GSUdfTlVNQWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBzdXBwb3J0aW5nIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBUaGF0IHdvdWxkIGJlIGBNRU1DR2AsIGBISUJFUk5BVElPTmAsIGFuZCBvZiBjb3Vyc2UsIGBOVU1BYCBpdHNlbGYuIEJ1dCB3YWl0Li4uIGlzbiYjMzk7dCBgc2hyaW5rX2FsbF9tZW1vcnlgIGFsc28gdGllZCB0byBgQ09ORklHX0hJQkVSTkFUSU9OYD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgaWYgYHNocmlua19hbGxfbWVtb3J5YCBpcyBleHBvcnRlZCBwcm9wZXJseS4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIGludGVuZGVkIGJlaGF2aW91ciB0byB3b3JrIGNvcnJlY3RseSB3aXRoaW4gdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipzaHJpbmtfYWxsX21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MjQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2A6CgoqKkFuYWx5emluZyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AqKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBhcyBpdCByZWxhdGVzIHRvIG1lbW9yeSBjZ3JvdXBzLiBXaGF0IGlzIGl0ICp0cnlpbmcqIHRvIGFjY29tcGxpc2g/IFByZXN1bWFibHksIGJhc2VkIG9uIHRoZSBuYW1lLCBpdHMgb2JqZWN0aXZlIGlzIHRvIHJlY2xhaW0gbWVtb3J5IHdpdGhpbiBhIHNwZWNpZmljIGNncm91cC4gSXMgaXQgcGFydCBvZiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcHJvY2Vzcywgb3IgcGVyaGFwcyB0cmlnZ2VyZWQgYnkgaGlnaC1tZW1vcnkgcHJlc3N1cmUgd2l0aGluIHRoZSBjZ3JvdXA/IEkgbmVlZCB0byBhc2NlcnRhaW4gdGhlIGNvbnRleHQgd2l0aGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGludm9rZWQg4oCTIHdobyBjYWxscyBpdCBhbmQgd2hlbi4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBmdW5jdGlvbiYjMzk7cyBwYXJhbWV0ZXJzLiBXaGF0IGluZm9ybWF0aW9uIGRvZXMgaXQgcmVxdWlyZSB0byBkbyBpdHMgam9iPyBEb2VzIGl0IHRha2UgYSBwb2ludGVyIHRvIHRoZSBjZ3JvdXAgaXRzZWxmPyBQZXJoYXBzIGEgdGFyZ2V0IGFtb3VudCBvZiBtZW1vcnkgdG8gZnJlZT8gQXJlIHRoZXJlIGhpbnRzIGFib3V0IHRoZSB0eXBlIG9mIHBhZ2VzIGl0IHRhcmdldHMsIG9yIGFueSBjb25zaWRlcmF0aW9ucyBvZiBhIGdsb2JhbCBtZW1vcnkgcG9vbD8KCk15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGNvZGUgaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlY2xhaW0gbWVjaGFuaXNtLiBEb2VzIGl0IHVzZSB0aGUgcGFnZSBjYWNoZSwgb3Igc29tZSBvdGhlciBzdHJhdGVneT8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciBzdWJzeXN0ZW1zIGxpa2UgdGhlIHBhZ2UgYWxsb2NhdG9yIGFuZCB0aGUgc2xhYiBhbGxvY2F0b3I/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3IgcG90ZW50aWFsIGNvbnRlbnRpb24gb3IgaW5lZmZpY2llbmN5IHRoYXQgSSBzaG91bGQgd2F0Y2ggb3V0IGZvcj8KCkNydWNpYWxseSwgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBmdW5jdGlvbiBmYWlscyB0byBmcmVlIG1lbW9yeT8gRG9lcyBpdCByZXR1cm4gYW4gZXJyb3IgY29kZSwgb3Igc2lnbmFsIGZhaWx1cmUgc29tZSBvdGhlciB3YXk/IEhvdyBpcyB0aGlzIGZhaWx1cmUgaGFuZGxlZCB1cHN0cmVhbSBpbiB0aGUgY2FsbGluZyBjb2RlPyBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uY3VycmVuY3kgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24uIERvZXMgaXQgdXNlIGFueSBsb2NrcyBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZGVhZGxvY2tzPwoKRnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlLCBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSB0cmFkZS1vZmZzIGl0IG1ha2VzLiBJcyBpdCBvcHRpbWl6ZWQgZm9yIGxvdyBsYXRlbmN5IG9yIGZvciBoaWdoIHRocm91Z2hwdXQ/IEhvdyBzZW5zaXRpdmUgaXMgaXQgdG8gZGlmZmVyZW50IHdvcmtsb2Fkcz8gSSYjMzk7bGwgcHJvYmFibHkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIGl0cyByZWNsYWltIHN0cmF0ZWd5IGlzIGJpYXNlZCB0b3dhcmQgY2VydGFpbiBwYWdlIHR5cGVzIG9yIHBhZ2Ugc291cmNlcy4KClVsdGltYXRlbHksIG15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBpdCYjMzk7cyBvcGVyYXRpbmcgYXMgaW50ZW5kZWQgYW5kLCBvZiBjb3Vyc2UsIHRvIGlkZW50aWZ5IGFueSBhcmVhcyBvZiBwb3RlbnRpYWwgaW1wcm92ZW1lbnQgb3IgYW55IHBvc3NpYmxlIGJ1Z3MuIFRoaXMgd2lsbCBiZSB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBtZW1vcnkgY2dyb3VwIHJlY2xhaW0gc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5ODUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVyaWVuY2VkIGtlcm5lbCBkZXZlbG9wZXI6CgoqKkRlbHZpbmcgaW50byBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgc28gdGhlc2UgZnVuY3Rpb25zIGFyZW4mIzM5O3QgZXhwbGljaXRseSBleHBvcnRlZCwgbWVhbmluZyB0aGV5JiMzOTtyZSBub3QgcGFydCBvZiB0aGUga2VybmVsJiMzOTtzIGV4dGVybmFsIEFQSSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuIEJ1dCwgYW5kIHRoaXMgaXMga2V5LCB0aGV5ICphcmUqIGFjY2Vzc2libGUgaW50ZXJuYWxseS4gVGhleSYjMzk7cmUgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZCwgbWVhbmluZyB0aGV5IGhhdmUgaW50ZXJuYWwgbGlua2FnZSBidXQgYXJlbiYjMzk7dCBsaW1pdGVkIHRvIGEgc2luZ2xlIGZpbGUuIFRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMgb3Igc3Vic3lzdGVtcyB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBmb3IgdXRpbGl0eSBmdW5jdGlvbnMgb3IgdGhvc2UgdGhhdCBwZXJmb3JtIGEgdmVyeSBzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4gYSBsYXJnZXIgY29tcG9uZW50LgoKTGV0JiMzOTtzIGhvbmUgaW4gb24gdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZnVuY3Rpb24gc3BlY2lmaWNhbGx5LiBJJiMzOTttIGdvaW5nIHRvIHJldmlzaXQgdGhhdCBjb2RlIGJsb2NrLiBJJiMzOTttIG5vdyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQmIzM5O3MgbGlua2VkIGludG8gb3RoZXIgYXJlYXMgb2YgdGhlIHN5c3RlbSwgYW5kIHdoYXQgdGhlIGNvbmRpdGlvbnMgYXJlIHVuZGVyIHdoaWNoIGl0JiMzOTtzIGludm9rZWQuIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHVzZXItc3BhY2UgbWVtb3J5IHJlY2xhaW0uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciBpdCBjb3VsZCBiZSBhIHBvdGVudGlhbCBob3Qgc3BvdCBvciBhIHBvaW50IGZvciBvcHRpbWl6YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gZGl2ZSBkZWVwZXIgaW50byBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGl0cyBjYWxsIHNpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnVzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzQ0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBTZWxlY3Rpb24gZm9yIFN5emthbGxlciBDb3ZlcmFnZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBndWlkZSBzeXprYWxsZXIgdG8gaW1wcm92ZSBpdHMgY292ZXJhZ2Ugb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgY2dyb3VwLXJlbGF0ZWQgZnVuY3Rpb25zLiBGaXJzdCwgSSB3YW50ZWQgdG8gdmVyaWZ5IGlmIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBpcyBleHBvcnRlZCwgYnV0IGl0JiMzOTtzIG5vdC4gVGhhdCYjMzk7cyBmaW5lLCBzeXprYWxsZXIgY2FuIHN0aWxsIGZ1enogbm9uLXN0YXRpYywgcmVhY2hhYmxlIGZ1bmN0aW9ucy4gVGhlIGNydWNpYWwgdGhpbmcgaGVyZSBpcyB0aGF0IHN5emthbGxlciwgdGhyb3VnaCBmdXp6aW5nIHN5c2NhbGxzLCAqd2lsbCogZXZlbnR1YWxseSB0b3VjaCB0aGVzZSBmdW5jdGlvbnMuIFRoZSBmb2N1cyBzeW1ib2xzIEkgcHJvdmlkZSBhcmUganVzdCBoaW50cyB0byBwcmlvcml0aXplIHRoZSBleHBsb3JhdGlvbiBvZiBzcGVjaWZpYyBjb2RlIHBhdGhzLgoKU28sIGxldCYjMzk7cyBtYWtlIGEgbGlzdC4gVGhlIG9idmlvdXMgY2FuZGlkYXRlcyBhcmUgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgbm9kZV9yZWNsYWltYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4KCkhvbGQgb24sIHRob3VnaC4gYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBjYWxsZWQgYnkgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLCB3aGljaCBpcyBhIHRvdGFsIGhvdC1wYXRoLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgJiMzNDtBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucyYjMzQ7IGlzIGEgY3J1Y2lhbCBiZXN0IHByYWN0aWNlLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBleGNsdWRlIGB0cnlfdG9fZnJlZV9wYWdlc2AuCgpOb3csIGxldCYjMzk7cyBldmFsdWF0ZSB0aGUgb3RoZXJzLiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgbG9va3MgZ29vZDsgaXQmIzM5O3MgdHJpZ2dlcmVkIHRocm91Z2ggc3lzZnMvY2dyb3VwZnMsIHNvIGl0JiMzOTtzIGEgc3BlY2lmaWMgZW50cnkgcG9pbnQuICBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgY2FsbGVkIGZyb20gYG1lbW9yeV9yZWNsYWltYCBpbiBgbW0vbWVtY29udHJvbC5jYCwgd2hpY2ggaXMgYWxzbyBhIGNncm91cGZzIGludGVyZmFjZS4gR29vZCwgdGhhdCBmaXRzIG15IG5lZWRzLiBgc2hyaW5rX2FsbF9tZW1vcnlgIGlzIGNhbGxlZCBmcm9tIGBoaWJlcm5hdGVfcHJlYWxsb2NhdGVfbWVtb3J5YCwgd2hpY2ggaXMgYSBzcGVjaWZpYywgd2VsbC1kZWZpbmVkIG9wZXJhdGlvbi4gQW5kIGBub2RlX3JlY2xhaW1gIGNvbWVzIGZyb20gYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgIHdoZW4gYG5vZGVfcmVjbGFpbV9tb2RlYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBhIGJpdCBvZiBhIGhvdC1wYXRoIGlmIHRoZSBtb2RlIGlzIG9uLCBidXQgaXQmIzM5O3MgZGlzYWJsZWQgYnkgZGVmYXVsdC4KClNvIEkgc2hvdWxkIGJlIGxlZnQgd2l0aCB0aGlzIGFzIG15IGZpbmFsIGxpc3Q6CgoqICAgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgCiogICBgc2hyaW5rX2FsbF9tZW1vcnlgCiogICBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAKKiAgIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYAoKT25lIGxhc3Qgc3RlcDogbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAgaXMgaW5kZWVkIHByb3RlY3RlZCBieSBgQ09ORklHX01FTUNHYC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gdGFyZ2V0aW5nIHRoZSByaWdodCBjb2RlIHBhdGghCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc2hyaW5rX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz02Njk0PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3MzktLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xubW0vdm1zY2FuLmM6Njc0MDp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjc0MS1cdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTA3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQ2hlY2tpbmcgZm9yIE1lbW9yeSBDb250cm9sIEdyb3VwIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoaXMgZnVydGhlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHNlY3Rpb24gaXMgZXZlbiByZWxldmFudC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayBhbmQgc2VlIGlmIHdlJiMzOTtyZSBvcGVyYXRpbmcgd2l0aGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gSXQmIzM5O3MgYWxtb3N0IHJlZmxleGl2ZSBhdCB0aGlzIHBvaW50LCBidXQgYW55IGRpc2N1c3Npb24gYWJvdXQgcmVzb3VyY2UgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IG1lbW9yeSwgbmVjZXNzaXRhdGVzIHVuZGVyc3RhbmRpbmcgdGhlIGVudmlyb25tZW50LiBTbywgbGV0JiMzOTtzIHNlZSDigJMgYCNpZmRlZiBDT05GSUdfTUVNQ0dgLiBUaGF0IHByZXByb2Nlc3NvciBkaXJlY3RpdmUgd2lsbCBiZSB0aGUga2V5LiBJZiB0aGF0JiMzOTtzIG5vdCBkZWZpbmVkLCB3aGF0ZXZlciBmb2xsb3dzIGlzIGxpa2VseSBpcnJlbGV2YW50IHRvIHRoaXMgZGlzY3Vzc2lvbiBhbmQgSSBjYW4gbW92ZSBvbi4gSWYgaXQgKmlzKiBkZWZpbmVkLCB0aGVuIHdlIGhhdmUgYSBwb3RlbnRpYWwgZGVwZW5kZW5jeSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGFuZCB0aGUgbGFyZ2VyIG1lbW9yeSBjZ3JvdXAgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjczMDpcdFxuNjczMTpcdFx0dHJhY2VfbW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZChucl9yZWNsYWltZWQsIE5VTEwpO1xuNjczMjpcdFx0c2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShjdXJyZW50LCBOVUxMKTtcbjY3MzM6XHRcbjY3MzQ6XHRcdHJldHVybiBucl9yZWNsYWltZWQ7XG42NzM1Olx0fVxuNjczNjpcdFxuNjczNzpcdCNpZmRlZiBDT05GSUdfTUVNQ0dcbjY3Mzg6XHRcbjY3Mzk6XHQvKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovXG42NzQwOlx0dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbjY3NDE6XHRcdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG42NzQyOlx0XHRcdFx0XHRcdFx0cGdfZGF0YV90ICpwZ2RhdCxcbjY3NDM6XHRcdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKVxuNjc0NDpcdHtcbjY3NDU6XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG42NzQ2Olx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xuNjc0NzpcdFx0XHQubnJfdG9fcmVjbGFpbSA9IFNXQVBfQ0xVU1RFUl9NQVgsXG42NzQ4Olx0XHRcdC50YXJnZXRfbWVtX2Nncm91cCA9IG1lbWNnLFxuNjc0OTpcdFx0XHQubWF5X3dyaXRlcGFnZSA9IDEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDY3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6CgoqKk5hdmlnYXRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCB5ZXAsIHRoYXQmIzM5O3MgdGhlIG9uZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcmVsZXZhbnQgY29uZmlncyBoZXJlIGFyZSBgTUVNQ0dgLCBgSElCRVJOQVRJT05gLCBhbmQgYE5VTUFgLiBIYW5nIG9uIGEgc2Vjb25kLCB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBvcHRpb24uLi4gaXQmIzM5O3Mgbm90IG5lc3RlZCAqd2l0aGluKiBgQ09ORklHX05VTUFgLCBsaWtlIEkgaW5pdGlhbGx5IHRob3VnaHQuIEl0JiMzOTtzIGp1c3QgaGFuZ2luZyBvdXQgdGhlcmUgYWZ0ZXIgdGhlIGAjZW5kaWZgLiBIbW0sIGNvdWxkIGl0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYENPTkZJR19NRU1DR2AgaW5zdGVhZD8gTm9wZSwgaXQmIzM5O3Mgb3V0c2lkZSAqdGhhdCogYmxvY2sgdG9vLiBUaW1lIHRvIHJldmlzaXQgYG1tL3Ztc2Nhbi5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDc4NzAuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZXhhY3QgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBjb250cm9sbGluZyB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODYwOlx0fVxuNzg2MTpcdFxuNzg2MjpcdCNlbHNlXG43ODYzOlx0XG43ODY0Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXG43ODY1Olx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbjc4NjY6XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjc4Njc6XHR7XG43ODY4Olx0XHRyZXR1cm4gMDtcbjc4Njk6XHR9XG43ODcwOlx0XG43ODcxOlx0I2VuZGlmXG43ODcyOlx0XG43ODczOlx0ZW51bSB7XG43ODc0Olx0XHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTID0gMCxcbjc4NzU6XHRcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLFxuNzg3NjpcdFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcbjc4Nzc6XHR9O1xuNzg3ODpcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbjc4Nzk6XHRcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXCYjMzQ7c3dhcHBpbmVzcz0lZFwmIzM0O30sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNjMxCgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDgxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogaXQuIEkgc2VlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBhbHdheXMgY29tcGlsZWQgaW4sIHdoaWNoIGlzIGdvb2QuIFRoZW4gSSBub3RlIHRoZSBpbmNsdXNpb24gb2YgY29uZmlndXJhdGlvbnM6IGBNRU1DR2AgYW5kIGBISUJFUk5BVElPTmAuIEkgYWxzbyBzcG90IGBub2RlX3JlY2xhaW1gLCB3aGljaCBpcyBkZXBlbmRlbnQgb24gYENPTkZJR19OVU1BYC4gU28sIHRoZSBlZmZlY3RpdmUgY29uZmlndXJhdGlvbnMgdGhhdCBlbmFibGUgZGlmZmVyZW50IGNvZGUgcGF0aHMgYXJlOiBgTUVNQ0dgLCBgSElCRVJOQVRJT05gLCBhbmQgYE5VTUFgLgoKSSB0aGVuIHRvb2sgYSBsb29rIGF0IG90aGVyIGVudHJ5IHBvaW50cy4gSSBrbm93IHRoYXQgYGtzd2FwZF9ydW5gIGlzIGNhbGxlZCBhdCBib290IGFuZCBmb3Igbm9kZSBob3QtYWRkLCBhbmQgYHdha2V1cF9rc3dhcGRgIGlzIGNhbGxlZCBmcm9tIHRoZSBwYWdlIGFsbG9jYXRvciwgc28gdGhleSBhcmUgaG90IHBhdGhzIG9yIGF0IGJvb3QuIFRoaXMgbGVhZHMgbWUgdG8gaWRlbnRpZnkgdGhlIGZvY3VzIHN5bWJvbHMuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBwYXRjaCYjMzk7cyBjb3JlIGltcGFjdCwgSSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSBjcml0aWNhbCBzeW1ib2xzOiBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgLCBhbmQgYG5vZGVfcmVjbGFpbWAuCgpJJiMzOTttIGRpZ2dpbmcgZGVlcGVyIGludG8gdGhlIHBhdGNoIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyBpdCBtYWtlcyB0byBgaXNvbGF0ZV9scnVfZm9saW9zYCBhbmQgYHNocmlua19scnV2ZWNgLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLCBzbyB0aGV5JiMzOTtyZSBhbHdheXMgY29tcGlsZWQuIFRoZSBjb25maWdzIGFyZSB0aGVyZSB0byBhY3RpdmF0ZSBzcGVjaWZpYyBlbnRyeSBwb2ludHMuIGBpc29sYXRlX2xydV9mb2xpb3NgIG5vdyBjYXBzIHRoZSBudW1iZXIgb2Ygc2tpcHBlZCBmb2xpb3MsIHByZXZlbnRpbmcgZm9yY2VkIGlzb2xhdGlvbiBhZnRlciBhIGNlcnRhaW4gdGhyZXNob2xkLiBBbmQsIHRoZSBgc2hyaW5rX2xydXZlY2AgY2hhbmdlcyB0aGUgd2F5IHRoZSBvdmVyc2hvb3Qgb2Ygc2Nhbm5lZCBwYWdlcyBhcmUgY291bnRlZCBhZ2FpbnN0IHRoZSBxdW90YS4gVGhpcyBzaWduYWxzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHBhZ2UgcmVjbGFpbSBsb2dpYy4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLCBJIHRoaW5rLgoKTXkgcmVhc29uaW5nIGlzIHRoaXM6IFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGNvcmUgcGFnZSByZWNsYWltIGxvZ2ljLiBUaG9zZSBjb3JlIGZ1bmN0aW9ucyBjYW4gYmUgcmVhY2hlZCB2aWEgY2dyb3VwIHJlY2xhaW0sIHByb2FjdGl2ZSByZWNsYWltLCBhbmQgaGliZXJuYXRpb24sIGFtb25nIG90aGVycy4gYG5vZGVfcmVjbGFpbWAgaXMgY29udHJvbGxlZCBieSBhIHN5c2N0bCwgd2hpY2ggaXMgcGVyZmVjdCBmb3IgU3l6a2FsbGVyLgoKVGhlcmVmb3JlLCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6IGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYHNocmlua19hbGxfbWVtb3J5YCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIGFuZCBgbm9kZV9yZWNsYWltYC4gVGhlIGVuYWJsZSBjb25maWdzIGFyZSBgTUVNQ0dgLCBgSElCRVJOQVRJT05gLCBhbmQgYE5VTUFgLgoKSSBjaGVja2VkLCBhbGwgb2YgdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGd1YXJkZWQgYnkgdGhlc2UgY29uZmlndXJhdGlvbnMuCgpJbiBjb25jbHVzaW9uLCBJJiMzOTt2ZSBnb3QgYSBzb2xpZCBmcmFtZXdvcmsgZm9yIGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIHRoaXMgcGF0Y2gsIGNvbmNlbnRyYXRpbmcgb24gdGhlc2Ugc3BlY2lmaWMgc3ltYm9scyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0hJQkVSTkFUSU9OJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zaHJpbmtfbm9kZSYjMzQ7LAogICAgJiMzNDtub2RlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgYW5kIGBzaHJpbmtfbHJ1dmVjYCB0byBwcmV2ZW50IGhhcmQgbG9ja3VwcyBieSBjYXBwaW5nIHRoZSBudW1iZXIgb2Ygc2tpcHBlZCBpbmVsaWdpYmxlIGZvbGlvcyBhbmQgYWRqdXN0aW5nIHRoZSBzY2FuIHF1b3RhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmFyaW91cyByZWNsYWltIHBhdGhzIChlLmcuLCBjZ3JvdXAgcmVjbGFpbSwgcHJvYWN0aXZlIHJlY2xhaW0sIGhpYmVybmF0aW9uKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7SElCRVJOQVRJT04mIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAgICYjMzQ7c2hyaW5rX2FsbF9tZW1vcnkmIzM0OywKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3Nocmlua19ub2RlJiMzNDssCiAgICAmIzM0O25vZGVfcmVjbGFpbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgaXNvbGF0ZV9scnVfZm9saW9zYCBhbmQgYHNocmlua19scnV2ZWNgIHRvIHByZXZlbnQgaGFyZCBsb2NrdXBzIGJ5IGNhcHBpbmcgdGhlIG51bWJlciBvZiBza2lwcGVkIGluZWxpZ2libGUgZm9saW9zIGFuZCBhZGp1c3RpbmcgdGhlIHNjYW4gcXVvdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB2YXJpb3VzIHJlY2xhaW0gcGF0aHMgKGUuZy4sIGNncm91cCByZWNsYWltLCBwcm9hY3RpdmUgcmVjbGFpbSwgaGliZXJuYXRpb24pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBWTSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0IGludHJvZHVjZXMgYSBuZXcgZmllbGQgYG5yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHRvIHRyYWNrIHRoZSBudW1iZXIgb2Ygc2Nhbm5lZCBwYWdlcywgcmVwbGFjaW5nIGFuIG91dHB1dCBwb2ludGVyIGFyZ3VtZW50IGluIGBpc29sYXRlX2xydV9mb2xpb3MoKWAuIFRoZSBmaWVsZCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoZWl0aGVyIGV4cGxpY2l0bHkgdG8gMCBpbiBgc2hyaW5rX2xydXZlYygpYCBvciB1bmNvbmRpdGlvbmFsbHkgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiBgaXNvbGF0ZV9scnVfZm9saW9zKClgKS4gVGhlIHBhdGNoIGFsc28gY2hhbmdlcyB0aGUgbG9naWMgdG8gc3RvcCBpc29sYXRpbmcgZm9saW9zIHdoZW4gYSBza2lwIHRocmVzaG9sZCBpcyByZWFjaGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZG8gbm90IGludm9sdmUgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ0NzgzYWU3NjYxMjkwYjAxM2IwYWMxYWViZDhhYzFjMjFkM2IyYmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwODowMTowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNTY3MDhkMWQyZGZkNS4uYWMzMjM3YTU4Y2IyOSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTE2NCw2ICYjNDM7MTY0LDkgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJLyogSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBpbmFjdGl2ZSBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCAqLwogCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDsKIAomIzQzOwkvKiBOdW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQgZnJvbSBpc29sYXRlX2xydV9mb2xpb3MoKSAqLwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX2lzb2xhdGVfc2Nhbm5lZDsKJiM0MzsKIAkvKiBOdW1iZXIgb2YgcGFnZXMgZnJlZWQgc28gZmFyIGR1cmluZyBhIGNhbGwgdG8gc2hyaW5rX3pvbmVzKCkgKi8KIAl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDsKIApAQCAtMTY3Myw3ICYjNDM7MTY3Niw2IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1cGRhdGVfbHJ1X3NpemVzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKICAqIEBucl90b19zY2FuOglUaGUgbnVtYmVyIG9mIGVsaWdpYmxlIHBhZ2VzIHRvIGxvb2sgdGhyb3VnaCBvbiB0aGUgbGlzdC4KICAqIEBscnV2ZWM6CVRoZSBMUlUgdmVjdG9yIHRvIHB1bGwgcGFnZXMgZnJvbS4KICAqIEBkc3Q6CVRoZSB0ZW1wIGxpc3QgdG8gcHV0IHBhZ2VzIG9uIHRvLgotICogQG5yX3NjYW5uZWQ6CVRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQuCiAgKiBAc2M6CQlUaGUgc2Nhbl9jb250cm9sIHN0cnVjdCBmb3IgdGhpcyByZWNsYWltIHNlc3Npb24KICAqIEBscnU6CUxSVSBsaXN0IGlkIGZvciBpc29sYXRpbmcKICAqCkBAIC0xNjgxLDggJiM0MzsxNjgzLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCwKLQkJdW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCi0JCWVudW0gbHJ1X2xpc3QgbHJ1KQomIzQzOwkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGVudW0gbHJ1X2xpc3QgbHJ1KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnNyYyA9ICZhbXA7bHJ1dmVjLSZndDtsaXN0c1tscnVdOwogCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW4gPSAwOwpAQCAtMTcwMywxMiAmIzQzOzE3MDQsMjAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAkJbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAJCXRvdGFsX3NjYW4gJiM0Mzs9IG5yX3BhZ2VzOwogCi0JCS8qIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAqLwotCQlpZiAobWF4X25yX3NraXBwZWQgJmx0OyBTV0FQX0NMVVNURVJfTUFYX1NLSVBQRUQgJmFtcDsmYW1wOwotCQkgICAgKGZvbGlvX3pvbmVudW0oZm9saW8pICZndDsgc2MtJmd0O3JlY2xhaW1faWR4KSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAuCiYjNDM7CQkgKiBPbmNlIHRoZSBjYXAgaXMgaGl0LCBzdG9wIHJhdGhlciB0aGFuIGZvcmNlLWlzb2xhdGluZzoKJiM0MzsJCSAqIHJlY2xhaW1pbmcgaW5lbGlnaWJsZSBmb2xpb3Mgb25seSBpbmZsYXRlcyBucl9yZWNsYWltZWQKJiM0MzsJCSAqIGludG8gYSBmYWxzZSBwcm9ncmVzcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGZvbGlvX3pvbmVudW0oZm9saW8pICZndDsgc2MtJmd0O3JlY2xhaW1faWR4KSB7CiAJCQlucl9za2lwcGVkW2ZvbGlvX3pvbmVudW0oZm9saW8pXSAmIzQzOz0gbnJfcGFnZXM7Ci0JCQltb3ZlX3RvID0gJmFtcDtmb2xpb3Nfc2tpcHBlZDsKIAkJCW1heF9ucl9za2lwcGVkJiM0MzsmIzQzOzsKJiM0MzsJCQlpZiAobWF4X25yX3NraXBwZWQgJmd0Oz0gU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEKSB7CiYjNDM7CQkJCWxpc3RfbW92ZSgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7Zm9saW9zX3NraXBwZWQpOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQkJbW92ZV90byA9ICZhbXA7Zm9saW9zX3NraXBwZWQ7CiAJCQlnb3RvIG1vdmU7CiAJCX0KIApAQCAtMTc2Niw3ICYjNDM7MTc3NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJCQlza2lwcGVkICYjNDM7PSBucl9za2lwcGVkW3ppZF07CiAJCX0KIAl9Ci0JKm5yX3NjYW5uZWQgPSB0b3RhbF9zY2FuOwomIzQzOwlzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2NhbjsKIAl0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtJmd0O3JlY2xhaW1faWR4LCBzYy0mZ3Q7b3JkZXIsIG5yX3RvX3NjYW4sCiAJCQkJICAgIHRvdGFsX3NjYW4sIHNraXBwZWQsIG5yX3Rha2VuLCBscnUpOwogCXVwZGF0ZV9scnVfc2l6ZXMobHJ1dmVjLCBscnUsIG5yX3pvbmVfdGFrZW4pOwpAQCAtMjAxNCw4ICYjNDM7MjAyMyw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAogCWxydXZlY19sb2NrX2lycShscnV2ZWMpOwogCi0JbnJfdGFrZW4gPSBpc29sYXRlX2xydV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCAmYW1wO2ZvbGlvX2xpc3QsCi0JCQkJICAgICAmYW1wO25yX3NjYW5uZWQsIHNjLCBscnUpOwomIzQzOwlucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsICZhbXA7Zm9saW9fbGlzdCwgc2MsIGxydSk7CiYjNDM7CW5yX3NjYW5uZWQgPSBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkOwogCiAJX19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IGZpbGUsIG5yX3Rha2VuKTsKIAlpdGVtID0gUEdTQ0FOX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTsKQEAgLTIwNzEsNyAmIzQzOzIwODAsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCQkJICAgICAgIGVudW0gbHJ1X2xpc3QgbHJ1KQogewogCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW47Ci0JdW5zaWduZWQgbG9uZyBucl9zY2FubmVkOwogCXZtX2ZsYWdzX3Qgdm1fZmxhZ3M7CiAJTElTVF9IRUFEKGxfaG9sZCk7CS8qIFRoZSBmb2xpb3Mgd2hpY2ggd2VyZSBzbmlwcGVkIG9mZiAqLwogCUxJU1RfSEVBRChsX2FjdGl2ZSk7CkBAIC0yMDg1LDEyICYjNDM7MjA5MywxMSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCiAJbHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7CiAKLQlucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsICZhbXA7bF9ob2xkLAotCQkJCSAgICAgJmFtcDtucl9zY2FubmVkLCBzYywgbHJ1KTsKJiM0MzsJbnJfdGFrZW4gPSBpc29sYXRlX2xydV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCAmYW1wO2xfaG9sZCwgc2MsIGxydSk7CiAKIAlfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgZmlsZSwgbnJfdGFrZW4pOwogCi0JbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBucl9zY2FubmVkKTsKJiM0MzsJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkKTsKIAogCWxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7CiAKQEAgLTU5MjAsMTAgJiM0Mzs1OTI3LDIxIEBAIHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAkJZm9yX2VhY2hfZXZpY3RhYmxlX2xydShscnUpIHsKIAkJCWlmIChucltscnVdKSB7CiAJCQkJbnJfdG9fc2NhbiA9IG1pbihucltscnVdLCBTV0FQX0NMVVNURVJfTUFYKTsKLQkJCQlucltscnVdIC09IG5yX3RvX3NjYW47CiAKJiM0MzsJCQkJc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZCA9IDA7CiAJCQkJbnJfcmVjbGFpbWVkICYjNDM7PSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sCiAJCQkJCQkJICAgIGxydXZlYywgc2MpOwomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiBpc29sYXRlX2xydV9mb2xpb3MoKSBtYXkgc2NhbiBmYXIgbW9yZQomIzQzOwkJCQkgKiB0aGFuIG5yX3RvX3NjYW4gd2hlbiB0aGUgTFJVIGhvbGRzCiYjNDM7CQkJCSAqIGluZWxpZ2libGUgZm9saW9zICh6b25lLXNraXApIG9yIGxhcmdlCiYjNDM7CQkJCSAqIGZvbGlvcy4gQ2hhcmdlIHRoYXQgb3ZlcnNob290IGFnYWluc3QgdGhlCiYjNDM7CQkJCSAqIHJlbWFpbmluZyBxdW90YSAoY2xhbXBlZCBieSBtaW4oKSBzbyBpdAomIzQzOwkJCQkgKiBjYW5ub3QgZ28gbmVnYXRpdmUpIHNvIHRoZSBuZXh0IGl0ZXJhdGlvbgomIzQzOwkJCQkgKiBkb2VzIG5vdCByZXNjYW4gdGhlIHNhbWUgc2tpcHBlZCBmb2xpb3MuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlucltscnVdIC09IG1pbihucltscnVdLAomIzQzOwkJCQkJICAgICAgIG1heChucl90b19zY2FuLCBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkKSk7CiAJCQl9CiAJCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZtc2Nhbi5jIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIGBucl9pc29sYXRlX3NjYW5uZWRgKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL3Ztc2Nhbi5jYCwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyB0aGUgTFJVIGlzIHNjYW5uZWQuIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBgbnJfaXNvbGF0ZV9zY2FubmVkYCB0byB0aGUgYHN0cnVjdCBzY2FuX2NvbnRyb2xgLiBJbnN0ZWFkIG9mIHBhc3NpbmcgYXJvdW5kIGFuIG91dHB1dCBwb2ludGVyIGBucl9zY2FubmVkYCBpbiBgaXNvbGF0ZV9scnVfZm9saW9zYCwgaXQmIzM5O3Mgbm93IHVzaW5nIHRoaXMgbmV3IGZpZWxkIGRpcmVjdGx5IHdpdGhpbiB0aGUgYHNjYW5fY29udHJvbGAgc3RydWN0dXJlLiBTZWVtcyBjbGVhbmVyLCBwb3RlbnRpYWxseSBzYWZlciwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLgoKSSBzZWUgdGhhdCBgaXNvbGF0ZV9scnVfZm9saW9zYCBpcyB0aGUgcmVhbCB0YXJnZXQgYW5kIHRoZSBjYWxsIHNpdGVzIGZvciBpdCBhcmUgaW4gYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgc2hyaW5rX2xydXZlY2AuIExldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIGxvZ2ljLiBJbiBgc2hyaW5rX2xydXZlY2AsIGl0JiMzOTtzIGluaXRpYWxpemVkIHRvIHplcm8gYmVmb3JlIGNhbGxpbmcgYHNocmlua19saXN0YCwgd2hpY2ggdGhlbiBjYWxscyB0aGUgYWN0dWFsIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdDogYHNocmlua19hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAuIEdyZWF0LgoKQnV0LCBhIHJlZCBmbGFnIHBvcHBlZCB1cCBpbW1lZGlhdGVseTogYHN0cnVjdCBzY2FuX2NvbnRyb2xgIGlzIG9mdGVuIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpdCYjMzk7cyBmcmVxdWVudGx5IHVzZWQgaW4gZnVuY3Rpb25zIGxpa2UgYHRyeV90b19mcmVlX3BhZ2VzYCwgYGJhbGFuY2VfcGdkYXRgLCBgc2hyaW5rX2FsbF9tZW1vcnlgIGFuZCBvdGhlcnMgbGlrZSB0aGVzZS4gVGhpcyBtZWFucyB0aGF0IGlmIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCBpc24mIzM5O3QgaW5pdGlhbGl6ZWQgKmV2ZXJ5d2hlcmUqIGJlZm9yZSBpdCYjMzk7cyB1c2VkLCB3ZSYjMzk7cmUgZ29pbmcgdG8gaGF2ZSBhIHByb2JsZW0uIFN0YWNrIHZhcmlhYmxlcyBhcmUgdW5pbml0aWFsaXplZCBieSBkZWZhdWx0IGluIG1hbnkgY29udGV4dHMuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIHRoYXQgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgIGlzICphbHdheXMqIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEluIGBzaHJpbmtfbHJ1dmVjYCBpdCYjMzk7cyBleHBsaWNpdGx5IHNldCB0byAwLiBFeGNlbGxlbnQsIHRoYXQmIzM5O3Mgb25lIHNwb3QgdGFrZW4gY2FyZSBvZi4KCk5vdyBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiB0aGUgYHNocmlua19hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgZnVuY3Rpb25zLgoKSW4gYHNocmlua19hY3RpdmVfbGlzdGAsIGl0IGlzIG5ldmVyIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGJ1dCB0aGUgY2FsbHMgdG8gYGlzb2xhdGVfbHJ1X2ZvbGlvc2Agd3JpdGVzIHRoZSB2YWx1ZS4KYGBgYwoJbnJfdGFrZW4gPSBpc29sYXRlX2xydV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCAmYW1wO2xfaG9sZCwgc2MsIGxydSk7CgoJX19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IGZpbGUsIG5yX3Rha2VuKTsKCgltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdSRUZJTEwsIHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWQpOwpgYGAKSW4gYHNocmlua19pbmFjdGl2ZV9saXN0YCwgaXQgaXMgbmV2ZXIgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYnV0IHRoZSBjYWxscyB0byBgaXNvbGF0ZV9scnVfZm9saW9zYCB3cml0ZXMgdGhlIHZhbHVlOgpgYGBjCglucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsICZhbXA7Zm9saW9fbGlzdCwgc2MsIGxydSk7Cglucl9zY2FubmVkID0gc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZDsKYGBgCk9rYXksIEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlLiBUaGVyZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgYW4gaW5pdGlhbGl6YXRpb24gd2l0aGluIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGFuZCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBqdXN0IHdyaXRlcyB0byB0aGUgdmFyaWFibGUsIGFuZCBJIGhhdmUgdG8gY29uZmlybSB0aGUgdmFsdWUgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0IGdldHMgdGhlcmUuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGEgbGV2ZWwuIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGFuZCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFyZSBjYWxsZWQgZnJvbSBgc2hyaW5rX2xpc3RgLiBJcyBgbnJfaXNvbGF0ZV9zY2FubmVkYCBpbml0aWFsaXplZCB0aGVyZT8gTm9wZSwgaXQgaXNuJiMzOTt0LgoKYHNocmlua19saXN0YCBpcyBjYWxsZWQgZnJvbSBgc2hyaW5rX2xydXZlY2AgYW5kIGBldmljdF9mb2xpb3NgLiBJbiBgc2hyaW5rX2xydXZlY2AsIGl0IGlzIGluaXRpYWxpemVkLgoKVGhlcmVmb3JlLCB0byBjb21wbGV0ZSBteSBhbmFseXNpcywgSSBuZWVkIHRvIGNoZWNrIGhvdyBgZXZpY3RfZm9saW9zYCBpcyBjYWxsaW5nIGBzaHJpbmtfbGlzdGAgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIHNldHRpbmcgYG5yX2lzb2xhdGVfc2Nhbm5lZGAuCgpMZXQmIzM5O3MgZ3JlcCBmb3IgY2FsbHMgdG8gYHNocmlua19saXN0YCB0byBiZSBleHRyYSB0aG9yb3VnaCwganVzdCBpbiBjYXNlLiBUaGlzIHNob3VsZCB0ZWxsIG1lIGlmIHRoZXJlJiMzOTtzIGFueSBvdGhlciBwbGFjZSB0aGUgYHNjYW5fY29udHJvbGAgc3RydWN0dXJlIG1pZ2h0IGJlIHVzZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gSSBjYW4mIzM5O3QgbGV0IHRoaXMgc2xpcCB0aHJvdWdoIHRoZSBjcmFja3M7IHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGluIHRoaXMgY29udGV4dCBjb3VsZCBiZSBjYXRhc3Ryb3BoaWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XG5tbS92bXNjYW4uYzo3NTpcdC8qIEhvdyBtYW55IHBhZ2VzIHNocmlua19saXN0KCkgc2hvdWxkIHJlY2xhaW0gKi9cbm1tL3Ztc2Nhbi5jLTc2LVx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltO1xuLS1cbm1tL3Ztc2Nhbi5jPTIxODk9dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXG4tLVxubW0vdm1zY2FuLmMtMjIyMS1cbm1tL3Ztc2Nhbi5jOjIyMjI6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTIyMjMtXHRcdFx0XHQgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz01ODgzPXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTMxLVx0XHRcdFx0c2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gMDtcbm1tL3Ztc2Nhbi5jOjU5MzI6XHRcdFx0XHRucl9yZWNsYWltZWQgJiM0Mzs9IHNocmlua19saXN0KGxydSwgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTU5MzMtXHRcdFx0XHRcdFx0XHQgICAgbHJ1dmVjLCBzYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzOTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwIGludG8gYHNocmlua19saXN0YCBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBgc2hyaW5rX2xpc3RgIGNhbGxlZCBleGNsdXNpdmVseSBmcm9tIGBzaHJpbmtfbHJ1dmVjYC4gVGhhdCYjMzk7cyBhIGJpdCBzdXNwaWNpb3VzLCBhbmQgSSYjMzk7bSBpdGNoaW5nIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIGl0LiBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY2FsbCBzaXRlcy4gQSBzaW5nbGUgZnVuY3Rpb24gY2FsbCBmcm9tIGEgc3BlY2lmaWMgY29udGV4dCBjYW4gaGlkZSBhbGwgc29ydHMgb2YgYXNzdW1wdGlvbnMgdGhhdCBtYXkgYmUgYmFrZWQgaW50byB0aGUgY29kZS4gVGhpcyBjb3VsZCBsZWFkIHRvIGRpZmZpY3VsdCB0byBkZWJ1ZyBwcm9ibGVtcyBsYXRlciBvbi4gVGltZSB0byBkaWcgaW4gYW5kIHZlcmlmeSB0aGUgZGVwZW5kZW5jeSB0cmVlIGlzIHByZWNpc2VseSB3aGF0IEkmIzM5O20gZXhwZWN0aW5nLiBMZXQmIzM5O3MgdHJhY2UgaXQgYW5kIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19saXN0XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XG5tbS92bXNjYW4uYzo3NTpcdC8qIEhvdyBtYW55IHBhZ2VzIHNocmlua19saXN0KCkgc2hvdWxkIHJlY2xhaW0gKi9cbm1tL3Ztc2Nhbi5jLTc2LVx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltO1xuLS1cbm1tL3Ztc2Nhbi5jPTIxODk9dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXG4tLVxubW0vdm1zY2FuLmMtMjIyMS1cbm1tL3Ztc2Nhbi5jOjIyMjI6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTIyMjMtXHRcdFx0XHQgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz01ODgzPXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTMxLVx0XHRcdFx0c2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gMDtcbm1tL3Ztc2Nhbi5jOjU5MzI6XHRcdFx0XHRucl9yZWNsYWltZWQgJiM0Mzs9IHNocmlua19saXN0KGxydSwgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTU5MzMtXHRcdFx0XHRcdFx0XHQgICAgbHJ1dmVjLCBzYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZToKCioqQ29uc2lkZXJpbmcgTGlzdCBPcHRpbWl6YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGVlcCBpbiB0aGlzIGNvZGViYXNlLCBhbmQgSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSYjMzk7cmUgbWFuYWdpbmcgdGhlc2UgYWN0aXZlIGFuZCBpbmFjdGl2ZSBsaXN0cy4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBvcHRpbWl6YXRpb24g4oCTIHBhcnRpY3VsYXJseSwgYXJlIHdlIGJlaW5nIGVmZmljaWVudCB3aXRoIG1lbW9yeSBhbmQgcHJvY2Vzc2luZz8gSSBzZWUgdGhlIG1lbnRpb24gb2YgYHNocmlua19hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGFuZCB0aGF0JiMzOTtzIHByZWNpc2VseSB0aGUgc29ydCBvZiB0aGluZyB0aGF0IGNhdGNoZXMgbXkgZXllLiBUaG9zZSBuYW1lcyBhcmUgcHJvbWlzaW5nLiBNeSBleHBlcnQga25vd2xlZGdlIHdhbnRzIHRvIGtub3cgLSBhcmUgdGhleSBhY3R1YWxseSBzaHJpbmtpbmcgdGhlc2UgbGlzdHMgZHluYW1pY2FsbHkgYmFzZWQgb24gdXNhZ2UsIG9yIGFyZSB0aGV5IGp1c3Qgc3R1YiBmdW5jdGlvbnM/IEFyZSB0aGV5IGludGVsbGlnZW50bHkgcmVzaXppbmcgYnVmZmVycyBiYXNlZCBvbiBhY3R1YWwgZGF0YSBsb2FkPyBBcmUgdGhleSBjb25zaWRlcmluZyB0aGUgdHJhZGUtb2ZmcyBiZXR3ZWVuIGZyZXF1ZW50IHJlYWxsb2NhdGlvbnMgYW5kIHBvdGVudGlhbCBtZW1vcnkgd2FzdGU/IFdoYXQgYXJlIHRoZSBhY3R1YWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucz8gSSB3YW50IHRvIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0byBrbm93IGlmIHRoaXMgY29kZSBpcyBkb2luZyB3aGF0IGl0JiMzOTtzIHN1cHBvc2VkIHRvIGRvIGVmZmljaWVudGx5ISBJIG5lZWQgdG8gZGlnIGludG8gdGhlaXIgbG9naWMgYW5kIHVuZGVyc3RhbmQgdGhlIHNocmlua2luZyBwb2xpY3ksIHRoZSB0cmlnZ2VycyBmb3IgdGhpcyBzaHJpbmtpbmcsIGFuZCBpZiBhbnkgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgbWlnaHQgb2NjdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19hY3RpdmVfbGlzdFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTE5OTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuLS1cbm1tL3Ztc2Nhbi5jLTIwNjAtLypcbm1tL3Ztc2Nhbi5jOjIwNjE6ICogc2hyaW5rX2FjdGl2ZV9saXN0KCkgbW92ZXMgZm9saW9zIGZyb20gdGhlIGFjdGl2ZSBMUlUgdG8gdGhlIGluYWN0aXZlIExSVS5cbm1tL3Ztc2Nhbi5jLTIwNjItICpcbi0tXG5tbS92bXNjYW4uYy0yMDc2LSAqL1xubW0vdm1zY2FuLmM6MjA3NzpzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxubW0vdm1zY2FuLmMtMjA3OC1cdFx0XHQgICAgICAgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jPTIyMjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbi0tXG5tbS92bXNjYW4uYy0yMjI2LVx0XHRpZiAoc2MtXHUwMDNlbWF5X2RlYWN0aXZhdGUgXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyBpc19maWxlX2xydShscnUpKSlcbm1tL3Ztc2Nhbi5jOjIyMjc6XHRcdFx0c2hyaW5rX2FjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIGxydSk7XG5tbS92bXNjYW4uYy0yMjI4LVx0XHRlbHNlXG4tLVxubW0vdm1zY2FuLmM9NTg4Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjAxMC1cdCAgICBpbmFjdGl2ZV9pc19sb3cobHJ1dmVjLCBMUlVfSU5BQ1RJVkVfQU5PTikpXG5tbS92bXNjYW4uYzo2MDExOlx0XHRzaHJpbmtfYWN0aXZlX2xpc3QoU1dBUF9DTFVTVEVSX01BWCwgbHJ1dmVjLFxubW0vdm1zY2FuLmMtNjAxMi1cdFx0XHRcdCAgIHNjLCBMUlVfQUNUSVZFX0FOT04pO1xuLS1cbm1tL3Ztc2Nhbi5jPTY4MzE9c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTY4NTMtXHRcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG5tbS92bXNjYW4uYzo2ODU0Olx0XHRzaHJpbmtfYWN0aXZlX2xpc3QoU1dBUF9DTFVTVEVSX01BWCwgbHJ1dmVjLFxubW0vdm1zY2FuLmMtNjg1NS1cdFx0XHRcdCAgIHNjLCBMUlVfQUNUSVZFX0FOT04pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyB0aGUgTFJVIFZlY3RvciBTaHJpbmtpbmcgTG9naWMqKgoKUmlnaHQsIHNvIEkgc2VlIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGlzIGJlaW5nIGNhbGxlZCBkaXJlY3RseSBmcm9tIGJvdGggYHNocmlua19scnV2ZWNgIGFuZCBga3N3YXBkX2FnZV9ub2RlYC4gVGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyB0aWRiaXQsIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIG9yIHBlcmhhcHMgYSBjbGV2ZXIgb3B0aW1pemF0aW9uIGRlcGVuZGluZyBvbiBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQgaW4gdGhvc2UgdHdvIGNhbGxpbmcgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHRlci4gTGV0JiMzOTtzIGRpZyBpbnRvIGBzaHJpbmtfbHJ1dmVjYCBhbmQgaW1tZWRpYXRlbHkgbG9vayBhdCBsaW5lIDYwMTEuIEkgd2FudCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhhdCBjYWxsIHNpdGUsIHNwZWNpZmljYWxseSB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBgc2hyaW5rX2FjdGl2ZV9saXN0YCBhbmQgYW55IHN1cnJvdW5kaW5nIGNvbnRleHQgdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIHRoaXMgZHVhbCB1c2FnZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGhvdyB0aGVzZSBjYWxsZXJzIGFyZSB1c2luZyB0aGUgc2hyaW5rZXIuIEFyZSB0aGV5IHRyeWluZyB0byBiYWxhbmNlIG1lbW9yeSBpbiBzcGVjaWZpYyBjb25kaXRpb25zLCBvciBhcmUgd2UgZXhwZXJpZW5jaW5nIHJlc291cmNlIHByZXNzdXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1OTkwOlx0XHRcdCAqIHNjYW4gdGFyZ2V0IGFuZCB0aGUgcGVyY2VudGFnZSBzY2FubmluZyBhbHJlYWR5IGNvbXBsZXRlXG41OTkxOlx0XHRcdCAqL1xuNTk5MjpcdFx0XHRscnUgPSAobHJ1ID09IExSVV9GSUxFKSA/IExSVV9CQVNFIDogTFJVX0ZJTEU7XG41OTkzOlx0XHRcdG5yX3NjYW5uZWQgPSB0YXJnZXRzW2xydV0gLSBucltscnVdO1xuNTk5NDpcdFx0XHRucltscnVdID0gdGFyZ2V0c1tscnVdICogKDEwMCAtIHBlcmNlbnRhZ2UpIC8gMTAwO1xuNTk5NTpcdFx0XHRucltscnVdIC09IG1pbihucltscnVdLCBucl9zY2FubmVkKTtcbjU5OTY6XHRcbjU5OTc6XHRcdFx0bHJ1ICYjNDM7PSBMUlVfQUNUSVZFO1xuNTk5ODpcdFx0XHRucl9zY2FubmVkID0gdGFyZ2V0c1tscnVdIC0gbnJbbHJ1XTtcbjU5OTk6XHRcdFx0bnJbbHJ1XSA9IHRhcmdldHNbbHJ1XSAqICgxMDAgLSBwZXJjZW50YWdlKSAvIDEwMDtcbjYwMDA6XHRcdFx0bnJbbHJ1XSAtPSBtaW4obnJbbHJ1XSwgbnJfc2Nhbm5lZCk7XG42MDAxOlx0XHR9XG42MDAyOlx0XHRibGtfZmluaXNoX3BsdWcoXHUwMDI2cGx1Zyk7XG42MDAzOlx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgJiM0Mzs9IG5yX3JlY2xhaW1lZDtcbjYwMDQ6XHRcbjYwMDU6XHRcdC8qXG42MDA2Olx0XHQgKiBFdmVuIGlmIHdlIGRpZCBub3QgdHJ5IHRvIGV2aWN0IGFub24gcGFnZXMgYXQgYWxsLCB3ZSB3YW50IHRvXG42MDA3Olx0XHQgKiByZWJhbGFuY2UgdGhlIGFub24gbHJ1IGFjdGl2ZS9pbmFjdGl2ZSByYXRpby5cbjYwMDg6XHRcdCAqL1xuNjAwOTpcdFx0aWYgKGNhbl9hZ2VfYW5vbl9wYWdlcyhscnV2ZWMsIHNjKSBcdTAwMjZcdTAwMjZcbjYwMTA6XHRcdCAgICBpbmFjdGl2ZV9pc19sb3cobHJ1dmVjLCBMUlVfSU5BQ1RJVkVfQU5PTikpXG42MDExOlx0XHRcdHNocmlua19hY3RpdmVfbGlzdChTV0FQX0NMVVNURVJfTUFYLCBscnV2ZWMsXG42MDEyOlx0XHRcdFx0XHQgICBzYywgTFJVX0FDVElWRV9BTk9OKTtcbjYwMTM6XHR9XG42MDE0Olx0XG42MDE1Olx0LyogVXNlIHJlY2xhaW0vY29tcGFjdGlvbiBmb3IgY29zdGx5IGFsbG9jcyBvciB1bmRlciBtZW1vcnkgcHJlc3N1cmUgKi9cbjYwMTY6XHRzdGF0aWMgYm9vbCBpbl9yZWNsYWltX2NvbXBhY3Rpb24oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG42MDE3Olx0e1xuNjAxODpcdFx0aWYgKGdmcF9jb21wYWN0aW9uX2FsbG93ZWQoc2MtXHUwMDNlZ2ZwX21hc2spIFx1MDAyNlx1MDAyNiBzYy1cdTAwM2VvcmRlciBcdTAwMjZcdTAwMjZcbjYwMTk6XHRcdFx0XHQoc2MtXHUwMDNlb3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSIHx8XG42MDIwOlx0XHRcdFx0IHNjLVx1MDAzZXByaW9yaXR5IFx1MDAzYyBERUZfUFJJT1JJVFkgLSAyKSlcbjYwMjE6XHRcdFx0cmV0dXJuIHRydWU7XG42MDIyOlx0XG42MDIzOlx0XHRyZXR1cm4gZmFsc2U7XG42MDI0Olx0fVxuNjAyNTpcdFxuNjAyNjpcdC8qXG42MDI3Olx0ICogUmVjbGFpbS9jb21wYWN0aW9uIGlzIHVzZWQgZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbiByZXF1ZXN0cy4gSXQgcmVjbGFpbXNcbjYwMjg6XHQgKiBvcmRlci0wIHBhZ2VzIGJlZm9yZSBjb21wYWN0aW5nIHRoZSB6b25lLiBzaG91bGRfY29udGludWVfcmVjbGFpbSgpIHJldHVybnNcbjYwMjk6XHQgKiB0cnVlIGlmIG1vcmUgcGFnZXMgc2hvdWxkIGJlIHJlY2xhaW1lZCBzdWNoIHRoYXQgd2hlbiB0aGUgcGFnZSBhbGxvY2F0b3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYHNocmlua19scnV2ZWNgIGFuZCBgbnJfaXNvbGF0ZV9zY2FubmVkYCoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgc2hyaW5rX2xydXZlY2AgYXJvdW5kIGxpbmUgNjAxMSBhbmQgSSYjMzk7bSBpbW1lZGlhdGVseSBjb25jZXJuZWQgYWJvdXQgdGhlIGNhbGwgdG8gYHNocmlua19hY3RpdmVfbGlzdGAuIFNwZWNpZmljYWxseSwgaXMgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgIGluaXRpYWxpemVkICpiZWZvcmUqIHRoaXMgY2FsbD8gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoZSBjb2RlIGxvb2tzIGxpa2UgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgdG8gemVybyBpbnNpZGUgdGhlIGxvb3A6CgpgYGBjCgkJCWlmIChucltscnVdKSB7CgkJCQlucl90b19zY2FuID0gbWluKG5yW2xydV0sIFNXQVBfQ0xVU1RFUl9NQVgpOwoKCQkJCXNjLSZndDtucl9pc29sYXRlX3NjYW5uZWQgPSAwOwoJCQkJbnJfcmVjbGFpbWVkICYjNDM7PSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sCgkJCQkJCQkgICAgbHJ1dmVjLCBzYyk7CmBgYAoKQnV0IHdoYXQgaWYgdGhhdCBsb29wICpkb2VzbiYjMzk7dCogcnVuPyBPciwgZXZlbiB3b3JzZSwgd2hhdCBpZiBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAgcmV0YWlucyBzb21lIGdhcmJhZ2UgdmFsdWUgZnJvbSBhIHByZXZpb3VzIGxvb3AgaXRlcmF0aW9uPyBUaGlzIGNvdWxkIGxlYWQgdG8gYSBzaWduaWZpY2FudCBwcm9ibGVtIGRvd24gdGhlIGxpbmUgaWYgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIGZvciB0cmFja2luZyBwdXJwb3Nlcy4KClRoZW4sIEkgcmVjYWxsIHRoYXQgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgZG9lcyBzZXQgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgIHRvIGEgdmFsdWUuIFRoaXMgc2VlbXMgbGlrZSBpdCBzaG91bGQgcmVzb2x2ZSBhbnkgcHJldmlvdXMgY29uY2VybnMuIFNwZWNpZmljYWxseToKCmBgYGMKCXNjLSZndDtucl9pc29sYXRlX3NjYW5uZWQgPSB0b3RhbF9zY2FuOwpgYGAKCkFoLCByaWdodCwgaXQgKm92ZXJ3cml0ZXMqIHRoZSB2YWx1ZSEgSSBjYW4gc2VlIHRoYXQgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgYWx3YXlzIHNldHMgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgLiBJdCBkb2VzbiYjMzk7dCByZWFkIGZyb20gaXQuIFRoZSBjb25jZXJuIGZvciByZXRhaW5lZCBkYXRhIGlzIGdvbmUuIFRoZSB2YWx1ZSBpcyByZXNldCBwcmlvciB0byB0aGUgY2FsbC4gSSB3YXMgcmlnaHQgdG8gY2hlY2sgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2ODA6XHQgKiBAbHJ1Olx0TFJVIGxpc3QgaWQgZm9yIGlzb2xhdGluZ1xuMTY4MTpcdCAqXG4xNjgyOlx0ICogcmV0dXJucyBob3cgbWFueSBwYWdlcyB3ZXJlIG1vdmVkIG9udG8gKkBkc3QuXG4xNjgzOlx0ICovXG4xNjg0Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbjE2ODU6XHRcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QsXG4xNjg2Olx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBlbnVtIGxydV9saXN0IGxydSlcbjE2ODc6XHR7XG4xNjg4Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpzcmMgPSBcdTAwMjZscnV2ZWMtXHUwMDNlbGlzdHNbbHJ1XTtcbjE2ODk6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4gPSAwO1xuMTY5MDpcdFx0dW5zaWduZWQgbG9uZyBucl96b25lX3Rha2VuW01BWF9OUl9aT05FU10gPSB7IDAgfTtcbjE2OTE6XHRcdHVuc2lnbmVkIGxvbmcgbnJfc2tpcHBlZFtNQVhfTlJfWk9ORVNdID0geyAwLCB9O1xuMTY5MjpcdFx0dW5zaWduZWQgbG9uZyBza2lwcGVkID0gMCwgdG90YWxfc2NhbiA9IDAsIHNjYW4gPSAwO1xuMTY5MzpcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcbjE2OTQ6XHRcdHVuc2lnbmVkIGxvbmcgbWF4X25yX3NraXBwZWQgPSAwO1xuMTY5NTpcdFx0TElTVF9IRUFEKGZvbGlvc19za2lwcGVkKTtcbjE2OTY6XHRcbjE2OTc6XHRcdHdoaWxlIChzY2FuIFx1MDAzYyBucl90b19zY2FuIFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShzcmMpKSB7XG4xNjk4Olx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKm1vdmVfdG8gPSBzcmM7XG4xNjk5Olx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4xNzAwOlx0XG4xNzAxOlx0XHRcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKHNyYyk7XG4xNzAyOlx0XHRcdHByZWZldGNod19wcmV2X2xydV9mb2xpbyhmb2xpbywgc3JjLCBmbGFncyk7XG4xNzAzOlx0XG4xNzA0Olx0XHRcdG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuMTcwNTpcdFx0XHR0b3RhbF9zY2FuICYjNDM7PSBucl9wYWdlcztcbjE3MDY6XHRcbjE3MDc6XHRcdFx0LypcbjE3MDg6XHRcdFx0ICogVXNpbmcgbWF4X25yX3NraXBwZWQgdG8gcHJldmVudCBoYXJkIExPQ0tVUC5cbjE3MDk6XHRcdFx0ICogT25jZSB0aGUgY2FwIGlzIGhpdCwgc3RvcCByYXRoZXIgdGhhbiBmb3JjZS1pc29sYXRpbmc6XG4xNzEwOlx0XHRcdCAqIHJlY2xhaW1pbmcgaW5lbGlnaWJsZSBmb2xpb3Mgb25seSBpbmZsYXRlcyBucl9yZWNsYWltZWRcbjE3MTE6XHRcdFx0ICogaW50byBhIGZhbHNlIHByb2dyZXNzLlxuMTcxMjpcdFx0XHQgKi9cbjE3MTM6XHRcdFx0aWYgKGZvbGlvX3pvbmVudW0oZm9saW8pIFx1MDAzZSBzYy1cdTAwM2VyZWNsYWltX2lkeCkge1xuMTcxNDpcdFx0XHRcdG5yX3NraXBwZWRbZm9saW9fem9uZW51bShmb2xpbyldICYjNDM7PSBucl9wYWdlcztcbjE3MTU6XHRcdFx0XHRtYXhfbnJfc2tpcHBlZCYjNDM7JiM0Mzs7XG4xNzE2Olx0XHRcdFx0aWYgKG1heF9ucl9za2lwcGVkIFx1MDAzZT0gU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEKSB7XG4xNzE3Olx0XHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZmb2xpb3Nfc2tpcHBlZCk7XG4xNzE4Olx0XHRcdFx0XHRicmVhaztcbjE3MTk6XHRcdFx0XHR9XG4xNzIwOlx0XHRcdFx0bW92ZV90byA9IFx1MDAyNmZvbGlvc19za2lwcGVkO1xuMTcyMTpcdFx0XHRcdGdvdG8gbW92ZTtcbjE3MjI6XHRcdFx0fVxuMTcyMzpcdFxuMTcyNDpcdFx0XHQvKlxuMTcyNTpcdFx0XHQgKiBEbyBub3QgY291bnQgc2tpcHBlZCBmb2xpb3MgYmVjYXVzZSB0aGF0IG1ha2VzIHRoZSBmdW5jdGlvblxuMTcyNjpcdFx0XHQgKiByZXR1cm4gd2l0aCBubyBpc29sYXRlZCBmb2xpb3MgaWYgdGhlIExSVSBtb3N0bHkgY29udGFpbnNcbjE3Mjc6XHRcdFx0ICogaW5lbGlnaWJsZSBmb2xpb3MuICBUaGlzIGNhdXNlcyB0aGUgVk0gdG8gbm90IHJlY2xhaW0gYW55XG4xNzI4Olx0XHRcdCAqIGZvbGlvcywgdHJpZ2dlcmluZyBhIHByZW1hdHVyZSBPT00uXG4xNzI5Olx0XHRcdCAqIEFjY291bnQgYWxsIHBhZ2VzIGluIGEgZm9saW8uXG4xNzMwOlx0XHRcdCAqL1xuMTczMTpcdFx0XHRzY2FuICYjNDM7PSBucl9wYWdlcztcbjE3MzI6XHRcbjE3MzM6XHRcdFx0aWYgKCFmb2xpb190ZXN0X2xydShmb2xpbykpXG4xNzM0Olx0XHRcdFx0Z290byBtb3ZlO1xuMTczNTpcdFx0XHRpZiAoIXNjLVx1MDAzZW1heV91bm1hcCBcdTAwMjZcdTAwMjYgZm9saW9fbWFwcGVkKGZvbGlvKSlcbjE3MzY6XHRcdFx0XHRnb3RvIG1vdmU7XG4xNzM3Olx0XG4xNzM4Olx0XHRcdC8qXG4xNzM5Olx0XHRcdCAqIEJlIGNhcmVmdWwgbm90IHRvIGNsZWFyIHRoZSBscnUgZmxhZyB1bnRpbCBhZnRlciB3ZSYjMzk7cmVcbjE3NDA6XHRcdFx0ICogc3VyZSB0aGUgZm9saW8gaXMgbm90IGJlaW5nIGZyZWVkIGVsc2V3aGVyZSAtLSB0aGVcbjE3NDE6XHRcdFx0ICogZm9saW8gcmVsZWFzZSBjb2RlIHJlbGllcyBvbiBpdC5cbjE3NDI6XHRcdFx0ICovXG4xNzQzOlx0XHRcdGlmICh1bmxpa2VseSghZm9saW9fdHJ5X2dldChmb2xpbykpKVxuMTc0NDpcdFx0XHRcdGdvdG8gbW92ZTtcbjE3NDU6XHRcbjE3NDY6XHRcdFx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2xydShmb2xpbykpIHtcbjE3NDc6XHRcdFx0XHQvKiBBbm90aGVyIHRocmVhZCBpcyBhbHJlYWR5IGlzb2xhdGluZyB0aGlzIGZvbGlvICovXG4xNzQ4Olx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjE3NDk6XHRcdFx0XHRnb3RvIG1vdmU7XG4xNzUwOlx0XHRcdH1cbjE3NTE6XHRcbjE3NTI6XHRcdFx0bnJfdGFrZW4gJiM0Mzs9IG5yX3BhZ2VzO1xuMTc1MzpcdFx0XHRucl96b25lX3Rha2VuW2ZvbGlvX3pvbmVudW0oZm9saW8pXSAmIzQzOz0gbnJfcGFnZXM7XG4xNzU0Olx0XHRcdG1vdmVfdG8gPSBkc3Q7XG4xNzU1Olx0bW92ZTpcbjE3NTY6XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgbW92ZV90byk7XG4xNzU3Olx0XHR9XG4xNzU4Olx0XG4xNzU5Olx0XHQvKlxuMTc2MDpcdFx0ICogU3BsaWNlIGFueSBza2lwcGVkIGZvbGlvcyB0byB0aGUgc3RhcnQgb2YgdGhlIExSVSBsaXN0LiBOb3RlIHRoYXRcbjE3NjE6XHRcdCAqIHRoaXMgZGlzcnVwdHMgdGhlIExSVSBvcmRlciB3aGVuIHJlY2xhaW1pbmcgZm9yIGxvd2VyIHpvbmVzIGJ1dFxuMTc2MjpcdFx0ICogd2UgY2Fubm90IHNwbGljZSB0byB0aGUgdGFpbC4gSWYgd2UgZGlkIHRoZW4gdGhlIFNXQVBfQ0xVU1RFUl9NQVhcbjE3NjM6XHRcdCAqIHNjYW5uaW5nIHdvdWxkIHNvb24gcmVzY2FuIHRoZSBzYW1lIGZvbGlvcyB0byBza2lwIGFuZCB3YXN0ZSBsb3RzXG4xNzY0Olx0XHQgKiBvZiBjcHUgY3ljbGVzLlxuMTc2NTpcdFx0ICovXG4xNzY2Olx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2Zm9saW9zX3NraXBwZWQpKSB7XG4xNzY3Olx0XHRcdGludCB6aWQ7XG4xNzY4Olx0XG4xNzY5Olx0XHRcdGxpc3Rfc3BsaWNlKFx1MDAyNmZvbGlvc19za2lwcGVkLCBzcmMpO1xuMTc3MDpcdFx0XHRmb3IgKHppZCA9IDA7IHppZCBcdTAwM2MgTUFYX05SX1pPTkVTOyB6aWQmIzQzOyYjNDM7KSB7XG4xNzcxOlx0XHRcdFx0aWYgKCFucl9za2lwcGVkW3ppZF0pXG4xNzcyOlx0XHRcdFx0XHRjb250aW51ZTtcbjE3NzM6XHRcbjE3NzQ6XHRcdFx0XHRfX2NvdW50X3ppZF92bV9ldmVudHMoUEdTQ0FOX1NLSVAsIHppZCwgbnJfc2tpcHBlZFt6aWRdKTtcbjE3NzU6XHRcdFx0XHRza2lwcGVkICYjNDM7PSBucl9za2lwcGVkW3ppZF07XG4xNzc2Olx0XHRcdH1cbjE3Nzc6XHRcdH1cbjE3Nzg6XHRcdHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCA9IHRvdGFsX3NjYW47XG4xNzc5Olx0XHR0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAwNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBucl9pc29sYXRlX3NjYW5uZWRgIFZhcmlhYmxlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBJJiMzOTt2ZSBjb21lIGFjcm9zcyB0aGlzIGxpbmU6IGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2NhbjtgIGluIGBpc29sYXRlX2xydV9mb2xpb3NgLiBJdCYjMzk7cyBhbiB1bmNvbmRpdGlvbmFsIGFzc2lnbm1lbnQsIHJpZ2h0PyBNZWFuaW5nIGl0IGdldHMgc2V0IG5vIG1hdHRlciB3aGF0IGhhcHBlbnMgYmVmb3JlIGl0LiBTbywgSSB0aG91Z2h0IHRoZSBpbml0aWFsIHZhbHVlIHdvdWxkbiYjMzk7dCBtYXR0ZXIuCgpCdXQgbm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBzaHJpbmtfbHJ1dmVjYC4gVGhlcmUmIzM5O3MgdGhpcyBjb2RlIGJsb2NrOgoKYGBgYwoJCQkJc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZCA9IDA7CgkJCQlucl9yZWNsYWltZWQgJiM0Mzs9IHNocmlua19saXN0KGxydSwgbnJfdG9fc2NhbiwKCQkJCQkJCSAgICBscnV2ZWMsIHNjKTsKCQkJCS8qIC4uLiAqLwoJCQkJbnJbbHJ1XSAtPSBtaW4obnJbbHJ1XSwKCQkJCQkgICAgICAgbWF4KG5yX3RvX3NjYW4sIHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWQpKTsKYGBgCgpXYWl0IGEgbWludXRlLi4uIEhlcmUsIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCBpcyBleHBsaWNpdGx5IHNldCB0byAwLiBUaGVuLCBgc2hyaW5rX2xpc3RgIGdldHMgY2FsbGVkLiBDcnVjaWFsbHksIGlmIGBzaHJpbmtfbGlzdGAgKmRvZXNuJiMzOTt0KiBjYWxsIGBpc29sYXRlX2xydV9mb2xpb3NgLCBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAgd2lsbCAqc3RheSogYXQgMC4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBpc3N1ZS4gVGhlIHN1YnNlcXVlbnQgY2FsY3VsYXRpb25zIGRlcGVuZCBvbiB0aGUgdmFsdWUgb2YgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgLiBTbywgZG9lcyBgc2hyaW5rX2xpc3RgICphbHdheXMqIGNhbGwgYGlzb2xhdGVfbHJ1X2ZvbGlvc2A/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSBmb3IgYHNocmlua19saXN0YCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBhbnkgZGlzY3JlcGFuY3kgYmV0d2VlbiBgbnJfdG9fc2NhbmAgYW5kIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCB3aWxsIGltcGFjdCBob3cgbWFueSBwYWdlcyBhcmUgY29uc2lkZXJlZCBmb3IgcmVjbGFtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMjA6XHR9XG4yMjIxOlx0XG4yMjIyOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbjIyMjM6XHRcdFx0XHRcdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuMjIyNDpcdHtcbjIyMjU6XHRcdGlmIChpc19hY3RpdmVfbHJ1KGxydSkpIHtcbjIyMjY6XHRcdFx0aWYgKHNjLVx1MDAzZW1heV9kZWFjdGl2YXRlIFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgaXNfZmlsZV9scnUobHJ1KSkpXG4yMjI3Olx0XHRcdFx0c2hyaW5rX2FjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIGxydSk7XG4yMjI4Olx0XHRcdGVsc2VcbjIyMjk6XHRcdFx0XHRzYy1cdTAwM2Vza2lwcGVkX2RlYWN0aXZhdGUgPSAxO1xuMjIzMDpcdFx0XHRyZXR1cm4gMDtcbjIyMzE6XHRcdH1cbjIyMzI6XHRcbjIyMzM6XHRcdHJldHVybiBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCBscnV2ZWMsIHNjLCBscnUpO1xuMjIzNDpcdH1cbjIyMzU6XHRcbjIyMzY6XHQvKlxuMjIzNzpcdCAqIFRoZSBpbmFjdGl2ZSBhbm9uIGxpc3Qgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0aGF0IHRoZSBWTSBuZXZlciBoYXNcbjIyMzg6XHQgKiB0byBkbyB0b28gbXVjaCB3b3JrLlxuMjIzOTpcdCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTM3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IFNocmlua2FnZSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYWdhaW4uIFRoZSBzY2VuYXJpbyBJJiMzOTttIGxvb2tpbmcgYXQgaGluZ2VzIG9uIHRoZXNlIGNvbmRpdGlvbnM6IGBpc19hY3RpdmVfbHJ1KGxydSlgIGlzIHRydWUgYW5kIGBzYy0mZ3Q7bWF5X2RlYWN0aXZhdGUgJmFtcDsgKDEgJmx0OyZsdDsgaXNfZmlsZV9scnUobHJ1KSlgIGlzIGZhbHNlLiBJbiB0aGlzIHNwZWNpZmljIGNhc2UsIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGlzIHNraXBwZWQgZW50aXJlbHkuIFRoaXMgbWVhbnMgYHNocmlua19saXN0YCByZXR1cm5zIDAsIGFuZCwgY3J1Y2lhbGx5LCBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAgc3RheXMgYXQgemVyby4KCk5vdywgbG9va2luZyBhdCBob3cgYHNocmlua19scnV2ZWNgIGhhbmRsZXMgdGhpcywgSSBzZWU6CgpgYGBjCm5yW2xydV0gLT0gbWluKG5yW2xydV0sCgkgICAgICAgbWF4KG5yX3RvX3NjYW4sIHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWQpKTsKYGBgCgpTaW5jZSBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAgaXMgemVybyBpbiB0aGlzIHNpdHVhdGlvbiwgYG1heChucl90b19zY2FuLCAwKWAgc2ltcGxpZmllcyB0byBqdXN0IGBucl90b19zY2FuYC4gU28gdGhlIGxpbmUgZWZmZWN0aXZlbHkgYmVjb21lcyBgbnJbbHJ1XSAtPSBtaW4obnJbbHJ1XSwgbnJfdG9fc2NhbilgLiBUaGF0JiMzOTtzIGNvbXBsZXRlbHkgc291bmQ7IGl04oCZcyBkZWNyZW1lbnRpbmcgYG5yW2xydV1gIGJ5IGEgdmFsaWQgdmFsdWUsIG5vdGhpbmcgc3Bvb2t5IGlzIGhhcHBlbmluZyB0aGVyZS4gVGhlcmUmIzM5O3Mgbm8gdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKSG93ZXZlciwgSSYjMzk7bSBnZXR0aW5nIGEgbGl0dGxlIHBhcmFub2lkIG5vdy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gdGFrZSBhIHdpZGVyIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIExldCBtZSBjaGVjayBmb3IgYW55IG90aGVyIG9jY3VycmVuY2VzIG9mIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCBpbiB0aGUgY29kZSBiYXNlLCBqdXN0IHRvIGJlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgc3VidGxlIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgaXNzdWVzIEkmIzM5O20gb3Zlcmxvb2tpbmcuIEkmIzM5O20gZ29pbmcgdG8gZ3JlcCBmb3IgYG5yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtucl9pc29sYXRlX3NjYW5uZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03ND1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbi0tXG5tbS92bXNjYW4uYy0xNjctXHQvKiBOdW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQgZnJvbSBpc29sYXRlX2xydV9mb2xpb3MoKSAqL1xubW0vdm1zY2FuLmM6MTY4Olx0dW5zaWduZWQgbG9uZyBucl9pc29sYXRlX3NjYW5uZWQ7XG5tbS92bXNjYW4uYy0xNjktXG4tLVxubW0vdm1zY2FuLmM9MTY4ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuLS1cbm1tL3Ztc2Nhbi5jLTE3NzctXHR9XG5tbS92bXNjYW4uYzoxNzc4Olx0c2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2Nhbjtcbm1tL3Ztc2Nhbi5jLTE3NzktXHR0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxuLS1cbm1tL3Ztc2Nhbi5jPTE5OTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuLS1cbm1tL3Ztc2Nhbi5jLTIwMjYtXHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFx1MDAyNmZvbGlvX2xpc3QsIHNjLCBscnUpO1xubW0vdm1zY2FuLmM6MjAyNzpcdG5yX3NjYW5uZWQgPSBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQ7XG5tbS92bXNjYW4uYy0yMDI4LVxuLS1cbm1tL3Ztc2Nhbi5jPTIwNzc9c3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbi0tXG5tbS92bXNjYW4uYy0yMDk5LVxubW0vdm1zY2FuLmM6MjEwMDpcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JFRklMTCwgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkKTtcbm1tL3Ztc2Nhbi5jLTIxMDEtXG4tLVxubW0vdm1zY2FuLmM9NTg4Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTkzMC1cbm1tL3Ztc2Nhbi5jOjU5MzE6XHRcdFx0XHRzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQgPSAwO1xubW0vdm1zY2FuLmMtNTkzMi1cdFx0XHRcdG5yX3JlY2xhaW1lZCAmIzQzOz0gc2hyaW5rX2xpc3QobHJ1LCBucl90b19zY2FuLFxuLS1cbm1tL3Ztc2Nhbi5jLTU5NDMtXHRcdFx0XHRucltscnVdIC09IG1pbihucltscnVdLFxubW0vdm1zY2FuLmM6NTk0NDpcdFx0XHRcdFx0ICAgICAgIG1heChucl90b19zY2FuLCBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQpKTtcbm1tL3Ztc2Nhbi5jLTU5NDUtXHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIwNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhZ2UgSXNvbGF0aW9uIExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBJIHNlZSB0aGF0IGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCBpcyBiZWluZyB1c2VkLCBzcGVjaWZpY2FsbHkgcmlnaHQgYWZ0ZXIgY2FsbGluZyBgaXNvbGF0ZV9scnVfZm9saW9zYC4gSSYjMzk7bSB1c2luZyBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gbW9kaWZ5IHBhZ2Ugc3RhdGUgYW5kIGxydXZlYyBzdGF0ZS4gU2luY2UgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgKmFsd2F5cyogc2V0cyBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAsIHRoaXMgbG9va3MgY29ycmVjdCBhdCBmaXJzdCBnbGFuY2UuIEl0IGVuc3VyZXMgdGhlIHN0YXRlIGlzIGNvbnNpc3RlbnQuCgpOb3csIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIHRoZSBzYW1lIHBhdHRlcm4gYXBwZWFycy4gV2UgY2FsbCBgaXNvbGF0ZV9scnVfZm9saW9zYCwgdGhlbiBpbW1lZGlhdGVseSB1c2UgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgLiBBbmQgYWdhaW4sIEkmIzM5O20gcmVseWluZyBvbiBgaXNvbGF0ZV9scnVfZm9saW9zYCB0byBzZXQgdGhpcyB2YWx1ZS4gQnV0IHdhaXQsIGEgbmFnZ2luZyB0aG91Z2h0Li4ud2hhdCBpZiBgaXNvbGF0ZV9scnVfZm9saW9zYCAqZG9lc24mIzM5O3QqIGFsd2F5cyBzZXQgaXQ/IE15IHdob2xlIGxvZ2ljIGhpbmdlcyBvbiB0aGF0IGFzc3VtcHRpb24uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgpJIG5lZWQgdG8gcmUtZXhhbWluZSB0aGUgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgZnVuY3Rpb24gaXRzZWxmLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlLiBBaCwgaGVyZSBpdCBpczogYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWQgPSB0b3RhbF9zY2FuO2AuIFRoaXMgYXNzaWdubWVudCBpcyByaWdodCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiwganVzdCBiZWZvcmUgdGhhdCBgdHJhY2VfbW1fdm1zY2FuX2xydV9pc29sYXRlYCBjYWxsLiBPa2F5LCB0aGF0IGNvbmZpcm1zIG15IGFzc3VtcHRpb24sIGl0ICppcyogc2V0IGF0IHRoZSBlbmQuIEJ1dC4uLiBhcmUgdGhlcmUgYW55IGVhcmx5IHJldHVybnMgaW4gdGhhdCBmdW5jdGlvbj8gSSBuZWVkIHRvIG1ldGljdWxvdXNseSBzY2FuIHRoZSBlbnRpcmUgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgZnVuY3Rpb24gbm93IHRvIGVuc3VyZSBubyBjb25kaXRpb25hbCBwYXRocyBieXBhc3MgdGhpcyBjcml0aWNhbCBhc3NpZ25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY4NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY4NDpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4xNjg1Olx0XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGxpc3RfaGVhZCAqZHN0LFxuMTY4NjpcdFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgZW51bSBscnVfbGlzdCBscnUpXG4xNjg3Olx0e1xuMTY4ODpcdFx0c3RydWN0IGxpc3RfaGVhZCAqc3JjID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxpc3RzW2xydV07XG4xNjg5Olx0XHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuID0gMDtcbjE2OTA6XHRcdHVuc2lnbmVkIGxvbmcgbnJfem9uZV90YWtlbltNQVhfTlJfWk9ORVNdID0geyAwIH07XG4xNjkxOlx0XHR1bnNpZ25lZCBsb25nIG5yX3NraXBwZWRbTUFYX05SX1pPTkVTXSA9IHsgMCwgfTtcbjE2OTI6XHRcdHVuc2lnbmVkIGxvbmcgc2tpcHBlZCA9IDAsIHRvdGFsX3NjYW4gPSAwLCBzY2FuID0gMDtcbjE2OTM6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XG4xNjk0Olx0XHR1bnNpZ25lZCBsb25nIG1heF9ucl9za2lwcGVkID0gMDtcbjE2OTU6XHRcdExJU1RfSEVBRChmb2xpb3Nfc2tpcHBlZCk7XG4xNjk2Olx0XG4xNjk3Olx0XHR3aGlsZSAoc2NhbiBcdTAwM2MgbnJfdG9fc2NhbiBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoc3JjKSkge1xuMTY5ODpcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICptb3ZlX3RvID0gc3JjO1xuMTY5OTpcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMTcwMDpcdFxuMTcwMTpcdFx0XHRmb2xpbyA9IGxydV90b19mb2xpbyhzcmMpO1xuMTcwMjpcdFx0XHRwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oZm9saW8sIHNyYywgZmxhZ3MpO1xuMTcwMzpcdFxuMTcwNDpcdFx0XHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbjE3MDU6XHRcdFx0dG90YWxfc2NhbiAmIzQzOz0gbnJfcGFnZXM7XG4xNzA2Olx0XG4xNzA3Olx0XHRcdC8qXG4xNzA4Olx0XHRcdCAqIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAuXG4xNzA5Olx0XHRcdCAqIE9uY2UgdGhlIGNhcCBpcyBoaXQsIHN0b3AgcmF0aGVyIHRoYW4gZm9yY2UtaXNvbGF0aW5nOlxuMTcxMDpcdFx0XHQgKiByZWNsYWltaW5nIGluZWxpZ2libGUgZm9saW9zIG9ubHkgaW5mbGF0ZXMgbnJfcmVjbGFpbWVkXG4xNzExOlx0XHRcdCAqIGludG8gYSBmYWxzZSBwcm9ncmVzcy5cbjE3MTI6XHRcdFx0ICovXG4xNzEzOlx0XHRcdGlmIChmb2xpb196b25lbnVtKGZvbGlvKSBcdTAwM2Ugc2MtXHUwMDNlcmVjbGFpbV9pZHgpIHtcbjE3MTQ6XHRcdFx0XHRucl9za2lwcGVkW2ZvbGlvX3pvbmVudW0oZm9saW8pXSAmIzQzOz0gbnJfcGFnZXM7XG4xNzE1Olx0XHRcdFx0bWF4X25yX3NraXBwZWQmIzQzOyYjNDM7O1xuMTcxNjpcdFx0XHRcdGlmIChtYXhfbnJfc2tpcHBlZCBcdTAwM2U9IFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRCkge1xuMTcxNzpcdFx0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2Zm9saW9zX3NraXBwZWQpO1xuMTcxODpcdFx0XHRcdFx0YnJlYWs7XG4xNzE5Olx0XHRcdFx0fVxuMTcyMDpcdFx0XHRcdG1vdmVfdG8gPSBcdTAwMjZmb2xpb3Nfc2tpcHBlZDtcbjE3MjE6XHRcdFx0XHRnb3RvIG1vdmU7XG4xNzIyOlx0XHRcdH1cbjE3MjM6XHRcbjE3MjQ6XHRcdFx0LypcbjE3MjU6XHRcdFx0ICogRG8gbm90IGNvdW50IHNraXBwZWQgZm9saW9zIGJlY2F1c2UgdGhhdCBtYWtlcyB0aGUgZnVuY3Rpb25cbjE3MjY6XHRcdFx0ICogcmV0dXJuIHdpdGggbm8gaXNvbGF0ZWQgZm9saW9zIGlmIHRoZSBMUlUgbW9zdGx5IGNvbnRhaW5zXG4xNzI3Olx0XHRcdCAqIGluZWxpZ2libGUgZm9saW9zLiAgVGhpcyBjYXVzZXMgdGhlIFZNIHRvIG5vdCByZWNsYWltIGFueVxuMTcyODpcdFx0XHQgKiBmb2xpb3MsIHRyaWdnZXJpbmcgYSBwcmVtYXR1cmUgT09NLlxuMTcyOTpcdFx0XHQgKiBBY2NvdW50IGFsbCBwYWdlcyBpbiBhIGZvbGlvLlxuMTczMDpcdFx0XHQgKi9cbjE3MzE6XHRcdFx0c2NhbiAmIzQzOz0gbnJfcGFnZXM7XG4xNzMyOlx0XG4xNzMzOlx0XHRcdGlmICghZm9saW9fdGVzdF9scnUoZm9saW8pKVxuMTczNDpcdFx0XHRcdGdvdG8gbW92ZTtcbjE3MzU6XHRcdFx0aWYgKCFzYy1cdTAwM2VtYXlfdW5tYXAgXHUwMDI2XHUwMDI2IGZvbGlvX21hcHBlZChmb2xpbykpXG4xNzM2Olx0XHRcdFx0Z290byBtb3ZlO1xuMTczNzpcdFxuMTczODpcdFx0XHQvKlxuMTczOTpcdFx0XHQgKiBCZSBjYXJlZnVsIG5vdCB0byBjbGVhciB0aGUgbHJ1IGZsYWcgdW50aWwgYWZ0ZXIgd2UmIzM5O3JlXG4xNzQwOlx0XHRcdCAqIHN1cmUgdGhlIGZvbGlvIGlzIG5vdCBiZWluZyBmcmVlZCBlbHNld2hlcmUgLS0gdGhlXG4xNzQxOlx0XHRcdCAqIGZvbGlvIHJlbGVhc2UgY29kZSByZWxpZXMgb24gaXQuXG4xNzQyOlx0XHRcdCAqL1xuMTc0MzpcdFx0XHRpZiAodW5saWtlbHkoIWZvbGlvX3RyeV9nZXQoZm9saW8pKSlcbjE3NDQ6XHRcdFx0XHRnb3RvIG1vdmU7XG4xNzQ1Olx0XG4xNzQ2Olx0XHRcdGlmICghZm9saW9fdGVzdF9jbGVhcl9scnUoZm9saW8pKSB7XG4xNzQ3Olx0XHRcdFx0LyogQW5vdGhlciB0aHJlYWQgaXMgYWxyZWFkeSBpc29sYXRpbmcgdGhpcyBmb2xpbyAqL1xuMTc0ODpcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4xNzQ5Olx0XHRcdFx0Z290byBtb3ZlO1xuMTc1MDpcdFx0XHR9XG4xNzUxOlx0XG4xNzUyOlx0XHRcdG5yX3Rha2VuICYjNDM7PSBucl9wYWdlcztcbjE3NTM6XHRcdFx0bnJfem9uZV90YWtlbltmb2xpb196b25lbnVtKGZvbGlvKV0gJiM0Mzs9IG5yX3BhZ2VzO1xuMTc1NDpcdFx0XHRtb3ZlX3RvID0gZHN0O1xuMTc1NTpcdG1vdmU6XG4xNzU2Olx0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIG1vdmVfdG8pO1xuMTc1NzpcdFx0fVxuMTc1ODpcdFxuMTc1OTpcdFx0LypcbjE3NjA6XHRcdCAqIFNwbGljZSBhbnkgc2tpcHBlZCBmb2xpb3MgdG8gdGhlIHN0YXJ0IG9mIHRoZSBMUlUgbGlzdC4gTm90ZSB0aGF0XG4xNzYxOlx0XHQgKiB0aGlzIGRpc3J1cHRzIHRoZSBMUlUgb3JkZXIgd2hlbiByZWNsYWltaW5nIGZvciBsb3dlciB6b25lcyBidXRcbjE3NjI6XHRcdCAqIHdlIGNhbm5vdCBzcGxpY2UgdG8gdGhlIHRhaWwuIElmIHdlIGRpZCB0aGVuIHRoZSBTV0FQX0NMVVNURVJfTUFYXG4xNzYzOlx0XHQgKiBzY2FubmluZyB3b3VsZCBzb29uIHJlc2NhbiB0aGUgc2FtZSBmb2xpb3MgdG8gc2tpcCBhbmQgd2FzdGUgbG90c1xuMTc2NDpcdFx0ICogb2YgY3B1IGN5Y2xlcy5cbjE3NjU6XHRcdCAqL1xuMTc2NjpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmZvbGlvc19za2lwcGVkKSkge1xuMTc2NzpcdFx0XHRpbnQgemlkO1xuMTc2ODpcdFxuMTc2OTpcdFx0XHRsaXN0X3NwbGljZShcdTAwMjZmb2xpb3Nfc2tpcHBlZCwgc3JjKTtcbjE3NzA6XHRcdFx0Zm9yICh6aWQgPSAwOyB6aWQgXHUwMDNjIE1BWF9OUl9aT05FUzsgemlkJiM0MzsmIzQzOykge1xuMTc3MTpcdFx0XHRcdGlmICghbnJfc2tpcHBlZFt6aWRdKVxuMTc3MjpcdFx0XHRcdFx0Y29udGludWU7XG4xNzczOlx0XG4xNzc0Olx0XHRcdFx0X19jb3VudF96aWRfdm1fZXZlbnRzKFBHU0NBTl9TS0lQLCB6aWQsIG5yX3NraXBwZWRbemlkXSk7XG4xNzc1Olx0XHRcdFx0c2tpcHBlZCAmIzQzOz0gbnJfc2tpcHBlZFt6aWRdO1xuMTc3NjpcdFx0XHR9XG4xNzc3Olx0XHR9XG4xNzc4Olx0XHRzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQgPSB0b3RhbF9zY2FuO1xuMTc3OTpcdFx0dHJhY2VfbW1fdm1zY2FuX2xydV9pc29sYXRlKHNjLVx1MDAzZXJlY2xhaW1faWR4LCBzYy1cdTAwM2VvcmRlciwgbnJfdG9fc2NhbixcbjE3ODA6XHRcdFx0XHRcdCAgICB0b3RhbF9zY2FuLCBza2lwcGVkLCBucl90YWtlbiwgbHJ1KTtcbjE3ODE6XHRcdHVwZGF0ZV9scnVfc2l6ZXMobHJ1dmVjLCBscnUsIG5yX3pvbmVfdGFrZW4pO1xuMTc4MjpcdFx0cmV0dXJuIG5yX3Rha2VuO1xuMTc4MzpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoZSBgaXNvbGF0ZV9scnVfZm9saW9zYCBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgZnVuY3Rpb24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBpdCBjb25zaXN0ZW50bHkgc2VlbXMgdG8gcmVhY2ggYSBjZXJ0YWluIHBvaW50LCBzcGVjaWZpY2FsbHkgd2hlcmUgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWQgPSB0b3RhbF9zY2FuO2AuIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBjb3VudGVyIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCwgd2hpY2ggcHJlc3VtYWJseSB0cmFja3MgdGhlIG51bWJlciBvZiBwYWdlcy9mb2xpb3Mgc2Nhbm5lZCBkdXJpbmcgdGhlIGlzb2xhdGlvbiBwcm9jZXNzLCBpcyAqYWx3YXlzKiBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGBpc29sYXRlX2xydV9mb2xpb3NgIGZ1bmN0aW9uLiBUaGVyZSBhcmVuJiMzOTt0IGFueSBlYXJseSByZXR1cm5zIHRoYXQgd291bGQgcHJldmVudCB0aGlzIGluaXRpYWxpemF0aW9uLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLgoKTm93LCBhIHBvdGVudGlhbCB3cmlua2xlLiBJIG5lZWQgdG8gYmUgc3VyZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgYHNocmlua19hY3RpdmVfbGlzdGAgaXMgY2FsbGVkLiBJdCB3b3VsZCBiZSBpbXBvcnRhbnQgaWYgYHNocmlua19hY3RpdmVfbGlzdGAgaXMgY2FsbGVkIGZyb20gYGtzd2FwZF9hZ2Vfbm9kZWAuCgpNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBpbnZlc3RpZ2F0ZSB0aGUgY2FsbCBwYXRocyB0byBgc2hyaW5rX2FjdGl2ZV9saXN0YCBhbmQsIGluIHBhcnRpY3VsYXIsIHRvIHNjcnV0aW5pemUgYGtzd2FwZF9hZ2Vfbm9kZWAuIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcHJvY2VzcyBpbiBhIHBvdGVudGlhbGx5IHVuZXhwZWN0ZWQgd2F5IHRoYXQgY291bGQgYWZmZWN0IGhvdyBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAgYmVoYXZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4MzEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjgzMTpcdHN0YXRpYyB2b2lkIGtzd2FwZF9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjY4MzI6XHR7XG42ODMzOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG42ODM0Olx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG42ODM1Olx0XG42ODM2Olx0XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xuNjgzNzpcdFx0XHRscnVfZ2VuX2FnZV9ub2RlKHBnZGF0LCBzYyk7XG42ODM4Olx0XG42ODM5Olx0XHRcdGlmICghbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcbjY4NDA6XHRcdFx0XHRyZXR1cm47XG42ODQxOlx0XG42ODQyOlx0XHR9XG42ODQzOlx0XG42ODQ0Olx0XHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhOVUxMLCBwZ2RhdCk7XG42ODQ1Olx0XHRpZiAoIWNhbl9hZ2VfYW5vbl9wYWdlcyhscnV2ZWMsIHNjKSlcbjY4NDY6XHRcdFx0cmV0dXJuO1xuNjg0NzpcdFxuNjg0ODpcdFx0aWYgKCFpbmFjdGl2ZV9pc19sb3cobHJ1dmVjLCBMUlVfSU5BQ1RJVkVfQU5PTikpXG42ODQ5Olx0XHRcdHJldHVybjtcbjY4NTA6XHRcbjY4NTE6XHRcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpO1xuNjg1MjpcdFx0ZG8ge1xuNjg1MzpcdFx0XHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuNjg1NDpcdFx0XHRzaHJpbmtfYWN0aXZlX2xpc3QoU1dBUF9DTFVTVEVSX01BWCwgbHJ1dmVjLFxuNjg1NTpcdFx0XHRcdFx0ICAgc2MsIExSVV9BQ1RJVkVfQU5PTik7XG42ODU2Olx0XHRcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKTtcbjY4NTc6XHRcdH0gd2hpbGUgKG1lbWNnKTtcbjY4NTg6XHR9XG42ODU5Olx0XG42ODYwOlx0c3RhdGljIGJvb2wgcGdkYXRfd2F0ZXJtYXJrX2Jvb3N0ZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbjY4NjE6XHR7XG42ODYyOlx0XHRpbnQgaTtcbjY4NjM6XHRcdHN0cnVjdCB6b25lICp6b25lO1xuNjg2NDpcdFxuNjg2NTpcdFx0LypcbjY4NjY6XHRcdCAqIENoZWNrIGZvciB3YXRlcm1hcmsgYm9vc3RzIHRvcC1kb3duIGFzIHRoZSBoaWdoZXIgem9uZXNcbjY4Njc6XHRcdCAqIGFyZSBtb3JlIGxpa2VseSB0byBiZSBib29zdGVkLiBCb3RoIHdhdGVybWFya3MgYW5kIGJvb3N0c1xuNjg2ODpcdFx0ICogc2hvdWxkIG5vdCBiZSBjaGVja2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgcmVjbGFpbSB3b3VsZFxuNjg2OTpcdFx0ICogc3RhcnQgcHJlbWF0dXJlbHkgd2hlbiB0aGVyZSBpcyBubyBib29zdGluZyBhbmQgYSBsb3dlclxuNjg3MDpcdFx0ICogem9uZSBpcyBiYWxhbmNlZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0ODQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlnZ2luZyBpbnRvIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBOdWFuY2VzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGlzIGBrc3dhcGRfYWdlX25vZGVgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgc2hyaW5rX2FjdGl2ZV9saXN0YC4gUmlnaHQsIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YCBjYWxscyBgaXNvbGF0ZV9scnVfZm9saW9zYC4gTm93LCB0aGF0IGBpc29sYXRlX2xydV9mb2xpb3NgIGZ1bmN0aW9uLCBJIHJlbWVtYmVyIGl0IHNldHMgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgLiBBbmQgdGhlbiwgd2l0aGluIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGl0c2VsZiwgaXQgdXNlcyB0aGF0IHZlcnkgdmFsdWUsIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCwgd2hlbiBpdCBjYWxscyBgbW9kX2xydXZlY19zdGF0ZWAuIFNlZW1zIHNvbGlkIC0gdGhlIHZhcmlhYmxlIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0JiMzOTtzIHVzZWQsIHdoaWNoIGlzIGdvb2QuIFdl4oCZcmUgc2FmZSB0aGVyZS4KCkhvbGQgb24uLi4gYSBuYWdnaW5nIHRob3VnaHQuIFdoYXQgaWYgYHNocmlua19pbmFjdGl2ZV9saXN0YCBpcyBjYWxsZWQgKnNvbWV3aGVyZSogZWxzZSBiZXNpZGVzIGp1c3QgaW5zaWRlIGBzaHJpbmtfbGlzdGA/IFRoYXQgd291bGQgdGhyb3cgYSB3cmVuY2ggaW50byB0aGlzLiBMZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBjYWxsIHNpdGVzIGZvciBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGp1c3QgdG8gYmUgY2VydGFpbi4gWWVzLCBJJiMzOTtsbCBnbyB0aHJvdWdoIHRoZSBjYWxsIHN0YWNrIGZvciB0aGF0IGZ1bmN0aW9uIGFuZCBtYWtlIHN1cmUuIEEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBzaG91bGQgZG8gdGhlIHRyaWNrLiBXZSBoYXZlIHRvIGJlIHRob3JvdWdoIGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MTk1Mz1zdGF0aWMgdm9pZCBoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sodW5zaWduZWQgbG9uZyBucl90YWtlbixcbi0tXG5tbS92bXNjYW4uYy0xOTkxLS8qXG5tbS92bXNjYW4uYzoxOTkyOiAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19ub2RlKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXJcbm1tL3Ztc2Nhbi5jLTE5OTMtICogb2YgcmVjbGFpbWVkIHBhZ2VzXG5tbS92bXNjYW4uYy0xOTk0LSAqL1xubW0vdm1zY2FuLmM6MTk5NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG5tbS92bXNjYW4uYy0xOTk2LVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jPTIyMjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbi0tXG5tbS92bXNjYW4uYy0yMjMyLVxubW0vdm1zY2FuLmM6MjIzMzpcdHJldHVybiBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCBscnV2ZWMsIHNjLCBscnUpO1xubW0vdm1zY2FuLmMtMjIzNC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTkzCgkJCQkJCQlvdXRwdXQ6IDIzNQoJCQkJCQkJdGhvdWdodHM6IDIzNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFZNIFJlY2xhaW0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyB0b3VjaGluZyB0aGUgY29yZSBWTSByZWNsYWltIGxvZ2ljLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSByZXBsYWNpbmcgYW4gb3V0cHV0IHBhcmFtZXRlciAoYHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWRgKSB3aXRoIGEgbmV3IGZpZWxkIHdpdGhpbiB0aGUgYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHN0cnVjdHVyZSAoYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgKS4gSXQmIzM5O3MgYWxsIGFib3V0IGhvdyB0aGUgbnVtYmVyIG9mIHNjYW5uZWQgcGFnZXMgaXMgcGFzc2VkIGFyb3VuZCB3aXRoaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AuCgpGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgc2hyaW5rX2xpc3RgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgY2FsbHMgYHNocmlua19pbmFjdGl2ZV9saXN0YC4gTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCBnZXR0aW5nIGluaXRpYWxpemVkIGNvcnJlY3RseT8gTG9va2luZyBhdCBgc2hyaW5rX2xydXZlY2AsIEkgc2VlIGl0IGV4cGxpY2l0bHkgc2V0cyBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gMCBiZWZvcmUgY2FsbGluZyBgc2hyaW5rX2xpc3RgLiBBbmQsIGlmIGBpc29sYXRlX2xydV9mb2xpb3NgIHJldHVybnMgZWFybHkgKGUuZy4sIGFjdGl2ZSBsaXN0IGFuZCBubyBkZWFjdGl2YXRlKSwgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgIHJlbWFpbnMgYXQgMCwgbWFraW5nIHRoZSBzdWJzZXF1ZW50IGBtYXgoKWAgY2FsbCBwZXJmZWN0bHkgc2FmZS4KCkkgZ3JlcHBlZCBmb3IgYWxsIGluc3RhbmNlcyBvZiBgbnJfaXNvbGF0ZV9zY2FubmVkYCB0byBlbnN1cmUgaXQmIzM5O3MgdXNlZCBjb3JyZWN0bHkuIEl0JiMzOTtzIGFkZGVkIHRvIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCwgYXNzaWduZWQgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AsIGFuZCByZWFkIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBhbmQgYHNocmlua19scnV2ZWNgLiBTbywgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBubyB3YXkgZm9yIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCB0byBiZSByZWFkIHdpdGhvdXQgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoaXMgbWFrZXMgbWUgY29uZmlkZW50IHRoYXQgdGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBqdXN0IGEgcmVmYWN0b3JpbmcuIEl0IHJlbW92ZXMgYW4gYG5yX3NjYW5uZWRgIHBvaW50ZXIgYXJndW1lbnQgZnJvbSBgaXNvbGF0ZV9scnVfZm9saW9zYCBhbmQgdXBkYXRlcyB0aGUgY2FsbGVycyB0byB1c2UgdGhlIG5ldyBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAgZmllbGQuIFRoZSBsb2dpYyBjaGFuZ2UgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgdG8gYnJlYWsgZWFybHkgaWYgYG1heF9ucl9za2lwcGVkICZndDs9IFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRGAgcHJldmVudHMgaGFyZCBsb2NrdXBzLgoKTm8sIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBpbmZvcm1hdGlvbiBsZWFrcyBvciBjaGFuZ2VzIHRoYXQgaW52b2x2ZSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gSXQgYWxzbyBkb2VzbiYjMzk7dCBtb2RpZnkgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLiBTaW5jZSB0aGUgY2hhbmdlcyBhcmUgaW50ZXJuYWwgdG8gdGhlIFZNIHJlY2xhaW0gbG9naWMsIGFueSBidWdzIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBidWdzLCBvdXQtb2YtYm91bmRzIGVycm9ycywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gVGhlc2UgYXJlIGJlc3QgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMsIHNvIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uCgpJIGp1c3Qgd2VudCB0aHJvdWdoIHRoZSBkaWZmIGFnYWluIGZvciBhIGZpbmFsIHJldmlldy4gVGhlIGNoYW5nZXMgbG9vayBzdHJhaWdodGZvcndhcmQsIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgIHNlZW1zIGNvcnJlY3QgaW4gYWxsIHBsYWNlcy4gU28sIEkgYW0gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIFZNIHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgaW50cm9kdWNlcyBhIG5ldyBmaWVsZCBgbnJfaXNvbGF0ZV9zY2FubmVkYCB0byBgc3RydWN0IHNjYW5fY29udHJvbGAgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBzY2FubmVkIHBhZ2VzLCByZXBsYWNpbmcgYW4gb3V0cHV0IHBvaW50ZXIgYXJndW1lbnQgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvcygpYC4gVGhlIGZpZWxkIGlzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgdXNlIChlaXRoZXIgZXhwbGljaXRseSB0byAwIGluIGBzaHJpbmtfbHJ1dmVjKClgIG9yIHVuY29uZGl0aW9uYWxseSBhc3NpZ25lZCBhdCB0aGUgZW5kIG9mIGBpc29sYXRlX2xydV9mb2xpb3MoKWApLiBUaGUgcGF0Y2ggYWxzbyBjaGFuZ2VzIHRoZSBsb2dpYyB0byBzdG9wIGlzb2xhdGluZyBmb2xpb3Mgd2hlbiBhIHNraXAgdGhyZXNob2xkIGlzIHJlYWNoZWQuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkbyBub3QgaW52b2x2ZSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBWTSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0IGludHJvZHVjZXMgYSBuZXcgZmllbGQgYG5yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHRvIHRyYWNrIHRoZSBudW1iZXIgb2Ygc2Nhbm5lZCBwYWdlcywgcmVwbGFjaW5nIGFuIG91dHB1dCBwb2ludGVyIGFyZ3VtZW50IGluIGBpc29sYXRlX2xydV9mb2xpb3MoKWAuIFRoZSBmaWVsZCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoZWl0aGVyIGV4cGxpY2l0bHkgdG8gMCBpbiBgc2hyaW5rX2xydXZlYygpYCBvciB1bmNvbmRpdGlvbmFsbHkgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiBgaXNvbGF0ZV9scnVfZm9saW9zKClgKS4gVGhlIHBhdGNoIGFsc28gY2hhbmdlcyB0aGUgbG9naWMgdG8gc3RvcCBpc29sYXRpbmcgZm9saW9zIHdoZW4gYSBza2lwIHRocmVzaG9sZCBpcyByZWFjaGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZG8gbm90IGludm9sdmUgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAxOjA3LjEzODg0NDg0OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTAzMjk3NzAyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiSElCRVJOQVRJT05cIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJzaHJpbmtfYWxsX21lbW9yeVwiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwibWVtX2Nncm91cF9zaHJpbmtfbm9kZVwiLFxuICAgIFwibm9kZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgVk0gcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZpZWxkIGBucl9pc29sYXRlX3NjYW5uZWRgIHRvIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIHNjYW5uZWQgcGFnZXMsIHJlcGxhY2luZyBhbiBvdXRwdXQgcG9pbnRlciBhcmd1bWVudCBpbiBgaXNvbGF0ZV9scnVfZm9saW9zKClgLiBUaGUgZmllbGQgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKGVpdGhlciBleHBsaWNpdGx5IHRvIDAgaW4gYHNocmlua19scnV2ZWMoKWAgb3IgdW5jb25kaXRpb25hbGx5IGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgYGlzb2xhdGVfbHJ1X2ZvbGlvcygpYCkuIFRoZSBwYXRjaCBhbHNvIGNoYW5nZXMgdGhlIGxvZ2ljIHRvIHN0b3AgaXNvbGF0aW5nIGZvbGlvcyB3aGVuIGEgc2tpcCB0aHJlc2hvbGQgaXMgcmVhY2hlZC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IGludGVybmFsIHRvIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZG8gbm90IGludm9sdmUgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgYW5kIGBzaHJpbmtfbHJ1dmVjYCB0byBwcmV2ZW50IGhhcmQgbG9ja3VwcyBieSBjYXBwaW5nIHRoZSBudW1iZXIgb2Ygc2tpcHBlZCBpbmVsaWdpYmxlIGZvbGlvcyBhbmQgYWRqdXN0aW5nIHRoZSBzY2FuIHF1b3RhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmFyaW91cyByZWNsYWltIHBhdGhzIChlLmcuLCBjZ3JvdXAgcmVjbGFpbSwgcHJvYWN0aXZlIHJlY2xhaW0sIGhpYmVybmF0aW9uKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDE6MDcuMTM4ODUwNDQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ4NTI3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NDc4M2FlNzY2MTI5MGIwMTNiMGFjMWFlYmQ4YWMxYzIxZDNiMmJmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDA4OjAxOjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCA1NjcwOGQxZDJkZmQ1Li5hYzMyMzdhNThjYjI5IDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMTY0LDYgKzE2NCw5IEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xcbiBcXHQvKiBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGluYWN0aXZlIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkICovXFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcXG4gXFxuK1xcdC8qIE51bWJlciBvZiBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCBmcm9tIGlzb2xhdGVfbHJ1X2ZvbGlvcygpICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfaXNvbGF0ZV9zY2FubmVkO1xcbitcXG4gXFx0LyogTnVtYmVyIG9mIHBhZ2VzIGZyZWVkIHNvIGZhciBkdXJpbmcgYSBjYWxsIHRvIHNocmlua196b25lcygpICovXFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkO1xcbiBcXG5AQCAtMTY3Myw3ICsxNjc2LDYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiAgKiBAbnJfdG9fc2NhbjpcXHRUaGUgbnVtYmVyIG9mIGVsaWdpYmxlIHBhZ2VzIHRvIGxvb2sgdGhyb3VnaCBvbiB0aGUgbGlzdC5cXG4gICogQGxydXZlYzpcXHRUaGUgTFJVIHZlY3RvciB0byBwdWxsIHBhZ2VzIGZyb20uXFxuICAqIEBkc3Q6XFx0VGhlIHRlbXAgbGlzdCB0byBwdXQgcGFnZXMgb24gdG8uXFxuLSAqIEBucl9zY2FubmVkOlxcdFRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQuXFxuICAqIEBzYzpcXHRcXHRUaGUgc2Nhbl9jb250cm9sIHN0cnVjdCBmb3IgdGhpcyByZWNsYWltIHNlc3Npb25cXG4gICogQGxydTpcXHRMUlUgbGlzdCBpZCBmb3IgaXNvbGF0aW5nXFxuICAqXFxuQEAgLTE2ODEsOCArMTY4Myw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1cGRhdGVfbHJ1X3NpemVzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gICovXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuIFxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGxpc3RfaGVhZCAqZHN0LFxcbi1cXHRcXHR1bnNpZ25lZCBsb25nICpucl9zY2FubmVkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tXFx0XFx0ZW51bSBscnVfbGlzdCBscnUpXFxuK1xcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBlbnVtIGxydV9saXN0IGxydSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkICpzcmMgPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VsaXN0c1tscnVdO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuID0gMDtcXG5AQCAtMTcwMywxMiArMTcwNCwyMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRcXHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gXFx0XFx0dG90YWxfc2NhbiArPSBucl9wYWdlcztcXG4gXFxuLVxcdFxcdC8qIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAqL1xcbi1cXHRcXHRpZiAobWF4X25yX3NraXBwZWQgXFx1MDAzYyBTV0FQX0NMVVNURVJfTUFYX1NLSVBQRUQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIChmb2xpb196b25lbnVtKGZvbGlvKSBcXHUwMDNlIHNjLVxcdTAwM2VyZWNsYWltX2lkeCkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVXNpbmcgbWF4X25yX3NraXBwZWQgdG8gcHJldmVudCBoYXJkIExPQ0tVUC5cXG4rXFx0XFx0ICogT25jZSB0aGUgY2FwIGlzIGhpdCwgc3RvcCByYXRoZXIgdGhhbiBmb3JjZS1pc29sYXRpbmc6XFxuK1xcdFxcdCAqIHJlY2xhaW1pbmcgaW5lbGlnaWJsZSBmb2xpb3Mgb25seSBpbmZsYXRlcyBucl9yZWNsYWltZWRcXG4rXFx0XFx0ICogaW50byBhIGZhbHNlIHByb2dyZXNzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGZvbGlvX3pvbmVudW0oZm9saW8pIFxcdTAwM2Ugc2MtXFx1MDAzZXJlY2xhaW1faWR4KSB7XFxuIFxcdFxcdFxcdG5yX3NraXBwZWRbZm9saW9fem9uZW51bShmb2xpbyldICs9IG5yX3BhZ2VzO1xcbi1cXHRcXHRcXHRtb3ZlX3RvID0gXFx1MDAyNmZvbGlvc19za2lwcGVkO1xcbiBcXHRcXHRcXHRtYXhfbnJfc2tpcHBlZCsrO1xcbitcXHRcXHRcXHRpZiAobWF4X25yX3NraXBwZWQgXFx1MDAzZT0gU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEKSB7XFxuK1xcdFxcdFxcdFxcdGxpc3RfbW92ZShcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmZvbGlvc19za2lwcGVkKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0bW92ZV90byA9IFxcdTAwMjZmb2xpb3Nfc2tpcHBlZDtcXG4gXFx0XFx0XFx0Z290byBtb3ZlO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xNzY2LDcgKzE3NzUsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRcXHRcXHRza2lwcGVkICs9IG5yX3NraXBwZWRbemlkXTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcdCpucl9zY2FubmVkID0gdG90YWxfc2NhbjtcXG4rXFx0c2MtXFx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCA9IHRvdGFsX3NjYW47XFxuIFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfaXNvbGF0ZShzYy1cXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVxcdTAwM2VvcmRlciwgbnJfdG9fc2NhbixcXG4gXFx0XFx0XFx0XFx0ICAgIHRvdGFsX3NjYW4sIHNraXBwZWQsIG5yX3Rha2VuLCBscnUpO1xcbiBcXHR1cGRhdGVfbHJ1X3NpemVzKGxydXZlYywgbHJ1LCBucl96b25lX3Rha2VuKTtcXG5AQCAtMjAxNCw4ICsyMDIzLDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXG4gXFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XFxuIFxcbi1cXHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFxcdTAwMjZmb2xpb19saXN0LFxcbi1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZucl9zY2FubmVkLCBzYywgbHJ1KTtcXG4rXFx0bnJfdGFrZW4gPSBpc29sYXRlX2xydV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBcXHUwMDI2Zm9saW9fbGlzdCwgc2MsIGxydSk7XFxuK1xcdG5yX3NjYW5uZWQgPSBzYy1cXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkO1xcbiBcXG4gXFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgZmlsZSwgbnJfdGFrZW4pO1xcbiBcXHRpdGVtID0gUEdTQ0FOX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xcbkBAIC0yMDcxLDcgKzIwODAsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRcXHRcXHQgICAgICAgZW51bSBscnVfbGlzdCBscnUpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl90YWtlbjtcXG4tXFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xcbiBcXHR2bV9mbGFnc190IHZtX2ZsYWdzO1xcbiBcXHRMSVNUX0hFQUQobF9ob2xkKTtcXHQvKiBUaGUgZm9saW9zIHdoaWNoIHdlcmUgc25pcHBlZCBvZmYgKi9cXG4gXFx0TElTVF9IRUFEKGxfYWN0aXZlKTtcXG5AQCAtMjA4NSwxMiArMjA5MywxMSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXG4gXFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XFxuIFxcbi1cXHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFxcdTAwMjZsX2hvbGQsXFxuLVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm5yX3NjYW5uZWQsIHNjLCBscnUpO1xcbitcXHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFxcdTAwMjZsX2hvbGQsIHNjLCBscnUpO1xcbiBcXG4gXFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgZmlsZSwgbnJfdGFrZW4pO1xcbiBcXG4tXFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBucl9zY2FubmVkKTtcXG4rXFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBzYy1cXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkKTtcXG4gXFxuIFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuIFxcbkBAIC01OTIwLDEwICs1OTI3LDIxIEBAIHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gXFx0XFx0Zm9yX2VhY2hfZXZpY3RhYmxlX2xydShscnUpIHtcXG4gXFx0XFx0XFx0aWYgKG5yW2xydV0pIHtcXG4gXFx0XFx0XFx0XFx0bnJfdG9fc2NhbiA9IG1pbihucltscnVdLCBTV0FQX0NMVVNURVJfTUFYKTtcXG4tXFx0XFx0XFx0XFx0bnJbbHJ1XSAtPSBucl90b19zY2FuO1xcbiBcXG4rXFx0XFx0XFx0XFx0c2MtXFx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCA9IDA7XFxuIFxcdFxcdFxcdFxcdG5yX3JlY2xhaW1lZCArPSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBscnV2ZWMsIHNjKTtcXG4rXFx0XFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0XFx0ICogaXNvbGF0ZV9scnVfZm9saW9zKCkgbWF5IHNjYW4gZmFyIG1vcmVcXG4rXFx0XFx0XFx0XFx0ICogdGhhbiBucl90b19zY2FuIHdoZW4gdGhlIExSVSBob2xkc1xcbitcXHRcXHRcXHRcXHQgKiBpbmVsaWdpYmxlIGZvbGlvcyAoem9uZS1za2lwKSBvciBsYXJnZVxcbitcXHRcXHRcXHRcXHQgKiBmb2xpb3MuIENoYXJnZSB0aGF0IG92ZXJzaG9vdCBhZ2FpbnN0IHRoZVxcbitcXHRcXHRcXHRcXHQgKiByZW1haW5pbmcgcXVvdGEgKGNsYW1wZWQgYnkgbWluKCkgc28gaXRcXG4rXFx0XFx0XFx0XFx0ICogY2Fubm90IGdvIG5lZ2F0aXZlKSBzbyB0aGUgbmV4dCBpdGVyYXRpb25cXG4rXFx0XFx0XFx0XFx0ICogZG9lcyBub3QgcmVzY2FuIHRoZSBzYW1lIHNraXBwZWQgZm9saW9zLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0bnJbbHJ1XSAtPSBtaW4obnJbbHJ1XSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG1heChucl90b19zY2FuLCBzYy1cXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkKSk7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDE6MDcuNjA0Mzk1OTYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI0OTE0NzI1Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJISUJFUk5BVElPTlwiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIixcbiAgICBcInNocmlua19hbGxfbWVtb3J5XCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJtZW1fY2dyb3VwX3Nocmlua19ub2RlXCIsXG4gICAgXCJub2RlX3JlY2xhaW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgaXNvbGF0ZV9scnVfZm9saW9zYCBhbmQgYHNocmlua19scnV2ZWNgIHRvIHByZXZlbnQgaGFyZCBsb2NrdXBzIGJ5IGNhcHBpbmcgdGhlIG51bWJlciBvZiBza2lwcGVkIGluZWxpZ2libGUgZm9saW9zIGFuZCBhZGp1c3RpbmcgdGhlIHNjYW4gcXVvdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB2YXJpb3VzIHJlY2xhaW0gcGF0aHMgKGUuZy4sIGNncm91cCByZWNsYWltLCBwcm9hY3RpdmUgcmVjbGFpbSwgaGliZXJuYXRpb24pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NDc4M2FlNzY2MTI5MGIwMTNiMGFjMWFlYmQ4YWMxYzIxZDNiMmJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDg6MDE6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1NjcwOGQxZDJkZmQ1Li5hYzMyMzdhNThjYjI5IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTY0LDYgKzE2NCw5IEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuIFx0LyogSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBpbmFjdGl2ZSBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xuIFxuK1x0LyogTnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkIGZyb20gaXNvbGF0ZV9scnVfZm9saW9zKCkgKi9cbitcdHVuc2lnbmVkIGxvbmcgbnJfaXNvbGF0ZV9zY2FubmVkO1xuK1xuIFx0LyogTnVtYmVyIG9mIHBhZ2VzIGZyZWVkIHNvIGZhciBkdXJpbmcgYSBjYWxsIHRvIHNocmlua196b25lcygpICovXG4gXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcbiBcbkBAIC0xNjczLDcgKzE2NzYsNiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdXBkYXRlX2xydV9zaXplcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gICogQG5yX3RvX3NjYW46XHRUaGUgbnVtYmVyIG9mIGVsaWdpYmxlIHBhZ2VzIHRvIGxvb2sgdGhyb3VnaCBvbiB0aGUgbGlzdC5cbiAgKiBAbHJ1dmVjOlx0VGhlIExSVSB2ZWN0b3IgdG8gcHVsbCBwYWdlcyBmcm9tLlxuICAqIEBkc3Q6XHRUaGUgdGVtcCBsaXN0IHRvIHB1dCBwYWdlcyBvbiB0by5cbi0gKiBAbnJfc2Nhbm5lZDpcdFRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQuXG4gICogQHNjOlx0XHRUaGUgc2Nhbl9jb250cm9sIHN0cnVjdCBmb3IgdGhpcyByZWNsYWltIHNlc3Npb25cbiAgKiBAbHJ1Olx0TFJVIGxpc3QgaWQgZm9yIGlzb2xhdGluZ1xuICAqXG5AQCAtMTY4MSw4ICsxNjgzLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuICAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGxpc3RfaGVhZCAqZHN0LFxuLVx0XHR1bnNpZ25lZCBsb25nICpucl9zY2FubmVkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi1cdFx0ZW51bSBscnVfbGlzdCBscnUpXG4rXHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBlbnVtIGxydV9saXN0IGxydSlcbiB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICpzcmMgPSBcdTAwMjZscnV2ZWMtXHUwMDNlbGlzdHNbbHJ1XTtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4gPSAwO1xuQEAgLTE3MDMsMTIgKzE3MDQsMjAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0bnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdHRvdGFsX3NjYW4gKz0gbnJfcGFnZXM7XG4gXG4tXHRcdC8qIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAqL1xuLVx0XHRpZiAobWF4X25yX3NraXBwZWQgXHUwMDNjIFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIChmb2xpb196b25lbnVtKGZvbGlvKSBcdTAwM2Ugc2MtXHUwMDNlcmVjbGFpbV9pZHgpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAuXG4rXHRcdCAqIE9uY2UgdGhlIGNhcCBpcyBoaXQsIHN0b3AgcmF0aGVyIHRoYW4gZm9yY2UtaXNvbGF0aW5nOlxuK1x0XHQgKiByZWNsYWltaW5nIGluZWxpZ2libGUgZm9saW9zIG9ubHkgaW5mbGF0ZXMgbnJfcmVjbGFpbWVkXG4rXHRcdCAqIGludG8gYSBmYWxzZSBwcm9ncmVzcy5cbitcdFx0ICovXG4rXHRcdGlmIChmb2xpb196b25lbnVtKGZvbGlvKSBcdTAwM2Ugc2MtXHUwMDNlcmVjbGFpbV9pZHgpIHtcbiBcdFx0XHRucl9za2lwcGVkW2ZvbGlvX3pvbmVudW0oZm9saW8pXSArPSBucl9wYWdlcztcbi1cdFx0XHRtb3ZlX3RvID0gXHUwMDI2Zm9saW9zX3NraXBwZWQ7XG4gXHRcdFx0bWF4X25yX3NraXBwZWQrKztcbitcdFx0XHRpZiAobWF4X25yX3NraXBwZWQgXHUwMDNlPSBTV0FQX0NMVVNURVJfTUFYX1NLSVBQRUQpIHtcbitcdFx0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmZvbGlvc19za2lwcGVkKTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0XHRtb3ZlX3RvID0gXHUwMDI2Zm9saW9zX3NraXBwZWQ7XG4gXHRcdFx0Z290byBtb3ZlO1xuIFx0XHR9XG4gXG5AQCAtMTc2Niw3ICsxNzc1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0XHRza2lwcGVkICs9IG5yX3NraXBwZWRbemlkXTtcbiBcdFx0fVxuIFx0fVxuLVx0Km5yX3NjYW5uZWQgPSB0b3RhbF9zY2FuO1xuK1x0c2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2NhbjtcbiBcdHRyYWNlX21tX3Ztc2Nhbl9scnVfaXNvbGF0ZShzYy1cdTAwM2VyZWNsYWltX2lkeCwgc2MtXHUwMDNlb3JkZXIsIG5yX3RvX3NjYW4sXG4gXHRcdFx0XHQgICAgdG90YWxfc2Nhbiwgc2tpcHBlZCwgbnJfdGFrZW4sIGxydSk7XG4gXHR1cGRhdGVfbHJ1X3NpemVzKGxydXZlYywgbHJ1LCBucl96b25lX3Rha2VuKTtcbkBAIC0yMDE0LDggKzIwMjMsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbi1cdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2Zm9saW9fbGlzdCxcbi1cdFx0XHRcdCAgICAgXHUwMDI2bnJfc2Nhbm5lZCwgc2MsIGxydSk7XG4rXHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFx1MDAyNmZvbGlvX2xpc3QsIHNjLCBscnUpO1xuK1x0bnJfc2Nhbm5lZCA9IHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZDtcbiBcbiBcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIGZpbGUsIG5yX3Rha2VuKTtcbiBcdGl0ZW0gPSBQR1NDQU5fS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XG5AQCAtMjA3MSw3ICsyMDgwLDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0XHQgICAgICAgZW51bSBscnVfbGlzdCBscnUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl90YWtlbjtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcbiBcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XG4gXHRMSVNUX0hFQUQobF9ob2xkKTtcdC8qIFRoZSBmb2xpb3Mgd2hpY2ggd2VyZSBzbmlwcGVkIG9mZiAqL1xuIFx0TElTVF9IRUFEKGxfYWN0aXZlKTtcbkBAIC0yMDg1LDEyICsyMDkzLDExIEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbi1cdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2bF9ob2xkLFxuLVx0XHRcdFx0ICAgICBcdTAwMjZucl9zY2FubmVkLCBzYywgbHJ1KTtcbitcdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2bF9ob2xkLCBzYywgbHJ1KTtcbiBcbiBcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIGZpbGUsIG5yX3Rha2VuKTtcbiBcbi1cdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JFRklMTCwgbnJfc2Nhbm5lZCk7XG4rXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdSRUZJTEwsIHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCk7XG4gXG4gXHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xuIFxuQEAgLTU5MjAsMTAgKzU5MjcsMjEgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFx0XHRmb3JfZWFjaF9ldmljdGFibGVfbHJ1KGxydSkge1xuIFx0XHRcdGlmIChucltscnVdKSB7XG4gXHRcdFx0XHRucl90b19zY2FuID0gbWluKG5yW2xydV0sIFNXQVBfQ0xVU1RFUl9NQVgpO1xuLVx0XHRcdFx0bnJbbHJ1XSAtPSBucl90b19zY2FuO1xuIFxuK1x0XHRcdFx0c2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gMDtcbiBcdFx0XHRcdG5yX3JlY2xhaW1lZCArPSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sXG4gXHRcdFx0XHRcdFx0XHQgICAgbHJ1dmVjLCBzYyk7XG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogaXNvbGF0ZV9scnVfZm9saW9zKCkgbWF5IHNjYW4gZmFyIG1vcmVcbitcdFx0XHRcdCAqIHRoYW4gbnJfdG9fc2NhbiB3aGVuIHRoZSBMUlUgaG9sZHNcbitcdFx0XHRcdCAqIGluZWxpZ2libGUgZm9saW9zICh6b25lLXNraXApIG9yIGxhcmdlXG4rXHRcdFx0XHQgKiBmb2xpb3MuIENoYXJnZSB0aGF0IG92ZXJzaG9vdCBhZ2FpbnN0IHRoZVxuK1x0XHRcdFx0ICogcmVtYWluaW5nIHF1b3RhIChjbGFtcGVkIGJ5IG1pbigpIHNvIGl0XG4rXHRcdFx0XHQgKiBjYW5ub3QgZ28gbmVnYXRpdmUpIHNvIHRoZSBuZXh0IGl0ZXJhdGlvblxuK1x0XHRcdFx0ICogZG9lcyBub3QgcmVzY2FuIHRoZSBzYW1lIHNraXBwZWQgZm9saW9zLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRucltscnVdIC09IG1pbihucltscnVdLFxuK1x0XHRcdFx0XHQgICAgICAgbWF4KG5yX3RvX3NjYW4sIHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCkpO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDE6MDcuNjA0Mzk3MzQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyODI5MTIxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVk1TY2FuIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3Ztc2Nhbi5jYCwgYW5kIGl0J3MgbWFraW5nIHNvbWUgcHJldHR5IHRhcmdldGVkIGNoYW5nZXMgd2l0aGluIHRoZSBwYWdlIHJlY2xhaW0gc3Vic3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyBjcnVjaWFsOyBhbnkgdHdlYWtzIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IGluIHRoZXNlIGNvcmUgZnVuY3Rpb25zLCBuZWVkIGNhcmVmdWwgc2NydXRpbnkuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgYW5kIGBzaHJpbmtfbHJ1dmVjYCwgYm90aCBvZiB3aGljaCBhcmUgY2VudHJhbCB0byB0aGUgZXZpY3Rpb24gYW5kIHNjYW5uaW5nIHByb2Nlc3Nlcy5cblxuU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWx0ZXJzIGBpc29sYXRlX2xydV9mb2xpb3NgIHRvIHVzZSBgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkYCBpbnN0ZWFkIG9mIGEgZGVkaWNhdGVkIHBvaW50ZXIgZm9yIHRoZSBzY2FubmVkIGNvdW50LiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmc7IGl0IGxvb2tzIGxpa2UgdGhlIGludGVudCBpcyB0byBjb25zb2xpZGF0ZSBzdGF0ZSB3aXRoaW4gdGhlIGBzY2AgKHNjYW4pIHN0cnVjdHVyZSwgcG90ZW50aWFsbHkgZm9yIGJldHRlciB0cmFja2luZyBvciBzeW5jaHJvbml6YXRpb24uIEkgbmVlZCB0byBkaWcgaW50byBob3cgdGhpcyBmaWVsZCBpcyB1c2VkIGFuZCBpZiBpdCdzIGNvbnNpc3RlbnQuXG5cblRoZSBsb2dpYyBjaGFuZ2UgcmVnYXJkaW5nIGBtYXhfbnJfc2tpcHBlZGAgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgY2F0Y2hlcyBteSBleWUgdG9vLiBUaGV5J3JlIHRyeWluZyB0byBwcmV2ZW50IGxvY2t1cHMsIHRoYXQgbXVjaCBpcyBjbGVhciwgd2l0aCBhIGxpbWl0IGJhc2VkIG9uIHRoZSB6b25lIG9mIHRoZSBmb2xpby4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHVzaW5nIGBtYXhfbnJfc2tpcHBlZGAsIGJ1dCB0aGUgcGF0Y2ggc2VlbXMgdG8gaGF2ZSByZXdvcmtlZCB0aGF0LiBJdCBsb29rcyBsaWtlIGl0J3Mgbm93IGRlc2lnbmVkIHRvIGJhaWwgb3V0IHdoZW4gaXQgaGl0cyBhIHRocmVzaG9sZCAoYFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRGApIGluc3RlYWQgb2YgZm9yY2luZyB0aGUgaXNvbGF0aW9uIG9mIGZvbGlvcy4gVGhlIGNvbW1lbnQgbWVudGlvbnMgXCJyZWNsYWltaW5nIGluZWxpZ2libGUgZm9saW9zIG9ubHkgaW5mbGF0ZXMgbnJfcmVjbGFpbWVkIGludG8gYSBmYWxzZSBwcm9ncmVzcy5cIiBBaCwgc28gdGhlIGludGVudGlvbiBoZXJlIGlzIHRvIGF2b2lkIGNodXJuaW5nIHRocm91Z2ggZm9saW9zIHRoYXQgY2FuJ3QgYmUgcmVjbGFpbWVkLCB3aGljaCBpcyBhIGNvbW1vbiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGluIHRoZXNlIHN5c3RlbXMuIEknbSBndWVzc2luZyB0aGF0IHRoaXMgaXMgYSBjYXNlIHdoZXJlIHRoZSBcIm1heFwiIGxpbWl0IG1heSBjYXVzZSBhIGhhcmQgbG9vcC5cblxuVGhlIGNoYW5nZXMgdG8gYHNocmlua19scnV2ZWNgIGFyZSBhbHNvIHJlbGV2YW50LiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgbWFuYWdpbmcgdGhlIHF1b3RhIChgbnJbbHJ1XWApIG1vcmUgY2FyZWZ1bGx5LCBmYWN0b3JpbmcgaW4gcG90ZW50aWFsIFwib3ZlcnNob290XCIgZHVyaW5nIGBpc29sYXRlX2xydV9mb2xpb3NgLiBUaGUgY29kZSBpcyBjb21wZW5zYXRpbmcgZm9yIHRoZSBmYWN0IHRoYXQgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgbWlnaHQgc2NhbiBtb3JlIHRoYW4gYG5yX3RvX3NjYW5gLCBkdWUgdG8gc2tpcHBlZCB6b25lcyBvciBsYXJnZSBmb2xpb3MuIFRoZSBnb2FsIGFwcGVhcnMgdG8gYmUgbW9yZSBwcmVjaXNlIGFjY291bnRpbmcsIHByZXZlbnRpbmcgdGhlIG5leHQgaXRlcmF0aW9uIGZyb20gcmV2aXNpdGluZyBza2lwcGVkIGZvbGlvcy4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBpbXByb3ZlbWVudCBpbiBlZmZpY2llbmN5IGFuZCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBzY2FubmluZywgYnV0IEkgbmVlZCB0byBlbnN1cmUgdGhlIG1hdGggaXMgY29ycmVjdCBhbmQgdGhlcmUgaXNuJ3QgYSBuZXcgb2ZmLWJ5LW9uZSBidWcuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBiaWdnZXIgcGljdHVyZS4gYHNocmlua19scnV2ZWNgLCBgc2hyaW5rX2xpc3RgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBpc29sYXRlX2xydV9mb2xpb3NgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGVudHJ5IHBvaW50cyBmb3IgcGFnZSByZWNsYWltIGluIGdlbmVyYWw7IEkgd2lsbCBjaGVjayBgbW0vdm1zY2FuLmNgIHRvIHJlbWluZCBteXNlbGYuIFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCByZWFjaGFibGUsIGFuZCwgaWYgdGhpcyBpcyBhIG1haW5saW5lIHBhdGNoLCBpdCBtdXN0IGhhdmUgZ29uZSB0aHJvdWdoIHNlcmlvdXMgc2NydXRpbnksIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMgaW50byB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIHNlZSBob3cgdGhpcyBhZmZlY3RzIHRoZWlyIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYxMCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAxOjE3Ljg4NzMxMTM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDY2MTQ3MjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odW5zaWduZWQgbG9uZ3x2b2lkfGludHxib29sKVxcXFxzK1thLXpBLVowLTlfXStcXFxcKC4qc2hyaW5rX2xydXZlY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDE6MjEuMzkzOTM0OTQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3OTkxNTMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgc2hyaW5rX2xydXZlY2AgaW4gYG1tL3Ztc2Nhbi5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGF0IGBzaHJpbmtfbHJ1dmVjYCBmdW5jdGlvbi4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJuYWxzLCBJJ20gdGhpbmtpbmcgdGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGlzIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBuYXZpZ2F0ZSBkaXJlY3RseSB0byB0aGUgYG1tL3Ztc2Nhbi5jYCBmaWxlLiBTZWFyY2hpbmcgZm9yIHRoZSBmdW5jdGlvbiBgc2hyaW5rX2xydXZlY2AgZGlyZWN0bHkgc2VlbXMgbGlrZSB0aGUgcXVpY2tlc3QgcGF0aCB0byBkaXNzZWN0aW5nIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBwYWdlIHJlY2xhaW0gc3RyYXRlZ3kuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMToyNC40NzM4NTM2MjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMjYwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX2xydXZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00OTMxPXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00OTY1LSAqL1xcbm1tL3Ztc2Nhbi5jOjQ5NjY6c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy00OTY3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwMTE9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MDMwLVxcbm1tL3Ztc2Nhbi5jOjUwMzE6XFx0bmVlZF9yb3RhdGUgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy01MDMyLVxcbi0tXFxubW0vdm1zY2FuLmM9NTA1Mj1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMjEtXFxubW0vdm1zY2FuLmM6NTEyMjpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01MTIzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMzQtXFxubW0vdm1zY2FuLmM6NTEzNTpcXHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmMtNTEzNi1cXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XFxuLS1cXG5tbS92bXNjYW4uYz01ODY2PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01ODcwLVxcbm1tL3Ztc2Nhbi5jOjU4NzE6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTg3Mi17XFxuLS1cXG5tbS92bXNjYW4uYz01ODc2PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01ODgyLVxcbm1tL3Ztc2Nhbi5jOjU4ODM6c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTU4ODQte1xcbi0tXFxubW0vdm1zY2FuLmMtNTg5NC1cXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFxcdTAwMjZcXHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XFxubW0vdm1zY2FuLmM6NTg5NTpcXHRcXHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTg5Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwODU9c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjE0NC1cXG5tbS92bXNjYW4uYzo2MTQ1OlxcdFxcdHNocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNjE0Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY3NDA9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3NzAtXFx0ICovXFxubW0vdm1zY2FuLmM6Njc3MTpcXHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02NzcyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMToyNC41MjAxODQ3NzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIxODM5Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhIGFuZCB0aGUgY29udGV4dCBpcyBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQ6XG5cbioqSHVudGluZyBEb3duIFNocmluayBGdW5jdGlvbiBDYWxsZXJzKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb25zIHdpdGhpbiB0aGUgY29kZSB3aGVyZSBlaXRoZXIgYHNocmlua19ub2RlX21lbWNnc2Agb3IgYHNocmlua19scnV2ZWNgIGFyZSBiZWluZyBpbnZva2VkLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhbmQgaG93IHRoZXkncmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSByZWNsYWltIHN0cmF0ZWd5LiBJJ20gYXNzdW1pbmcgdGhhdCB0aGVzZSBhcmUgY29yZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBzaHJpbmtpbmcgbWVtb3J5IGZyb20gbm9kZSBvciBMUlUtYmFzZWQgbWVtb3J5IHBvb2xzLiBUaGlzIGNvdWxkIGJlIHRvIGRlYWwgd2l0aCBtZW1vcnkgcHJlc3N1cmUsIHJlY2xhaW0gcGFnZXMsIG9yIG1heWJlIGV2ZW4gaW4gcHJlcGFyYXRpb24gZm9yIHNvbWUgc29ydCBvZiBOVU1BIGJhbGFuY2luZyBvciBtaWdyYXRpb24uXG5cblRoZSBrZXkgaXMgaWRlbnRpZnlpbmcgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGNhbGwgdGhlc2Ugc2hyaW5rIGZ1bmN0aW9ucy4gVGhlIFwibm9uLXN0YXRpY1wiIHBhcnQgaXMgaW1wb3J0YW50OyBpdCBzdWdnZXN0cyB0aGF0IHRoZXNlIGFyZSBmdW5jdGlvbnMgbWVhbnQgdG8gYmUgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSBwb2ludHMgd2l0aGluIHRoZSBrZXJuZWwsIG1ha2luZyB0aGVtIGdvb2QgY2FuZGlkYXRlcyBmb3IgdHJhY2luZyB0aGUgY2FsbCBmbG93IGFuZCB1bmRlcnN0YW5kIHdoaWNoIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHRyaWdnZXJpbmcgbWVtb3J5IHNocmlua2luZy4gTm93LCBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBzb3VyY2UgY29kZSBhbmQgZmluZCB0aGUgY2FsbCBzaXRlcyBmb3IgdGhlc2UgY3JpdGljYWwgZnVuY3Rpb25zLiBUaGF0J3MgdGhlIGZpcnN0IHN0ZXAuIE5leHQsIEkgbmVlZCB0byB3b3JrIG91dCB0aGUgd2lkZXIgY29udGV4dCBvZiBob3cgZWFjaCBmdW5jdGlvbiBjYWxscyB0aGUgc2hyaW5rIG1ldGhvZHMsIHdoYXQgZGF0YSBpdCBwYXNzZXMgdG8gdGhlc2UgbWV0aG9kcywgYW5kIGluIHdoaWNoIGNpcmN1bXN0YW5jZXMgdGhlc2UgY2FsbHMgb2NjdXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMToyNy45NDIwMjYwMjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NTE2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX25vZGVfbWVtY2dzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTYwMzM9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy02MDg0LVxcbm1tL3Ztc2Nhbi5jOjYwODU6c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYwODYte1xcbi0tXFxubW0vdm1zY2FuLmM9NjE2ND1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxODgtXFxubW0vdm1zY2FuLmM6NjE4OTpcXHRzaHJpbmtfbm9kZV9tZW1jZ3MocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02MTkwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMToyNy45ODc2ODEzMzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzY2NzQ3NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LlxuXG4qKlRyYWNpbmcgdGhlIEV4ZWN1dGlvbiBQYXRoOiBgc2hyaW5rX25vZGVgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHNocmlua19ub2RlYCBmdW5jdGlvbi4gTXkgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcGxhY2Ugd2l0aGluIHRoZSBicm9hZGVyIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbiBjb250ZXh0LiBXaGVyZSBpcyBpdCBjYWxsZWQ/IFdoYXQncyB0aGUgcHJlY29uZGl0aW9uIGZvciBjYWxsaW5nIGl0PyBBbmQgd2hhdCBzdGF0ZSBkb2VzIGl0IGxlYXZlIHRoZSBzeXN0ZW0gaW4gYWZ0ZXJ3YXJkPyBJIGltbWVkaWF0ZWx5IHN0YXJ0IHZpc3VhbGl6aW5nIHRoZSBkYXRhIHN0cnVjdHVyZSBpbiBteSBoZWFkLCBpdHMgbm9kZXMgYW5kIGxpbmtzLCBhbnRpY2lwYXRpbmcgaG93IGBzaHJpbmtfbm9kZWAgbWlnaHQgYWx0ZXIgdGhlbS4gSXMgdGhpcyBhIHRyZWUsIGEgZ3JhcGgsIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgdHlwZSBvZiBzdHJ1Y3R1cmUgZHJhbWF0aWNhbGx5IGluZmx1ZW5jZXMgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uXG5cbkkgd2FudCB0byBrbm93IHRoZSBcIndoeVwiIGJlaGluZCB0aGlzIGZ1bmN0aW9uJ3MgZXhpc3RlbmNlLCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRlc2lnbiBnb2Fscy4gSXMgdGhpcyBhYm91dCBtZW1vcnkgb3B0aW1pemF0aW9uPyBQZXJmb3JtYW5jZSB0dW5pbmc/IE9yIHBlcmhhcHMgbWFpbnRhaW5pbmcgc29tZSBraW5kIG9mIHN0cnVjdHVyYWwgaW52YXJpYW50PyBBIHNtYWxsZXIgbm9kZSBvZnRlbiBzdWdnZXN0cyB3ZSdyZSBjb25zb2xpZGF0aW5nIGluZm9ybWF0aW9uLCByZW1vdmluZyByZWR1bmRhbmNpZXMsIG9yIHBlcmhhcHMgcHJlcGFyaW5nIGZvciBhIG1vcmUgZWZmaWNpZW50IHNlYXJjaCBvciB0cmF2ZXJzYWwuIEkgc3RhcnQgbWVudGFsbHkgY29tcG9zaW5nIHRlc3QgY2FzZXM7IGVkZ2UgY2FzZXMsIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIGFuZCB0eXBpY2FsIHNjZW5hcmlvcywgdG8gbWFrZSBzdXJlIHRoZSBwcm9jZXNzIGlzIHJvYnVzdCwgYXMgZXhwZWN0ZWQuXG5cbkkgd2lsbCBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIFwic2hyaW5raW5nXCIgaXMgYWNoaWV2ZWQ6IGRvZXMgaXQgaW52b2x2ZSBub2RlIG1lcmdpbmcsIGRlYWxsb2NhdGlvbiwgcG9pbnRlciBhZGp1c3RtZW50cywgb3IgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBjcmVhdGl2ZS4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgaXQgcmVsaWVzIHVwb24/IEhvdyBhcmUgY29uY3VycmVudCBhY2Nlc3MgY29uY2VybnMgaGFuZGxlZCwgaWYgYW55PyBJJ2xsIHByb2JhYmx5IHNwZW5kIGEgZ29vZCBhbW91bnQgb2YgdGltZSByZXZpZXdpbmcgdGhlIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgaWYgYXZhaWxhYmxlLCBvciBpZiBub3QsIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBvcGVyYXRpb24gZml0cyBpbnRvIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGZsb3csIHN0ZXAgYnkgc3RlcCwgYW5kIG1lbnRhbGx5IHZlcmlmeSB0aGF0IHRoZXJlIGFyZSBubyBsZWFrcyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy4gVWx0aW1hdGVseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYHNocmlua19ub2RlYCBmdW5jdGlvbiAqbWVhbnMqIGluIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzAwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMTozMi4zNTQ0MzIyNDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODc4NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTE5NTM9c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXFxuLS1cXG5tbS92bXNjYW4uYy0xOTkxLS8qXFxubW0vdm1zY2FuLmM6MTk5MjogKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfbm9kZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyXFxubW0vdm1zY2FuLmMtMTk5My0gKiBvZiByZWNsYWltZWQgcGFnZXNcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMjI9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTQyLVxcbm1tL3Ztc2Nhbi5jOjUxNDM6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01MTQ0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4NzE9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01ODc1LVxcbm1tL3Ztc2Nhbi5jOjU4NzY6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01ODc3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMzM9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy02MDg0LVxcbm1tL3Ztc2Nhbi5jOjYwODU6c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYwODYte1xcbi0tXFxubW0vdm1zY2FuLmMtNjE2My1cXG5tbS92bXNjYW4uYzo2MTY0OnN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYxNjUte1xcbi0tXFxubW0vdm1zY2FuLmMtNjE3MS1cXHRcXHRtZW1zZXQoXFx1MDAyNnNjLVxcdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVxcdTAwM2VucikpO1xcbm1tL3Ztc2Nhbi5jOjYxNzI6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYxNzMtXFxuLS1cXG5tbS92bXNjYW4uYy02MTg4LVxcbm1tL3Ztc2Nhbi5jOjYxODk6XFx0c2hyaW5rX25vZGVfbWVtY2dzKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjE5MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYzNDk9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjQyNy1cXHRcXHRsYXN0X3BnZGF0ID0gem9uZS1cXHUwMDNlem9uZV9wZ2RhdDtcXG5tbS92bXNjYW4uYzo2NDI4OlxcdFxcdHNocmlua19ub2RlKHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02NDI5LVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2OTQ9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02NzM5LS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cXG5tbS92bXNjYW4uYzo2NzQwOnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjc0MS1cXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuLS1cXG5tbS92bXNjYW4uYy02NzY2LVxcdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxcbm1tL3Ztc2Nhbi5jOjY3Njc6XFx0ICogaWYgd2UgZG9uJ3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XFxubW0vdm1zY2FuLmMtNjc2OC1cXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJ3MgYXMgd2VsbC4gV2UgaGFja1xcbi0tXFxubW0vdm1zY2FuLmM9Njg4OD1zdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy02OTEyLVxcdFxcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0J3NcXG5tbS92bXNjYW4uYzo2OTEzOlxcdFxcdCAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlXFxubW0vdm1zY2FuLmMtNjkxNC1cXHRcXHQgKiBoYXMgZHJvcHBlZCBvcmRlciwgc2ltcGx5IGVuc3VyZSB0aGVyZSBhcmUgZW5vdWdoXFxuLS1cXG5tbS92bXNjYW4uYz02OTcwPXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwMDgtICovXFxubW0vdm1zY2FuLmM6NzAwOTpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03MDEwLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwMjUtXFx0ICovXFxubW0vdm1zY2FuLmM6NzAyNjpcXHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTcwMjctXFxuLS1cXG5tbS92bXNjYW4uYz03MDgyPXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MTkxLVxcbm1tL3Ztc2Nhbi5jOjcxOTI6XFx0XFx0LyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovXFxubW0vdm1zY2FuLmMtNzE5My1cXHRcXHRzYy5ucl9zY2FubmVkID0gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyMDMtXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6NzIwNDpcXHRcXHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcXHUwMDI2c2MpKVxcbm1tL3Ztc2Nhbi5jLTcyMDUtXFx0XFx0XFx0cmFpc2VfcHJpb3JpdHkgPSBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc3NTk9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS92bXNjYW4uYy03Nzg2LVxcdFxcdGRvIHtcXG5tbS92bXNjYW4uYzo3Nzg3OlxcdFxcdFxcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNzc4OC1cXHRcXHR9IHdoaWxlIChzYy1cXHUwMDNlbnJfcmVjbGFpbWVkIFxcdTAwM2MgbnJfcGFnZXMgXFx1MDAyNlxcdTAwMjYgLS1zYy1cXHUwMDNlcHJpb3JpdHkgXFx1MDAzZT0gMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAxOjMyLjQwMzMxNzMyM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODYzNDc2MjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIGNvZGUsIGJyZWFraW5nIGRvd24gdGhlIGZ1bmN0aW9uIGFjY2Vzc2liaWxpdHk6XG5cbioqQXNzZXNzaW5nIFBvdGVudGlhbCBFbnRyeSBQb2ludHMgZm9yIE1lbW9yeSBSZWNsYW1hdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gdHJpZ2dlciBtZW1vcnkgcmVjbGFpbSBpbiB0aGlzIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHRyeV90b19mcmVlX3BhZ2VzYCBzZWVtcyBsaWtlIGEgc29saWQgbm9uLXN0YXRpYyBlbnRyeSBwb2ludC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwbGFjZSwgYW5kIGl0IHdpbGwgYmUgYWNjZXNzaWJsZSB0byB3aGF0ZXZlciBpcyBjYWxsaW5nIHRoZSBmdW5jdGlvbi5cblxuTm93LCBsZXQncyBzZWUsIEkgYWxzbyBzZWUgdGhhdCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAgaXMgbm9uLXN0YXRpYyBhcyB3ZWxsLiBHb29kIHRvIGtub3cuIEl0IGV4cGFuZHMgdGhlIHBvc3NpYmxlIGVudHJ5IHBvaW50cyBmb3IgbWUuXG5cbkhtbSwgaW50ZXJlc3RpbmcuIFRoZW4sIGBfX25vZGVfcmVjbGFpbWAgaXMgc3RhdGljLCB3aGljaCBtZWFucyBpdCBoYXMgbGltaXRlZCBzY29wZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIG1pZ2h0IG1lYW4gaXQncyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uIEJ1dCwgdGhlIGZ1bmN0aW9uIGBub2RlX3JlY2xhaW1gIGl0c2VsZiBpcyBub24tc3RhdGljLCB3aGljaCBtZWFucyBpdCB3aWxsIGJlIGV4cG9zZWQgZm9yIGV4dGVybmFsIHVzZS4gSSB0aGluayB0aGF0IGlzIGFuIGltcG9ydGFudCBwb2ludCB0byBub3RlLlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIHNlZSB3aGF0IGl0J3MgcmVhbGx5IGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjUzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDE6MzYuMjY2Nzk1OTQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU1NjczNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz02NDQxPXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy02NDcxLSAqL1xcbm1tL3Ztc2Nhbi5jOjY0NzI6c3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG5tbS92bXNjYW4uYy02NDczLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYz02NjE0PXN0YXRpYyBib29sIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjY5My1cXG5tbS92bXNjYW4uYzo2Njk0OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTY2OTUtXFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vdm1zY2FuLmMtNjcyOC1cXG5tbS92bXNjYW4uYzo2NzI5OlxcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTY3MzAtXFxuLS1cXG5tbS92bXNjYW4uYz02NzgwPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02ODExLVxcbm1tL3Ztc2Nhbi5jOjY4MTI6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjgxMy1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc1Nzg9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYy03NTk3LVxcbm1tL3Ztc2Nhbi5jOjc1OTg6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNzU5OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDE6MzYuMzEzMzU2NzkxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzc2MTczMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IHB1enpsZS5cblxuKipEaWdnaW5nIGludG8gTWVtb3J5IFJlY2xhbWF0aW9uIE1lY2hhbmlzbXMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUga2VybmVsIGFjdHVhbGx5IGZyZWVzIHVwIG1lbW9yeS4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGEgZmV3IGtleSBmdW5jdGlvbnM6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIHRoZSBtb3JlIGdlbmVyYWwgYHNocmlua19hbGxfbWVtb3J5YC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBtYWluIHBsYXllcnMgaW4gdGhlIHJlY2xhbWF0aW9uIGdhbWUuIEJ1dCB0aGVuIEkgaGF2ZSB0byB0aGluayBhYm91dCB0aGUgbW9yZSBwcm9hY3RpdmUgZWxlbWVudCwgdGhlIGJhY2tncm91bmQgcmVjbGFpbSBhY3Rpdml0eS4gSSdtIHJlY2FsbGluZyB0aGF0IGBiYWxhbmNlX3BnZGF0YCBwbGF5cyBhIHBhcnQsIGFuZCB0aGF0J3MgdHJpZ2dlcmVkIGJ5IGBrc3dhcGRgLiBBbHJpZ2h0LCB0aGF0J3MgbXkgbmV4dCBwb2ludCBvZiBmb2N1cy4gSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBob3cgYGtzd2FwZGAgd29ya3MgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDk0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDE6MzkuMzkwOTc2ODcyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM5NDg2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrc3dhcGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MjQgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL3Ztc2Nhbi5jLTUtICogIFN3YXAgcmVvcmdhbmlzZWQgMjkuMTIuOTUsIFN0ZXBoZW4gVHdlZWRpZS5cXG5tbS92bXNjYW4uYzo2OiAqICBrc3dhcGQgYWRkZWQ6IDcuMS45NiAgc2N0XFxubW0vdm1zY2FuLmM6NzogKiAgUmVtb3ZlZCBrc3dhcGRfY3RsIGxpbWl0cywgYW5kIHN3YXAgb3V0IGFzIG1hbnkgcGFnZXMgYXMgbmVlZGVkXFxubW0vdm1zY2FuLmMtOC0gKiAgdG8gYnJpbmcgdGhlIHN5c3RlbSBiYWNrIHRvIGZyZWVwYWdlcy5oaWdoOiAyLjQuOTcsIFJpayB2YW4gUmllbC5cXG5tbS92bXNjYW4uYzo5OiAqICBab25lIGF3YXJlIGtzd2FwZCBzdGFydGVkIDAyLzAwLCBLYW5vaiBTYXJjYXIgKGthbm9qQHNnaS5jb20pLlxcbm1tL3Ztc2Nhbi5jLTEwLSAqICBNdWx0aXF1ZXVlIFZNIHN0YXJ0ZWQgNS44LjAwLCBSaWsgdmFuIFJpZWwuXFxuLS1cXG5tbS92bXNjYW4uYz00NDc9c3RhdGljIGludCByZWNsYWltZXJfb2Zmc2V0KHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDUyLVxcbm1tL3Ztc2Nhbi5jOjQ1MzpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy00NTQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5tbS92bXNjYW4uYz00ODM9c3RhdGljIGJvb2wgc2tpcF90aHJvdHRsZV9ub3Byb2dyZXNzKHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy00ODgtXFx0LypcXG5tbS92bXNjYW4uYzo0ODk6XFx0ICogSWYga3N3YXBkIGlzIGRpc2FibGVkLCByZXNjaGVkdWxlIGlmIG5lY2Vzc2FyeSBidXQgZG8gbm90XFxubW0vdm1zY2FuLmMtNDkwLVxcdCAqIHRocm90dGxlIGFzIHRoZSBzeXN0ZW0gaXMgbGlrZWx5IG5lYXIgT09NLlxcbm1tL3Ztc2Nhbi5jLTQ5MS1cXHQgKi9cXG5tbS92bXNjYW4uYzo0OTI6XFx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSlcXG5tbS92bXNjYW4uYy00OTMtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS92bXNjYW4uYz01MTE9dm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNy1cXHQvKlxcbm1tL3Ztc2Nhbi5jOjUxODpcXHQgKiBEbyBub3QgdGhyb3R0bGUgdXNlciB3b3JrZXJzLCBrdGhyZWFkcyBvdGhlciB0aGFuIGtzd2FwZCBvclxcbm1tL3Ztc2Nhbi5jLTUxOS1cXHQgKiB3b3JrcXVldWVzLiBUaGV5IG1heSBiZSByZXF1aXJlZCBmb3IgcmVjbGFpbSB0byBtYWtlXFxuLS1cXG5tbS92bXNjYW4uYy01MjEtXFx0ICovXFxubW0vdm1zY2FuLmM6NTIyOlxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTUyMy1cXHQgICAgY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoUEZfVVNFUl9XT1JLRVJ8UEZfS1RIUkVBRCkpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTk2NT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19kZW1vdGVfZm9saW8oc3RydWN0IGZvbGlvICpzcmMsXFxuLS1cXG5tbS92bXNjYW4uYy05NzQtXFx0ICogbWFrZSBzdXJlIHdlIGFsbG9jYXRlIGZyb20gdGhlIHRhcmdldCBub2RlIGZpcnN0IGFsc28gdHJ5aW5nIHRvXFxubW0vdm1zY2FuLmM6OTc1OlxcdCAqIGRlbW90ZSBvciByZWNsYWltIHBhZ2VzIGZyb20gdGhlIHRhcmdldCBub2RlIHZpYSBrc3dhcGQgaWYgd2UgYXJlXFxubW0vdm1zY2FuLmMtOTc2LVxcdCAqIGxvdyBvbiBmcmVlIG1lbW9yeSBvbiB0YXJnZXQgbm9kZS4gSWYgd2UgZG9uJ3QgZG8gdGhpcyBhbmQgaWZcXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwNTg9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTEyMS1cXHRcXHQgKiBUaGUgbnVtYmVyIG9mIGRpcnR5IHBhZ2VzIGRldGVybWluZXMgaWYgYSBub2RlIGlzIG1hcmtlZFxcbm1tL3Ztc2Nhbi5jOjExMjI6XFx0XFx0ICogcmVjbGFpbV9jb25nZXN0ZWQuIGtzd2FwZCB3aWxsIHN0YWxsIGFuZCBzdGFydCB3cml0aW5nXFxubW0vdm1zY2FuLmMtMTEyMy1cXHRcXHQgKiBmb2xpb3MgaWYgdGhlIHRhaWwgb2YgdGhlIExSVSBpcyBhbGwgZGlydHkgdW5xdWV1ZWQgZm9saW9zLlxcbi0tXFxubW0vdm1zY2FuLmMtMTE5MC1cXHRcXHRcXHQvKiBDYXNlIDEgYWJvdmUgKi9cXG5tbS92bXNjYW4uYzoxMTkxOlxcdFxcdFxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtMTE5Mi1cXHRcXHRcXHQgICAgZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vdm1zY2FuLmM9MTU5NT11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS92bXNjYW4uYy0xNjIwLVxcdCAqIFdlIHNob3VsZCBiZSBzYWZlIGhlcmUgc2luY2Ugd2UgYXJlIG9ubHkgZGVhbGluZyB3aXRoIGZpbGUgcGFnZXMgYW5kXFxubW0vdm1zY2FuLmM6MTYyMTpcXHQgKiB3ZSBhcmUgbm90IGtzd2FwZCBhbmQgdGhlcmVmb3JlIGNhbm5vdCB3cml0ZSBkaXJ0eSBmaWxlIHBhZ2VzLiBCdXRcXG5tbS92bXNjYW4uYy0xNjIyLVxcdCAqIGNhbGwgbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKSBhbnl3YXksIGp1c3QgaW4gY2FzZSB0aGVzZSBjb25kaXRpb25zXFxuLS1cXG5tbS92bXNjYW4uYz0xODM0PXN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLFxcbi0tXFxubW0vdm1zY2FuLmMtMTgzOS1cXG5tbS92bXNjYW4uYzoxODQwOlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTE4NDEtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmM9Mzc5OD1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4MDEtXFxubW0vdm1zY2FuLmM6MzgwMjpcXHRpZiAocGdkYXQgXFx1MDAyNlxcdTAwMjYgY3VycmVudF9pc19rc3dhcGQoKSkge1xcbm1tL3Ztc2Nhbi5jLTM4MDMtXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHdhbGspO1xcbi0tXFxubW0vdm1zY2FuLmMtMzgwNi1cXHR9IGVsc2UgaWYgKCF3YWxrIFxcdTAwMjZcXHUwMDI2IGZvcmNlX2FsbG9jKSB7XFxubW0vdm1zY2FuLmM6MzgwNzpcXHRcXHRWTV9XQVJOX09OX09OQ0UoY3VycmVudF9pc19rc3dhcGQoKSk7XFxubW0vdm1zY2FuLmMtMzgwOC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTM4MTg9c3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKVxcbi0tXFxubW0vdm1zY2FuLmMtMzgyNi1cXG5tbS92bXNjYW4uYzozODI3OlxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy0zODI4LVxcdFxcdGtmcmVlKHdhbGspO1xcbi0tXFxubW0vdm1zY2FuLmM9NDE0MD1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDE0NS1cXG5tbS92bXNjYW4uYzo0MTQ2OlxcdFZNX1dBUk5fT05fT05DRSghY3VycmVudF9pc19rc3dhcGQoKSk7XFxubW0vdm1zY2FuLmMtNDE0Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5MzE9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5NDItXFx0LyogY2hlY2sgdGhlIG9yZGVyIHRvIGV4Y2x1ZGUgY29tcGFjdGlvbi1pbmR1Y2VkIHJlY2xhaW0gKi9cXG5tbS92bXNjYW4uYzo0OTQzOlxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSB8fCBzYy1cXHUwMDNlb3JkZXIpXFxubW0vdm1zY2FuLmMtNDk0NC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS92bXNjYW4uYy00OTU2LVxcbm1tL3Ztc2Nhbi5jOjQ5NTc6XFx0Lyoga3N3YXBkIHNob3VsZCBhYm9ydCBpZiBhbGwgZWxpZ2libGUgem9uZXMgYXJlIHNhZmUgKi9cXG5tbS92bXNjYW4uYy00OTU4LVxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmM9NTE0Mz1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE2NS1cXG5tbS92bXNjYW4uYzo1MTY2OlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTUxNjctXFx0XFx0c2MtXFx1MDAzZW5yX3JlY2xhaW1lZCA9IDA7XFxuLS1cXG5tbS92bXNjYW4uYy01MTczLVxcbm1tL3Ztc2Nhbi5jOjUxNzQ6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtNTE3NS1cXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxODEtXFx0aWYgKHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgXFx1MDAzZSByZWNsYWltZWQpXFxubW0vdm1zY2FuLmM6NTE4MjpcXHRcXHRrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBzYy1cXHUwMDNlb3JkZXIsIHNjLVxcdTAwM2VyZWNsYWltX2lkeCk7XFxubW0vdm1zY2FuLmMtNTE4My19XFxuLS1cXG5tbS92bXNjYW4uYz01ODgzPXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5MTItXFx0ICogREVGX1BSSU9SSVRZIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGZhY3Qgd2UgYXJlIGRpcmVjdFxcbm1tL3Ztc2Nhbi5jOjU5MTM6XFx0ICogcmVjbGFpbWluZyBpbXBsaWVzIHRoYXQga3N3YXBkIGlzIG5vdCBrZWVwaW5nIHVwIGFuZCBpdCBpcyBiZXN0IHRvXFxubW0vdm1zY2FuLmMtNTkxNC1cXHQgKiBkbyBhIGJhdGNoIG9mIHdvcmsgYXQgb25jZS4gRm9yIG1lbWNnIHJlY2xhaW0gb25lIGNoZWNrIGlzIG1hZGUgdG9cXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5MTctXFx0ICovXFxubW0vdm1zY2FuLmM6NTkxODpcXHRwcm9wb3J0aW9uYWxfcmVjbGFpbSA9ICghY2dyb3VwX3JlY2xhaW0oc2MpIFxcdTAwMjZcXHUwMDI2ICFjdXJyZW50X2lzX2tzd2FwZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtNTkxOS1cXHRcXHRcXHRcXHRzYy1cXHUwMDNlcHJpb3JpdHkgPT0gREVGX1BSSU9SSVRZKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5NTMtXFx0XFx0LypcXG5tbS92bXNjYW4uYzo1OTU0OlxcdFxcdCAqIEZvciBrc3dhcGQgYW5kIG1lbWNnLCByZWNsYWltIGF0IGxlYXN0IHRoZSBudW1iZXIgb2YgcGFnZXNcXG5tbS92bXNjYW4uYy01OTU1LVxcdFxcdCAqIHJlcXVlc3RlZC4gRW5zdXJlIHRoYXQgdGhlIGFub24gYW5kIGZpbGUgTFJVcyBhcmUgc2Nhbm5lZFxcbi0tXFxubW0vdm1zY2FuLmM9NjA4NT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDk5LVxcdCAqXFxubW0vdm1zY2FuLmM6NjEwMDpcXHQgKiBGb3Iga3N3YXBkLCByZWxpYWJsZSBmb3J3YXJkIHByb2dyZXNzIGlzIG1vcmUgaW1wb3J0YW50XFxubW0vdm1zY2FuLmMtNjEwMS1cXHQgKiB0aGFuIGEgcXVpY2sgcmV0dXJuIHRvIGlkbGUuIEFsd2F5cyBkbyBmdWxsIHdhbGtzLlxcbm1tL3Ztc2Nhbi5jLTYxMDItXFx0ICovXFxubW0vdm1zY2FuLmM6NjEwMzpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSB8fCBzYy1cXHUwMDNlbWVtY2dfZnVsbF93YWxrKVxcbm1tL3Ztc2Nhbi5jLTYxMDQtXFx0XFx0cGFydGlhbCA9IE5VTEw7XFxuLS1cXG5tbS92bXNjYW4uYz02MTY0PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjIwMi1cXG5tbS92bXNjYW4uYzo2MjAzOlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKSB7XFxubW0vdm1zY2FuLmMtNjIwNC1cXHRcXHQvKlxcbi0tXFxubW0vdm1zY2FuLmMtNjIxNS1cXHRcXHQgKlxcbm1tL3Ztc2Nhbi5jOjYyMTY6XFx0XFx0ICogT25jZSBhIG5vZGUgaXMgZmxhZ2dlZCBQR0RBVF9XUklURUJBQ0ssIGtzd2FwZCB3aWxsXFxubW0vdm1zY2FuLmMtNjIxNy1cXHRcXHQgKiBjb3VudCB0aGUgbnVtYmVyIG9mIHBhZ2VzIHVuZGVyIHBhZ2VzIGZsYWdnZWQgZm9yXFxuLS1cXG5tbS92bXNjYW4uYy02MjI0LVxcdFxcdC8qXFxubW0vdm1zY2FuLmM6NjIyNTpcXHRcXHQgKiBJZiBrc3dhcGQgc2NhbnMgcGFnZXMgbWFya2VkIGZvciBpbW1lZGlhdGVcXG5tbS92bXNjYW4uYy02MjI2LVxcdFxcdCAqIHJlY2xhaW0gYW5kIHVuZGVyIHdyaXRlYmFjayAobnJfaW1tZWRpYXRlKSwgaXRcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyNDUtXFxubW0vdm1zY2FuLmM6NjI0NjpcXHRcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy02MjQ3LVxcdFxcdFxcdHNldF9iaXQoTFJVVkVDX05PREVfQ09OR0VTVEVELCBcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxubW0vdm1zY2FuLmMtNjI1MS1cXHQgKiBTdGFsbCBkaXJlY3QgcmVjbGFpbSBmb3IgSU8gY29tcGxldGlvbnMgaWYgdGhlIGxydXZlYyBpc1xcbm1tL3Ztc2Nhbi5jOjYyNTI6XFx0ICogbm9kZSBpcyBjb25nZXN0ZWQuIEFsbG93IGtzd2FwZCB0byBjb250aW51ZSB1bnRpbCBpdFxcbm1tL3Ztc2Nhbi5jLTYyNTMtXFx0ICogc3RhcnRzIGVuY291bnRlcmluZyB1bnF1ZXVlZCBkaXJ0eSBwYWdlcyBvciBjeWNsaW5nIHRocm91Z2hcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyNTUtXFx0ICovXFxubW0vdm1zY2FuLmM6NjI1NjpcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgXFx1MDAyNlxcdTAwMjYgY3VycmVudF9tYXlfdGhyb3R0bGUoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTYyNTctXFx0ICAgICFzYy1cXHUwMDNlaGliZXJuYXRpb25fbW9kZSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vdm1zY2FuLmMtNjI2OC1cXHQgKiBzbGVlcC4gT24gcmVjbGFpbSBwcm9ncmVzcywgcmVzZXQgdGhlIGZhaWx1cmUgY291bnRlci4gQVxcbm1tL3Ztc2Nhbi5jOjYyNjk6XFx0ICogc3VjY2Vzc2Z1bCBkaXJlY3QgcmVjbGFpbSBydW4gd2lsbCByZXZpdmUgYSBkb3JtYW50IGtzd2FwZC5cXG5tbS92bXNjYW4uYy02MjcwLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jLTYyNzEtXFx0aWYgKHJlY2xhaW1hYmxlKVxcbm1tL3Ztc2Nhbi5jOjYyNzI6XFx0XFx0a3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhwZ2RhdCwgc2MtXFx1MDAzZW9yZGVyLCBzYy1cXHUwMDNlcmVjbGFpbV9pZHgpO1xcbm1tL3Ztc2Nhbi5jLTYyNzMtXFx0ZWxzZSBpZiAoc2MtXFx1MDAzZWNhY2hlX3RyaW1fbW9kZSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYzMTE9c3RhdGljIHZvaWQgY29uc2lkZXJfcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzMjctXFx0LypcXG5tbS92bXNjYW4uYzo2MzI4OlxcdCAqIERvIG5vdCB0aHJvdHRsZSBrc3dhcGQgb3IgY2dyb3VwIHJlY2xhaW0gb24gTk9QUk9HUkVTUyBhcyBpdCB3aWxsXFxubW0vdm1zY2FuLmMtNjMyOS1cXHQgKiB0aHJvdHRsZSBvbiBWTVNDQU5fVEhST1RUTEVfV1JJVEVCQUNLIGlmIHRoZXJlIGFyZSB0b28gbWFueSBwYWdlc1xcbi0tXFxubW0vdm1zY2FuLmMtNjMzMi1cXHQgKi9cXG5tbS92bXNjYW4uYzo2MzMzOlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIHx8IGNncm91cF9yZWNsYWltKHNjKSlcXG5tbS92bXNjYW4uYy02MzM0LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY1Njk9c3RhdGljIGJvb2wgYWxsb3dfZGlyZWN0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY1NzYtXFxubW0vdm1zY2FuLmM6NjU3NzpcXHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxcbm1tL3Ztc2Nhbi5jLTY1NzgtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS92bXNjYW4uYy02NTkzLVxcbm1tL3Ztc2Nhbi5jOjY1OTQ6XFx0Lyoga3N3YXBkIG11c3QgYmUgYXdha2UgaWYgcHJvY2Vzc2VzIGFyZSBiZWluZyB0aHJvdHRsZWQgKi9cXG5tbS92bXNjYW4uYzo2NTk1OlxcdGlmICghd21hcmtfb2sgXFx1MDAyNlxcdTAwMjYgd2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0KSkge1xcbm1tL3Ztc2Nhbi5jOjY1OTY6XFx0XFx0aWYgKFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCkgXFx1MDAzZSBaT05FX05PUk1BTClcXG5tbS92bXNjYW4uYzo2NTk3OlxcdFxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIFpPTkVfTk9STUFMKTtcXG5tbS92bXNjYW4uYy02NTk4LVxcbm1tL3Ztc2Nhbi5jOjY1OTk6XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQpO1xcbm1tL3Ztc2Nhbi5jLTY2MDAtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmMtNjYwNy0gKiBhbmQgdGhlIFBGTUVNQUxMT0MgcmVzZXJ2ZSBmb3IgdGhlIHByZWZlcnJlZCBub2RlIGlzIGdldHRpbmcgZGFuZ2Vyb3VzbHlcXG5tbS92bXNjYW4uYzo2NjA4OiAqIGRlcGxldGVkLiBrc3dhcGQgd2lsbCBjb250aW51ZSB0byBtYWtlIHByb2dyZXNzIGFuZCB3YWtlIHRoZSBwcm9jZXNzZXNcXG5tbS92bXNjYW4uYy02NjA5LSAqIHdoZW4gdGhlIGxvdyB3YXRlcm1hcmsgaXMgcmVhY2hlZC5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2MTQ9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy02NjQ0LVxcdCAqIFRocm90dGxpbmcgaXMgYmFzZWQgb24gdGhlIGZpcnN0IHVzYWJsZSBub2RlIGFuZCB0aHJvdHRsZWQgcHJvY2Vzc2VzXFxubW0vdm1zY2FuLmM6NjY0NTpcXHQgKiB3YWl0IG9uIGEgcXVldWUgdW50aWwga3N3YXBkIG1ha2VzIHByb2dyZXNzIGFuZCB3YWtlcyB0aGVtLiBUaGVyZVxcbm1tL3Ztc2Nhbi5jLTY2NDYtXFx0ICogaXMgYW4gYWZmaW5pdHkgdGhlbiBiZXR3ZWVuIHByb2Nlc3NlcyB3YWtpbmcgdXAgYW5kIHdoZXJlIHJlY2xhaW1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTY2NzQtXFx0ICogdHJhbnNhY3Rpb24gaW4gdGhlIGNhc2Ugb2YgYSBmaWxlc3lzdGVtIGxpa2UgZXh0WzN8NF0uIEluIHRoaXMgY2FzZSxcXG5tbS92bXNjYW4uYzo2Njc1OlxcdCAqIGl0IGlzIG5vdCBzYWZlIHRvIGJsb2NrIG9uIHBmbWVtYWxsb2Nfd2FpdCBhcyBrc3dhcGQgY291bGQgYmVcXG5tbS92bXNjYW4uYy02Njc2LVxcdCAqIGJsb2NrZWQgd2FpdGluZyBvbiB0aGUgc2FtZSBsb2NrLiBJbnN0ZWFkLCB0aHJvdHRsZSBmb3IgdXAgdG8gYVxcbi0tXFxubW0vdm1zY2FuLmMtNjY4Mi1cXHRlbHNlXFxubW0vdm1zY2FuLmM6NjY4MzpcXHRcXHQvKiBUaHJvdHRsZSB1bnRpbCBrc3dhcGQgd2FrZXMgdGhlIHByb2Nlc3MgKi9cXG5tbS92bXNjYW4uYy02Njg0LVxcdFxcdHdhaXRfZXZlbnRfa2lsbGFibGUoem9uZS1cXHUwMDNlem9uZV9wZ2RhdC1cXHUwMDNlcGZtZW1hbGxvY193YWl0LFxcbi0tXFxubW0vdm1zY2FuLmM9NjgyMT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjgzMC1cXG5tbS92bXNjYW4uYzo2ODMxOnN0YXRpYyB2b2lkIGtzd2FwZF9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02ODMyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4ODg9c3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNjkxMC1cXHRcXHQgKlxcbm1tL3Ztc2Nhbi5jOjY5MTE6XFx0XFx0ICogSG93ZXZlciwga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2ggdGhpcyBvblxcbm1tL3Ztc2Nhbi5jLTY5MTItXFx0XFx0ICogaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuIE9uY2UgaXQnc1xcbm1tL3Ztc2Nhbi5jOjY5MTM6XFx0XFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcXG5tbS92bXNjYW4uYy02OTE0LVxcdFxcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NDUtXFx0ICogbmVlZCBiYWxhbmNpbmcgYnkgZGVmaW5pdGlvbi4gVGhpcyBjYW4gaGFwcGVuIGlmIGEgem9uZS1yZXN0cmljdGVkXFxubW0vdm1zY2FuLmM6Njk0NjpcXHQgKiBhbGxvY2F0aW9uIHRyaWVzIHRvIHdha2UgYSByZW1vdGUga3N3YXBkLlxcbm1tL3Ztc2Nhbi5jLTY5NDctXFx0ICovXFxuLS1cXG5tbS92bXNjYW4uYz02OTU1PXN0YXRpYyB2b2lkIGNsZWFyX3BnZGF0X2Nvbmdlc3RlZChwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNjk2NC0vKlxcbm1tL3Ztc2Nhbi5jOjY5NjU6ICogUHJlcGFyZSBrc3dhcGQgZm9yIHNsZWVwaW5nLiBUaGlzIHZlcmlmaWVzIHRoYXQgdGhlcmUgYXJlIG5vIHByb2Nlc3Nlc1xcbm1tL3Ztc2Nhbi5jLTY5NjYtICogd2FpdGluZyBpbiB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbSgpIGFuZCB0aGF0IHdhdGVybWFya3MgaGF2ZSBiZWVuIG1ldC5cXG5tbS92bXNjYW4uYy02OTY3LSAqXFxubW0vdm1zY2FuLmM6Njk2ODogKiBSZXR1cm5zIHRydWUgaWYga3N3YXBkIGlzIHJlYWR5IHRvIHNsZWVwXFxubW0vdm1zY2FuLmMtNjk2OS0gKi9cXG5tbS92bXNjYW4uYzo2OTcwOnN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcXG5tbS92bXNjYW4uYy02OTcxLVxcdFxcdFxcdFxcdGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy02OTc1LVxcdCAqIHNvb24gYXMgYWxsb3dfZGlyZWN0X3JlY2xhaW0oKSBpcyB0cnVlLiBCdXQgdGhlcmUgaXMgYSBwb3RlbnRpYWxcXG5tbS92bXNjYW4uYzo2OTc2OlxcdCAqIHJhY2UgYmV0d2VlbiB3aGVuIGtzd2FwZCBjaGVja3MgdGhlIHdhdGVybWFya3MgYW5kIGEgcHJvY2VzcyBnZXRzXFxubW0vdm1zY2FuLmMtNjk3Ny1cXHQgKiB0aHJvdHRsZWQuIFRoZXJlIGlzIGFsc28gYSBwb3RlbnRpYWwgcmFjZSBpZiBwcm9jZXNzZXMgZ2V0XFxubW0vdm1zY2FuLmM6Njk3ODpcXHQgKiB0aHJvdHRsZWQsIGtzd2FwZCB3YWtlcywgYSBsYXJnZSBwcm9jZXNzIGV4aXRzIHRoZXJlYnkgYmFsYW5jaW5nIHRoZVxcbm1tL3Ztc2Nhbi5jOjY5Nzk6XFx0ICogem9uZXMsIHdoaWNoIGNhdXNlcyBrc3dhcGQgdG8gZXhpdCBiYWxhbmNlX3BnZGF0KCkgYmVmb3JlIHJlYWNoaW5nXFxubW0vdm1zY2FuLmM6Njk4MDpcXHQgKiB0aGUgd2FrZSB1cCBjaGVja3MuIElmIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgbm8gcHJvY2VzcyBzaG91bGRcXG5tbS92bXNjYW4uYy02OTgxLVxcdCAqIGJlIHNsZWVwaW5nIG9uIHBmbWVtYWxsb2Nfd2FpdCwgc28gd2FrZSB0aGVtIG5vdyBpZiBuZWNlc3NhcnkuIElmXFxubW0vdm1zY2FuLmM6Njk4MjpcXHQgKiB0aGUgd2FrZSB1cCBpcyBwcmVtYXR1cmUsIHByb2Nlc3NlcyB3aWxsIHdha2Uga3N3YXBkIGFuZCBnZXRcXG5tbS92bXNjYW4uYy02OTgzLVxcdCAqIHRocm90dGxlZCBhZ2Fpbi4gVGhlIGRpZmZlcmVuY2UgZnJvbSB3YWtlIHVwcyBpbiBiYWxhbmNlX3BnZGF0KCkgaXNcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5ODktXFx0LyogSG9wZWxlc3Mgbm9kZSwgbGVhdmUgaXQgdG8gZGlyZWN0IHJlY2xhaW0gKi9cXG5tbS92bXNjYW4uYzo2OTkwOlxcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkpXFxubW0vdm1zY2FuLmMtNjk5MS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwMDEtLypcXG5tbS92bXNjYW4uYzo3MDAyOiAqIGtzd2FwZCBzaHJpbmtzIGEgbm9kZSBvZiBwYWdlcyB0aGF0IGFyZSBhdCBvciBiZWxvdyB0aGUgaGlnaGVzdCB1c2FibGVcXG5tbS92bXNjYW4uYy03MDAzLSAqIHpvbmUgdGhhdCBpcyBjdXJyZW50bHkgdW5iYWxhbmNlZC5cXG5tbS92bXNjYW4uYy03MDA0LSAqXFxubW0vdm1zY2FuLmM6NzAwNTogKiBSZXR1cm5zIHRydWUgaWYga3N3YXBkIHNjYW5uZWQgYXQgbGVhc3QgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcGFnZXMgdG9cXG5tbS92bXNjYW4uYy03MDA2LSAqIHJlY2xhaW0gb3IgaWYgdGhlIGxhY2sgb2YgcHJvZ3Jlc3Mgd2FzIGR1ZSB0byBwYWdlcyB1bmRlciB3cml0ZWJhY2suXFxuLS1cXG5tbS92bXNjYW4uYy03MDA4LSAqL1xcbm1tL3Ztc2Nhbi5jOjcwMDk6c3RhdGljIGJvb2wga3N3YXBkX3Nocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsXFxubW0vdm1zY2FuLmMtNzAxMC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYz03MDY0PWNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MDY5LS8qXFxubW0vdm1zY2FuLmM6NzA3MDogKiBGb3Iga3N3YXBkLCBiYWxhbmNlX3BnZGF0KCkgd2lsbCByZWNsYWltIHBhZ2VzIGFjcm9zcyBhIG5vZGUgZnJvbSB6b25lc1xcbm1tL3Ztc2Nhbi5jLTcwNzEtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXFxuLS1cXG5tbS92bXNjYW4uYy03MDczLSAqXFxubW0vdm1zY2FuLmM6NzA3NDogKiBSZXR1cm5zIHRoZSBvcmRlciBrc3dhcGQgZmluaXNoZWQgcmVjbGFpbWluZyBhdC5cXG5tbS92bXNjYW4uYy03MDc1LSAqXFxubW0vdm1zY2FuLmM6NzA3NjogKiBrc3dhcGQgc2NhbnMgdGhlIHpvbmVzIGluIHRoZSBoaWdobWVtLVxcdTAwM2Vub3JtYWwtXFx1MDAzZWRtYSBkaXJlY3Rpb24uICBJdCBza2lwc1xcbm1tL3Ztc2Nhbi5jLTcwNzctICogem9uZXMgd2hpY2ggaGF2ZSBmcmVlX3BhZ2VzIFxcdTAwM2UgaGlnaF93bWFya19wYWdlcyh6b25lKSwgYnV0IG9uY2UgYSB6b25lIGlzXFxuLS1cXG5tbS92bXNjYW4uYz03MDgyPXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MTA4LVxcdCAqIHBsYWNlIHNvIHRoYXQgcGFyYWxsZWwgYWxsb2NhdGlvbnMgdGhhdCBhcmUgbmVhciB0aGUgd2F0ZXJtYXJrIHdpbGxcXG5tbS92bXNjYW4uYzo3MTA5OlxcdCAqIHN0YWxsIG9yIGRpcmVjdCByZWNsYWltIHVudGlsIGtzd2FwZCBpcyBmaW5pc2hlZC5cXG5tbS92bXNjYW4uYy03MTEwLVxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmMtNzEzNy1cXHRcXHQgKiBnbyBhaGVhZCBpZiBhbGwgZWxpZ2libGUgem9uZXMgZm9yIHRoZSBvcmlnaW5hbCBhbGxvY2F0aW9uXFxubW0vdm1zY2FuLmM6NzEzODpcXHRcXHQgKiByZXF1ZXN0IGFyZSBiYWxhbmNlZCB0byBhdm9pZCBleGNlc3NpdmUgcmVjbGFpbSBmcm9tIGtzd2FwZC5cXG5tbS92bXNjYW4uYy03MTM5LVxcdFxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmMtNzE1NS1cXHRcXHQgKiBvbiB0aGUgZ3JvdW5kcyB0aGF0IHRoZSBub3JtYWwgcmVjbGFpbSBzaG91bGQgYmUgZW5vdWdoIHRvXFxubW0vdm1zY2FuLmM6NzE1NjpcXHRcXHQgKiByZS1ldmFsdWF0ZSBpZiBib29zdGluZyBpcyByZXF1aXJlZCB3aGVuIGtzd2FwZCBuZXh0IHdha2VzLlxcbm1tL3Ztc2Nhbi5jLTcxNTctXFx0XFx0ICovXFxuLS1cXG5tbS92bXNjYW4uYy03MTg5LVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjcxOTA6XFx0XFx0a3N3YXBkX2FnZV9ub2RlKHBnZGF0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTcxOTEtXFxuLS1cXG5tbS92bXNjYW4uYy03MjAzLVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjcyMDQ6XFx0XFx0aWYgKGtzd2FwZF9zaHJpbmtfbm9kZShwZ2RhdCwgXFx1MDAyNnNjKSlcXG5tbS92bXNjYW4uYy03MjA1LVxcdFxcdFxcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XFxuLS1cXG5tbS92bXNjYW4uYy03MjE1LVxcbm1tL3Ztc2Nhbi5jOjcyMTY6XFx0XFx0LyogQ2hlY2sgaWYga3N3YXBkIHNob3VsZCBiZSBzdXNwZW5kaW5nICovXFxubW0vdm1zY2FuLmMtNzIxNy1cXHRcXHRfX2ZzX3JlY2xhaW1fcmVsZWFzZShfVEhJU19JUF8pO1xcbi0tXFxubW0vdm1zY2FuLmMtNzI1NC1cXHQgKiB3YXRlcm1hcmtfaGlnaCBhdCB0aGlzIHBvaW50LiBXZSBuZWVkIHRvIGF2b2lkIGluY3JlYXNpbmcgdGhlXFxubW0vdm1zY2FuLmM6NzI1NTpcXHQgKiBmYWlsdXJlIGNvdW50IHRvIHByZXZlbnQgdGhlIGtzd2FwZCB0aHJlYWQgZnJvbSBzdG9wcGluZy5cXG5tbS92bXNjYW4uYy03MjU2LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jLTcyNTctXFx0aWYgKCFzYy5ucl9yZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgIWJvb3N0ZWQpIHtcXG5tbS92bXNjYW4uYzo3MjU4OlxcdFxcdGludCBmYWlsX2NudCA9IGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX2ZhaWx1cmVzKTtcXG5tbS92bXNjYW4uYzo3MjU5OlxcdFxcdC8qIGtzd2FwZCBjb250ZXh0LCBsb3cgb3ZlcmhlYWQgdG8gdHJhY2UgZXZlcnkgZmFpbHVyZSAqL1xcbm1tL3Ztc2Nhbi5jOjcyNjA6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9yZWNsYWltX2ZhaWwocGdkYXQtXFx1MDAzZW5vZGVfaWQsIGZhaWxfY250KTtcXG5tbS92bXNjYW4uYy03MjYxLVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyOTYtXFx0LypcXG5tbS92bXNjYW4uYzo3Mjk3OlxcdCAqIFJldHVybiB0aGUgb3JkZXIga3N3YXBkIHN0b3BwZWQgcmVjbGFpbWluZyBhdCBhc1xcbm1tL3Ztc2Nhbi5jOjcyOTg6XFx0ICogcHJlcGFyZV9rc3dhcGRfc2xlZXAoKSB0YWtlcyBpdCBpbnRvIGFjY291bnQuIElmIGFub3RoZXIgY2FsbGVyXFxubW0vdm1zY2FuLmM6NzI5OTpcXHQgKiBlbnRlcmVkIHRoZSBhbGxvY2F0b3Igc2xvdyBwYXRoIHdoaWxlIGtzd2FwZCB3YXMgYXdha2UsIG9yZGVyIHdpbGxcXG5tbS92bXNjYW4uYy03MzAwLVxcdCAqIHJlbWFpbiBhdCB0aGUgaGlnaGVyIGxldmVsLlxcbi0tXFxubW0vdm1zY2FuLmMtNzMwNS0vKlxcbm1tL3Ztc2Nhbi5jOjczMDY6ICogVGhlIHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4IGlzIHVzZWQgdG8gcGFzcyB0aGUgaGlnaGVzdCB6b25lIGluZGV4IHRvXFxubW0vdm1zY2FuLmM6NzMwNzogKiBiZSByZWNsYWltZWQgYnkga3N3YXBkIGZyb20gdGhlIHdha2VyLiBJZiB0aGUgdmFsdWUgaXMgTUFYX05SX1pPTkVTIHdoaWNoIGlzXFxubW0vdm1zY2FuLmM6NzMwODogKiBub3QgYSB2YWxpZCBpbmRleCB0aGVuIGVpdGhlciBrc3dhcGQgcnVucyBmb3IgZmlyc3QgdGltZSBvciBrc3dhcGQgY291bGRuJ3RcXG5tbS92bXNjYW4uYy03MzA5LSAqIHNsZWVwIGFmdGVyIHByZXZpb3VzIHJlY2xhaW0gYXR0ZW1wdCAobm9kZSBpcyBzdGlsbCB1bmJhbGFuY2VkKS4gSW4gdGhhdFxcbm1tL3Ztc2Nhbi5jOjczMTA6ICogY2FzZSByZXR1cm4gdGhlIHpvbmUgaW5kZXggb2YgdGhlIHByZXZpb3VzIGtzd2FwZCByZWNsYWltIGN5Y2xlLlxcbm1tL3Ztc2Nhbi5jLTczMTEtICovXFxubW0vdm1zY2FuLmM6NzMxMjpzdGF0aWMgZW51bSB6b25lX3R5cGUga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ19kYXRhX3QgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTczMTMtXFx0XFx0XFx0XFx0XFx0ICAgZW51bSB6b25lX3R5cGUgcHJldl9oaWdoZXN0X3pvbmVpZHgpXFxubW0vdm1zY2FuLmMtNzMxNC17XFxubW0vdm1zY2FuLmM6NzMxNTpcXHRlbnVtIHpvbmVfdHlwZSBjdXJyX2lkeCA9IFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmMtNzMxNi1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTczMTktXFxubW0vdm1zY2FuLmM6NzMyMDpzdGF0aWMgdm9pZCBrc3dhcGRfdHJ5X3RvX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBhbGxvY19vcmRlciwgaW50IHJlY2xhaW1fb3JkZXIsXFxubW0vdm1zY2FuLmMtNzMyMS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzMyOC1cXG5tbS92bXNjYW4uYzo3MzI5OlxcdHByZXBhcmVfdG9fd2FpdChcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0LCBcXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcXG5tbS92bXNjYW4uYy03MzMwLVxcbi0tXFxubW0vdm1zY2FuLmMtNzMzNy1cXHQgKi9cXG5tbS92bXNjYW4uYzo3MzM4OlxcdGlmIChwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ2RhdCwgcmVjbGFpbV9vcmRlciwgaGlnaGVzdF96b25laWR4KSkge1xcbm1tL3Ztc2Nhbi5jLTczMzktXFx0XFx0LypcXG4tLVxcbm1tL3Ztc2Nhbi5jLTczNDEtXFx0XFx0ICogaXNvbGF0ZSBwYWdlcyBmcm9tIGFuZCBza2lwcyB0aGVtIGluIHRoZSBmdXR1cmUgc2Nhbm5pbmcuXFxubW0vdm1zY2FuLmM6NzM0MjpcXHRcXHQgKiBXaGVuIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgaXQgaXMgcmVhc29uYWJsZSB0byBhc3N1bWVcXG5tbS92bXNjYW4uYy03MzQzLVxcdFxcdCAqIHRoYXQgcGFnZXMgYW5kIGNvbXBhY3Rpb24gbWF5IHN1Y2NlZWQgc28gcmVzZXQgdGhlIGNhY2hlLlxcbi0tXFxubW0vdm1zY2FuLmMtNzM1NS1cXHRcXHQvKlxcbm1tL3Ztc2Nhbi5jOjczNTY6XFx0XFx0ICogSWYgd29rZW4gcHJlbWF0dXJlbHkgdGhlbiByZXNldCBrc3dhcGRfaGlnaGVzdF96b25laWR4IGFuZFxcbm1tL3Ztc2Nhbi5jLTczNTctXFx0XFx0ICogb3JkZXIuIFRoZSB2YWx1ZXMgd2lsbCBlaXRoZXIgYmUgZnJvbSBhIHdha2V1cCByZXF1ZXN0IG9yXFxuLS1cXG5tbS92bXNjYW4uYy03MzYwLVxcdFxcdGlmIChyZW1haW5pbmcpIHtcXG5tbS92bXNjYW4uYzo3MzYxOlxcdFxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsXFxubW0vdm1zY2FuLmM6NzM2MjpcXHRcXHRcXHRcXHRcXHRrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTczNjMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4KSk7XFxubW0vdm1zY2FuLmMtNzM2NC1cXG5tbS92bXNjYW4uYzo3MzY1OlxcdFxcdFxcdGlmIChSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlcikgXFx1MDAzYyByZWNsYWltX29yZGVyKVxcbm1tL3Ztc2Nhbi5jOjczNjY6XFx0XFx0XFx0XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyLCByZWNsYWltX29yZGVyKTtcXG5tbS92bXNjYW4uYy03MzY3LVxcdFxcdH1cXG5tbS92bXNjYW4uYy03MzY4LVxcbm1tL3Ztc2Nhbi5jOjczNjk6XFx0XFx0ZmluaXNoX3dhaXQoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCwgXFx1MDAyNndhaXQpO1xcbm1tL3Ztc2Nhbi5jOjczNzA6XFx0XFx0cHJlcGFyZV90b193YWl0KFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQsIFxcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xcbm1tL3Ztc2Nhbi5jLTczNzEtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmMtNzM3Ny1cXHRpZiAoIXJlbWFpbmluZyBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jOjczNzg6XFx0ICAgIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnZGF0LCByZWNsYWltX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKSB7XFxubW0vdm1zY2FuLmM6NzM3OTpcXHRcXHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX3NsZWVwKHBnZGF0LVxcdTAwM2Vub2RlX2lkKTtcXG5tbS92bXNjYW4uYy03MzgwLVxcbi0tXFxubW0vdm1zY2FuLmMtNzM4NS1cXHRcXHQgKiB3YXRlcm1hcmtzIGJlaW5nIGJyZWFjaGVkIHdoaWxlIHVuZGVyIHByZXNzdXJlLCB3ZSByZWR1Y2UgdGhlXFxubW0vdm1zY2FuLmM6NzM4NjpcXHRcXHQgKiBwZXItY3B1IHZtc3RhdCB0aHJlc2hvbGQgd2hpbGUga3N3YXBkIGlzIGF3YWtlIGFuZCByZXN0b3JlXFxubW0vdm1zY2FuLmMtNzM4Ny1cXHRcXHQgKiB0aGVtIGJlZm9yZSBnb2luZyBiYWNrIHRvIHNsZWVwLlxcbi0tXFxubW0vdm1zY2FuLmMtNzQwMC1cXHR9XFxubW0vdm1zY2FuLmM6NzQwMTpcXHRmaW5pc2hfd2FpdChcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0LCBcXHUwMDI2d2FpdCk7XFxubW0vdm1zY2FuLmMtNzQwMi19XFxuLS1cXG5tbS92bXNjYW4uYy03NDE2LSAqL1xcbm1tL3Ztc2Nhbi5jOjc0MTc6c3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcXG5tbS92bXNjYW4uYy03NDE4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0MjYtXFx0ICogYW5kIHRoYXQgaWYgd2UgbmVlZCBtb3JlIG1lbW9yeSB3ZSBzaG91bGQgZ2V0IGFjY2VzcyB0byBpdFxcbm1tL3Ztc2Nhbi5jOjc0Mjc6XFx0ICogcmVnYXJkbGVzcyAoc2VlIFxcXCJfX2FsbG9jX3BhZ2VzKClcXFwiKS4gXFxcImtzd2FwZFxcXCIgc2hvdWxkXFxubW0vdm1zY2FuLmMtNzQyOC1cXHQgKiBuZXZlciBnZXQgY2F1Z2h0IGluIHRoZSBub3JtYWwgcGFnZSBmcmVlaW5nIGxvZ2ljLlxcbi0tXFxubW0vdm1zY2FuLmMtNzQzOC1cXG5tbS92bXNjYW4uYzo3NDM5OlxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XFxubW0vdm1zY2FuLmM6NzQ0MDpcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBNQVhfTlJfWk9ORVMpO1xcbm1tL3Ztc2Nhbi5jLTc0NDEtXFx0YXRvbWljX3NldChcXHUwMDI2cGdkYXQtXFx1MDAzZW5yX3dyaXRlYmFja190aHJvdHRsZWQsIDApO1xcbi0tXFxubW0vdm1zY2FuLmMtNzQ0NC1cXG5tbS92bXNjYW4uYzo3NDQ1OlxcdFxcdGFsbG9jX29yZGVyID0gcmVjbGFpbV9vcmRlciA9IFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyKTtcXG5tbS92bXNjYW4uYzo3NDQ2OlxcdFxcdGhpZ2hlc3Rfem9uZWlkeCA9IGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdkYXQsXFxubW0vdm1zY2FuLmMtNzQ0Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jLTc0NDgtXFxubW0vdm1zY2FuLmM6NzQ0OTprc3dhcGRfdHJ5X3NsZWVwOlxcbm1tL3Ztc2Nhbi5jOjc0NTA6XFx0XFx0a3N3YXBkX3RyeV90b19zbGVlcChwZ2RhdCwgYWxsb2Nfb3JkZXIsIHJlY2xhaW1fb3JkZXIsXFxubW0vdm1zY2FuLmMtNzQ1MS1cXHRcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgpO1xcbi0tXFxubW0vdm1zY2FuLmMtNzQ1My1cXHRcXHQvKiBSZWFkIHRoZSBuZXcgb3JkZXIgYW5kIGhpZ2hlc3Rfem9uZWlkeCAqL1xcbm1tL3Ztc2Nhbi5jOjc0NTQ6XFx0XFx0YWxsb2Nfb3JkZXIgPSBSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlcik7XFxubW0vdm1zY2FuLmM6NzQ1NTpcXHRcXHRoaWdoZXN0X3pvbmVpZHggPSBrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc0NTYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4KTtcXG5tbS92bXNjYW4uYzo3NDU3OlxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XFxubW0vdm1zY2FuLmM6NzQ1ODpcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBNQVhfTlJfWk9ORVMpO1xcbm1tL3Ztc2Nhbi5jLTc0NTktXFxuLS1cXG5tbS92bXNjYW4uYy03NDcxLVxcdFxcdCAqIFJlY2xhaW0gYmVnaW5zIGF0IHRoZSByZXF1ZXN0ZWQgb3JkZXIgYnV0IGlmIGEgaGlnaC1vcmRlclxcbm1tL3Ztc2Nhbi5jOjc0NzI6XFx0XFx0ICogcmVjbGFpbSBmYWlscyB0aGVuIGtzd2FwZCBmYWxscyBiYWNrIHRvIHJlY2xhaW1pbmcgZm9yXFxubW0vdm1zY2FuLmM6NzQ3MzpcXHRcXHQgKiBvcmRlci0wLiBJZiB0aGF0IGhhcHBlbnMsIGtzd2FwZCB3aWxsIGNvbnNpZGVyIHNsZWVwaW5nXFxubW0vdm1zY2FuLmMtNzQ3NC1cXHRcXHQgKiBmb3IgdGhlIG9yZGVyIGl0IGZpbmlzaGVkIHJlY2xhaW1pbmcgYXQgKHJlY2xhaW1fb3JkZXIpXFxuLS1cXG5tbS92bXNjYW4uYy03NDc3LVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc0Nzg6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF93YWtlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBoaWdoZXN0X3pvbmVpZHgsXFxubW0vdm1zY2FuLmMtNzQ3OS1cXHRcXHRcXHRcXHRcXHRcXHRhbGxvY19vcmRlcik7XFxuLS1cXG5tbS92bXNjYW4uYy03NDgyLVxcdFxcdGlmIChyZWNsYWltX29yZGVyIFxcdTAwM2MgYWxsb2Nfb3JkZXIpXFxubW0vdm1zY2FuLmM6NzQ4MzpcXHRcXHRcXHRnb3RvIGtzd2FwZF90cnlfc2xlZXA7XFxubW0vdm1zY2FuLmMtNzQ4NC1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYy03NDkyLSAqIEEgem9uZSBpcyBsb3cgb24gZnJlZSBtZW1vcnkgb3IgdG9vIGZyYWdtZW50ZWQgZm9yIGhpZ2gtb3JkZXIgbWVtb3J5LiAgSWZcXG5tbS92bXNjYW4uYzo3NDkzOiAqIGtzd2FwZCBzaG91bGQgcmVjbGFpbSAoZGlyZWN0IHJlY2xhaW0gaXMgZGVmZXJyZWQpLCB3YWtlIGl0IHVwIGZvciB0aGUgem9uZSdzXFxubW0vdm1zY2FuLmM6NzQ5NDogKiBwZ2RhdC4gIEl0IHdpbGwgd2FrZSB1cCBrY29tcGFjdGQgYWZ0ZXIgcmVjbGFpbWluZyBtZW1vcnkuICBJZiBrc3dhcGQgcmVjbGFpbVxcbm1tL3Ztc2Nhbi5jLTc0OTUtICogaGFzIGZhaWxlZCBvciBpcyBub3QgbmVlZGVkLCBzdGlsbCB3YWtlIHVwIGtjb21wYWN0ZCBpZiBvbmx5IGNvbXBhY3Rpb24gaXNcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0OTctICovXFxubW0vdm1zY2FuLmM6NzQ5ODp2b2lkIHdha2V1cF9rc3dhcGQoc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9mbGFncywgaW50IG9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTc0OTktXFx0XFx0ICAgZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzUxMC1cXHRwZ2RhdCA9IHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQ7XFxubW0vdm1zY2FuLmM6NzUxMTpcXHRjdXJyX2lkeCA9IFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmMtNzUxMi1cXG5tbS92bXNjYW4uYy03NTEzLVxcdGlmIChjdXJyX2lkeCA9PSBNQVhfTlJfWk9ORVMgfHwgY3Vycl9pZHggXFx1MDAzYyBoaWdoZXN0X3pvbmVpZHgpXFxubW0vdm1zY2FuLmM6NzUxNDpcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jLTc1MTUtXFxubW0vdm1zY2FuLmM6NzUxNjpcXHRpZiAoUkVBRF9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIpIFxcdTAwM2Mgb3JkZXIpXFxubW0vdm1zY2FuLmM6NzUxNzpcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIsIG9yZGVyKTtcXG5tbS92bXNjYW4uYy03NTE4LVxcbm1tL3Ztc2Nhbi5jOjc1MTk6XFx0aWYgKCF3YWl0cXVldWVfYWN0aXZlKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQpKVxcbm1tL3Ztc2Nhbi5jLTc1MjAtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmMtNzUyMi1cXHQvKiBIb3BlbGVzcyBub2RlLCBsZWF2ZSBpdCB0byBkaXJlY3QgcmVjbGFpbSBpZiBwb3NzaWJsZSAqL1xcbm1tL3Ztc2Nhbi5jOjc1MjM6XFx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSB8fFxcbm1tL3Ztc2Nhbi5jLTc1MjQtXFx0ICAgIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1MzctXFxubW0vdm1zY2FuLmM6NzUzODpcXHR0cmFjZV9tbV92bXNjYW5fd2FrZXVwX2tzd2FwZChwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgaGlnaGVzdF96b25laWR4LCBvcmRlcixcXG5tbS92bXNjYW4uYy03NTM5LVxcdFxcdFxcdFxcdCAgICAgIGdmcF9mbGFncyk7XFxubW0vdm1zY2FuLmM6NzU0MDpcXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCk7XFxubW0vdm1zY2FuLmMtNzU0MS19XFxubW0vdm1zY2FuLmMtNzU0Mi1cXG5tbS92bXNjYW4uYzo3NTQzOnZvaWQga3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0ga3N3YXBkX2NsZWFyX2hvcGVsZXNzX3JlYXNvbiByZWFzb24pXFxubW0vdm1zY2FuLmMtNzU0NC17XFxubW0vdm1zY2FuLmMtNzU0NS1cXHQvKiBPbmx5IHRyYWNlIGFjdHVhbCByZXNldHMsIG5vdCByZWR1bmRhbnQgemVyby10by16ZXJvICovXFxubW0vdm1zY2FuLmM6NzU0NjpcXHRpZiAoYXRvbWljX3hjaGcoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfZmFpbHVyZXMsIDApKVxcbm1tL3Ztc2Nhbi5jOjc1NDc6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgcmVhc29uKTtcXG5tbS92bXNjYW4uYy03NTQ4LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NTAtLypcXG5tbS92bXNjYW4uYzo3NTUxOiAqIFJlc2V0IGtzd2FwZF9mYWlsdXJlcyBvbmx5IHdoZW4gdGhlIG5vZGUgaXMgYmFsYW5jZWQuIFdpdGhvdXQgdGhpc1xcbm1tL3Ztc2Nhbi5jLTc1NTItICogY2hlY2ssIHN1Y2Nlc3NmdWwgZGlyZWN0IHJlY2xhaW0gKGUuZy4sIGZyb20gY2dyb3VwIG1lbW9yeS5oaWdoXFxubW0vdm1zY2FuLmM6NzU1MzogKiB0aHJvdHRsaW5nKSBjYW4ga2VlcCByZXNldHRpbmcga3N3YXBkX2ZhaWx1cmVzIGV2ZW4gd2hlbiB0aGUgbm9kZVxcbm1tL3Ztc2Nhbi5jOjc1NTQ6ICogY2Fubm90IGJlIGJhbGFuY2VkLCBjYXVzaW5nIGtzd2FwZCB0byBydW4gZW5kbGVzc2x5Llxcbm1tL3Ztc2Nhbi5jLTc1NTUtICovXFxubW0vdm1zY2FuLmM6NzU1Njp2b2lkIGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3Moc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03NTU3LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03NTU5LVxcdGlmIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpXFxubW0vdm1zY2FuLmM6NzU2MDpcXHRcXHRrc3dhcGRfY2xlYXJfaG9wZWxlc3MocGdkYXQsIGN1cnJlbnRfaXNfa3N3YXBkKCkgP1xcbm1tL3Ztc2Nhbi5jLTc1NjEtXFx0XFx0XFx0S1NXQVBEX0NMRUFSX0hPUEVMRVNTX0tTV0FQRCA6IEtTV0FQRF9DTEVBUl9IT1BFTEVTU19ESVJFQ1QpO1xcbi0tXFxubW0vdm1zY2FuLmMtNzU2My1cXG5tbS92bXNjYW4uYzo3NTY0OmJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcXG5tbS92bXNjYW4uYy03NTY1LXtcXG5tbS92bXNjYW4uYzo3NTY2OlxcdHJldHVybiBhdG9taWNfcmVhZChcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF9mYWlsdXJlcykgXFx1MDAzZT0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG5tbS92bXNjYW4uYy03NTY3LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc1Nzg9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYy03NjA4LS8qXFxubW0vdm1zY2FuLmM6NzYwOTogKiBUaGlzIGtzd2FwZCBzdGFydCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBpbml0IGFuZCBub2RlLWhvdC1hZGQuXFxubW0vdm1zY2FuLmMtNzYxMC0gKi9cXG5tbS92bXNjYW4uYzo3NjExOnZvaWQgX19tZW1pbml0IGtzd2FwZF9ydW4oaW50IG5pZClcXG5tbS92bXNjYW4uYy03NjEyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2MTQtXFxubW0vdm1zY2FuLmM6NzYxNTpcXHRwZ2RhdF9rc3dhcGRfbG9jayhwZ2RhdCk7XFxubW0vdm1zY2FuLmM6NzYxNjpcXHRpZiAoIXBnZGF0LVxcdTAwM2Vrc3dhcGQpIHtcXG5tbS92bXNjYW4uYzo3NjE3OlxcdFxcdHBnZGF0LVxcdTAwM2Vrc3dhcGQgPSBrdGhyZWFkX2NyZWF0ZV9vbl9ub2RlKGtzd2FwZCwgcGdkYXQsIG5pZCwgXFxcImtzd2FwZCVkXFxcIiwgbmlkKTtcXG5tbS92bXNjYW4uYzo3NjE4OlxcdFxcdGlmIChJU19FUlIocGdkYXQtXFx1MDAzZWtzd2FwZCkpIHtcXG5tbS92bXNjYW4uYy03NjE5LVxcdFxcdFxcdC8qIGZhaWx1cmUgYXQgYm9vdCBpcyBmYXRhbCAqL1xcbm1tL3Ztc2Nhbi5jOjc2MjA6XFx0XFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gc3RhcnQga3N3YXBkIG9uIG5vZGUgJWQsIHJldD0lcGVcXFxcblxcXCIsXFxubW0vdm1zY2FuLmM6NzYyMTpcXHRcXHRcXHRcXHQgICBuaWQsIHBnZGF0LVxcdTAwM2Vrc3dhcGQpO1xcbm1tL3Ztc2Nhbi5jLTc2MjItXFx0XFx0XFx0QlVHX09OKHN5c3RlbV9zdGF0ZSBcXHUwMDNjIFNZU1RFTV9SVU5OSU5HKTtcXG5tbS92bXNjYW4uYzo3NjIzOlxcdFxcdFxcdHBnZGF0LVxcdTAwM2Vrc3dhcGQgPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jLTc2MjQtXFx0XFx0fSBlbHNlIHtcXG5tbS92bXNjYW4uYzo3NjI1OlxcdFxcdFxcdHdha2VfdXBfcHJvY2VzcyhwZ2RhdC1cXHUwMDNla3N3YXBkKTtcXG5tbS92bXNjYW4uYy03NjI2LVxcdFxcdH1cXG5tbS92bXNjYW4uYy03NjI3LVxcdH1cXG5tbS92bXNjYW4uYzo3NjI4OlxcdHBnZGF0X2tzd2FwZF91bmxvY2socGdkYXQpO1xcbm1tL3Ztc2Nhbi5jLTc2MjktfVxcbi0tXFxubW0vdm1zY2FuLmMtNzYzNC0gKi9cXG5tbS92bXNjYW4uYzo3NjM1OnZvaWQgX19tZW1pbml0IGtzd2FwZF9zdG9wKGludCBuaWQpXFxubW0vdm1zY2FuLmMtNzYzNi17XFxubW0vdm1zY2FuLmMtNzYzNy1cXHRwZ19kYXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAxOjM5LjQzODM3NjUzN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg0MzUxMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCdzIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuUmlnaHQsIHNvIGBrc3dhcGRgIGlzIHJ1bm5pbmcgYXMgYSBrZXJuZWwgdGhyZWFkLCB3aGljaCBJIGFscmVhZHkga25vdy4gQnV0IGxldCdzIGNsYXJpZnkgdGhhdCBpbiBteSBtaW5kLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSByZWNsYWltIHByb2Nlc3MuIFdoZXJlIGNhbiBJIHN0YXJ0IHRvIHNlZSBob3cgbWVtb3J5IGlzIGZyZWVkPyBBaCwgeWVzLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCB0aGF0J3MgYSBjbGFzc2ljIGVudHJ5IHBvaW50LiBBbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBpbXBvcnRhbnQgZm9yIGNncm91cCBtZW1vcnkgbWFuYWdlbWVudCwgb2YgY291cnNlLiBgc2hyaW5rX2FsbF9tZW1vcnlgIGlzIGFsc28gYSBicm9hZCBhcHByb2FjaC4gTm93LCB3aGVyZSB0byBnbyBkZWVwZXI/IEknbGwgZHJpbGwgZG93biBvbiBgbm9kZV9yZWNsYWltYC4gVGhpcyBzaG91bGQgcHJvdmlkZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHBlci1ub2RlIHJlY2xhaW0gYWN0aXZpdGllcywgd2hpY2ggaXMga2V5LiBJJ2xsIGdldCBzdGFydGVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc5NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAxOjQzLjIyMjczNzc3N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NTk4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9kZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTYxNjQ9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjE2NS17XFxubW0vdm1zY2FuLmM6NjE2NjpcXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQ7XFxubW0vdm1zY2FuLmMtNjE2Ny1cXHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xcbi0tXFxubW0vdm1zY2FuLmMtNjE5Mi1cXG5tbS92bXNjYW4uYzo2MTkzOlxcdG5yX25vZGVfcmVjbGFpbWVkID0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCAtIG5yX3JlY2xhaW1lZDtcXG5tbS92bXNjYW4uYy02MTk0LVxcbi0tXFxubW0vdm1zY2FuLmMtNjE5Ny1cXHRcXHR2bXByZXNzdXJlKHNjLVxcdTAwM2VnZnBfbWFzaywgc2MtXFx1MDAzZW9yZGVyLCBzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHRydWUsXFxubW0vdm1zY2FuLmM6NjE5ODpcXHRcXHRcXHQgICBzYy1cXHUwMDNlbnJfc2Nhbm5lZCAtIG5yX3NjYW5uZWQsIG5yX25vZGVfcmVjbGFpbWVkKTtcXG5tbS92bXNjYW4uYy02MTk5LVxcbm1tL3Ztc2Nhbi5jOjYyMDA6XFx0aWYgKG5yX25vZGVfcmVjbGFpbWVkKVxcbm1tL3Ztc2Nhbi5jLTYyMDEtXFx0XFx0cmVjbGFpbWFibGUgPSB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmMtNjI2MS1cXG5tbS92bXNjYW4uYzo2MjYyOlxcdGlmIChzaG91bGRfY29udGludWVfcmVjbGFpbShwZ2RhdCwgbnJfbm9kZV9yZWNsYWltZWQsIHNjKSlcXG5tbS92bXNjYW4uYy02MjYzLVxcdFxcdGdvdG8gYWdhaW47XFxuLS1cXG5tbS92bXNjYW4uYz03NjQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZtc2Nhbl9zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NjEtXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwiem9uZV9yZWNsYWltX21vZGVcXFwiLFxcbm1tL3Ztc2Nhbi5jOjc2NjI6XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZub2RlX3JlY2xhaW1fbW9kZSxcXG5tbS92bXNjYW4uYzo3NjYzOlxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihub2RlX3JlY2xhaW1fbW9kZSksXFxubW0vdm1zY2FuLmMtNzY2NC1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc2ODI9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXFxuLS1cXG5tbS92bXNjYW4uYy03Njg3LSAqXFxubW0vdm1zY2FuLmM6NzY4ODogKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xcbm1tL3Ztc2Nhbi5jLTc2ODktICogdGhlIHdhdGVybWFya3MuXFxubW0vdm1zY2FuLmMtNzY5MC0gKi9cXG5tbS92bXNjYW4uYzo3NjkxOmludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xcbm1tL3Ztc2Nhbi5jLTc2OTItXFxuLS1cXG5tbS92bXNjYW4uYy03NzAwLS8qXFxubW0vdm1zY2FuLmM6NzcwMTogKiBQZXJjZW50YWdlIG9mIHBhZ2VzIGluIGEgem9uZSB0aGF0IG11c3QgYmUgdW5tYXBwZWQgZm9yIG5vZGVfcmVjbGFpbSB0b1xcbm1tL3Ztc2Nhbi5jLTc3MDItICogb2NjdXIuXFxuLS1cXG5tbS92bXNjYW4uYz03NzI3PXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03NzM3LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc3Mzg6XFx0aWYgKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9VTk1BUClcXG5tbS92bXNjYW4uYy03NzM5LVxcdFxcdG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9QQUdFUyk7XFxuLS1cXG5tbS92bXNjYW4uYy03NzU4LSAqL1xcbm1tL3Ztc2Nhbi5jOjc3NTk6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vdm1zY2FuLmMtNzc2MC1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3NjYtXFxubW0vdm1zY2FuLmM6Nzc2NzpcXHR0cmFjZV9tbV92bXNjYW5fbm9kZV9yZWNsYWltX2JlZ2luKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYy1cXHUwMDNlb3JkZXIsXFxubW0vdm1zY2FuLmMtNzc2OC1cXHRcXHRcXHRcXHRcXHQgICBzYy1cXHUwMDNlZ2ZwX21hc2spO1xcbi0tXFxubW0vdm1zY2FuLmMtNzc5Ni1cXG5tbS92bXNjYW4uYzo3Nzk3OlxcdHRyYWNlX21tX3Ztc2Nhbl9ub2RlX3JlY2xhaW1fZW5kKHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE5VTEwpO1xcbm1tL3Ztc2Nhbi5jLTc3OTgtXFxuLS1cXG5tbS92bXNjYW4uYy03ODAxLVxcbm1tL3Ztc2Nhbi5jOjc4MDI6aW50IG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3Ztc2Nhbi5jLTc4MDMte1xcbi0tXFxubW0vdm1zY2FuLmMtNzgxMS1cXHRcXHQucHJpb3JpdHkgPSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFksXFxubW0vdm1zY2FuLmM6NzgxMjpcXHRcXHQubWF5X3dyaXRlcGFnZSA9ICEhKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9XUklURSksXFxubW0vdm1zY2FuLmM6NzgxMzpcXHRcXHQubWF5X3VubWFwID0gISEobm9kZV9yZWNsYWltX21vZGUgXFx1MDAyNiBSRUNMQUlNX1VOTUFQKSxcXG5tbS92bXNjYW4uYy03ODE0LVxcdFxcdC5tYXlfc3dhcCA9IDEsXFxuLS1cXG5tbS92bXNjYW4uYy03ODUwLVxcbm1tL3Ztc2Nhbi5jOjc4NTE6XFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGdmcF9tYXNrLCBucl9wYWdlcywgXFx1MDAyNnNjKSBcXHUwMDNlPSBucl9wYWdlcztcXG5tbS92bXNjYW4uYy03ODUyLVxcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFxcdTAwMjZwZ2RhdC1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxubW0vdm1zY2FuLmMtNzg2My1cXG5tbS92bXNjYW4uYzo3ODY0OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLFxcbm1tL3Ztc2Nhbi5jLTc4NjUtXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS92bXNjYW4uYz03ODg0PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5NzItXFxubW0vdm1zY2FuLmM6Nzk3MzpcXHRcXHRcXHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgZ2ZwX21hc2ssXFxubW0vdm1zY2FuLmMtNzk3NC1cXHRcXHRcXHRcXHRcXHRcXHQgICBiYXRjaF9zaXplLCBcXHUwMDI2c2MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMTo0My4yNjk2MTI3NjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxMTIxOTAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBFbnRyeSBQb2ludHMgZm9yIFJlc291cmNlIFJlY2xhbWF0aW9uKipcblxuQWxyaWdodCwgSSdtIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBzdGFydGluZyBwb2ludHMgZm9yIHRoaXMgcmVzb3VyY2UgcmVjbGFtYXRpb24gZWZmb3J0LiBgbm9kZV9yZWNsYWltYCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgbG9vazsgaXQncyBhIGNvbW1vbiBhcmVhIGZvciB0aGlzIHR5cGUgb2Ygb3BlcmF0aW9uLCBhbmQgaXQncyBzb21ldGhpbmcgSSdtIHZlcnkgZmFtaWxpYXIgd2l0aC4gQnV0IGxldCdzIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LCBiZWNhdXNlIEkgd2FudCB0byBiZSBjb21wcmVoZW5zaXZlLiBMZXQgbWUgc2hpZnQgbXkgZm9jdXMuIE15IG5leHQgY2hlY2sgd2lsbCBiZSBvbiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIEl0J3MgcG9zc2libGUgd2UgbWlnaHQgZmluZCBzb21lIGludGVyZXN0aW5nIGFuZ2xlcyBvciBvdmVybGFwcyB0aGVyZS4gTXkgZ29hbCByaWdodCBub3cgaXMgdG8gaWRlbnRpZnkgYWxsIHByb21pc2luZyBhcmVhcyB0byBlbnN1cmUgd2UncmUgdGFyZ2V0aW5nIHRoZSBtb3N0IGltcGFjdGZ1bCBhcmVhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1ODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMTo0Ni42ODA4MzM4NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNTkzNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03ODc4PXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4ODMtXFxubW0vdm1zY2FuLmM6Nzg4NDppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vdm1zY2FuLmMtNzg4NS1cXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYz04MDM0PXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxubW0vdm1zY2FuLmMtODAzOS1cXG5tbS92bXNjYW4uYzo4MDQwOlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcXG5tbS92bXNjYW4uYy04MDQxLVxcdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAxOjQ2LjcyNTk5OTM5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQ0NTg4NzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlY2xhaW0gU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZnVuY3Rpb24sIHdoaWNoIGlzIHRyaWdnZXJlZCB2aWEgYSBzeXNmcyBhdHRyaWJ1dGUgaW4gYHJlY2xhaW1fc3RvcmVgLCBmaXRzIGludG8gdGhlIGxhcmdlciBtZW1vcnkgbWFuYWdlbWVudCBwaWN0dXJlLiBJIGtub3cgdGhhdCBgbWVtb3J5X3JlY2xhaW1gIGluIGBtbS9tZW1jb250cm9sLmNgIGFsc28gY2FsbHMgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLiBNeSB0YXJnZXQgYXJlYXMsIHRoZSBzcGVjaWZpYyBzeW1ib2xzIEkgbmVlZCB0byBob25lIGluIG9uIGZvciBhbmFseXNpcywgYXJlOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGBub2RlX3JlY2xhaW1gLCBhbmQsIG9mIGNvdXJzZSwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMuXG5cbldhaXQsIHRob3VnaOKApiBJJ20gcmVhbGl6aW5nIGB0cnlfdG9fZnJlZV9wYWdlc2AgZ2V0cyBjYWxsZWQgYnkgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLiBUaGF0J3MgYSAqcmVhbGx5KiBob3QgcGF0aCwgZXNwZWNpYWxseSB3aGVuIHdlJ3JlIGZhY2luZyBtZW1vcnkgcHJlc3N1cmUuIFRoYXQgbWVhbnMgYW55IGZ1enppbmcgdGhlcmUgd2lsbCBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bGx5IGNhbGlicmF0ZWQgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIHN5c3RlbS4gQnV0LCBJIGRvbid0IHdhbnQgdG8gZ2V0IGxvc3QgaW4gdGhlIGZvcmVzdC4gTXkgcmVhbCBmb2N1cyBpcyBvbiB0aGUgbW9kaWZpZWQgbG9naWMuXG5cblNvLCBpcyB0aGVyZSBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRoYXQgaW5mbHVlbmNlcyB0aGlzIHRoYXQgSSdtIG1pc3Npbmc/IE5vLCBpdCBsb29rcyBsaWtlIGl0J3MgYWxsIGNvcmUgTU0gbG9naWMuIE9rYXksIEnigJlsbCBuZWVkIHRvIGRvIG1vcmUgZGlnZ2luZyB0byBzZWUgaWYgdGhlcmUncyBhbnkgc2V0dGluZyByZWxhdGVkIHRvIG1lbW9yeSBzY2FubmluZyBiZWhhdmlvciwgbGlrZSwgcGVyaGFwcywgYFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRGAgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQncyB0aW1lIHRvIGNoZWNrIGlmIHRoYXQgb3Igc29tZSBzaW1pbGFyIHZhcmlhYmxlIGlzIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDA2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAxOjUyLjM3MDU5MDQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDUyOTc3MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmg9MjAzPWVudW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtMjIwLSNkZWZpbmUgU1dBUF9DTFVTVEVSX01BWCAzMlVMXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6MjIxOiNkZWZpbmUgU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEIChTV0FQX0NMVVNURVJfTUFYIFxcdTAwM2NcXHUwMDNjIDEwKVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTIyMi0jZGVmaW5lIENPTVBBQ1RfQ0xVU1RFUl9NQVggU1dBUF9DTFVTVEVSX01BWFxcbi0tXFxubW0vdm1zY2FuLmM9MTY4ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMTcxNS1cXHRcXHRcXHRtYXhfbnJfc2tpcHBlZCsrO1xcbm1tL3Ztc2Nhbi5jOjE3MTY6XFx0XFx0XFx0aWYgKG1heF9ucl9za2lwcGVkIFxcdTAwM2U9IFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRCkge1xcbm1tL3Ztc2Nhbi5jLTE3MTctXFx0XFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2Zm9saW9zX3NraXBwZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMTo1NC40MjM1NzI2NjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4NTE1Mzg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGVzZSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBpc29sYXRlX2xydV9mb2xpb3NgIGFuZCBgc2hyaW5rX2xydXZlY2AuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCwgKmNvcmUqIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtIGluc2lkZSBhbmQgb3V0LiBJJ20gdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSBtb3N0IHJlcHJlc2VudGF0aXZlIHN5bWJvbHMgZm9yIG15IGFuYWx5c2lzIOKAkyB0aGUga2V5IGZ1bmN0aW9ucyBkcml2aW5nIHRoZXNlIGNoYW5nZXMuXG5cbk9yaWdpbmFsbHksIEkgaGFkIGB0cnlfdG9fZnJlZV9wYWdlc2AgaW4gbWluZCwgYW5kIGFsc28gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgbm9kZV9yZWNsYWltYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gQnV0IHdhaXQuLi4gYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBpbmNyZWRpYmx5IGdlbmVyaWMg4oCTIGEgaG90IHBhdGggY2FsbGVkIHdoZW5ldmVyIG1lbW9yeSBpcyB0aWdodC4gSSBuZWVkIHRvIGF2b2lkIHNrZXdpbmcgbXkgYW5hbHlzaXMgd2l0aCB0aG9zZSBicm9hZCBzdHJva2VzLCByZW1lbWJlcj8gVGhlIGRvY3VtZW50YXRpb24gc3RyZXNzZWQgdGhhdC4gSG1tLCAqcHJvYWN0aXZlKiByZWNsYWltLi4uIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBtaWdodCBiZSBhIGJldHRlciBmb2N1cy4gWWVzLCB0aGF0J3MgYSBkZWRpY2F0ZWQgZW50cnkgcG9pbnQgZm9yIHByb2FjdGl2ZSByZWNsYW1hdGlvbiwgc28gaXQncyBwcm9iYWJseSB0aGUgbW9zdCB2YWx1YWJsZS4gQW5kIG9mIGNvdXJzZSwgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGZvciBzb2Z0IGxpbWl0IHJlY2xhaW0gLSBJIHNob3VsZCBhbHNvIGNoZWNrIHRoYXQuIExldCdzIHNlZSB3aGF0IGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBsb29rcyBsaWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjgyOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMTo1OS4wMDg3Mjg4OTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjgwOTQ0NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9zaHJpbmtfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmg9MzY1PWV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtMzY5LVxcdFxcdFxcdFxcdFxcdFxcdCAgaW50ICpzd2FwcGluZXNzKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDozNzA6ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLFxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTM3MS1cXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjcyPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMzExLVxcdFxcdH1cXG5tbS9tZW1jb250cm9sLXYxLmM6MzEyOlxcdFxcdHRvdGFsICs9IG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUodmljdGltLCBnZnBfbWFzaywgZmFsc2UsXFxubW0vbWVtY29udHJvbC12MS5jLTMxMy1cXHRcXHRcXHRcXHRcXHRwZ2RhdCwgXFx1MDAyNm5yX3NjYW5uZWQpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjY5ND11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3MzktLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xcbm1tL3Ztc2Nhbi5jOjY3NDA6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS92bXNjYW4uYy02NzQxLVxcdFxcdFxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDI6MDAuOTc2ODMwMTM2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNTUwMDM5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSBub3RlcywgcmVmbGVjdGluZyBteSB1bmRlcnN0YW5kaW5nIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsOlxuXG4qKk1lbW9yeSBSZWNsYWltIEVudHJ5IFBvaW50czogQSBGb2N1c2VkIE92ZXJ2aWV3KipcblxuQWxyaWdodCwgdGhpbmtpbmcgdGhpcyB0aHJvdWdoLCBJJ20gbm90aW5nIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50cyBmb3IgaW5pdGlhdGluZyBtZW1vcnkgcmVjbGFpbSBwcm9jZXNzZXMsIHRoZSBwbGFjZXMgd2UgY2FuIHRyaWdnZXIgdGhlc2Ugb3BlcmF0aW9ucy4gVGhlIGdvYWwgaXMgZWZmaWNpZW5jeSBhbmQgcHJlZGljdGFiaWxpdHkuXG5cblNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZXNlIHBvaW50czpcblxuKiAgIEZpcnN0LCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIHdoaWNoIGlzIGluaXRpYXRlZCBkdXJpbmcgc29mdCByZWNsYWltIHRocm91Z2ggYG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltYC4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSB3YXkgdG8gaGFuZGxlIG1lbW9yeSBwcmVzc3VyZSBzcGVjaWZpY2FsbHkgd2l0aGluIGEgY29udHJvbCBncm91cCBjb250ZXh0LiBJIG5lZWQgdG8ga2VlcCB0aGlzIHJlbGF0aW9uc2hpcCBpbiBtaW5kIHdoZW4gZGVidWdnaW5nIGNncm91cCBtZW1vcnkgaXNzdWVzLlxuXG4qICAgVGhlbiwgd2UgaGF2ZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIHdoaWNoIGlzIHRyaWdnZXJlZCB0aHJvdWdoIHN5c2ZzIGFuZCBjZ3JvdXBmcy4gVGhlc2UgcHJvdmlkZSBkaXJlY3QsIHVzZXItc3BhY2UgY29udHJvbGxlZCBvcHRpb25zIGZvciB0cmlnZ2VyaW5nIHJlY2xhaW0sIHdoaWNoIGlzIGV4Y2VsbGVudCBmb3Igc3lzdGVtIGFkbWluaXN0cmF0aW9uIGFuZCB0b29saW5nLiBUaGV5IGFyZSByZWxhdGl2ZWx5IG5vbi1ob3QtcGF0aCBlbnRyeSBwb2ludHMsIHdoaWNoIGlzIGltcG9ydGFudCBmb3Igc3lzdGVtIHN0YWJpbGl0eS5cblxuKiAgIEZpbmFsbHksIHRoZXJlJ3MgYHNocmlua19hbGxfbWVtb3J5YC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgaGliZXJuYXRpb24gb3BlcmF0aW9ucy4gSSdsbCBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGluIHJlbGF0aW9uIHRvIHRoZSBvdGhlcnMsIGFzIGl0IGxpa2VseSBoYXMgYnJvYWRlciBpbXBsaWNhdGlvbnMgZm9yIG92ZXJhbGwgc3lzdGVtIG1lbW9yeSBzdGF0ZS5cblxuSSdtIHN0cnVjdHVyaW5nIG15IHRoaW5raW5nIGFyb3VuZCB0aGVzZSBlbnRyeSBwb2ludHMgYmVjYXVzZSB0aGV5IHJlcHJlc2VudCBkaXN0aW5jdCB0cmlnZ2VycyB0aGF0IGluaXRpYXRlIG1lbW9yeSByZWNsYWltIGFuZCBteSBvdmVyYWxsIG1lbnRhbCBtb2RlbCBvZiB0aGUgc3lzdGVtJ3MgcmVjbGFpbSBwcm9jZXNzZXMgcmVsaWVzIG9uIHVuZGVyc3RhbmRpbmcgd2hlcmUgdGhlIHByb2Nlc3MgaXMgY2FsbGVkIGZyb20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjg4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDI6MDUuMzMxODM2NzM4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU4MDI2NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19hbGxfbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N3YXAuaD0zNzA9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtMzczLVxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oOjM3NDpleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0zNzUtZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xcbi0tXFxua2VybmVsL3Bvd2VyL3NuYXBzaG90LmM9MTgyND1pbnQgaGliZXJuYXRlX3ByZWFsbG9jYXRlX21lbW9yeSh2b2lkKVxcbi0tXFxua2VybmVsL3Bvd2VyL3NuYXBzaG90LmMtMTkxNy1cXHQgKi9cXG5rZXJuZWwvcG93ZXIvc25hcHNob3QuYzoxOTE4OlxcdHNocmlua19hbGxfbWVtb3J5KHNhdmVhYmxlIC0gc2l6ZSk7XFxua2VybmVsL3Bvd2VyL3NuYXBzaG90LmMtMTkxOS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc1NjQ9Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNzU3Ny0gKi9cXG5tbS92bXNjYW4uYzo3NTc4OnVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbm1tL3Ztc2Nhbi5jLTc1Nzkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMjowNy4yODk4Njk0NjJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUzMzExMzU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNZW1vcnkgUmVjbGFpbSBTdHJhdGVnaWVzKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBkaWZmZXJlbnQgbWVjaGFuaXNtcyB3ZSBoYXZlIGZvciBtZW1vcnkgcmVjbGFpbS4gSSBzZWUgdGhhdCBgc2hyaW5rX2FsbF9tZW1vcnlgIGlzIHNwZWNpZmljYWxseSB0aWVkIHRvIGhpYmVybmF0aW9uLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIHRoYXQncyB0aGUgb25lIHdlIHVzZSBmb3Igc3lzZnMgYW5kIGNncm91cGZzIHJlY2xhaW0g4oCTIHRoYXTigJlzIGNyaXRpY2FsIGZvciBkeW5hbWljIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoZW4gdGhlcmUncyBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIHdoaWNoIGhhbmRsZXMgcmVjbGFpbSB3aGVuIHNvZnQgbGltaXRzIGFyZSBoaXQgd2l0aGluIGEgbWVtY2csIGFub3RoZXIgdml0YWwgY29tcG9uZW50LiBGaW5hbGx5LCBgbm9kZV9yZWNsYWltYCBpcyBzcGVjaWZpY2FsbHkgZm9yIG5vZGUgcmVjbGFpbSBtb2RlLiBUaGVzZSBhbGwgc2VlbSBsaWtlIGdvb2QsIHdlbGwtZGVmaW5lZCBmb2N1cyBhcmVhcy5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgZ292ZXJuIHRoZXNlLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfSElCRVJOQVRJT05gIGFjdGl2YXRlcyBgc2hyaW5rX2FsbF9tZW1vcnlgLCB3aGljaCBpcyBhcyBleHBlY3RlZC4gYENPTkZJR19NRU1DR2AsIG5hdHVyYWxseSwgZW5hYmxlcyBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBzaW5jZSB0aGV5J3JlIGZ1bmRhbWVudGFsbHkgdGllZCB0byBjZ3JvdXAtYmFzZWQgbWVtb3J5IG1hbmFnZW1lbnQuIFRpbWUgdG8gZGlnIGludG8gYG1tL3Ztc2Nhbi5jYCB0byBsb29rIHNwZWNpZmljYWxseSBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIHdpdGhpbiB0aGF0IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0Mzg4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjEzLjgyMjk4NTA5NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MzQwNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03ODc4PXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4ODMtXFxubW0vdm1zY2FuLmM6Nzg4NDppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vdm1zY2FuLmMtNzg4NS1cXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYz04MDM0PXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxubW0vdm1zY2FuLmMtODAzOS1cXG5tbS92bXNjYW4uYzo4MDQwOlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcXG5tbS92bXNjYW4uYy04MDQxLVxcdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjEzLjg2ODQyNDQ3MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc0NDc1NTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipBbmFseXppbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCoqXG5cbk9rYXksIHNvIHRoZSBnb2FsIGlzIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBzdWJqZWN0IHRvIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIHdyYXBwZWQgaW5zaWRlIGFueSBgI2lmZGVmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgcG9ydGFiaWxpdHkgYWNyb3NzIGRpZmZlcmVudCBidWlsZCBjb25maWd1cmF0aW9ucyBvciBwbGF0Zm9ybXMuIEknbGwgbmVlZCB0byByYXBpZGx5IHNjYW4gdGhlIGNvZGUgZm9yIGFueSBzdWNoIGluc3RhbmNlcy4gSWRlbnRpZnlpbmcgdGhlIHN1cnJvdW5kaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBpZiBhbnkgZXhpc3QsIHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBpbmNsdWRlZCBpbiB0aGUgZmluYWwgYmluYXJ5LiBUaGlzIGluZm9ybWF0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IHdpdGhpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA0MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjE3Ljc0MjkwMzk1M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyODg0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc0PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xcbi0tXFxubW0vdm1zY2FuLmMtMTg0LVxcbm1tL3Ztc2Nhbi5jOjE4NTojaWZkZWYgQVJDSF9IQVNfUFJFRkVUQ0hXXFxubW0vdm1zY2FuLmMtMTg2LSNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZClcXHRcXHRcXHRcXFxcXFxuLS1cXG5tbS92bXNjYW4uYz0yMDI9aW50IHZtX3N3YXBwaW5lc3MgPSA2MDtcXG5tbS92bXNjYW4uYy0yMDMtXFxubW0vdm1zY2FuLmM6MjA0OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yMDUtXFxuLS1cXG5tbS92bXNjYW4uYz0yMzQ9c3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIzNy1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS92bXNjYW4uYzoyMzg6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vdm1zY2FuLmMtMjM5LVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbi0tXFxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzMtXFxubW0vdm1zY2FuLmM6ODM0OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzNS0vKlxcbi0tXFxubW0vdm1zY2FuLmM9MTA1OD1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMjg4LVxcdFxcdFxcdFxcdFxcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xcbm1tL3Ztc2Nhbi5jOjEyODk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3Ztc2Nhbi5jLTEyOTAtXFx0XFx0XFx0XFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUikge1xcbi0tXFxubW0vdm1zY2FuLmM9MjYyMD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjYzMS1cXG5tbS92bXNjYW4uYzoyNjMyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI2MzMtXFxubW0vdm1zY2FuLmM9MjYzND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNjM1OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjYzNi1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2ODQ9c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtMjY4Ny1cXG5tbS92bXNjYW4uYzoyNjg4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yNjg5LVxcdGlmIChtZW1jZykge1xcbi0tXFxubW0vdm1zY2FuLmM9MjgxNj1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MzUtXFxubW0vdm1zY2FuLmM6MjgzNjojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxubW0vdm1zY2FuLmMtMjgzNy1cXG5tbS92bXNjYW4uYz0yODM4PXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yODQ0LVxcbm1tL3Ztc2Nhbi5jOjI4NDU6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI4NDYtXFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9Mjg3OD12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg4NC1cXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNm1tLVxcdTAwM2VscnVfZ2VuLmxpc3QpKTtcXG5tbS92bXNjYW4uYzoyODg1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yODg2LVxcdFZNX1dBUk5fT05fT05DRShtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yOTA1PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yOTEzLVxcbm1tL3Ztc2Nhbi5jOjI5MTQ6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5MTUtXFx0bWVtY2cgPSBtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZztcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MzctXFxubW0vdm1zY2FuLmM6MjkzODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkzOS1cXHRtZW1fY2dyb3VwX3B1dChtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYy0yOTQzLVxcbm1tL3Ztc2Nhbi5jOjI5NDQ6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5NDUtdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYz00MzEzPXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxcbi0tXFxubW0vdm1zY2FuLmMtNDM1OC1cXG5tbS92bXNjYW4uYzo0MzU5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy00MzYwLVxcbi0tXFxubW0vdm1zY2FuLmM9NTUxOT1zdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxubW0vdm1zY2FuLmMtNTUzMi1cXG5tbS92bXNjYW4uYzo1NTMzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy01NTM0LVxcdFxcdGlmIChtZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3ODU9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4MDQtXFxubW0vdm1zY2FuLmM6NTgwNTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNTgwNi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2OTQ9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02NzM2LVxcbm1tL3Ztc2Nhbi5jOjY3Mzc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTY3MzgtXFxuLS1cXG5tbS92bXNjYW4uYz03NTY0PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NjgtXFxubW0vdm1zY2FuLmM6NzU2OTojaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OXFxubW0vdm1zY2FuLmMtNzU3MC0vKlxcbi0tXFxubW0vdm1zY2FuLmM9NzY0OT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03NjU4LVxcdH0sXFxubW0vdm1zY2FuLmM6NzY1OTojaWZkZWYgQ09ORklHX05VTUFcXG5tbS92bXNjYW4uYy03NjYwLVxcdHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc2ODI9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXFxubW0vdm1zY2FuLmMtNzY4My1cXG5tbS92bXNjYW4uYzo3Njg0OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3Ztc2Nhbi5jLTc2ODUtLypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDI6MTcuNzg3MTk5MjI4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMTQ5NzUwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIHRoZSBleHBlcnQgYW5kIGNvbnNpZGVyaW5nIG15IGJhY2tncm91bmQuXG5cbioqTmF2aWdhdGluZyBOVU1BIGFuZCBQcm9hY3RpdmUgUmVjbGFpbWluZyoqXG5cblJpZ2h0LCBzbyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdGhlIGBDT05GSUdfTlVNQWAgb3B0aW9uLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGFuZCBpdCBpbW1lZGlhdGVseSBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoZXJlIEkgbmVlZCB0byBsb29rIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLiBOb3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gTXkgaW50dWl0aW9uLCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlLCB0ZWxscyBtZSB0aGF0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWNsYWltLXJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdG8gYmUgZm91bmQgaW4gYG1tL3Ztc2Nhbi5jYC4gS25vd2luZyB0aGUgY29kZSBiYXNlLCBsaW5lIDc4ODQgaXMgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IHdpdGhpbiB0aGF0IGZpbGUsIGFzIHRoYXQncyBvZnRlbiB3aGVyZSByZWNsYWltIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLiBTbyBsZXQgbWUgcHVsbCB0aGF0IGZpbGUgdXAgYW5kIGdldCBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzAzNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjIzLjAwMjE3NzA3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzg3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzg3MDpcXHRcXG43ODcxOlxcdCNlbmRpZlxcbjc4NzI6XFx0XFxuNzg3MzpcXHRlbnVtIHtcXG43ODc0OlxcdFxcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MgPSAwLFxcbjc4NzU6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXFxuNzg3NjpcXHRcXHRNRU1PUllfUkVDTEFJTV9OVUxMLFxcbjc4Nzc6XFx0fTtcXG43ODc4OlxcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG43ODc5OlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXFxcInN3YXBwaW5lc3M9JWRcXFwifSxcXG43ODgwOlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsIFxcXCJzd2FwcGluZXNzPW1heFxcXCJ9LFxcbjc4ODE6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXFxuNzg4MjpcXHR9O1xcbjc4ODM6XFx0XFxuNzg4NDpcXHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuNzg4NTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuNzg4NjpcXHR7XFxuNzg4NzpcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuNzg4ODpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0sIG5yX3JlY2xhaW1lZCA9IDA7XFxuNzg4OTpcXHRcXHRpbnQgc3dhcHBpbmVzcyA9IC0xO1xcbjc4OTA6XFx0XFx0Y2hhciAqb2xkX2J1ZiwgKnN0YXJ0O1xcbjc4OTE6XFx0XFx0c3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdO1xcbjc4OTI6XFx0XFx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xcbjc4OTM6XFx0XFxuNzg5NDpcXHRcXHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFxcdTAwMjZcXHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFxcdTAwMjZcXHUwMDI2IHBnZGF0KSlcXG43ODk1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4OTY6XFx0XFxuNzg5NzpcXHRcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbjc4OTg6XFx0XFxuNzg5OTpcXHRcXHRvbGRfYnVmID0gYnVmO1xcbjc5MDA6XFx0XFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXFx1MDAyNmJ1ZikgLyBQQUdFX1NJWkU7XFxuNzkwMTpcXHRcXHRpZiAoYnVmID09IG9sZF9idWYpXFxuNzkwMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43OTAzOlxcdFxcbjc5MDQ6XFx0XFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcXG43OTA1OlxcdFxcbjc5MDY6XFx0XFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcXHUwMDI2YnVmLCBcXFwiIFxcXCIpKSAhPSBOVUxMKSB7XFxuNzkwNzpcXHRcXHRcXHRpZiAoIXN0cmxlbihzdGFydCkpXFxuNzkwODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43OTA5OlxcdFxcdFxcdHN3aXRjaCAobWF0Y2hfdG9rZW4oc3RhcnQsIHRva2VucywgYXJncykpIHtcXG43OTEwOlxcdFxcdFxcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcXG43OTExOlxcdFxcdFxcdFxcdGlmIChtYXRjaF9pbnQoXFx1MDAyNmFyZ3NbMF0sIFxcdTAwMjZzd2FwcGluZXNzKSlcXG43OTEyOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc5MTM6XFx0XFx0XFx0XFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxcbjc5MTQ6XFx0XFx0XFx0XFx0ICAgIHN3YXBwaW5lc3MgXFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcXG43OTE1OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc5MTY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzkxNzpcXHRcXHRcXHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxcbjc5MTg6XFx0XFx0XFx0XFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xcbjc5MTk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjIzLjAwMjUxNzA4NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mjc3NDczODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zIGluIHRoZSBLZXJuZWwqKlxuXG5BbHJpZ2h0LCBJJ20gdHJhY2luZyBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHRyeWluZyB0byB1bmRlcnN0YW5kIHdoZXJlIGNlcnRhaW4gZnVuY3Rpb25zIGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJbml0aWFsbHksIEkgdGhvdWdodCBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gd2FzIGRlcGVuZGVudCBvbiBgQ09ORklHX05VTUFgLCBidXQgdGhhdCB3YXMgaW5jb3JyZWN0OyBpdCdzIGFjdHVhbGx5IHBsYWNlZCBhZnRlciBhbiBgI2VuZGlmYCBkaXJlY3RpdmUsIG1lYW5pbmcgaXQncyBub3QgY29uZGl0aW9uYWwgb24gdGhhdCBzZXR0aW5nLlxuXG5XYWl0LCBsb29raW5nIG1vcmUgY2xvc2VseSwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIGNsZWFybHkgY29udHJvbGxlZCBieSBgQ09ORklHX01FTUNHYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBhIG1lbW9yeSBjZ3JvdXAtcmVsYXRlZCBmdW5jdGlvbiwgc28gdGhlIGRlcGVuZGVuY3kgYWxpZ25zIHdpdGggaXRzIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgYHNocmlua19hbGxfbWVtb3J5YCBpcyBkZXBlbmRlbnQgb24gYENPTkZJR19ISUJFUk5BVElPTmAsIHdoaWNoIGlzIGxvZ2ljYWwuIFRoaXMgc3VnZ2VzdHMgaXQncyBpbnZvbHZlZCBpbiBzYXZpbmcgdGhlIGVudGlyZSBzeXN0ZW0gc3RhdGUuXG5cbkFuZCBmaW5hbGx5LCBgbm9kZV9yZWNsYWltYCAqaXMqIHVuZGVyIGBDT05GSUdfTlVNQWAsIGFzIEkgZXhwZWN0ZWQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG5vZGVfcmVjbGFpbWAgc2luY2UgaXQncyB0aGUgb25lIHRoYXQgSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODA1MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDI6MjkuMjc5OTkzNjQ1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTU5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzY4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzY4MDpcXHR9XFxuNzY4MTpcXHRcXG43NjgyOlxcdG1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxcbjc2ODM6XFx0XFxuNzY4NDpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG43Njg1OlxcdC8qXFxuNzY4NjpcXHQgKiBOb2RlIHJlY2xhaW0gbW9kZVxcbjc2ODc6XFx0ICpcXG43Njg4OlxcdCAqIElmIG5vbi16ZXJvIGNhbGwgbm9kZV9yZWNsYWltIHdoZW4gdGhlIG51bWJlciBvZiBmcmVlIHBhZ2VzIGZhbGxzIGJlbG93XFxuNzY4OTpcXHQgKiB0aGUgd2F0ZXJtYXJrcy5cXG43NjkwOlxcdCAqL1xcbjc2OTE6XFx0aW50IG5vZGVfcmVjbGFpbV9tb2RlIF9fcmVhZF9tb3N0bHk7XFxuNzY5MjpcXHRcXG43NjkzOlxcdC8qXFxuNzY5NDpcXHQgKiBQcmlvcml0eSBmb3IgTk9ERV9SRUNMQUlNLiBUaGlzIGRldGVybWluZXMgdGhlIGZyYWN0aW9uIG9mIHBhZ2VzXFxuNzY5NTpcXHQgKiBvZiBhIG5vZGUgY29uc2lkZXJlZCBmb3IgZWFjaCB6b25lX3JlY2xhaW0uIDQgc2NhbnMgMS8xNnRoIG9mXFxuNzY5NjpcXHQgKiBhIHpvbmUuXFxuNzY5NzpcXHQgKi9cXG43Njk4OlxcdCNkZWZpbmUgTk9ERV9SRUNMQUlNX1BSSU9SSVRZIDRcXG43Njk5OlxcdFxcbjc3MDA6XFx0LypcXG43NzAxOlxcdCAqIFBlcmNlbnRhZ2Ugb2YgcGFnZXMgaW4gYSB6b25lIHRoYXQgbXVzdCBiZSB1bm1hcHBlZCBmb3Igbm9kZV9yZWNsYWltIHRvXFxuNzcwMjpcXHQgKiBvY2N1ci5cXG43NzAzOlxcdCAqL1xcbjc3MDQ6XFx0aW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW8gPSAxO1xcbjc3MDU6XFx0XFxuNzcwNjpcXHQvKlxcbjc3MDc6XFx0ICogSWYgdGhlIG51bWJlciBvZiBzbGFiIHBhZ2VzIGluIGEgem9uZSBncm93cyBiZXlvbmQgdGhpcyBwZXJjZW50YWdlIHRoZW5cXG43NzA4OlxcdCAqIHNsYWIgcmVjbGFpbSBuZWVkcyB0byBvY2N1ci5cXG43NzA5OlxcdCAqL1xcbjc3MTA6XFx0aW50IHN5c2N0bF9taW5fc2xhYl9yYXRpbyA9IDU7XFxuNzcxMTpcXHRcXG43NzEyOlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3VubWFwcGVkX2ZpbGVfcGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG43NzEzOlxcdHtcXG43NzE0OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmlsZV9tYXBwZWQgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0ZJTEVfTUFQUEVEKTtcXG43NzE1OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmlsZV9scnUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpICtcXG43NzE2OlxcdFxcdFxcdG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfQUNUSVZFX0ZJTEUpO1xcbjc3MTc6XFx0XFxuNzcxODpcXHRcXHQvKlxcbjc3MTk6XFx0XFx0ICogSXQncyBwb3NzaWJsZSBmb3IgdGhlcmUgdG8gYmUgbW9yZSBmaWxlIG1hcHBlZCBwYWdlcyB0aGFuXFxuNzcyMDpcXHRcXHQgKiBhY2NvdW50ZWQgZm9yIGJ5IHRoZSBwYWdlcyBvbiB0aGUgZmlsZSBMUlUgbGlzdHMgYmVjYXVzZVxcbjc3MjE6XFx0XFx0ICogdG1wZnMgcGFnZXMgYWNjb3VudGVkIGZvciBhcyBBTk9OIGNhbiBhbHNvIGJlIEZJTEVfTUFQUEVEXFxuNzcyMjpcXHRcXHQgKi9cXG43NzIzOlxcdFxcdHJldHVybiAoZmlsZV9scnUgXFx1MDAzZSBmaWxlX21hcHBlZCkgPyAoZmlsZV9scnUgLSBmaWxlX21hcHBlZCkgOiAwO1xcbjc3MjQ6XFx0fVxcbjc3MjU6XFx0XFxuNzcyNjpcXHQvKiBXb3JrIG91dCBob3cgbWFueSBwYWdlIGNhY2hlIHBhZ2VzIHdlIGNhbiByZWNsYWltIGluIHRoaXMgcmVjbGFpbV9tb2RlICovXFxuNzcyNzpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbjc3Mjg6XFx0e1xcbjc3Mjk6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlY2FjaGVfcmVjbGFpbWFibGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjI5LjI4MTI5Mjc4NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzE1NjAwODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBOVU1BIGFuZCBNZW1vcnkgUmVjbGFpbWluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgbm9kZV9yZWNsYWltYCBpcyBkZWZpbml0ZWx5IG5lc3RlZCB1bmRlciBgQ09ORklHX05VTUFgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgc3VwcG9ydGluZyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gVGhhdCB3b3VsZCBiZSBgTUVNQ0dgLCBgSElCRVJOQVRJT05gLCBhbmQgb2YgY291cnNlLCBgTlVNQWAgaXRzZWxmLiBCdXQgd2FpdC4uLiBpc24ndCBgc2hyaW5rX2FsbF9tZW1vcnlgIGFsc28gdGllZCB0byBgQ09ORklHX0hJQkVSTkFUSU9OYD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgaWYgYHNocmlua19hbGxfbWVtb3J5YCBpcyBleHBvcnRlZCBwcm9wZXJseS4gSXQncyBjcnVjaWFsIGZvciB0aGUgaW50ZW5kZWQgYmVoYXZpb3VyIHRvIHdvcmsgY29ycmVjdGx5IHdpdGhpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE2OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDI6MzUuNTk2ODk2NTIxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQwNDQ5NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qc2hyaW5rX2FsbF9tZW1vcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjM1LjY0NTMwODgwNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTc2ODE2MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2A6XG5cbioqQW5hbHl6aW5nIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCoqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBhcyBpdCByZWxhdGVzIHRvIG1lbW9yeSBjZ3JvdXBzLiBXaGF0IGlzIGl0ICp0cnlpbmcqIHRvIGFjY29tcGxpc2g/IFByZXN1bWFibHksIGJhc2VkIG9uIHRoZSBuYW1lLCBpdHMgb2JqZWN0aXZlIGlzIHRvIHJlY2xhaW0gbWVtb3J5IHdpdGhpbiBhIHNwZWNpZmljIGNncm91cC4gSXMgaXQgcGFydCBvZiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcHJvY2Vzcywgb3IgcGVyaGFwcyB0cmlnZ2VyZWQgYnkgaGlnaC1tZW1vcnkgcHJlc3N1cmUgd2l0aGluIHRoZSBjZ3JvdXA/IEkgbmVlZCB0byBhc2NlcnRhaW4gdGhlIGNvbnRleHQgd2l0aGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGludm9rZWQg4oCTIHdobyBjYWxscyBpdCBhbmQgd2hlbi5cblxuSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgZnVuY3Rpb24ncyBwYXJhbWV0ZXJzLiBXaGF0IGluZm9ybWF0aW9uIGRvZXMgaXQgcmVxdWlyZSB0byBkbyBpdHMgam9iPyBEb2VzIGl0IHRha2UgYSBwb2ludGVyIHRvIHRoZSBjZ3JvdXAgaXRzZWxmPyBQZXJoYXBzIGEgdGFyZ2V0IGFtb3VudCBvZiBtZW1vcnkgdG8gZnJlZT8gQXJlIHRoZXJlIGhpbnRzIGFib3V0IHRoZSB0eXBlIG9mIHBhZ2VzIGl0IHRhcmdldHMsIG9yIGFueSBjb25zaWRlcmF0aW9ucyBvZiBhIGdsb2JhbCBtZW1vcnkgcG9vbD9cblxuTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhhbWluZSB0aGUgY29kZSBpdHNlbGYuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWNsYWltIG1lY2hhbmlzbS4gRG9lcyBpdCB1c2UgdGhlIHBhZ2UgY2FjaGUsIG9yIHNvbWUgb3RoZXIgc3RyYXRlZ3k/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgc3Vic3lzdGVtcyBsaWtlIHRoZSBwYWdlIGFsbG9jYXRvciBhbmQgdGhlIHNsYWIgYWxsb2NhdG9yPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIHBvdGVudGlhbCBjb250ZW50aW9uIG9yIGluZWZmaWNpZW5jeSB0aGF0IEkgc2hvdWxkIHdhdGNoIG91dCBmb3I/XG5cbkNydWNpYWxseSwgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBmdW5jdGlvbiBmYWlscyB0byBmcmVlIG1lbW9yeT8gRG9lcyBpdCByZXR1cm4gYW4gZXJyb3IgY29kZSwgb3Igc2lnbmFsIGZhaWx1cmUgc29tZSBvdGhlciB3YXk/IEhvdyBpcyB0aGlzIGZhaWx1cmUgaGFuZGxlZCB1cHN0cmVhbSBpbiB0aGUgY2FsbGluZyBjb2RlPyBJJ2xsIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjb25jdXJyZW5jeSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbi4gRG9lcyBpdCB1c2UgYW55IGxvY2tzIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBkZWFkbG9ja3M/XG5cbkZyb20gYSBwZXJmb3JtYW5jZSBwZXJzcGVjdGl2ZSwgSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSB0cmFkZS1vZmZzIGl0IG1ha2VzLiBJcyBpdCBvcHRpbWl6ZWQgZm9yIGxvdyBsYXRlbmN5IG9yIGZvciBoaWdoIHRocm91Z2hwdXQ/IEhvdyBzZW5zaXRpdmUgaXMgaXQgdG8gZGlmZmVyZW50IHdvcmtsb2Fkcz8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXRzIHJlY2xhaW0gc3RyYXRlZ3kgaXMgYmlhc2VkIHRvd2FyZCBjZXJ0YWluIHBhZ2UgdHlwZXMgb3IgcGFnZSBzb3VyY2VzLlxuXG5VbHRpbWF0ZWx5LCBteSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBvcGVyYXRpbmcgYXMgaW50ZW5kZWQgYW5kLCBvZiBjb3Vyc2UsIHRvIGlkZW50aWZ5IGFueSBhcmVhcyBvZiBwb3RlbnRpYWwgaW1wcm92ZW1lbnQgb3IgYW55IHBvc3NpYmxlIGJ1Z3MuIFRoaXMgd2lsbCBiZSB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBtZW1vcnkgY2dyb3VwIHJlY2xhaW0gc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDI0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDI6NDAuODIyMTI4MzA3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDkyNDA1NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDI6NDAuODc3MDU4NDQxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjgwMTA5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVyaWVuY2VkIGtlcm5lbCBkZXZlbG9wZXI6XG5cbioqRGVsdmluZyBpbnRvIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIHNvIHRoZXNlIGZ1bmN0aW9ucyBhcmVuJ3QgZXhwbGljaXRseSBleHBvcnRlZCwgbWVhbmluZyB0aGV5J3JlIG5vdCBwYXJ0IG9mIHRoZSBrZXJuZWwncyBleHRlcm5hbCBBUEkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLiBCdXQsIGFuZCB0aGlzIGlzIGtleSwgdGhleSAqYXJlKiBhY2Nlc3NpYmxlIGludGVybmFsbHkuIFRoZXkncmUgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZCwgbWVhbmluZyB0aGV5IGhhdmUgaW50ZXJuYWwgbGlua2FnZSBidXQgYXJlbid0IGxpbWl0ZWQgdG8gYSBzaW5nbGUgZmlsZS4gVGhleSBjYW4gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciB1dGlsaXR5IGZ1bmN0aW9ucyBvciB0aG9zZSB0aGF0IHBlcmZvcm0gYSB2ZXJ5IHNwZWNpZmljIGZ1bmN0aW9uIHdpdGhpbiBhIGxhcmdlciBjb21wb25lbnQuXG5cbkxldCdzIGhvbmUgaW4gb24gdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZnVuY3Rpb24gc3BlY2lmaWNhbGx5LiBJJ20gZ29pbmcgdG8gcmV2aXNpdCB0aGF0IGNvZGUgYmxvY2suIEknbSBub3cgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0J3MgbGlua2VkIGludG8gb3RoZXIgYXJlYXMgb2YgdGhlIHN5c3RlbSwgYW5kIHdoYXQgdGhlIGNvbmRpdGlvbnMgYXJlIHVuZGVyIHdoaWNoIGl0J3MgaW52b2tlZC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdXNlci1zcGFjZSBtZW1vcnkgcmVjbGFpbS4gSSdtIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgaXQgY291bGQgYmUgYSBwb3RlbnRpYWwgaG90IHNwb3Qgb3IgYSBwb2ludCBmb3Igb3B0aW1pemF0aW9uLiBJJ20gZ29pbmcgdG8gZGl2ZSBkZWVwZXIgaW50byBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGl0cyBjYWxsIHNpdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTk4NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjQ0LjkwNTA3MTc5N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NzYyMjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjQ0Ljk1MTY1ODYyMloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzI2MTE0NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBTZWxlY3Rpb24gZm9yIFN5emthbGxlciBDb3ZlcmFnZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZ3VpZGUgc3l6a2FsbGVyIHRvIGltcHJvdmUgaXRzIGNvdmVyYWdlIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGNncm91cC1yZWxhdGVkIGZ1bmN0aW9ucy4gRmlyc3QsIEkgd2FudGVkIHRvIHZlcmlmeSBpZiBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAgaXMgZXhwb3J0ZWQsIGJ1dCBpdCdzIG5vdC4gVGhhdCdzIGZpbmUsIHN5emthbGxlciBjYW4gc3RpbGwgZnV6eiBub24tc3RhdGljLCByZWFjaGFibGUgZnVuY3Rpb25zLiBUaGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRoYXQgc3l6a2FsbGVyLCB0aHJvdWdoIGZ1enppbmcgc3lzY2FsbHMsICp3aWxsKiBldmVudHVhbGx5IHRvdWNoIHRoZXNlIGZ1bmN0aW9ucy4gVGhlIGZvY3VzIHN5bWJvbHMgSSBwcm92aWRlIGFyZSBqdXN0IGhpbnRzIHRvIHByaW9yaXRpemUgdGhlIGV4cGxvcmF0aW9uIG9mIHNwZWNpZmljIGNvZGUgcGF0aHMuXG5cblNvLCBsZXQncyBtYWtlIGEgbGlzdC4gVGhlIG9idmlvdXMgY2FuZGlkYXRlcyBhcmUgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgbm9kZV9yZWNsYWltYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC5cblxuSG9sZCBvbiwgdGhvdWdoLiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGNhbGxlZCBieSBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAsIHdoaWNoIGlzIGEgdG90YWwgaG90LXBhdGguIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBcIkF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zXCIgaXMgYSBjcnVjaWFsIGJlc3QgcHJhY3RpY2UuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGV4Y2x1ZGUgYHRyeV90b19mcmVlX3BhZ2VzYC5cblxuTm93LCBsZXQncyBldmFsdWF0ZSB0aGUgb3RoZXJzLiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgbG9va3MgZ29vZDsgaXQncyB0cmlnZ2VyZWQgdGhyb3VnaCBzeXNmcy9jZ3JvdXBmcywgc28gaXQncyBhIHNwZWNpZmljIGVudHJ5IHBvaW50LiAgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIGNhbGxlZCBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgaW4gYG1tL21lbWNvbnRyb2wuY2AsIHdoaWNoIGlzIGFsc28gYSBjZ3JvdXBmcyBpbnRlcmZhY2UuIEdvb2QsIHRoYXQgZml0cyBteSBuZWVkcy4gYHNocmlua19hbGxfbWVtb3J5YCBpcyBjYWxsZWQgZnJvbSBgaGliZXJuYXRlX3ByZWFsbG9jYXRlX21lbW9yeWAsIHdoaWNoIGlzIGEgc3BlY2lmaWMsIHdlbGwtZGVmaW5lZCBvcGVyYXRpb24uIEFuZCBgbm9kZV9yZWNsYWltYCBjb21lcyBmcm9tIGBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0YCB3aGVuIGBub2RlX3JlY2xhaW1fbW9kZWAgaXMgZW5hYmxlZC4gSXQncyBhIGJpdCBvZiBhIGhvdC1wYXRoIGlmIHRoZSBtb2RlIGlzIG9uLCBidXQgaXQncyBkaXNhYmxlZCBieSBkZWZhdWx0LlxuXG5TbyBJIHNob3VsZCBiZSBsZWZ0IHdpdGggdGhpcyBhcyBteSBmaW5hbCBsaXN0OlxuXG4qICAgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgXG4qICAgYHNocmlua19hbGxfbWVtb3J5YFxuKiAgIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYFxuKiAgIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYFxuXG5PbmUgbGFzdCBzdGVwOiBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBpcyBpbmRlZWQgcHJvdGVjdGVkIGJ5IGBDT05GSUdfTUVNQ0dgLiBHb3R0YSBtYWtlIHN1cmUgSSdtIHRhcmdldGluZyB0aGUgcmlnaHQgY29kZSBwYXRoIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMDM0NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMjo1My4yNzc3NzYzOTdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODczNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfc2hyaW5rX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NjY5ND11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3MzktLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xcbm1tL3Ztc2Nhbi5jOjY3NDA6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS92bXNjYW4uYy02NzQxLVxcdFxcdFxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDI6NTMuMzIzNjU2NzMyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzYyMjI2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkNoZWNraW5nIGZvciBNZW1vcnkgQ29udHJvbCBHcm91cCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoaXMgZnVydGhlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHNlY3Rpb24gaXMgZXZlbiByZWxldmFudC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayBhbmQgc2VlIGlmIHdlJ3JlIG9wZXJhdGluZyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBJdCdzIGFsbW9zdCByZWZsZXhpdmUgYXQgdGhpcyBwb2ludCwgYnV0IGFueSBkaXNjdXNzaW9uIGFib3V0IHJlc291cmNlIG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSBtZW1vcnksIG5lY2Vzc2l0YXRlcyB1bmRlcnN0YW5kaW5nIHRoZSBlbnZpcm9ubWVudC4gU28sIGxldCdzIHNlZSDigJMgYCNpZmRlZiBDT05GSUdfTUVNQ0dgLiBUaGF0IHByZXByb2Nlc3NvciBkaXJlY3RpdmUgd2lsbCBiZSB0aGUga2V5LiBJZiB0aGF0J3Mgbm90IGRlZmluZWQsIHdoYXRldmVyIGZvbGxvd3MgaXMgbGlrZWx5IGlycmVsZXZhbnQgdG8gdGhpcyBkaXNjdXNzaW9uIGFuZCBJIGNhbiBtb3ZlIG9uLiBJZiBpdCAqaXMqIGRlZmluZWQsIHRoZW4gd2UgaGF2ZSBhIHBvdGVudGlhbCBkZXBlbmRlbmN5IGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBsYXJnZXIgbWVtb3J5IGNncm91cCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTUwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjU2Ljg5OTg4MjQ4M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc0ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY3MzA6XFx0XFxuNjczMTpcXHRcXHR0cmFjZV9tbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kKG5yX3JlY2xhaW1lZCwgTlVMTCk7XFxuNjczMjpcXHRcXHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIE5VTEwpO1xcbjY3MzM6XFx0XFxuNjczNDpcXHRcXHRyZXR1cm4gbnJfcmVjbGFpbWVkO1xcbjY3MzU6XFx0fVxcbjY3MzY6XFx0XFxuNjczNzpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuNjczODpcXHRcXG42NzM5OlxcdC8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cXG42NzQwOlxcdHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuNjc0MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuNjc0MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRwZ19kYXRhX3QgKnBnZGF0LFxcbjY3NDM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZClcXG42NzQ0OlxcdHtcXG42NzQ1OlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XFxuNjc0NjpcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xcbjY3NDc6XFx0XFx0XFx0Lm5yX3RvX3JlY2xhaW0gPSBTV0FQX0NMVVNURVJfTUFYLFxcbjY3NDg6XFx0XFx0XFx0LnRhcmdldF9tZW1fY2dyb3VwID0gbWVtY2csXFxuNjc0OTpcXHRcXHRcXHQubWF5X3dyaXRlcGFnZSA9IDEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjU2LjkwMTY2MTk4M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDYzNjg3MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6XG5cbioqTmF2aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgeWVwLCB0aGF0J3MgdGhlIG9uZS4gTGV0J3Mgc2VlLi4uIHRoZSByZWxldmFudCBjb25maWdzIGhlcmUgYXJlIGBNRU1DR2AsIGBISUJFUk5BVElPTmAsIGFuZCBgTlVNQWAuIEhhbmcgb24gYSBzZWNvbmQsIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIG9wdGlvbi4uLiBpdCdzIG5vdCBuZXN0ZWQgKndpdGhpbiogYENPTkZJR19OVU1BYCwgbGlrZSBJIGluaXRpYWxseSB0aG91Z2h0LiBJdCdzIGp1c3QgaGFuZ2luZyBvdXQgdGhlcmUgYWZ0ZXIgdGhlIGAjZW5kaWZgLiBIbW0sIGNvdWxkIGl0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYENPTkZJR19NRU1DR2AgaW5zdGVhZD8gTm9wZSwgaXQncyBvdXRzaWRlICp0aGF0KiBibG9jayB0b28uIFRpbWUgdG8gcmV2aXNpdCBgbW0vdm1zY2FuLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNzg3MC4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGNvbnRyb2xsaW5nIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDY3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMzowMC45NjUzNTE4OTVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4NjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc4NjA6XFx0fVxcbjc4NjE6XFx0XFxuNzg2MjpcXHQjZWxzZVxcbjc4NjM6XFx0XFxuNzg2NDpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzayxcXG43ODY1OlxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbjc4NjY6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbjc4Njc6XFx0e1xcbjc4Njg6XFx0XFx0cmV0dXJuIDA7XFxuNzg2OTpcXHR9XFxuNzg3MDpcXHRcXG43ODcxOlxcdCNlbmRpZlxcbjc4NzI6XFx0XFxuNzg3MzpcXHRlbnVtIHtcXG43ODc0OlxcdFxcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MgPSAwLFxcbjc4NzU6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXFxuNzg3NjpcXHRcXHRNRU1PUllfUkVDTEFJTV9OVUxMLFxcbjc4Nzc6XFx0fTtcXG43ODc4OlxcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG43ODc5OlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXFxcInN3YXBwaW5lc3M9JWRcXFwifSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDM6MDAuOTY1NjI3NTU1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDY2NjM5MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0J3MgZmlndXJlIG91dCB0aGUgYmVzdCB3YXkgdG8gZnV6eiBpdC4gSSBzZWUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFsd2F5cyBjb21waWxlZCBpbiwgd2hpY2ggaXMgZ29vZC4gVGhlbiBJIG5vdGUgdGhlIGluY2x1c2lvbiBvZiBjb25maWd1cmF0aW9uczogYE1FTUNHYCBhbmQgYEhJQkVSTkFUSU9OYC4gSSBhbHNvIHNwb3QgYG5vZGVfcmVjbGFpbWAsIHdoaWNoIGlzIGRlcGVuZGVudCBvbiBgQ09ORklHX05VTUFgLiBTbywgdGhlIGVmZmVjdGl2ZSBjb25maWd1cmF0aW9ucyB0aGF0IGVuYWJsZSBkaWZmZXJlbnQgY29kZSBwYXRocyBhcmU6IGBNRU1DR2AsIGBISUJFUk5BVElPTmAsIGFuZCBgTlVNQWAuXG5cbkkgdGhlbiB0b29rIGEgbG9vayBhdCBvdGhlciBlbnRyeSBwb2ludHMuIEkga25vdyB0aGF0IGBrc3dhcGRfcnVuYCBpcyBjYWxsZWQgYXQgYm9vdCBhbmQgZm9yIG5vZGUgaG90LWFkZCwgYW5kIGB3YWtldXBfa3N3YXBkYCBpcyBjYWxsZWQgZnJvbSB0aGUgcGFnZSBhbGxvY2F0b3IsIHNvIHRoZXkgYXJlIGhvdCBwYXRocyBvciBhdCBib290LiBUaGlzIGxlYWRzIG1lIHRvIGlkZW50aWZ5IHRoZSBmb2N1cyBzeW1ib2xzLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBwYXRjaCdzIGNvcmUgaW1wYWN0LCBJJ3ZlIHplcm9lZCBpbiBvbiB0aGUgY3JpdGljYWwgc3ltYm9sczogYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCwgYW5kIGBub2RlX3JlY2xhaW1gLlxuXG5JJ20gZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgcGF0Y2ggYW5kIHRoZSBtb2RpZmljYXRpb25zIGl0IG1ha2VzIHRvIGBpc29sYXRlX2xydV9mb2xpb3NgIGFuZCBgc2hyaW5rX2xydXZlY2AuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMsIHNvIHRoZXkncmUgYWx3YXlzIGNvbXBpbGVkLiBUaGUgY29uZmlncyBhcmUgdGhlcmUgdG8gYWN0aXZhdGUgc3BlY2lmaWMgZW50cnkgcG9pbnRzLiBgaXNvbGF0ZV9scnVfZm9saW9zYCBub3cgY2FwcyB0aGUgbnVtYmVyIG9mIHNraXBwZWQgZm9saW9zLCBwcmV2ZW50aW5nIGZvcmNlZCBpc29sYXRpb24gYWZ0ZXIgYSBjZXJ0YWluIHRocmVzaG9sZC4gQW5kLCB0aGUgYHNocmlua19scnV2ZWNgIGNoYW5nZXMgdGhlIHdheSB0aGUgb3ZlcnNob290IG9mIHNjYW5uZWQgcGFnZXMgYXJlIGNvdW50ZWQgYWdhaW5zdCB0aGUgcXVvdGEuIFRoaXMgc2lnbmFscyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBwYWdlIHJlY2xhaW0gbG9naWMuIERlZmluaXRlbHkgd29ydGggZnV6emluZywgSSB0aGluay5cblxuTXkgcmVhc29uaW5nIGlzIHRoaXM6IFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGNvcmUgcGFnZSByZWNsYWltIGxvZ2ljLiBUaG9zZSBjb3JlIGZ1bmN0aW9ucyBjYW4gYmUgcmVhY2hlZCB2aWEgY2dyb3VwIHJlY2xhaW0sIHByb2FjdGl2ZSByZWNsYWltLCBhbmQgaGliZXJuYXRpb24sIGFtb25nIG90aGVycy4gYG5vZGVfcmVjbGFpbWAgaXMgY29udHJvbGxlZCBieSBhIHN5c2N0bCwgd2hpY2ggaXMgcGVyZmVjdCBmb3IgU3l6a2FsbGVyLlxuXG5UaGVyZWZvcmUsIHRoZSBmb2N1cyBzeW1ib2xzIGFyZTogYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCwgYW5kIGBub2RlX3JlY2xhaW1gLiBUaGUgZW5hYmxlIGNvbmZpZ3MgYXJlIGBNRU1DR2AsIGBISUJFUk5BVElPTmAsIGFuZCBgTlVNQWAuXG5cbkkgY2hlY2tlZCwgYWxsIG9mIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSBndWFyZGVkIGJ5IHRoZXNlIGNvbmZpZ3VyYXRpb25zLlxuXG5JbiBjb25jbHVzaW9uLCBJJ3ZlIGdvdCBhIHNvbGlkIGZyYW1ld29yayBmb3IgaG93IHRvIGFwcHJvYWNoIGZ1enppbmcgdGhpcyBwYXRjaCwgY29uY2VudHJhdGluZyBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjYzMSwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMzoxMi40MzIyNjk2MTVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njg0OTQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkhJQkVSTkFUSU9OXCIsXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIixcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcIm1lbV9jZ3JvdXBfc2hyaW5rX25vZGVcIixcbiAgICBcIm5vZGVfcmVjbGFpbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgcGFnZSByZWNsYWltIGxvZ2ljIGluIGBpc29sYXRlX2xydV9mb2xpb3NgIGFuZCBgc2hyaW5rX2xydXZlY2AgdG8gcHJldmVudCBoYXJkIGxvY2t1cHMgYnkgY2FwcGluZyB0aGUgbnVtYmVyIG9mIHNraXBwZWQgaW5lbGlnaWJsZSBmb2xpb3MgYW5kIGFkanVzdGluZyB0aGUgc2NhbiBxdW90YS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHZhcmlvdXMgcmVjbGFpbSBwYXRocyAoZS5nLiwgY2dyb3VwIHJlY2xhaW0sIHByb2FjdGl2ZSByZWNsYWltLCBoaWJlcm5hdGlvbikuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkhJQkVSTkFUSU9OXCIsXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIixcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcIm1lbV9jZ3JvdXBfc2hyaW5rX25vZGVcIixcbiAgICBcIm5vZGVfcmVjbGFpbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgcGFnZSByZWNsYWltIGxvZ2ljIGluIGBpc29sYXRlX2xydV9mb2xpb3NgIGFuZCBgc2hyaW5rX2xydXZlY2AgdG8gcHJldmVudCBoYXJkIGxvY2t1cHMgYnkgY2FwcGluZyB0aGUgbnVtYmVyIG9mIHNraXBwZWQgaW5lbGlnaWJsZSBmb2xpb3MgYW5kIGFkanVzdGluZyB0aGUgc2NhbiBxdW90YS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHZhcmlvdXMgcmVjbGFpbSBwYXRocyAoZS5nLiwgY2dyb3VwIHJlY2xhaW0sIHByb2FjdGl2ZSByZWNsYWltLCBoaWJlcm5hdGlvbikuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjEyLjUxOTEyNTE0NloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2NTI2ODcxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMzoxMi41MTk2NzA4NjZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzU2NTIxMzgzODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBWTSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0IGludHJvZHVjZXMgYSBuZXcgZmllbGQgYG5yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHRvIHRyYWNrIHRoZSBudW1iZXIgb2Ygc2Nhbm5lZCBwYWdlcywgcmVwbGFjaW5nIGFuIG91dHB1dCBwb2ludGVyIGFyZ3VtZW50IGluIGBpc29sYXRlX2xydV9mb2xpb3MoKWAuIFRoZSBmaWVsZCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoZWl0aGVyIGV4cGxpY2l0bHkgdG8gMCBpbiBgc2hyaW5rX2xydXZlYygpYCBvciB1bmNvbmRpdGlvbmFsbHkgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiBgaXNvbGF0ZV9scnVfZm9saW9zKClgKS4gVGhlIHBhdGNoIGFsc28gY2hhbmdlcyB0aGUgbG9naWMgdG8gc3RvcCBpc29sYXRpbmcgZm9saW9zIHdoZW4gYSBza2lwIHRocmVzaG9sZCBpcyByZWFjaGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkbyBub3QgaW52b2x2ZSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NDc4M2FlNzY2MTI5MGIwMTNiMGFjMWFlYmQ4YWMxYzIxZDNiMmJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDg6MDE6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1NjcwOGQxZDJkZmQ1Li5hYzMyMzdhNThjYjI5IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTY0LDYgKzE2NCw5IEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuIFx0LyogSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBpbmFjdGl2ZSBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xuIFxuK1x0LyogTnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkIGZyb20gaXNvbGF0ZV9scnVfZm9saW9zKCkgKi9cbitcdHVuc2lnbmVkIGxvbmcgbnJfaXNvbGF0ZV9zY2FubmVkO1xuK1xuIFx0LyogTnVtYmVyIG9mIHBhZ2VzIGZyZWVkIHNvIGZhciBkdXJpbmcgYSBjYWxsIHRvIHNocmlua196b25lcygpICovXG4gXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcbiBcbkBAIC0xNjczLDcgKzE2NzYsNiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdXBkYXRlX2xydV9zaXplcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gICogQG5yX3RvX3NjYW46XHRUaGUgbnVtYmVyIG9mIGVsaWdpYmxlIHBhZ2VzIHRvIGxvb2sgdGhyb3VnaCBvbiB0aGUgbGlzdC5cbiAgKiBAbHJ1dmVjOlx0VGhlIExSVSB2ZWN0b3IgdG8gcHVsbCBwYWdlcyBmcm9tLlxuICAqIEBkc3Q6XHRUaGUgdGVtcCBsaXN0IHRvIHB1dCBwYWdlcyBvbiB0by5cbi0gKiBAbnJfc2Nhbm5lZDpcdFRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQuXG4gICogQHNjOlx0XHRUaGUgc2Nhbl9jb250cm9sIHN0cnVjdCBmb3IgdGhpcyByZWNsYWltIHNlc3Npb25cbiAgKiBAbHJ1Olx0TFJVIGxpc3QgaWQgZm9yIGlzb2xhdGluZ1xuICAqXG5AQCAtMTY4MSw4ICsxNjgzLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuICAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGxpc3RfaGVhZCAqZHN0LFxuLVx0XHR1bnNpZ25lZCBsb25nICpucl9zY2FubmVkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi1cdFx0ZW51bSBscnVfbGlzdCBscnUpXG4rXHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBlbnVtIGxydV9saXN0IGxydSlcbiB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICpzcmMgPSBcdTAwMjZscnV2ZWMtXHUwMDNlbGlzdHNbbHJ1XTtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4gPSAwO1xuQEAgLTE3MDMsMTIgKzE3MDQsMjAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0bnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdHRvdGFsX3NjYW4gKz0gbnJfcGFnZXM7XG4gXG4tXHRcdC8qIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAqL1xuLVx0XHRpZiAobWF4X25yX3NraXBwZWQgXHUwMDNjIFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIChmb2xpb196b25lbnVtKGZvbGlvKSBcdTAwM2Ugc2MtXHUwMDNlcmVjbGFpbV9pZHgpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAuXG4rXHRcdCAqIE9uY2UgdGhlIGNhcCBpcyBoaXQsIHN0b3AgcmF0aGVyIHRoYW4gZm9yY2UtaXNvbGF0aW5nOlxuK1x0XHQgKiByZWNsYWltaW5nIGluZWxpZ2libGUgZm9saW9zIG9ubHkgaW5mbGF0ZXMgbnJfcmVjbGFpbWVkXG4rXHRcdCAqIGludG8gYSBmYWxzZSBwcm9ncmVzcy5cbitcdFx0ICovXG4rXHRcdGlmIChmb2xpb196b25lbnVtKGZvbGlvKSBcdTAwM2Ugc2MtXHUwMDNlcmVjbGFpbV9pZHgpIHtcbiBcdFx0XHRucl9za2lwcGVkW2ZvbGlvX3pvbmVudW0oZm9saW8pXSArPSBucl9wYWdlcztcbi1cdFx0XHRtb3ZlX3RvID0gXHUwMDI2Zm9saW9zX3NraXBwZWQ7XG4gXHRcdFx0bWF4X25yX3NraXBwZWQrKztcbitcdFx0XHRpZiAobWF4X25yX3NraXBwZWQgXHUwMDNlPSBTV0FQX0NMVVNURVJfTUFYX1NLSVBQRUQpIHtcbitcdFx0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmZvbGlvc19za2lwcGVkKTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0XHRtb3ZlX3RvID0gXHUwMDI2Zm9saW9zX3NraXBwZWQ7XG4gXHRcdFx0Z290byBtb3ZlO1xuIFx0XHR9XG4gXG5AQCAtMTc2Niw3ICsxNzc1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0XHRza2lwcGVkICs9IG5yX3NraXBwZWRbemlkXTtcbiBcdFx0fVxuIFx0fVxuLVx0Km5yX3NjYW5uZWQgPSB0b3RhbF9zY2FuO1xuK1x0c2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2NhbjtcbiBcdHRyYWNlX21tX3Ztc2Nhbl9scnVfaXNvbGF0ZShzYy1cdTAwM2VyZWNsYWltX2lkeCwgc2MtXHUwMDNlb3JkZXIsIG5yX3RvX3NjYW4sXG4gXHRcdFx0XHQgICAgdG90YWxfc2Nhbiwgc2tpcHBlZCwgbnJfdGFrZW4sIGxydSk7XG4gXHR1cGRhdGVfbHJ1X3NpemVzKGxydXZlYywgbHJ1LCBucl96b25lX3Rha2VuKTtcbkBAIC0yMDE0LDggKzIwMjMsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbi1cdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2Zm9saW9fbGlzdCxcbi1cdFx0XHRcdCAgICAgXHUwMDI2bnJfc2Nhbm5lZCwgc2MsIGxydSk7XG4rXHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFx1MDAyNmZvbGlvX2xpc3QsIHNjLCBscnUpO1xuK1x0bnJfc2Nhbm5lZCA9IHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZDtcbiBcbiBcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIGZpbGUsIG5yX3Rha2VuKTtcbiBcdGl0ZW0gPSBQR1NDQU5fS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XG5AQCAtMjA3MSw3ICsyMDgwLDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0XHQgICAgICAgZW51bSBscnVfbGlzdCBscnUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl90YWtlbjtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcbiBcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XG4gXHRMSVNUX0hFQUQobF9ob2xkKTtcdC8qIFRoZSBmb2xpb3Mgd2hpY2ggd2VyZSBzbmlwcGVkIG9mZiAqL1xuIFx0TElTVF9IRUFEKGxfYWN0aXZlKTtcbkBAIC0yMDg1LDEyICsyMDkzLDExIEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbi1cdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2bF9ob2xkLFxuLVx0XHRcdFx0ICAgICBcdTAwMjZucl9zY2FubmVkLCBzYywgbHJ1KTtcbitcdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2bF9ob2xkLCBzYywgbHJ1KTtcbiBcbiBcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIGZpbGUsIG5yX3Rha2VuKTtcbiBcbi1cdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JFRklMTCwgbnJfc2Nhbm5lZCk7XG4rXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdSRUZJTEwsIHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCk7XG4gXG4gXHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xuIFxuQEAgLTU5MjAsMTAgKzU5MjcsMjEgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFx0XHRmb3JfZWFjaF9ldmljdGFibGVfbHJ1KGxydSkge1xuIFx0XHRcdGlmIChucltscnVdKSB7XG4gXHRcdFx0XHRucl90b19zY2FuID0gbWluKG5yW2xydV0sIFNXQVBfQ0xVU1RFUl9NQVgpO1xuLVx0XHRcdFx0bnJbbHJ1XSAtPSBucl90b19zY2FuO1xuIFxuK1x0XHRcdFx0c2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gMDtcbiBcdFx0XHRcdG5yX3JlY2xhaW1lZCArPSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sXG4gXHRcdFx0XHRcdFx0XHQgICAgbHJ1dmVjLCBzYyk7XG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogaXNvbGF0ZV9scnVfZm9saW9zKCkgbWF5IHNjYW4gZmFyIG1vcmVcbitcdFx0XHRcdCAqIHRoYW4gbnJfdG9fc2NhbiB3aGVuIHRoZSBMUlUgaG9sZHNcbitcdFx0XHRcdCAqIGluZWxpZ2libGUgZm9saW9zICh6b25lLXNraXApIG9yIGxhcmdlXG4rXHRcdFx0XHQgKiBmb2xpb3MuIENoYXJnZSB0aGF0IG92ZXJzaG9vdCBhZ2FpbnN0IHRoZVxuK1x0XHRcdFx0ICogcmVtYWluaW5nIHF1b3RhIChjbGFtcGVkIGJ5IG1pbigpIHNvIGl0XG4rXHRcdFx0XHQgKiBjYW5ub3QgZ28gbmVnYXRpdmUpIHNvIHRoZSBuZXh0IGl0ZXJhdGlvblxuK1x0XHRcdFx0ICogZG9lcyBub3QgcmVzY2FuIHRoZSBzYW1lIHNraXBwZWQgZm9saW9zLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRucltscnVdIC09IG1pbihucltscnVdLFxuK1x0XHRcdFx0XHQgICAgICAgbWF4KG5yX3RvX3NjYW4sIHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCkpO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDM6MTIuNTE5NjcxODg2WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxMzA0MjI3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2bXNjYW4uYyBQYXRjaDogQSBEZWVwIERpdmUgaW50byBgbnJfaXNvbGF0ZV9zY2FubmVkYCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL3Ztc2Nhbi5jYCwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyB0aGUgTFJVIGlzIHNjYW5uZWQuIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBgbnJfaXNvbGF0ZV9zY2FubmVkYCB0byB0aGUgYHN0cnVjdCBzY2FuX2NvbnRyb2xgLiBJbnN0ZWFkIG9mIHBhc3NpbmcgYXJvdW5kIGFuIG91dHB1dCBwb2ludGVyIGBucl9zY2FubmVkYCBpbiBgaXNvbGF0ZV9scnVfZm9saW9zYCwgaXQncyBub3cgdXNpbmcgdGhpcyBuZXcgZmllbGQgZGlyZWN0bHkgd2l0aGluIHRoZSBgc2Nhbl9jb250cm9sYCBzdHJ1Y3R1cmUuIFNlZW1zIGNsZWFuZXIsIHBvdGVudGlhbGx5IHNhZmVyLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuXG5cbkkgc2VlIHRoYXQgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgaXMgdGhlIHJlYWwgdGFyZ2V0IGFuZCB0aGUgY2FsbCBzaXRlcyBmb3IgaXQgYXJlIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBhbmQgYHNocmlua19scnV2ZWNgLiBMZXQncyBzdGVwIHRocm91Z2ggdGhlIGxvZ2ljLiBJbiBgc2hyaW5rX2xydXZlY2AsIGl0J3MgaW5pdGlhbGl6ZWQgdG8gemVybyBiZWZvcmUgY2FsbGluZyBgc2hyaW5rX2xpc3RgLCB3aGljaCB0aGVuIGNhbGxzIHRoZSBhY3R1YWwgZnVuY3Rpb25zIG9mIGludGVyZXN0OiBgc2hyaW5rX2FjdGl2ZV9saXN0YCBhbmQgYHNocmlua19pbmFjdGl2ZV9saXN0YC4gR3JlYXQuXG5cbkJ1dCwgYSByZWQgZmxhZyBwb3BwZWQgdXAgaW1tZWRpYXRlbHk6IGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCBpcyBvZnRlbiBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgaXQncyBmcmVxdWVudGx5IHVzZWQgaW4gZnVuY3Rpb25zIGxpa2UgYHRyeV90b19mcmVlX3BhZ2VzYCwgYGJhbGFuY2VfcGdkYXRgLCBgc2hyaW5rX2FsbF9tZW1vcnlgIGFuZCBvdGhlcnMgbGlrZSB0aGVzZS4gVGhpcyBtZWFucyB0aGF0IGlmIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIGlzbid0IGluaXRpYWxpemVkICpldmVyeXdoZXJlKiBiZWZvcmUgaXQncyB1c2VkLCB3ZSdyZSBnb2luZyB0byBoYXZlIGEgcHJvYmxlbS4gU3RhY2sgdmFyaWFibGVzIGFyZSB1bmluaXRpYWxpemVkIGJ5IGRlZmF1bHQgaW4gbWFueSBjb250ZXh0cy5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHRoYXQgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gSW4gYHNocmlua19scnV2ZWNgIGl0J3MgZXhwbGljaXRseSBzZXQgdG8gMC4gRXhjZWxsZW50LCB0aGF0J3Mgb25lIHNwb3QgdGFrZW4gY2FyZSBvZi5cblxuTm93IEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgdmFyaWFibGUgaXMgc2V0IGluIHRoZSBgc2hyaW5rX2FjdGl2ZV9saXN0YCBhbmQgYHNocmlua19pbmFjdGl2ZV9saXN0YCBmdW5jdGlvbnMuXG5cbkluIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBpdCBpcyBuZXZlciBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBidXQgdGhlIGNhbGxzIHRvIGBpc29sYXRlX2xydV9mb2xpb3NgIHdyaXRlcyB0aGUgdmFsdWUuXG5gYGBjXG5cdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2bF9ob2xkLCBzYywgbHJ1KTtcblxuXHRfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCBucl90YWtlbik7XG5cblx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQpO1xuYGBgXG5JbiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBpdCBpcyBuZXZlciBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBidXQgdGhlIGNhbGxzIHRvIGBpc29sYXRlX2xydV9mb2xpb3NgIHdyaXRlcyB0aGUgdmFsdWU6XG5gYGBjXG5cdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2Zm9saW9fbGlzdCwgc2MsIGxydSk7XG5cdG5yX3NjYW5uZWQgPSBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQ7XG5gYGBcbk9rYXksIEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlLiBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhbiBpbml0aWFsaXphdGlvbiB3aXRoaW4gYHNocmlua19hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGp1c3Qgd3JpdGVzIHRvIHRoZSB2YXJpYWJsZSwgYW5kIEkgaGF2ZSB0byBjb25maXJtIHRoZSB2YWx1ZSBpcyBiZWluZyBpbml0aWFsaXplZCBiZWZvcmUgaXQgZ2V0cyB0aGVyZS5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrIGEgbGV2ZWwuIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGFuZCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFyZSBjYWxsZWQgZnJvbSBgc2hyaW5rX2xpc3RgLiBJcyBgbnJfaXNvbGF0ZV9zY2FubmVkYCBpbml0aWFsaXplZCB0aGVyZT8gTm9wZSwgaXQgaXNuJ3QuXG5cbmBzaHJpbmtfbGlzdGAgaXMgY2FsbGVkIGZyb20gYHNocmlua19scnV2ZWNgIGFuZCBgZXZpY3RfZm9saW9zYC4gSW4gYHNocmlua19scnV2ZWNgLCBpdCBpcyBpbml0aWFsaXplZC5cblxuVGhlcmVmb3JlLCB0byBjb21wbGV0ZSBteSBhbmFseXNpcywgSSBuZWVkIHRvIGNoZWNrIGhvdyBgZXZpY3RfZm9saW9zYCBpcyBjYWxsaW5nIGBzaHJpbmtfbGlzdGAgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIHNldHRpbmcgYG5yX2lzb2xhdGVfc2Nhbm5lZGAuXG5cbkxldCdzIGdyZXAgZm9yIGNhbGxzIHRvIGBzaHJpbmtfbGlzdGAgdG8gYmUgZXh0cmEgdGhvcm91Z2gsIGp1c3QgaW4gY2FzZS4gVGhpcyBzaG91bGQgdGVsbCBtZSBpZiB0aGVyZSdzIGFueSBvdGhlciBwbGFjZSB0aGUgYHNjYW5fY29udHJvbGAgc3RydWN0dXJlIG1pZ2h0IGJlIHVzZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gSSBjYW4ndCBsZXQgdGhpcyBzbGlwIHRocm91Z2ggdGhlIGNyYWNrczsgdW5pbml0aWFsaXplZCB2YWx1ZXMgaW4gdGhpcyBjb250ZXh0IGNvdWxkIGJlIGNhdGFzdHJvcGhpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjIxLjY1MDA5ODcxN1oiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0Nzc3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XFxubW0vdm1zY2FuLmM6NzU6XFx0LyogSG93IG1hbnkgcGFnZXMgc2hyaW5rX2xpc3QoKSBzaG91bGQgcmVjbGFpbSAqL1xcbm1tL3Ztc2Nhbi5jLTc2LVxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIxODk9dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS92bXNjYW4uYy0yMjIxLVxcbm1tL3Ztc2Nhbi5jOjIyMjI6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0yMjIzLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmM9NTg4Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTMxLVxcdFxcdFxcdFxcdHNjLVxcdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQgPSAwO1xcbm1tL3Ztc2Nhbi5jOjU5MzI6XFx0XFx0XFx0XFx0bnJfcmVjbGFpbWVkICs9IHNocmlua19saXN0KGxydSwgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy01OTMzLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBscnV2ZWMsIHNjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDM6MjEuNjk1NTgyNTIyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODAxMDkyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byBgc2hyaW5rX2xpc3RgIFVzYWdlKipcblxuT2theSwgc28gSSdtIHNlZWluZyBgc2hyaW5rX2xpc3RgIGNhbGxlZCBleGNsdXNpdmVseSBmcm9tIGBzaHJpbmtfbHJ1dmVjYC4gVGhhdCdzIGEgYml0IHN1c3BpY2lvdXMsIGFuZCBJJ20gaXRjaGluZyB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiBpdC4gSSB3YW50IHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY2FsbCBzaXRlcy4gQSBzaW5nbGUgZnVuY3Rpb24gY2FsbCBmcm9tIGEgc3BlY2lmaWMgY29udGV4dCBjYW4gaGlkZSBhbGwgc29ydHMgb2YgYXNzdW1wdGlvbnMgdGhhdCBtYXkgYmUgYmFrZWQgaW50byB0aGUgY29kZS4gVGhpcyBjb3VsZCBsZWFkIHRvIGRpZmZpY3VsdCB0byBkZWJ1ZyBwcm9ibGVtcyBsYXRlciBvbi4gVGltZSB0byBkaWcgaW4gYW5kIHZlcmlmeSB0aGUgZGVwZW5kZW5jeSB0cmVlIGlzIHByZWNpc2VseSB3aGF0IEknbSBleHBlY3RpbmcuIExldCdzIHRyYWNlIGl0IGFuZCBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mzk2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDM6MjQuNDc1Njk0OTE5WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAyODAzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfbGlzdFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc0PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xcbm1tL3Ztc2Nhbi5jOjc1OlxcdC8qIEhvdyBtYW55IHBhZ2VzIHNocmlua19saXN0KCkgc2hvdWxkIHJlY2xhaW0gKi9cXG5tbS92bXNjYW4uYy03Ni1cXHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW07XFxuLS1cXG5tbS92bXNjYW4uYz0yMTg5PXVuc2lnbmVkIGxvbmcgcmVjbGFpbV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxcbi0tXFxubW0vdm1zY2FuLmMtMjIyMS1cXG5tbS92bXNjYW4uYzoyMjIyOnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19saXN0KGVudW0gbHJ1X2xpc3QgbHJ1LCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxubW0vdm1zY2FuLmMtMjIyMy1cXHRcXHRcXHRcXHQgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4ODM9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTkzMS1cXHRcXHRcXHRcXHRzYy1cXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gMDtcXG5tbS92bXNjYW4uYzo1OTMyOlxcdFxcdFxcdFxcdG5yX3JlY2xhaW1lZCArPSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sXFxubW0vdm1zY2FuLmMtNTkzMy1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgbHJ1dmVjLCBzYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjI0LjUyMDcyNzc1NFoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjkwMzU1MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipDb25zaWRlcmluZyBMaXN0IE9wdGltaXphdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZGVlcCBpbiB0aGlzIGNvZGViYXNlLCBhbmQgSSdtIGxvb2tpbmcgYXQgaG93IHdlJ3JlIG1hbmFnaW5nIHRoZXNlIGFjdGl2ZSBhbmQgaW5hY3RpdmUgbGlzdHMuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gb3B0aW1pemF0aW9uIOKAkyBwYXJ0aWN1bGFybHksIGFyZSB3ZSBiZWluZyBlZmZpY2llbnQgd2l0aCBtZW1vcnkgYW5kIHByb2Nlc3Npbmc/IEkgc2VlIHRoZSBtZW50aW9uIG9mIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGFuZCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBhbmQgdGhhdCdzIHByZWNpc2VseSB0aGUgc29ydCBvZiB0aGluZyB0aGF0IGNhdGNoZXMgbXkgZXllLiBUaG9zZSBuYW1lcyBhcmUgcHJvbWlzaW5nLiBNeSBleHBlcnQga25vd2xlZGdlIHdhbnRzIHRvIGtub3cgLSBhcmUgdGhleSBhY3R1YWxseSBzaHJpbmtpbmcgdGhlc2UgbGlzdHMgZHluYW1pY2FsbHkgYmFzZWQgb24gdXNhZ2UsIG9yIGFyZSB0aGV5IGp1c3Qgc3R1YiBmdW5jdGlvbnM/IEFyZSB0aGV5IGludGVsbGlnZW50bHkgcmVzaXppbmcgYnVmZmVycyBiYXNlZCBvbiBhY3R1YWwgZGF0YSBsb2FkPyBBcmUgdGhleSBjb25zaWRlcmluZyB0aGUgdHJhZGUtb2ZmcyBiZXR3ZWVuIGZyZXF1ZW50IHJlYWxsb2NhdGlvbnMgYW5kIHBvdGVudGlhbCBtZW1vcnkgd2FzdGU/IFdoYXQgYXJlIHRoZSBhY3R1YWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucz8gSSB3YW50IHRvIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0byBrbm93IGlmIHRoaXMgY29kZSBpcyBkb2luZyB3aGF0IGl0J3Mgc3VwcG9zZWQgdG8gZG8gZWZmaWNpZW50bHkhIEkgbmVlZCB0byBkaWcgaW50byB0aGVpciBsb2dpYyBhbmQgdW5kZXJzdGFuZCB0aGUgc2hyaW5raW5nIHBvbGljeSwgdGhlIHRyaWdnZXJzIGZvciB0aGlzIHNocmlua2luZywgYW5kIGlmIGFueSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBtaWdodCBvY2N1ci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkwMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjI4LjIxMTA4NjM3MloiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMzQxNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX2FjdGl2ZV9saXN0XFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MTk5NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuLS1cXG5tbS92bXNjYW4uYy0yMDYwLS8qXFxubW0vdm1zY2FuLmM6MjA2MTogKiBzaHJpbmtfYWN0aXZlX2xpc3QoKSBtb3ZlcyBmb2xpb3MgZnJvbSB0aGUgYWN0aXZlIExSVSB0byB0aGUgaW5hY3RpdmUgTFJVLlxcbm1tL3Ztc2Nhbi5jLTIwNjItICpcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIwNzYtICovXFxubW0vdm1zY2FuLmM6MjA3NzpzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbm1tL3Ztc2Nhbi5jLTIwNzgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIyMjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIyMjYtXFx0XFx0aWYgKHNjLVxcdTAwM2VtYXlfZGVhY3RpdmF0ZSBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIGlzX2ZpbGVfbHJ1KGxydSkpKVxcbm1tL3Ztc2Nhbi5jOjIyMjc6XFx0XFx0XFx0c2hyaW5rX2FjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIGxydSk7XFxubW0vdm1zY2FuLmMtMjIyOC1cXHRcXHRlbHNlXFxuLS1cXG5tbS92bXNjYW4uYz01ODgzPXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwMTAtXFx0ICAgIGluYWN0aXZlX2lzX2xvdyhscnV2ZWMsIExSVV9JTkFDVElWRV9BTk9OKSlcXG5tbS92bXNjYW4uYzo2MDExOlxcdFxcdHNocmlua19hY3RpdmVfbGlzdChTV0FQX0NMVVNURVJfTUFYLCBscnV2ZWMsXFxubW0vdm1zY2FuLmMtNjAxMi1cXHRcXHRcXHRcXHQgICBzYywgTFJVX0FDVElWRV9BTk9OKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4MzE9c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjg1My1cXHRcXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xcbm1tL3Ztc2Nhbi5jOjY4NTQ6XFx0XFx0c2hyaW5rX2FjdGl2ZV9saXN0KFNXQVBfQ0xVU1RFUl9NQVgsIGxydXZlYyxcXG5tbS92bXNjYW4uYy02ODU1LVxcdFxcdFxcdFxcdCAgIHNjLCBMUlVfQUNUSVZFX0FOT04pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMzoyOC4yNTYyMjQ2MjhaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4NDIzNjQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgTFJVIFZlY3RvciBTaHJpbmtpbmcgTG9naWMqKlxuXG5SaWdodCwgc28gSSBzZWUgYHNocmlua19hY3RpdmVfbGlzdGAgaXMgYmVpbmcgY2FsbGVkIGRpcmVjdGx5IGZyb20gYm90aCBgc2hyaW5rX2xydXZlY2AgYW5kIGBrc3dhcGRfYWdlX25vZGVgLiBUaGF0J3MgYW4gaW50ZXJlc3RpbmcgdGlkYml0LCBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBvciBwZXJoYXBzIGEgY2xldmVyIG9wdGltaXphdGlvbiBkZXBlbmRpbmcgb24gaG93IGl0J3MgaW1wbGVtZW50ZWQgaW4gdGhvc2UgdHdvIGNhbGxpbmcgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHRlci4gTGV0J3MgZGlnIGludG8gYHNocmlua19scnV2ZWNgIGFuZCBpbW1lZGlhdGVseSBsb29rIGF0IGxpbmUgNjAxMS4gSSB3YW50IHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoYXQgY2FsbCBzaXRlLCBzcGVjaWZpY2FsbHkgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYHNocmlua19hY3RpdmVfbGlzdGAgYW5kIGFueSBzdXJyb3VuZGluZyBjb250ZXh0IHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGlzIGR1YWwgdXNhZ2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBob3cgdGhlc2UgY2FsbGVycyBhcmUgdXNpbmcgdGhlIHNocmlua2VyLiBBcmUgdGhleSB0cnlpbmcgdG8gYmFsYW5jZSBtZW1vcnkgaW4gc3BlY2lmaWMgY29uZGl0aW9ucywgb3IgYXJlIHdlIGV4cGVyaWVuY2luZyByZXNvdXJjZSBwcmVzc3VyZT9cblxuXG4iLCJJbnB1dFRva2VucyI6Njc0NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjMxLjU0MDQ2NDA5OFoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTcyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTk5MDpcXHRcXHRcXHQgKiBzY2FuIHRhcmdldCBhbmQgdGhlIHBlcmNlbnRhZ2Ugc2Nhbm5pbmcgYWxyZWFkeSBjb21wbGV0ZVxcbjU5OTE6XFx0XFx0XFx0ICovXFxuNTk5MjpcXHRcXHRcXHRscnUgPSAobHJ1ID09IExSVV9GSUxFKSA/IExSVV9CQVNFIDogTFJVX0ZJTEU7XFxuNTk5MzpcXHRcXHRcXHRucl9zY2FubmVkID0gdGFyZ2V0c1tscnVdIC0gbnJbbHJ1XTtcXG41OTk0OlxcdFxcdFxcdG5yW2xydV0gPSB0YXJnZXRzW2xydV0gKiAoMTAwIC0gcGVyY2VudGFnZSkgLyAxMDA7XFxuNTk5NTpcXHRcXHRcXHRucltscnVdIC09IG1pbihucltscnVdLCBucl9zY2FubmVkKTtcXG41OTk2OlxcdFxcbjU5OTc6XFx0XFx0XFx0bHJ1ICs9IExSVV9BQ1RJVkU7XFxuNTk5ODpcXHRcXHRcXHRucl9zY2FubmVkID0gdGFyZ2V0c1tscnVdIC0gbnJbbHJ1XTtcXG41OTk5OlxcdFxcdFxcdG5yW2xydV0gPSB0YXJnZXRzW2xydV0gKiAoMTAwIC0gcGVyY2VudGFnZSkgLyAxMDA7XFxuNjAwMDpcXHRcXHRcXHRucltscnVdIC09IG1pbihucltscnVdLCBucl9zY2FubmVkKTtcXG42MDAxOlxcdFxcdH1cXG42MDAyOlxcdFxcdGJsa19maW5pc2hfcGx1ZyhcXHUwMDI2cGx1Zyk7XFxuNjAwMzpcXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkICs9IG5yX3JlY2xhaW1lZDtcXG42MDA0OlxcdFxcbjYwMDU6XFx0XFx0LypcXG42MDA2OlxcdFxcdCAqIEV2ZW4gaWYgd2UgZGlkIG5vdCB0cnkgdG8gZXZpY3QgYW5vbiBwYWdlcyBhdCBhbGwsIHdlIHdhbnQgdG9cXG42MDA3OlxcdFxcdCAqIHJlYmFsYW5jZSB0aGUgYW5vbiBscnUgYWN0aXZlL2luYWN0aXZlIHJhdGlvLlxcbjYwMDg6XFx0XFx0ICovXFxuNjAwOTpcXHRcXHRpZiAoY2FuX2FnZV9hbm9uX3BhZ2VzKGxydXZlYywgc2MpIFxcdTAwMjZcXHUwMDI2XFxuNjAxMDpcXHRcXHQgICAgaW5hY3RpdmVfaXNfbG93KGxydXZlYywgTFJVX0lOQUNUSVZFX0FOT04pKVxcbjYwMTE6XFx0XFx0XFx0c2hyaW5rX2FjdGl2ZV9saXN0KFNXQVBfQ0xVU1RFUl9NQVgsIGxydXZlYyxcXG42MDEyOlxcdFxcdFxcdFxcdFxcdCAgIHNjLCBMUlVfQUNUSVZFX0FOT04pO1xcbjYwMTM6XFx0fVxcbjYwMTQ6XFx0XFxuNjAxNTpcXHQvKiBVc2UgcmVjbGFpbS9jb21wYWN0aW9uIGZvciBjb3N0bHkgYWxsb2NzIG9yIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSAqL1xcbjYwMTY6XFx0c3RhdGljIGJvb2wgaW5fcmVjbGFpbV9jb21wYWN0aW9uKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbjYwMTc6XFx0e1xcbjYwMTg6XFx0XFx0aWYgKGdmcF9jb21wYWN0aW9uX2FsbG93ZWQoc2MtXFx1MDAzZWdmcF9tYXNrKSBcXHUwMDI2XFx1MDAyNiBzYy1cXHUwMDNlb3JkZXIgXFx1MDAyNlxcdTAwMjZcXG42MDE5OlxcdFxcdFxcdFxcdChzYy1cXHUwMDNlb3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUiB8fFxcbjYwMjA6XFx0XFx0XFx0XFx0IHNjLVxcdTAwM2Vwcmlvcml0eSBcXHUwMDNjIERFRl9QUklPUklUWSAtIDIpKVxcbjYwMjE6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNjAyMjpcXHRcXG42MDIzOlxcdFxcdHJldHVybiBmYWxzZTtcXG42MDI0OlxcdH1cXG42MDI1OlxcdFxcbjYwMjY6XFx0LypcXG42MDI3OlxcdCAqIFJlY2xhaW0vY29tcGFjdGlvbiBpcyB1c2VkIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb24gcmVxdWVzdHMuIEl0IHJlY2xhaW1zXFxuNjAyODpcXHQgKiBvcmRlci0wIHBhZ2VzIGJlZm9yZSBjb21wYWN0aW5nIHRoZSB6b25lLiBzaG91bGRfY29udGludWVfcmVjbGFpbSgpIHJldHVybnNcXG42MDI5OlxcdCAqIHRydWUgaWYgbW9yZSBwYWdlcyBzaG91bGQgYmUgcmVjbGFpbWVkIHN1Y2ggdGhhdCB3aGVuIHRoZSBwYWdlIGFsbG9jYXRvclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMzozMS41NDA3NjM0MzhaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgxMTcwMTc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYHNocmlua19scnV2ZWNgIGFuZCBgbnJfaXNvbGF0ZV9zY2FubmVkYCoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gSSdtIGZvY3VzaW5nIG9uIGBzaHJpbmtfbHJ1dmVjYCBhcm91bmQgbGluZSA2MDExIGFuZCBJJ20gaW1tZWRpYXRlbHkgY29uY2VybmVkIGFib3V0IHRoZSBjYWxsIHRvIGBzaHJpbmtfYWN0aXZlX2xpc3RgLiBTcGVjaWZpY2FsbHksIGlzIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIGluaXRpYWxpemVkICpiZWZvcmUqIHRoaXMgY2FsbD8gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoZSBjb2RlIGxvb2tzIGxpa2UgaXQncyBpbml0aWFsaXplZCB0byB6ZXJvIGluc2lkZSB0aGUgbG9vcDpcblxuYGBgY1xuXHRcdFx0aWYgKG5yW2xydV0pIHtcblx0XHRcdFx0bnJfdG9fc2NhbiA9IG1pbihucltscnVdLCBTV0FQX0NMVVNURVJfTUFYKTtcblxuXHRcdFx0XHRzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQgPSAwO1xuXHRcdFx0XHRucl9yZWNsYWltZWQgKz0gc2hyaW5rX2xpc3QobHJ1LCBucl90b19zY2FuLFxuXHRcdFx0XHRcdFx0XHQgICAgbHJ1dmVjLCBzYyk7XG5gYGBcblxuQnV0IHdoYXQgaWYgdGhhdCBsb29wICpkb2Vzbid0KiBydW4/IE9yLCBldmVuIHdvcnNlLCB3aGF0IGlmIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIHJldGFpbnMgc29tZSBnYXJiYWdlIHZhbHVlIGZyb20gYSBwcmV2aW91cyBsb29wIGl0ZXJhdGlvbj8gVGhpcyBjb3VsZCBsZWFkIHRvIGEgc2lnbmlmaWNhbnQgcHJvYmxlbSBkb3duIHRoZSBsaW5lIGlmIHRoaXMgdmFyaWFibGUgaXMgdXNlZCBmb3IgdHJhY2tpbmcgcHVycG9zZXMuXG5cblRoZW4sIEkgcmVjYWxsIHRoYXQgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgZG9lcyBzZXQgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gYSB2YWx1ZS4gVGhpcyBzZWVtcyBsaWtlIGl0IHNob3VsZCByZXNvbHZlIGFueSBwcmV2aW91cyBjb25jZXJucy4gU3BlY2lmaWNhbGx5OlxuXG5gYGBjXG5cdHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCA9IHRvdGFsX3NjYW47XG5gYGBcblxuQWgsIHJpZ2h0LCBpdCAqb3ZlcndyaXRlcyogdGhlIHZhbHVlISBJIGNhbiBzZWUgdGhhdCBgaXNvbGF0ZV9scnVfZm9saW9zYCBhbHdheXMgc2V0cyBgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkYC4gSXQgZG9lc24ndCByZWFkIGZyb20gaXQuIFRoZSBjb25jZXJuIGZvciByZXRhaW5lZCBkYXRhIGlzIGdvbmUuIFRoZSB2YWx1ZSBpcyByZXNldCBwcmlvciB0byB0aGUgY2FsbC4gSSB3YXMgcmlnaHQgdG8gY2hlY2sgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc0MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjM3LjM1MjQ2NzYxNVoiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzY5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY4MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2ODA6XFx0ICogQGxydTpcXHRMUlUgbGlzdCBpZCBmb3IgaXNvbGF0aW5nXFxuMTY4MTpcXHQgKlxcbjE2ODI6XFx0ICogcmV0dXJucyBob3cgbWFueSBwYWdlcyB3ZXJlIG1vdmVkIG9udG8gKkBkc3QuXFxuMTY4MzpcXHQgKi9cXG4xNjg0OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuMTY4NTpcXHRcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCxcXG4xNjg2OlxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBlbnVtIGxydV9saXN0IGxydSlcXG4xNjg3OlxcdHtcXG4xNjg4OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnNyYyA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxpc3RzW2xydV07XFxuMTY4OTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuID0gMDtcXG4xNjkwOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfem9uZV90YWtlbltNQVhfTlJfWk9ORVNdID0geyAwIH07XFxuMTY5MTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3NraXBwZWRbTUFYX05SX1pPTkVTXSA9IHsgMCwgfTtcXG4xNjkyOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2tpcHBlZCA9IDAsIHRvdGFsX3NjYW4gPSAwLCBzY2FuID0gMDtcXG4xNjkzOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XFxuMTY5NDpcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9ucl9za2lwcGVkID0gMDtcXG4xNjk1OlxcdFxcdExJU1RfSEVBRChmb2xpb3Nfc2tpcHBlZCk7XFxuMTY5NjpcXHRcXG4xNjk3OlxcdFxcdHdoaWxlIChzY2FuIFxcdTAwM2MgbnJfdG9fc2NhbiBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShzcmMpKSB7XFxuMTY5ODpcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICptb3ZlX3RvID0gc3JjO1xcbjE2OTk6XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4xNzAwOlxcdFxcbjE3MDE6XFx0XFx0XFx0Zm9saW8gPSBscnVfdG9fZm9saW8oc3JjKTtcXG4xNzAyOlxcdFxcdFxcdHByZWZldGNod19wcmV2X2xydV9mb2xpbyhmb2xpbywgc3JjLCBmbGFncyk7XFxuMTcwMzpcXHRcXG4xNzA0OlxcdFxcdFxcdG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjE3MDU6XFx0XFx0XFx0dG90YWxfc2NhbiArPSBucl9wYWdlcztcXG4xNzA2OlxcdFxcbjE3MDc6XFx0XFx0XFx0LypcXG4xNzA4OlxcdFxcdFxcdCAqIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAuXFxuMTcwOTpcXHRcXHRcXHQgKiBPbmNlIHRoZSBjYXAgaXMgaGl0LCBzdG9wIHJhdGhlciB0aGFuIGZvcmNlLWlzb2xhdGluZzpcXG4xNzEwOlxcdFxcdFxcdCAqIHJlY2xhaW1pbmcgaW5lbGlnaWJsZSBmb2xpb3Mgb25seSBpbmZsYXRlcyBucl9yZWNsYWltZWRcXG4xNzExOlxcdFxcdFxcdCAqIGludG8gYSBmYWxzZSBwcm9ncmVzcy5cXG4xNzEyOlxcdFxcdFxcdCAqL1xcbjE3MTM6XFx0XFx0XFx0aWYgKGZvbGlvX3pvbmVudW0oZm9saW8pIFxcdTAwM2Ugc2MtXFx1MDAzZXJlY2xhaW1faWR4KSB7XFxuMTcxNDpcXHRcXHRcXHRcXHRucl9za2lwcGVkW2ZvbGlvX3pvbmVudW0oZm9saW8pXSArPSBucl9wYWdlcztcXG4xNzE1OlxcdFxcdFxcdFxcdG1heF9ucl9za2lwcGVkKys7XFxuMTcxNjpcXHRcXHRcXHRcXHRpZiAobWF4X25yX3NraXBwZWQgXFx1MDAzZT0gU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEKSB7XFxuMTcxNzpcXHRcXHRcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZmb2xpb3Nfc2tpcHBlZCk7XFxuMTcxODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xNzE5OlxcdFxcdFxcdFxcdH1cXG4xNzIwOlxcdFxcdFxcdFxcdG1vdmVfdG8gPSBcXHUwMDI2Zm9saW9zX3NraXBwZWQ7XFxuMTcyMTpcXHRcXHRcXHRcXHRnb3RvIG1vdmU7XFxuMTcyMjpcXHRcXHRcXHR9XFxuMTcyMzpcXHRcXG4xNzI0OlxcdFxcdFxcdC8qXFxuMTcyNTpcXHRcXHRcXHQgKiBEbyBub3QgY291bnQgc2tpcHBlZCBmb2xpb3MgYmVjYXVzZSB0aGF0IG1ha2VzIHRoZSBmdW5jdGlvblxcbjE3MjY6XFx0XFx0XFx0ICogcmV0dXJuIHdpdGggbm8gaXNvbGF0ZWQgZm9saW9zIGlmIHRoZSBMUlUgbW9zdGx5IGNvbnRhaW5zXFxuMTcyNzpcXHRcXHRcXHQgKiBpbmVsaWdpYmxlIGZvbGlvcy4gIFRoaXMgY2F1c2VzIHRoZSBWTSB0byBub3QgcmVjbGFpbSBhbnlcXG4xNzI4OlxcdFxcdFxcdCAqIGZvbGlvcywgdHJpZ2dlcmluZyBhIHByZW1hdHVyZSBPT00uXFxuMTcyOTpcXHRcXHRcXHQgKiBBY2NvdW50IGFsbCBwYWdlcyBpbiBhIGZvbGlvLlxcbjE3MzA6XFx0XFx0XFx0ICovXFxuMTczMTpcXHRcXHRcXHRzY2FuICs9IG5yX3BhZ2VzO1xcbjE3MzI6XFx0XFxuMTczMzpcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSlcXG4xNzM0OlxcdFxcdFxcdFxcdGdvdG8gbW92ZTtcXG4xNzM1OlxcdFxcdFxcdGlmICghc2MtXFx1MDAzZW1heV91bm1hcCBcXHUwMDI2XFx1MDAyNiBmb2xpb19tYXBwZWQoZm9saW8pKVxcbjE3MzY6XFx0XFx0XFx0XFx0Z290byBtb3ZlO1xcbjE3Mzc6XFx0XFxuMTczODpcXHRcXHRcXHQvKlxcbjE3Mzk6XFx0XFx0XFx0ICogQmUgY2FyZWZ1bCBub3QgdG8gY2xlYXIgdGhlIGxydSBmbGFnIHVudGlsIGFmdGVyIHdlJ3JlXFxuMTc0MDpcXHRcXHRcXHQgKiBzdXJlIHRoZSBmb2xpbyBpcyBub3QgYmVpbmcgZnJlZWQgZWxzZXdoZXJlIC0tIHRoZVxcbjE3NDE6XFx0XFx0XFx0ICogZm9saW8gcmVsZWFzZSBjb2RlIHJlbGllcyBvbiBpdC5cXG4xNzQyOlxcdFxcdFxcdCAqL1xcbjE3NDM6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFmb2xpb190cnlfZ2V0KGZvbGlvKSkpXFxuMTc0NDpcXHRcXHRcXHRcXHRnb3RvIG1vdmU7XFxuMTc0NTpcXHRcXG4xNzQ2OlxcdFxcdFxcdGlmICghZm9saW9fdGVzdF9jbGVhcl9scnUoZm9saW8pKSB7XFxuMTc0NzpcXHRcXHRcXHRcXHQvKiBBbm90aGVyIHRocmVhZCBpcyBhbHJlYWR5IGlzb2xhdGluZyB0aGlzIGZvbGlvICovXFxuMTc0ODpcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjE3NDk6XFx0XFx0XFx0XFx0Z290byBtb3ZlO1xcbjE3NTA6XFx0XFx0XFx0fVxcbjE3NTE6XFx0XFxuMTc1MjpcXHRcXHRcXHRucl90YWtlbiArPSBucl9wYWdlcztcXG4xNzUzOlxcdFxcdFxcdG5yX3pvbmVfdGFrZW5bZm9saW9fem9uZW51bShmb2xpbyldICs9IG5yX3BhZ2VzO1xcbjE3NTQ6XFx0XFx0XFx0bW92ZV90byA9IGRzdDtcXG4xNzU1OlxcdG1vdmU6XFxuMTc1NjpcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIG1vdmVfdG8pO1xcbjE3NTc6XFx0XFx0fVxcbjE3NTg6XFx0XFxuMTc1OTpcXHRcXHQvKlxcbjE3NjA6XFx0XFx0ICogU3BsaWNlIGFueSBza2lwcGVkIGZvbGlvcyB0byB0aGUgc3RhcnQgb2YgdGhlIExSVSBsaXN0LiBOb3RlIHRoYXRcXG4xNzYxOlxcdFxcdCAqIHRoaXMgZGlzcnVwdHMgdGhlIExSVSBvcmRlciB3aGVuIHJlY2xhaW1pbmcgZm9yIGxvd2VyIHpvbmVzIGJ1dFxcbjE3NjI6XFx0XFx0ICogd2UgY2Fubm90IHNwbGljZSB0byB0aGUgdGFpbC4gSWYgd2UgZGlkIHRoZW4gdGhlIFNXQVBfQ0xVU1RFUl9NQVhcXG4xNzYzOlxcdFxcdCAqIHNjYW5uaW5nIHdvdWxkIHNvb24gcmVzY2FuIHRoZSBzYW1lIGZvbGlvcyB0byBza2lwIGFuZCB3YXN0ZSBsb3RzXFxuMTc2NDpcXHRcXHQgKiBvZiBjcHUgY3ljbGVzLlxcbjE3NjU6XFx0XFx0ICovXFxuMTc2NjpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmZvbGlvc19za2lwcGVkKSkge1xcbjE3Njc6XFx0XFx0XFx0aW50IHppZDtcXG4xNzY4OlxcdFxcbjE3Njk6XFx0XFx0XFx0bGlzdF9zcGxpY2UoXFx1MDAyNmZvbGlvc19za2lwcGVkLCBzcmMpO1xcbjE3NzA6XFx0XFx0XFx0Zm9yICh6aWQgPSAwOyB6aWQgXFx1MDAzYyBNQVhfTlJfWk9ORVM7IHppZCsrKSB7XFxuMTc3MTpcXHRcXHRcXHRcXHRpZiAoIW5yX3NraXBwZWRbemlkXSlcXG4xNzcyOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE3NzM6XFx0XFxuMTc3NDpcXHRcXHRcXHRcXHRfX2NvdW50X3ppZF92bV9ldmVudHMoUEdTQ0FOX1NLSVAsIHppZCwgbnJfc2tpcHBlZFt6aWRdKTtcXG4xNzc1OlxcdFxcdFxcdFxcdHNraXBwZWQgKz0gbnJfc2tpcHBlZFt6aWRdO1xcbjE3NzY6XFx0XFx0XFx0fVxcbjE3Nzc6XFx0XFx0fVxcbjE3Nzg6XFx0XFx0c2MtXFx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCA9IHRvdGFsX3NjYW47XFxuMTc3OTpcXHRcXHR0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtXFx1MDAzZXJlY2xhaW1faWR4LCBzYy1cXHUwMDNlb3JkZXIsIG5yX3RvX3NjYW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjM3LjM1MjgwNjYyNVoiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjc4NDk5MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG5yX2lzb2xhdGVfc2Nhbm5lZGAgVmFyaWFibGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBJJ3ZlIGNvbWUgYWNyb3NzIHRoaXMgbGluZTogYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCA9IHRvdGFsX3NjYW47YCBpbiBgaXNvbGF0ZV9scnVfZm9saW9zYC4gSXQncyBhbiB1bmNvbmRpdGlvbmFsIGFzc2lnbm1lbnQsIHJpZ2h0PyBNZWFuaW5nIGl0IGdldHMgc2V0IG5vIG1hdHRlciB3aGF0IGhhcHBlbnMgYmVmb3JlIGl0LiBTbywgSSB0aG91Z2h0IHRoZSBpbml0aWFsIHZhbHVlIHdvdWxkbid0IG1hdHRlci5cblxuQnV0IG5vdywgSSdtIHRoaW5raW5nIGFib3V0IGBzaHJpbmtfbHJ1dmVjYC4gVGhlcmUncyB0aGlzIGNvZGUgYmxvY2s6XG5cbmBgYGNcblx0XHRcdFx0c2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gMDtcblx0XHRcdFx0bnJfcmVjbGFpbWVkICs9IHNocmlua19saXN0KGxydSwgbnJfdG9fc2Nhbixcblx0XHRcdFx0XHRcdFx0ICAgIGxydXZlYywgc2MpO1xuXHRcdFx0XHQvKiAuLi4gKi9cblx0XHRcdFx0bnJbbHJ1XSAtPSBtaW4obnJbbHJ1XSxcblx0XHRcdFx0XHQgICAgICAgbWF4KG5yX3RvX3NjYW4sIHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCkpO1xuYGBgXG5cbldhaXQgYSBtaW51dGUuLi4gSGVyZSwgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAgaXMgZXhwbGljaXRseSBzZXQgdG8gMC4gVGhlbiwgYHNocmlua19saXN0YCBnZXRzIGNhbGxlZC4gQ3J1Y2lhbGx5LCBpZiBgc2hyaW5rX2xpc3RgICpkb2Vzbid0KiBjYWxsIGBpc29sYXRlX2xydV9mb2xpb3NgLCBgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkYCB3aWxsICpzdGF5KiBhdCAwLiBUaGF0J3MgYSBwb3RlbnRpYWwgaXNzdWUuIFRoZSBzdWJzZXF1ZW50IGNhbGN1bGF0aW9ucyBkZXBlbmQgb24gdGhlIHZhbHVlIG9mIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgLiBTbywgZG9lcyBgc2hyaW5rX2xpc3RgICphbHdheXMqIGNhbGwgYGlzb2xhdGVfbHJ1X2ZvbGlvc2A/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSBmb3IgYHNocmlua19saXN0YCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBhbnkgZGlzY3JlcGFuY3kgYmV0d2VlbiBgbnJfdG9fc2NhbmAgYW5kIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIHdpbGwgaW1wYWN0IGhvdyBtYW55IHBhZ2VzIGFyZSBjb25zaWRlcmVkIGZvciByZWNsYW1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMzo0Mi42MzEzMDk2MDVaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU5MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMjA6XFx0fVxcbjIyMjE6XFx0XFxuMjIyMjpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbjIyMjM6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuMjIyNDpcXHR7XFxuMjIyNTpcXHRcXHRpZiAoaXNfYWN0aXZlX2xydShscnUpKSB7XFxuMjIyNjpcXHRcXHRcXHRpZiAoc2MtXFx1MDAzZW1heV9kZWFjdGl2YXRlIFxcdTAwMjYgKDEgXFx1MDAzY1xcdTAwM2MgaXNfZmlsZV9scnUobHJ1KSkpXFxuMjIyNzpcXHRcXHRcXHRcXHRzaHJpbmtfYWN0aXZlX2xpc3QobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgbHJ1KTtcXG4yMjI4OlxcdFxcdFxcdGVsc2VcXG4yMjI5OlxcdFxcdFxcdFxcdHNjLVxcdTAwM2Vza2lwcGVkX2RlYWN0aXZhdGUgPSAxO1xcbjIyMzA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjIzMTpcXHRcXHR9XFxuMjIzMjpcXHRcXG4yMjMzOlxcdFxcdHJldHVybiBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCBscnV2ZWMsIHNjLCBscnUpO1xcbjIyMzQ6XFx0fVxcbjIyMzU6XFx0XFxuMjIzNjpcXHQvKlxcbjIyMzc6XFx0ICogVGhlIGluYWN0aXZlIGFub24gbGlzdCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRoYXQgdGhlIFZNIG5ldmVyIGhhc1xcbjIyMzg6XFx0ICogdG8gZG8gdG9vIG11Y2ggd29yay5cXG4yMjM5OlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjQyLjYzMTY3MjAxNVoiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODM2MTgyMjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IFNocmlua2FnZSBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGFnYWluLiBUaGUgc2NlbmFyaW8gSSdtIGxvb2tpbmcgYXQgaGluZ2VzIG9uIHRoZXNlIGNvbmRpdGlvbnM6IGBpc19hY3RpdmVfbHJ1KGxydSlgIGlzIHRydWUgYW5kIGBzYy1cdTAwM2VtYXlfZGVhY3RpdmF0ZSBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGlzX2ZpbGVfbHJ1KGxydSkpYCBpcyBmYWxzZS4gSW4gdGhpcyBzcGVjaWZpYyBjYXNlLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCBpcyBza2lwcGVkIGVudGlyZWx5LiBUaGlzIG1lYW5zIGBzaHJpbmtfbGlzdGAgcmV0dXJucyAwLCBhbmQsIGNydWNpYWxseSwgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAgc3RheXMgYXQgemVyby5cblxuTm93LCBsb29raW5nIGF0IGhvdyBgc2hyaW5rX2xydXZlY2AgaGFuZGxlcyB0aGlzLCBJIHNlZTpcblxuYGBgY1xubnJbbHJ1XSAtPSBtaW4obnJbbHJ1XSxcblx0ICAgICAgIG1heChucl90b19zY2FuLCBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQpKTtcbmBgYFxuXG5TaW5jZSBgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkYCBpcyB6ZXJvIGluIHRoaXMgc2l0dWF0aW9uLCBgbWF4KG5yX3RvX3NjYW4sIDApYCBzaW1wbGlmaWVzIHRvIGp1c3QgYG5yX3RvX3NjYW5gLiBTbyB0aGUgbGluZSBlZmZlY3RpdmVseSBiZWNvbWVzIGBucltscnVdIC09IG1pbihucltscnVdLCBucl90b19zY2FuKWAuIFRoYXQncyBjb21wbGV0ZWx5IHNvdW5kOyBpdOKAmXMgZGVjcmVtZW50aW5nIGBucltscnVdYCBieSBhIHZhbGlkIHZhbHVlLCBub3RoaW5nIHNwb29reSBpcyBoYXBwZW5pbmcgdGhlcmUuIFRoZXJlJ3Mgbm8gdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5Ib3dldmVyLCBJJ20gZ2V0dGluZyBhIGxpdHRsZSBwYXJhbm9pZCBub3cuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gdGFrZSBhIHdpZGVyIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIExldCBtZSBjaGVjayBmb3IgYW55IG90aGVyIG9jY3VycmVuY2VzIG9mIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIGluIHRoZSBjb2RlIGJhc2UsIGp1c3QgdG8gYmUgc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGlzc3VlcyBJJ20gb3Zlcmxvb2tpbmcuIEknbSBnb2luZyB0byBncmVwIGZvciBgbnJfaXNvbGF0ZV9zY2FubmVkYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDM6NDguNDY3ODU2ODY5WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDI5MjcwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJucl9pc29sYXRlX3NjYW5uZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XFxuLS1cXG5tbS92bXNjYW4uYy0xNjctXFx0LyogTnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkIGZyb20gaXNvbGF0ZV9scnVfZm9saW9zKCkgKi9cXG5tbS92bXNjYW4uYzoxNjg6XFx0dW5zaWduZWQgbG9uZyBucl9pc29sYXRlX3NjYW5uZWQ7XFxubW0vdm1zY2FuLmMtMTY5LVxcbi0tXFxubW0vdm1zY2FuLmM9MTY4ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMTc3Ny1cXHR9XFxubW0vdm1zY2FuLmM6MTc3ODpcXHRzYy1cXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2NhbjtcXG5tbS92bXNjYW4uYy0xNzc5LVxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfaXNvbGF0ZShzYy1cXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVxcdTAwM2VvcmRlciwgbnJfdG9fc2NhbixcXG4tLVxcbm1tL3Ztc2Nhbi5jPTE5OTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMjAyNi1cXHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFxcdTAwMjZmb2xpb19saXN0LCBzYywgbHJ1KTtcXG5tbS92bXNjYW4uYzoyMDI3OlxcdG5yX3NjYW5uZWQgPSBzYy1cXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkO1xcbm1tL3Ztc2Nhbi5jLTIwMjgtXFxuLS1cXG5tbS92bXNjYW4uYz0yMDc3PXN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuLS1cXG5tbS92bXNjYW4uYy0yMDk5LVxcbm1tL3Ztc2Nhbi5jOjIxMDA6XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBzYy1cXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkKTtcXG5tbS92bXNjYW4uYy0yMTAxLVxcbi0tXFxubW0vdm1zY2FuLmM9NTg4Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTMwLVxcbm1tL3Ztc2Nhbi5jOjU5MzE6XFx0XFx0XFx0XFx0c2MtXFx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCA9IDA7XFxubW0vdm1zY2FuLmMtNTkzMi1cXHRcXHRcXHRcXHRucl9yZWNsYWltZWQgKz0gc2hyaW5rX2xpc3QobHJ1LCBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtNTk0My1cXHRcXHRcXHRcXHRucltscnVdIC09IG1pbihucltscnVdLFxcbm1tL3Ztc2Nhbi5jOjU5NDQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIG1heChucl90b19zY2FuLCBzYy1cXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkKSk7XFxubW0vdm1zY2FuLmMtNTk0NS1cXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjQ4LjU1ODE1NDg2WiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4OTc0MTMxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIElzb2xhdGlvbiBMb2dpYyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYHNocmlua19hY3RpdmVfbGlzdGAsIEkgc2VlIHRoYXQgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAgaXMgYmVpbmcgdXNlZCwgc3BlY2lmaWNhbGx5IHJpZ2h0IGFmdGVyIGNhbGxpbmcgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AuIEknbSB1c2luZyBgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkYCB0byBtb2RpZnkgcGFnZSBzdGF0ZSBhbmQgbHJ1dmVjIHN0YXRlLiBTaW5jZSBgaXNvbGF0ZV9scnVfZm9saW9zYCAqYWx3YXlzKiBzZXRzIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgLCB0aGlzIGxvb2tzIGNvcnJlY3QgYXQgZmlyc3QgZ2xhbmNlLiBJdCBlbnN1cmVzIHRoZSBzdGF0ZSBpcyBjb25zaXN0ZW50LlxuXG5Ob3csIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIHRoZSBzYW1lIHBhdHRlcm4gYXBwZWFycy4gV2UgY2FsbCBgaXNvbGF0ZV9scnVfZm9saW9zYCwgdGhlbiBpbW1lZGlhdGVseSB1c2UgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAuIEFuZCBhZ2FpbiwgSSdtIHJlbHlpbmcgb24gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgdG8gc2V0IHRoaXMgdmFsdWUuIEJ1dCB3YWl0LCBhIG5hZ2dpbmcgdGhvdWdodC4uLndoYXQgaWYgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgKmRvZXNuJ3QqIGFsd2F5cyBzZXQgaXQ/IE15IHdob2xlIGxvZ2ljIGhpbmdlcyBvbiB0aGF0IGFzc3VtcHRpb24uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cbkkgbmVlZCB0byByZS1leGFtaW5lIHRoZSBgaXNvbGF0ZV9scnVfZm9saW9zYCBmdW5jdGlvbiBpdHNlbGYuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNvZGUuIEFoLCBoZXJlIGl0IGlzOiBgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2NhbjtgLiBUaGlzIGFzc2lnbm1lbnQgaXMgcmlnaHQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24sIGp1c3QgYmVmb3JlIHRoYXQgYHRyYWNlX21tX3Ztc2Nhbl9scnVfaXNvbGF0ZWAgY2FsbC4gT2theSwgdGhhdCBjb25maXJtcyBteSBhc3N1bXB0aW9uLCBpdCAqaXMqIHNldCBhdCB0aGUgZW5kLiBCdXQuLi4gYXJlIHRoZXJlIGFueSBlYXJseSByZXR1cm5zIGluIHRoYXQgZnVuY3Rpb24/IEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgc2NhbiB0aGUgZW50aXJlIGBpc29sYXRlX2xydV9mb2xpb3NgIGZ1bmN0aW9uIG5vdyB0byBlbnN1cmUgbm8gY29uZGl0aW9uYWwgcGF0aHMgYnlwYXNzIHRoaXMgY3JpdGljYWwgYXNzaWdubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDM6NTYuNDU1NTcxMDQ4WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjg0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY4NDpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbjE2ODU6XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QsXFxuMTY4NjpcXHRcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgZW51bSBscnVfbGlzdCBscnUpXFxuMTY4NzpcXHR7XFxuMTY4ODpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpzcmMgPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VsaXN0c1tscnVdO1xcbjE2ODk6XFx0XFx0dW5zaWduZWQgbG9uZyBucl90YWtlbiA9IDA7XFxuMTY5MDpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3pvbmVfdGFrZW5bTUFYX05SX1pPTkVTXSA9IHsgMCB9O1xcbjE2OTE6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9za2lwcGVkW01BWF9OUl9aT05FU10gPSB7IDAsIH07XFxuMTY5MjpcXHRcXHR1bnNpZ25lZCBsb25nIHNraXBwZWQgPSAwLCB0b3RhbF9zY2FuID0gMCwgc2NhbiA9IDA7XFxuMTY5MzpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xcbjE2OTQ6XFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfbnJfc2tpcHBlZCA9IDA7XFxuMTY5NTpcXHRcXHRMSVNUX0hFQUQoZm9saW9zX3NraXBwZWQpO1xcbjE2OTY6XFx0XFxuMTY5NzpcXHRcXHR3aGlsZSAoc2NhbiBcXHUwMDNjIG5yX3RvX3NjYW4gXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoc3JjKSkge1xcbjE2OTg6XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqbW92ZV90byA9IHNyYztcXG4xNjk5OlxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuMTcwMDpcXHRcXG4xNzAxOlxcdFxcdFxcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKHNyYyk7XFxuMTcwMjpcXHRcXHRcXHRwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oZm9saW8sIHNyYywgZmxhZ3MpO1xcbjE3MDM6XFx0XFxuMTcwNDpcXHRcXHRcXHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4xNzA1OlxcdFxcdFxcdHRvdGFsX3NjYW4gKz0gbnJfcGFnZXM7XFxuMTcwNjpcXHRcXG4xNzA3OlxcdFxcdFxcdC8qXFxuMTcwODpcXHRcXHRcXHQgKiBVc2luZyBtYXhfbnJfc2tpcHBlZCB0byBwcmV2ZW50IGhhcmQgTE9DS1VQLlxcbjE3MDk6XFx0XFx0XFx0ICogT25jZSB0aGUgY2FwIGlzIGhpdCwgc3RvcCByYXRoZXIgdGhhbiBmb3JjZS1pc29sYXRpbmc6XFxuMTcxMDpcXHRcXHRcXHQgKiByZWNsYWltaW5nIGluZWxpZ2libGUgZm9saW9zIG9ubHkgaW5mbGF0ZXMgbnJfcmVjbGFpbWVkXFxuMTcxMTpcXHRcXHRcXHQgKiBpbnRvIGEgZmFsc2UgcHJvZ3Jlc3MuXFxuMTcxMjpcXHRcXHRcXHQgKi9cXG4xNzEzOlxcdFxcdFxcdGlmIChmb2xpb196b25lbnVtKGZvbGlvKSBcXHUwMDNlIHNjLVxcdTAwM2VyZWNsYWltX2lkeCkge1xcbjE3MTQ6XFx0XFx0XFx0XFx0bnJfc2tpcHBlZFtmb2xpb196b25lbnVtKGZvbGlvKV0gKz0gbnJfcGFnZXM7XFxuMTcxNTpcXHRcXHRcXHRcXHRtYXhfbnJfc2tpcHBlZCsrO1xcbjE3MTY6XFx0XFx0XFx0XFx0aWYgKG1heF9ucl9za2lwcGVkIFxcdTAwM2U9IFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRCkge1xcbjE3MTc6XFx0XFx0XFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2Zm9saW9zX3NraXBwZWQpO1xcbjE3MTg6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTcxOTpcXHRcXHRcXHRcXHR9XFxuMTcyMDpcXHRcXHRcXHRcXHRtb3ZlX3RvID0gXFx1MDAyNmZvbGlvc19za2lwcGVkO1xcbjE3MjE6XFx0XFx0XFx0XFx0Z290byBtb3ZlO1xcbjE3MjI6XFx0XFx0XFx0fVxcbjE3MjM6XFx0XFxuMTcyNDpcXHRcXHRcXHQvKlxcbjE3MjU6XFx0XFx0XFx0ICogRG8gbm90IGNvdW50IHNraXBwZWQgZm9saW9zIGJlY2F1c2UgdGhhdCBtYWtlcyB0aGUgZnVuY3Rpb25cXG4xNzI2OlxcdFxcdFxcdCAqIHJldHVybiB3aXRoIG5vIGlzb2xhdGVkIGZvbGlvcyBpZiB0aGUgTFJVIG1vc3RseSBjb250YWluc1xcbjE3Mjc6XFx0XFx0XFx0ICogaW5lbGlnaWJsZSBmb2xpb3MuICBUaGlzIGNhdXNlcyB0aGUgVk0gdG8gbm90IHJlY2xhaW0gYW55XFxuMTcyODpcXHRcXHRcXHQgKiBmb2xpb3MsIHRyaWdnZXJpbmcgYSBwcmVtYXR1cmUgT09NLlxcbjE3Mjk6XFx0XFx0XFx0ICogQWNjb3VudCBhbGwgcGFnZXMgaW4gYSBmb2xpby5cXG4xNzMwOlxcdFxcdFxcdCAqL1xcbjE3MzE6XFx0XFx0XFx0c2NhbiArPSBucl9wYWdlcztcXG4xNzMyOlxcdFxcbjE3MzM6XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2xydShmb2xpbykpXFxuMTczNDpcXHRcXHRcXHRcXHRnb3RvIG1vdmU7XFxuMTczNTpcXHRcXHRcXHRpZiAoIXNjLVxcdTAwM2VtYXlfdW5tYXAgXFx1MDAyNlxcdTAwMjYgZm9saW9fbWFwcGVkKGZvbGlvKSlcXG4xNzM2OlxcdFxcdFxcdFxcdGdvdG8gbW92ZTtcXG4xNzM3OlxcdFxcbjE3Mzg6XFx0XFx0XFx0LypcXG4xNzM5OlxcdFxcdFxcdCAqIEJlIGNhcmVmdWwgbm90IHRvIGNsZWFyIHRoZSBscnUgZmxhZyB1bnRpbCBhZnRlciB3ZSdyZVxcbjE3NDA6XFx0XFx0XFx0ICogc3VyZSB0aGUgZm9saW8gaXMgbm90IGJlaW5nIGZyZWVkIGVsc2V3aGVyZSAtLSB0aGVcXG4xNzQxOlxcdFxcdFxcdCAqIGZvbGlvIHJlbGVhc2UgY29kZSByZWxpZXMgb24gaXQuXFxuMTc0MjpcXHRcXHRcXHQgKi9cXG4xNzQzOlxcdFxcdFxcdGlmICh1bmxpa2VseSghZm9saW9fdHJ5X2dldChmb2xpbykpKVxcbjE3NDQ6XFx0XFx0XFx0XFx0Z290byBtb3ZlO1xcbjE3NDU6XFx0XFxuMTc0NjpcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfbHJ1KGZvbGlvKSkge1xcbjE3NDc6XFx0XFx0XFx0XFx0LyogQW5vdGhlciB0aHJlYWQgaXMgYWxyZWFkeSBpc29sYXRpbmcgdGhpcyBmb2xpbyAqL1xcbjE3NDg6XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4xNzQ5OlxcdFxcdFxcdFxcdGdvdG8gbW92ZTtcXG4xNzUwOlxcdFxcdFxcdH1cXG4xNzUxOlxcdFxcbjE3NTI6XFx0XFx0XFx0bnJfdGFrZW4gKz0gbnJfcGFnZXM7XFxuMTc1MzpcXHRcXHRcXHRucl96b25lX3Rha2VuW2ZvbGlvX3pvbmVudW0oZm9saW8pXSArPSBucl9wYWdlcztcXG4xNzU0OlxcdFxcdFxcdG1vdmVfdG8gPSBkc3Q7XFxuMTc1NTpcXHRtb3ZlOlxcbjE3NTY6XFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBtb3ZlX3RvKTtcXG4xNzU3OlxcdFxcdH1cXG4xNzU4OlxcdFxcbjE3NTk6XFx0XFx0LypcXG4xNzYwOlxcdFxcdCAqIFNwbGljZSBhbnkgc2tpcHBlZCBmb2xpb3MgdG8gdGhlIHN0YXJ0IG9mIHRoZSBMUlUgbGlzdC4gTm90ZSB0aGF0XFxuMTc2MTpcXHRcXHQgKiB0aGlzIGRpc3J1cHRzIHRoZSBMUlUgb3JkZXIgd2hlbiByZWNsYWltaW5nIGZvciBsb3dlciB6b25lcyBidXRcXG4xNzYyOlxcdFxcdCAqIHdlIGNhbm5vdCBzcGxpY2UgdG8gdGhlIHRhaWwuIElmIHdlIGRpZCB0aGVuIHRoZSBTV0FQX0NMVVNURVJfTUFYXFxuMTc2MzpcXHRcXHQgKiBzY2FubmluZyB3b3VsZCBzb29uIHJlc2NhbiB0aGUgc2FtZSBmb2xpb3MgdG8gc2tpcCBhbmQgd2FzdGUgbG90c1xcbjE3NjQ6XFx0XFx0ICogb2YgY3B1IGN5Y2xlcy5cXG4xNzY1OlxcdFxcdCAqL1xcbjE3NjY6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZmb2xpb3Nfc2tpcHBlZCkpIHtcXG4xNzY3OlxcdFxcdFxcdGludCB6aWQ7XFxuMTc2ODpcXHRcXG4xNzY5OlxcdFxcdFxcdGxpc3Rfc3BsaWNlKFxcdTAwMjZmb2xpb3Nfc2tpcHBlZCwgc3JjKTtcXG4xNzcwOlxcdFxcdFxcdGZvciAoemlkID0gMDsgemlkIFxcdTAwM2MgTUFYX05SX1pPTkVTOyB6aWQrKykge1xcbjE3NzE6XFx0XFx0XFx0XFx0aWYgKCFucl9za2lwcGVkW3ppZF0pXFxuMTc3MjpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xNzczOlxcdFxcbjE3NzQ6XFx0XFx0XFx0XFx0X19jb3VudF96aWRfdm1fZXZlbnRzKFBHU0NBTl9TS0lQLCB6aWQsIG5yX3NraXBwZWRbemlkXSk7XFxuMTc3NTpcXHRcXHRcXHRcXHRza2lwcGVkICs9IG5yX3NraXBwZWRbemlkXTtcXG4xNzc2OlxcdFxcdFxcdH1cXG4xNzc3OlxcdFxcdH1cXG4xNzc4OlxcdFxcdHNjLVxcdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQgPSB0b3RhbF9zY2FuO1xcbjE3Nzk6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2xydV9pc29sYXRlKHNjLVxcdTAwM2VyZWNsYWltX2lkeCwgc2MtXFx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxcbjE3ODA6XFx0XFx0XFx0XFx0XFx0ICAgIHRvdGFsX3NjYW4sIHNraXBwZWQsIG5yX3Rha2VuLCBscnUpO1xcbjE3ODE6XFx0XFx0dXBkYXRlX2xydV9zaXplcyhscnV2ZWMsIGxydSwgbnJfem9uZV90YWtlbik7XFxuMTc4MjpcXHRcXHRyZXR1cm4gbnJfdGFrZW47XFxuMTc4MzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjU2LjQ1NjEyMDUyOFoiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTA3NzUxNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgRnVuY3Rpb24gQ2FsbCoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBgaXNvbGF0ZV9scnVfZm9saW9zYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGl0IGNvbnNpc3RlbnRseSBzZWVtcyB0byByZWFjaCBhIGNlcnRhaW4gcG9pbnQsIHNwZWNpZmljYWxseSB3aGVyZSBgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2NhbjtgLiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgY291bnRlciBgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkYCwgd2hpY2ggcHJlc3VtYWJseSB0cmFja3MgdGhlIG51bWJlciBvZiBwYWdlcy9mb2xpb3Mgc2Nhbm5lZCBkdXJpbmcgdGhlIGlzb2xhdGlvbiBwcm9jZXNzLCBpcyAqYWx3YXlzKiBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGBpc29sYXRlX2xydV9mb2xpb3NgIGZ1bmN0aW9uLiBUaGVyZSBhcmVuJ3QgYW55IGVhcmx5IHJldHVybnMgdGhhdCB3b3VsZCBwcmV2ZW50IHRoaXMgaW5pdGlhbGl6YXRpb24uIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi5cblxuTm93LCBhIHBvdGVudGlhbCB3cmlua2xlLiBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBgc2hyaW5rX2FjdGl2ZV9saXN0YCBpcyBjYWxsZWQuIEl0IHdvdWxkIGJlIGltcG9ydGFudCBpZiBgc2hyaW5rX2FjdGl2ZV9saXN0YCBpcyBjYWxsZWQgZnJvbSBga3N3YXBkX2FnZV9ub2RlYC5cblxuTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gaW52ZXN0aWdhdGUgdGhlIGNhbGwgcGF0aHMgdG8gYHNocmlua19hY3RpdmVfbGlzdGAgYW5kLCBpbiBwYXJ0aWN1bGFyLCB0byBzY3J1dGluaXplIGBrc3dhcGRfYWdlX25vZGVgLiBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGludGVyYWN0aW5nIHdpdGggdGhlIHByb2Nlc3MgaW4gYSBwb3RlbnRpYWxseSB1bmV4cGVjdGVkIHdheSB0aGF0IGNvdWxkIGFmZmVjdCBob3cgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAgYmVoYXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjA0OjAwLjM2Mzg3NjE3NloiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjg2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjgzMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjgzMTpcXHRzdGF0aWMgdm9pZCBrc3dhcGRfYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNjgzMjpcXHR7XFxuNjgzMzpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNjgzNDpcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XFxuNjgzNTpcXHRcXG42ODM2OlxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSB7XFxuNjgzNzpcXHRcXHRcXHRscnVfZ2VuX2FnZV9ub2RlKHBnZGF0LCBzYyk7XFxuNjgzODpcXHRcXG42ODM5OlxcdFxcdFxcdGlmICghbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcXG42ODQwOlxcdFxcdFxcdFxcdHJldHVybjtcXG42ODQxOlxcdFxcbjY4NDI6XFx0XFx0fVxcbjY4NDM6XFx0XFxuNjg0NDpcXHRcXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhOVUxMLCBwZ2RhdCk7XFxuNjg0NTpcXHRcXHRpZiAoIWNhbl9hZ2VfYW5vbl9wYWdlcyhscnV2ZWMsIHNjKSlcXG42ODQ2OlxcdFxcdFxcdHJldHVybjtcXG42ODQ3OlxcdFxcbjY4NDg6XFx0XFx0aWYgKCFpbmFjdGl2ZV9pc19sb3cobHJ1dmVjLCBMUlVfSU5BQ1RJVkVfQU5PTikpXFxuNjg0OTpcXHRcXHRcXHRyZXR1cm47XFxuNjg1MDpcXHRcXG42ODUxOlxcdFxcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpO1xcbjY4NTI6XFx0XFx0ZG8ge1xcbjY4NTM6XFx0XFx0XFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG42ODU0OlxcdFxcdFxcdHNocmlua19hY3RpdmVfbGlzdChTV0FQX0NMVVNURVJfTUFYLCBscnV2ZWMsXFxuNjg1NTpcXHRcXHRcXHRcXHRcXHQgICBzYywgTFJVX0FDVElWRV9BTk9OKTtcXG42ODU2OlxcdFxcdFxcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKTtcXG42ODU3OlxcdFxcdH0gd2hpbGUgKG1lbWNnKTtcXG42ODU4OlxcdH1cXG42ODU5OlxcdFxcbjY4NjA6XFx0c3RhdGljIGJvb2wgcGdkYXRfd2F0ZXJtYXJrX2Jvb3N0ZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG42ODYxOlxcdHtcXG42ODYyOlxcdFxcdGludCBpO1xcbjY4NjM6XFx0XFx0c3RydWN0IHpvbmUgKnpvbmU7XFxuNjg2NDpcXHRcXG42ODY1OlxcdFxcdC8qXFxuNjg2NjpcXHRcXHQgKiBDaGVjayBmb3Igd2F0ZXJtYXJrIGJvb3N0cyB0b3AtZG93biBhcyB0aGUgaGlnaGVyIHpvbmVzXFxuNjg2NzpcXHRcXHQgKiBhcmUgbW9yZSBsaWtlbHkgdG8gYmUgYm9vc3RlZC4gQm90aCB3YXRlcm1hcmtzIGFuZCBib29zdHNcXG42ODY4OlxcdFxcdCAqIHNob3VsZCBub3QgYmUgY2hlY2tlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIHJlY2xhaW0gd291bGRcXG42ODY5OlxcdFxcdCAqIHN0YXJ0IHByZW1hdHVyZWx5IHdoZW4gdGhlcmUgaXMgbm8gYm9vc3RpbmcgYW5kIGEgbG93ZXJcXG42ODcwOlxcdFxcdCAqIHpvbmUgaXMgYmFsYW5jZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjA0OjAwLjM2NDI0NzMyNVoiLCJTZXEiOjY3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjIxNTM4Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpZ2dpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgTnVhbmNlcyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoaXMgYGtzd2FwZF9hZ2Vfbm9kZWAgZnVuY3Rpb24sIGFuZCBpdCdzIGNhbGxpbmcgYHNocmlua19hY3RpdmVfbGlzdGAuIFJpZ2h0LCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAgY2FsbHMgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AuIE5vdywgdGhhdCBgaXNvbGF0ZV9scnVfZm9saW9zYCBmdW5jdGlvbiwgSSByZW1lbWJlciBpdCBzZXRzIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgLiBBbmQgdGhlbiwgd2l0aGluIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGl0c2VsZiwgaXQgdXNlcyB0aGF0IHZlcnkgdmFsdWUsIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgLCB3aGVuIGl0IGNhbGxzIGBtb2RfbHJ1dmVjX3N0YXRlYC4gU2VlbXMgc29saWQgLSB0aGUgdmFyaWFibGUgaXMgZGVmaW5pdGVseSBpbml0aWFsaXplZCBiZWZvcmUgaXQncyB1c2VkLCB3aGljaCBpcyBnb29kLiBXZeKAmXJlIHNhZmUgdGhlcmUuXG5cbkhvbGQgb24uLi4gYSBuYWdnaW5nIHRob3VnaHQuIFdoYXQgaWYgYHNocmlua19pbmFjdGl2ZV9saXN0YCBpcyBjYWxsZWQgKnNvbWV3aGVyZSogZWxzZSBiZXNpZGVzIGp1c3QgaW5zaWRlIGBzaHJpbmtfbGlzdGA/IFRoYXQgd291bGQgdGhyb3cgYSB3cmVuY2ggaW50byB0aGlzLiBMZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBjYWxsIHNpdGVzIGZvciBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGp1c3QgdG8gYmUgY2VydGFpbi4gWWVzLCBJJ2xsIGdvIHRocm91Z2ggdGhlIGNhbGwgc3RhY2sgZm9yIHRoYXQgZnVuY3Rpb24gYW5kIG1ha2Ugc3VyZS4gQSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIHNob3VsZCBkbyB0aGUgdHJpY2suIFdlIGhhdmUgdG8gYmUgdGhvcm91Z2ggYWJvdXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0ODQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowNDowNi41ODU3ODg4MzFaIiwiU2VxIjo2OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTcyNjkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTE5NTM9c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXFxuLS1cXG5tbS92bXNjYW4uYy0xOTkxLS8qXFxubW0vdm1zY2FuLmM6MTk5MjogKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfbm9kZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyXFxubW0vdm1zY2FuLmMtMTk5My0gKiBvZiByZWNsYWltZWQgcGFnZXNcXG5tbS92bXNjYW4uYy0xOTk0LSAqL1xcbm1tL3Ztc2Nhbi5jOjE5OTU6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbm1tL3Ztc2Nhbi5jLTE5OTYtXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIyMjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIyMzItXFxubW0vdm1zY2FuLmM6MjIzMzpcXHRyZXR1cm4gc2hyaW5rX2luYWN0aXZlX2xpc3QobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgbHJ1KTtcXG5tbS92bXNjYW4uYy0yMjM0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDQ6MDYuNjk1NTIyNDVaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE0NzYyNjc4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFZNIFJlY2xhaW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGVzcGVjaWFsbHkgc2luY2UgaXQncyB0b3VjaGluZyB0aGUgY29yZSBWTSByZWNsYWltIGxvZ2ljLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSByZXBsYWNpbmcgYW4gb3V0cHV0IHBhcmFtZXRlciAoYHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWRgKSB3aXRoIGEgbmV3IGZpZWxkIHdpdGhpbiB0aGUgYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHN0cnVjdHVyZSAoYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGApLiBJdCdzIGFsbCBhYm91dCBob3cgdGhlIG51bWJlciBvZiBzY2FubmVkIHBhZ2VzIGlzIHBhc3NlZCBhcm91bmQgd2l0aGluIGBpc29sYXRlX2xydV9mb2xpb3NgLlxuXG5GaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgc2hyaW5rX2xpc3RgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgY2FsbHMgYHNocmlua19pbmFjdGl2ZV9saXN0YC4gTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIGdldHRpbmcgaW5pdGlhbGl6ZWQgY29ycmVjdGx5PyBMb29raW5nIGF0IGBzaHJpbmtfbHJ1dmVjYCwgSSBzZWUgaXQgZXhwbGljaXRseSBzZXRzIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIHRvIDAgYmVmb3JlIGNhbGxpbmcgYHNocmlua19saXN0YC4gQW5kLCBpZiBgaXNvbGF0ZV9scnVfZm9saW9zYCByZXR1cm5zIGVhcmx5IChlLmcuLCBhY3RpdmUgbGlzdCBhbmQgbm8gZGVhY3RpdmF0ZSksIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIHJlbWFpbnMgYXQgMCwgbWFraW5nIHRoZSBzdWJzZXF1ZW50IGBtYXgoKWAgY2FsbCBwZXJmZWN0bHkgc2FmZS5cblxuSSBncmVwcGVkIGZvciBhbGwgaW5zdGFuY2VzIG9mIGBucl9pc29sYXRlX3NjYW5uZWRgIHRvIGVuc3VyZSBpdCdzIHVzZWQgY29ycmVjdGx5LiBJdCdzIGFkZGVkIHRvIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCwgYXNzaWduZWQgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AsIGFuZCByZWFkIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBhbmQgYHNocmlua19scnV2ZWNgLiBTbywgaXQgbG9va3MgbGlrZSB0aGVyZSdzIG5vIHdheSBmb3IgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gYmUgcmVhZCB3aXRob3V0IGJlaW5nIGluaXRpYWxpemVkLiBUaGlzIG1ha2VzIG1lIGNvbmZpZGVudCB0aGF0IHRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGp1c3QgYSByZWZhY3RvcmluZy4gSXQgcmVtb3ZlcyBhbiBgbnJfc2Nhbm5lZGAgcG9pbnRlciBhcmd1bWVudCBmcm9tIGBpc29sYXRlX2xydV9mb2xpb3NgIGFuZCB1cGRhdGVzIHRoZSBjYWxsZXJzIHRvIHVzZSB0aGUgbmV3IGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIGZpZWxkLiBUaGUgbG9naWMgY2hhbmdlIGluIGBpc29sYXRlX2xydV9mb2xpb3NgIHRvIGJyZWFrIGVhcmx5IGlmIGBtYXhfbnJfc2tpcHBlZCBcdTAwM2U9IFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRGAgcHJldmVudHMgaGFyZCBsb2NrdXBzLlxuXG5ObywgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGluZm9ybWF0aW9uIGxlYWtzIG9yIGNoYW5nZXMgdGhhdCBpbnZvbHZlIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBhbHNvIGRvZXNuJ3QgbW9kaWZ5IGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC4gU2luY2UgdGhlIGNoYW5nZXMgYXJlIGludGVybmFsIHRvIHRoZSBWTSByZWNsYWltIGxvZ2ljLCBhbnkgYnVncyB3b3VsZCBsaWtlbHkgYmUgbG9naWMgYnVncywgb3V0LW9mLWJvdW5kcyBlcnJvcnMsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZXNlIGFyZSBiZXN0IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBzbyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlxuXG5JIGp1c3Qgd2VudCB0aHJvdWdoIHRoZSBkaWZmIGFnYWluIGZvciBhIGZpbmFsIHJldmlldy4gVGhlIGNoYW5nZXMgbG9vayBzdHJhaWdodGZvcndhcmQsIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAgc2VlbXMgY29ycmVjdCBpbiBhbGwgcGxhY2VzLiBTbywgSSBhbSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE5MywiT3V0cHV0VG9rZW5zIjoyMzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjA0OjI4LjE3MTc5MzIyNVoiLCJTZXEiOjcwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIFZNIHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgaW50cm9kdWNlcyBhIG5ldyBmaWVsZCBgbnJfaXNvbGF0ZV9zY2FubmVkYCB0byBgc3RydWN0IHNjYW5fY29udHJvbGAgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBzY2FubmVkIHBhZ2VzLCByZXBsYWNpbmcgYW4gb3V0cHV0IHBvaW50ZXIgYXJndW1lbnQgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvcygpYC4gVGhlIGZpZWxkIGlzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgdXNlIChlaXRoZXIgZXhwbGljaXRseSB0byAwIGluIGBzaHJpbmtfbHJ1dmVjKClgIG9yIHVuY29uZGl0aW9uYWxseSBhc3NpZ25lZCBhdCB0aGUgZW5kIG9mIGBpc29sYXRlX2xydV9mb2xpb3MoKWApLiBUaGUgcGF0Y2ggYWxzbyBjaGFuZ2VzIHRoZSBsb2dpYyB0byBzdG9wIGlzb2xhdGluZyBmb2xpb3Mgd2hlbiBhIHNraXAgdGhyZXNob2xkIGlzIHJlYWNoZWQuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRvIG5vdCBpbnZvbHZlIGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBWTSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0IGludHJvZHVjZXMgYSBuZXcgZmllbGQgYG5yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHRvIHRyYWNrIHRoZSBudW1iZXIgb2Ygc2Nhbm5lZCBwYWdlcywgcmVwbGFjaW5nIGFuIG91dHB1dCBwb2ludGVyIGFyZ3VtZW50IGluIGBpc29sYXRlX2xydV9mb2xpb3MoKWAuIFRoZSBmaWVsZCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoZWl0aGVyIGV4cGxpY2l0bHkgdG8gMCBpbiBgc2hyaW5rX2xydXZlYygpYCBvciB1bmNvbmRpdGlvbmFsbHkgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiBgaXNvbGF0ZV9scnVfZm9saW9zKClgKS4gVGhlIHBhdGNoIGFsc28gY2hhbmdlcyB0aGUgbG9naWMgdG8gc3RvcCBpc29sYXRpbmcgZm9saW9zIHdoZW4gYSBza2lwIHRocmVzaG9sZCBpcyByZWFjaGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkbyBub3QgaW52b2x2ZSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowh9x9h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 07:42:17 +0000 UTC FinishedAt: 2026-08-11 08:04:29 +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": "486d992fddf1e26f35a924d85bfbfd8d866a2ac2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "HIBERNATION", "NUMA" ], "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": "486d992fddf1e26f35a924d85bfbfd8d866a2ac2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "HIBERNATION", "NUMA" ], "series_id": "b59f645e-2944-4e0f-803b-46464c406ba1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_free_mem_cgroup_pages", "shrink_all_memory", "user_proactive_reclaim", "mem_cgroup_shrink_node", "node_reclaim" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0hJQkVSTkFUSU9OJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zaHJpbmtfbm9kZSYjMzQ7LAogICAgJiMzNDtub2RlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgVk0gcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZpZWxkIGBucl9pc29sYXRlX3NjYW5uZWRgIHRvIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIHNjYW5uZWQgcGFnZXMsIHJlcGxhY2luZyBhbiBvdXRwdXQgcG9pbnRlciBhcmd1bWVudCBpbiBgaXNvbGF0ZV9scnVfZm9saW9zKClgLiBUaGUgZmllbGQgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKGVpdGhlciBleHBsaWNpdGx5IHRvIDAgaW4gYHNocmlua19scnV2ZWMoKWAgb3IgdW5jb25kaXRpb25hbGx5IGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgYGlzb2xhdGVfbHJ1X2ZvbGlvcygpYCkuIFRoZSBwYXRjaCBhbHNvIGNoYW5nZXMgdGhlIGxvZ2ljIHRvIHN0b3AgaXNvbGF0aW5nIGZvbGlvcyB3aGVuIGEgc2tpcCB0aHJlc2hvbGQgaXMgcmVhY2hlZC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IGludGVybmFsIHRvIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRvIG5vdCBpbnZvbHZlIGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgaXNvbGF0ZV9scnVfZm9saW9zYCBhbmQgYHNocmlua19scnV2ZWNgIHRvIHByZXZlbnQgaGFyZCBsb2NrdXBzIGJ5IGNhcHBpbmcgdGhlIG51bWJlciBvZiBza2lwcGVkIGluZWxpZ2libGUgZm9saW9zIGFuZCBhZGp1c3RpbmcgdGhlIHNjYW4gcXVvdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB2YXJpb3VzIHJlY2xhaW0gcGF0aHMgKGUuZy4sIGNncm91cCByZWNsYWltLCBwcm9hY3RpdmUgcmVjbGFpbSwgaGliZXJuYXRpb24pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDQ3ODNhZTc2NjEyOTBiMDEzYjBhYzFhZWJkOGFjMWMyMWQzYjJiZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA4OjAxOjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDU2NzA4ZDFkMmRmZDUuLmFjMzIzN2E1OGNiMjkgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC0xNjQsNiAmIzQzOzE2NCw5IEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuIFx0LyogSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBpbmFjdGl2ZSBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xuIFxuJiM0MztcdC8qIE51bWJlciBvZiBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCBmcm9tIGlzb2xhdGVfbHJ1X2ZvbGlvcygpICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9pc29sYXRlX3NjYW5uZWQ7XG4mIzQzO1xuIFx0LyogTnVtYmVyIG9mIHBhZ2VzIGZyZWVkIHNvIGZhciBkdXJpbmcgYSBjYWxsIHRvIHNocmlua196b25lcygpICovXG4gXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcbiBcbkBAIC0xNjczLDcgJiM0MzsxNjc2LDYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuICAqIEBucl90b19zY2FuOlx0VGhlIG51bWJlciBvZiBlbGlnaWJsZSBwYWdlcyB0byBsb29rIHRocm91Z2ggb24gdGhlIGxpc3QuXG4gICogQGxydXZlYzpcdFRoZSBMUlUgdmVjdG9yIHRvIHB1bGwgcGFnZXMgZnJvbS5cbiAgKiBAZHN0Olx0VGhlIHRlbXAgbGlzdCB0byBwdXQgcGFnZXMgb24gdG8uXG4tICogQG5yX3NjYW5uZWQ6XHRUaGUgbnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkLlxuICAqIEBzYzpcdFx0VGhlIHNjYW5fY29udHJvbCBzdHJ1Y3QgZm9yIHRoaXMgcmVjbGFpbSBzZXNzaW9uXG4gICogQGxydTpcdExSVSBsaXN0IGlkIGZvciBpc29sYXRpbmdcbiAgKlxuQEAgLTE2ODEsOCAmIzQzOzE2ODMsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdXBkYXRlX2xydV9zaXplcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gICovXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QsXG4tXHRcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLVx0XHRlbnVtIGxydV9saXN0IGxydSlcbiYjNDM7XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBlbnVtIGxydV9saXN0IGxydSlcbiB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICpzcmMgPSBcdTAwMjZscnV2ZWMtXHUwMDNlbGlzdHNbbHJ1XTtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4gPSAwO1xuQEAgLTE3MDMsMTIgJiM0MzsxNzA0LDIwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRcdG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFx0XHR0b3RhbF9zY2FuICYjNDM7PSBucl9wYWdlcztcbiBcbi1cdFx0LyogVXNpbmcgbWF4X25yX3NraXBwZWQgdG8gcHJldmVudCBoYXJkIExPQ0tVUCovXG4tXHRcdGlmIChtYXhfbnJfc2tpcHBlZCBcdTAwM2MgU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgKGZvbGlvX3pvbmVudW0oZm9saW8pIFx1MDAzZSBzYy1cdTAwM2VyZWNsYWltX2lkeCkpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBVc2luZyBtYXhfbnJfc2tpcHBlZCB0byBwcmV2ZW50IGhhcmQgTE9DS1VQLlxuJiM0MztcdFx0ICogT25jZSB0aGUgY2FwIGlzIGhpdCwgc3RvcCByYXRoZXIgdGhhbiBmb3JjZS1pc29sYXRpbmc6XG4mIzQzO1x0XHQgKiByZWNsYWltaW5nIGluZWxpZ2libGUgZm9saW9zIG9ubHkgaW5mbGF0ZXMgbnJfcmVjbGFpbWVkXG4mIzQzO1x0XHQgKiBpbnRvIGEgZmFsc2UgcHJvZ3Jlc3MuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChmb2xpb196b25lbnVtKGZvbGlvKSBcdTAwM2Ugc2MtXHUwMDNlcmVjbGFpbV9pZHgpIHtcbiBcdFx0XHRucl9za2lwcGVkW2ZvbGlvX3pvbmVudW0oZm9saW8pXSAmIzQzOz0gbnJfcGFnZXM7XG4tXHRcdFx0bW92ZV90byA9IFx1MDAyNmZvbGlvc19za2lwcGVkO1xuIFx0XHRcdG1heF9ucl9za2lwcGVkJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0aWYgKG1heF9ucl9za2lwcGVkIFx1MDAzZT0gU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEKSB7XG4mIzQzO1x0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2Zm9saW9zX3NraXBwZWQpO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdG1vdmVfdG8gPSBcdTAwMjZmb2xpb3Nfc2tpcHBlZDtcbiBcdFx0XHRnb3RvIG1vdmU7XG4gXHRcdH1cbiBcbkBAIC0xNzY2LDcgJiM0MzsxNzc1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0XHRza2lwcGVkICYjNDM7PSBucl9za2lwcGVkW3ppZF07XG4gXHRcdH1cbiBcdH1cbi1cdCpucl9zY2FubmVkID0gdG90YWxfc2NhbjtcbiYjNDM7XHRzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQgPSB0b3RhbF9zY2FuO1xuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9pc29sYXRlKHNjLVx1MDAzZXJlY2xhaW1faWR4LCBzYy1cdTAwM2VvcmRlciwgbnJfdG9fc2NhbixcbiBcdFx0XHRcdCAgICB0b3RhbF9zY2FuLCBza2lwcGVkLCBucl90YWtlbiwgbHJ1KTtcbiBcdHVwZGF0ZV9scnVfc2l6ZXMobHJ1dmVjLCBscnUsIG5yX3pvbmVfdGFrZW4pO1xuQEAgLTIwMTQsOCAmIzQzOzIwMjMsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbi1cdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2Zm9saW9fbGlzdCxcbi1cdFx0XHRcdCAgICAgXHUwMDI2bnJfc2Nhbm5lZCwgc2MsIGxydSk7XG4mIzQzO1x0bnJfdGFrZW4gPSBpc29sYXRlX2xydV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBcdTAwMjZmb2xpb19saXN0LCBzYywgbHJ1KTtcbiYjNDM7XHRucl9zY2FubmVkID0gc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkO1xuIFxuIFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IGZpbGUsIG5yX3Rha2VuKTtcbiBcdGl0ZW0gPSBQR1NDQU5fS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xuQEAgLTIwNzEsNyAmIzQzOzIwODAsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0XHRcdCAgICAgICBlbnVtIGxydV9saXN0IGxydSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuO1xuLVx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xuIFx0dm1fZmxhZ3NfdCB2bV9mbGFncztcbiBcdExJU1RfSEVBRChsX2hvbGQpO1x0LyogVGhlIGZvbGlvcyB3aGljaCB3ZXJlIHNuaXBwZWQgb2ZmICovXG4gXHRMSVNUX0hFQUQobF9hY3RpdmUpO1xuQEAgLTIwODUsMTIgJiM0MzsyMDkzLDExIEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbi1cdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2bF9ob2xkLFxuLVx0XHRcdFx0ICAgICBcdTAwMjZucl9zY2FubmVkLCBzYywgbHJ1KTtcbiYjNDM7XHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFx1MDAyNmxfaG9sZCwgc2MsIGxydSk7XG4gXG4gXHRfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgZmlsZSwgbnJfdGFrZW4pO1xuIFxuLVx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBucl9zY2FubmVkKTtcbiYjNDM7XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdSRUZJTEwsIHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCk7XG4gXG4gXHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xuIFxuQEAgLTU5MjAsMTAgJiM0Mzs1OTI3LDIxIEBAIHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdFx0Zm9yX2VhY2hfZXZpY3RhYmxlX2xydShscnUpIHtcbiBcdFx0XHRpZiAobnJbbHJ1XSkge1xuIFx0XHRcdFx0bnJfdG9fc2NhbiA9IG1pbihucltscnVdLCBTV0FQX0NMVVNURVJfTUFYKTtcbi1cdFx0XHRcdG5yW2xydV0gLT0gbnJfdG9fc2NhbjtcbiBcbiYjNDM7XHRcdFx0XHRzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQgPSAwO1xuIFx0XHRcdFx0bnJfcmVjbGFpbWVkICYjNDM7PSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sXG4gXHRcdFx0XHRcdFx0XHQgICAgbHJ1dmVjLCBzYyk7XG4mIzQzO1x0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHQgKiBpc29sYXRlX2xydV9mb2xpb3MoKSBtYXkgc2NhbiBmYXIgbW9yZVxuJiM0MztcdFx0XHRcdCAqIHRoYW4gbnJfdG9fc2NhbiB3aGVuIHRoZSBMUlUgaG9sZHNcbiYjNDM7XHRcdFx0XHQgKiBpbmVsaWdpYmxlIGZvbGlvcyAoem9uZS1za2lwKSBvciBsYXJnZVxuJiM0MztcdFx0XHRcdCAqIGZvbGlvcy4gQ2hhcmdlIHRoYXQgb3ZlcnNob290IGFnYWluc3QgdGhlXG4mIzQzO1x0XHRcdFx0ICogcmVtYWluaW5nIHF1b3RhIChjbGFtcGVkIGJ5IG1pbigpIHNvIGl0XG4mIzQzO1x0XHRcdFx0ICogY2Fubm90IGdvIG5lZ2F0aXZlKSBzbyB0aGUgbmV4dCBpdGVyYXRpb25cbiYjNDM7XHRcdFx0XHQgKiBkb2VzIG5vdCByZXNjYW4gdGhlIHNhbWUgc2tpcHBlZCBmb2xpb3MuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0bnJbbHJ1XSAtPSBtaW4obnJbbHJ1XSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBtYXgobnJfdG9fc2Nhbiwgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkKSk7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0hJQkVSTkFUSU9OJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zaHJpbmtfbm9kZSYjMzQ7LAogICAgJiMzNDtub2RlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgYW5kIGBzaHJpbmtfbHJ1dmVjYCB0byBwcmV2ZW50IGhhcmQgbG9ja3VwcyBieSBjYXBwaW5nIHRoZSBudW1iZXIgb2Ygc2tpcHBlZCBpbmVsaWdpYmxlIGZvbGlvcyBhbmQgYWRqdXN0aW5nIHRoZSBzY2FuIHF1b3RhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmFyaW91cyByZWNsYWltIHBhdGhzIChlLmcuLCBjZ3JvdXAgcmVjbGFpbSwgcHJvYWN0aXZlIHJlY2xhaW0sIGhpYmVybmF0aW9uKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ0NzgzYWU3NjYxMjkwYjAxM2IwYWMxYWViZDhhYzFjMjFkM2IyYmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwODowMTowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNTY3MDhkMWQyZGZkNS4uYWMzMjM3YTU4Y2IyOSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTE2NCw2ICYjNDM7MTY0LDkgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJLyogSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBpbmFjdGl2ZSBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCAqLwogCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDsKIAomIzQzOwkvKiBOdW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQgZnJvbSBpc29sYXRlX2xydV9mb2xpb3MoKSAqLwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX2lzb2xhdGVfc2Nhbm5lZDsKJiM0MzsKIAkvKiBOdW1iZXIgb2YgcGFnZXMgZnJlZWQgc28gZmFyIGR1cmluZyBhIGNhbGwgdG8gc2hyaW5rX3pvbmVzKCkgKi8KIAl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDsKIApAQCAtMTY3Myw3ICYjNDM7MTY3Niw2IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1cGRhdGVfbHJ1X3NpemVzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKICAqIEBucl90b19zY2FuOglUaGUgbnVtYmVyIG9mIGVsaWdpYmxlIHBhZ2VzIHRvIGxvb2sgdGhyb3VnaCBvbiB0aGUgbGlzdC4KICAqIEBscnV2ZWM6CVRoZSBMUlUgdmVjdG9yIHRvIHB1bGwgcGFnZXMgZnJvbS4KICAqIEBkc3Q6CVRoZSB0ZW1wIGxpc3QgdG8gcHV0IHBhZ2VzIG9uIHRvLgotICogQG5yX3NjYW5uZWQ6CVRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQuCiAgKiBAc2M6CQlUaGUgc2Nhbl9jb250cm9sIHN0cnVjdCBmb3IgdGhpcyByZWNsYWltIHNlc3Npb24KICAqIEBscnU6CUxSVSBsaXN0IGlkIGZvciBpc29sYXRpbmcKICAqCkBAIC0xNjgxLDggJiM0MzsxNjgzLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCwKLQkJdW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCi0JCWVudW0gbHJ1X2xpc3QgbHJ1KQomIzQzOwkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGVudW0gbHJ1X2xpc3QgbHJ1KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnNyYyA9ICZhbXA7bHJ1dmVjLSZndDtsaXN0c1tscnVdOwogCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW4gPSAwOwpAQCAtMTcwMywxMiAmIzQzOzE3MDQsMjAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAkJbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAJCXRvdGFsX3NjYW4gJiM0Mzs9IG5yX3BhZ2VzOwogCi0JCS8qIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAqLwotCQlpZiAobWF4X25yX3NraXBwZWQgJmx0OyBTV0FQX0NMVVNURVJfTUFYX1NLSVBQRUQgJmFtcDsmYW1wOwotCQkgICAgKGZvbGlvX3pvbmVudW0oZm9saW8pICZndDsgc2MtJmd0O3JlY2xhaW1faWR4KSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAuCiYjNDM7CQkgKiBPbmNlIHRoZSBjYXAgaXMgaGl0LCBzdG9wIHJhdGhlciB0aGFuIGZvcmNlLWlzb2xhdGluZzoKJiM0MzsJCSAqIHJlY2xhaW1pbmcgaW5lbGlnaWJsZSBmb2xpb3Mgb25seSBpbmZsYXRlcyBucl9yZWNsYWltZWQKJiM0MzsJCSAqIGludG8gYSBmYWxzZSBwcm9ncmVzcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGZvbGlvX3pvbmVudW0oZm9saW8pICZndDsgc2MtJmd0O3JlY2xhaW1faWR4KSB7CiAJCQlucl9za2lwcGVkW2ZvbGlvX3pvbmVudW0oZm9saW8pXSAmIzQzOz0gbnJfcGFnZXM7Ci0JCQltb3ZlX3RvID0gJmFtcDtmb2xpb3Nfc2tpcHBlZDsKIAkJCW1heF9ucl9za2lwcGVkJiM0MzsmIzQzOzsKJiM0MzsJCQlpZiAobWF4X25yX3NraXBwZWQgJmd0Oz0gU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEKSB7CiYjNDM7CQkJCWxpc3RfbW92ZSgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7Zm9saW9zX3NraXBwZWQpOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQkJbW92ZV90byA9ICZhbXA7Zm9saW9zX3NraXBwZWQ7CiAJCQlnb3RvIG1vdmU7CiAJCX0KIApAQCAtMTc2Niw3ICYjNDM7MTc3NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJCQlza2lwcGVkICYjNDM7PSBucl9za2lwcGVkW3ppZF07CiAJCX0KIAl9Ci0JKm5yX3NjYW5uZWQgPSB0b3RhbF9zY2FuOwomIzQzOwlzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2NhbjsKIAl0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtJmd0O3JlY2xhaW1faWR4LCBzYy0mZ3Q7b3JkZXIsIG5yX3RvX3NjYW4sCiAJCQkJICAgIHRvdGFsX3NjYW4sIHNraXBwZWQsIG5yX3Rha2VuLCBscnUpOwogCXVwZGF0ZV9scnVfc2l6ZXMobHJ1dmVjLCBscnUsIG5yX3pvbmVfdGFrZW4pOwpAQCAtMjAxNCw4ICYjNDM7MjAyMyw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAogCWxydXZlY19sb2NrX2lycShscnV2ZWMpOwogCi0JbnJfdGFrZW4gPSBpc29sYXRlX2xydV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCAmYW1wO2ZvbGlvX2xpc3QsCi0JCQkJICAgICAmYW1wO25yX3NjYW5uZWQsIHNjLCBscnUpOwomIzQzOwlucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsICZhbXA7Zm9saW9fbGlzdCwgc2MsIGxydSk7CiYjNDM7CW5yX3NjYW5uZWQgPSBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkOwogCiAJX19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IGZpbGUsIG5yX3Rha2VuKTsKIAlpdGVtID0gUEdTQ0FOX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTsKQEAgLTIwNzEsNyAmIzQzOzIwODAsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCQkJICAgICAgIGVudW0gbHJ1X2xpc3QgbHJ1KQogewogCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW47Ci0JdW5zaWduZWQgbG9uZyBucl9zY2FubmVkOwogCXZtX2ZsYWdzX3Qgdm1fZmxhZ3M7CiAJTElTVF9IRUFEKGxfaG9sZCk7CS8qIFRoZSBmb2xpb3Mgd2hpY2ggd2VyZSBzbmlwcGVkIG9mZiAqLwogCUxJU1RfSEVBRChsX2FjdGl2ZSk7CkBAIC0yMDg1LDEyICYjNDM7MjA5MywxMSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCiAJbHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7CiAKLQlucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsICZhbXA7bF9ob2xkLAotCQkJCSAgICAgJmFtcDtucl9zY2FubmVkLCBzYywgbHJ1KTsKJiM0MzsJbnJfdGFrZW4gPSBpc29sYXRlX2xydV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCAmYW1wO2xfaG9sZCwgc2MsIGxydSk7CiAKIAlfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgZmlsZSwgbnJfdGFrZW4pOwogCi0JbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBucl9zY2FubmVkKTsKJiM0MzsJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkKTsKIAogCWxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7CiAKQEAgLTU5MjAsMTAgJiM0Mzs1OTI3LDIxIEBAIHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAkJZm9yX2VhY2hfZXZpY3RhYmxlX2xydShscnUpIHsKIAkJCWlmIChucltscnVdKSB7CiAJCQkJbnJfdG9fc2NhbiA9IG1pbihucltscnVdLCBTV0FQX0NMVVNURVJfTUFYKTsKLQkJCQlucltscnVdIC09IG5yX3RvX3NjYW47CiAKJiM0MzsJCQkJc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZCA9IDA7CiAJCQkJbnJfcmVjbGFpbWVkICYjNDM7PSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sCiAJCQkJCQkJICAgIGxydXZlYywgc2MpOwomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiBpc29sYXRlX2xydV9mb2xpb3MoKSBtYXkgc2NhbiBmYXIgbW9yZQomIzQzOwkJCQkgKiB0aGFuIG5yX3RvX3NjYW4gd2hlbiB0aGUgTFJVIGhvbGRzCiYjNDM7CQkJCSAqIGluZWxpZ2libGUgZm9saW9zICh6b25lLXNraXApIG9yIGxhcmdlCiYjNDM7CQkJCSAqIGZvbGlvcy4gQ2hhcmdlIHRoYXQgb3ZlcnNob290IGFnYWluc3QgdGhlCiYjNDM7CQkJCSAqIHJlbWFpbmluZyBxdW90YSAoY2xhbXBlZCBieSBtaW4oKSBzbyBpdAomIzQzOwkJCQkgKiBjYW5ub3QgZ28gbmVnYXRpdmUpIHNvIHRoZSBuZXh0IGl0ZXJhdGlvbgomIzQzOwkJCQkgKiBkb2VzIG5vdCByZXNjYW4gdGhlIHNhbWUgc2tpcHBlZCBmb2xpb3MuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlucltscnVdIC09IG1pbihucltscnVdLAomIzQzOwkJCQkJICAgICAgIG1heChucl90b19zY2FuLCBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkKSk7CiAJCQl9CiAJCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjEwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNzI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFZNU2NhbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3Ztc2Nhbi5jYCwgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSB0YXJnZXRlZCBjaGFuZ2VzIHdpdGhpbiB0aGUgcGFnZSByZWNsYWltIHN1YnN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBzb21ldGhpbmcgY3J1Y2lhbDsgYW55IHR3ZWFrcyB0byBtZW1vcnkgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiB0aGVzZSBjb3JlIGZ1bmN0aW9ucywgbmVlZCBjYXJlZnVsIHNjcnV0aW55LiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGBpc29sYXRlX2xydV9mb2xpb3NgIGFuZCBgc2hyaW5rX2xydXZlY2AsIGJvdGggb2Ygd2hpY2ggYXJlIGNlbnRyYWwgdG8gdGhlIGV2aWN0aW9uIGFuZCBzY2FubmluZyBwcm9jZXNzZXMuCgpTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBhbHRlcnMgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgdG8gdXNlIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCBpbnN0ZWFkIG9mIGEgZGVkaWNhdGVkIHBvaW50ZXIgZm9yIHRoZSBzY2FubmVkIGNvdW50LiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyBpdCBsb29rcyBsaWtlIHRoZSBpbnRlbnQgaXMgdG8gY29uc29saWRhdGUgc3RhdGUgd2l0aGluIHRoZSBgc2NgIChzY2FuKSBzdHJ1Y3R1cmUsIHBvdGVudGlhbGx5IGZvciBiZXR0ZXIgdHJhY2tpbmcgb3Igc3luY2hyb25pemF0aW9uLiBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRoaXMgZmllbGQgaXMgdXNlZCBhbmQgaWYgaXQmIzM5O3MgY29uc2lzdGVudC4KClRoZSBsb2dpYyBjaGFuZ2UgcmVnYXJkaW5nIGBtYXhfbnJfc2tpcHBlZGAgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgY2F0Y2hlcyBteSBleWUgdG9vLiBUaGV5JiMzOTtyZSB0cnlpbmcgdG8gcHJldmVudCBsb2NrdXBzLCB0aGF0IG11Y2ggaXMgY2xlYXIsIHdpdGggYSBsaW1pdCBiYXNlZCBvbiB0aGUgem9uZSBvZiB0aGUgZm9saW8uIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1c2luZyBgbWF4X25yX3NraXBwZWRgLCBidXQgdGhlIHBhdGNoIHNlZW1zIHRvIGhhdmUgcmV3b3JrZWQgdGhhdC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBub3cgZGVzaWduZWQgdG8gYmFpbCBvdXQgd2hlbiBpdCBoaXRzIGEgdGhyZXNob2xkIChgU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEYCkgaW5zdGVhZCBvZiBmb3JjaW5nIHRoZSBpc29sYXRpb24gb2YgZm9saW9zLiBUaGUgY29tbWVudCBtZW50aW9ucyAmIzM0O3JlY2xhaW1pbmcgaW5lbGlnaWJsZSBmb2xpb3Mgb25seSBpbmZsYXRlcyBucl9yZWNsYWltZWQgaW50byBhIGZhbHNlIHByb2dyZXNzLiYjMzQ7IEFoLCBzbyB0aGUgaW50ZW50aW9uIGhlcmUgaXMgdG8gYXZvaWQgY2h1cm5pbmcgdGhyb3VnaCBmb2xpb3MgdGhhdCBjYW4mIzM5O3QgYmUgcmVjbGFpbWVkLCB3aGljaCBpcyBhIGNvbW1vbiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGluIHRoZXNlIHN5c3RlbXMuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCB0aGlzIGlzIGEgY2FzZSB3aGVyZSB0aGUgJiMzNDttYXgmIzM0OyBsaW1pdCBtYXkgY2F1c2UgYSBoYXJkIGxvb3AuCgpUaGUgY2hhbmdlcyB0byBgc2hyaW5rX2xydXZlY2AgYXJlIGFsc28gcmVsZXZhbnQuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBtYW5hZ2luZyB0aGUgcXVvdGEgKGBucltscnVdYCkgbW9yZSBjYXJlZnVsbHksIGZhY3RvcmluZyBpbiBwb3RlbnRpYWwgJiMzNDtvdmVyc2hvb3QmIzM0OyBkdXJpbmcgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AuIFRoZSBjb2RlIGlzIGNvbXBlbnNhdGluZyBmb3IgdGhlIGZhY3QgdGhhdCBgaXNvbGF0ZV9scnVfZm9saW9zYCBtaWdodCBzY2FuIG1vcmUgdGhhbiBgbnJfdG9fc2NhbmAsIGR1ZSB0byBza2lwcGVkIHpvbmVzIG9yIGxhcmdlIGZvbGlvcy4gVGhlIGdvYWwgYXBwZWFycyB0byBiZSBtb3JlIHByZWNpc2UgYWNjb3VudGluZywgcHJldmVudGluZyB0aGUgbmV4dCBpdGVyYXRpb24gZnJvbSByZXZpc2l0aW5nIHNraXBwZWQgZm9saW9zLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGltcHJvdmVtZW50IGluIGVmZmljaWVuY3kgYW5kIGF2b2lkaW5nIHVubmVjZXNzYXJ5IHNjYW5uaW5nLCBidXQgSSBuZWVkIHRvIGVuc3VyZSB0aGUgbWF0aCBpcyBjb3JyZWN0IGFuZCB0aGVyZSBpc24mIzM5O3QgYSBuZXcgb2ZmLWJ5LW9uZSBidWcuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBgc2hyaW5rX2xydXZlY2AsIGBzaHJpbmtfbGlzdGAsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBhbmQgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgZW50cnkgcG9pbnRzIGZvciBwYWdlIHJlY2xhaW0gaW4gZ2VuZXJhbDsgSSB3aWxsIGNoZWNrIGBtbS92bXNjYW4uY2AgdG8gcmVtaW5kIG15c2VsZi4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kLCBpZiB0aGlzIGlzIGEgbWFpbmxpbmUgcGF0Y2gsIGl0IG11c3QgaGF2ZSBnb25lIHRocm91Z2ggc2VyaW91cyBzY3J1dGlueSwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMgaW50byB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIHNlZSBob3cgdGhpcyBhZmZlY3RzIHRoZWlyIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odW5zaWduZWQgbG9uZ3x2b2lkfGludHxib29sKVxccyYjNDM7W2EtekEtWjAtOV9dJiM0MztcXCguKnNocmlua19scnV2ZWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBzaHJpbmtfbHJ1dmVjYCBpbiBgbW0vdm1zY2FuLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhhdCBgc2hyaW5rX2xydXZlY2AgZnVuY3Rpb24uIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcm5hbHMsIEkmIzM5O20gdGhpbmtpbmcgdGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGlzIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gdGhlIGBtbS92bXNjYW4uY2AgZmlsZS4gU2VhcmNoaW5nIGZvciB0aGUgZnVuY3Rpb24gYHNocmlua19scnV2ZWNgIGRpcmVjdGx5IHNlZW1zIGxpa2UgdGhlIHF1aWNrZXN0IHBhdGggdG8gZGlzc2VjdGluZyBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgcGFnZSByZWNsYWltIHN0cmF0ZWd5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfbHJ1dmVjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDkzMT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5NjUtICovXG5tbS92bXNjYW4uYzo0OTY2OnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy00OTY3LXtcbi0tXG5tbS92bXNjYW4uYz01MDExPXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwMzAtXG5tbS92bXNjYW4uYzo1MDMxOlx0bmVlZF9yb3RhdGUgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUwMzItXG4tLVxubW0vdm1zY2FuLmM9NTA1Mj1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTIxLVxubW0vdm1zY2FuLmM6NTEyMjpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUxMjMte1xuLS1cbm1tL3Ztc2Nhbi5jLTUxMzQtXG5tbS92bXNjYW4uYzo1MTM1Olx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNTEzNi1cdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xuLS1cbm1tL3Ztc2Nhbi5jPTU4NjY9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01ODcwLVxubW0vdm1zY2FuLmM6NTg3MTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTU4NzIte1xuLS1cbm1tL3Ztc2Nhbi5jPTU4NzY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01ODgyLVxubW0vdm1zY2FuLmM6NTg4MzpzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01ODg0LXtcbi0tXG5tbS92bXNjYW4uYy01ODk0LVx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jOjU4OTU6XHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTU4OTYtXG4tLVxubW0vdm1zY2FuLmM9NjA4NT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjE0NC1cbm1tL3Ztc2Nhbi5jOjYxNDU6XHRcdHNocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy02MTQ2LVxuLS1cbm1tL3Ztc2Nhbi5jPTY3NDA9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy02NzcwLVx0ICovXG5tbS92bXNjYW4uYzo2NzcxOlx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY3NzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE1NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYW5kIHRoZSBjb250ZXh0IGlzIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudDoKCioqSHVudGluZyBEb3duIFNocmluayBGdW5jdGlvbiBDYWxsZXJzKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyB3aXRoaW4gdGhlIGNvZGUgd2hlcmUgZWl0aGVyIGBzaHJpbmtfbm9kZV9tZW1jZ3NgIG9yIGBzaHJpbmtfbHJ1dmVjYCBhcmUgYmVpbmcgaW52b2tlZC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgYW5kIGhvdyB0aGV5JiMzOTtyZSBpbnRlZ3JhdGVkIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IHJlY2xhaW0gc3RyYXRlZ3kuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGVzZSBhcmUgY29yZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBzaHJpbmtpbmcgbWVtb3J5IGZyb20gbm9kZSBvciBMUlUtYmFzZWQgbWVtb3J5IHBvb2xzLiBUaGlzIGNvdWxkIGJlIHRvIGRlYWwgd2l0aCBtZW1vcnkgcHJlc3N1cmUsIHJlY2xhaW0gcGFnZXMsIG9yIG1heWJlIGV2ZW4gaW4gcHJlcGFyYXRpb24gZm9yIHNvbWUgc29ydCBvZiBOVU1BIGJhbGFuY2luZyBvciBtaWdyYXRpb24uCgpUaGUga2V5IGlzIGlkZW50aWZ5aW5nICpub24tc3RhdGljKiBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBjYWxsIHRoZXNlIHNocmluayBmdW5jdGlvbnMuIFRoZSAmIzM0O25vbi1zdGF0aWMmIzM0OyBwYXJ0IGlzIGltcG9ydGFudDsgaXQgc3VnZ2VzdHMgdGhhdCB0aGVzZSBhcmUgZnVuY3Rpb25zIG1lYW50IHRvIGJlIGFjY2Vzc2VkIGZyb20gbXVsdGlwbGUgcG9pbnRzIHdpdGhpbiB0aGUga2VybmVsLCBtYWtpbmcgdGhlbSBnb29kIGNhbmRpZGF0ZXMgZm9yIHRyYWNpbmcgdGhlIGNhbGwgZmxvdyBhbmQgdW5kZXJzdGFuZCB3aGljaCBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSB0cmlnZ2VyaW5nIG1lbW9yeSBzaHJpbmtpbmcuIE5vdywgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgc291cmNlIGNvZGUgYW5kIGZpbmQgdGhlIGNhbGwgc2l0ZXMgZm9yIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcC4gTmV4dCwgSSBuZWVkIHRvIHdvcmsgb3V0IHRoZSB3aWRlciBjb250ZXh0IG9mIGhvdyBlYWNoIGZ1bmN0aW9uIGNhbGxzIHRoZSBzaHJpbmsgbWV0aG9kcywgd2hhdCBkYXRhIGl0IHBhc3NlcyB0byB0aGVzZSBtZXRob2RzLCBhbmQgaW4gd2hpY2ggY2lyY3Vtc3RhbmNlcyB0aGVzZSBjYWxscyBvY2N1ci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfbm9kZV9tZW1jZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz02MDMzPXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTYwODQtXG5tbS92bXNjYW4uYzo2MDg1OnN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYwODYte1xuLS1cbm1tL3Ztc2Nhbi5jPTYxNjQ9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjE4OC1cbm1tL3Ztc2Nhbi5jOjYxODk6XHRzaHJpbmtfbm9kZV9tZW1jZ3MocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYxOTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcwMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipUcmFjaW5nIHRoZSBFeGVjdXRpb24gUGF0aDogYHNocmlua19ub2RlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHNocmlua19ub2RlYCBmdW5jdGlvbi4gTXkgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcGxhY2Ugd2l0aGluIHRoZSBicm9hZGVyIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbiBjb250ZXh0LiBXaGVyZSBpcyBpdCBjYWxsZWQ/IFdoYXQmIzM5O3MgdGhlIHByZWNvbmRpdGlvbiBmb3IgY2FsbGluZyBpdD8gQW5kIHdoYXQgc3RhdGUgZG9lcyBpdCBsZWF2ZSB0aGUgc3lzdGVtIGluIGFmdGVyd2FyZD8gSSBpbW1lZGlhdGVseSBzdGFydCB2aXN1YWxpemluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUgaW4gbXkgaGVhZCwgaXRzIG5vZGVzIGFuZCBsaW5rcywgYW50aWNpcGF0aW5nIGhvdyBgc2hyaW5rX25vZGVgIG1pZ2h0IGFsdGVyIHRoZW0uIElzIHRoaXMgYSB0cmVlLCBhIGdyYXBoLCBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHR5cGUgb2Ygc3RydWN0dXJlIGRyYW1hdGljYWxseSBpbmZsdWVuY2VzIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLgoKSSB3YW50IHRvIGtub3cgdGhlICYjMzQ7d2h5JiMzNDsgYmVoaW5kIHRoaXMgZnVuY3Rpb24mIzM5O3MgZXhpc3RlbmNlLCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkZXNpZ24gZ29hbHMuIElzIHRoaXMgYWJvdXQgbWVtb3J5IG9wdGltaXphdGlvbj8gUGVyZm9ybWFuY2UgdHVuaW5nPyBPciBwZXJoYXBzIG1haW50YWluaW5nIHNvbWUga2luZCBvZiBzdHJ1Y3R1cmFsIGludmFyaWFudD8gQSBzbWFsbGVyIG5vZGUgb2Z0ZW4gc3VnZ2VzdHMgd2UmIzM5O3JlIGNvbnNvbGlkYXRpbmcgaW5mb3JtYXRpb24sIHJlbW92aW5nIHJlZHVuZGFuY2llcywgb3IgcGVyaGFwcyBwcmVwYXJpbmcgZm9yIGEgbW9yZSBlZmZpY2llbnQgc2VhcmNoIG9yIHRyYXZlcnNhbC4gSSBzdGFydCBtZW50YWxseSBjb21wb3NpbmcgdGVzdCBjYXNlczsgZWRnZSBjYXNlcywgYm91bmRhcnkgY29uZGl0aW9ucywgYW5kIHR5cGljYWwgc2NlbmFyaW9zLCB0byBtYWtlIHN1cmUgdGhlIHByb2Nlc3MgaXMgcm9idXN0LCBhcyBleHBlY3RlZC4KCkkgd2lsbCBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzICYjMzQ7c2hyaW5raW5nJiMzNDsgaXMgYWNoaWV2ZWQ6IGRvZXMgaXQgaW52b2x2ZSBub2RlIG1lcmdpbmcsIGRlYWxsb2NhdGlvbiwgcG9pbnRlciBhZGp1c3RtZW50cywgb3IgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBjcmVhdGl2ZS4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgaXQgcmVsaWVzIHVwb24/IEhvdyBhcmUgY29uY3VycmVudCBhY2Nlc3MgY29uY2VybnMgaGFuZGxlZCwgaWYgYW55PyBJJiMzOTtsbCBwcm9iYWJseSBzcGVuZCBhIGdvb2QgYW1vdW50IG9mIHRpbWUgcmV2aWV3aW5nIHRoZSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGlmIGF2YWlsYWJsZSwgb3IgaWYgbm90LCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgb3BlcmF0aW9uIGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGJlIGFibGUgdG8gZm9sbG93IHRoZSBmbG93LCBzdGVwIGJ5IHN0ZXAsIGFuZCBtZW50YWxseSB2ZXJpZnkgdGhhdCB0aGVyZSBhcmUgbm8gbGVha3Mgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMuIFVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGBzaHJpbmtfbm9kZWAgZnVuY3Rpb24gKm1lYW5zKiBpbiB0aGlzIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0xOTUzPXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxuLS1cbm1tL3Ztc2Nhbi5jLTE5OTEtLypcbm1tL3Ztc2Nhbi5jOjE5OTI6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxubW0vdm1zY2FuLmMtMTk5My0gKiBvZiByZWNsYWltZWQgcGFnZXNcbi0tXG5tbS92bXNjYW4uYz01MTIyPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxNDItXG5tbS92bXNjYW4uYzo1MTQzOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MTQ0LXtcbi0tXG5tbS92bXNjYW4uYz01ODcxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU4NzUtXG5tbS92bXNjYW4uYzo1ODc2OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01ODc3LXtcbi0tXG5tbS92bXNjYW4uYz02MDMzPXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfY29udGludWVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTYwODQtXG5tbS92bXNjYW4uYzo2MDg1OnN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTYwODYte1xuLS1cbm1tL3Ztc2Nhbi5jLTYxNjMtXG5tbS92bXNjYW4uYzo2MTY0OnN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjE2NS17XG4tLVxubW0vdm1zY2FuLmMtNjE3MS1cdFx0bWVtc2V0KFx1MDAyNnNjLVx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXHUwMDNlbnIpKTtcbm1tL3Ztc2Nhbi5jOjYxNzI6XHRcdGxydV9nZW5fc2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYxNzMtXG4tLVxubW0vdm1zY2FuLmMtNjE4OC1cbm1tL3Ztc2Nhbi5jOjYxODk6XHRzaHJpbmtfbm9kZV9tZW1jZ3MocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYxOTAtXG4tLVxubW0vdm1zY2FuLmM9NjM0OT1zdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjQyNy1cdFx0bGFzdF9wZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbm1tL3Ztc2Nhbi5jOjY0Mjg6XHRcdHNocmlua19ub2RlKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjQyOS1cdH1cbi0tXG5tbS92bXNjYW4uYz02Njk0PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3MzktLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xubW0vdm1zY2FuLmM6Njc0MDp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjc0MS1cdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4tLVxubW0vdm1zY2FuLmMtNjc2Ni1cdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxubW0vdm1zY2FuLmM6Njc2NzpcdCAqIGlmIHdlIGRvbiYjMzk7dCByZWNsYWltIGhlcmUsIHRoZSBzaHJpbmtfbm9kZSBmcm9tIGJhbGFuY2VfcGdkYXRcbm1tL3Ztc2Nhbi5jLTY3NjgtXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJiMzOTtzIGFzIHdlbGwuIFdlIGhhY2tcbi0tXG5tbS92bXNjYW4uYz02ODg4PXN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy02OTEyLVx0XHQgKiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC4gT25jZSBpdCYjMzk7c1xubW0vdm1zY2FuLmM6NjkxMzpcdFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcbm1tL3Ztc2Nhbi5jLTY5MTQtXHRcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcbi0tXG5tbS92bXNjYW4uYz02OTcwPXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy03MDA4LSAqL1xubW0vdm1zY2FuLmM6NzAwOTpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTcwMTAtXHRcdFx0ICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTcwMjUtXHQgKi9cbm1tL3Ztc2Nhbi5jOjcwMjY6XHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNzAyNy1cbi0tXG5tbS92bXNjYW4uYz03MDgyPXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzE5MS1cbm1tL3Ztc2Nhbi5jOjcxOTI6XHRcdC8qIENhbGwgc29mdCBsaW1pdCByZWNsYWltIGJlZm9yZSBjYWxsaW5nIHNocmlua19ub2RlLiAqL1xubW0vdm1zY2FuLmMtNzE5My1cdFx0c2MubnJfc2Nhbm5lZCA9IDA7XG4tLVxubW0vdm1zY2FuLmMtNzIwMy1cdFx0ICovXG5tbS92bXNjYW4uYzo3MjA0Olx0XHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcdTAwMjZzYykpXG5tbS92bXNjYW4uYy03MjA1LVx0XHRcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9Nzc1OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS92bXNjYW4uYy03Nzg2LVx0XHRkbyB7XG5tbS92bXNjYW4uYzo3Nzg3Olx0XHRcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy03Nzg4LVx0XHR9IHdoaWxlIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNjIG5yX3BhZ2VzIFx1MDAyNlx1MDAyNiAtLXNjLVx1MDAzZXByaW9yaXR5IFx1MDAzZT0gMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSwgYnJlYWtpbmcgZG93biB0aGUgZnVuY3Rpb24gYWNjZXNzaWJpbGl0eToKCioqQXNzZXNzaW5nIFBvdGVudGlhbCBFbnRyeSBQb2ludHMgZm9yIE1lbW9yeSBSZWNsYW1hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byB0cmlnZ2VyIG1lbW9yeSByZWNsYWltIGluIHRoaXMgc3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIHNlZW1zIGxpa2UgYSBzb2xpZCBub24tc3RhdGljIGVudHJ5IHBvaW50LiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwbGFjZSwgYW5kIGl0IHdpbGwgYmUgYWNjZXNzaWJsZSB0byB3aGF0ZXZlciBpcyBjYWxsaW5nIHRoZSBmdW5jdGlvbi4KCk5vdywgbGV0JiMzOTtzIHNlZSwgSSBhbHNvIHNlZSB0aGF0IGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBpcyBub24tc3RhdGljIGFzIHdlbGwuIEdvb2QgdG8ga25vdy4gSXQgZXhwYW5kcyB0aGUgcG9zc2libGUgZW50cnkgcG9pbnRzIGZvciBtZS4KCkhtbSwgaW50ZXJlc3RpbmcuIFRoZW4sIGBfX25vZGVfcmVjbGFpbWAgaXMgc3RhdGljLCB3aGljaCBtZWFucyBpdCBoYXMgbGltaXRlZCBzY29wZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIG1pZ2h0IG1lYW4gaXQmIzM5O3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiBCdXQsIHRoZSBmdW5jdGlvbiBgbm9kZV9yZWNsYWltYCBpdHNlbGYgaXMgbm9uLXN0YXRpYywgd2hpY2ggbWVhbnMgaXQgd2lsbCBiZSBleHBvc2VkIGZvciBleHRlcm5hbCB1c2UuIEkgdGhpbmsgdGhhdCBpcyBhbiBpbXBvcnRhbnQgcG9pbnQgdG8gbm90ZS4KClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIHNlZSB3aGF0IGl0JiMzOTtzIHJlYWxseSBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX2ZyZWVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz02NDQxPXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjQ3MS0gKi9cbm1tL3Ztc2Nhbi5jOjY0NzI6c3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcbm1tL3Ztc2Nhbi5jLTY0NzMtXHRcdFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmM9NjYxND1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcbi0tXG5tbS92bXNjYW4uYy02NjkzLVxubW0vdm1zY2FuLmM6NjY5NDp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbm1tL3Ztc2Nhbi5jLTY2OTUtXHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vdm1zY2FuLmMtNjcyOC1cbm1tL3Ztc2Nhbi5jOjY3Mjk6XHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNjczMC1cbi0tXG5tbS92bXNjYW4uYz02NzgwPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjgxMS1cbm1tL3Ztc2Nhbi5jOjY4MTI6XHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNjgxMy1cbi0tXG5tbS92bXNjYW4uYz03NTc4PXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuLS1cbm1tL3Ztc2Nhbi5jLTc1OTctXG5tbS92bXNjYW4uYzo3NTk4Olx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTc1OTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IHB1enpsZS4KCioqRGlnZ2luZyBpbnRvIE1lbW9yeSBSZWNsYW1hdGlvbiBNZWNoYW5pc21zKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUga2VybmVsIGFjdHVhbGx5IGZyZWVzIHVwIG1lbW9yeS4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGEgZmV3IGtleSBmdW5jdGlvbnM6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIHRoZSBtb3JlIGdlbmVyYWwgYHNocmlua19hbGxfbWVtb3J5YC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBtYWluIHBsYXllcnMgaW4gdGhlIHJlY2xhbWF0aW9uIGdhbWUuIEJ1dCB0aGVuIEkgaGF2ZSB0byB0aGluayBhYm91dCB0aGUgbW9yZSBwcm9hY3RpdmUgZWxlbWVudCwgdGhlIGJhY2tncm91bmQgcmVjbGFpbSBhY3Rpdml0eS4gSSYjMzk7bSByZWNhbGxpbmcgdGhhdCBgYmFsYW5jZV9wZ2RhdGAgcGxheXMgYSBwYXJ0LCBhbmQgdGhhdCYjMzk7cyB0cmlnZ2VyZWQgYnkgYGtzd2FwZGAuIEFscmlnaHQsIHRoYXQmIzM5O3MgbXkgbmV4dCBwb2ludCBvZiBmb2N1cy4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gaG93IGBrc3dhcGRgIHdvcmtzIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3N3YXBkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUyNCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vdm1zY2FuLmMtNS0gKiAgU3dhcCByZW9yZ2FuaXNlZCAyOS4xMi45NSwgU3RlcGhlbiBUd2VlZGllLlxubW0vdm1zY2FuLmM6NjogKiAga3N3YXBkIGFkZGVkOiA3LjEuOTYgIHNjdFxubW0vdm1zY2FuLmM6NzogKiAgUmVtb3ZlZCBrc3dhcGRfY3RsIGxpbWl0cywgYW5kIHN3YXAgb3V0IGFzIG1hbnkgcGFnZXMgYXMgbmVlZGVkXG5tbS92bXNjYW4uYy04LSAqICB0byBicmluZyB0aGUgc3lzdGVtIGJhY2sgdG8gZnJlZXBhZ2VzLmhpZ2g6IDIuNC45NywgUmlrIHZhbiBSaWVsLlxubW0vdm1zY2FuLmM6OTogKiAgWm9uZSBhd2FyZSBrc3dhcGQgc3RhcnRlZCAwMi8wMCwgS2Fub2ogU2FyY2FyIChrYW5vakBzZ2kuY29tKS5cbm1tL3Ztc2Nhbi5jLTEwLSAqICBNdWx0aXF1ZXVlIFZNIHN0YXJ0ZWQgNS44LjAwLCBSaWsgdmFuIFJpZWwuXG4tLVxubW0vdm1zY2FuLmM9NDQ3PXN0YXRpYyBpbnQgcmVjbGFpbWVyX29mZnNldChzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00NTItXG5tbS92bXNjYW4uYzo0NTM6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTQ1NC1cdFx0cmV0dXJuIDA7XG4tLVxubW0vdm1zY2FuLmM9NDgzPXN0YXRpYyBib29sIHNraXBfdGhyb3R0bGVfbm9wcm9ncmVzcyhwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTQ4OC1cdC8qXG5tbS92bXNjYW4uYzo0ODk6XHQgKiBJZiBrc3dhcGQgaXMgZGlzYWJsZWQsIHJlc2NoZWR1bGUgaWYgbmVjZXNzYXJ5IGJ1dCBkbyBub3Rcbm1tL3Ztc2Nhbi5jLTQ5MC1cdCAqIHRocm90dGxlIGFzIHRoZSBzeXN0ZW0gaXMgbGlrZWx5IG5lYXIgT09NLlxubW0vdm1zY2FuLmMtNDkxLVx0ICovXG5tbS92bXNjYW4uYzo0OTI6XHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxubW0vdm1zY2FuLmMtNDkzLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS92bXNjYW4uYz01MTE9dm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbilcbi0tXG5tbS92bXNjYW4uYy01MTctXHQvKlxubW0vdm1zY2FuLmM6NTE4Olx0ICogRG8gbm90IHRocm90dGxlIHVzZXIgd29ya2Vycywga3RocmVhZHMgb3RoZXIgdGhhbiBrc3dhcGQgb3Jcbm1tL3Ztc2Nhbi5jLTUxOS1cdCAqIHdvcmtxdWV1ZXMuIFRoZXkgbWF5IGJlIHJlcXVpcmVkIGZvciByZWNsYWltIHRvIG1ha2Vcbi0tXG5tbS92bXNjYW4uYy01MjEtXHQgKi9cbm1tL3Ztc2Nhbi5jOjUyMjpcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jLTUyMy1cdCAgICBjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiAoUEZfVVNFUl9XT1JLRVJ8UEZfS1RIUkVBRCkpIHtcbi0tXG5tbS92bXNjYW4uYz05NjU9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZGVtb3RlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqc3JjLFxuLS1cbm1tL3Ztc2Nhbi5jLTk3NC1cdCAqIG1ha2Ugc3VyZSB3ZSBhbGxvY2F0ZSBmcm9tIHRoZSB0YXJnZXQgbm9kZSBmaXJzdCBhbHNvIHRyeWluZyB0b1xubW0vdm1zY2FuLmM6OTc1Olx0ICogZGVtb3RlIG9yIHJlY2xhaW0gcGFnZXMgZnJvbSB0aGUgdGFyZ2V0IG5vZGUgdmlhIGtzd2FwZCBpZiB3ZSBhcmVcbm1tL3Ztc2Nhbi5jLTk3Ni1cdCAqIGxvdyBvbiBmcmVlIG1lbW9yeSBvbiB0YXJnZXQgbm9kZS4gSWYgd2UgZG9uJiMzOTt0IGRvIHRoaXMgYW5kIGlmXG4tLVxubW0vdm1zY2FuLmM9MTA1OD1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMTEyMS1cdFx0ICogVGhlIG51bWJlciBvZiBkaXJ0eSBwYWdlcyBkZXRlcm1pbmVzIGlmIGEgbm9kZSBpcyBtYXJrZWRcbm1tL3Ztc2Nhbi5jOjExMjI6XHRcdCAqIHJlY2xhaW1fY29uZ2VzdGVkLiBrc3dhcGQgd2lsbCBzdGFsbCBhbmQgc3RhcnQgd3JpdGluZ1xubW0vdm1zY2FuLmMtMTEyMy1cdFx0ICogZm9saW9zIGlmIHRoZSB0YWlsIG9mIHRoZSBMUlUgaXMgYWxsIGRpcnR5IHVucXVldWVkIGZvbGlvcy5cbi0tXG5tbS92bXNjYW4uYy0xMTkwLVx0XHRcdC8qIENhc2UgMSBhYm92ZSAqL1xubW0vdm1zY2FuLmM6MTE5MTpcdFx0XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jLTExOTItXHRcdFx0ICAgIGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykgXHUwMDI2XHUwMDI2XG4tLVxubW0vdm1zY2FuLmM9MTU5NT11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vdm1zY2FuLmMtMTYyMC1cdCAqIFdlIHNob3VsZCBiZSBzYWZlIGhlcmUgc2luY2Ugd2UgYXJlIG9ubHkgZGVhbGluZyB3aXRoIGZpbGUgcGFnZXMgYW5kXG5tbS92bXNjYW4uYzoxNjIxOlx0ICogd2UgYXJlIG5vdCBrc3dhcGQgYW5kIHRoZXJlZm9yZSBjYW5ub3Qgd3JpdGUgZGlydHkgZmlsZSBwYWdlcy4gQnV0XG5tbS92bXNjYW4uYy0xNjIyLVx0ICogY2FsbCBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpIGFueXdheSwganVzdCBpbiBjYXNlIHRoZXNlIGNvbmRpdGlvbnNcbi0tXG5tbS92bXNjYW4uYz0xODM0PXN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLFxuLS1cbm1tL3Ztc2Nhbi5jLTE4MzktXG5tbS92bXNjYW4uYzoxODQwOlx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy0xODQxLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9Mzc5OD1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcbi0tXG5tbS92bXNjYW4uYy0zODAxLVxubW0vdm1zY2FuLmM6MzgwMjpcdGlmIChwZ2RhdCBcdTAwMjZcdTAwMjYgY3VycmVudF9pc19rc3dhcGQoKSkge1xubW0vdm1zY2FuLmMtMzgwMy1cdFx0Vk1fV0FSTl9PTl9PTkNFKHdhbGspO1xuLS1cbm1tL3Ztc2Nhbi5jLTM4MDYtXHR9IGVsc2UgaWYgKCF3YWxrIFx1MDAyNlx1MDAyNiBmb3JjZV9hbGxvYykge1xubW0vdm1zY2FuLmM6MzgwNzpcdFx0Vk1fV0FSTl9PTl9PTkNFKGN1cnJlbnRfaXNfa3N3YXBkKCkpO1xubW0vdm1zY2FuLmMtMzgwOC1cbi0tXG5tbS92bXNjYW4uYz0zODE4PXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcbi0tXG5tbS92bXNjYW4uYy0zODI2LVxubW0vdm1zY2FuLmM6MzgyNzpcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTM4MjgtXHRcdGtmcmVlKHdhbGspO1xuLS1cbm1tL3Ztc2Nhbi5jPTQxNDA9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MTQ1LVxubW0vdm1zY2FuLmM6NDE0NjpcdFZNX1dBUk5fT05fT05DRSghY3VycmVudF9pc19rc3dhcGQoKSk7XG5tbS92bXNjYW4uYy00MTQ3LVxuLS1cbm1tL3Ztc2Nhbi5jPTQ5MzE9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00OTQyLVx0LyogY2hlY2sgdGhlIG9yZGVyIHRvIGV4Y2x1ZGUgY29tcGFjdGlvbi1pbmR1Y2VkIHJlY2xhaW0gKi9cbm1tL3Ztc2Nhbi5jOjQ5NDM6XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXHUwMDNlb3JkZXIpXG5tbS92bXNjYW4uYy00OTQ0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmMtNDk1Ni1cbm1tL3Ztc2Nhbi5jOjQ5NTc6XHQvKiBrc3dhcGQgc2hvdWxkIGFib3J0IGlmIGFsbCBlbGlnaWJsZSB6b25lcyBhcmUgc2FmZSAqL1xubW0vdm1zY2FuLmMtNDk1OC1cdHJldHVybiB0cnVlO1xuLS1cbm1tL3Ztc2Nhbi5jPTUxNDM9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTY1LVxubW0vdm1zY2FuLmM6NTE2NjpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtNTE2Ny1cdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkID0gMDtcbi0tXG5tbS92bXNjYW4uYy01MTczLVxubW0vdm1zY2FuLmM6NTE3NDpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxubW0vdm1zY2FuLmMtNTE3NS1cdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG4tLVxubW0vdm1zY2FuLmMtNTE4MS1cdGlmIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNlIHJlY2xhaW1lZClcbm1tL3Ztc2Nhbi5jOjUxODI6XHRcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVx1MDAzZW9yZGVyLCBzYy1cdTAwM2VyZWNsYWltX2lkeCk7XG5tbS92bXNjYW4uYy01MTgzLX1cbi0tXG5tbS92bXNjYW4uYz01ODgzPXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTEyLVx0ICogREVGX1BSSU9SSVRZIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGZhY3Qgd2UgYXJlIGRpcmVjdFxubW0vdm1zY2FuLmM6NTkxMzpcdCAqIHJlY2xhaW1pbmcgaW1wbGllcyB0aGF0IGtzd2FwZCBpcyBub3Qga2VlcGluZyB1cCBhbmQgaXQgaXMgYmVzdCB0b1xubW0vdm1zY2FuLmMtNTkxNC1cdCAqIGRvIGEgYmF0Y2ggb2Ygd29yayBhdCBvbmNlLiBGb3IgbWVtY2cgcmVjbGFpbSBvbmUgY2hlY2sgaXMgbWFkZSB0b1xuLS1cbm1tL3Ztc2Nhbi5jLTU5MTctXHQgKi9cbm1tL3Ztc2Nhbi5jOjU5MTg6XHRwcm9wb3J0aW9uYWxfcmVjbGFpbSA9ICghY2dyb3VwX3JlY2xhaW0oc2MpIFx1MDAyNlx1MDAyNiAhY3VycmVudF9pc19rc3dhcGQoKSBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jLTU5MTktXHRcdFx0XHRzYy1cdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpO1xuLS1cbm1tL3Ztc2Nhbi5jLTU5NTMtXHRcdC8qXG5tbS92bXNjYW4uYzo1OTU0Olx0XHQgKiBGb3Iga3N3YXBkIGFuZCBtZW1jZywgcmVjbGFpbSBhdCBsZWFzdCB0aGUgbnVtYmVyIG9mIHBhZ2VzXG5tbS92bXNjYW4uYy01OTU1LVx0XHQgKiByZXF1ZXN0ZWQuIEVuc3VyZSB0aGF0IHRoZSBhbm9uIGFuZCBmaWxlIExSVXMgYXJlIHNjYW5uZWRcbi0tXG5tbS92bXNjYW4uYz02MDg1PXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDk5LVx0ICpcbm1tL3Ztc2Nhbi5jOjYxMDA6XHQgKiBGb3Iga3N3YXBkLCByZWxpYWJsZSBmb3J3YXJkIHByb2dyZXNzIGlzIG1vcmUgaW1wb3J0YW50XG5tbS92bXNjYW4uYy02MTAxLVx0ICogdGhhbiBhIHF1aWNrIHJldHVybiB0byBpZGxlLiBBbHdheXMgZG8gZnVsbCB3YWxrcy5cbm1tL3Ztc2Nhbi5jLTYxMDItXHQgKi9cbm1tL3Ztc2Nhbi5jOjYxMDM6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSB8fCBzYy1cdTAwM2VtZW1jZ19mdWxsX3dhbGspXG5tbS92bXNjYW4uYy02MTA0LVx0XHRwYXJ0aWFsID0gTlVMTDtcbi0tXG5tbS92bXNjYW4uYz02MTY0PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYyMDItXG5tbS92bXNjYW4uYzo2MjAzOlx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpIHtcbm1tL3Ztc2Nhbi5jLTYyMDQtXHRcdC8qXG4tLVxubW0vdm1zY2FuLmMtNjIxNS1cdFx0ICpcbm1tL3Ztc2Nhbi5jOjYyMTY6XHRcdCAqIE9uY2UgYSBub2RlIGlzIGZsYWdnZWQgUEdEQVRfV1JJVEVCQUNLLCBrc3dhcGQgd2lsbFxubW0vdm1zY2FuLmMtNjIxNy1cdFx0ICogY291bnQgdGhlIG51bWJlciBvZiBwYWdlcyB1bmRlciBwYWdlcyBmbGFnZ2VkIGZvclxuLS1cbm1tL3Ztc2Nhbi5jLTYyMjQtXHRcdC8qXG5tbS92bXNjYW4uYzo2MjI1Olx0XHQgKiBJZiBrc3dhcGQgc2NhbnMgcGFnZXMgbWFya2VkIGZvciBpbW1lZGlhdGVcbm1tL3Ztc2Nhbi5jLTYyMjYtXHRcdCAqIHJlY2xhaW0gYW5kIHVuZGVyIHdyaXRlYmFjayAobnJfaW1tZWRpYXRlKSwgaXRcbi0tXG5tbS92bXNjYW4uYy02MjQ1LVxubW0vdm1zY2FuLmM6NjI0NjpcdFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy02MjQ3LVx0XHRcdHNldF9iaXQoTFJVVkVDX05PREVfQ09OR0VTVEVELCBcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWZsYWdzKTtcbi0tXG5tbS92bXNjYW4uYy02MjUxLVx0ICogU3RhbGwgZGlyZWN0IHJlY2xhaW0gZm9yIElPIGNvbXBsZXRpb25zIGlmIHRoZSBscnV2ZWMgaXNcbm1tL3Ztc2Nhbi5jOjYyNTI6XHQgKiBub2RlIGlzIGNvbmdlc3RlZC4gQWxsb3cga3N3YXBkIHRvIGNvbnRpbnVlIHVudGlsIGl0XG5tbS92bXNjYW4uYy02MjUzLVx0ICogc3RhcnRzIGVuY291bnRlcmluZyB1bnF1ZXVlZCBkaXJ0eSBwYWdlcyBvciBjeWNsaW5nIHRocm91Z2hcbi0tXG5tbS92bXNjYW4uYy02MjU1LVx0ICovXG5tbS92bXNjYW4uYzo2MjU2Olx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNiBjdXJyZW50X21heV90aHJvdHRsZSgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtNjI1Ny1cdCAgICAhc2MtXHUwMDNlaGliZXJuYXRpb25fbW9kZSBcdTAwMjZcdTAwMjZcbi0tXG5tbS92bXNjYW4uYy02MjY4LVx0ICogc2xlZXAuIE9uIHJlY2xhaW0gcHJvZ3Jlc3MsIHJlc2V0IHRoZSBmYWlsdXJlIGNvdW50ZXIuIEFcbm1tL3Ztc2Nhbi5jOjYyNjk6XHQgKiBzdWNjZXNzZnVsIGRpcmVjdCByZWNsYWltIHJ1biB3aWxsIHJldml2ZSBhIGRvcm1hbnQga3N3YXBkLlxubW0vdm1zY2FuLmMtNjI3MC1cdCAqL1xubW0vdm1zY2FuLmMtNjI3MS1cdGlmIChyZWNsYWltYWJsZSlcbm1tL3Ztc2Nhbi5jOjYyNzI6XHRcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVx1MDAzZW9yZGVyLCBzYy1cdTAwM2VyZWNsYWltX2lkeCk7XG5tbS92bXNjYW4uYy02MjczLVx0ZWxzZSBpZiAoc2MtXHUwMDNlY2FjaGVfdHJpbV9tb2RlKVxuLS1cbm1tL3Ztc2Nhbi5jPTYzMTE9c3RhdGljIHZvaWQgY29uc2lkZXJfcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MzI3LVx0Lypcbm1tL3Ztc2Nhbi5jOjYzMjg6XHQgKiBEbyBub3QgdGhyb3R0bGUga3N3YXBkIG9yIGNncm91cCByZWNsYWltIG9uIE5PUFJPR1JFU1MgYXMgaXQgd2lsbFxubW0vdm1zY2FuLmMtNjMyOS1cdCAqIHRocm90dGxlIG9uIFZNU0NBTl9USFJPVFRMRV9XUklURUJBQ0sgaWYgdGhlcmUgYXJlIHRvbyBtYW55IHBhZ2VzXG4tLVxubW0vdm1zY2FuLmMtNjMzMi1cdCAqL1xubW0vdm1zY2FuLmM6NjMzMzpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIHx8IGNncm91cF9yZWNsYWltKHNjKSlcbm1tL3Ztc2Nhbi5jLTYzMzQtXHRcdHJldHVybjtcbi0tXG5tbS92bXNjYW4uYz02NTY5PXN0YXRpYyBib29sIGFsbG93X2RpcmVjdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjU3Ni1cbm1tL3Ztc2Nhbi5jOjY1Nzc6XHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxubW0vdm1zY2FuLmMtNjU3OC1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vdm1zY2FuLmMtNjU5My1cbm1tL3Ztc2Nhbi5jOjY1OTQ6XHQvKiBrc3dhcGQgbXVzdCBiZSBhd2FrZSBpZiBwcm9jZXNzZXMgYXJlIGJlaW5nIHRocm90dGxlZCAqL1xubW0vdm1zY2FuLmM6NjU5NTpcdGlmICghd21hcmtfb2sgXHUwMDI2XHUwMDI2IHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQpKSB7XG5tbS92bXNjYW4uYzo2NTk2Olx0XHRpZiAoUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgpIFx1MDAzZSBaT05FX05PUk1BTClcbm1tL3Ztc2Nhbi5jOjY1OTc6XHRcdFx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBaT05FX05PUk1BTCk7XG5tbS92bXNjYW4uYy02NTk4LVxubW0vdm1zY2FuLmM6NjU5OTpcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0KTtcbm1tL3Ztc2Nhbi5jLTY2MDAtXHR9XG4tLVxubW0vdm1zY2FuLmMtNjYwNy0gKiBhbmQgdGhlIFBGTUVNQUxMT0MgcmVzZXJ2ZSBmb3IgdGhlIHByZWZlcnJlZCBub2RlIGlzIGdldHRpbmcgZGFuZ2Vyb3VzbHlcbm1tL3Ztc2Nhbi5jOjY2MDg6ICogZGVwbGV0ZWQuIGtzd2FwZCB3aWxsIGNvbnRpbnVlIHRvIG1ha2UgcHJvZ3Jlc3MgYW5kIHdha2UgdGhlIHByb2Nlc3Nlc1xubW0vdm1zY2FuLmMtNjYwOS0gKiB3aGVuIHRoZSBsb3cgd2F0ZXJtYXJrIGlzIHJlYWNoZWQuXG4tLVxubW0vdm1zY2FuLmM9NjYxND1zdGF0aWMgYm9vbCB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcbi0tXG5tbS92bXNjYW4uYy02NjQ0LVx0ICogVGhyb3R0bGluZyBpcyBiYXNlZCBvbiB0aGUgZmlyc3QgdXNhYmxlIG5vZGUgYW5kIHRocm90dGxlZCBwcm9jZXNzZXNcbm1tL3Ztc2Nhbi5jOjY2NDU6XHQgKiB3YWl0IG9uIGEgcXVldWUgdW50aWwga3N3YXBkIG1ha2VzIHByb2dyZXNzIGFuZCB3YWtlcyB0aGVtLiBUaGVyZVxubW0vdm1zY2FuLmMtNjY0Ni1cdCAqIGlzIGFuIGFmZmluaXR5IHRoZW4gYmV0d2VlbiBwcm9jZXNzZXMgd2FraW5nIHVwIGFuZCB3aGVyZSByZWNsYWltXG4tLVxubW0vdm1zY2FuLmMtNjY3NC1cdCAqIHRyYW5zYWN0aW9uIGluIHRoZSBjYXNlIG9mIGEgZmlsZXN5c3RlbSBsaWtlIGV4dFszfDRdLiBJbiB0aGlzIGNhc2UsXG5tbS92bXNjYW4uYzo2Njc1Olx0ICogaXQgaXMgbm90IHNhZmUgdG8gYmxvY2sgb24gcGZtZW1hbGxvY193YWl0IGFzIGtzd2FwZCBjb3VsZCBiZVxubW0vdm1zY2FuLmMtNjY3Ni1cdCAqIGJsb2NrZWQgd2FpdGluZyBvbiB0aGUgc2FtZSBsb2NrLiBJbnN0ZWFkLCB0aHJvdHRsZSBmb3IgdXAgdG8gYVxuLS1cbm1tL3Ztc2Nhbi5jLTY2ODItXHRlbHNlXG5tbS92bXNjYW4uYzo2NjgzOlx0XHQvKiBUaHJvdHRsZSB1bnRpbCBrc3dhcGQgd2FrZXMgdGhlIHByb2Nlc3MgKi9cbm1tL3Ztc2Nhbi5jLTY2ODQtXHRcdHdhaXRfZXZlbnRfa2lsbGFibGUoem9uZS1cdTAwM2V6b25lX3BnZGF0LVx1MDAzZXBmbWVtYWxsb2Nfd2FpdCxcbi0tXG5tbS92bXNjYW4uYz02ODIxPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjgzMC1cbm1tL3Ztc2Nhbi5jOjY4MzE6c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjgzMi17XG4tLVxubW0vdm1zY2FuLmM9Njg4OD1zdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNjkxMC1cdFx0ICpcbm1tL3Ztc2Nhbi5jOjY5MTE6XHRcdCAqIEhvd2V2ZXIsIGtzd2FwZCB1c3VhbGx5IGNhbm5vdCBhY2NvbXBsaXNoIHRoaXMgb25cbm1tL3Ztc2Nhbi5jLTY5MTItXHRcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0JiMzOTtzXG5tbS92bXNjYW4uYzo2OTEzOlx0XHQgKiByZWNsYWltZWQgYSBjb21wYWN0aW9uIGdhcCwgYW5kIGtzd2FwZF9zaHJpbmtfbm9kZVxubW0vdm1zY2FuLmMtNjkxNC1cdFx0ICogaGFzIGRyb3BwZWQgb3JkZXIsIHNpbXBseSBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaFxuLS1cbm1tL3Ztc2Nhbi5jLTY5NDUtXHQgKiBuZWVkIGJhbGFuY2luZyBieSBkZWZpbml0aW9uLiBUaGlzIGNhbiBoYXBwZW4gaWYgYSB6b25lLXJlc3RyaWN0ZWRcbm1tL3Ztc2Nhbi5jOjY5NDY6XHQgKiBhbGxvY2F0aW9uIHRyaWVzIHRvIHdha2UgYSByZW1vdGUga3N3YXBkLlxubW0vdm1zY2FuLmMtNjk0Ny1cdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jPTY5NTU9c3RhdGljIHZvaWQgY2xlYXJfcGdkYXRfY29uZ2VzdGVkKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjk2NC0vKlxubW0vdm1zY2FuLmM6Njk2NTogKiBQcmVwYXJlIGtzd2FwZCBmb3Igc2xlZXBpbmcuIFRoaXMgdmVyaWZpZXMgdGhhdCB0aGVyZSBhcmUgbm8gcHJvY2Vzc2VzXG5tbS92bXNjYW4uYy02OTY2LSAqIHdhaXRpbmcgaW4gdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oKSBhbmQgdGhhdCB3YXRlcm1hcmtzIGhhdmUgYmVlbiBtZXQuXG5tbS92bXNjYW4uYy02OTY3LSAqXG5tbS92bXNjYW4uYzo2OTY4OiAqIFJldHVybnMgdHJ1ZSBpZiBrc3dhcGQgaXMgcmVhZHkgdG8gc2xlZXBcbm1tL3Ztc2Nhbi5jLTY5NjktICovXG5tbS92bXNjYW4uYzo2OTcwOnN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbm1tL3Ztc2Nhbi5jLTY5NzEtXHRcdFx0XHRpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTY5NzUtXHQgKiBzb29uIGFzIGFsbG93X2RpcmVjdF9yZWNsYWltKCkgaXMgdHJ1ZS4gQnV0IHRoZXJlIGlzIGEgcG90ZW50aWFsXG5tbS92bXNjYW4uYzo2OTc2Olx0ICogcmFjZSBiZXR3ZWVuIHdoZW4ga3N3YXBkIGNoZWNrcyB0aGUgd2F0ZXJtYXJrcyBhbmQgYSBwcm9jZXNzIGdldHNcbm1tL3Ztc2Nhbi5jLTY5NzctXHQgKiB0aHJvdHRsZWQuIFRoZXJlIGlzIGFsc28gYSBwb3RlbnRpYWwgcmFjZSBpZiBwcm9jZXNzZXMgZ2V0XG5tbS92bXNjYW4uYzo2OTc4Olx0ICogdGhyb3R0bGVkLCBrc3dhcGQgd2FrZXMsIGEgbGFyZ2UgcHJvY2VzcyBleGl0cyB0aGVyZWJ5IGJhbGFuY2luZyB0aGVcbm1tL3Ztc2Nhbi5jOjY5Nzk6XHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcbm1tL3Ztc2Nhbi5jOjY5ODA6XHQgKiB0aGUgd2FrZSB1cCBjaGVja3MuIElmIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgbm8gcHJvY2VzcyBzaG91bGRcbm1tL3Ztc2Nhbi5jLTY5ODEtXHQgKiBiZSBzbGVlcGluZyBvbiBwZm1lbWFsbG9jX3dhaXQsIHNvIHdha2UgdGhlbSBub3cgaWYgbmVjZXNzYXJ5LiBJZlxubW0vdm1zY2FuLmM6Njk4MjpcdCAqIHRoZSB3YWtlIHVwIGlzIHByZW1hdHVyZSwgcHJvY2Vzc2VzIHdpbGwgd2FrZSBrc3dhcGQgYW5kIGdldFxubW0vdm1zY2FuLmMtNjk4My1cdCAqIHRocm90dGxlZCBhZ2Fpbi4gVGhlIGRpZmZlcmVuY2UgZnJvbSB3YWtlIHVwcyBpbiBiYWxhbmNlX3BnZGF0KCkgaXNcbi0tXG5tbS92bXNjYW4uYy02OTg5LVx0LyogSG9wZWxlc3Mgbm9kZSwgbGVhdmUgaXQgdG8gZGlyZWN0IHJlY2xhaW0gKi9cbm1tL3Ztc2Nhbi5jOjY5OTA6XHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxubW0vdm1zY2FuLmMtNjk5MS1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vdm1zY2FuLmMtNzAwMS0vKlxubW0vdm1zY2FuLmM6NzAwMjogKiBrc3dhcGQgc2hyaW5rcyBhIG5vZGUgb2YgcGFnZXMgdGhhdCBhcmUgYXQgb3IgYmVsb3cgdGhlIGhpZ2hlc3QgdXNhYmxlXG5tbS92bXNjYW4uYy03MDAzLSAqIHpvbmUgdGhhdCBpcyBjdXJyZW50bHkgdW5iYWxhbmNlZC5cbm1tL3Ztc2Nhbi5jLTcwMDQtICpcbm1tL3Ztc2Nhbi5jOjcwMDU6ICogUmV0dXJucyB0cnVlIGlmIGtzd2FwZCBzY2FubmVkIGF0IGxlYXN0IHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHBhZ2VzIHRvXG5tbS92bXNjYW4uYy03MDA2LSAqIHJlY2xhaW0gb3IgaWYgdGhlIGxhY2sgb2YgcHJvZ3Jlc3Mgd2FzIGR1ZSB0byBwYWdlcyB1bmRlciB3cml0ZWJhY2suXG4tLVxubW0vdm1zY2FuLmMtNzAwOC0gKi9cbm1tL3Ztc2Nhbi5jOjcwMDk6c3RhdGljIGJvb2wga3N3YXBkX3Nocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsXG5tbS92bXNjYW4uYy03MDEwLVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz03MDY0PWNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzA2OS0vKlxubW0vdm1zY2FuLmM6NzA3MDogKiBGb3Iga3N3YXBkLCBiYWxhbmNlX3BnZGF0KCkgd2lsbCByZWNsYWltIHBhZ2VzIGFjcm9zcyBhIG5vZGUgZnJvbSB6b25lc1xubW0vdm1zY2FuLmMtNzA3MS0gKiB0aGF0IGFyZSBlbGlnaWJsZSBmb3IgdXNlIGJ5IHRoZSBjYWxsZXIgdW50aWwgYXQgbGVhc3Qgb25lIHpvbmUgaXNcbi0tXG5tbS92bXNjYW4uYy03MDczLSAqXG5tbS92bXNjYW4uYzo3MDc0OiAqIFJldHVybnMgdGhlIG9yZGVyIGtzd2FwZCBmaW5pc2hlZCByZWNsYWltaW5nIGF0LlxubW0vdm1zY2FuLmMtNzA3NS0gKlxubW0vdm1zY2FuLmM6NzA3NjogKiBrc3dhcGQgc2NhbnMgdGhlIHpvbmVzIGluIHRoZSBoaWdobWVtLVx1MDAzZW5vcm1hbC1cdTAwM2VkbWEgZGlyZWN0aW9uLiAgSXQgc2tpcHNcbm1tL3Ztc2Nhbi5jLTcwNzctICogem9uZXMgd2hpY2ggaGF2ZSBmcmVlX3BhZ2VzIFx1MDAzZSBoaWdoX3dtYXJrX3BhZ2VzKHpvbmUpLCBidXQgb25jZSBhIHpvbmUgaXNcbi0tXG5tbS92bXNjYW4uYz03MDgyPXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzEwOC1cdCAqIHBsYWNlIHNvIHRoYXQgcGFyYWxsZWwgYWxsb2NhdGlvbnMgdGhhdCBhcmUgbmVhciB0aGUgd2F0ZXJtYXJrIHdpbGxcbm1tL3Ztc2Nhbi5jOjcxMDk6XHQgKiBzdGFsbCBvciBkaXJlY3QgcmVjbGFpbSB1bnRpbCBrc3dhcGQgaXMgZmluaXNoZWQuXG5tbS92bXNjYW4uYy03MTEwLVx0ICovXG4tLVxubW0vdm1zY2FuLmMtNzEzNy1cdFx0ICogZ28gYWhlYWQgaWYgYWxsIGVsaWdpYmxlIHpvbmVzIGZvciB0aGUgb3JpZ2luYWwgYWxsb2NhdGlvblxubW0vdm1zY2FuLmM6NzEzODpcdFx0ICogcmVxdWVzdCBhcmUgYmFsYW5jZWQgdG8gYXZvaWQgZXhjZXNzaXZlIHJlY2xhaW0gZnJvbSBrc3dhcGQuXG5tbS92bXNjYW4uYy03MTM5LVx0XHQgKi9cbi0tXG5tbS92bXNjYW4uYy03MTU1LVx0XHQgKiBvbiB0aGUgZ3JvdW5kcyB0aGF0IHRoZSBub3JtYWwgcmVjbGFpbSBzaG91bGQgYmUgZW5vdWdoIHRvXG5tbS92bXNjYW4uYzo3MTU2Olx0XHQgKiByZS1ldmFsdWF0ZSBpZiBib29zdGluZyBpcyByZXF1aXJlZCB3aGVuIGtzd2FwZCBuZXh0IHdha2VzLlxubW0vdm1zY2FuLmMtNzE1Ny1cdFx0ICovXG4tLVxubW0vdm1zY2FuLmMtNzE4OS1cdFx0ICovXG5tbS92bXNjYW4uYzo3MTkwOlx0XHRrc3dhcGRfYWdlX25vZGUocGdkYXQsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTcxOTEtXG4tLVxubW0vdm1zY2FuLmMtNzIwMy1cdFx0ICovXG5tbS92bXNjYW4uYzo3MjA0Olx0XHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcdTAwMjZzYykpXG5tbS92bXNjYW4uYy03MjA1LVx0XHRcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmMtNzIxNS1cbm1tL3Ztc2Nhbi5jOjcyMTY6XHRcdC8qIENoZWNrIGlmIGtzd2FwZCBzaG91bGQgYmUgc3VzcGVuZGluZyAqL1xubW0vdm1zY2FuLmMtNzIxNy1cdFx0X19mc19yZWNsYWltX3JlbGVhc2UoX1RISVNfSVBfKTtcbi0tXG5tbS92bXNjYW4uYy03MjU0LVx0ICogd2F0ZXJtYXJrX2hpZ2ggYXQgdGhpcyBwb2ludC4gV2UgbmVlZCB0byBhdm9pZCBpbmNyZWFzaW5nIHRoZVxubW0vdm1zY2FuLmM6NzI1NTpcdCAqIGZhaWx1cmUgY291bnQgdG8gcHJldmVudCB0aGUga3N3YXBkIHRocmVhZCBmcm9tIHN0b3BwaW5nLlxubW0vdm1zY2FuLmMtNzI1Ni1cdCAqL1xubW0vdm1zY2FuLmMtNzI1Ny1cdGlmICghc2MubnJfcmVjbGFpbWVkIFx1MDAyNlx1MDAyNiAhYm9vc3RlZCkge1xubW0vdm1zY2FuLmM6NzI1ODpcdFx0aW50IGZhaWxfY250ID0gYXRvbWljX2luY19yZXR1cm4oXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX2ZhaWx1cmVzKTtcbm1tL3Ztc2Nhbi5jOjcyNTk6XHRcdC8qIGtzd2FwZCBjb250ZXh0LCBsb3cgb3ZlcmhlYWQgdG8gdHJhY2UgZXZlcnkgZmFpbHVyZSAqL1xubW0vdm1zY2FuLmM6NzI2MDpcdFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9yZWNsYWltX2ZhaWwocGdkYXQtXHUwMDNlbm9kZV9pZCwgZmFpbF9jbnQpO1xubW0vdm1zY2FuLmMtNzI2MS1cdH1cbi0tXG5tbS92bXNjYW4uYy03Mjk2LVx0Lypcbm1tL3Ztc2Nhbi5jOjcyOTc6XHQgKiBSZXR1cm4gdGhlIG9yZGVyIGtzd2FwZCBzdG9wcGVkIHJlY2xhaW1pbmcgYXQgYXNcbm1tL3Ztc2Nhbi5jOjcyOTg6XHQgKiBwcmVwYXJlX2tzd2FwZF9zbGVlcCgpIHRha2VzIGl0IGludG8gYWNjb3VudC4gSWYgYW5vdGhlciBjYWxsZXJcbm1tL3Ztc2Nhbi5jOjcyOTk6XHQgKiBlbnRlcmVkIHRoZSBhbGxvY2F0b3Igc2xvdyBwYXRoIHdoaWxlIGtzd2FwZCB3YXMgYXdha2UsIG9yZGVyIHdpbGxcbm1tL3Ztc2Nhbi5jLTczMDAtXHQgKiByZW1haW4gYXQgdGhlIGhpZ2hlciBsZXZlbC5cbi0tXG5tbS92bXNjYW4uYy03MzA1LS8qXG5tbS92bXNjYW4uYzo3MzA2OiAqIFRoZSBwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4IGlzIHVzZWQgdG8gcGFzcyB0aGUgaGlnaGVzdCB6b25lIGluZGV4IHRvXG5tbS92bXNjYW4uYzo3MzA3OiAqIGJlIHJlY2xhaW1lZCBieSBrc3dhcGQgZnJvbSB0aGUgd2FrZXIuIElmIHRoZSB2YWx1ZSBpcyBNQVhfTlJfWk9ORVMgd2hpY2ggaXNcbm1tL3Ztc2Nhbi5jOjczMDg6ICogbm90IGEgdmFsaWQgaW5kZXggdGhlbiBlaXRoZXIga3N3YXBkIHJ1bnMgZm9yIGZpcnN0IHRpbWUgb3Iga3N3YXBkIGNvdWxkbiYjMzk7dFxubW0vdm1zY2FuLmMtNzMwOS0gKiBzbGVlcCBhZnRlciBwcmV2aW91cyByZWNsYWltIGF0dGVtcHQgKG5vZGUgaXMgc3RpbGwgdW5iYWxhbmNlZCkuIEluIHRoYXRcbm1tL3Ztc2Nhbi5jOjczMTA6ICogY2FzZSByZXR1cm4gdGhlIHpvbmUgaW5kZXggb2YgdGhlIHByZXZpb3VzIGtzd2FwZCByZWNsYWltIGN5Y2xlLlxubW0vdm1zY2FuLmMtNzMxMS0gKi9cbm1tL3Ztc2Nhbi5jOjczMTI6c3RhdGljIGVudW0gem9uZV90eXBlIGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdfZGF0YV90ICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTczMTMtXHRcdFx0XHRcdCAgIGVudW0gem9uZV90eXBlIHByZXZfaGlnaGVzdF96b25laWR4KVxubW0vdm1zY2FuLmMtNzMxNC17XG5tbS92bXNjYW4uYzo3MzE1Olx0ZW51bSB6b25lX3R5cGUgY3Vycl9pZHggPSBSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCk7XG5tbS92bXNjYW4uYy03MzE2LVxuLS1cbm1tL3Ztc2Nhbi5jLTczMTktXG5tbS92bXNjYW4uYzo3MzIwOnN0YXRpYyB2b2lkIGtzd2FwZF90cnlfdG9fc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IGFsbG9jX29yZGVyLCBpbnQgcmVjbGFpbV9vcmRlcixcbm1tL3Ztc2Nhbi5jLTczMjEtXHRcdFx0XHR1bnNpZ25lZCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTczMjgtXG5tbS92bXNjYW4uYzo3MzI5Olx0cHJlcGFyZV90b193YWl0KFx1MDAyNnBnZGF0LVx1MDAzZWtzd2FwZF93YWl0LCBcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xubW0vdm1zY2FuLmMtNzMzMC1cbi0tXG5tbS92bXNjYW4uYy03MzM3LVx0ICovXG5tbS92bXNjYW4uYzo3MzM4Olx0aWYgKHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnZGF0LCByZWNsYWltX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKSB7XG5tbS92bXNjYW4uYy03MzM5LVx0XHQvKlxuLS1cbm1tL3Ztc2Nhbi5jLTczNDEtXHRcdCAqIGlzb2xhdGUgcGFnZXMgZnJvbSBhbmQgc2tpcHMgdGhlbSBpbiB0aGUgZnV0dXJlIHNjYW5uaW5nLlxubW0vdm1zY2FuLmM6NzM0MjpcdFx0ICogV2hlbiBrc3dhcGQgaXMgZ29pbmcgdG8gc2xlZXAsIGl0IGlzIHJlYXNvbmFibGUgdG8gYXNzdW1lXG5tbS92bXNjYW4uYy03MzQzLVx0XHQgKiB0aGF0IHBhZ2VzIGFuZCBjb21wYWN0aW9uIG1heSBzdWNjZWVkIHNvIHJlc2V0IHRoZSBjYWNoZS5cbi0tXG5tbS92bXNjYW4uYy03MzU1LVx0XHQvKlxubW0vdm1zY2FuLmM6NzM1NjpcdFx0ICogSWYgd29rZW4gcHJlbWF0dXJlbHkgdGhlbiByZXNldCBrc3dhcGRfaGlnaGVzdF96b25laWR4IGFuZFxubW0vdm1zY2FuLmMtNzM1Ny1cdFx0ICogb3JkZXIuIFRoZSB2YWx1ZXMgd2lsbCBlaXRoZXIgYmUgZnJvbSBhIHdha2V1cCByZXF1ZXN0IG9yXG4tLVxubW0vdm1zY2FuLmMtNzM2MC1cdFx0aWYgKHJlbWFpbmluZykge1xubW0vdm1zY2FuLmM6NzM2MTpcdFx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsXG5tbS92bXNjYW4uYzo3MzYyOlx0XHRcdFx0XHRrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxubW0vdm1zY2FuLmMtNzM2My1cdFx0XHRcdFx0XHRcdGhpZ2hlc3Rfem9uZWlkeCkpO1xubW0vdm1zY2FuLmMtNzM2NC1cbm1tL3Ztc2Nhbi5jOjczNjU6XHRcdFx0aWYgKFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIpIFx1MDAzYyByZWNsYWltX29yZGVyKVxubW0vdm1zY2FuLmM6NzM2NjpcdFx0XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyLCByZWNsYWltX29yZGVyKTtcbm1tL3Ztc2Nhbi5jLTczNjctXHRcdH1cbm1tL3Ztc2Nhbi5jLTczNjgtXG5tbS92bXNjYW4uYzo3MzY5Olx0XHRmaW5pc2hfd2FpdChcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCwgXHUwMDI2d2FpdCk7XG5tbS92bXNjYW4uYzo3MzcwOlx0XHRwcmVwYXJlX3RvX3dhaXQoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQsIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG5tbS92bXNjYW4uYy03MzcxLVx0fVxuLS1cbm1tL3Ztc2Nhbi5jLTczNzctXHRpZiAoIXJlbWFpbmluZyBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jOjczNzg6XHQgICAgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdkYXQsIHJlY2xhaW1fb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpIHtcbm1tL3Ztc2Nhbi5jOjczNzk6XHRcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfc2xlZXAocGdkYXQtXHUwMDNlbm9kZV9pZCk7XG5tbS92bXNjYW4uYy03MzgwLVxuLS1cbm1tL3Ztc2Nhbi5jLTczODUtXHRcdCAqIHdhdGVybWFya3MgYmVpbmcgYnJlYWNoZWQgd2hpbGUgdW5kZXIgcHJlc3N1cmUsIHdlIHJlZHVjZSB0aGVcbm1tL3Ztc2Nhbi5jOjczODY6XHRcdCAqIHBlci1jcHUgdm1zdGF0IHRocmVzaG9sZCB3aGlsZSBrc3dhcGQgaXMgYXdha2UgYW5kIHJlc3RvcmVcbm1tL3Ztc2Nhbi5jLTczODctXHRcdCAqIHRoZW0gYmVmb3JlIGdvaW5nIGJhY2sgdG8gc2xlZXAuXG4tLVxubW0vdm1zY2FuLmMtNzQwMC1cdH1cbm1tL3Ztc2Nhbi5jOjc0MDE6XHRmaW5pc2hfd2FpdChcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfd2FpdCwgXHUwMDI2d2FpdCk7XG5tbS92bXNjYW4uYy03NDAyLX1cbi0tXG5tbS92bXNjYW4uYy03NDE2LSAqL1xubW0vdm1zY2FuLmM6NzQxNzpzdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxubW0vdm1zY2FuLmMtNzQxOC17XG4tLVxubW0vdm1zY2FuLmMtNzQyNi1cdCAqIGFuZCB0aGF0IGlmIHdlIG5lZWQgbW9yZSBtZW1vcnkgd2Ugc2hvdWxkIGdldCBhY2Nlc3MgdG8gaXRcbm1tL3Ztc2Nhbi5jOjc0Mjc6XHQgKiByZWdhcmRsZXNzIChzZWUgXCYjMzQ7X19hbGxvY19wYWdlcygpXCYjMzQ7KS4gXCYjMzQ7a3N3YXBkXCYjMzQ7IHNob3VsZFxubW0vdm1zY2FuLmMtNzQyOC1cdCAqIG5ldmVyIGdldCBjYXVnaHQgaW4gdGhlIG5vcm1hbCBwYWdlIGZyZWVpbmcgbG9naWMuXG4tLVxubW0vdm1zY2FuLmMtNzQzOC1cbm1tL3Ztc2Nhbi5jOjc0Mzk6XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XG5tbS92bXNjYW4uYzo3NDQwOlx0V1JJVEVfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBNQVhfTlJfWk9ORVMpO1xubW0vdm1zY2FuLmMtNzQ0MS1cdGF0b21pY19zZXQoXHUwMDI2cGdkYXQtXHUwMDNlbnJfd3JpdGViYWNrX3Rocm90dGxlZCwgMCk7XG4tLVxubW0vdm1zY2FuLmMtNzQ0NC1cbm1tL3Ztc2Nhbi5jOjc0NDU6XHRcdGFsbG9jX29yZGVyID0gcmVjbGFpbV9vcmRlciA9IFJFQURfT05DRShwZ2RhdC1cdTAwM2Vrc3dhcGRfb3JkZXIpO1xubW0vdm1zY2FuLmM6NzQ0NjpcdFx0aGlnaGVzdF96b25laWR4ID0ga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc0NDctXHRcdFx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpO1xubW0vdm1zY2FuLmMtNzQ0OC1cbm1tL3Ztc2Nhbi5jOjc0NDk6a3N3YXBkX3RyeV9zbGVlcDpcbm1tL3Ztc2Nhbi5jOjc0NTA6XHRcdGtzd2FwZF90cnlfdG9fc2xlZXAocGdkYXQsIGFsbG9jX29yZGVyLCByZWNsYWltX29yZGVyLFxubW0vdm1zY2FuLmMtNzQ1MS1cdFx0XHRcdFx0aGlnaGVzdF96b25laWR4KTtcbi0tXG5tbS92bXNjYW4uYy03NDUzLVx0XHQvKiBSZWFkIHRoZSBuZXcgb3JkZXIgYW5kIGhpZ2hlc3Rfem9uZWlkeCAqL1xubW0vdm1zY2FuLmM6NzQ1NDpcdFx0YWxsb2Nfb3JkZXIgPSBSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyKTtcbm1tL3Ztc2Nhbi5jOjc0NTU6XHRcdGhpZ2hlc3Rfem9uZWlkeCA9IGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdkYXQsXG5tbS92bXNjYW4uYy03NDU2LVx0XHRcdFx0XHRcdFx0aGlnaGVzdF96b25laWR4KTtcbm1tL3Ztc2Nhbi5jOjc0NTc6XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyLCAwKTtcbm1tL3Ztc2Nhbi5jOjc0NTg6XHRcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCwgTUFYX05SX1pPTkVTKTtcbm1tL3Ztc2Nhbi5jLTc0NTktXG4tLVxubW0vdm1zY2FuLmMtNzQ3MS1cdFx0ICogUmVjbGFpbSBiZWdpbnMgYXQgdGhlIHJlcXVlc3RlZCBvcmRlciBidXQgaWYgYSBoaWdoLW9yZGVyXG5tbS92bXNjYW4uYzo3NDcyOlx0XHQgKiByZWNsYWltIGZhaWxzIHRoZW4ga3N3YXBkIGZhbGxzIGJhY2sgdG8gcmVjbGFpbWluZyBmb3Jcbm1tL3Ztc2Nhbi5jOjc0NzM6XHRcdCAqIG9yZGVyLTAuIElmIHRoYXQgaGFwcGVucywga3N3YXBkIHdpbGwgY29uc2lkZXIgc2xlZXBpbmdcbm1tL3Ztc2Nhbi5jLTc0NzQtXHRcdCAqIGZvciB0aGUgb3JkZXIgaXQgZmluaXNoZWQgcmVjbGFpbWluZyBhdCAocmVjbGFpbV9vcmRlcilcbi0tXG5tbS92bXNjYW4uYy03NDc3LVx0XHQgKi9cbm1tL3Ztc2Nhbi5jOjc0Nzg6XHRcdHRyYWNlX21tX3Ztc2Nhbl9rc3dhcGRfd2FrZShwZ2RhdC1cdTAwM2Vub2RlX2lkLCBoaWdoZXN0X3pvbmVpZHgsXG5tbS92bXNjYW4uYy03NDc5LVx0XHRcdFx0XHRcdGFsbG9jX29yZGVyKTtcbi0tXG5tbS92bXNjYW4uYy03NDgyLVx0XHRpZiAocmVjbGFpbV9vcmRlciBcdTAwM2MgYWxsb2Nfb3JkZXIpXG5tbS92bXNjYW4uYzo3NDgzOlx0XHRcdGdvdG8ga3N3YXBkX3RyeV9zbGVlcDtcbm1tL3Ztc2Nhbi5jLTc0ODQtXHR9XG4tLVxubW0vdm1zY2FuLmMtNzQ5Mi0gKiBBIHpvbmUgaXMgbG93IG9uIGZyZWUgbWVtb3J5IG9yIHRvbyBmcmFnbWVudGVkIGZvciBoaWdoLW9yZGVyIG1lbW9yeS4gIElmXG5tbS92bXNjYW4uYzo3NDkzOiAqIGtzd2FwZCBzaG91bGQgcmVjbGFpbSAoZGlyZWN0IHJlY2xhaW0gaXMgZGVmZXJyZWQpLCB3YWtlIGl0IHVwIGZvciB0aGUgem9uZSYjMzk7c1xubW0vdm1zY2FuLmM6NzQ5NDogKiBwZ2RhdC4gIEl0IHdpbGwgd2FrZSB1cCBrY29tcGFjdGQgYWZ0ZXIgcmVjbGFpbWluZyBtZW1vcnkuICBJZiBrc3dhcGQgcmVjbGFpbVxubW0vdm1zY2FuLmMtNzQ5NS0gKiBoYXMgZmFpbGVkIG9yIGlzIG5vdCBuZWVkZWQsIHN0aWxsIHdha2UgdXAga2NvbXBhY3RkIGlmIG9ubHkgY29tcGFjdGlvbiBpc1xuLS1cbm1tL3Ztc2Nhbi5jLTc0OTctICovXG5tbS92bXNjYW4uYzo3NDk4OnZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy03NDk5LVx0XHQgICBlbnVtIHpvbmVfdHlwZSBoaWdoZXN0X3pvbmVpZHgpXG4tLVxubW0vdm1zY2FuLmMtNzUxMC1cdHBnZGF0ID0gem9uZS1cdTAwM2V6b25lX3BnZGF0O1xubW0vdm1zY2FuLmM6NzUxMTpcdGN1cnJfaWR4ID0gUkVBRF9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgpO1xubW0vdm1zY2FuLmMtNzUxMi1cbm1tL3Ztc2Nhbi5jLTc1MTMtXHRpZiAoY3Vycl9pZHggPT0gTUFYX05SX1pPTkVTIHx8IGN1cnJfaWR4IFx1MDAzYyBoaWdoZXN0X3pvbmVpZHgpXG5tbS92bXNjYW4uYzo3NTE0Olx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIGhpZ2hlc3Rfem9uZWlkeCk7XG5tbS92bXNjYW4uYy03NTE1LVxubW0vdm1zY2FuLmM6NzUxNjpcdGlmIChSRUFEX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyKSBcdTAwM2Mgb3JkZXIpXG5tbS92bXNjYW4uYzo3NTE3Olx0XHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlciwgb3JkZXIpO1xubW0vdm1zY2FuLmMtNzUxOC1cbm1tL3Ztc2Nhbi5jOjc1MTk6XHRpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQpKVxubW0vdm1zY2FuLmMtNzUyMC1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jLTc1MjItXHQvKiBIb3BlbGVzcyBub2RlLCBsZWF2ZSBpdCB0byBkaXJlY3QgcmVjbGFpbSBpZiBwb3NzaWJsZSAqL1xubW0vdm1zY2FuLmM6NzUyMzpcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkgfHxcbm1tL3Ztc2Nhbi5jLTc1MjQtXHQgICAgKHBnZGF0X2JhbGFuY2VkKHBnZGF0LCBvcmRlciwgaGlnaGVzdF96b25laWR4KSBcdTAwMjZcdTAwMjZcbi0tXG5tbS92bXNjYW4uYy03NTM3LVxubW0vdm1zY2FuLmM6NzUzODpcdHRyYWNlX21tX3Ztc2Nhbl93YWtldXBfa3N3YXBkKHBnZGF0LVx1MDAzZW5vZGVfaWQsIGhpZ2hlc3Rfem9uZWlkeCwgb3JkZXIsXG5tbS92bXNjYW4uYy03NTM5LVx0XHRcdFx0ICAgICAgZ2ZwX2ZsYWdzKTtcbm1tL3Ztc2Nhbi5jOjc1NDA6XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2cGdkYXQtXHUwMDNla3N3YXBkX3dhaXQpO1xubW0vdm1zY2FuLmMtNzU0MS19XG5tbS92bXNjYW4uYy03NTQyLVxubW0vdm1zY2FuLmM6NzU0Mzp2b2lkIGtzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIGtzd2FwZF9jbGVhcl9ob3BlbGVzc19yZWFzb24gcmVhc29uKVxubW0vdm1zY2FuLmMtNzU0NC17XG5tbS92bXNjYW4uYy03NTQ1LVx0LyogT25seSB0cmFjZSBhY3R1YWwgcmVzZXRzLCBub3QgcmVkdW5kYW50IHplcm8tdG8temVybyAqL1xubW0vdm1zY2FuLmM6NzU0NjpcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfZmFpbHVyZXMsIDApKVxubW0vdm1zY2FuLmM6NzU0NzpcdFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ2RhdC1cdTAwM2Vub2RlX2lkLCByZWFzb24pO1xubW0vdm1zY2FuLmMtNzU0OC19XG4tLVxubW0vdm1zY2FuLmMtNzU1MC0vKlxubW0vdm1zY2FuLmM6NzU1MTogKiBSZXNldCBrc3dhcGRfZmFpbHVyZXMgb25seSB3aGVuIHRoZSBub2RlIGlzIGJhbGFuY2VkLiBXaXRob3V0IHRoaXNcbm1tL3Ztc2Nhbi5jLTc1NTItICogY2hlY2ssIHN1Y2Nlc3NmdWwgZGlyZWN0IHJlY2xhaW0gKGUuZy4sIGZyb20gY2dyb3VwIG1lbW9yeS5oaWdoXG5tbS92bXNjYW4uYzo3NTUzOiAqIHRocm90dGxpbmcpIGNhbiBrZWVwIHJlc2V0dGluZyBrc3dhcGRfZmFpbHVyZXMgZXZlbiB3aGVuIHRoZSBub2RlXG5tbS92bXNjYW4uYzo3NTU0OiAqIGNhbm5vdCBiZSBiYWxhbmNlZCwgY2F1c2luZyBrc3dhcGQgdG8gcnVuIGVuZGxlc3NseS5cbm1tL3Ztc2Nhbi5jLTc1NTUtICovXG5tbS92bXNjYW4uYzo3NTU2OnZvaWQga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzU1Ny1cdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTc1NTktXHRpZiAocGdkYXRfYmFsYW5jZWQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKVxubW0vdm1zY2FuLmM6NzU2MDpcdFx0a3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBjdXJyZW50X2lzX2tzd2FwZCgpID9cbm1tL3Ztc2Nhbi5jLTc1NjEtXHRcdFx0S1NXQVBEX0NMRUFSX0hPUEVMRVNTX0tTV0FQRCA6IEtTV0FQRF9DTEVBUl9IT1BFTEVTU19ESVJFQ1QpO1xuLS1cbm1tL3Ztc2Nhbi5jLTc1NjMtXG5tbS92bXNjYW4uYzo3NTY0OmJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcbm1tL3Ztc2Nhbi5jLTc1NjUte1xubW0vdm1zY2FuLmM6NzU2NjpcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZwZ2RhdC1cdTAwM2Vrc3dhcGRfZmFpbHVyZXMpIFx1MDAzZT0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbm1tL3Ztc2Nhbi5jLTc1NjctfVxuLS1cbm1tL3Ztc2Nhbi5jPTc1Nzg9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG4tLVxubW0vdm1zY2FuLmMtNzYwOC0vKlxubW0vdm1zY2FuLmM6NzYwOTogKiBUaGlzIGtzd2FwZCBzdGFydCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBpbml0IGFuZCBub2RlLWhvdC1hZGQuXG5tbS92bXNjYW4uYy03NjEwLSAqL1xubW0vdm1zY2FuLmM6NzYxMTp2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpXG5tbS92bXNjYW4uYy03NjEyLXtcbi0tXG5tbS92bXNjYW4uYy03NjE0LVxubW0vdm1zY2FuLmM6NzYxNTpcdHBnZGF0X2tzd2FwZF9sb2NrKHBnZGF0KTtcbm1tL3Ztc2Nhbi5jOjc2MTY6XHRpZiAoIXBnZGF0LVx1MDAzZWtzd2FwZCkge1xubW0vdm1zY2FuLmM6NzYxNzpcdFx0cGdkYXQtXHUwMDNla3N3YXBkID0ga3RocmVhZF9jcmVhdGVfb25fbm9kZShrc3dhcGQsIHBnZGF0LCBuaWQsIFwmIzM0O2tzd2FwZCVkXCYjMzQ7LCBuaWQpO1xubW0vdm1zY2FuLmM6NzYxODpcdFx0aWYgKElTX0VSUihwZ2RhdC1cdTAwM2Vrc3dhcGQpKSB7XG5tbS92bXNjYW4uYy03NjE5LVx0XHRcdC8qIGZhaWx1cmUgYXQgYm9vdCBpcyBmYXRhbCAqL1xubW0vdm1zY2FuLmM6NzYyMDpcdFx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHN0YXJ0IGtzd2FwZCBvbiBub2RlICVkLCByZXQ9JXBlXFxuXCYjMzQ7LFxubW0vdm1zY2FuLmM6NzYyMTpcdFx0XHRcdCAgIG5pZCwgcGdkYXQtXHUwMDNla3N3YXBkKTtcbm1tL3Ztc2Nhbi5jLTc2MjItXHRcdFx0QlVHX09OKHN5c3RlbV9zdGF0ZSBcdTAwM2MgU1lTVEVNX1JVTk5JTkcpO1xubW0vdm1zY2FuLmM6NzYyMzpcdFx0XHRwZ2RhdC1cdTAwM2Vrc3dhcGQgPSBOVUxMO1xubW0vdm1zY2FuLmMtNzYyNC1cdFx0fSBlbHNlIHtcbm1tL3Ztc2Nhbi5jOjc2MjU6XHRcdFx0d2FrZV91cF9wcm9jZXNzKHBnZGF0LVx1MDAzZWtzd2FwZCk7XG5tbS92bXNjYW4uYy03NjI2LVx0XHR9XG5tbS92bXNjYW4uYy03NjI3LVx0fVxubW0vdm1zY2FuLmM6NzYyODpcdHBnZGF0X2tzd2FwZF91bmxvY2socGdkYXQpO1xubW0vdm1zY2FuLmMtNzYyOS19XG4tLVxubW0vdm1zY2FuLmMtNzYzNC0gKi9cbm1tL3Ztc2Nhbi5jOjc2MzU6dm9pZCBfX21lbWluaXQga3N3YXBkX3N0b3AoaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTc2MzYte1xubW0vdm1zY2FuLmMtNzYzNy1cdHBnX2RhdGFfdCAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc5NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIE1lbW9yeSBNYW5hZ2VtZW50KioKClJpZ2h0LCBzbyBga3N3YXBkYCBpcyBydW5uaW5nIGFzIGEga2VybmVsIHRocmVhZCwgd2hpY2ggSSBhbHJlYWR5IGtub3cuIEJ1dCBsZXQmIzM5O3MgY2xhcmlmeSB0aGF0IGluIG15IG1pbmQuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHJlY2xhaW0gcHJvY2Vzcy4gV2hlcmUgY2FuIEkgc3RhcnQgdG8gc2VlIGhvdyBtZW1vcnkgaXMgZnJlZWQ/IEFoLCB5ZXMsIGB0cnlfdG9fZnJlZV9wYWdlc2AsIHRoYXQmIzM5O3MgYSBjbGFzc2ljIGVudHJ5IHBvaW50LiBBbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBpbXBvcnRhbnQgZm9yIGNncm91cCBtZW1vcnkgbWFuYWdlbWVudCwgb2YgY291cnNlLiBgc2hyaW5rX2FsbF9tZW1vcnlgIGlzIGFsc28gYSBicm9hZCBhcHByb2FjaC4gTm93LCB3aGVyZSB0byBnbyBkZWVwZXI/IEkmIzM5O2xsIGRyaWxsIGRvd24gb24gYG5vZGVfcmVjbGFpbWAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBwZXItbm9kZSByZWNsYWltIGFjdGl2aXRpZXMsIHdoaWNoIGlzIGtleS4gSSYjMzk7bGwgZ2V0IHN0YXJ0ZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vZGVfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTYxNjQ9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy02MTY1LXtcbm1tL3Ztc2Nhbi5jOjYxNjY6XHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQ7XG5tbS92bXNjYW4uYy02MTY3LVx0c3RydWN0IGxydXZlYyAqdGFyZ2V0X2xydXZlYztcbi0tXG5tbS92bXNjYW4uYy02MTkyLVxubW0vdm1zY2FuLmM6NjE5MzpcdG5yX25vZGVfcmVjbGFpbWVkID0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkIC0gbnJfcmVjbGFpbWVkO1xubW0vdm1zY2FuLmMtNjE5NC1cbi0tXG5tbS92bXNjYW4uYy02MTk3LVx0XHR2bXByZXNzdXJlKHNjLVx1MDAzZWdmcF9tYXNrLCBzYy1cdTAwM2VvcmRlciwgc2MtXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHRydWUsXG5tbS92bXNjYW4uYzo2MTk4Olx0XHRcdCAgIHNjLVx1MDAzZW5yX3NjYW5uZWQgLSBucl9zY2FubmVkLCBucl9ub2RlX3JlY2xhaW1lZCk7XG5tbS92bXNjYW4uYy02MTk5LVxubW0vdm1zY2FuLmM6NjIwMDpcdGlmIChucl9ub2RlX3JlY2xhaW1lZClcbm1tL3Ztc2Nhbi5jLTYyMDEtXHRcdHJlY2xhaW1hYmxlID0gdHJ1ZTtcbi0tXG5tbS92bXNjYW4uYy02MjYxLVxubW0vdm1zY2FuLmM6NjI2MjpcdGlmIChzaG91bGRfY29udGludWVfcmVjbGFpbShwZ2RhdCwgbnJfbm9kZV9yZWNsYWltZWQsIHNjKSlcbm1tL3Ztc2Nhbi5jLTYyNjMtXHRcdGdvdG8gYWdhaW47XG4tLVxubW0vdm1zY2FuLmM9NzY0OT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubW0vdm1zY2FuLmMtNzY2MS1cdFx0LnByb2NuYW1lXHQ9IFwmIzM0O3pvbmVfcmVjbGFpbV9tb2RlXCYjMzQ7LFxubW0vdm1zY2FuLmM6NzY2MjpcdFx0LmRhdGFcdFx0PSBcdTAwMjZub2RlX3JlY2xhaW1fbW9kZSxcbm1tL3Ztc2Nhbi5jOjc2NjM6XHRcdC5tYXhsZW5cdFx0PSBzaXplb2Yobm9kZV9yZWNsYWltX21vZGUpLFxubW0vdm1zY2FuLmMtNzY2NC1cdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuLS1cbm1tL3Ztc2Nhbi5jPTc2ODI9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXG4tLVxubW0vdm1zY2FuLmMtNzY4Ny0gKlxubW0vdm1zY2FuLmM6NzY4ODogKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xubW0vdm1zY2FuLmMtNzY4OS0gKiB0aGUgd2F0ZXJtYXJrcy5cbm1tL3Ztc2Nhbi5jLTc2OTAtICovXG5tbS92bXNjYW4uYzo3NjkxOmludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xubW0vdm1zY2FuLmMtNzY5Mi1cbi0tXG5tbS92bXNjYW4uYy03NzAwLS8qXG5tbS92bXNjYW4uYzo3NzAxOiAqIFBlcmNlbnRhZ2Ugb2YgcGFnZXMgaW4gYSB6b25lIHRoYXQgbXVzdCBiZSB1bm1hcHBlZCBmb3Igbm9kZV9yZWNsYWltIHRvXG5tbS92bXNjYW4uYy03NzAyLSAqIG9jY3VyLlxuLS1cbm1tL3Ztc2Nhbi5jPTc3Mjc9c3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03NzM3LVx0ICovXG5tbS92bXNjYW4uYzo3NzM4Olx0aWYgKG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiBSRUNMQUlNX1VOTUFQKVxubW0vdm1zY2FuLmMtNzczOS1cdFx0bnJfcGFnZWNhY2hlX3JlY2xhaW1hYmxlID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9GSUxFX1BBR0VTKTtcbi0tXG5tbS92bXNjYW4uYy03NzU4LSAqL1xubW0vdm1zY2FuLmM6Nzc1OTpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzayxcbm1tL3Ztc2Nhbi5jLTc3NjAtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYy03NzY2LVxubW0vdm1zY2FuLmM6Nzc2NzpcdHRyYWNlX21tX3Ztc2Nhbl9ub2RlX3JlY2xhaW1fYmVnaW4ocGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MtXHUwMDNlb3JkZXIsXG5tbS92bXNjYW4uYy03NzY4LVx0XHRcdFx0XHQgICBzYy1cdTAwM2VnZnBfbWFzayk7XG4tLVxubW0vdm1zY2FuLmMtNzc5Ni1cbm1tL3Ztc2Nhbi5jOjc3OTc6XHR0cmFjZV9tbV92bXNjYW5fbm9kZV9yZWNsYWltX2VuZChzYy1cdTAwM2Vucl9yZWNsYWltZWQsIE5VTEwpO1xubW0vdm1zY2FuLmMtNzc5OC1cbi0tXG5tbS92bXNjYW4uYy03ODAxLVxubW0vdm1zY2FuLmM6NzgwMjppbnQgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5tbS92bXNjYW4uYy03ODAzLXtcbi0tXG5tbS92bXNjYW4uYy03ODExLVx0XHQucHJpb3JpdHkgPSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFksXG5tbS92bXNjYW4uYzo3ODEyOlx0XHQubWF5X3dyaXRlcGFnZSA9ICEhKG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiBSRUNMQUlNX1dSSVRFKSxcbm1tL3Ztc2Nhbi5jOjc4MTM6XHRcdC5tYXlfdW5tYXAgPSAhIShub2RlX3JlY2xhaW1fbW9kZSBcdTAwMjYgUkVDTEFJTV9VTk1BUCksXG5tbS92bXNjYW4uYy03ODE0LVx0XHQubWF5X3N3YXAgPSAxLFxuLS1cbm1tL3Ztc2Nhbi5jLTc4NTAtXG5tbS92bXNjYW4uYzo3ODUxOlx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGdmcF9tYXNrLCBucl9wYWdlcywgXHUwMDI2c2MpIFx1MDAzZT0gbnJfcGFnZXM7XG5tbS92bXNjYW4uYy03ODUyLVx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpO1xuLS1cbm1tL3Ztc2Nhbi5jLTc4NjMtXG5tbS92bXNjYW4uYzo3ODY0OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLFxubW0vdm1zY2FuLmMtNzg2NS1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL3Ztc2Nhbi5jPTc4ODQ9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuLS1cbm1tL3Ztc2Nhbi5jLTc5NzItXG5tbS92bXNjYW4uYzo3OTczOlx0XHRcdHJlY2xhaW1lZCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBnZnBfbWFzayxcbm1tL3Ztc2Nhbi5jLTc5NzQtXHRcdFx0XHRcdFx0ICAgYmF0Y2hfc2l6ZSwgXHUwMDI2c2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU4MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgRW50cnkgUG9pbnRzIGZvciBSZXNvdXJjZSBSZWNsYW1hdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBzdGFydGluZyBwb2ludHMgZm9yIHRoaXMgcmVzb3VyY2UgcmVjbGFtYXRpb24gZWZmb3J0LiBgbm9kZV9yZWNsYWltYCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgbG9vazsgaXQmIzM5O3MgYSBjb21tb24gYXJlYSBmb3IgdGhpcyB0eXBlIG9mIG9wZXJhdGlvbiwgYW5kIGl0JiMzOTtzIHNvbWV0aGluZyBJJiMzOTttIHZlcnkgZmFtaWxpYXIgd2l0aC4gQnV0IGxldCYjMzk7cyBicm9hZGVuIHRoZSBzY29wZSBhIGJpdCwgYmVjYXVzZSBJIHdhbnQgdG8gYmUgY29tcHJlaGVuc2l2ZS4gTGV0IG1lIHNoaWZ0IG15IGZvY3VzLiBNeSBuZXh0IGNoZWNrIHdpbGwgYmUgb24gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBJdCYjMzk7cyBwb3NzaWJsZSB3ZSBtaWdodCBmaW5kIHNvbWUgaW50ZXJlc3RpbmcgYW5nbGVzIG9yIG92ZXJsYXBzIHRoZXJlLiBNeSBnb2FsIHJpZ2h0IG5vdyBpcyB0byBpZGVudGlmeSBhbGwgcHJvbWlzaW5nIGFyZWFzIHRvIGVuc3VyZSB3ZSYjMzk7cmUgdGFyZ2V0aW5nIHRoZSBtb3N0IGltcGFjdGZ1bCBhcmVhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc4Nzg9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc4ODMtXG5tbS92bXNjYW4uYzo3ODg0OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL3Ztc2Nhbi5jLTc4ODUtXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jPTgwMzQ9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxubW0vdm1zY2FuLmMtODAzOS1cbm1tL3Ztc2Nhbi5jOjgwNDA6XHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XG5tbS92bXNjYW4uYy04MDQxLVx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMDYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVjbGFpbSBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGZ1bmN0aW9uLCB3aGljaCBpcyB0cmlnZ2VyZWQgdmlhIGEgc3lzZnMgYXR0cmlidXRlIGluIGByZWNsYWltX3N0b3JlYCwgZml0cyBpbnRvIHRoZSBsYXJnZXIgbWVtb3J5IG1hbmFnZW1lbnQgcGljdHVyZS4gSSBrbm93IHRoYXQgYG1lbW9yeV9yZWNsYWltYCBpbiBgbW0vbWVtY29udHJvbC5jYCBhbHNvIGNhbGxzIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYC4gTXkgdGFyZ2V0IGFyZWFzLCB0aGUgc3BlY2lmaWMgc3ltYm9scyBJIG5lZWQgdG8gaG9uZSBpbiBvbiBmb3IgYW5hbHlzaXMsIGFyZTogYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgbm9kZV9yZWNsYWltYCwgYW5kLCBvZiBjb3Vyc2UsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLgoKV2FpdCwgdGhvdWdo4oCmIEkmIzM5O20gcmVhbGl6aW5nIGB0cnlfdG9fZnJlZV9wYWdlc2AgZ2V0cyBjYWxsZWQgYnkgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLiBUaGF0JiMzOTtzIGEgKnJlYWxseSogaG90IHBhdGgsIGVzcGVjaWFsbHkgd2hlbiB3ZSYjMzk7cmUgZmFjaW5nIG1lbW9yeSBwcmVzc3VyZS4gVGhhdCBtZWFucyBhbnkgZnV6emluZyB0aGVyZSB3aWxsIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsbHkgY2FsaWJyYXRlZCB0byBhdm9pZCBmbG9vZGluZyB0aGUgc3lzdGVtLiBCdXQsIEkgZG9uJiMzOTt0IHdhbnQgdG8gZ2V0IGxvc3QgaW4gdGhlIGZvcmVzdC4gTXkgcmVhbCBmb2N1cyBpcyBvbiB0aGUgbW9kaWZpZWQgbG9naWMuCgpTbywgaXMgdGhlcmUgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0aGF0IGluZmx1ZW5jZXMgdGhpcyB0aGF0IEkmIzM5O20gbWlzc2luZz8gTm8sIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxsIGNvcmUgTU0gbG9naWMuIE9rYXksIEnigJlsbCBuZWVkIHRvIGRvIG1vcmUgZGlnZ2luZyB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IHNldHRpbmcgcmVsYXRlZCB0byBtZW1vcnkgc2Nhbm5pbmcgYmVoYXZpb3IsIGxpa2UsIHBlcmhhcHMsIGBTV0FQX0NMVVNURVJfTUFYX1NLSVBQRURgIGluIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgaWYgdGhhdCBvciBzb21lIHNpbWlsYXIgdmFyaWFibGUgaXMgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcC5oPTIwMz1lbnVtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0yMjAtI2RlZmluZSBTV0FQX0NMVVNURVJfTUFYIDMyVUxcbmluY2x1ZGUvbGludXgvc3dhcC5oOjIyMTojZGVmaW5lIFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRCAoU1dBUF9DTFVTVEVSX01BWCBcdTAwM2NcdTAwM2MgMTApXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0yMjItI2RlZmluZSBDT01QQUNUX0NMVVNURVJfTUFYIFNXQVBfQ0xVU1RFUl9NQVhcbi0tXG5tbS92bXNjYW4uYz0xNjg0PXN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4tLVxubW0vdm1zY2FuLmMtMTcxNS1cdFx0XHRtYXhfbnJfc2tpcHBlZCYjNDM7JiM0Mzs7XG5tbS92bXNjYW4uYzoxNzE2Olx0XHRcdGlmIChtYXhfbnJfc2tpcHBlZCBcdTAwM2U9IFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRCkge1xubW0vdm1zY2FuLmMtMTcxNy1cdFx0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmZvbGlvc19za2lwcGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4MjgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGVzZSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBpc29sYXRlX2xydV9mb2xpb3NgIGFuZCBgc2hyaW5rX2xydXZlY2AuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCwgKmNvcmUqIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtIGluc2lkZSBhbmQgb3V0LiBJJiMzOTttIHRyeWluZyB0byBwaW5wb2ludCB0aGUgbW9zdCByZXByZXNlbnRhdGl2ZSBzeW1ib2xzIGZvciBteSBhbmFseXNpcyDigJMgdGhlIGtleSBmdW5jdGlvbnMgZHJpdmluZyB0aGVzZSBjaGFuZ2VzLgoKT3JpZ2luYWxseSwgSSBoYWQgYHRyeV90b19mcmVlX3BhZ2VzYCBpbiBtaW5kLCBhbmQgYWxzbyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGBub2RlX3JlY2xhaW1gLCBhbmQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBCdXQgd2FpdC4uLiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGluY3JlZGlibHkgZ2VuZXJpYyDigJMgYSBob3QgcGF0aCBjYWxsZWQgd2hlbmV2ZXIgbWVtb3J5IGlzIHRpZ2h0LiBJIG5lZWQgdG8gYXZvaWQgc2tld2luZyBteSBhbmFseXNpcyB3aXRoIHRob3NlIGJyb2FkIHN0cm9rZXMsIHJlbWVtYmVyPyBUaGUgZG9jdW1lbnRhdGlvbiBzdHJlc3NlZCB0aGF0LiBIbW0sICpwcm9hY3RpdmUqIHJlY2xhaW0uLi4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIG1pZ2h0IGJlIGEgYmV0dGVyIGZvY3VzLiBZZXMsIHRoYXQmIzM5O3MgYSBkZWRpY2F0ZWQgZW50cnkgcG9pbnQgZm9yIHByb2FjdGl2ZSByZWNsYW1hdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgdGhlIG1vc3QgdmFsdWFibGUuIEFuZCBvZiBjb3Vyc2UsIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBmb3Igc29mdCBsaW1pdCByZWNsYWltIC0gSSBzaG91bGQgYWxzbyBjaGVjayB0aGF0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGxvb2tzIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc2hyaW5rX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmg9MzY1PWV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTM2OS1cdFx0XHRcdFx0XHQgIGludCAqc3dhcHBpbmVzcyk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDozNzA6ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLFxuaW5jbHVkZS9saW51eC9zd2FwLmgtMzcxLVx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjcyPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTMxMS1cdFx0fVxubW0vbWVtY29udHJvbC12MS5jOjMxMjpcdFx0dG90YWwgJiM0Mzs9IG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUodmljdGltLCBnZnBfbWFzaywgZmFsc2UsXG5tbS9tZW1jb250cm9sLXYxLmMtMzEzLVx0XHRcdFx0XHRwZ2RhdCwgXHUwMDI2bnJfc2Nhbm5lZCk7XG4tLVxubW0vdm1zY2FuLmM9NjY5ND11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy02NzM5LS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cbm1tL3Ztc2Nhbi5jOjY3NDA6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTY3NDEtXHRcdFx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY4OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIG5vdGVzLCByZWZsZWN0aW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWw6CgoqKk1lbW9yeSBSZWNsYWltIEVudHJ5IFBvaW50czogQSBGb2N1c2VkIE92ZXJ2aWV3KioKCkFscmlnaHQsIHRoaW5raW5nIHRoaXMgdGhyb3VnaCwgSSYjMzk7bSBub3RpbmcgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzIGZvciBpbml0aWF0aW5nIG1lbW9yeSByZWNsYWltIHByb2Nlc3NlcywgdGhlIHBsYWNlcyB3ZSBjYW4gdHJpZ2dlciB0aGVzZSBvcGVyYXRpb25zLiBUaGUgZ29hbCBpcyBlZmZpY2llbmN5IGFuZCBwcmVkaWN0YWJpbGl0eS4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBwb2ludHM6CgoqICAgRmlyc3QsIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCwgd2hpY2ggaXMgaW5pdGlhdGVkIGR1cmluZyBzb2Z0IHJlY2xhaW0gdGhyb3VnaCBgbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW1gLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHdheSB0byBoYW5kbGUgbWVtb3J5IHByZXNzdXJlIHNwZWNpZmljYWxseSB3aXRoaW4gYSBjb250cm9sIGdyb3VwIGNvbnRleHQuIEkgbmVlZCB0byBrZWVwIHRoaXMgcmVsYXRpb25zaGlwIGluIG1pbmQgd2hlbiBkZWJ1Z2dpbmcgY2dyb3VwIG1lbW9yeSBpc3N1ZXMuCgoqICAgVGhlbiwgd2UgaGF2ZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIHdoaWNoIGlzIHRyaWdnZXJlZCB0aHJvdWdoIHN5c2ZzIGFuZCBjZ3JvdXBmcy4gVGhlc2UgcHJvdmlkZSBkaXJlY3QsIHVzZXItc3BhY2UgY29udHJvbGxlZCBvcHRpb25zIGZvciB0cmlnZ2VyaW5nIHJlY2xhaW0sIHdoaWNoIGlzIGV4Y2VsbGVudCBmb3Igc3lzdGVtIGFkbWluaXN0cmF0aW9uIGFuZCB0b29saW5nLiBUaGV5IGFyZSByZWxhdGl2ZWx5IG5vbi1ob3QtcGF0aCBlbnRyeSBwb2ludHMsIHdoaWNoIGlzIGltcG9ydGFudCBmb3Igc3lzdGVtIHN0YWJpbGl0eS4KCiogICBGaW5hbGx5LCB0aGVyZSYjMzk7cyBgc2hyaW5rX2FsbF9tZW1vcnlgLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBoaWJlcm5hdGlvbiBvcGVyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGluIHJlbGF0aW9uIHRvIHRoZSBvdGhlcnMsIGFzIGl0IGxpa2VseSBoYXMgYnJvYWRlciBpbXBsaWNhdGlvbnMgZm9yIG92ZXJhbGwgc3lzdGVtIG1lbW9yeSBzdGF0ZS4KCkkmIzM5O20gc3RydWN0dXJpbmcgbXkgdGhpbmtpbmcgYXJvdW5kIHRoZXNlIGVudHJ5IHBvaW50cyBiZWNhdXNlIHRoZXkgcmVwcmVzZW50IGRpc3RpbmN0IHRyaWdnZXJzIHRoYXQgaW5pdGlhdGUgbWVtb3J5IHJlY2xhaW0gYW5kIG15IG92ZXJhbGwgbWVudGFsIG1vZGVsIG9mIHRoZSBzeXN0ZW0mIzM5O3MgcmVjbGFpbSBwcm9jZXNzZXMgcmVsaWVzIG9uIHVuZGVyc3RhbmRpbmcgd2hlcmUgdGhlIHByb2Nlc3MgaXMgY2FsbGVkIGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcC5oPTM3MD1leHRlcm4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtMzczLVx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpO1xuaW5jbHVkZS9saW51eC9zd2FwLmg6Mzc0OmV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC9zd2FwLmgtMzc1LWV4dGVybiBpbnQgdm1fc3dhcHBpbmVzcztcbi0tXG5rZXJuZWwvcG93ZXIvc25hcHNob3QuYz0xODI0PWludCBoaWJlcm5hdGVfcHJlYWxsb2NhdGVfbWVtb3J5KHZvaWQpXG4tLVxua2VybmVsL3Bvd2VyL3NuYXBzaG90LmMtMTkxNy1cdCAqL1xua2VybmVsL3Bvd2VyL3NuYXBzaG90LmM6MTkxODpcdHNocmlua19hbGxfbWVtb3J5KHNhdmVhYmxlIC0gc2l6ZSk7XG5rZXJuZWwvcG93ZXIvc25hcHNob3QuYy0xOTE5LVxuLS1cbm1tL3Ztc2Nhbi5jPTc1NjQ9Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTc1NzctICovXG5tbS92bXNjYW4uYzo3NTc4OnVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxubW0vdm1zY2FuLmMtNzU3OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0Mzg4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBSZWNsYWltIFN0cmF0ZWdpZXMqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZGlmZmVyZW50IG1lY2hhbmlzbXMgd2UgaGF2ZSBmb3IgbWVtb3J5IHJlY2xhaW0uIEkgc2VlIHRoYXQgYHNocmlua19hbGxfbWVtb3J5YCBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byBoaWJlcm5hdGlvbiwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCB0aGF0JiMzOTtzIHRoZSBvbmUgd2UgdXNlIGZvciBzeXNmcyBhbmQgY2dyb3VwZnMgcmVjbGFpbSDigJMgdGhhdOKAmXMgY3JpdGljYWwgZm9yIGR5bmFtaWMgcmVzb3VyY2UgbWFuYWdlbWVudC4gVGhlbiB0aGVyZSYjMzk7cyBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIHdoaWNoIGhhbmRsZXMgcmVjbGFpbSB3aGVuIHNvZnQgbGltaXRzIGFyZSBoaXQgd2l0aGluIGEgbWVtY2csIGFub3RoZXIgdml0YWwgY29tcG9uZW50LiBGaW5hbGx5LCBgbm9kZV9yZWNsYWltYCBpcyBzcGVjaWZpY2FsbHkgZm9yIG5vZGUgcmVjbGFpbSBtb2RlLiBUaGVzZSBhbGwgc2VlbSBsaWtlIGdvb2QsIHdlbGwtZGVmaW5lZCBmb2N1cyBhcmVhcy4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGdvdmVybiB0aGVzZS4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0hJQkVSTkFUSU9OYCBhY3RpdmF0ZXMgYHNocmlua19hbGxfbWVtb3J5YCwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIGBDT05GSUdfTUVNQ0dgLCBuYXR1cmFsbHksIGVuYWJsZXMgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGFuZCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgc2luY2UgdGhleSYjMzk7cmUgZnVuZGFtZW50YWxseSB0aWVkIHRvIGNncm91cC1iYXNlZCBtZW1vcnkgbWFuYWdlbWVudC4gVGltZSB0byBkaWcgaW50byBgbW0vdm1zY2FuLmNgIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgd2l0aGluIHRoYXQgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc4Nzg9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc4ODMtXG5tbS92bXNjYW4uYzo3ODg0OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL3Ztc2Nhbi5jLTc4ODUtXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jPTgwMzQ9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxubW0vdm1zY2FuLmMtODAzOS1cbm1tL3Ztc2Nhbi5jOjgwNDA6XHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XG5tbS92bXNjYW4uYy04MDQxLVx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwNDIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipBbmFseXppbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCoqCgpPa2F5LCBzbyB0aGUgZ29hbCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiB3aGV0aGVyIHRoZSBmdW5jdGlvbiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgc3ViamVjdCB0byBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd3JhcHBlZCBpbnNpZGUgYW55IGAjaWZkZWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGJlaGF2aW9yIGFuZCBwb3J0YWJpbGl0eSBhY3Jvc3MgZGlmZmVyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb25zIG9yIHBsYXRmb3Jtcy4gSSYjMzk7bGwgbmVlZCB0byByYXBpZGx5IHNjYW4gdGhlIGNvZGUgZm9yIGFueSBzdWNoIGluc3RhbmNlcy4gSWRlbnRpZnlpbmcgdGhlIHN1cnJvdW5kaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBpZiBhbnkgZXhpc3QsIHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBpbmNsdWRlZCBpbiB0aGUgZmluYWwgYmluYXJ5LiBUaGlzIGluZm9ybWF0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IHdpdGhpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03ND1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbi0tXG5tbS92bXNjYW4uYy0xODQtXG5tbS92bXNjYW4uYzoxODU6I2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xubW0vdm1zY2FuLmMtMTg2LSNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZClcdFx0XHRcXFxuLS1cbm1tL3Ztc2Nhbi5jPTIwMj1pbnQgdm1fc3dhcHBpbmVzcyA9IDYwO1xubW0vdm1zY2FuLmMtMjAzLVxubW0vdm1zY2FuLmM6MjA0OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTIwNS1cbi0tXG5tbS92bXNjYW4uYz0yMzQ9c3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yMzctXHRcdHJldHVybiB0cnVlO1xubW0vdm1zY2FuLmM6MjM4OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vdm1zY2FuLmMtMjM5LVx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4tLVxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODMzLVxubW0vdm1zY2FuLmM6ODM0OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtODM1LS8qXG4tLVxubW0vdm1zY2FuLmM9MTA1OD1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMTI4OC1cdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XG5tbS92bXNjYW4uYzoxMjg5OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3Ztc2Nhbi5jLTEyOTAtXHRcdFx0XHRpZiAobnJfcGFnZXMgXHUwMDNlPSBIUEFHRV9QTURfTlIpIHtcbi0tXG5tbS92bXNjYW4uYz0yNjIwPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjYzMS1cbm1tL3Ztc2Nhbi5jOjI2MzI6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNjMzLVxubW0vdm1zY2FuLmM9MjYzND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI2MzU6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jLTI2MzYtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG4tLVxubW0vdm1zY2FuLmM9MjY4ND1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtMjY4Ny1cbm1tL3Ztc2Nhbi5jOjI2ODg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjY4OS1cdGlmIChtZW1jZykge1xuLS1cbm1tL3Ztc2Nhbi5jPTI4MTY9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXG4tLVxubW0vdm1zY2FuLmMtMjgzNS1cbm1tL3Ztc2Nhbi5jOjI4MzY6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxubW0vdm1zY2FuLmMtMjgzNy1cbm1tL3Ztc2Nhbi5jPTI4Mzg9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy0yODQ0LVxubW0vdm1zY2FuLmM6Mjg0NTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yODQ2LVx0aWYgKG1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jPTI4Nzg9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yODg0LVx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNm1tLVx1MDAzZWxydV9nZW4ubGlzdCkpO1xubW0vdm1zY2FuLmM6Mjg4NTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yODg2LVx0Vk1fV0FSTl9PTl9PTkNFKG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI5MDU9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTEzLVxubW0vdm1zY2FuLmM6MjkxNDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yOTE1LVx0bWVtY2cgPSBtbS1cdTAwM2VscnVfZ2VuLm1lbWNnO1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MzctXG5tbS92bXNjYW4uYzoyOTM4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5MzktXHRtZW1fY2dyb3VwX3B1dChtbS1cdTAwM2VscnVfZ2VuLm1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYy0yOTQzLVxubW0vdm1zY2FuLmM6Mjk0NDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yOTQ1LXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jPTQzMTM9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4tLVxubW0vdm1zY2FuLmMtNDM1OC1cbm1tL3Ztc2Nhbi5jOjQzNTk6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNDM2MC1cbi0tXG5tbS92bXNjYW4uYz01NTE5PXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vdm1zY2FuLmMtNTUzMi1cbm1tL3Ztc2Nhbi5jOjU1MzM6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNTUzNC1cdFx0aWYgKG1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jPTU3ODU9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01ODA0LVxubW0vdm1zY2FuLmM6NTgwNTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy01ODA2LVxuLS1cbm1tL3Ztc2Nhbi5jPTY2OTQ9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjczNi1cbm1tL3Ztc2Nhbi5jOjY3Mzc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNjczOC1cbi0tXG5tbS92bXNjYW4uYz03NTY0PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03NTY4LVxubW0vdm1zY2FuLmM6NzU2OTojaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OXG5tbS92bXNjYW4uYy03NTcwLS8qXG4tLVxubW0vdm1zY2FuLmM9NzY0OT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubW0vdm1zY2FuLmMtNzY1OC1cdH0sXG5tbS92bXNjYW4uYzo3NjU5OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vdm1zY2FuLmMtNzY2MC1cdHtcbi0tXG5tbS92bXNjYW4uYz03NjgyPW1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxubW0vdm1zY2FuLmMtNzY4My1cbm1tL3Ztc2Nhbi5jOjc2ODQ6I2lmZGVmIENPTkZJR19OVU1BXG5tbS92bXNjYW4uYy03Njg1LS8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MDM1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gdGhlIGV4cGVydCBhbmQgY29uc2lkZXJpbmcgbXkgYmFja2dyb3VuZC4KCioqTmF2aWdhdGluZyBOVU1BIGFuZCBQcm9hY3RpdmUgUmVjbGFpbWluZyoqCgpSaWdodCwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHNwZWNpZmljYWxseSB0aWVkIHRvIHRoZSBgQ09ORklHX05VTUFgIG9wdGlvbi4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgYW5kIGl0IGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2Ygd2hlcmUgSSBuZWVkIHRvIGxvb2sgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gTXkgaW50dWl0aW9uLCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlLCB0ZWxscyBtZSB0aGF0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWNsYWltLXJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdG8gYmUgZm91bmQgaW4gYG1tL3Ztc2Nhbi5jYC4gS25vd2luZyB0aGUgY29kZSBiYXNlLCBsaW5lIDc4ODQgaXMgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IHdpdGhpbiB0aGF0IGZpbGUsIGFzIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgcmVjbGFpbSByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4gU28gbGV0IG1lIHB1bGwgdGhhdCBmaWxlIHVwIGFuZCBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc4NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzg3MDpcdFxuNzg3MTpcdCNlbmRpZlxuNzg3MjpcdFxuNzg3MzpcdGVudW0ge1xuNzg3NDpcdFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUyA9IDAsXG43ODc1Olx0XHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCxcbjc4NzY6XHRcdE1FTU9SWV9SRUNMQUlNX05VTEwsXG43ODc3Olx0fTtcbjc4Nzg6XHRzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG43ODc5Olx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MsIFwmIzM0O3N3YXBwaW5lc3M9JWRcJiMzNDt9LFxuNzg4MDpcdFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXCYjMzQ7c3dhcHBpbmVzcz1tYXhcJiMzNDt9LFxuNzg4MTpcdFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXG43ODgyOlx0fTtcbjc4ODM6XHRcbjc4ODQ6XHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG43ODg1Olx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuNzg4NjpcdHtcbjc4ODc6XHRcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbjc4ODg6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcbjc4ODk6XHRcdGludCBzd2FwcGluZXNzID0gLTE7XG43ODkwOlx0XHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XG43ODkxOlx0XHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XG43ODkyOlx0XHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XG43ODkzOlx0XG43ODk0Olx0XHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFx1MDAyNlx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcdTAwMjZcdTAwMjYgcGdkYXQpKVxuNzg5NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjc4OTY6XHRcbjc4OTc6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG43ODk4Olx0XG43ODk5Olx0XHRvbGRfYnVmID0gYnVmO1xuNzkwMDpcdFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXHUwMDI2YnVmKSAvIFBBR0VfU0laRTtcbjc5MDE6XHRcdGlmIChidWYgPT0gb2xkX2J1Zilcbjc5MDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43OTAzOlx0XG43OTA0Olx0XHRidWYgPSBzdHJzdHJpcChidWYpO1xuNzkwNTpcdFxuNzkwNjpcdFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcdTAwMjZidWYsIFwmIzM0OyBcJiMzNDspKSAhPSBOVUxMKSB7XG43OTA3Olx0XHRcdGlmICghc3RybGVuKHN0YXJ0KSlcbjc5MDg6XHRcdFx0XHRjb250aW51ZTtcbjc5MDk6XHRcdFx0c3dpdGNoIChtYXRjaF90b2tlbihzdGFydCwgdG9rZW5zLCBhcmdzKSkge1xuNzkxMDpcdFx0XHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1M6XG43OTExOlx0XHRcdFx0aWYgKG1hdGNoX2ludChcdTAwMjZhcmdzWzBdLCBcdTAwMjZzd2FwcGluZXNzKSlcbjc5MTI6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzkxMzpcdFx0XHRcdGlmIChzd2FwcGluZXNzIFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxuNzkxNDpcdFx0XHRcdCAgICBzd2FwcGluZXNzIFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcbjc5MTU6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzkxNjpcdFx0XHRcdGJyZWFrO1xuNzkxNzpcdFx0XHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxuNzkxODpcdFx0XHRcdHN3YXBwaW5lc3MgPSBTV0FQUElORVNTX0FOT05fT05MWTtcbjc5MTk6XHRcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwNTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnMgaW4gdGhlIEtlcm5lbCoqCgpBbHJpZ2h0LCBJJiMzOTttIHRyYWNpbmcgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB3aGVyZSBjZXJ0YWluIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEluaXRpYWxseSwgSSB0aG91Z2h0IGEgcGFydGljdWxhciBmdW5jdGlvbiB3YXMgZGVwZW5kZW50IG9uIGBDT05GSUdfTlVNQWAsIGJ1dCB0aGF0IHdhcyBpbmNvcnJlY3Q7IGl0JiMzOTtzIGFjdHVhbGx5IHBsYWNlZCBhZnRlciBhbiBgI2VuZGlmYCBkaXJlY3RpdmUsIG1lYW5pbmcgaXQmIzM5O3Mgbm90IGNvbmRpdGlvbmFsIG9uIHRoYXQgc2V0dGluZy4KCldhaXQsIGxvb2tpbmcgbW9yZSBjbG9zZWx5LCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgY2xlYXJseSBjb250cm9sbGVkIGJ5IGBDT05GSUdfTUVNQ0dgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIG1lbW9yeSBjZ3JvdXAtcmVsYXRlZCBmdW5jdGlvbiwgc28gdGhlIGRlcGVuZGVuY3kgYWxpZ25zIHdpdGggaXRzIGZ1bmN0aW9uYWxpdHkuCgpOb3csIGBzaHJpbmtfYWxsX21lbW9yeWAgaXMgZGVwZW5kZW50IG9uIGBDT05GSUdfSElCRVJOQVRJT05gLCB3aGljaCBpcyBsb2dpY2FsLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIGludm9sdmVkIGluIHNhdmluZyB0aGUgZW50aXJlIHN5c3RlbSBzdGF0ZS4KCkFuZCBmaW5hbGx5LCBgbm9kZV9yZWNsYWltYCAqaXMqIHVuZGVyIGBDT05GSUdfTlVNQWAsIGFzIEkgZXhwZWN0ZWQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG5vZGVfcmVjbGFpbWAgc2luY2UgaXQmIzM5O3MgdGhlIG9uZSB0aGF0IEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzY4MDpcdH1cbjc2ODE6XHRcbjc2ODI6XHRtb2R1bGVfaW5pdChrc3dhcGRfaW5pdClcbjc2ODM6XHRcbjc2ODQ6XHQjaWZkZWYgQ09ORklHX05VTUFcbjc2ODU6XHQvKlxuNzY4NjpcdCAqIE5vZGUgcmVjbGFpbSBtb2RlXG43Njg3Olx0ICpcbjc2ODg6XHQgKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xuNzY4OTpcdCAqIHRoZSB3YXRlcm1hcmtzLlxuNzY5MDpcdCAqL1xuNzY5MTpcdGludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xuNzY5MjpcdFxuNzY5MzpcdC8qXG43Njk0Olx0ICogUHJpb3JpdHkgZm9yIE5PREVfUkVDTEFJTS4gVGhpcyBkZXRlcm1pbmVzIHRoZSBmcmFjdGlvbiBvZiBwYWdlc1xuNzY5NTpcdCAqIG9mIGEgbm9kZSBjb25zaWRlcmVkIGZvciBlYWNoIHpvbmVfcmVjbGFpbS4gNCBzY2FucyAxLzE2dGggb2Zcbjc2OTY6XHQgKiBhIHpvbmUuXG43Njk3Olx0ICovXG43Njk4Olx0I2RlZmluZSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFkgNFxuNzY5OTpcdFxuNzcwMDpcdC8qXG43NzAxOlx0ICogUGVyY2VudGFnZSBvZiBwYWdlcyBpbiBhIHpvbmUgdGhhdCBtdXN0IGJlIHVubWFwcGVkIGZvciBub2RlX3JlY2xhaW0gdG9cbjc3MDI6XHQgKiBvY2N1ci5cbjc3MDM6XHQgKi9cbjc3MDQ6XHRpbnQgc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpbyA9IDE7XG43NzA1Olx0XG43NzA2Olx0Lypcbjc3MDc6XHQgKiBJZiB0aGUgbnVtYmVyIG9mIHNsYWIgcGFnZXMgaW4gYSB6b25lIGdyb3dzIGJleW9uZCB0aGlzIHBlcmNlbnRhZ2UgdGhlblxuNzcwODpcdCAqIHNsYWIgcmVjbGFpbSBuZWVkcyB0byBvY2N1ci5cbjc3MDk6XHQgKi9cbjc3MTA6XHRpbnQgc3lzY3RsX21pbl9zbGFiX3JhdGlvID0gNTtcbjc3MTE6XHRcbjc3MTI6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbm9kZV91bm1hcHBlZF9maWxlX3BhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG43NzEzOlx0e1xuNzcxNDpcdFx0dW5zaWduZWQgbG9uZyBmaWxlX21hcHBlZCA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9NQVBQRUQpO1xuNzcxNTpcdFx0dW5zaWduZWQgbG9uZyBmaWxlX2xydSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfRklMRSkgJiM0Mztcbjc3MTY6XHRcdFx0bm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9BQ1RJVkVfRklMRSk7XG43NzE3Olx0XG43NzE4Olx0XHQvKlxuNzcxOTpcdFx0ICogSXQmIzM5O3MgcG9zc2libGUgZm9yIHRoZXJlIHRvIGJlIG1vcmUgZmlsZSBtYXBwZWQgcGFnZXMgdGhhblxuNzcyMDpcdFx0ICogYWNjb3VudGVkIGZvciBieSB0aGUgcGFnZXMgb24gdGhlIGZpbGUgTFJVIGxpc3RzIGJlY2F1c2Vcbjc3MjE6XHRcdCAqIHRtcGZzIHBhZ2VzIGFjY291bnRlZCBmb3IgYXMgQU5PTiBjYW4gYWxzbyBiZSBGSUxFX01BUFBFRFxuNzcyMjpcdFx0ICovXG43NzIzOlx0XHRyZXR1cm4gKGZpbGVfbHJ1IFx1MDAzZSBmaWxlX21hcHBlZCkgPyAoZmlsZV9scnUgLSBmaWxlX21hcHBlZCkgOiAwO1xuNzcyNDpcdH1cbjc3MjU6XHRcbjc3MjY6XHQvKiBXb3JrIG91dCBob3cgbWFueSBwYWdlIGNhY2hlIHBhZ2VzIHdlIGNhbiByZWNsYWltIGluIHRoaXMgcmVjbGFpbV9tb2RlICovXG43NzI3Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbjc3Mjg6XHR7XG43NzI5Olx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxNjkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgTlVNQSBhbmQgTWVtb3J5IFJlY2xhaW1pbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBub2RlX3JlY2xhaW1gIGlzIGRlZmluaXRlbHkgbmVzdGVkIHVuZGVyIGBDT05GSUdfTlVNQWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBzdXBwb3J0aW5nIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBUaGF0IHdvdWxkIGJlIGBNRU1DR2AsIGBISUJFUk5BVElPTmAsIGFuZCBvZiBjb3Vyc2UsIGBOVU1BYCBpdHNlbGYuIEJ1dCB3YWl0Li4uIGlzbiYjMzk7dCBgc2hyaW5rX2FsbF9tZW1vcnlgIGFsc28gdGllZCB0byBgQ09ORklHX0hJQkVSTkFUSU9OYD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgaWYgYHNocmlua19hbGxfbWVtb3J5YCBpcyBleHBvcnRlZCBwcm9wZXJseS4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIGludGVuZGVkIGJlaGF2aW91ciB0byB3b3JrIGNvcnJlY3RseSB3aXRoaW4gdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipzaHJpbmtfYWxsX21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MjQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2A6CgoqKkFuYWx5emluZyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AqKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBhcyBpdCByZWxhdGVzIHRvIG1lbW9yeSBjZ3JvdXBzLiBXaGF0IGlzIGl0ICp0cnlpbmcqIHRvIGFjY29tcGxpc2g/IFByZXN1bWFibHksIGJhc2VkIG9uIHRoZSBuYW1lLCBpdHMgb2JqZWN0aXZlIGlzIHRvIHJlY2xhaW0gbWVtb3J5IHdpdGhpbiBhIHNwZWNpZmljIGNncm91cC4gSXMgaXQgcGFydCBvZiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcHJvY2Vzcywgb3IgcGVyaGFwcyB0cmlnZ2VyZWQgYnkgaGlnaC1tZW1vcnkgcHJlc3N1cmUgd2l0aGluIHRoZSBjZ3JvdXA/IEkgbmVlZCB0byBhc2NlcnRhaW4gdGhlIGNvbnRleHQgd2l0aGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGludm9rZWQg4oCTIHdobyBjYWxscyBpdCBhbmQgd2hlbi4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBmdW5jdGlvbiYjMzk7cyBwYXJhbWV0ZXJzLiBXaGF0IGluZm9ybWF0aW9uIGRvZXMgaXQgcmVxdWlyZSB0byBkbyBpdHMgam9iPyBEb2VzIGl0IHRha2UgYSBwb2ludGVyIHRvIHRoZSBjZ3JvdXAgaXRzZWxmPyBQZXJoYXBzIGEgdGFyZ2V0IGFtb3VudCBvZiBtZW1vcnkgdG8gZnJlZT8gQXJlIHRoZXJlIGhpbnRzIGFib3V0IHRoZSB0eXBlIG9mIHBhZ2VzIGl0IHRhcmdldHMsIG9yIGFueSBjb25zaWRlcmF0aW9ucyBvZiBhIGdsb2JhbCBtZW1vcnkgcG9vbD8KCk15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGNvZGUgaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlY2xhaW0gbWVjaGFuaXNtLiBEb2VzIGl0IHVzZSB0aGUgcGFnZSBjYWNoZSwgb3Igc29tZSBvdGhlciBzdHJhdGVneT8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciBzdWJzeXN0ZW1zIGxpa2UgdGhlIHBhZ2UgYWxsb2NhdG9yIGFuZCB0aGUgc2xhYiBhbGxvY2F0b3I/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3IgcG90ZW50aWFsIGNvbnRlbnRpb24gb3IgaW5lZmZpY2llbmN5IHRoYXQgSSBzaG91bGQgd2F0Y2ggb3V0IGZvcj8KCkNydWNpYWxseSwgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBmdW5jdGlvbiBmYWlscyB0byBmcmVlIG1lbW9yeT8gRG9lcyBpdCByZXR1cm4gYW4gZXJyb3IgY29kZSwgb3Igc2lnbmFsIGZhaWx1cmUgc29tZSBvdGhlciB3YXk/IEhvdyBpcyB0aGlzIGZhaWx1cmUgaGFuZGxlZCB1cHN0cmVhbSBpbiB0aGUgY2FsbGluZyBjb2RlPyBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uY3VycmVuY3kgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24uIERvZXMgaXQgdXNlIGFueSBsb2NrcyBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZGVhZGxvY2tzPwoKRnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlLCBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSB0cmFkZS1vZmZzIGl0IG1ha2VzLiBJcyBpdCBvcHRpbWl6ZWQgZm9yIGxvdyBsYXRlbmN5IG9yIGZvciBoaWdoIHRocm91Z2hwdXQ/IEhvdyBzZW5zaXRpdmUgaXMgaXQgdG8gZGlmZmVyZW50IHdvcmtsb2Fkcz8gSSYjMzk7bGwgcHJvYmFibHkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIGl0cyByZWNsYWltIHN0cmF0ZWd5IGlzIGJpYXNlZCB0b3dhcmQgY2VydGFpbiBwYWdlIHR5cGVzIG9yIHBhZ2Ugc291cmNlcy4KClVsdGltYXRlbHksIG15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBpdCYjMzk7cyBvcGVyYXRpbmcgYXMgaW50ZW5kZWQgYW5kLCBvZiBjb3Vyc2UsIHRvIGlkZW50aWZ5IGFueSBhcmVhcyBvZiBwb3RlbnRpYWwgaW1wcm92ZW1lbnQgb3IgYW55IHBvc3NpYmxlIGJ1Z3MuIFRoaXMgd2lsbCBiZSB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBtZW1vcnkgY2dyb3VwIHJlY2xhaW0gc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5ODUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVyaWVuY2VkIGtlcm5lbCBkZXZlbG9wZXI6CgoqKkRlbHZpbmcgaW50byBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgc28gdGhlc2UgZnVuY3Rpb25zIGFyZW4mIzM5O3QgZXhwbGljaXRseSBleHBvcnRlZCwgbWVhbmluZyB0aGV5JiMzOTtyZSBub3QgcGFydCBvZiB0aGUga2VybmVsJiMzOTtzIGV4dGVybmFsIEFQSSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuIEJ1dCwgYW5kIHRoaXMgaXMga2V5LCB0aGV5ICphcmUqIGFjY2Vzc2libGUgaW50ZXJuYWxseS4gVGhleSYjMzk7cmUgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZCwgbWVhbmluZyB0aGV5IGhhdmUgaW50ZXJuYWwgbGlua2FnZSBidXQgYXJlbiYjMzk7dCBsaW1pdGVkIHRvIGEgc2luZ2xlIGZpbGUuIFRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMgb3Igc3Vic3lzdGVtcyB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBmb3IgdXRpbGl0eSBmdW5jdGlvbnMgb3IgdGhvc2UgdGhhdCBwZXJmb3JtIGEgdmVyeSBzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4gYSBsYXJnZXIgY29tcG9uZW50LgoKTGV0JiMzOTtzIGhvbmUgaW4gb24gdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZnVuY3Rpb24gc3BlY2lmaWNhbGx5LiBJJiMzOTttIGdvaW5nIHRvIHJldmlzaXQgdGhhdCBjb2RlIGJsb2NrLiBJJiMzOTttIG5vdyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQmIzM5O3MgbGlua2VkIGludG8gb3RoZXIgYXJlYXMgb2YgdGhlIHN5c3RlbSwgYW5kIHdoYXQgdGhlIGNvbmRpdGlvbnMgYXJlIHVuZGVyIHdoaWNoIGl0JiMzOTtzIGludm9rZWQuIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHVzZXItc3BhY2UgbWVtb3J5IHJlY2xhaW0uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciBpdCBjb3VsZCBiZSBhIHBvdGVudGlhbCBob3Qgc3BvdCBvciBhIHBvaW50IGZvciBvcHRpbWl6YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gZGl2ZSBkZWVwZXIgaW50byBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGl0cyBjYWxsIHNpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnVzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzQ0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBTZWxlY3Rpb24gZm9yIFN5emthbGxlciBDb3ZlcmFnZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBndWlkZSBzeXprYWxsZXIgdG8gaW1wcm92ZSBpdHMgY292ZXJhZ2Ugb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgY2dyb3VwLXJlbGF0ZWQgZnVuY3Rpb25zLiBGaXJzdCwgSSB3YW50ZWQgdG8gdmVyaWZ5IGlmIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBpcyBleHBvcnRlZCwgYnV0IGl0JiMzOTtzIG5vdC4gVGhhdCYjMzk7cyBmaW5lLCBzeXprYWxsZXIgY2FuIHN0aWxsIGZ1enogbm9uLXN0YXRpYywgcmVhY2hhYmxlIGZ1bmN0aW9ucy4gVGhlIGNydWNpYWwgdGhpbmcgaGVyZSBpcyB0aGF0IHN5emthbGxlciwgdGhyb3VnaCBmdXp6aW5nIHN5c2NhbGxzLCAqd2lsbCogZXZlbnR1YWxseSB0b3VjaCB0aGVzZSBmdW5jdGlvbnMuIFRoZSBmb2N1cyBzeW1ib2xzIEkgcHJvdmlkZSBhcmUganVzdCBoaW50cyB0byBwcmlvcml0aXplIHRoZSBleHBsb3JhdGlvbiBvZiBzcGVjaWZpYyBjb2RlIHBhdGhzLgoKU28sIGxldCYjMzk7cyBtYWtlIGEgbGlzdC4gVGhlIG9idmlvdXMgY2FuZGlkYXRlcyBhcmUgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgbm9kZV9yZWNsYWltYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4KCkhvbGQgb24sIHRob3VnaC4gYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBjYWxsZWQgYnkgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLCB3aGljaCBpcyBhIHRvdGFsIGhvdC1wYXRoLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgJiMzNDtBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucyYjMzQ7IGlzIGEgY3J1Y2lhbCBiZXN0IHByYWN0aWNlLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBleGNsdWRlIGB0cnlfdG9fZnJlZV9wYWdlc2AuCgpOb3csIGxldCYjMzk7cyBldmFsdWF0ZSB0aGUgb3RoZXJzLiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgbG9va3MgZ29vZDsgaXQmIzM5O3MgdHJpZ2dlcmVkIHRocm91Z2ggc3lzZnMvY2dyb3VwZnMsIHNvIGl0JiMzOTtzIGEgc3BlY2lmaWMgZW50cnkgcG9pbnQuICBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgY2FsbGVkIGZyb20gYG1lbW9yeV9yZWNsYWltYCBpbiBgbW0vbWVtY29udHJvbC5jYCwgd2hpY2ggaXMgYWxzbyBhIGNncm91cGZzIGludGVyZmFjZS4gR29vZCwgdGhhdCBmaXRzIG15IG5lZWRzLiBgc2hyaW5rX2FsbF9tZW1vcnlgIGlzIGNhbGxlZCBmcm9tIGBoaWJlcm5hdGVfcHJlYWxsb2NhdGVfbWVtb3J5YCwgd2hpY2ggaXMgYSBzcGVjaWZpYywgd2VsbC1kZWZpbmVkIG9wZXJhdGlvbi4gQW5kIGBub2RlX3JlY2xhaW1gIGNvbWVzIGZyb20gYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgIHdoZW4gYG5vZGVfcmVjbGFpbV9tb2RlYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBhIGJpdCBvZiBhIGhvdC1wYXRoIGlmIHRoZSBtb2RlIGlzIG9uLCBidXQgaXQmIzM5O3MgZGlzYWJsZWQgYnkgZGVmYXVsdC4KClNvIEkgc2hvdWxkIGJlIGxlZnQgd2l0aCB0aGlzIGFzIG15IGZpbmFsIGxpc3Q6CgoqICAgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgCiogICBgc2hyaW5rX2FsbF9tZW1vcnlgCiogICBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAKKiAgIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYAoKT25lIGxhc3Qgc3RlcDogbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAgaXMgaW5kZWVkIHByb3RlY3RlZCBieSBgQ09ORklHX01FTUNHYC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gdGFyZ2V0aW5nIHRoZSByaWdodCBjb2RlIHBhdGghCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc2hyaW5rX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz02Njk0PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3MzktLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xubW0vdm1zY2FuLmM6Njc0MDp1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjc0MS1cdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTA3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQ2hlY2tpbmcgZm9yIE1lbW9yeSBDb250cm9sIEdyb3VwIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoaXMgZnVydGhlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHNlY3Rpb24gaXMgZXZlbiByZWxldmFudC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayBhbmQgc2VlIGlmIHdlJiMzOTtyZSBvcGVyYXRpbmcgd2l0aGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gSXQmIzM5O3MgYWxtb3N0IHJlZmxleGl2ZSBhdCB0aGlzIHBvaW50LCBidXQgYW55IGRpc2N1c3Npb24gYWJvdXQgcmVzb3VyY2UgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IG1lbW9yeSwgbmVjZXNzaXRhdGVzIHVuZGVyc3RhbmRpbmcgdGhlIGVudmlyb25tZW50LiBTbywgbGV0JiMzOTtzIHNlZSDigJMgYCNpZmRlZiBDT05GSUdfTUVNQ0dgLiBUaGF0IHByZXByb2Nlc3NvciBkaXJlY3RpdmUgd2lsbCBiZSB0aGUga2V5LiBJZiB0aGF0JiMzOTtzIG5vdCBkZWZpbmVkLCB3aGF0ZXZlciBmb2xsb3dzIGlzIGxpa2VseSBpcnJlbGV2YW50IHRvIHRoaXMgZGlzY3Vzc2lvbiBhbmQgSSBjYW4gbW92ZSBvbi4gSWYgaXQgKmlzKiBkZWZpbmVkLCB0aGVuIHdlIGhhdmUgYSBwb3RlbnRpYWwgZGVwZW5kZW5jeSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGFuZCB0aGUgbGFyZ2VyIG1lbW9yeSBjZ3JvdXAgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjczMDpcdFxuNjczMTpcdFx0dHJhY2VfbW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZChucl9yZWNsYWltZWQsIE5VTEwpO1xuNjczMjpcdFx0c2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShjdXJyZW50LCBOVUxMKTtcbjY3MzM6XHRcbjY3MzQ6XHRcdHJldHVybiBucl9yZWNsYWltZWQ7XG42NzM1Olx0fVxuNjczNjpcdFxuNjczNzpcdCNpZmRlZiBDT05GSUdfTUVNQ0dcbjY3Mzg6XHRcbjY3Mzk6XHQvKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovXG42NzQwOlx0dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbjY3NDE6XHRcdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG42NzQyOlx0XHRcdFx0XHRcdFx0cGdfZGF0YV90ICpwZ2RhdCxcbjY3NDM6XHRcdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKVxuNjc0NDpcdHtcbjY3NDU6XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG42NzQ2Olx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xuNjc0NzpcdFx0XHQubnJfdG9fcmVjbGFpbSA9IFNXQVBfQ0xVU1RFUl9NQVgsXG42NzQ4Olx0XHRcdC50YXJnZXRfbWVtX2Nncm91cCA9IG1lbWNnLFxuNjc0OTpcdFx0XHQubWF5X3dyaXRlcGFnZSA9IDEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDY3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6CgoqKk5hdmlnYXRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCB5ZXAsIHRoYXQmIzM5O3MgdGhlIG9uZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcmVsZXZhbnQgY29uZmlncyBoZXJlIGFyZSBgTUVNQ0dgLCBgSElCRVJOQVRJT05gLCBhbmQgYE5VTUFgLiBIYW5nIG9uIGEgc2Vjb25kLCB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBvcHRpb24uLi4gaXQmIzM5O3Mgbm90IG5lc3RlZCAqd2l0aGluKiBgQ09ORklHX05VTUFgLCBsaWtlIEkgaW5pdGlhbGx5IHRob3VnaHQuIEl0JiMzOTtzIGp1c3QgaGFuZ2luZyBvdXQgdGhlcmUgYWZ0ZXIgdGhlIGAjZW5kaWZgLiBIbW0sIGNvdWxkIGl0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYENPTkZJR19NRU1DR2AgaW5zdGVhZD8gTm9wZSwgaXQmIzM5O3Mgb3V0c2lkZSAqdGhhdCogYmxvY2sgdG9vLiBUaW1lIHRvIHJldmlzaXQgYG1tL3Ztc2Nhbi5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDc4NzAuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZXhhY3QgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBjb250cm9sbGluZyB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODYwOlx0fVxuNzg2MTpcdFxuNzg2MjpcdCNlbHNlXG43ODYzOlx0XG43ODY0Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXG43ODY1Olx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbjc4NjY6XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjc4Njc6XHR7XG43ODY4Olx0XHRyZXR1cm4gMDtcbjc4Njk6XHR9XG43ODcwOlx0XG43ODcxOlx0I2VuZGlmXG43ODcyOlx0XG43ODczOlx0ZW51bSB7XG43ODc0Olx0XHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTID0gMCxcbjc4NzU6XHRcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLFxuNzg3NjpcdFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcbjc4Nzc6XHR9O1xuNzg3ODpcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbjc4Nzk6XHRcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXCYjMzQ7c3dhcHBpbmVzcz0lZFwmIzM0O30sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNjMxCgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDgxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogaXQuIEkgc2VlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBhbHdheXMgY29tcGlsZWQgaW4sIHdoaWNoIGlzIGdvb2QuIFRoZW4gSSBub3RlIHRoZSBpbmNsdXNpb24gb2YgY29uZmlndXJhdGlvbnM6IGBNRU1DR2AgYW5kIGBISUJFUk5BVElPTmAuIEkgYWxzbyBzcG90IGBub2RlX3JlY2xhaW1gLCB3aGljaCBpcyBkZXBlbmRlbnQgb24gYENPTkZJR19OVU1BYC4gU28sIHRoZSBlZmZlY3RpdmUgY29uZmlndXJhdGlvbnMgdGhhdCBlbmFibGUgZGlmZmVyZW50IGNvZGUgcGF0aHMgYXJlOiBgTUVNQ0dgLCBgSElCRVJOQVRJT05gLCBhbmQgYE5VTUFgLgoKSSB0aGVuIHRvb2sgYSBsb29rIGF0IG90aGVyIGVudHJ5IHBvaW50cy4gSSBrbm93IHRoYXQgYGtzd2FwZF9ydW5gIGlzIGNhbGxlZCBhdCBib290IGFuZCBmb3Igbm9kZSBob3QtYWRkLCBhbmQgYHdha2V1cF9rc3dhcGRgIGlzIGNhbGxlZCBmcm9tIHRoZSBwYWdlIGFsbG9jYXRvciwgc28gdGhleSBhcmUgaG90IHBhdGhzIG9yIGF0IGJvb3QuIFRoaXMgbGVhZHMgbWUgdG8gaWRlbnRpZnkgdGhlIGZvY3VzIHN5bWJvbHMuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBwYXRjaCYjMzk7cyBjb3JlIGltcGFjdCwgSSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSBjcml0aWNhbCBzeW1ib2xzOiBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgLCBhbmQgYG5vZGVfcmVjbGFpbWAuCgpJJiMzOTttIGRpZ2dpbmcgZGVlcGVyIGludG8gdGhlIHBhdGNoIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyBpdCBtYWtlcyB0byBgaXNvbGF0ZV9scnVfZm9saW9zYCBhbmQgYHNocmlua19scnV2ZWNgLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLCBzbyB0aGV5JiMzOTtyZSBhbHdheXMgY29tcGlsZWQuIFRoZSBjb25maWdzIGFyZSB0aGVyZSB0byBhY3RpdmF0ZSBzcGVjaWZpYyBlbnRyeSBwb2ludHMuIGBpc29sYXRlX2xydV9mb2xpb3NgIG5vdyBjYXBzIHRoZSBudW1iZXIgb2Ygc2tpcHBlZCBmb2xpb3MsIHByZXZlbnRpbmcgZm9yY2VkIGlzb2xhdGlvbiBhZnRlciBhIGNlcnRhaW4gdGhyZXNob2xkLiBBbmQsIHRoZSBgc2hyaW5rX2xydXZlY2AgY2hhbmdlcyB0aGUgd2F5IHRoZSBvdmVyc2hvb3Qgb2Ygc2Nhbm5lZCBwYWdlcyBhcmUgY291bnRlZCBhZ2FpbnN0IHRoZSBxdW90YS4gVGhpcyBzaWduYWxzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHBhZ2UgcmVjbGFpbSBsb2dpYy4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLCBJIHRoaW5rLgoKTXkgcmVhc29uaW5nIGlzIHRoaXM6IFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGNvcmUgcGFnZSByZWNsYWltIGxvZ2ljLiBUaG9zZSBjb3JlIGZ1bmN0aW9ucyBjYW4gYmUgcmVhY2hlZCB2aWEgY2dyb3VwIHJlY2xhaW0sIHByb2FjdGl2ZSByZWNsYWltLCBhbmQgaGliZXJuYXRpb24sIGFtb25nIG90aGVycy4gYG5vZGVfcmVjbGFpbWAgaXMgY29udHJvbGxlZCBieSBhIHN5c2N0bCwgd2hpY2ggaXMgcGVyZmVjdCBmb3IgU3l6a2FsbGVyLgoKVGhlcmVmb3JlLCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6IGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYHNocmlua19hbGxfbWVtb3J5YCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIGFuZCBgbm9kZV9yZWNsYWltYC4gVGhlIGVuYWJsZSBjb25maWdzIGFyZSBgTUVNQ0dgLCBgSElCRVJOQVRJT05gLCBhbmQgYE5VTUFgLgoKSSBjaGVja2VkLCBhbGwgb2YgdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGd1YXJkZWQgYnkgdGhlc2UgY29uZmlndXJhdGlvbnMuCgpJbiBjb25jbHVzaW9uLCBJJiMzOTt2ZSBnb3QgYSBzb2xpZCBmcmFtZXdvcmsgZm9yIGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIHRoaXMgcGF0Y2gsIGNvbmNlbnRyYXRpbmcgb24gdGhlc2Ugc3BlY2lmaWMgc3ltYm9scyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0hJQkVSTkFUSU9OJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zaHJpbmtfbm9kZSYjMzQ7LAogICAgJiMzNDtub2RlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgYW5kIGBzaHJpbmtfbHJ1dmVjYCB0byBwcmV2ZW50IGhhcmQgbG9ja3VwcyBieSBjYXBwaW5nIHRoZSBudW1iZXIgb2Ygc2tpcHBlZCBpbmVsaWdpYmxlIGZvbGlvcyBhbmQgYWRqdXN0aW5nIHRoZSBzY2FuIHF1b3RhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmFyaW91cyByZWNsYWltIHBhdGhzIChlLmcuLCBjZ3JvdXAgcmVjbGFpbSwgcHJvYWN0aXZlIHJlY2xhaW0sIGhpYmVybmF0aW9uKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7SElCRVJOQVRJT04mIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAgICYjMzQ7c2hyaW5rX2FsbF9tZW1vcnkmIzM0OywKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3Nocmlua19ub2RlJiMzNDssCiAgICAmIzM0O25vZGVfcmVjbGFpbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgaXNvbGF0ZV9scnVfZm9saW9zYCBhbmQgYHNocmlua19scnV2ZWNgIHRvIHByZXZlbnQgaGFyZCBsb2NrdXBzIGJ5IGNhcHBpbmcgdGhlIG51bWJlciBvZiBza2lwcGVkIGluZWxpZ2libGUgZm9saW9zIGFuZCBhZGp1c3RpbmcgdGhlIHNjYW4gcXVvdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB2YXJpb3VzIHJlY2xhaW0gcGF0aHMgKGUuZy4sIGNncm91cCByZWNsYWltLCBwcm9hY3RpdmUgcmVjbGFpbSwgaGliZXJuYXRpb24pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBWTSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0IGludHJvZHVjZXMgYSBuZXcgZmllbGQgYG5yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHRvIHRyYWNrIHRoZSBudW1iZXIgb2Ygc2Nhbm5lZCBwYWdlcywgcmVwbGFjaW5nIGFuIG91dHB1dCBwb2ludGVyIGFyZ3VtZW50IGluIGBpc29sYXRlX2xydV9mb2xpb3MoKWAuIFRoZSBmaWVsZCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoZWl0aGVyIGV4cGxpY2l0bHkgdG8gMCBpbiBgc2hyaW5rX2xydXZlYygpYCBvciB1bmNvbmRpdGlvbmFsbHkgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiBgaXNvbGF0ZV9scnVfZm9saW9zKClgKS4gVGhlIHBhdGNoIGFsc28gY2hhbmdlcyB0aGUgbG9naWMgdG8gc3RvcCBpc29sYXRpbmcgZm9saW9zIHdoZW4gYSBza2lwIHRocmVzaG9sZCBpcyByZWFjaGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZG8gbm90IGludm9sdmUgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ0NzgzYWU3NjYxMjkwYjAxM2IwYWMxYWViZDhhYzFjMjFkM2IyYmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwODowMTowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNTY3MDhkMWQyZGZkNS4uYWMzMjM3YTU4Y2IyOSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTE2NCw2ICYjNDM7MTY0LDkgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJLyogSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBpbmFjdGl2ZSBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCAqLwogCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDsKIAomIzQzOwkvKiBOdW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQgZnJvbSBpc29sYXRlX2xydV9mb2xpb3MoKSAqLwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX2lzb2xhdGVfc2Nhbm5lZDsKJiM0MzsKIAkvKiBOdW1iZXIgb2YgcGFnZXMgZnJlZWQgc28gZmFyIGR1cmluZyBhIGNhbGwgdG8gc2hyaW5rX3pvbmVzKCkgKi8KIAl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDsKIApAQCAtMTY3Myw3ICYjNDM7MTY3Niw2IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1cGRhdGVfbHJ1X3NpemVzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKICAqIEBucl90b19zY2FuOglUaGUgbnVtYmVyIG9mIGVsaWdpYmxlIHBhZ2VzIHRvIGxvb2sgdGhyb3VnaCBvbiB0aGUgbGlzdC4KICAqIEBscnV2ZWM6CVRoZSBMUlUgdmVjdG9yIHRvIHB1bGwgcGFnZXMgZnJvbS4KICAqIEBkc3Q6CVRoZSB0ZW1wIGxpc3QgdG8gcHV0IHBhZ2VzIG9uIHRvLgotICogQG5yX3NjYW5uZWQ6CVRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQuCiAgKiBAc2M6CQlUaGUgc2Nhbl9jb250cm9sIHN0cnVjdCBmb3IgdGhpcyByZWNsYWltIHNlc3Npb24KICAqIEBscnU6CUxSVSBsaXN0IGlkIGZvciBpc29sYXRpbmcKICAqCkBAIC0xNjgxLDggJiM0MzsxNjgzLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCwKLQkJdW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCi0JCWVudW0gbHJ1X2xpc3QgbHJ1KQomIzQzOwkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGVudW0gbHJ1X2xpc3QgbHJ1KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnNyYyA9ICZhbXA7bHJ1dmVjLSZndDtsaXN0c1tscnVdOwogCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW4gPSAwOwpAQCAtMTcwMywxMiAmIzQzOzE3MDQsMjAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAkJbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAJCXRvdGFsX3NjYW4gJiM0Mzs9IG5yX3BhZ2VzOwogCi0JCS8qIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAqLwotCQlpZiAobWF4X25yX3NraXBwZWQgJmx0OyBTV0FQX0NMVVNURVJfTUFYX1NLSVBQRUQgJmFtcDsmYW1wOwotCQkgICAgKGZvbGlvX3pvbmVudW0oZm9saW8pICZndDsgc2MtJmd0O3JlY2xhaW1faWR4KSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAuCiYjNDM7CQkgKiBPbmNlIHRoZSBjYXAgaXMgaGl0LCBzdG9wIHJhdGhlciB0aGFuIGZvcmNlLWlzb2xhdGluZzoKJiM0MzsJCSAqIHJlY2xhaW1pbmcgaW5lbGlnaWJsZSBmb2xpb3Mgb25seSBpbmZsYXRlcyBucl9yZWNsYWltZWQKJiM0MzsJCSAqIGludG8gYSBmYWxzZSBwcm9ncmVzcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGZvbGlvX3pvbmVudW0oZm9saW8pICZndDsgc2MtJmd0O3JlY2xhaW1faWR4KSB7CiAJCQlucl9za2lwcGVkW2ZvbGlvX3pvbmVudW0oZm9saW8pXSAmIzQzOz0gbnJfcGFnZXM7Ci0JCQltb3ZlX3RvID0gJmFtcDtmb2xpb3Nfc2tpcHBlZDsKIAkJCW1heF9ucl9za2lwcGVkJiM0MzsmIzQzOzsKJiM0MzsJCQlpZiAobWF4X25yX3NraXBwZWQgJmd0Oz0gU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEKSB7CiYjNDM7CQkJCWxpc3RfbW92ZSgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7Zm9saW9zX3NraXBwZWQpOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQkJbW92ZV90byA9ICZhbXA7Zm9saW9zX3NraXBwZWQ7CiAJCQlnb3RvIG1vdmU7CiAJCX0KIApAQCAtMTc2Niw3ICYjNDM7MTc3NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJCQlza2lwcGVkICYjNDM7PSBucl9za2lwcGVkW3ppZF07CiAJCX0KIAl9Ci0JKm5yX3NjYW5uZWQgPSB0b3RhbF9zY2FuOwomIzQzOwlzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2NhbjsKIAl0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtJmd0O3JlY2xhaW1faWR4LCBzYy0mZ3Q7b3JkZXIsIG5yX3RvX3NjYW4sCiAJCQkJICAgIHRvdGFsX3NjYW4sIHNraXBwZWQsIG5yX3Rha2VuLCBscnUpOwogCXVwZGF0ZV9scnVfc2l6ZXMobHJ1dmVjLCBscnUsIG5yX3pvbmVfdGFrZW4pOwpAQCAtMjAxNCw4ICYjNDM7MjAyMyw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAogCWxydXZlY19sb2NrX2lycShscnV2ZWMpOwogCi0JbnJfdGFrZW4gPSBpc29sYXRlX2xydV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCAmYW1wO2ZvbGlvX2xpc3QsCi0JCQkJICAgICAmYW1wO25yX3NjYW5uZWQsIHNjLCBscnUpOwomIzQzOwlucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsICZhbXA7Zm9saW9fbGlzdCwgc2MsIGxydSk7CiYjNDM7CW5yX3NjYW5uZWQgPSBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkOwogCiAJX19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IGZpbGUsIG5yX3Rha2VuKTsKIAlpdGVtID0gUEdTQ0FOX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTsKQEAgLTIwNzEsNyAmIzQzOzIwODAsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCQkJICAgICAgIGVudW0gbHJ1X2xpc3QgbHJ1KQogewogCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW47Ci0JdW5zaWduZWQgbG9uZyBucl9zY2FubmVkOwogCXZtX2ZsYWdzX3Qgdm1fZmxhZ3M7CiAJTElTVF9IRUFEKGxfaG9sZCk7CS8qIFRoZSBmb2xpb3Mgd2hpY2ggd2VyZSBzbmlwcGVkIG9mZiAqLwogCUxJU1RfSEVBRChsX2FjdGl2ZSk7CkBAIC0yMDg1LDEyICYjNDM7MjA5MywxMSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCiAJbHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7CiAKLQlucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsICZhbXA7bF9ob2xkLAotCQkJCSAgICAgJmFtcDtucl9zY2FubmVkLCBzYywgbHJ1KTsKJiM0MzsJbnJfdGFrZW4gPSBpc29sYXRlX2xydV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCAmYW1wO2xfaG9sZCwgc2MsIGxydSk7CiAKIAlfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgZmlsZSwgbnJfdGFrZW4pOwogCi0JbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBucl9zY2FubmVkKTsKJiM0MzsJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkKTsKIAogCWxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7CiAKQEAgLTU5MjAsMTAgJiM0Mzs1OTI3LDIxIEBAIHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAkJZm9yX2VhY2hfZXZpY3RhYmxlX2xydShscnUpIHsKIAkJCWlmIChucltscnVdKSB7CiAJCQkJbnJfdG9fc2NhbiA9IG1pbihucltscnVdLCBTV0FQX0NMVVNURVJfTUFYKTsKLQkJCQlucltscnVdIC09IG5yX3RvX3NjYW47CiAKJiM0MzsJCQkJc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZCA9IDA7CiAJCQkJbnJfcmVjbGFpbWVkICYjNDM7PSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sCiAJCQkJCQkJICAgIGxydXZlYywgc2MpOwomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiBpc29sYXRlX2xydV9mb2xpb3MoKSBtYXkgc2NhbiBmYXIgbW9yZQomIzQzOwkJCQkgKiB0aGFuIG5yX3RvX3NjYW4gd2hlbiB0aGUgTFJVIGhvbGRzCiYjNDM7CQkJCSAqIGluZWxpZ2libGUgZm9saW9zICh6b25lLXNraXApIG9yIGxhcmdlCiYjNDM7CQkJCSAqIGZvbGlvcy4gQ2hhcmdlIHRoYXQgb3ZlcnNob290IGFnYWluc3QgdGhlCiYjNDM7CQkJCSAqIHJlbWFpbmluZyBxdW90YSAoY2xhbXBlZCBieSBtaW4oKSBzbyBpdAomIzQzOwkJCQkgKiBjYW5ub3QgZ28gbmVnYXRpdmUpIHNvIHRoZSBuZXh0IGl0ZXJhdGlvbgomIzQzOwkJCQkgKiBkb2VzIG5vdCByZXNjYW4gdGhlIHNhbWUgc2tpcHBlZCBmb2xpb3MuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlucltscnVdIC09IG1pbihucltscnVdLAomIzQzOwkJCQkJICAgICAgIG1heChucl90b19zY2FuLCBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkKSk7CiAJCQl9CiAJCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZtc2Nhbi5jIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIGBucl9pc29sYXRlX3NjYW5uZWRgKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL3Ztc2Nhbi5jYCwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyB0aGUgTFJVIGlzIHNjYW5uZWQuIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBgbnJfaXNvbGF0ZV9zY2FubmVkYCB0byB0aGUgYHN0cnVjdCBzY2FuX2NvbnRyb2xgLiBJbnN0ZWFkIG9mIHBhc3NpbmcgYXJvdW5kIGFuIG91dHB1dCBwb2ludGVyIGBucl9zY2FubmVkYCBpbiBgaXNvbGF0ZV9scnVfZm9saW9zYCwgaXQmIzM5O3Mgbm93IHVzaW5nIHRoaXMgbmV3IGZpZWxkIGRpcmVjdGx5IHdpdGhpbiB0aGUgYHNjYW5fY29udHJvbGAgc3RydWN0dXJlLiBTZWVtcyBjbGVhbmVyLCBwb3RlbnRpYWxseSBzYWZlciwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLgoKSSBzZWUgdGhhdCBgaXNvbGF0ZV9scnVfZm9saW9zYCBpcyB0aGUgcmVhbCB0YXJnZXQgYW5kIHRoZSBjYWxsIHNpdGVzIGZvciBpdCBhcmUgaW4gYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGFuZCBgc2hyaW5rX2xydXZlY2AuIExldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIGxvZ2ljLiBJbiBgc2hyaW5rX2xydXZlY2AsIGl0JiMzOTtzIGluaXRpYWxpemVkIHRvIHplcm8gYmVmb3JlIGNhbGxpbmcgYHNocmlua19saXN0YCwgd2hpY2ggdGhlbiBjYWxscyB0aGUgYWN0dWFsIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdDogYHNocmlua19hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAuIEdyZWF0LgoKQnV0LCBhIHJlZCBmbGFnIHBvcHBlZCB1cCBpbW1lZGlhdGVseTogYHN0cnVjdCBzY2FuX2NvbnRyb2xgIGlzIG9mdGVuIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpdCYjMzk7cyBmcmVxdWVudGx5IHVzZWQgaW4gZnVuY3Rpb25zIGxpa2UgYHRyeV90b19mcmVlX3BhZ2VzYCwgYGJhbGFuY2VfcGdkYXRgLCBgc2hyaW5rX2FsbF9tZW1vcnlgIGFuZCBvdGhlcnMgbGlrZSB0aGVzZS4gVGhpcyBtZWFucyB0aGF0IGlmIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCBpc24mIzM5O3QgaW5pdGlhbGl6ZWQgKmV2ZXJ5d2hlcmUqIGJlZm9yZSBpdCYjMzk7cyB1c2VkLCB3ZSYjMzk7cmUgZ29pbmcgdG8gaGF2ZSBhIHByb2JsZW0uIFN0YWNrIHZhcmlhYmxlcyBhcmUgdW5pbml0aWFsaXplZCBieSBkZWZhdWx0IGluIG1hbnkgY29udGV4dHMuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIHRoYXQgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgIGlzICphbHdheXMqIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEluIGBzaHJpbmtfbHJ1dmVjYCBpdCYjMzk7cyBleHBsaWNpdGx5IHNldCB0byAwLiBFeGNlbGxlbnQsIHRoYXQmIzM5O3Mgb25lIHNwb3QgdGFrZW4gY2FyZSBvZi4KCk5vdyBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiB0aGUgYHNocmlua19hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgZnVuY3Rpb25zLgoKSW4gYHNocmlua19hY3RpdmVfbGlzdGAsIGl0IGlzIG5ldmVyIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGJ1dCB0aGUgY2FsbHMgdG8gYGlzb2xhdGVfbHJ1X2ZvbGlvc2Agd3JpdGVzIHRoZSB2YWx1ZS4KYGBgYwoJbnJfdGFrZW4gPSBpc29sYXRlX2xydV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCAmYW1wO2xfaG9sZCwgc2MsIGxydSk7CgoJX19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IGZpbGUsIG5yX3Rha2VuKTsKCgltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdSRUZJTEwsIHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWQpOwpgYGAKSW4gYHNocmlua19pbmFjdGl2ZV9saXN0YCwgaXQgaXMgbmV2ZXIgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYnV0IHRoZSBjYWxscyB0byBgaXNvbGF0ZV9scnVfZm9saW9zYCB3cml0ZXMgdGhlIHZhbHVlOgpgYGBjCglucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsICZhbXA7Zm9saW9fbGlzdCwgc2MsIGxydSk7Cglucl9zY2FubmVkID0gc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZDsKYGBgCk9rYXksIEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlLiBUaGVyZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgYW4gaW5pdGlhbGl6YXRpb24gd2l0aGluIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGFuZCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBqdXN0IHdyaXRlcyB0byB0aGUgdmFyaWFibGUsIGFuZCBJIGhhdmUgdG8gY29uZmlybSB0aGUgdmFsdWUgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0IGdldHMgdGhlcmUuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGEgbGV2ZWwuIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGFuZCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFyZSBjYWxsZWQgZnJvbSBgc2hyaW5rX2xpc3RgLiBJcyBgbnJfaXNvbGF0ZV9zY2FubmVkYCBpbml0aWFsaXplZCB0aGVyZT8gTm9wZSwgaXQgaXNuJiMzOTt0LgoKYHNocmlua19saXN0YCBpcyBjYWxsZWQgZnJvbSBgc2hyaW5rX2xydXZlY2AgYW5kIGBldmljdF9mb2xpb3NgLiBJbiBgc2hyaW5rX2xydXZlY2AsIGl0IGlzIGluaXRpYWxpemVkLgoKVGhlcmVmb3JlLCB0byBjb21wbGV0ZSBteSBhbmFseXNpcywgSSBuZWVkIHRvIGNoZWNrIGhvdyBgZXZpY3RfZm9saW9zYCBpcyBjYWxsaW5nIGBzaHJpbmtfbGlzdGAgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIHNldHRpbmcgYG5yX2lzb2xhdGVfc2Nhbm5lZGAuCgpMZXQmIzM5O3MgZ3JlcCBmb3IgY2FsbHMgdG8gYHNocmlua19saXN0YCB0byBiZSBleHRyYSB0aG9yb3VnaCwganVzdCBpbiBjYXNlLiBUaGlzIHNob3VsZCB0ZWxsIG1lIGlmIHRoZXJlJiMzOTtzIGFueSBvdGhlciBwbGFjZSB0aGUgYHNjYW5fY29udHJvbGAgc3RydWN0dXJlIG1pZ2h0IGJlIHVzZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gSSBjYW4mIzM5O3QgbGV0IHRoaXMgc2xpcCB0aHJvdWdoIHRoZSBjcmFja3M7IHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGluIHRoaXMgY29udGV4dCBjb3VsZCBiZSBjYXRhc3Ryb3BoaWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XG5tbS92bXNjYW4uYzo3NTpcdC8qIEhvdyBtYW55IHBhZ2VzIHNocmlua19saXN0KCkgc2hvdWxkIHJlY2xhaW0gKi9cbm1tL3Ztc2Nhbi5jLTc2LVx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltO1xuLS1cbm1tL3Ztc2Nhbi5jPTIxODk9dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXG4tLVxubW0vdm1zY2FuLmMtMjIyMS1cbm1tL3Ztc2Nhbi5jOjIyMjI6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTIyMjMtXHRcdFx0XHQgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz01ODgzPXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTMxLVx0XHRcdFx0c2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gMDtcbm1tL3Ztc2Nhbi5jOjU5MzI6XHRcdFx0XHRucl9yZWNsYWltZWQgJiM0Mzs9IHNocmlua19saXN0KGxydSwgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTU5MzMtXHRcdFx0XHRcdFx0XHQgICAgbHJ1dmVjLCBzYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzOTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwIGludG8gYHNocmlua19saXN0YCBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBgc2hyaW5rX2xpc3RgIGNhbGxlZCBleGNsdXNpdmVseSBmcm9tIGBzaHJpbmtfbHJ1dmVjYC4gVGhhdCYjMzk7cyBhIGJpdCBzdXNwaWNpb3VzLCBhbmQgSSYjMzk7bSBpdGNoaW5nIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIGl0LiBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY2FsbCBzaXRlcy4gQSBzaW5nbGUgZnVuY3Rpb24gY2FsbCBmcm9tIGEgc3BlY2lmaWMgY29udGV4dCBjYW4gaGlkZSBhbGwgc29ydHMgb2YgYXNzdW1wdGlvbnMgdGhhdCBtYXkgYmUgYmFrZWQgaW50byB0aGUgY29kZS4gVGhpcyBjb3VsZCBsZWFkIHRvIGRpZmZpY3VsdCB0byBkZWJ1ZyBwcm9ibGVtcyBsYXRlciBvbi4gVGltZSB0byBkaWcgaW4gYW5kIHZlcmlmeSB0aGUgZGVwZW5kZW5jeSB0cmVlIGlzIHByZWNpc2VseSB3aGF0IEkmIzM5O20gZXhwZWN0aW5nLiBMZXQmIzM5O3MgdHJhY2UgaXQgYW5kIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19saXN0XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XG5tbS92bXNjYW4uYzo3NTpcdC8qIEhvdyBtYW55IHBhZ2VzIHNocmlua19saXN0KCkgc2hvdWxkIHJlY2xhaW0gKi9cbm1tL3Ztc2Nhbi5jLTc2LVx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltO1xuLS1cbm1tL3Ztc2Nhbi5jPTIxODk9dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXG4tLVxubW0vdm1zY2FuLmMtMjIyMS1cbm1tL3Ztc2Nhbi5jOjIyMjI6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTIyMjMtXHRcdFx0XHQgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz01ODgzPXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTMxLVx0XHRcdFx0c2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gMDtcbm1tL3Ztc2Nhbi5jOjU5MzI6XHRcdFx0XHRucl9yZWNsYWltZWQgJiM0Mzs9IHNocmlua19saXN0KGxydSwgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTU5MzMtXHRcdFx0XHRcdFx0XHQgICAgbHJ1dmVjLCBzYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZToKCioqQ29uc2lkZXJpbmcgTGlzdCBPcHRpbWl6YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGVlcCBpbiB0aGlzIGNvZGViYXNlLCBhbmQgSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSYjMzk7cmUgbWFuYWdpbmcgdGhlc2UgYWN0aXZlIGFuZCBpbmFjdGl2ZSBsaXN0cy4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBvcHRpbWl6YXRpb24g4oCTIHBhcnRpY3VsYXJseSwgYXJlIHdlIGJlaW5nIGVmZmljaWVudCB3aXRoIG1lbW9yeSBhbmQgcHJvY2Vzc2luZz8gSSBzZWUgdGhlIG1lbnRpb24gb2YgYHNocmlua19hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGFuZCB0aGF0JiMzOTtzIHByZWNpc2VseSB0aGUgc29ydCBvZiB0aGluZyB0aGF0IGNhdGNoZXMgbXkgZXllLiBUaG9zZSBuYW1lcyBhcmUgcHJvbWlzaW5nLiBNeSBleHBlcnQga25vd2xlZGdlIHdhbnRzIHRvIGtub3cgLSBhcmUgdGhleSBhY3R1YWxseSBzaHJpbmtpbmcgdGhlc2UgbGlzdHMgZHluYW1pY2FsbHkgYmFzZWQgb24gdXNhZ2UsIG9yIGFyZSB0aGV5IGp1c3Qgc3R1YiBmdW5jdGlvbnM/IEFyZSB0aGV5IGludGVsbGlnZW50bHkgcmVzaXppbmcgYnVmZmVycyBiYXNlZCBvbiBhY3R1YWwgZGF0YSBsb2FkPyBBcmUgdGhleSBjb25zaWRlcmluZyB0aGUgdHJhZGUtb2ZmcyBiZXR3ZWVuIGZyZXF1ZW50IHJlYWxsb2NhdGlvbnMgYW5kIHBvdGVudGlhbCBtZW1vcnkgd2FzdGU/IFdoYXQgYXJlIHRoZSBhY3R1YWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucz8gSSB3YW50IHRvIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0byBrbm93IGlmIHRoaXMgY29kZSBpcyBkb2luZyB3aGF0IGl0JiMzOTtzIHN1cHBvc2VkIHRvIGRvIGVmZmljaWVudGx5ISBJIG5lZWQgdG8gZGlnIGludG8gdGhlaXIgbG9naWMgYW5kIHVuZGVyc3RhbmQgdGhlIHNocmlua2luZyBwb2xpY3ksIHRoZSB0cmlnZ2VycyBmb3IgdGhpcyBzaHJpbmtpbmcsIGFuZCBpZiBhbnkgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgbWlnaHQgb2NjdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19hY3RpdmVfbGlzdFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTE5OTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuLS1cbm1tL3Ztc2Nhbi5jLTIwNjAtLypcbm1tL3Ztc2Nhbi5jOjIwNjE6ICogc2hyaW5rX2FjdGl2ZV9saXN0KCkgbW92ZXMgZm9saW9zIGZyb20gdGhlIGFjdGl2ZSBMUlUgdG8gdGhlIGluYWN0aXZlIExSVS5cbm1tL3Ztc2Nhbi5jLTIwNjItICpcbi0tXG5tbS92bXNjYW4uYy0yMDc2LSAqL1xubW0vdm1zY2FuLmM6MjA3NzpzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxubW0vdm1zY2FuLmMtMjA3OC1cdFx0XHQgICAgICAgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jPTIyMjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbi0tXG5tbS92bXNjYW4uYy0yMjI2LVx0XHRpZiAoc2MtXHUwMDNlbWF5X2RlYWN0aXZhdGUgXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyBpc19maWxlX2xydShscnUpKSlcbm1tL3Ztc2Nhbi5jOjIyMjc6XHRcdFx0c2hyaW5rX2FjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIGxydSk7XG5tbS92bXNjYW4uYy0yMjI4LVx0XHRlbHNlXG4tLVxubW0vdm1zY2FuLmM9NTg4Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjAxMC1cdCAgICBpbmFjdGl2ZV9pc19sb3cobHJ1dmVjLCBMUlVfSU5BQ1RJVkVfQU5PTikpXG5tbS92bXNjYW4uYzo2MDExOlx0XHRzaHJpbmtfYWN0aXZlX2xpc3QoU1dBUF9DTFVTVEVSX01BWCwgbHJ1dmVjLFxubW0vdm1zY2FuLmMtNjAxMi1cdFx0XHRcdCAgIHNjLCBMUlVfQUNUSVZFX0FOT04pO1xuLS1cbm1tL3Ztc2Nhbi5jPTY4MzE9c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTY4NTMtXHRcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG5tbS92bXNjYW4uYzo2ODU0Olx0XHRzaHJpbmtfYWN0aXZlX2xpc3QoU1dBUF9DTFVTVEVSX01BWCwgbHJ1dmVjLFxubW0vdm1zY2FuLmMtNjg1NS1cdFx0XHRcdCAgIHNjLCBMUlVfQUNUSVZFX0FOT04pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyB0aGUgTFJVIFZlY3RvciBTaHJpbmtpbmcgTG9naWMqKgoKUmlnaHQsIHNvIEkgc2VlIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGlzIGJlaW5nIGNhbGxlZCBkaXJlY3RseSBmcm9tIGJvdGggYHNocmlua19scnV2ZWNgIGFuZCBga3N3YXBkX2FnZV9ub2RlYC4gVGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyB0aWRiaXQsIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIG9yIHBlcmhhcHMgYSBjbGV2ZXIgb3B0aW1pemF0aW9uIGRlcGVuZGluZyBvbiBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQgaW4gdGhvc2UgdHdvIGNhbGxpbmcgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHRlci4gTGV0JiMzOTtzIGRpZyBpbnRvIGBzaHJpbmtfbHJ1dmVjYCBhbmQgaW1tZWRpYXRlbHkgbG9vayBhdCBsaW5lIDYwMTEuIEkgd2FudCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhhdCBjYWxsIHNpdGUsIHNwZWNpZmljYWxseSB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBgc2hyaW5rX2FjdGl2ZV9saXN0YCBhbmQgYW55IHN1cnJvdW5kaW5nIGNvbnRleHQgdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIHRoaXMgZHVhbCB1c2FnZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGhvdyB0aGVzZSBjYWxsZXJzIGFyZSB1c2luZyB0aGUgc2hyaW5rZXIuIEFyZSB0aGV5IHRyeWluZyB0byBiYWxhbmNlIG1lbW9yeSBpbiBzcGVjaWZpYyBjb25kaXRpb25zLCBvciBhcmUgd2UgZXhwZXJpZW5jaW5nIHJlc291cmNlIHByZXNzdXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1OTkwOlx0XHRcdCAqIHNjYW4gdGFyZ2V0IGFuZCB0aGUgcGVyY2VudGFnZSBzY2FubmluZyBhbHJlYWR5IGNvbXBsZXRlXG41OTkxOlx0XHRcdCAqL1xuNTk5MjpcdFx0XHRscnUgPSAobHJ1ID09IExSVV9GSUxFKSA/IExSVV9CQVNFIDogTFJVX0ZJTEU7XG41OTkzOlx0XHRcdG5yX3NjYW5uZWQgPSB0YXJnZXRzW2xydV0gLSBucltscnVdO1xuNTk5NDpcdFx0XHRucltscnVdID0gdGFyZ2V0c1tscnVdICogKDEwMCAtIHBlcmNlbnRhZ2UpIC8gMTAwO1xuNTk5NTpcdFx0XHRucltscnVdIC09IG1pbihucltscnVdLCBucl9zY2FubmVkKTtcbjU5OTY6XHRcbjU5OTc6XHRcdFx0bHJ1ICYjNDM7PSBMUlVfQUNUSVZFO1xuNTk5ODpcdFx0XHRucl9zY2FubmVkID0gdGFyZ2V0c1tscnVdIC0gbnJbbHJ1XTtcbjU5OTk6XHRcdFx0bnJbbHJ1XSA9IHRhcmdldHNbbHJ1XSAqICgxMDAgLSBwZXJjZW50YWdlKSAvIDEwMDtcbjYwMDA6XHRcdFx0bnJbbHJ1XSAtPSBtaW4obnJbbHJ1XSwgbnJfc2Nhbm5lZCk7XG42MDAxOlx0XHR9XG42MDAyOlx0XHRibGtfZmluaXNoX3BsdWcoXHUwMDI2cGx1Zyk7XG42MDAzOlx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgJiM0Mzs9IG5yX3JlY2xhaW1lZDtcbjYwMDQ6XHRcbjYwMDU6XHRcdC8qXG42MDA2Olx0XHQgKiBFdmVuIGlmIHdlIGRpZCBub3QgdHJ5IHRvIGV2aWN0IGFub24gcGFnZXMgYXQgYWxsLCB3ZSB3YW50IHRvXG42MDA3Olx0XHQgKiByZWJhbGFuY2UgdGhlIGFub24gbHJ1IGFjdGl2ZS9pbmFjdGl2ZSByYXRpby5cbjYwMDg6XHRcdCAqL1xuNjAwOTpcdFx0aWYgKGNhbl9hZ2VfYW5vbl9wYWdlcyhscnV2ZWMsIHNjKSBcdTAwMjZcdTAwMjZcbjYwMTA6XHRcdCAgICBpbmFjdGl2ZV9pc19sb3cobHJ1dmVjLCBMUlVfSU5BQ1RJVkVfQU5PTikpXG42MDExOlx0XHRcdHNocmlua19hY3RpdmVfbGlzdChTV0FQX0NMVVNURVJfTUFYLCBscnV2ZWMsXG42MDEyOlx0XHRcdFx0XHQgICBzYywgTFJVX0FDVElWRV9BTk9OKTtcbjYwMTM6XHR9XG42MDE0Olx0XG42MDE1Olx0LyogVXNlIHJlY2xhaW0vY29tcGFjdGlvbiBmb3IgY29zdGx5IGFsbG9jcyBvciB1bmRlciBtZW1vcnkgcHJlc3N1cmUgKi9cbjYwMTY6XHRzdGF0aWMgYm9vbCBpbl9yZWNsYWltX2NvbXBhY3Rpb24oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG42MDE3Olx0e1xuNjAxODpcdFx0aWYgKGdmcF9jb21wYWN0aW9uX2FsbG93ZWQoc2MtXHUwMDNlZ2ZwX21hc2spIFx1MDAyNlx1MDAyNiBzYy1cdTAwM2VvcmRlciBcdTAwMjZcdTAwMjZcbjYwMTk6XHRcdFx0XHQoc2MtXHUwMDNlb3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSIHx8XG42MDIwOlx0XHRcdFx0IHNjLVx1MDAzZXByaW9yaXR5IFx1MDAzYyBERUZfUFJJT1JJVFkgLSAyKSlcbjYwMjE6XHRcdFx0cmV0dXJuIHRydWU7XG42MDIyOlx0XG42MDIzOlx0XHRyZXR1cm4gZmFsc2U7XG42MDI0Olx0fVxuNjAyNTpcdFxuNjAyNjpcdC8qXG42MDI3Olx0ICogUmVjbGFpbS9jb21wYWN0aW9uIGlzIHVzZWQgZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbiByZXF1ZXN0cy4gSXQgcmVjbGFpbXNcbjYwMjg6XHQgKiBvcmRlci0wIHBhZ2VzIGJlZm9yZSBjb21wYWN0aW5nIHRoZSB6b25lLiBzaG91bGRfY29udGludWVfcmVjbGFpbSgpIHJldHVybnNcbjYwMjk6XHQgKiB0cnVlIGlmIG1vcmUgcGFnZXMgc2hvdWxkIGJlIHJlY2xhaW1lZCBzdWNoIHRoYXQgd2hlbiB0aGUgcGFnZSBhbGxvY2F0b3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYHNocmlua19scnV2ZWNgIGFuZCBgbnJfaXNvbGF0ZV9zY2FubmVkYCoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgc2hyaW5rX2xydXZlY2AgYXJvdW5kIGxpbmUgNjAxMSBhbmQgSSYjMzk7bSBpbW1lZGlhdGVseSBjb25jZXJuZWQgYWJvdXQgdGhlIGNhbGwgdG8gYHNocmlua19hY3RpdmVfbGlzdGAuIFNwZWNpZmljYWxseSwgaXMgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgIGluaXRpYWxpemVkICpiZWZvcmUqIHRoaXMgY2FsbD8gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoZSBjb2RlIGxvb2tzIGxpa2UgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgdG8gemVybyBpbnNpZGUgdGhlIGxvb3A6CgpgYGBjCgkJCWlmIChucltscnVdKSB7CgkJCQlucl90b19zY2FuID0gbWluKG5yW2xydV0sIFNXQVBfQ0xVU1RFUl9NQVgpOwoKCQkJCXNjLSZndDtucl9pc29sYXRlX3NjYW5uZWQgPSAwOwoJCQkJbnJfcmVjbGFpbWVkICYjNDM7PSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sCgkJCQkJCQkgICAgbHJ1dmVjLCBzYyk7CmBgYAoKQnV0IHdoYXQgaWYgdGhhdCBsb29wICpkb2VzbiYjMzk7dCogcnVuPyBPciwgZXZlbiB3b3JzZSwgd2hhdCBpZiBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAgcmV0YWlucyBzb21lIGdhcmJhZ2UgdmFsdWUgZnJvbSBhIHByZXZpb3VzIGxvb3AgaXRlcmF0aW9uPyBUaGlzIGNvdWxkIGxlYWQgdG8gYSBzaWduaWZpY2FudCBwcm9ibGVtIGRvd24gdGhlIGxpbmUgaWYgdGhpcyB2YXJpYWJsZSBpcyB1c2VkIGZvciB0cmFja2luZyBwdXJwb3Nlcy4KClRoZW4sIEkgcmVjYWxsIHRoYXQgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgZG9lcyBzZXQgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgIHRvIGEgdmFsdWUuIFRoaXMgc2VlbXMgbGlrZSBpdCBzaG91bGQgcmVzb2x2ZSBhbnkgcHJldmlvdXMgY29uY2VybnMuIFNwZWNpZmljYWxseToKCmBgYGMKCXNjLSZndDtucl9pc29sYXRlX3NjYW5uZWQgPSB0b3RhbF9zY2FuOwpgYGAKCkFoLCByaWdodCwgaXQgKm92ZXJ3cml0ZXMqIHRoZSB2YWx1ZSEgSSBjYW4gc2VlIHRoYXQgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgYWx3YXlzIHNldHMgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgLiBJdCBkb2VzbiYjMzk7dCByZWFkIGZyb20gaXQuIFRoZSBjb25jZXJuIGZvciByZXRhaW5lZCBkYXRhIGlzIGdvbmUuIFRoZSB2YWx1ZSBpcyByZXNldCBwcmlvciB0byB0aGUgY2FsbC4gSSB3YXMgcmlnaHQgdG8gY2hlY2sgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2ODA6XHQgKiBAbHJ1Olx0TFJVIGxpc3QgaWQgZm9yIGlzb2xhdGluZ1xuMTY4MTpcdCAqXG4xNjgyOlx0ICogcmV0dXJucyBob3cgbWFueSBwYWdlcyB3ZXJlIG1vdmVkIG9udG8gKkBkc3QuXG4xNjgzOlx0ICovXG4xNjg0Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbjE2ODU6XHRcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QsXG4xNjg2Olx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBlbnVtIGxydV9saXN0IGxydSlcbjE2ODc6XHR7XG4xNjg4Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpzcmMgPSBcdTAwMjZscnV2ZWMtXHUwMDNlbGlzdHNbbHJ1XTtcbjE2ODk6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4gPSAwO1xuMTY5MDpcdFx0dW5zaWduZWQgbG9uZyBucl96b25lX3Rha2VuW01BWF9OUl9aT05FU10gPSB7IDAgfTtcbjE2OTE6XHRcdHVuc2lnbmVkIGxvbmcgbnJfc2tpcHBlZFtNQVhfTlJfWk9ORVNdID0geyAwLCB9O1xuMTY5MjpcdFx0dW5zaWduZWQgbG9uZyBza2lwcGVkID0gMCwgdG90YWxfc2NhbiA9IDAsIHNjYW4gPSAwO1xuMTY5MzpcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcbjE2OTQ6XHRcdHVuc2lnbmVkIGxvbmcgbWF4X25yX3NraXBwZWQgPSAwO1xuMTY5NTpcdFx0TElTVF9IRUFEKGZvbGlvc19za2lwcGVkKTtcbjE2OTY6XHRcbjE2OTc6XHRcdHdoaWxlIChzY2FuIFx1MDAzYyBucl90b19zY2FuIFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShzcmMpKSB7XG4xNjk4Olx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKm1vdmVfdG8gPSBzcmM7XG4xNjk5Olx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4xNzAwOlx0XG4xNzAxOlx0XHRcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKHNyYyk7XG4xNzAyOlx0XHRcdHByZWZldGNod19wcmV2X2xydV9mb2xpbyhmb2xpbywgc3JjLCBmbGFncyk7XG4xNzAzOlx0XG4xNzA0Olx0XHRcdG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuMTcwNTpcdFx0XHR0b3RhbF9zY2FuICYjNDM7PSBucl9wYWdlcztcbjE3MDY6XHRcbjE3MDc6XHRcdFx0LypcbjE3MDg6XHRcdFx0ICogVXNpbmcgbWF4X25yX3NraXBwZWQgdG8gcHJldmVudCBoYXJkIExPQ0tVUC5cbjE3MDk6XHRcdFx0ICogT25jZSB0aGUgY2FwIGlzIGhpdCwgc3RvcCByYXRoZXIgdGhhbiBmb3JjZS1pc29sYXRpbmc6XG4xNzEwOlx0XHRcdCAqIHJlY2xhaW1pbmcgaW5lbGlnaWJsZSBmb2xpb3Mgb25seSBpbmZsYXRlcyBucl9yZWNsYWltZWRcbjE3MTE6XHRcdFx0ICogaW50byBhIGZhbHNlIHByb2dyZXNzLlxuMTcxMjpcdFx0XHQgKi9cbjE3MTM6XHRcdFx0aWYgKGZvbGlvX3pvbmVudW0oZm9saW8pIFx1MDAzZSBzYy1cdTAwM2VyZWNsYWltX2lkeCkge1xuMTcxNDpcdFx0XHRcdG5yX3NraXBwZWRbZm9saW9fem9uZW51bShmb2xpbyldICYjNDM7PSBucl9wYWdlcztcbjE3MTU6XHRcdFx0XHRtYXhfbnJfc2tpcHBlZCYjNDM7JiM0Mzs7XG4xNzE2Olx0XHRcdFx0aWYgKG1heF9ucl9za2lwcGVkIFx1MDAzZT0gU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEKSB7XG4xNzE3Olx0XHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZmb2xpb3Nfc2tpcHBlZCk7XG4xNzE4Olx0XHRcdFx0XHRicmVhaztcbjE3MTk6XHRcdFx0XHR9XG4xNzIwOlx0XHRcdFx0bW92ZV90byA9IFx1MDAyNmZvbGlvc19za2lwcGVkO1xuMTcyMTpcdFx0XHRcdGdvdG8gbW92ZTtcbjE3MjI6XHRcdFx0fVxuMTcyMzpcdFxuMTcyNDpcdFx0XHQvKlxuMTcyNTpcdFx0XHQgKiBEbyBub3QgY291bnQgc2tpcHBlZCBmb2xpb3MgYmVjYXVzZSB0aGF0IG1ha2VzIHRoZSBmdW5jdGlvblxuMTcyNjpcdFx0XHQgKiByZXR1cm4gd2l0aCBubyBpc29sYXRlZCBmb2xpb3MgaWYgdGhlIExSVSBtb3N0bHkgY29udGFpbnNcbjE3Mjc6XHRcdFx0ICogaW5lbGlnaWJsZSBmb2xpb3MuICBUaGlzIGNhdXNlcyB0aGUgVk0gdG8gbm90IHJlY2xhaW0gYW55XG4xNzI4Olx0XHRcdCAqIGZvbGlvcywgdHJpZ2dlcmluZyBhIHByZW1hdHVyZSBPT00uXG4xNzI5Olx0XHRcdCAqIEFjY291bnQgYWxsIHBhZ2VzIGluIGEgZm9saW8uXG4xNzMwOlx0XHRcdCAqL1xuMTczMTpcdFx0XHRzY2FuICYjNDM7PSBucl9wYWdlcztcbjE3MzI6XHRcbjE3MzM6XHRcdFx0aWYgKCFmb2xpb190ZXN0X2xydShmb2xpbykpXG4xNzM0Olx0XHRcdFx0Z290byBtb3ZlO1xuMTczNTpcdFx0XHRpZiAoIXNjLVx1MDAzZW1heV91bm1hcCBcdTAwMjZcdTAwMjYgZm9saW9fbWFwcGVkKGZvbGlvKSlcbjE3MzY6XHRcdFx0XHRnb3RvIG1vdmU7XG4xNzM3Olx0XG4xNzM4Olx0XHRcdC8qXG4xNzM5Olx0XHRcdCAqIEJlIGNhcmVmdWwgbm90IHRvIGNsZWFyIHRoZSBscnUgZmxhZyB1bnRpbCBhZnRlciB3ZSYjMzk7cmVcbjE3NDA6XHRcdFx0ICogc3VyZSB0aGUgZm9saW8gaXMgbm90IGJlaW5nIGZyZWVkIGVsc2V3aGVyZSAtLSB0aGVcbjE3NDE6XHRcdFx0ICogZm9saW8gcmVsZWFzZSBjb2RlIHJlbGllcyBvbiBpdC5cbjE3NDI6XHRcdFx0ICovXG4xNzQzOlx0XHRcdGlmICh1bmxpa2VseSghZm9saW9fdHJ5X2dldChmb2xpbykpKVxuMTc0NDpcdFx0XHRcdGdvdG8gbW92ZTtcbjE3NDU6XHRcbjE3NDY6XHRcdFx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2xydShmb2xpbykpIHtcbjE3NDc6XHRcdFx0XHQvKiBBbm90aGVyIHRocmVhZCBpcyBhbHJlYWR5IGlzb2xhdGluZyB0aGlzIGZvbGlvICovXG4xNzQ4Olx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjE3NDk6XHRcdFx0XHRnb3RvIG1vdmU7XG4xNzUwOlx0XHRcdH1cbjE3NTE6XHRcbjE3NTI6XHRcdFx0bnJfdGFrZW4gJiM0Mzs9IG5yX3BhZ2VzO1xuMTc1MzpcdFx0XHRucl96b25lX3Rha2VuW2ZvbGlvX3pvbmVudW0oZm9saW8pXSAmIzQzOz0gbnJfcGFnZXM7XG4xNzU0Olx0XHRcdG1vdmVfdG8gPSBkc3Q7XG4xNzU1Olx0bW92ZTpcbjE3NTY6XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgbW92ZV90byk7XG4xNzU3Olx0XHR9XG4xNzU4Olx0XG4xNzU5Olx0XHQvKlxuMTc2MDpcdFx0ICogU3BsaWNlIGFueSBza2lwcGVkIGZvbGlvcyB0byB0aGUgc3RhcnQgb2YgdGhlIExSVSBsaXN0LiBOb3RlIHRoYXRcbjE3NjE6XHRcdCAqIHRoaXMgZGlzcnVwdHMgdGhlIExSVSBvcmRlciB3aGVuIHJlY2xhaW1pbmcgZm9yIGxvd2VyIHpvbmVzIGJ1dFxuMTc2MjpcdFx0ICogd2UgY2Fubm90IHNwbGljZSB0byB0aGUgdGFpbC4gSWYgd2UgZGlkIHRoZW4gdGhlIFNXQVBfQ0xVU1RFUl9NQVhcbjE3NjM6XHRcdCAqIHNjYW5uaW5nIHdvdWxkIHNvb24gcmVzY2FuIHRoZSBzYW1lIGZvbGlvcyB0byBza2lwIGFuZCB3YXN0ZSBsb3RzXG4xNzY0Olx0XHQgKiBvZiBjcHUgY3ljbGVzLlxuMTc2NTpcdFx0ICovXG4xNzY2Olx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2Zm9saW9zX3NraXBwZWQpKSB7XG4xNzY3Olx0XHRcdGludCB6aWQ7XG4xNzY4Olx0XG4xNzY5Olx0XHRcdGxpc3Rfc3BsaWNlKFx1MDAyNmZvbGlvc19za2lwcGVkLCBzcmMpO1xuMTc3MDpcdFx0XHRmb3IgKHppZCA9IDA7IHppZCBcdTAwM2MgTUFYX05SX1pPTkVTOyB6aWQmIzQzOyYjNDM7KSB7XG4xNzcxOlx0XHRcdFx0aWYgKCFucl9za2lwcGVkW3ppZF0pXG4xNzcyOlx0XHRcdFx0XHRjb250aW51ZTtcbjE3NzM6XHRcbjE3NzQ6XHRcdFx0XHRfX2NvdW50X3ppZF92bV9ldmVudHMoUEdTQ0FOX1NLSVAsIHppZCwgbnJfc2tpcHBlZFt6aWRdKTtcbjE3NzU6XHRcdFx0XHRza2lwcGVkICYjNDM7PSBucl9za2lwcGVkW3ppZF07XG4xNzc2Olx0XHRcdH1cbjE3Nzc6XHRcdH1cbjE3Nzg6XHRcdHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCA9IHRvdGFsX3NjYW47XG4xNzc5Olx0XHR0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAwNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBucl9pc29sYXRlX3NjYW5uZWRgIFZhcmlhYmxlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBJJiMzOTt2ZSBjb21lIGFjcm9zcyB0aGlzIGxpbmU6IGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2NhbjtgIGluIGBpc29sYXRlX2xydV9mb2xpb3NgLiBJdCYjMzk7cyBhbiB1bmNvbmRpdGlvbmFsIGFzc2lnbm1lbnQsIHJpZ2h0PyBNZWFuaW5nIGl0IGdldHMgc2V0IG5vIG1hdHRlciB3aGF0IGhhcHBlbnMgYmVmb3JlIGl0LiBTbywgSSB0aG91Z2h0IHRoZSBpbml0aWFsIHZhbHVlIHdvdWxkbiYjMzk7dCBtYXR0ZXIuCgpCdXQgbm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBzaHJpbmtfbHJ1dmVjYC4gVGhlcmUmIzM5O3MgdGhpcyBjb2RlIGJsb2NrOgoKYGBgYwoJCQkJc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZCA9IDA7CgkJCQlucl9yZWNsYWltZWQgJiM0Mzs9IHNocmlua19saXN0KGxydSwgbnJfdG9fc2NhbiwKCQkJCQkJCSAgICBscnV2ZWMsIHNjKTsKCQkJCS8qIC4uLiAqLwoJCQkJbnJbbHJ1XSAtPSBtaW4obnJbbHJ1XSwKCQkJCQkgICAgICAgbWF4KG5yX3RvX3NjYW4sIHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWQpKTsKYGBgCgpXYWl0IGEgbWludXRlLi4uIEhlcmUsIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCBpcyBleHBsaWNpdGx5IHNldCB0byAwLiBUaGVuLCBgc2hyaW5rX2xpc3RgIGdldHMgY2FsbGVkLiBDcnVjaWFsbHksIGlmIGBzaHJpbmtfbGlzdGAgKmRvZXNuJiMzOTt0KiBjYWxsIGBpc29sYXRlX2xydV9mb2xpb3NgLCBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAgd2lsbCAqc3RheSogYXQgMC4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBpc3N1ZS4gVGhlIHN1YnNlcXVlbnQgY2FsY3VsYXRpb25zIGRlcGVuZCBvbiB0aGUgdmFsdWUgb2YgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgLiBTbywgZG9lcyBgc2hyaW5rX2xpc3RgICphbHdheXMqIGNhbGwgYGlzb2xhdGVfbHJ1X2ZvbGlvc2A/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSBmb3IgYHNocmlua19saXN0YCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBhbnkgZGlzY3JlcGFuY3kgYmV0d2VlbiBgbnJfdG9fc2NhbmAgYW5kIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCB3aWxsIGltcGFjdCBob3cgbWFueSBwYWdlcyBhcmUgY29uc2lkZXJlZCBmb3IgcmVjbGFtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMjA6XHR9XG4yMjIxOlx0XG4yMjIyOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbjIyMjM6XHRcdFx0XHRcdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuMjIyNDpcdHtcbjIyMjU6XHRcdGlmIChpc19hY3RpdmVfbHJ1KGxydSkpIHtcbjIyMjY6XHRcdFx0aWYgKHNjLVx1MDAzZW1heV9kZWFjdGl2YXRlIFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgaXNfZmlsZV9scnUobHJ1KSkpXG4yMjI3Olx0XHRcdFx0c2hyaW5rX2FjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIGxydSk7XG4yMjI4Olx0XHRcdGVsc2VcbjIyMjk6XHRcdFx0XHRzYy1cdTAwM2Vza2lwcGVkX2RlYWN0aXZhdGUgPSAxO1xuMjIzMDpcdFx0XHRyZXR1cm4gMDtcbjIyMzE6XHRcdH1cbjIyMzI6XHRcbjIyMzM6XHRcdHJldHVybiBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCBscnV2ZWMsIHNjLCBscnUpO1xuMjIzNDpcdH1cbjIyMzU6XHRcbjIyMzY6XHQvKlxuMjIzNzpcdCAqIFRoZSBpbmFjdGl2ZSBhbm9uIGxpc3Qgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0aGF0IHRoZSBWTSBuZXZlciBoYXNcbjIyMzg6XHQgKiB0byBkbyB0b28gbXVjaCB3b3JrLlxuMjIzOTpcdCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTM3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IFNocmlua2FnZSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYWdhaW4uIFRoZSBzY2VuYXJpbyBJJiMzOTttIGxvb2tpbmcgYXQgaGluZ2VzIG9uIHRoZXNlIGNvbmRpdGlvbnM6IGBpc19hY3RpdmVfbHJ1KGxydSlgIGlzIHRydWUgYW5kIGBzYy0mZ3Q7bWF5X2RlYWN0aXZhdGUgJmFtcDsgKDEgJmx0OyZsdDsgaXNfZmlsZV9scnUobHJ1KSlgIGlzIGZhbHNlLiBJbiB0aGlzIHNwZWNpZmljIGNhc2UsIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGlzIHNraXBwZWQgZW50aXJlbHkuIFRoaXMgbWVhbnMgYHNocmlua19saXN0YCByZXR1cm5zIDAsIGFuZCwgY3J1Y2lhbGx5LCBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAgc3RheXMgYXQgemVyby4KCk5vdywgbG9va2luZyBhdCBob3cgYHNocmlua19scnV2ZWNgIGhhbmRsZXMgdGhpcywgSSBzZWU6CgpgYGBjCm5yW2xydV0gLT0gbWluKG5yW2xydV0sCgkgICAgICAgbWF4KG5yX3RvX3NjYW4sIHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWQpKTsKYGBgCgpTaW5jZSBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAgaXMgemVybyBpbiB0aGlzIHNpdHVhdGlvbiwgYG1heChucl90b19zY2FuLCAwKWAgc2ltcGxpZmllcyB0byBqdXN0IGBucl90b19zY2FuYC4gU28gdGhlIGxpbmUgZWZmZWN0aXZlbHkgYmVjb21lcyBgbnJbbHJ1XSAtPSBtaW4obnJbbHJ1XSwgbnJfdG9fc2NhbilgLiBUaGF0JiMzOTtzIGNvbXBsZXRlbHkgc291bmQ7IGl04oCZcyBkZWNyZW1lbnRpbmcgYG5yW2xydV1gIGJ5IGEgdmFsaWQgdmFsdWUsIG5vdGhpbmcgc3Bvb2t5IGlzIGhhcHBlbmluZyB0aGVyZS4gVGhlcmUmIzM5O3Mgbm8gdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKSG93ZXZlciwgSSYjMzk7bSBnZXR0aW5nIGEgbGl0dGxlIHBhcmFub2lkIG5vdy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gdGFrZSBhIHdpZGVyIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIExldCBtZSBjaGVjayBmb3IgYW55IG90aGVyIG9jY3VycmVuY2VzIG9mIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCBpbiB0aGUgY29kZSBiYXNlLCBqdXN0IHRvIGJlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgc3VidGxlIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgaXNzdWVzIEkmIzM5O20gb3Zlcmxvb2tpbmcuIEkmIzM5O20gZ29pbmcgdG8gZ3JlcCBmb3IgYG5yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtucl9pc29sYXRlX3NjYW5uZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03ND1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbi0tXG5tbS92bXNjYW4uYy0xNjctXHQvKiBOdW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQgZnJvbSBpc29sYXRlX2xydV9mb2xpb3MoKSAqL1xubW0vdm1zY2FuLmM6MTY4Olx0dW5zaWduZWQgbG9uZyBucl9pc29sYXRlX3NjYW5uZWQ7XG5tbS92bXNjYW4uYy0xNjktXG4tLVxubW0vdm1zY2FuLmM9MTY4ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuLS1cbm1tL3Ztc2Nhbi5jLTE3NzctXHR9XG5tbS92bXNjYW4uYzoxNzc4Olx0c2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2Nhbjtcbm1tL3Ztc2Nhbi5jLTE3NzktXHR0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxuLS1cbm1tL3Ztc2Nhbi5jPTE5OTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuLS1cbm1tL3Ztc2Nhbi5jLTIwMjYtXHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFx1MDAyNmZvbGlvX2xpc3QsIHNjLCBscnUpO1xubW0vdm1zY2FuLmM6MjAyNzpcdG5yX3NjYW5uZWQgPSBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQ7XG5tbS92bXNjYW4uYy0yMDI4LVxuLS1cbm1tL3Ztc2Nhbi5jPTIwNzc9c3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbi0tXG5tbS92bXNjYW4uYy0yMDk5LVxubW0vdm1zY2FuLmM6MjEwMDpcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JFRklMTCwgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkKTtcbm1tL3Ztc2Nhbi5jLTIxMDEtXG4tLVxubW0vdm1zY2FuLmM9NTg4Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTkzMC1cbm1tL3Ztc2Nhbi5jOjU5MzE6XHRcdFx0XHRzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQgPSAwO1xubW0vdm1zY2FuLmMtNTkzMi1cdFx0XHRcdG5yX3JlY2xhaW1lZCAmIzQzOz0gc2hyaW5rX2xpc3QobHJ1LCBucl90b19zY2FuLFxuLS1cbm1tL3Ztc2Nhbi5jLTU5NDMtXHRcdFx0XHRucltscnVdIC09IG1pbihucltscnVdLFxubW0vdm1zY2FuLmM6NTk0NDpcdFx0XHRcdFx0ICAgICAgIG1heChucl90b19zY2FuLCBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQpKTtcbm1tL3Ztc2Nhbi5jLTU5NDUtXHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIwNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhZ2UgSXNvbGF0aW9uIExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBJIHNlZSB0aGF0IGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCBpcyBiZWluZyB1c2VkLCBzcGVjaWZpY2FsbHkgcmlnaHQgYWZ0ZXIgY2FsbGluZyBgaXNvbGF0ZV9scnVfZm9saW9zYC4gSSYjMzk7bSB1c2luZyBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gbW9kaWZ5IHBhZ2Ugc3RhdGUgYW5kIGxydXZlYyBzdGF0ZS4gU2luY2UgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgKmFsd2F5cyogc2V0cyBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAsIHRoaXMgbG9va3MgY29ycmVjdCBhdCBmaXJzdCBnbGFuY2UuIEl0IGVuc3VyZXMgdGhlIHN0YXRlIGlzIGNvbnNpc3RlbnQuCgpOb3csIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIHRoZSBzYW1lIHBhdHRlcm4gYXBwZWFycy4gV2UgY2FsbCBgaXNvbGF0ZV9scnVfZm9saW9zYCwgdGhlbiBpbW1lZGlhdGVseSB1c2UgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgLiBBbmQgYWdhaW4sIEkmIzM5O20gcmVseWluZyBvbiBgaXNvbGF0ZV9scnVfZm9saW9zYCB0byBzZXQgdGhpcyB2YWx1ZS4gQnV0IHdhaXQsIGEgbmFnZ2luZyB0aG91Z2h0Li4ud2hhdCBpZiBgaXNvbGF0ZV9scnVfZm9saW9zYCAqZG9lc24mIzM5O3QqIGFsd2F5cyBzZXQgaXQ/IE15IHdob2xlIGxvZ2ljIGhpbmdlcyBvbiB0aGF0IGFzc3VtcHRpb24uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgpJIG5lZWQgdG8gcmUtZXhhbWluZSB0aGUgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgZnVuY3Rpb24gaXRzZWxmLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlLiBBaCwgaGVyZSBpdCBpczogYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWQgPSB0b3RhbF9zY2FuO2AuIFRoaXMgYXNzaWdubWVudCBpcyByaWdodCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiwganVzdCBiZWZvcmUgdGhhdCBgdHJhY2VfbW1fdm1zY2FuX2xydV9pc29sYXRlYCBjYWxsLiBPa2F5LCB0aGF0IGNvbmZpcm1zIG15IGFzc3VtcHRpb24sIGl0ICppcyogc2V0IGF0IHRoZSBlbmQuIEJ1dC4uLiBhcmUgdGhlcmUgYW55IGVhcmx5IHJldHVybnMgaW4gdGhhdCBmdW5jdGlvbj8gSSBuZWVkIHRvIG1ldGljdWxvdXNseSBzY2FuIHRoZSBlbnRpcmUgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgZnVuY3Rpb24gbm93IHRvIGVuc3VyZSBubyBjb25kaXRpb25hbCBwYXRocyBieXBhc3MgdGhpcyBjcml0aWNhbCBhc3NpZ25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY4NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY4NDpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4xNjg1Olx0XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGxpc3RfaGVhZCAqZHN0LFxuMTY4NjpcdFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgZW51bSBscnVfbGlzdCBscnUpXG4xNjg3Olx0e1xuMTY4ODpcdFx0c3RydWN0IGxpc3RfaGVhZCAqc3JjID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxpc3RzW2xydV07XG4xNjg5Olx0XHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuID0gMDtcbjE2OTA6XHRcdHVuc2lnbmVkIGxvbmcgbnJfem9uZV90YWtlbltNQVhfTlJfWk9ORVNdID0geyAwIH07XG4xNjkxOlx0XHR1bnNpZ25lZCBsb25nIG5yX3NraXBwZWRbTUFYX05SX1pPTkVTXSA9IHsgMCwgfTtcbjE2OTI6XHRcdHVuc2lnbmVkIGxvbmcgc2tpcHBlZCA9IDAsIHRvdGFsX3NjYW4gPSAwLCBzY2FuID0gMDtcbjE2OTM6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XG4xNjk0Olx0XHR1bnNpZ25lZCBsb25nIG1heF9ucl9za2lwcGVkID0gMDtcbjE2OTU6XHRcdExJU1RfSEVBRChmb2xpb3Nfc2tpcHBlZCk7XG4xNjk2Olx0XG4xNjk3Olx0XHR3aGlsZSAoc2NhbiBcdTAwM2MgbnJfdG9fc2NhbiBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoc3JjKSkge1xuMTY5ODpcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICptb3ZlX3RvID0gc3JjO1xuMTY5OTpcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMTcwMDpcdFxuMTcwMTpcdFx0XHRmb2xpbyA9IGxydV90b19mb2xpbyhzcmMpO1xuMTcwMjpcdFx0XHRwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oZm9saW8sIHNyYywgZmxhZ3MpO1xuMTcwMzpcdFxuMTcwNDpcdFx0XHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbjE3MDU6XHRcdFx0dG90YWxfc2NhbiAmIzQzOz0gbnJfcGFnZXM7XG4xNzA2Olx0XG4xNzA3Olx0XHRcdC8qXG4xNzA4Olx0XHRcdCAqIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAuXG4xNzA5Olx0XHRcdCAqIE9uY2UgdGhlIGNhcCBpcyBoaXQsIHN0b3AgcmF0aGVyIHRoYW4gZm9yY2UtaXNvbGF0aW5nOlxuMTcxMDpcdFx0XHQgKiByZWNsYWltaW5nIGluZWxpZ2libGUgZm9saW9zIG9ubHkgaW5mbGF0ZXMgbnJfcmVjbGFpbWVkXG4xNzExOlx0XHRcdCAqIGludG8gYSBmYWxzZSBwcm9ncmVzcy5cbjE3MTI6XHRcdFx0ICovXG4xNzEzOlx0XHRcdGlmIChmb2xpb196b25lbnVtKGZvbGlvKSBcdTAwM2Ugc2MtXHUwMDNlcmVjbGFpbV9pZHgpIHtcbjE3MTQ6XHRcdFx0XHRucl9za2lwcGVkW2ZvbGlvX3pvbmVudW0oZm9saW8pXSAmIzQzOz0gbnJfcGFnZXM7XG4xNzE1Olx0XHRcdFx0bWF4X25yX3NraXBwZWQmIzQzOyYjNDM7O1xuMTcxNjpcdFx0XHRcdGlmIChtYXhfbnJfc2tpcHBlZCBcdTAwM2U9IFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRCkge1xuMTcxNzpcdFx0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2Zm9saW9zX3NraXBwZWQpO1xuMTcxODpcdFx0XHRcdFx0YnJlYWs7XG4xNzE5Olx0XHRcdFx0fVxuMTcyMDpcdFx0XHRcdG1vdmVfdG8gPSBcdTAwMjZmb2xpb3Nfc2tpcHBlZDtcbjE3MjE6XHRcdFx0XHRnb3RvIG1vdmU7XG4xNzIyOlx0XHRcdH1cbjE3MjM6XHRcbjE3MjQ6XHRcdFx0LypcbjE3MjU6XHRcdFx0ICogRG8gbm90IGNvdW50IHNraXBwZWQgZm9saW9zIGJlY2F1c2UgdGhhdCBtYWtlcyB0aGUgZnVuY3Rpb25cbjE3MjY6XHRcdFx0ICogcmV0dXJuIHdpdGggbm8gaXNvbGF0ZWQgZm9saW9zIGlmIHRoZSBMUlUgbW9zdGx5IGNvbnRhaW5zXG4xNzI3Olx0XHRcdCAqIGluZWxpZ2libGUgZm9saW9zLiAgVGhpcyBjYXVzZXMgdGhlIFZNIHRvIG5vdCByZWNsYWltIGFueVxuMTcyODpcdFx0XHQgKiBmb2xpb3MsIHRyaWdnZXJpbmcgYSBwcmVtYXR1cmUgT09NLlxuMTcyOTpcdFx0XHQgKiBBY2NvdW50IGFsbCBwYWdlcyBpbiBhIGZvbGlvLlxuMTczMDpcdFx0XHQgKi9cbjE3MzE6XHRcdFx0c2NhbiAmIzQzOz0gbnJfcGFnZXM7XG4xNzMyOlx0XG4xNzMzOlx0XHRcdGlmICghZm9saW9fdGVzdF9scnUoZm9saW8pKVxuMTczNDpcdFx0XHRcdGdvdG8gbW92ZTtcbjE3MzU6XHRcdFx0aWYgKCFzYy1cdTAwM2VtYXlfdW5tYXAgXHUwMDI2XHUwMDI2IGZvbGlvX21hcHBlZChmb2xpbykpXG4xNzM2Olx0XHRcdFx0Z290byBtb3ZlO1xuMTczNzpcdFxuMTczODpcdFx0XHQvKlxuMTczOTpcdFx0XHQgKiBCZSBjYXJlZnVsIG5vdCB0byBjbGVhciB0aGUgbHJ1IGZsYWcgdW50aWwgYWZ0ZXIgd2UmIzM5O3JlXG4xNzQwOlx0XHRcdCAqIHN1cmUgdGhlIGZvbGlvIGlzIG5vdCBiZWluZyBmcmVlZCBlbHNld2hlcmUgLS0gdGhlXG4xNzQxOlx0XHRcdCAqIGZvbGlvIHJlbGVhc2UgY29kZSByZWxpZXMgb24gaXQuXG4xNzQyOlx0XHRcdCAqL1xuMTc0MzpcdFx0XHRpZiAodW5saWtlbHkoIWZvbGlvX3RyeV9nZXQoZm9saW8pKSlcbjE3NDQ6XHRcdFx0XHRnb3RvIG1vdmU7XG4xNzQ1Olx0XG4xNzQ2Olx0XHRcdGlmICghZm9saW9fdGVzdF9jbGVhcl9scnUoZm9saW8pKSB7XG4xNzQ3Olx0XHRcdFx0LyogQW5vdGhlciB0aHJlYWQgaXMgYWxyZWFkeSBpc29sYXRpbmcgdGhpcyBmb2xpbyAqL1xuMTc0ODpcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4xNzQ5Olx0XHRcdFx0Z290byBtb3ZlO1xuMTc1MDpcdFx0XHR9XG4xNzUxOlx0XG4xNzUyOlx0XHRcdG5yX3Rha2VuICYjNDM7PSBucl9wYWdlcztcbjE3NTM6XHRcdFx0bnJfem9uZV90YWtlbltmb2xpb196b25lbnVtKGZvbGlvKV0gJiM0Mzs9IG5yX3BhZ2VzO1xuMTc1NDpcdFx0XHRtb3ZlX3RvID0gZHN0O1xuMTc1NTpcdG1vdmU6XG4xNzU2Olx0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIG1vdmVfdG8pO1xuMTc1NzpcdFx0fVxuMTc1ODpcdFxuMTc1OTpcdFx0LypcbjE3NjA6XHRcdCAqIFNwbGljZSBhbnkgc2tpcHBlZCBmb2xpb3MgdG8gdGhlIHN0YXJ0IG9mIHRoZSBMUlUgbGlzdC4gTm90ZSB0aGF0XG4xNzYxOlx0XHQgKiB0aGlzIGRpc3J1cHRzIHRoZSBMUlUgb3JkZXIgd2hlbiByZWNsYWltaW5nIGZvciBsb3dlciB6b25lcyBidXRcbjE3NjI6XHRcdCAqIHdlIGNhbm5vdCBzcGxpY2UgdG8gdGhlIHRhaWwuIElmIHdlIGRpZCB0aGVuIHRoZSBTV0FQX0NMVVNURVJfTUFYXG4xNzYzOlx0XHQgKiBzY2FubmluZyB3b3VsZCBzb29uIHJlc2NhbiB0aGUgc2FtZSBmb2xpb3MgdG8gc2tpcCBhbmQgd2FzdGUgbG90c1xuMTc2NDpcdFx0ICogb2YgY3B1IGN5Y2xlcy5cbjE3NjU6XHRcdCAqL1xuMTc2NjpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmZvbGlvc19za2lwcGVkKSkge1xuMTc2NzpcdFx0XHRpbnQgemlkO1xuMTc2ODpcdFxuMTc2OTpcdFx0XHRsaXN0X3NwbGljZShcdTAwMjZmb2xpb3Nfc2tpcHBlZCwgc3JjKTtcbjE3NzA6XHRcdFx0Zm9yICh6aWQgPSAwOyB6aWQgXHUwMDNjIE1BWF9OUl9aT05FUzsgemlkJiM0MzsmIzQzOykge1xuMTc3MTpcdFx0XHRcdGlmICghbnJfc2tpcHBlZFt6aWRdKVxuMTc3MjpcdFx0XHRcdFx0Y29udGludWU7XG4xNzczOlx0XG4xNzc0Olx0XHRcdFx0X19jb3VudF96aWRfdm1fZXZlbnRzKFBHU0NBTl9TS0lQLCB6aWQsIG5yX3NraXBwZWRbemlkXSk7XG4xNzc1Olx0XHRcdFx0c2tpcHBlZCAmIzQzOz0gbnJfc2tpcHBlZFt6aWRdO1xuMTc3NjpcdFx0XHR9XG4xNzc3Olx0XHR9XG4xNzc4Olx0XHRzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQgPSB0b3RhbF9zY2FuO1xuMTc3OTpcdFx0dHJhY2VfbW1fdm1zY2FuX2xydV9pc29sYXRlKHNjLVx1MDAzZXJlY2xhaW1faWR4LCBzYy1cdTAwM2VvcmRlciwgbnJfdG9fc2NhbixcbjE3ODA6XHRcdFx0XHRcdCAgICB0b3RhbF9zY2FuLCBza2lwcGVkLCBucl90YWtlbiwgbHJ1KTtcbjE3ODE6XHRcdHVwZGF0ZV9scnVfc2l6ZXMobHJ1dmVjLCBscnUsIG5yX3pvbmVfdGFrZW4pO1xuMTc4MjpcdFx0cmV0dXJuIG5yX3Rha2VuO1xuMTc4MzpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoZSBgaXNvbGF0ZV9scnVfZm9saW9zYCBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgZnVuY3Rpb24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBpdCBjb25zaXN0ZW50bHkgc2VlbXMgdG8gcmVhY2ggYSBjZXJ0YWluIHBvaW50LCBzcGVjaWZpY2FsbHkgd2hlcmUgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWQgPSB0b3RhbF9zY2FuO2AuIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBjb3VudGVyIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCwgd2hpY2ggcHJlc3VtYWJseSB0cmFja3MgdGhlIG51bWJlciBvZiBwYWdlcy9mb2xpb3Mgc2Nhbm5lZCBkdXJpbmcgdGhlIGlzb2xhdGlvbiBwcm9jZXNzLCBpcyAqYWx3YXlzKiBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGBpc29sYXRlX2xydV9mb2xpb3NgIGZ1bmN0aW9uLiBUaGVyZSBhcmVuJiMzOTt0IGFueSBlYXJseSByZXR1cm5zIHRoYXQgd291bGQgcHJldmVudCB0aGlzIGluaXRpYWxpemF0aW9uLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLgoKTm93LCBhIHBvdGVudGlhbCB3cmlua2xlLiBJIG5lZWQgdG8gYmUgc3VyZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgYHNocmlua19hY3RpdmVfbGlzdGAgaXMgY2FsbGVkLiBJdCB3b3VsZCBiZSBpbXBvcnRhbnQgaWYgYHNocmlua19hY3RpdmVfbGlzdGAgaXMgY2FsbGVkIGZyb20gYGtzd2FwZF9hZ2Vfbm9kZWAuCgpNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBpbnZlc3RpZ2F0ZSB0aGUgY2FsbCBwYXRocyB0byBgc2hyaW5rX2FjdGl2ZV9saXN0YCBhbmQsIGluIHBhcnRpY3VsYXIsIHRvIHNjcnV0aW5pemUgYGtzd2FwZF9hZ2Vfbm9kZWAuIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcHJvY2VzcyBpbiBhIHBvdGVudGlhbGx5IHVuZXhwZWN0ZWQgd2F5IHRoYXQgY291bGQgYWZmZWN0IGhvdyBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAgYmVoYXZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4MzEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjgzMTpcdHN0YXRpYyB2b2lkIGtzd2FwZF9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjY4MzI6XHR7XG42ODMzOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG42ODM0Olx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG42ODM1Olx0XG42ODM2Olx0XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xuNjgzNzpcdFx0XHRscnVfZ2VuX2FnZV9ub2RlKHBnZGF0LCBzYyk7XG42ODM4Olx0XG42ODM5Olx0XHRcdGlmICghbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcbjY4NDA6XHRcdFx0XHRyZXR1cm47XG42ODQxOlx0XG42ODQyOlx0XHR9XG42ODQzOlx0XG42ODQ0Olx0XHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhOVUxMLCBwZ2RhdCk7XG42ODQ1Olx0XHRpZiAoIWNhbl9hZ2VfYW5vbl9wYWdlcyhscnV2ZWMsIHNjKSlcbjY4NDY6XHRcdFx0cmV0dXJuO1xuNjg0NzpcdFxuNjg0ODpcdFx0aWYgKCFpbmFjdGl2ZV9pc19sb3cobHJ1dmVjLCBMUlVfSU5BQ1RJVkVfQU5PTikpXG42ODQ5Olx0XHRcdHJldHVybjtcbjY4NTA6XHRcbjY4NTE6XHRcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpO1xuNjg1MjpcdFx0ZG8ge1xuNjg1MzpcdFx0XHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuNjg1NDpcdFx0XHRzaHJpbmtfYWN0aXZlX2xpc3QoU1dBUF9DTFVTVEVSX01BWCwgbHJ1dmVjLFxuNjg1NTpcdFx0XHRcdFx0ICAgc2MsIExSVV9BQ1RJVkVfQU5PTik7XG42ODU2Olx0XHRcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKTtcbjY4NTc6XHRcdH0gd2hpbGUgKG1lbWNnKTtcbjY4NTg6XHR9XG42ODU5Olx0XG42ODYwOlx0c3RhdGljIGJvb2wgcGdkYXRfd2F0ZXJtYXJrX2Jvb3N0ZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbjY4NjE6XHR7XG42ODYyOlx0XHRpbnQgaTtcbjY4NjM6XHRcdHN0cnVjdCB6b25lICp6b25lO1xuNjg2NDpcdFxuNjg2NTpcdFx0LypcbjY4NjY6XHRcdCAqIENoZWNrIGZvciB3YXRlcm1hcmsgYm9vc3RzIHRvcC1kb3duIGFzIHRoZSBoaWdoZXIgem9uZXNcbjY4Njc6XHRcdCAqIGFyZSBtb3JlIGxpa2VseSB0byBiZSBib29zdGVkLiBCb3RoIHdhdGVybWFya3MgYW5kIGJvb3N0c1xuNjg2ODpcdFx0ICogc2hvdWxkIG5vdCBiZSBjaGVja2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgcmVjbGFpbSB3b3VsZFxuNjg2OTpcdFx0ICogc3RhcnQgcHJlbWF0dXJlbHkgd2hlbiB0aGVyZSBpcyBubyBib29zdGluZyBhbmQgYSBsb3dlclxuNjg3MDpcdFx0ICogem9uZSBpcyBiYWxhbmNlZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0ODQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlnZ2luZyBpbnRvIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBOdWFuY2VzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGlzIGBrc3dhcGRfYWdlX25vZGVgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgc2hyaW5rX2FjdGl2ZV9saXN0YC4gUmlnaHQsIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YCBjYWxscyBgaXNvbGF0ZV9scnVfZm9saW9zYC4gTm93LCB0aGF0IGBpc29sYXRlX2xydV9mb2xpb3NgIGZ1bmN0aW9uLCBJIHJlbWVtYmVyIGl0IHNldHMgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgLiBBbmQgdGhlbiwgd2l0aGluIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGl0c2VsZiwgaXQgdXNlcyB0aGF0IHZlcnkgdmFsdWUsIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCwgd2hlbiBpdCBjYWxscyBgbW9kX2xydXZlY19zdGF0ZWAuIFNlZW1zIHNvbGlkIC0gdGhlIHZhcmlhYmxlIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0JiMzOTtzIHVzZWQsIHdoaWNoIGlzIGdvb2QuIFdl4oCZcmUgc2FmZSB0aGVyZS4KCkhvbGQgb24uLi4gYSBuYWdnaW5nIHRob3VnaHQuIFdoYXQgaWYgYHNocmlua19pbmFjdGl2ZV9saXN0YCBpcyBjYWxsZWQgKnNvbWV3aGVyZSogZWxzZSBiZXNpZGVzIGp1c3QgaW5zaWRlIGBzaHJpbmtfbGlzdGA/IFRoYXQgd291bGQgdGhyb3cgYSB3cmVuY2ggaW50byB0aGlzLiBMZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBjYWxsIHNpdGVzIGZvciBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGp1c3QgdG8gYmUgY2VydGFpbi4gWWVzLCBJJiMzOTtsbCBnbyB0aHJvdWdoIHRoZSBjYWxsIHN0YWNrIGZvciB0aGF0IGZ1bmN0aW9uIGFuZCBtYWtlIHN1cmUuIEEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBzaG91bGQgZG8gdGhlIHRyaWNrLiBXZSBoYXZlIHRvIGJlIHRob3JvdWdoIGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MTk1Mz1zdGF0aWMgdm9pZCBoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sodW5zaWduZWQgbG9uZyBucl90YWtlbixcbi0tXG5tbS92bXNjYW4uYy0xOTkxLS8qXG5tbS92bXNjYW4uYzoxOTkyOiAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19ub2RlKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXJcbm1tL3Ztc2Nhbi5jLTE5OTMtICogb2YgcmVjbGFpbWVkIHBhZ2VzXG5tbS92bXNjYW4uYy0xOTk0LSAqL1xubW0vdm1zY2FuLmM6MTk5NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG5tbS92bXNjYW4uYy0xOTk2LVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jPTIyMjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbi0tXG5tbS92bXNjYW4uYy0yMjMyLVxubW0vdm1zY2FuLmM6MjIzMzpcdHJldHVybiBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCBscnV2ZWMsIHNjLCBscnUpO1xubW0vdm1zY2FuLmMtMjIzNC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTkzCgkJCQkJCQlvdXRwdXQ6IDIzNQoJCQkJCQkJdGhvdWdodHM6IDIzNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFZNIFJlY2xhaW0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyB0b3VjaGluZyB0aGUgY29yZSBWTSByZWNsYWltIGxvZ2ljLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSByZXBsYWNpbmcgYW4gb3V0cHV0IHBhcmFtZXRlciAoYHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWRgKSB3aXRoIGEgbmV3IGZpZWxkIHdpdGhpbiB0aGUgYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHN0cnVjdHVyZSAoYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgKS4gSXQmIzM5O3MgYWxsIGFib3V0IGhvdyB0aGUgbnVtYmVyIG9mIHNjYW5uZWQgcGFnZXMgaXMgcGFzc2VkIGFyb3VuZCB3aXRoaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AuCgpGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgc2hyaW5rX2xpc3RgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgY2FsbHMgYHNocmlua19pbmFjdGl2ZV9saXN0YC4gTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCBnZXR0aW5nIGluaXRpYWxpemVkIGNvcnJlY3RseT8gTG9va2luZyBhdCBgc2hyaW5rX2xydXZlY2AsIEkgc2VlIGl0IGV4cGxpY2l0bHkgc2V0cyBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gMCBiZWZvcmUgY2FsbGluZyBgc2hyaW5rX2xpc3RgLiBBbmQsIGlmIGBpc29sYXRlX2xydV9mb2xpb3NgIHJldHVybnMgZWFybHkgKGUuZy4sIGFjdGl2ZSBsaXN0IGFuZCBubyBkZWFjdGl2YXRlKSwgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgIHJlbWFpbnMgYXQgMCwgbWFraW5nIHRoZSBzdWJzZXF1ZW50IGBtYXgoKWAgY2FsbCBwZXJmZWN0bHkgc2FmZS4KCkkgZ3JlcHBlZCBmb3IgYWxsIGluc3RhbmNlcyBvZiBgbnJfaXNvbGF0ZV9zY2FubmVkYCB0byBlbnN1cmUgaXQmIzM5O3MgdXNlZCBjb3JyZWN0bHkuIEl0JiMzOTtzIGFkZGVkIHRvIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCwgYXNzaWduZWQgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AsIGFuZCByZWFkIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBhbmQgYHNocmlua19scnV2ZWNgLiBTbywgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBubyB3YXkgZm9yIGBzYy0mZ3Q7bnJfaXNvbGF0ZV9zY2FubmVkYCB0byBiZSByZWFkIHdpdGhvdXQgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoaXMgbWFrZXMgbWUgY29uZmlkZW50IHRoYXQgdGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBqdXN0IGEgcmVmYWN0b3JpbmcuIEl0IHJlbW92ZXMgYW4gYG5yX3NjYW5uZWRgIHBvaW50ZXIgYXJndW1lbnQgZnJvbSBgaXNvbGF0ZV9scnVfZm9saW9zYCBhbmQgdXBkYXRlcyB0aGUgY2FsbGVycyB0byB1c2UgdGhlIG5ldyBgc2MtJmd0O25yX2lzb2xhdGVfc2Nhbm5lZGAgZmllbGQuIFRoZSBsb2dpYyBjaGFuZ2UgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgdG8gYnJlYWsgZWFybHkgaWYgYG1heF9ucl9za2lwcGVkICZndDs9IFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRGAgcHJldmVudHMgaGFyZCBsb2NrdXBzLgoKTm8sIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBpbmZvcm1hdGlvbiBsZWFrcyBvciBjaGFuZ2VzIHRoYXQgaW52b2x2ZSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gSXQgYWxzbyBkb2VzbiYjMzk7dCBtb2RpZnkgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLiBTaW5jZSB0aGUgY2hhbmdlcyBhcmUgaW50ZXJuYWwgdG8gdGhlIFZNIHJlY2xhaW0gbG9naWMsIGFueSBidWdzIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBidWdzLCBvdXQtb2YtYm91bmRzIGVycm9ycywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gVGhlc2UgYXJlIGJlc3QgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMsIHNvIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uCgpJIGp1c3Qgd2VudCB0aHJvdWdoIHRoZSBkaWZmIGFnYWluIGZvciBhIGZpbmFsIHJldmlldy4gVGhlIGNoYW5nZXMgbG9vayBzdHJhaWdodGZvcndhcmQsIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHNjLSZndDtucl9pc29sYXRlX3NjYW5uZWRgIHNlZW1zIGNvcnJlY3QgaW4gYWxsIHBsYWNlcy4gU28sIEkgYW0gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIFZNIHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgaW50cm9kdWNlcyBhIG5ldyBmaWVsZCBgbnJfaXNvbGF0ZV9zY2FubmVkYCB0byBgc3RydWN0IHNjYW5fY29udHJvbGAgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBzY2FubmVkIHBhZ2VzLCByZXBsYWNpbmcgYW4gb3V0cHV0IHBvaW50ZXIgYXJndW1lbnQgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvcygpYC4gVGhlIGZpZWxkIGlzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgdXNlIChlaXRoZXIgZXhwbGljaXRseSB0byAwIGluIGBzaHJpbmtfbHJ1dmVjKClgIG9yIHVuY29uZGl0aW9uYWxseSBhc3NpZ25lZCBhdCB0aGUgZW5kIG9mIGBpc29sYXRlX2xydV9mb2xpb3MoKWApLiBUaGUgcGF0Y2ggYWxzbyBjaGFuZ2VzIHRoZSBsb2dpYyB0byBzdG9wIGlzb2xhdGluZyBmb2xpb3Mgd2hlbiBhIHNraXAgdGhyZXNob2xkIGlzIHJlYWNoZWQuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkbyBub3QgaW52b2x2ZSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBWTSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0IGludHJvZHVjZXMgYSBuZXcgZmllbGQgYG5yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHRvIHRyYWNrIHRoZSBudW1iZXIgb2Ygc2Nhbm5lZCBwYWdlcywgcmVwbGFjaW5nIGFuIG91dHB1dCBwb2ludGVyIGFyZ3VtZW50IGluIGBpc29sYXRlX2xydV9mb2xpb3MoKWAuIFRoZSBmaWVsZCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoZWl0aGVyIGV4cGxpY2l0bHkgdG8gMCBpbiBgc2hyaW5rX2xydXZlYygpYCBvciB1bmNvbmRpdGlvbmFsbHkgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiBgaXNvbGF0ZV9scnVfZm9saW9zKClgKS4gVGhlIHBhdGNoIGFsc28gY2hhbmdlcyB0aGUgbG9naWMgdG8gc3RvcCBpc29sYXRpbmcgZm9saW9zIHdoZW4gYSBza2lwIHRocmVzaG9sZCBpcyByZWFjaGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZG8gbm90IGludm9sdmUgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAxOjA3LjEzODg0NDg0OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTAzMjk3NzAyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiSElCRVJOQVRJT05cIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJzaHJpbmtfYWxsX21lbW9yeVwiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwibWVtX2Nncm91cF9zaHJpbmtfbm9kZVwiLFxuICAgIFwibm9kZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgVk0gcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZpZWxkIGBucl9pc29sYXRlX3NjYW5uZWRgIHRvIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIHNjYW5uZWQgcGFnZXMsIHJlcGxhY2luZyBhbiBvdXRwdXQgcG9pbnRlciBhcmd1bWVudCBpbiBgaXNvbGF0ZV9scnVfZm9saW9zKClgLiBUaGUgZmllbGQgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKGVpdGhlciBleHBsaWNpdGx5IHRvIDAgaW4gYHNocmlua19scnV2ZWMoKWAgb3IgdW5jb25kaXRpb25hbGx5IGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgYGlzb2xhdGVfbHJ1X2ZvbGlvcygpYCkuIFRoZSBwYXRjaCBhbHNvIGNoYW5nZXMgdGhlIGxvZ2ljIHRvIHN0b3AgaXNvbGF0aW5nIGZvbGlvcyB3aGVuIGEgc2tpcCB0aHJlc2hvbGQgaXMgcmVhY2hlZC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IGludGVybmFsIHRvIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZG8gbm90IGludm9sdmUgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgYW5kIGBzaHJpbmtfbHJ1dmVjYCB0byBwcmV2ZW50IGhhcmQgbG9ja3VwcyBieSBjYXBwaW5nIHRoZSBudW1iZXIgb2Ygc2tpcHBlZCBpbmVsaWdpYmxlIGZvbGlvcyBhbmQgYWRqdXN0aW5nIHRoZSBzY2FuIHF1b3RhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdmFyaW91cyByZWNsYWltIHBhdGhzIChlLmcuLCBjZ3JvdXAgcmVjbGFpbSwgcHJvYWN0aXZlIHJlY2xhaW0sIGhpYmVybmF0aW9uKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDE6MDcuMTM4ODUwNDQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ4NTI3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NDc4M2FlNzY2MTI5MGIwMTNiMGFjMWFlYmQ4YWMxYzIxZDNiMmJmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDA4OjAxOjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCA1NjcwOGQxZDJkZmQ1Li5hYzMyMzdhNThjYjI5IDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMTY0LDYgKzE2NCw5IEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xcbiBcXHQvKiBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGluYWN0aXZlIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkICovXFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcXG4gXFxuK1xcdC8qIE51bWJlciBvZiBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCBmcm9tIGlzb2xhdGVfbHJ1X2ZvbGlvcygpICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfaXNvbGF0ZV9zY2FubmVkO1xcbitcXG4gXFx0LyogTnVtYmVyIG9mIHBhZ2VzIGZyZWVkIHNvIGZhciBkdXJpbmcgYSBjYWxsIHRvIHNocmlua196b25lcygpICovXFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkO1xcbiBcXG5AQCAtMTY3Myw3ICsxNjc2LDYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiAgKiBAbnJfdG9fc2NhbjpcXHRUaGUgbnVtYmVyIG9mIGVsaWdpYmxlIHBhZ2VzIHRvIGxvb2sgdGhyb3VnaCBvbiB0aGUgbGlzdC5cXG4gICogQGxydXZlYzpcXHRUaGUgTFJVIHZlY3RvciB0byBwdWxsIHBhZ2VzIGZyb20uXFxuICAqIEBkc3Q6XFx0VGhlIHRlbXAgbGlzdCB0byBwdXQgcGFnZXMgb24gdG8uXFxuLSAqIEBucl9zY2FubmVkOlxcdFRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQuXFxuICAqIEBzYzpcXHRcXHRUaGUgc2Nhbl9jb250cm9sIHN0cnVjdCBmb3IgdGhpcyByZWNsYWltIHNlc3Npb25cXG4gICogQGxydTpcXHRMUlUgbGlzdCBpZCBmb3IgaXNvbGF0aW5nXFxuICAqXFxuQEAgLTE2ODEsOCArMTY4Myw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1cGRhdGVfbHJ1X3NpemVzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gICovXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuIFxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGxpc3RfaGVhZCAqZHN0LFxcbi1cXHRcXHR1bnNpZ25lZCBsb25nICpucl9zY2FubmVkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tXFx0XFx0ZW51bSBscnVfbGlzdCBscnUpXFxuK1xcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBlbnVtIGxydV9saXN0IGxydSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkICpzcmMgPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VsaXN0c1tscnVdO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuID0gMDtcXG5AQCAtMTcwMywxMiArMTcwNCwyMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRcXHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gXFx0XFx0dG90YWxfc2NhbiArPSBucl9wYWdlcztcXG4gXFxuLVxcdFxcdC8qIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAqL1xcbi1cXHRcXHRpZiAobWF4X25yX3NraXBwZWQgXFx1MDAzYyBTV0FQX0NMVVNURVJfTUFYX1NLSVBQRUQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIChmb2xpb196b25lbnVtKGZvbGlvKSBcXHUwMDNlIHNjLVxcdTAwM2VyZWNsYWltX2lkeCkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVXNpbmcgbWF4X25yX3NraXBwZWQgdG8gcHJldmVudCBoYXJkIExPQ0tVUC5cXG4rXFx0XFx0ICogT25jZSB0aGUgY2FwIGlzIGhpdCwgc3RvcCByYXRoZXIgdGhhbiBmb3JjZS1pc29sYXRpbmc6XFxuK1xcdFxcdCAqIHJlY2xhaW1pbmcgaW5lbGlnaWJsZSBmb2xpb3Mgb25seSBpbmZsYXRlcyBucl9yZWNsYWltZWRcXG4rXFx0XFx0ICogaW50byBhIGZhbHNlIHByb2dyZXNzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGZvbGlvX3pvbmVudW0oZm9saW8pIFxcdTAwM2Ugc2MtXFx1MDAzZXJlY2xhaW1faWR4KSB7XFxuIFxcdFxcdFxcdG5yX3NraXBwZWRbZm9saW9fem9uZW51bShmb2xpbyldICs9IG5yX3BhZ2VzO1xcbi1cXHRcXHRcXHRtb3ZlX3RvID0gXFx1MDAyNmZvbGlvc19za2lwcGVkO1xcbiBcXHRcXHRcXHRtYXhfbnJfc2tpcHBlZCsrO1xcbitcXHRcXHRcXHRpZiAobWF4X25yX3NraXBwZWQgXFx1MDAzZT0gU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEKSB7XFxuK1xcdFxcdFxcdFxcdGxpc3RfbW92ZShcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmZvbGlvc19za2lwcGVkKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0bW92ZV90byA9IFxcdTAwMjZmb2xpb3Nfc2tpcHBlZDtcXG4gXFx0XFx0XFx0Z290byBtb3ZlO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xNzY2LDcgKzE3NzUsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRcXHRcXHRza2lwcGVkICs9IG5yX3NraXBwZWRbemlkXTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcdCpucl9zY2FubmVkID0gdG90YWxfc2NhbjtcXG4rXFx0c2MtXFx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCA9IHRvdGFsX3NjYW47XFxuIFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfaXNvbGF0ZShzYy1cXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVxcdTAwM2VvcmRlciwgbnJfdG9fc2NhbixcXG4gXFx0XFx0XFx0XFx0ICAgIHRvdGFsX3NjYW4sIHNraXBwZWQsIG5yX3Rha2VuLCBscnUpO1xcbiBcXHR1cGRhdGVfbHJ1X3NpemVzKGxydXZlYywgbHJ1LCBucl96b25lX3Rha2VuKTtcXG5AQCAtMjAxNCw4ICsyMDIzLDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXG4gXFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XFxuIFxcbi1cXHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFxcdTAwMjZmb2xpb19saXN0LFxcbi1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZucl9zY2FubmVkLCBzYywgbHJ1KTtcXG4rXFx0bnJfdGFrZW4gPSBpc29sYXRlX2xydV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBcXHUwMDI2Zm9saW9fbGlzdCwgc2MsIGxydSk7XFxuK1xcdG5yX3NjYW5uZWQgPSBzYy1cXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkO1xcbiBcXG4gXFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgZmlsZSwgbnJfdGFrZW4pO1xcbiBcXHRpdGVtID0gUEdTQ0FOX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xcbkBAIC0yMDcxLDcgKzIwODAsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRcXHRcXHQgICAgICAgZW51bSBscnVfbGlzdCBscnUpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl90YWtlbjtcXG4tXFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xcbiBcXHR2bV9mbGFnc190IHZtX2ZsYWdzO1xcbiBcXHRMSVNUX0hFQUQobF9ob2xkKTtcXHQvKiBUaGUgZm9saW9zIHdoaWNoIHdlcmUgc25pcHBlZCBvZmYgKi9cXG4gXFx0TElTVF9IRUFEKGxfYWN0aXZlKTtcXG5AQCAtMjA4NSwxMiArMjA5MywxMSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXG4gXFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XFxuIFxcbi1cXHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFxcdTAwMjZsX2hvbGQsXFxuLVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm5yX3NjYW5uZWQsIHNjLCBscnUpO1xcbitcXHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFxcdTAwMjZsX2hvbGQsIHNjLCBscnUpO1xcbiBcXG4gXFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgZmlsZSwgbnJfdGFrZW4pO1xcbiBcXG4tXFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBucl9zY2FubmVkKTtcXG4rXFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBzYy1cXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkKTtcXG4gXFxuIFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuIFxcbkBAIC01OTIwLDEwICs1OTI3LDIxIEBAIHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gXFx0XFx0Zm9yX2VhY2hfZXZpY3RhYmxlX2xydShscnUpIHtcXG4gXFx0XFx0XFx0aWYgKG5yW2xydV0pIHtcXG4gXFx0XFx0XFx0XFx0bnJfdG9fc2NhbiA9IG1pbihucltscnVdLCBTV0FQX0NMVVNURVJfTUFYKTtcXG4tXFx0XFx0XFx0XFx0bnJbbHJ1XSAtPSBucl90b19zY2FuO1xcbiBcXG4rXFx0XFx0XFx0XFx0c2MtXFx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCA9IDA7XFxuIFxcdFxcdFxcdFxcdG5yX3JlY2xhaW1lZCArPSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBscnV2ZWMsIHNjKTtcXG4rXFx0XFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0XFx0ICogaXNvbGF0ZV9scnVfZm9saW9zKCkgbWF5IHNjYW4gZmFyIG1vcmVcXG4rXFx0XFx0XFx0XFx0ICogdGhhbiBucl90b19zY2FuIHdoZW4gdGhlIExSVSBob2xkc1xcbitcXHRcXHRcXHRcXHQgKiBpbmVsaWdpYmxlIGZvbGlvcyAoem9uZS1za2lwKSBvciBsYXJnZVxcbitcXHRcXHRcXHRcXHQgKiBmb2xpb3MuIENoYXJnZSB0aGF0IG92ZXJzaG9vdCBhZ2FpbnN0IHRoZVxcbitcXHRcXHRcXHRcXHQgKiByZW1haW5pbmcgcXVvdGEgKGNsYW1wZWQgYnkgbWluKCkgc28gaXRcXG4rXFx0XFx0XFx0XFx0ICogY2Fubm90IGdvIG5lZ2F0aXZlKSBzbyB0aGUgbmV4dCBpdGVyYXRpb25cXG4rXFx0XFx0XFx0XFx0ICogZG9lcyBub3QgcmVzY2FuIHRoZSBzYW1lIHNraXBwZWQgZm9saW9zLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0bnJbbHJ1XSAtPSBtaW4obnJbbHJ1XSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG1heChucl90b19zY2FuLCBzYy1cXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkKSk7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDE6MDcuNjA0Mzk1OTYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI0OTE0NzI1Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJISUJFUk5BVElPTlwiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIixcbiAgICBcInNocmlua19hbGxfbWVtb3J5XCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJtZW1fY2dyb3VwX3Nocmlua19ub2RlXCIsXG4gICAgXCJub2RlX3JlY2xhaW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgaXNvbGF0ZV9scnVfZm9saW9zYCBhbmQgYHNocmlua19scnV2ZWNgIHRvIHByZXZlbnQgaGFyZCBsb2NrdXBzIGJ5IGNhcHBpbmcgdGhlIG51bWJlciBvZiBza2lwcGVkIGluZWxpZ2libGUgZm9saW9zIGFuZCBhZGp1c3RpbmcgdGhlIHNjYW4gcXVvdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB2YXJpb3VzIHJlY2xhaW0gcGF0aHMgKGUuZy4sIGNncm91cCByZWNsYWltLCBwcm9hY3RpdmUgcmVjbGFpbSwgaGliZXJuYXRpb24pLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NDc4M2FlNzY2MTI5MGIwMTNiMGFjMWFlYmQ4YWMxYzIxZDNiMmJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDg6MDE6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1NjcwOGQxZDJkZmQ1Li5hYzMyMzdhNThjYjI5IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTY0LDYgKzE2NCw5IEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuIFx0LyogSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBpbmFjdGl2ZSBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xuIFxuK1x0LyogTnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkIGZyb20gaXNvbGF0ZV9scnVfZm9saW9zKCkgKi9cbitcdHVuc2lnbmVkIGxvbmcgbnJfaXNvbGF0ZV9zY2FubmVkO1xuK1xuIFx0LyogTnVtYmVyIG9mIHBhZ2VzIGZyZWVkIHNvIGZhciBkdXJpbmcgYSBjYWxsIHRvIHNocmlua196b25lcygpICovXG4gXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcbiBcbkBAIC0xNjczLDcgKzE2NzYsNiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdXBkYXRlX2xydV9zaXplcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gICogQG5yX3RvX3NjYW46XHRUaGUgbnVtYmVyIG9mIGVsaWdpYmxlIHBhZ2VzIHRvIGxvb2sgdGhyb3VnaCBvbiB0aGUgbGlzdC5cbiAgKiBAbHJ1dmVjOlx0VGhlIExSVSB2ZWN0b3IgdG8gcHVsbCBwYWdlcyBmcm9tLlxuICAqIEBkc3Q6XHRUaGUgdGVtcCBsaXN0IHRvIHB1dCBwYWdlcyBvbiB0by5cbi0gKiBAbnJfc2Nhbm5lZDpcdFRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQuXG4gICogQHNjOlx0XHRUaGUgc2Nhbl9jb250cm9sIHN0cnVjdCBmb3IgdGhpcyByZWNsYWltIHNlc3Npb25cbiAgKiBAbHJ1Olx0TFJVIGxpc3QgaWQgZm9yIGlzb2xhdGluZ1xuICAqXG5AQCAtMTY4MSw4ICsxNjgzLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuICAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGxpc3RfaGVhZCAqZHN0LFxuLVx0XHR1bnNpZ25lZCBsb25nICpucl9zY2FubmVkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi1cdFx0ZW51bSBscnVfbGlzdCBscnUpXG4rXHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBlbnVtIGxydV9saXN0IGxydSlcbiB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICpzcmMgPSBcdTAwMjZscnV2ZWMtXHUwMDNlbGlzdHNbbHJ1XTtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4gPSAwO1xuQEAgLTE3MDMsMTIgKzE3MDQsMjAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0bnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdHRvdGFsX3NjYW4gKz0gbnJfcGFnZXM7XG4gXG4tXHRcdC8qIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAqL1xuLVx0XHRpZiAobWF4X25yX3NraXBwZWQgXHUwMDNjIFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIChmb2xpb196b25lbnVtKGZvbGlvKSBcdTAwM2Ugc2MtXHUwMDNlcmVjbGFpbV9pZHgpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAuXG4rXHRcdCAqIE9uY2UgdGhlIGNhcCBpcyBoaXQsIHN0b3AgcmF0aGVyIHRoYW4gZm9yY2UtaXNvbGF0aW5nOlxuK1x0XHQgKiByZWNsYWltaW5nIGluZWxpZ2libGUgZm9saW9zIG9ubHkgaW5mbGF0ZXMgbnJfcmVjbGFpbWVkXG4rXHRcdCAqIGludG8gYSBmYWxzZSBwcm9ncmVzcy5cbitcdFx0ICovXG4rXHRcdGlmIChmb2xpb196b25lbnVtKGZvbGlvKSBcdTAwM2Ugc2MtXHUwMDNlcmVjbGFpbV9pZHgpIHtcbiBcdFx0XHRucl9za2lwcGVkW2ZvbGlvX3pvbmVudW0oZm9saW8pXSArPSBucl9wYWdlcztcbi1cdFx0XHRtb3ZlX3RvID0gXHUwMDI2Zm9saW9zX3NraXBwZWQ7XG4gXHRcdFx0bWF4X25yX3NraXBwZWQrKztcbitcdFx0XHRpZiAobWF4X25yX3NraXBwZWQgXHUwMDNlPSBTV0FQX0NMVVNURVJfTUFYX1NLSVBQRUQpIHtcbitcdFx0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmZvbGlvc19za2lwcGVkKTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0XHRtb3ZlX3RvID0gXHUwMDI2Zm9saW9zX3NraXBwZWQ7XG4gXHRcdFx0Z290byBtb3ZlO1xuIFx0XHR9XG4gXG5AQCAtMTc2Niw3ICsxNzc1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0XHRza2lwcGVkICs9IG5yX3NraXBwZWRbemlkXTtcbiBcdFx0fVxuIFx0fVxuLVx0Km5yX3NjYW5uZWQgPSB0b3RhbF9zY2FuO1xuK1x0c2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2NhbjtcbiBcdHRyYWNlX21tX3Ztc2Nhbl9scnVfaXNvbGF0ZShzYy1cdTAwM2VyZWNsYWltX2lkeCwgc2MtXHUwMDNlb3JkZXIsIG5yX3RvX3NjYW4sXG4gXHRcdFx0XHQgICAgdG90YWxfc2Nhbiwgc2tpcHBlZCwgbnJfdGFrZW4sIGxydSk7XG4gXHR1cGRhdGVfbHJ1X3NpemVzKGxydXZlYywgbHJ1LCBucl96b25lX3Rha2VuKTtcbkBAIC0yMDE0LDggKzIwMjMsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbi1cdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2Zm9saW9fbGlzdCxcbi1cdFx0XHRcdCAgICAgXHUwMDI2bnJfc2Nhbm5lZCwgc2MsIGxydSk7XG4rXHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFx1MDAyNmZvbGlvX2xpc3QsIHNjLCBscnUpO1xuK1x0bnJfc2Nhbm5lZCA9IHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZDtcbiBcbiBcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIGZpbGUsIG5yX3Rha2VuKTtcbiBcdGl0ZW0gPSBQR1NDQU5fS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XG5AQCAtMjA3MSw3ICsyMDgwLDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0XHQgICAgICAgZW51bSBscnVfbGlzdCBscnUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl90YWtlbjtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcbiBcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XG4gXHRMSVNUX0hFQUQobF9ob2xkKTtcdC8qIFRoZSBmb2xpb3Mgd2hpY2ggd2VyZSBzbmlwcGVkIG9mZiAqL1xuIFx0TElTVF9IRUFEKGxfYWN0aXZlKTtcbkBAIC0yMDg1LDEyICsyMDkzLDExIEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbi1cdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2bF9ob2xkLFxuLVx0XHRcdFx0ICAgICBcdTAwMjZucl9zY2FubmVkLCBzYywgbHJ1KTtcbitcdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2bF9ob2xkLCBzYywgbHJ1KTtcbiBcbiBcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIGZpbGUsIG5yX3Rha2VuKTtcbiBcbi1cdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JFRklMTCwgbnJfc2Nhbm5lZCk7XG4rXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdSRUZJTEwsIHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCk7XG4gXG4gXHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xuIFxuQEAgLTU5MjAsMTAgKzU5MjcsMjEgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFx0XHRmb3JfZWFjaF9ldmljdGFibGVfbHJ1KGxydSkge1xuIFx0XHRcdGlmIChucltscnVdKSB7XG4gXHRcdFx0XHRucl90b19zY2FuID0gbWluKG5yW2xydV0sIFNXQVBfQ0xVU1RFUl9NQVgpO1xuLVx0XHRcdFx0bnJbbHJ1XSAtPSBucl90b19zY2FuO1xuIFxuK1x0XHRcdFx0c2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gMDtcbiBcdFx0XHRcdG5yX3JlY2xhaW1lZCArPSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sXG4gXHRcdFx0XHRcdFx0XHQgICAgbHJ1dmVjLCBzYyk7XG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogaXNvbGF0ZV9scnVfZm9saW9zKCkgbWF5IHNjYW4gZmFyIG1vcmVcbitcdFx0XHRcdCAqIHRoYW4gbnJfdG9fc2NhbiB3aGVuIHRoZSBMUlUgaG9sZHNcbitcdFx0XHRcdCAqIGluZWxpZ2libGUgZm9saW9zICh6b25lLXNraXApIG9yIGxhcmdlXG4rXHRcdFx0XHQgKiBmb2xpb3MuIENoYXJnZSB0aGF0IG92ZXJzaG9vdCBhZ2FpbnN0IHRoZVxuK1x0XHRcdFx0ICogcmVtYWluaW5nIHF1b3RhIChjbGFtcGVkIGJ5IG1pbigpIHNvIGl0XG4rXHRcdFx0XHQgKiBjYW5ub3QgZ28gbmVnYXRpdmUpIHNvIHRoZSBuZXh0IGl0ZXJhdGlvblxuK1x0XHRcdFx0ICogZG9lcyBub3QgcmVzY2FuIHRoZSBzYW1lIHNraXBwZWQgZm9saW9zLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRucltscnVdIC09IG1pbihucltscnVdLFxuK1x0XHRcdFx0XHQgICAgICAgbWF4KG5yX3RvX3NjYW4sIHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCkpO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDE6MDcuNjA0Mzk3MzQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyODI5MTIxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVk1TY2FuIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3Ztc2Nhbi5jYCwgYW5kIGl0J3MgbWFraW5nIHNvbWUgcHJldHR5IHRhcmdldGVkIGNoYW5nZXMgd2l0aGluIHRoZSBwYWdlIHJlY2xhaW0gc3Vic3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIHNvbWV0aGluZyBjcnVjaWFsOyBhbnkgdHdlYWtzIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IGluIHRoZXNlIGNvcmUgZnVuY3Rpb25zLCBuZWVkIGNhcmVmdWwgc2NydXRpbnkuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgYW5kIGBzaHJpbmtfbHJ1dmVjYCwgYm90aCBvZiB3aGljaCBhcmUgY2VudHJhbCB0byB0aGUgZXZpY3Rpb24gYW5kIHNjYW5uaW5nIHByb2Nlc3Nlcy5cblxuU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWx0ZXJzIGBpc29sYXRlX2xydV9mb2xpb3NgIHRvIHVzZSBgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkYCBpbnN0ZWFkIG9mIGEgZGVkaWNhdGVkIHBvaW50ZXIgZm9yIHRoZSBzY2FubmVkIGNvdW50LiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmc7IGl0IGxvb2tzIGxpa2UgdGhlIGludGVudCBpcyB0byBjb25zb2xpZGF0ZSBzdGF0ZSB3aXRoaW4gdGhlIGBzY2AgKHNjYW4pIHN0cnVjdHVyZSwgcG90ZW50aWFsbHkgZm9yIGJldHRlciB0cmFja2luZyBvciBzeW5jaHJvbml6YXRpb24uIEkgbmVlZCB0byBkaWcgaW50byBob3cgdGhpcyBmaWVsZCBpcyB1c2VkIGFuZCBpZiBpdCdzIGNvbnNpc3RlbnQuXG5cblRoZSBsb2dpYyBjaGFuZ2UgcmVnYXJkaW5nIGBtYXhfbnJfc2tpcHBlZGAgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgY2F0Y2hlcyBteSBleWUgdG9vLiBUaGV5J3JlIHRyeWluZyB0byBwcmV2ZW50IGxvY2t1cHMsIHRoYXQgbXVjaCBpcyBjbGVhciwgd2l0aCBhIGxpbWl0IGJhc2VkIG9uIHRoZSB6b25lIG9mIHRoZSBmb2xpby4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHVzaW5nIGBtYXhfbnJfc2tpcHBlZGAsIGJ1dCB0aGUgcGF0Y2ggc2VlbXMgdG8gaGF2ZSByZXdvcmtlZCB0aGF0LiBJdCBsb29rcyBsaWtlIGl0J3Mgbm93IGRlc2lnbmVkIHRvIGJhaWwgb3V0IHdoZW4gaXQgaGl0cyBhIHRocmVzaG9sZCAoYFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRGApIGluc3RlYWQgb2YgZm9yY2luZyB0aGUgaXNvbGF0aW9uIG9mIGZvbGlvcy4gVGhlIGNvbW1lbnQgbWVudGlvbnMgXCJyZWNsYWltaW5nIGluZWxpZ2libGUgZm9saW9zIG9ubHkgaW5mbGF0ZXMgbnJfcmVjbGFpbWVkIGludG8gYSBmYWxzZSBwcm9ncmVzcy5cIiBBaCwgc28gdGhlIGludGVudGlvbiBoZXJlIGlzIHRvIGF2b2lkIGNodXJuaW5nIHRocm91Z2ggZm9saW9zIHRoYXQgY2FuJ3QgYmUgcmVjbGFpbWVkLCB3aGljaCBpcyBhIGNvbW1vbiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGluIHRoZXNlIHN5c3RlbXMuIEknbSBndWVzc2luZyB0aGF0IHRoaXMgaXMgYSBjYXNlIHdoZXJlIHRoZSBcIm1heFwiIGxpbWl0IG1heSBjYXVzZSBhIGhhcmQgbG9vcC5cblxuVGhlIGNoYW5nZXMgdG8gYHNocmlua19scnV2ZWNgIGFyZSBhbHNvIHJlbGV2YW50LiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgbWFuYWdpbmcgdGhlIHF1b3RhIChgbnJbbHJ1XWApIG1vcmUgY2FyZWZ1bGx5LCBmYWN0b3JpbmcgaW4gcG90ZW50aWFsIFwib3ZlcnNob290XCIgZHVyaW5nIGBpc29sYXRlX2xydV9mb2xpb3NgLiBUaGUgY29kZSBpcyBjb21wZW5zYXRpbmcgZm9yIHRoZSBmYWN0IHRoYXQgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgbWlnaHQgc2NhbiBtb3JlIHRoYW4gYG5yX3RvX3NjYW5gLCBkdWUgdG8gc2tpcHBlZCB6b25lcyBvciBsYXJnZSBmb2xpb3MuIFRoZSBnb2FsIGFwcGVhcnMgdG8gYmUgbW9yZSBwcmVjaXNlIGFjY291bnRpbmcsIHByZXZlbnRpbmcgdGhlIG5leHQgaXRlcmF0aW9uIGZyb20gcmV2aXNpdGluZyBza2lwcGVkIGZvbGlvcy4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBpbXByb3ZlbWVudCBpbiBlZmZpY2llbmN5IGFuZCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBzY2FubmluZywgYnV0IEkgbmVlZCB0byBlbnN1cmUgdGhlIG1hdGggaXMgY29ycmVjdCBhbmQgdGhlcmUgaXNuJ3QgYSBuZXcgb2ZmLWJ5LW9uZSBidWcuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBiaWdnZXIgcGljdHVyZS4gYHNocmlua19scnV2ZWNgLCBgc2hyaW5rX2xpc3RgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBpc29sYXRlX2xydV9mb2xpb3NgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGVudHJ5IHBvaW50cyBmb3IgcGFnZSByZWNsYWltIGluIGdlbmVyYWw7IEkgd2lsbCBjaGVjayBgbW0vdm1zY2FuLmNgIHRvIHJlbWluZCBteXNlbGYuIFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCByZWFjaGFibGUsIGFuZCwgaWYgdGhpcyBpcyBhIG1haW5saW5lIHBhdGNoLCBpdCBtdXN0IGhhdmUgZ29uZSB0aHJvdWdoIHNlcmlvdXMgc2NydXRpbnksIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMgaW50byB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIHNlZSBob3cgdGhpcyBhZmZlY3RzIHRoZWlyIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYxMCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAxOjE3Ljg4NzMxMTM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDY2MTQ3MjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odW5zaWduZWQgbG9uZ3x2b2lkfGludHxib29sKVxcXFxzK1thLXpBLVowLTlfXStcXFxcKC4qc2hyaW5rX2xydXZlY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDE6MjEuMzkzOTM0OTQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3OTkxNTMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgc2hyaW5rX2xydXZlY2AgaW4gYG1tL3Ztc2Nhbi5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGF0IGBzaHJpbmtfbHJ1dmVjYCBmdW5jdGlvbi4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJuYWxzLCBJJ20gdGhpbmtpbmcgdGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGlzIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBuYXZpZ2F0ZSBkaXJlY3RseSB0byB0aGUgYG1tL3Ztc2Nhbi5jYCBmaWxlLiBTZWFyY2hpbmcgZm9yIHRoZSBmdW5jdGlvbiBgc2hyaW5rX2xydXZlY2AgZGlyZWN0bHkgc2VlbXMgbGlrZSB0aGUgcXVpY2tlc3QgcGF0aCB0byBkaXNzZWN0aW5nIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBwYWdlIHJlY2xhaW0gc3RyYXRlZ3kuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMToyNC40NzM4NTM2MjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMjYwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX2xydXZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00OTMxPXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00OTY1LSAqL1xcbm1tL3Ztc2Nhbi5jOjQ5NjY6c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy00OTY3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwMTE9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MDMwLVxcbm1tL3Ztc2Nhbi5jOjUwMzE6XFx0bmVlZF9yb3RhdGUgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy01MDMyLVxcbi0tXFxubW0vdm1zY2FuLmM9NTA1Mj1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMjEtXFxubW0vdm1zY2FuLmM6NTEyMjpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01MTIzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMzQtXFxubW0vdm1zY2FuLmM6NTEzNTpcXHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmMtNTEzNi1cXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XFxuLS1cXG5tbS92bXNjYW4uYz01ODY2PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01ODcwLVxcbm1tL3Ztc2Nhbi5jOjU4NzE6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTg3Mi17XFxuLS1cXG5tbS92bXNjYW4uYz01ODc2PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01ODgyLVxcbm1tL3Ztc2Nhbi5jOjU4ODM6c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTU4ODQte1xcbi0tXFxubW0vdm1zY2FuLmMtNTg5NC1cXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFxcdTAwMjZcXHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XFxubW0vdm1zY2FuLmM6NTg5NTpcXHRcXHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTg5Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwODU9c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjE0NC1cXG5tbS92bXNjYW4uYzo2MTQ1OlxcdFxcdHNocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNjE0Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY3NDA9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3NzAtXFx0ICovXFxubW0vdm1zY2FuLmM6Njc3MTpcXHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02NzcyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMToyNC41MjAxODQ3NzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIxODM5Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhIGFuZCB0aGUgY29udGV4dCBpcyBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQ6XG5cbioqSHVudGluZyBEb3duIFNocmluayBGdW5jdGlvbiBDYWxsZXJzKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb25zIHdpdGhpbiB0aGUgY29kZSB3aGVyZSBlaXRoZXIgYHNocmlua19ub2RlX21lbWNnc2Agb3IgYHNocmlua19scnV2ZWNgIGFyZSBiZWluZyBpbnZva2VkLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhbmQgaG93IHRoZXkncmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSByZWNsYWltIHN0cmF0ZWd5LiBJJ20gYXNzdW1pbmcgdGhhdCB0aGVzZSBhcmUgY29yZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBzaHJpbmtpbmcgbWVtb3J5IGZyb20gbm9kZSBvciBMUlUtYmFzZWQgbWVtb3J5IHBvb2xzLiBUaGlzIGNvdWxkIGJlIHRvIGRlYWwgd2l0aCBtZW1vcnkgcHJlc3N1cmUsIHJlY2xhaW0gcGFnZXMsIG9yIG1heWJlIGV2ZW4gaW4gcHJlcGFyYXRpb24gZm9yIHNvbWUgc29ydCBvZiBOVU1BIGJhbGFuY2luZyBvciBtaWdyYXRpb24uXG5cblRoZSBrZXkgaXMgaWRlbnRpZnlpbmcgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGNhbGwgdGhlc2Ugc2hyaW5rIGZ1bmN0aW9ucy4gVGhlIFwibm9uLXN0YXRpY1wiIHBhcnQgaXMgaW1wb3J0YW50OyBpdCBzdWdnZXN0cyB0aGF0IHRoZXNlIGFyZSBmdW5jdGlvbnMgbWVhbnQgdG8gYmUgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSBwb2ludHMgd2l0aGluIHRoZSBrZXJuZWwsIG1ha2luZyB0aGVtIGdvb2QgY2FuZGlkYXRlcyBmb3IgdHJhY2luZyB0aGUgY2FsbCBmbG93IGFuZCB1bmRlcnN0YW5kIHdoaWNoIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHRyaWdnZXJpbmcgbWVtb3J5IHNocmlua2luZy4gTm93LCBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBzb3VyY2UgY29kZSBhbmQgZmluZCB0aGUgY2FsbCBzaXRlcyBmb3IgdGhlc2UgY3JpdGljYWwgZnVuY3Rpb25zLiBUaGF0J3MgdGhlIGZpcnN0IHN0ZXAuIE5leHQsIEkgbmVlZCB0byB3b3JrIG91dCB0aGUgd2lkZXIgY29udGV4dCBvZiBob3cgZWFjaCBmdW5jdGlvbiBjYWxscyB0aGUgc2hyaW5rIG1ldGhvZHMsIHdoYXQgZGF0YSBpdCBwYXNzZXMgdG8gdGhlc2UgbWV0aG9kcywgYW5kIGluIHdoaWNoIGNpcmN1bXN0YW5jZXMgdGhlc2UgY2FsbHMgb2NjdXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMToyNy45NDIwMjYwMjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NTE2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX25vZGVfbWVtY2dzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTYwMzM9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy02MDg0LVxcbm1tL3Ztc2Nhbi5jOjYwODU6c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYwODYte1xcbi0tXFxubW0vdm1zY2FuLmM9NjE2ND1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxODgtXFxubW0vdm1zY2FuLmM6NjE4OTpcXHRzaHJpbmtfbm9kZV9tZW1jZ3MocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02MTkwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMToyNy45ODc2ODEzMzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzY2NzQ3NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LlxuXG4qKlRyYWNpbmcgdGhlIEV4ZWN1dGlvbiBQYXRoOiBgc2hyaW5rX25vZGVgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHNocmlua19ub2RlYCBmdW5jdGlvbi4gTXkgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcGxhY2Ugd2l0aGluIHRoZSBicm9hZGVyIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbiBjb250ZXh0LiBXaGVyZSBpcyBpdCBjYWxsZWQ/IFdoYXQncyB0aGUgcHJlY29uZGl0aW9uIGZvciBjYWxsaW5nIGl0PyBBbmQgd2hhdCBzdGF0ZSBkb2VzIGl0IGxlYXZlIHRoZSBzeXN0ZW0gaW4gYWZ0ZXJ3YXJkPyBJIGltbWVkaWF0ZWx5IHN0YXJ0IHZpc3VhbGl6aW5nIHRoZSBkYXRhIHN0cnVjdHVyZSBpbiBteSBoZWFkLCBpdHMgbm9kZXMgYW5kIGxpbmtzLCBhbnRpY2lwYXRpbmcgaG93IGBzaHJpbmtfbm9kZWAgbWlnaHQgYWx0ZXIgdGhlbS4gSXMgdGhpcyBhIHRyZWUsIGEgZ3JhcGgsIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgdHlwZSBvZiBzdHJ1Y3R1cmUgZHJhbWF0aWNhbGx5IGluZmx1ZW5jZXMgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uXG5cbkkgd2FudCB0byBrbm93IHRoZSBcIndoeVwiIGJlaGluZCB0aGlzIGZ1bmN0aW9uJ3MgZXhpc3RlbmNlLCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRlc2lnbiBnb2Fscy4gSXMgdGhpcyBhYm91dCBtZW1vcnkgb3B0aW1pemF0aW9uPyBQZXJmb3JtYW5jZSB0dW5pbmc/IE9yIHBlcmhhcHMgbWFpbnRhaW5pbmcgc29tZSBraW5kIG9mIHN0cnVjdHVyYWwgaW52YXJpYW50PyBBIHNtYWxsZXIgbm9kZSBvZnRlbiBzdWdnZXN0cyB3ZSdyZSBjb25zb2xpZGF0aW5nIGluZm9ybWF0aW9uLCByZW1vdmluZyByZWR1bmRhbmNpZXMsIG9yIHBlcmhhcHMgcHJlcGFyaW5nIGZvciBhIG1vcmUgZWZmaWNpZW50IHNlYXJjaCBvciB0cmF2ZXJzYWwuIEkgc3RhcnQgbWVudGFsbHkgY29tcG9zaW5nIHRlc3QgY2FzZXM7IGVkZ2UgY2FzZXMsIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIGFuZCB0eXBpY2FsIHNjZW5hcmlvcywgdG8gbWFrZSBzdXJlIHRoZSBwcm9jZXNzIGlzIHJvYnVzdCwgYXMgZXhwZWN0ZWQuXG5cbkkgd2lsbCBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIFwic2hyaW5raW5nXCIgaXMgYWNoaWV2ZWQ6IGRvZXMgaXQgaW52b2x2ZSBub2RlIG1lcmdpbmcsIGRlYWxsb2NhdGlvbiwgcG9pbnRlciBhZGp1c3RtZW50cywgb3IgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBjcmVhdGl2ZS4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgaXQgcmVsaWVzIHVwb24/IEhvdyBhcmUgY29uY3VycmVudCBhY2Nlc3MgY29uY2VybnMgaGFuZGxlZCwgaWYgYW55PyBJJ2xsIHByb2JhYmx5IHNwZW5kIGEgZ29vZCBhbW91bnQgb2YgdGltZSByZXZpZXdpbmcgdGhlIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgaWYgYXZhaWxhYmxlLCBvciBpZiBub3QsIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBvcGVyYXRpb24gZml0cyBpbnRvIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGZsb3csIHN0ZXAgYnkgc3RlcCwgYW5kIG1lbnRhbGx5IHZlcmlmeSB0aGF0IHRoZXJlIGFyZSBubyBsZWFrcyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy4gVWx0aW1hdGVseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYHNocmlua19ub2RlYCBmdW5jdGlvbiAqbWVhbnMqIGluIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzAwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMTozMi4zNTQ0MzIyNDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODc4NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTE5NTM9c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXFxuLS1cXG5tbS92bXNjYW4uYy0xOTkxLS8qXFxubW0vdm1zY2FuLmM6MTk5MjogKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfbm9kZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyXFxubW0vdm1zY2FuLmMtMTk5My0gKiBvZiByZWNsYWltZWQgcGFnZXNcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMjI9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTQyLVxcbm1tL3Ztc2Nhbi5jOjUxNDM6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01MTQ0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4NzE9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01ODc1LVxcbm1tL3Ztc2Nhbi5jOjU4NzY6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01ODc3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwMzM9c3RhdGljIGlubGluZSBib29sIHNob3VsZF9jb250aW51ZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy02MDg0LVxcbm1tL3Ztc2Nhbi5jOjYwODU6c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYwODYte1xcbi0tXFxubW0vdm1zY2FuLmMtNjE2My1cXG5tbS92bXNjYW4uYzo2MTY0OnN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTYxNjUte1xcbi0tXFxubW0vdm1zY2FuLmMtNjE3MS1cXHRcXHRtZW1zZXQoXFx1MDAyNnNjLVxcdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVxcdTAwM2VucikpO1xcbm1tL3Ztc2Nhbi5jOjYxNzI6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYxNzMtXFxuLS1cXG5tbS92bXNjYW4uYy02MTg4LVxcbm1tL3Ztc2Nhbi5jOjYxODk6XFx0c2hyaW5rX25vZGVfbWVtY2dzKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNjE5MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYzNDk9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjQyNy1cXHRcXHRsYXN0X3BnZGF0ID0gem9uZS1cXHUwMDNlem9uZV9wZ2RhdDtcXG5tbS92bXNjYW4uYzo2NDI4OlxcdFxcdHNocmlua19ub2RlKHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02NDI5LVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2OTQ9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02NzM5LS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cXG5tbS92bXNjYW4uYzo2NzQwOnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjc0MS1cXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuLS1cXG5tbS92bXNjYW4uYy02NzY2LVxcdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxcbm1tL3Ztc2Nhbi5jOjY3Njc6XFx0ICogaWYgd2UgZG9uJ3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XFxubW0vdm1zY2FuLmMtNjc2OC1cXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJ3MgYXMgd2VsbC4gV2UgaGFja1xcbi0tXFxubW0vdm1zY2FuLmM9Njg4OD1zdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy02OTEyLVxcdFxcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0J3NcXG5tbS92bXNjYW4uYzo2OTEzOlxcdFxcdCAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlXFxubW0vdm1zY2FuLmMtNjkxNC1cXHRcXHQgKiBoYXMgZHJvcHBlZCBvcmRlciwgc2ltcGx5IGVuc3VyZSB0aGVyZSBhcmUgZW5vdWdoXFxuLS1cXG5tbS92bXNjYW4uYz02OTcwPXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwMDgtICovXFxubW0vdm1zY2FuLmM6NzAwOTpzdGF0aWMgYm9vbCBrc3dhcGRfc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03MDEwLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwMjUtXFx0ICovXFxubW0vdm1zY2FuLmM6NzAyNjpcXHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTcwMjctXFxuLS1cXG5tbS92bXNjYW4uYz03MDgyPXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MTkxLVxcbm1tL3Ztc2Nhbi5jOjcxOTI6XFx0XFx0LyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovXFxubW0vdm1zY2FuLmMtNzE5My1cXHRcXHRzYy5ucl9zY2FubmVkID0gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyMDMtXFx0XFx0ICovXFxubW0vdm1zY2FuLmM6NzIwNDpcXHRcXHRpZiAoa3N3YXBkX3Nocmlua19ub2RlKHBnZGF0LCBcXHUwMDI2c2MpKVxcbm1tL3Ztc2Nhbi5jLTcyMDUtXFx0XFx0XFx0cmFpc2VfcHJpb3JpdHkgPSBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc3NTk9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS92bXNjYW4uYy03Nzg2LVxcdFxcdGRvIHtcXG5tbS92bXNjYW4uYzo3Nzg3OlxcdFxcdFxcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XFxubW0vdm1zY2FuLmMtNzc4OC1cXHRcXHR9IHdoaWxlIChzYy1cXHUwMDNlbnJfcmVjbGFpbWVkIFxcdTAwM2MgbnJfcGFnZXMgXFx1MDAyNlxcdTAwMjYgLS1zYy1cXHUwMDNlcHJpb3JpdHkgXFx1MDAzZT0gMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAxOjMyLjQwMzMxNzMyM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODYzNDc2MjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIGNvZGUsIGJyZWFraW5nIGRvd24gdGhlIGZ1bmN0aW9uIGFjY2Vzc2liaWxpdHk6XG5cbioqQXNzZXNzaW5nIFBvdGVudGlhbCBFbnRyeSBQb2ludHMgZm9yIE1lbW9yeSBSZWNsYW1hdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gdHJpZ2dlciBtZW1vcnkgcmVjbGFpbSBpbiB0aGlzIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHRyeV90b19mcmVlX3BhZ2VzYCBzZWVtcyBsaWtlIGEgc29saWQgbm9uLXN0YXRpYyBlbnRyeSBwb2ludC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwbGFjZSwgYW5kIGl0IHdpbGwgYmUgYWNjZXNzaWJsZSB0byB3aGF0ZXZlciBpcyBjYWxsaW5nIHRoZSBmdW5jdGlvbi5cblxuTm93LCBsZXQncyBzZWUsIEkgYWxzbyBzZWUgdGhhdCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAgaXMgbm9uLXN0YXRpYyBhcyB3ZWxsLiBHb29kIHRvIGtub3cuIEl0IGV4cGFuZHMgdGhlIHBvc3NpYmxlIGVudHJ5IHBvaW50cyBmb3IgbWUuXG5cbkhtbSwgaW50ZXJlc3RpbmcuIFRoZW4sIGBfX25vZGVfcmVjbGFpbWAgaXMgc3RhdGljLCB3aGljaCBtZWFucyBpdCBoYXMgbGltaXRlZCBzY29wZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIG1pZ2h0IG1lYW4gaXQncyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uIEJ1dCwgdGhlIGZ1bmN0aW9uIGBub2RlX3JlY2xhaW1gIGl0c2VsZiBpcyBub24tc3RhdGljLCB3aGljaCBtZWFucyBpdCB3aWxsIGJlIGV4cG9zZWQgZm9yIGV4dGVybmFsIHVzZS4gSSB0aGluayB0aGF0IGlzIGFuIGltcG9ydGFudCBwb2ludCB0byBub3RlLlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIHNlZSB3aGF0IGl0J3MgcmVhbGx5IGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjUzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDE6MzYuMjY2Nzk1OTQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU1NjczNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fZnJlZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz02NDQxPXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy02NDcxLSAqL1xcbm1tL3Ztc2Nhbi5jOjY0NzI6c3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG5tbS92bXNjYW4uYy02NDczLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYz02NjE0PXN0YXRpYyBib29sIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjY5My1cXG5tbS92bXNjYW4uYzo2Njk0OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTY2OTUtXFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vdm1zY2FuLmMtNjcyOC1cXG5tbS92bXNjYW4uYzo2NzI5OlxcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTY3MzAtXFxuLS1cXG5tbS92bXNjYW4uYz02NzgwPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02ODExLVxcbm1tL3Ztc2Nhbi5jOjY4MTI6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjgxMy1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc1Nzg9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYy03NTk3LVxcbm1tL3Ztc2Nhbi5jOjc1OTg6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNzU5OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDE6MzYuMzEzMzU2NzkxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzc2MTczMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IHB1enpsZS5cblxuKipEaWdnaW5nIGludG8gTWVtb3J5IFJlY2xhbWF0aW9uIE1lY2hhbmlzbXMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUga2VybmVsIGFjdHVhbGx5IGZyZWVzIHVwIG1lbW9yeS4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGEgZmV3IGtleSBmdW5jdGlvbnM6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIHRoZSBtb3JlIGdlbmVyYWwgYHNocmlua19hbGxfbWVtb3J5YC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBtYWluIHBsYXllcnMgaW4gdGhlIHJlY2xhbWF0aW9uIGdhbWUuIEJ1dCB0aGVuIEkgaGF2ZSB0byB0aGluayBhYm91dCB0aGUgbW9yZSBwcm9hY3RpdmUgZWxlbWVudCwgdGhlIGJhY2tncm91bmQgcmVjbGFpbSBhY3Rpdml0eS4gSSdtIHJlY2FsbGluZyB0aGF0IGBiYWxhbmNlX3BnZGF0YCBwbGF5cyBhIHBhcnQsIGFuZCB0aGF0J3MgdHJpZ2dlcmVkIGJ5IGBrc3dhcGRgLiBBbHJpZ2h0LCB0aGF0J3MgbXkgbmV4dCBwb2ludCBvZiBmb2N1cy4gSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBob3cgYGtzd2FwZGAgd29ya3MgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDk0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDE6MzkuMzkwOTc2ODcyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM5NDg2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrc3dhcGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MjQgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm1tL3Ztc2Nhbi5jLTUtICogIFN3YXAgcmVvcmdhbmlzZWQgMjkuMTIuOTUsIFN0ZXBoZW4gVHdlZWRpZS5cXG5tbS92bXNjYW4uYzo2OiAqICBrc3dhcGQgYWRkZWQ6IDcuMS45NiAgc2N0XFxubW0vdm1zY2FuLmM6NzogKiAgUmVtb3ZlZCBrc3dhcGRfY3RsIGxpbWl0cywgYW5kIHN3YXAgb3V0IGFzIG1hbnkgcGFnZXMgYXMgbmVlZGVkXFxubW0vdm1zY2FuLmMtOC0gKiAgdG8gYnJpbmcgdGhlIHN5c3RlbSBiYWNrIHRvIGZyZWVwYWdlcy5oaWdoOiAyLjQuOTcsIFJpayB2YW4gUmllbC5cXG5tbS92bXNjYW4uYzo5OiAqICBab25lIGF3YXJlIGtzd2FwZCBzdGFydGVkIDAyLzAwLCBLYW5vaiBTYXJjYXIgKGthbm9qQHNnaS5jb20pLlxcbm1tL3Ztc2Nhbi5jLTEwLSAqICBNdWx0aXF1ZXVlIFZNIHN0YXJ0ZWQgNS44LjAwLCBSaWsgdmFuIFJpZWwuXFxuLS1cXG5tbS92bXNjYW4uYz00NDc9c3RhdGljIGludCByZWNsYWltZXJfb2Zmc2V0KHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDUyLVxcbm1tL3Ztc2Nhbi5jOjQ1MzpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy00NTQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5tbS92bXNjYW4uYz00ODM9c3RhdGljIGJvb2wgc2tpcF90aHJvdHRsZV9ub3Byb2dyZXNzKHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy00ODgtXFx0LypcXG5tbS92bXNjYW4uYzo0ODk6XFx0ICogSWYga3N3YXBkIGlzIGRpc2FibGVkLCByZXNjaGVkdWxlIGlmIG5lY2Vzc2FyeSBidXQgZG8gbm90XFxubW0vdm1zY2FuLmMtNDkwLVxcdCAqIHRocm90dGxlIGFzIHRoZSBzeXN0ZW0gaXMgbGlrZWx5IG5lYXIgT09NLlxcbm1tL3Ztc2Nhbi5jLTQ5MS1cXHQgKi9cXG5tbS92bXNjYW4uYzo0OTI6XFx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSlcXG5tbS92bXNjYW4uYy00OTMtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS92bXNjYW4uYz01MTE9dm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNy1cXHQvKlxcbm1tL3Ztc2Nhbi5jOjUxODpcXHQgKiBEbyBub3QgdGhyb3R0bGUgdXNlciB3b3JrZXJzLCBrdGhyZWFkcyBvdGhlciB0aGFuIGtzd2FwZCBvclxcbm1tL3Ztc2Nhbi5jLTUxOS1cXHQgKiB3b3JrcXVldWVzLiBUaGV5IG1heSBiZSByZXF1aXJlZCBmb3IgcmVjbGFpbSB0byBtYWtlXFxuLS1cXG5tbS92bXNjYW4uYy01MjEtXFx0ICovXFxubW0vdm1zY2FuLmM6NTIyOlxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTUyMy1cXHQgICAgY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoUEZfVVNFUl9XT1JLRVJ8UEZfS1RIUkVBRCkpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTk2NT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19kZW1vdGVfZm9saW8oc3RydWN0IGZvbGlvICpzcmMsXFxuLS1cXG5tbS92bXNjYW4uYy05NzQtXFx0ICogbWFrZSBzdXJlIHdlIGFsbG9jYXRlIGZyb20gdGhlIHRhcmdldCBub2RlIGZpcnN0IGFsc28gdHJ5aW5nIHRvXFxubW0vdm1zY2FuLmM6OTc1OlxcdCAqIGRlbW90ZSBvciByZWNsYWltIHBhZ2VzIGZyb20gdGhlIHRhcmdldCBub2RlIHZpYSBrc3dhcGQgaWYgd2UgYXJlXFxubW0vdm1zY2FuLmMtOTc2LVxcdCAqIGxvdyBvbiBmcmVlIG1lbW9yeSBvbiB0YXJnZXQgbm9kZS4gSWYgd2UgZG9uJ3QgZG8gdGhpcyBhbmQgaWZcXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwNTg9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTEyMS1cXHRcXHQgKiBUaGUgbnVtYmVyIG9mIGRpcnR5IHBhZ2VzIGRldGVybWluZXMgaWYgYSBub2RlIGlzIG1hcmtlZFxcbm1tL3Ztc2Nhbi5jOjExMjI6XFx0XFx0ICogcmVjbGFpbV9jb25nZXN0ZWQuIGtzd2FwZCB3aWxsIHN0YWxsIGFuZCBzdGFydCB3cml0aW5nXFxubW0vdm1zY2FuLmMtMTEyMy1cXHRcXHQgKiBmb2xpb3MgaWYgdGhlIHRhaWwgb2YgdGhlIExSVSBpcyBhbGwgZGlydHkgdW5xdWV1ZWQgZm9saW9zLlxcbi0tXFxubW0vdm1zY2FuLmMtMTE5MC1cXHRcXHRcXHQvKiBDYXNlIDEgYWJvdmUgKi9cXG5tbS92bXNjYW4uYzoxMTkxOlxcdFxcdFxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtMTE5Mi1cXHRcXHRcXHQgICAgZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vdm1zY2FuLmM9MTU5NT11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS92bXNjYW4uYy0xNjIwLVxcdCAqIFdlIHNob3VsZCBiZSBzYWZlIGhlcmUgc2luY2Ugd2UgYXJlIG9ubHkgZGVhbGluZyB3aXRoIGZpbGUgcGFnZXMgYW5kXFxubW0vdm1zY2FuLmM6MTYyMTpcXHQgKiB3ZSBhcmUgbm90IGtzd2FwZCBhbmQgdGhlcmVmb3JlIGNhbm5vdCB3cml0ZSBkaXJ0eSBmaWxlIHBhZ2VzLiBCdXRcXG5tbS92bXNjYW4uYy0xNjIyLVxcdCAqIGNhbGwgbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKSBhbnl3YXksIGp1c3QgaW4gY2FzZSB0aGVzZSBjb25kaXRpb25zXFxuLS1cXG5tbS92bXNjYW4uYz0xODM0PXN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLFxcbi0tXFxubW0vdm1zY2FuLmMtMTgzOS1cXG5tbS92bXNjYW4uYzoxODQwOlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTE4NDEtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmM9Mzc5OD1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4MDEtXFxubW0vdm1zY2FuLmM6MzgwMjpcXHRpZiAocGdkYXQgXFx1MDAyNlxcdTAwMjYgY3VycmVudF9pc19rc3dhcGQoKSkge1xcbm1tL3Ztc2Nhbi5jLTM4MDMtXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHdhbGspO1xcbi0tXFxubW0vdm1zY2FuLmMtMzgwNi1cXHR9IGVsc2UgaWYgKCF3YWxrIFxcdTAwMjZcXHUwMDI2IGZvcmNlX2FsbG9jKSB7XFxubW0vdm1zY2FuLmM6MzgwNzpcXHRcXHRWTV9XQVJOX09OX09OQ0UoY3VycmVudF9pc19rc3dhcGQoKSk7XFxubW0vdm1zY2FuLmMtMzgwOC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTM4MTg9c3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKVxcbi0tXFxubW0vdm1zY2FuLmMtMzgyNi1cXG5tbS92bXNjYW4uYzozODI3OlxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy0zODI4LVxcdFxcdGtmcmVlKHdhbGspO1xcbi0tXFxubW0vdm1zY2FuLmM9NDE0MD1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDE0NS1cXG5tbS92bXNjYW4uYzo0MTQ2OlxcdFZNX1dBUk5fT05fT05DRSghY3VycmVudF9pc19rc3dhcGQoKSk7XFxubW0vdm1zY2FuLmMtNDE0Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5MzE9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5NDItXFx0LyogY2hlY2sgdGhlIG9yZGVyIHRvIGV4Y2x1ZGUgY29tcGFjdGlvbi1pbmR1Y2VkIHJlY2xhaW0gKi9cXG5tbS92bXNjYW4uYzo0OTQzOlxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSB8fCBzYy1cXHUwMDNlb3JkZXIpXFxubW0vdm1zY2FuLmMtNDk0NC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS92bXNjYW4uYy00OTU2LVxcbm1tL3Ztc2Nhbi5jOjQ5NTc6XFx0Lyoga3N3YXBkIHNob3VsZCBhYm9ydCBpZiBhbGwgZWxpZ2libGUgem9uZXMgYXJlIHNhZmUgKi9cXG5tbS92bXNjYW4uYy00OTU4LVxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmM9NTE0Mz1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE2NS1cXG5tbS92bXNjYW4uYzo1MTY2OlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTUxNjctXFx0XFx0c2MtXFx1MDAzZW5yX3JlY2xhaW1lZCA9IDA7XFxuLS1cXG5tbS92bXNjYW4uYy01MTczLVxcbm1tL3Ztc2Nhbi5jOjUxNzQ6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtNTE3NS1cXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxODEtXFx0aWYgKHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgXFx1MDAzZSByZWNsYWltZWQpXFxubW0vdm1zY2FuLmM6NTE4MjpcXHRcXHRrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBzYy1cXHUwMDNlb3JkZXIsIHNjLVxcdTAwM2VyZWNsYWltX2lkeCk7XFxubW0vdm1zY2FuLmMtNTE4My19XFxuLS1cXG5tbS92bXNjYW4uYz01ODgzPXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5MTItXFx0ICogREVGX1BSSU9SSVRZIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGZhY3Qgd2UgYXJlIGRpcmVjdFxcbm1tL3Ztc2Nhbi5jOjU5MTM6XFx0ICogcmVjbGFpbWluZyBpbXBsaWVzIHRoYXQga3N3YXBkIGlzIG5vdCBrZWVwaW5nIHVwIGFuZCBpdCBpcyBiZXN0IHRvXFxubW0vdm1zY2FuLmMtNTkxNC1cXHQgKiBkbyBhIGJhdGNoIG9mIHdvcmsgYXQgb25jZS4gRm9yIG1lbWNnIHJlY2xhaW0gb25lIGNoZWNrIGlzIG1hZGUgdG9cXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5MTctXFx0ICovXFxubW0vdm1zY2FuLmM6NTkxODpcXHRwcm9wb3J0aW9uYWxfcmVjbGFpbSA9ICghY2dyb3VwX3JlY2xhaW0oc2MpIFxcdTAwMjZcXHUwMDI2ICFjdXJyZW50X2lzX2tzd2FwZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtNTkxOS1cXHRcXHRcXHRcXHRzYy1cXHUwMDNlcHJpb3JpdHkgPT0gREVGX1BSSU9SSVRZKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5NTMtXFx0XFx0LypcXG5tbS92bXNjYW4uYzo1OTU0OlxcdFxcdCAqIEZvciBrc3dhcGQgYW5kIG1lbWNnLCByZWNsYWltIGF0IGxlYXN0IHRoZSBudW1iZXIgb2YgcGFnZXNcXG5tbS92bXNjYW4uYy01OTU1LVxcdFxcdCAqIHJlcXVlc3RlZC4gRW5zdXJlIHRoYXQgdGhlIGFub24gYW5kIGZpbGUgTFJVcyBhcmUgc2Nhbm5lZFxcbi0tXFxubW0vdm1zY2FuLmM9NjA4NT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDk5LVxcdCAqXFxubW0vdm1zY2FuLmM6NjEwMDpcXHQgKiBGb3Iga3N3YXBkLCByZWxpYWJsZSBmb3J3YXJkIHByb2dyZXNzIGlzIG1vcmUgaW1wb3J0YW50XFxubW0vdm1zY2FuLmMtNjEwMS1cXHQgKiB0aGFuIGEgcXVpY2sgcmV0dXJuIHRvIGlkbGUuIEFsd2F5cyBkbyBmdWxsIHdhbGtzLlxcbm1tL3Ztc2Nhbi5jLTYxMDItXFx0ICovXFxubW0vdm1zY2FuLmM6NjEwMzpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSB8fCBzYy1cXHUwMDNlbWVtY2dfZnVsbF93YWxrKVxcbm1tL3Ztc2Nhbi5jLTYxMDQtXFx0XFx0cGFydGlhbCA9IE5VTEw7XFxuLS1cXG5tbS92bXNjYW4uYz02MTY0PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjIwMi1cXG5tbS92bXNjYW4uYzo2MjAzOlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKSB7XFxubW0vdm1zY2FuLmMtNjIwNC1cXHRcXHQvKlxcbi0tXFxubW0vdm1zY2FuLmMtNjIxNS1cXHRcXHQgKlxcbm1tL3Ztc2Nhbi5jOjYyMTY6XFx0XFx0ICogT25jZSBhIG5vZGUgaXMgZmxhZ2dlZCBQR0RBVF9XUklURUJBQ0ssIGtzd2FwZCB3aWxsXFxubW0vdm1zY2FuLmMtNjIxNy1cXHRcXHQgKiBjb3VudCB0aGUgbnVtYmVyIG9mIHBhZ2VzIHVuZGVyIHBhZ2VzIGZsYWdnZWQgZm9yXFxuLS1cXG5tbS92bXNjYW4uYy02MjI0LVxcdFxcdC8qXFxubW0vdm1zY2FuLmM6NjIyNTpcXHRcXHQgKiBJZiBrc3dhcGQgc2NhbnMgcGFnZXMgbWFya2VkIGZvciBpbW1lZGlhdGVcXG5tbS92bXNjYW4uYy02MjI2LVxcdFxcdCAqIHJlY2xhaW0gYW5kIHVuZGVyIHdyaXRlYmFjayAobnJfaW1tZWRpYXRlKSwgaXRcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyNDUtXFxubW0vdm1zY2FuLmM6NjI0NjpcXHRcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy02MjQ3LVxcdFxcdFxcdHNldF9iaXQoTFJVVkVDX05PREVfQ09OR0VTVEVELCBcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxubW0vdm1zY2FuLmMtNjI1MS1cXHQgKiBTdGFsbCBkaXJlY3QgcmVjbGFpbSBmb3IgSU8gY29tcGxldGlvbnMgaWYgdGhlIGxydXZlYyBpc1xcbm1tL3Ztc2Nhbi5jOjYyNTI6XFx0ICogbm9kZSBpcyBjb25nZXN0ZWQuIEFsbG93IGtzd2FwZCB0byBjb250aW51ZSB1bnRpbCBpdFxcbm1tL3Ztc2Nhbi5jLTYyNTMtXFx0ICogc3RhcnRzIGVuY291bnRlcmluZyB1bnF1ZXVlZCBkaXJ0eSBwYWdlcyBvciBjeWNsaW5nIHRocm91Z2hcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyNTUtXFx0ICovXFxubW0vdm1zY2FuLmM6NjI1NjpcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgXFx1MDAyNlxcdTAwMjYgY3VycmVudF9tYXlfdGhyb3R0bGUoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTYyNTctXFx0ICAgICFzYy1cXHUwMDNlaGliZXJuYXRpb25fbW9kZSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vdm1zY2FuLmMtNjI2OC1cXHQgKiBzbGVlcC4gT24gcmVjbGFpbSBwcm9ncmVzcywgcmVzZXQgdGhlIGZhaWx1cmUgY291bnRlci4gQVxcbm1tL3Ztc2Nhbi5jOjYyNjk6XFx0ICogc3VjY2Vzc2Z1bCBkaXJlY3QgcmVjbGFpbSBydW4gd2lsbCByZXZpdmUgYSBkb3JtYW50IGtzd2FwZC5cXG5tbS92bXNjYW4uYy02MjcwLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jLTYyNzEtXFx0aWYgKHJlY2xhaW1hYmxlKVxcbm1tL3Ztc2Nhbi5jOjYyNzI6XFx0XFx0a3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhwZ2RhdCwgc2MtXFx1MDAzZW9yZGVyLCBzYy1cXHUwMDNlcmVjbGFpbV9pZHgpO1xcbm1tL3Ztc2Nhbi5jLTYyNzMtXFx0ZWxzZSBpZiAoc2MtXFx1MDAzZWNhY2hlX3RyaW1fbW9kZSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYzMTE9c3RhdGljIHZvaWQgY29uc2lkZXJfcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzMjctXFx0LypcXG5tbS92bXNjYW4uYzo2MzI4OlxcdCAqIERvIG5vdCB0aHJvdHRsZSBrc3dhcGQgb3IgY2dyb3VwIHJlY2xhaW0gb24gTk9QUk9HUkVTUyBhcyBpdCB3aWxsXFxubW0vdm1zY2FuLmMtNjMyOS1cXHQgKiB0aHJvdHRsZSBvbiBWTVNDQU5fVEhST1RUTEVfV1JJVEVCQUNLIGlmIHRoZXJlIGFyZSB0b28gbWFueSBwYWdlc1xcbi0tXFxubW0vdm1zY2FuLmMtNjMzMi1cXHQgKi9cXG5tbS92bXNjYW4uYzo2MzMzOlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIHx8IGNncm91cF9yZWNsYWltKHNjKSlcXG5tbS92bXNjYW4uYy02MzM0LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY1Njk9c3RhdGljIGJvb2wgYWxsb3dfZGlyZWN0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY1NzYtXFxubW0vdm1zY2FuLmM6NjU3NzpcXHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpKVxcbm1tL3Ztc2Nhbi5jLTY1NzgtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS92bXNjYW4uYy02NTkzLVxcbm1tL3Ztc2Nhbi5jOjY1OTQ6XFx0Lyoga3N3YXBkIG11c3QgYmUgYXdha2UgaWYgcHJvY2Vzc2VzIGFyZSBiZWluZyB0aHJvdHRsZWQgKi9cXG5tbS92bXNjYW4uYzo2NTk1OlxcdGlmICghd21hcmtfb2sgXFx1MDAyNlxcdTAwMjYgd2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0KSkge1xcbm1tL3Ztc2Nhbi5jOjY1OTY6XFx0XFx0aWYgKFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCkgXFx1MDAzZSBaT05FX05PUk1BTClcXG5tbS92bXNjYW4uYzo2NTk3OlxcdFxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsIFpPTkVfTk9STUFMKTtcXG5tbS92bXNjYW4uYy02NTk4LVxcbm1tL3Ztc2Nhbi5jOjY1OTk6XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQpO1xcbm1tL3Ztc2Nhbi5jLTY2MDAtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmMtNjYwNy0gKiBhbmQgdGhlIFBGTUVNQUxMT0MgcmVzZXJ2ZSBmb3IgdGhlIHByZWZlcnJlZCBub2RlIGlzIGdldHRpbmcgZGFuZ2Vyb3VzbHlcXG5tbS92bXNjYW4uYzo2NjA4OiAqIGRlcGxldGVkLiBrc3dhcGQgd2lsbCBjb250aW51ZSB0byBtYWtlIHByb2dyZXNzIGFuZCB3YWtlIHRoZSBwcm9jZXNzZXNcXG5tbS92bXNjYW4uYy02NjA5LSAqIHdoZW4gdGhlIGxvdyB3YXRlcm1hcmsgaXMgcmVhY2hlZC5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2MTQ9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy02NjQ0LVxcdCAqIFRocm90dGxpbmcgaXMgYmFzZWQgb24gdGhlIGZpcnN0IHVzYWJsZSBub2RlIGFuZCB0aHJvdHRsZWQgcHJvY2Vzc2VzXFxubW0vdm1zY2FuLmM6NjY0NTpcXHQgKiB3YWl0IG9uIGEgcXVldWUgdW50aWwga3N3YXBkIG1ha2VzIHByb2dyZXNzIGFuZCB3YWtlcyB0aGVtLiBUaGVyZVxcbm1tL3Ztc2Nhbi5jLTY2NDYtXFx0ICogaXMgYW4gYWZmaW5pdHkgdGhlbiBiZXR3ZWVuIHByb2Nlc3NlcyB3YWtpbmcgdXAgYW5kIHdoZXJlIHJlY2xhaW1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTY2NzQtXFx0ICogdHJhbnNhY3Rpb24gaW4gdGhlIGNhc2Ugb2YgYSBmaWxlc3lzdGVtIGxpa2UgZXh0WzN8NF0uIEluIHRoaXMgY2FzZSxcXG5tbS92bXNjYW4uYzo2Njc1OlxcdCAqIGl0IGlzIG5vdCBzYWZlIHRvIGJsb2NrIG9uIHBmbWVtYWxsb2Nfd2FpdCBhcyBrc3dhcGQgY291bGQgYmVcXG5tbS92bXNjYW4uYy02Njc2LVxcdCAqIGJsb2NrZWQgd2FpdGluZyBvbiB0aGUgc2FtZSBsb2NrLiBJbnN0ZWFkLCB0aHJvdHRsZSBmb3IgdXAgdG8gYVxcbi0tXFxubW0vdm1zY2FuLmMtNjY4Mi1cXHRlbHNlXFxubW0vdm1zY2FuLmM6NjY4MzpcXHRcXHQvKiBUaHJvdHRsZSB1bnRpbCBrc3dhcGQgd2FrZXMgdGhlIHByb2Nlc3MgKi9cXG5tbS92bXNjYW4uYy02Njg0LVxcdFxcdHdhaXRfZXZlbnRfa2lsbGFibGUoem9uZS1cXHUwMDNlem9uZV9wZ2RhdC1cXHUwMDNlcGZtZW1hbGxvY193YWl0LFxcbi0tXFxubW0vdm1zY2FuLmM9NjgyMT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjgzMC1cXG5tbS92bXNjYW4uYzo2ODMxOnN0YXRpYyB2b2lkIGtzd2FwZF9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy02ODMyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4ODg9c3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNjkxMC1cXHRcXHQgKlxcbm1tL3Ztc2Nhbi5jOjY5MTE6XFx0XFx0ICogSG93ZXZlciwga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2ggdGhpcyBvblxcbm1tL3Ztc2Nhbi5jLTY5MTItXFx0XFx0ICogaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuIE9uY2UgaXQnc1xcbm1tL3Ztc2Nhbi5jOjY5MTM6XFx0XFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcXG5tbS92bXNjYW4uYy02OTE0LVxcdFxcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NDUtXFx0ICogbmVlZCBiYWxhbmNpbmcgYnkgZGVmaW5pdGlvbi4gVGhpcyBjYW4gaGFwcGVuIGlmIGEgem9uZS1yZXN0cmljdGVkXFxubW0vdm1zY2FuLmM6Njk0NjpcXHQgKiBhbGxvY2F0aW9uIHRyaWVzIHRvIHdha2UgYSByZW1vdGUga3N3YXBkLlxcbm1tL3Ztc2Nhbi5jLTY5NDctXFx0ICovXFxuLS1cXG5tbS92bXNjYW4uYz02OTU1PXN0YXRpYyB2b2lkIGNsZWFyX3BnZGF0X2Nvbmdlc3RlZChwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNjk2NC0vKlxcbm1tL3Ztc2Nhbi5jOjY5NjU6ICogUHJlcGFyZSBrc3dhcGQgZm9yIHNsZWVwaW5nLiBUaGlzIHZlcmlmaWVzIHRoYXQgdGhlcmUgYXJlIG5vIHByb2Nlc3Nlc1xcbm1tL3Ztc2Nhbi5jLTY5NjYtICogd2FpdGluZyBpbiB0aHJvdHRsZV9kaXJlY3RfcmVjbGFpbSgpIGFuZCB0aGF0IHdhdGVybWFya3MgaGF2ZSBiZWVuIG1ldC5cXG5tbS92bXNjYW4uYy02OTY3LSAqXFxubW0vdm1zY2FuLmM6Njk2ODogKiBSZXR1cm5zIHRydWUgaWYga3N3YXBkIGlzIHJlYWR5IHRvIHNsZWVwXFxubW0vdm1zY2FuLmMtNjk2OS0gKi9cXG5tbS92bXNjYW4uYzo2OTcwOnN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcXG5tbS92bXNjYW4uYy02OTcxLVxcdFxcdFxcdFxcdGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy02OTc1LVxcdCAqIHNvb24gYXMgYWxsb3dfZGlyZWN0X3JlY2xhaW0oKSBpcyB0cnVlLiBCdXQgdGhlcmUgaXMgYSBwb3RlbnRpYWxcXG5tbS92bXNjYW4uYzo2OTc2OlxcdCAqIHJhY2UgYmV0d2VlbiB3aGVuIGtzd2FwZCBjaGVja3MgdGhlIHdhdGVybWFya3MgYW5kIGEgcHJvY2VzcyBnZXRzXFxubW0vdm1zY2FuLmMtNjk3Ny1cXHQgKiB0aHJvdHRsZWQuIFRoZXJlIGlzIGFsc28gYSBwb3RlbnRpYWwgcmFjZSBpZiBwcm9jZXNzZXMgZ2V0XFxubW0vdm1zY2FuLmM6Njk3ODpcXHQgKiB0aHJvdHRsZWQsIGtzd2FwZCB3YWtlcywgYSBsYXJnZSBwcm9jZXNzIGV4aXRzIHRoZXJlYnkgYmFsYW5jaW5nIHRoZVxcbm1tL3Ztc2Nhbi5jOjY5Nzk6XFx0ICogem9uZXMsIHdoaWNoIGNhdXNlcyBrc3dhcGQgdG8gZXhpdCBiYWxhbmNlX3BnZGF0KCkgYmVmb3JlIHJlYWNoaW5nXFxubW0vdm1zY2FuLmM6Njk4MDpcXHQgKiB0aGUgd2FrZSB1cCBjaGVja3MuIElmIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgbm8gcHJvY2VzcyBzaG91bGRcXG5tbS92bXNjYW4uYy02OTgxLVxcdCAqIGJlIHNsZWVwaW5nIG9uIHBmbWVtYWxsb2Nfd2FpdCwgc28gd2FrZSB0aGVtIG5vdyBpZiBuZWNlc3NhcnkuIElmXFxubW0vdm1zY2FuLmM6Njk4MjpcXHQgKiB0aGUgd2FrZSB1cCBpcyBwcmVtYXR1cmUsIHByb2Nlc3NlcyB3aWxsIHdha2Uga3N3YXBkIGFuZCBnZXRcXG5tbS92bXNjYW4uYy02OTgzLVxcdCAqIHRocm90dGxlZCBhZ2Fpbi4gVGhlIGRpZmZlcmVuY2UgZnJvbSB3YWtlIHVwcyBpbiBiYWxhbmNlX3BnZGF0KCkgaXNcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5ODktXFx0LyogSG9wZWxlc3Mgbm9kZSwgbGVhdmUgaXQgdG8gZGlyZWN0IHJlY2xhaW0gKi9cXG5tbS92bXNjYW4uYzo2OTkwOlxcdGlmIChrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ2RhdCkpXFxubW0vdm1zY2FuLmMtNjk5MS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwMDEtLypcXG5tbS92bXNjYW4uYzo3MDAyOiAqIGtzd2FwZCBzaHJpbmtzIGEgbm9kZSBvZiBwYWdlcyB0aGF0IGFyZSBhdCBvciBiZWxvdyB0aGUgaGlnaGVzdCB1c2FibGVcXG5tbS92bXNjYW4uYy03MDAzLSAqIHpvbmUgdGhhdCBpcyBjdXJyZW50bHkgdW5iYWxhbmNlZC5cXG5tbS92bXNjYW4uYy03MDA0LSAqXFxubW0vdm1zY2FuLmM6NzAwNTogKiBSZXR1cm5zIHRydWUgaWYga3N3YXBkIHNjYW5uZWQgYXQgbGVhc3QgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcGFnZXMgdG9cXG5tbS92bXNjYW4uYy03MDA2LSAqIHJlY2xhaW0gb3IgaWYgdGhlIGxhY2sgb2YgcHJvZ3Jlc3Mgd2FzIGR1ZSB0byBwYWdlcyB1bmRlciB3cml0ZWJhY2suXFxuLS1cXG5tbS92bXNjYW4uYy03MDA4LSAqL1xcbm1tL3Ztc2Nhbi5jOjcwMDk6c3RhdGljIGJvb2wga3N3YXBkX3Nocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsXFxubW0vdm1zY2FuLmMtNzAxMC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYz03MDY0PWNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MDY5LS8qXFxubW0vdm1zY2FuLmM6NzA3MDogKiBGb3Iga3N3YXBkLCBiYWxhbmNlX3BnZGF0KCkgd2lsbCByZWNsYWltIHBhZ2VzIGFjcm9zcyBhIG5vZGUgZnJvbSB6b25lc1xcbm1tL3Ztc2Nhbi5jLTcwNzEtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXFxuLS1cXG5tbS92bXNjYW4uYy03MDczLSAqXFxubW0vdm1zY2FuLmM6NzA3NDogKiBSZXR1cm5zIHRoZSBvcmRlciBrc3dhcGQgZmluaXNoZWQgcmVjbGFpbWluZyBhdC5cXG5tbS92bXNjYW4uYy03MDc1LSAqXFxubW0vdm1zY2FuLmM6NzA3NjogKiBrc3dhcGQgc2NhbnMgdGhlIHpvbmVzIGluIHRoZSBoaWdobWVtLVxcdTAwM2Vub3JtYWwtXFx1MDAzZWRtYSBkaXJlY3Rpb24uICBJdCBza2lwc1xcbm1tL3Ztc2Nhbi5jLTcwNzctICogem9uZXMgd2hpY2ggaGF2ZSBmcmVlX3BhZ2VzIFxcdTAwM2UgaGlnaF93bWFya19wYWdlcyh6b25lKSwgYnV0IG9uY2UgYSB6b25lIGlzXFxuLS1cXG5tbS92bXNjYW4uYz03MDgyPXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MTA4LVxcdCAqIHBsYWNlIHNvIHRoYXQgcGFyYWxsZWwgYWxsb2NhdGlvbnMgdGhhdCBhcmUgbmVhciB0aGUgd2F0ZXJtYXJrIHdpbGxcXG5tbS92bXNjYW4uYzo3MTA5OlxcdCAqIHN0YWxsIG9yIGRpcmVjdCByZWNsYWltIHVudGlsIGtzd2FwZCBpcyBmaW5pc2hlZC5cXG5tbS92bXNjYW4uYy03MTEwLVxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmMtNzEzNy1cXHRcXHQgKiBnbyBhaGVhZCBpZiBhbGwgZWxpZ2libGUgem9uZXMgZm9yIHRoZSBvcmlnaW5hbCBhbGxvY2F0aW9uXFxubW0vdm1zY2FuLmM6NzEzODpcXHRcXHQgKiByZXF1ZXN0IGFyZSBiYWxhbmNlZCB0byBhdm9pZCBleGNlc3NpdmUgcmVjbGFpbSBmcm9tIGtzd2FwZC5cXG5tbS92bXNjYW4uYy03MTM5LVxcdFxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmMtNzE1NS1cXHRcXHQgKiBvbiB0aGUgZ3JvdW5kcyB0aGF0IHRoZSBub3JtYWwgcmVjbGFpbSBzaG91bGQgYmUgZW5vdWdoIHRvXFxubW0vdm1zY2FuLmM6NzE1NjpcXHRcXHQgKiByZS1ldmFsdWF0ZSBpZiBib29zdGluZyBpcyByZXF1aXJlZCB3aGVuIGtzd2FwZCBuZXh0IHdha2VzLlxcbm1tL3Ztc2Nhbi5jLTcxNTctXFx0XFx0ICovXFxuLS1cXG5tbS92bXNjYW4uYy03MTg5LVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjcxOTA6XFx0XFx0a3N3YXBkX2FnZV9ub2RlKHBnZGF0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTcxOTEtXFxuLS1cXG5tbS92bXNjYW4uYy03MjAzLVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjcyMDQ6XFx0XFx0aWYgKGtzd2FwZF9zaHJpbmtfbm9kZShwZ2RhdCwgXFx1MDAyNnNjKSlcXG5tbS92bXNjYW4uYy03MjA1LVxcdFxcdFxcdHJhaXNlX3ByaW9yaXR5ID0gZmFsc2U7XFxuLS1cXG5tbS92bXNjYW4uYy03MjE1LVxcbm1tL3Ztc2Nhbi5jOjcyMTY6XFx0XFx0LyogQ2hlY2sgaWYga3N3YXBkIHNob3VsZCBiZSBzdXNwZW5kaW5nICovXFxubW0vdm1zY2FuLmMtNzIxNy1cXHRcXHRfX2ZzX3JlY2xhaW1fcmVsZWFzZShfVEhJU19JUF8pO1xcbi0tXFxubW0vdm1zY2FuLmMtNzI1NC1cXHQgKiB3YXRlcm1hcmtfaGlnaCBhdCB0aGlzIHBvaW50LiBXZSBuZWVkIHRvIGF2b2lkIGluY3JlYXNpbmcgdGhlXFxubW0vdm1zY2FuLmM6NzI1NTpcXHQgKiBmYWlsdXJlIGNvdW50IHRvIHByZXZlbnQgdGhlIGtzd2FwZCB0aHJlYWQgZnJvbSBzdG9wcGluZy5cXG5tbS92bXNjYW4uYy03MjU2LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jLTcyNTctXFx0aWYgKCFzYy5ucl9yZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgIWJvb3N0ZWQpIHtcXG5tbS92bXNjYW4uYzo3MjU4OlxcdFxcdGludCBmYWlsX2NudCA9IGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX2ZhaWx1cmVzKTtcXG5tbS92bXNjYW4uYzo3MjU5OlxcdFxcdC8qIGtzd2FwZCBjb250ZXh0LCBsb3cgb3ZlcmhlYWQgdG8gdHJhY2UgZXZlcnkgZmFpbHVyZSAqL1xcbm1tL3Ztc2Nhbi5jOjcyNjA6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9yZWNsYWltX2ZhaWwocGdkYXQtXFx1MDAzZW5vZGVfaWQsIGZhaWxfY250KTtcXG5tbS92bXNjYW4uYy03MjYxLVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyOTYtXFx0LypcXG5tbS92bXNjYW4uYzo3Mjk3OlxcdCAqIFJldHVybiB0aGUgb3JkZXIga3N3YXBkIHN0b3BwZWQgcmVjbGFpbWluZyBhdCBhc1xcbm1tL3Ztc2Nhbi5jOjcyOTg6XFx0ICogcHJlcGFyZV9rc3dhcGRfc2xlZXAoKSB0YWtlcyBpdCBpbnRvIGFjY291bnQuIElmIGFub3RoZXIgY2FsbGVyXFxubW0vdm1zY2FuLmM6NzI5OTpcXHQgKiBlbnRlcmVkIHRoZSBhbGxvY2F0b3Igc2xvdyBwYXRoIHdoaWxlIGtzd2FwZCB3YXMgYXdha2UsIG9yZGVyIHdpbGxcXG5tbS92bXNjYW4uYy03MzAwLVxcdCAqIHJlbWFpbiBhdCB0aGUgaGlnaGVyIGxldmVsLlxcbi0tXFxubW0vdm1zY2FuLmMtNzMwNS0vKlxcbm1tL3Ztc2Nhbi5jOjczMDY6ICogVGhlIHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4IGlzIHVzZWQgdG8gcGFzcyB0aGUgaGlnaGVzdCB6b25lIGluZGV4IHRvXFxubW0vdm1zY2FuLmM6NzMwNzogKiBiZSByZWNsYWltZWQgYnkga3N3YXBkIGZyb20gdGhlIHdha2VyLiBJZiB0aGUgdmFsdWUgaXMgTUFYX05SX1pPTkVTIHdoaWNoIGlzXFxubW0vdm1zY2FuLmM6NzMwODogKiBub3QgYSB2YWxpZCBpbmRleCB0aGVuIGVpdGhlciBrc3dhcGQgcnVucyBmb3IgZmlyc3QgdGltZSBvciBrc3dhcGQgY291bGRuJ3RcXG5tbS92bXNjYW4uYy03MzA5LSAqIHNsZWVwIGFmdGVyIHByZXZpb3VzIHJlY2xhaW0gYXR0ZW1wdCAobm9kZSBpcyBzdGlsbCB1bmJhbGFuY2VkKS4gSW4gdGhhdFxcbm1tL3Ztc2Nhbi5jOjczMTA6ICogY2FzZSByZXR1cm4gdGhlIHpvbmUgaW5kZXggb2YgdGhlIHByZXZpb3VzIGtzd2FwZCByZWNsYWltIGN5Y2xlLlxcbm1tL3Ztc2Nhbi5jLTczMTEtICovXFxubW0vdm1zY2FuLmM6NzMxMjpzdGF0aWMgZW51bSB6b25lX3R5cGUga3N3YXBkX2hpZ2hlc3Rfem9uZWlkeChwZ19kYXRhX3QgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTczMTMtXFx0XFx0XFx0XFx0XFx0ICAgZW51bSB6b25lX3R5cGUgcHJldl9oaWdoZXN0X3pvbmVpZHgpXFxubW0vdm1zY2FuLmMtNzMxNC17XFxubW0vdm1zY2FuLmM6NzMxNTpcXHRlbnVtIHpvbmVfdHlwZSBjdXJyX2lkeCA9IFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmMtNzMxNi1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTczMTktXFxubW0vdm1zY2FuLmM6NzMyMDpzdGF0aWMgdm9pZCBrc3dhcGRfdHJ5X3RvX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBhbGxvY19vcmRlciwgaW50IHJlY2xhaW1fb3JkZXIsXFxubW0vdm1zY2FuLmMtNzMyMS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzMyOC1cXG5tbS92bXNjYW4uYzo3MzI5OlxcdHByZXBhcmVfdG9fd2FpdChcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0LCBcXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcXG5tbS92bXNjYW4uYy03MzMwLVxcbi0tXFxubW0vdm1zY2FuLmMtNzMzNy1cXHQgKi9cXG5tbS92bXNjYW4uYzo3MzM4OlxcdGlmIChwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ2RhdCwgcmVjbGFpbV9vcmRlciwgaGlnaGVzdF96b25laWR4KSkge1xcbm1tL3Ztc2Nhbi5jLTczMzktXFx0XFx0LypcXG4tLVxcbm1tL3Ztc2Nhbi5jLTczNDEtXFx0XFx0ICogaXNvbGF0ZSBwYWdlcyBmcm9tIGFuZCBza2lwcyB0aGVtIGluIHRoZSBmdXR1cmUgc2Nhbm5pbmcuXFxubW0vdm1zY2FuLmM6NzM0MjpcXHRcXHQgKiBXaGVuIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgaXQgaXMgcmVhc29uYWJsZSB0byBhc3N1bWVcXG5tbS92bXNjYW4uYy03MzQzLVxcdFxcdCAqIHRoYXQgcGFnZXMgYW5kIGNvbXBhY3Rpb24gbWF5IHN1Y2NlZWQgc28gcmVzZXQgdGhlIGNhY2hlLlxcbi0tXFxubW0vdm1zY2FuLmMtNzM1NS1cXHRcXHQvKlxcbm1tL3Ztc2Nhbi5jOjczNTY6XFx0XFx0ICogSWYgd29rZW4gcHJlbWF0dXJlbHkgdGhlbiByZXNldCBrc3dhcGRfaGlnaGVzdF96b25laWR4IGFuZFxcbm1tL3Ztc2Nhbi5jLTczNTctXFx0XFx0ICogb3JkZXIuIFRoZSB2YWx1ZXMgd2lsbCBlaXRoZXIgYmUgZnJvbSBhIHdha2V1cCByZXF1ZXN0IG9yXFxuLS1cXG5tbS92bXNjYW4uYy03MzYwLVxcdFxcdGlmIChyZW1haW5pbmcpIHtcXG5tbS92bXNjYW4uYzo3MzYxOlxcdFxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9oaWdoZXN0X3pvbmVpZHgsXFxubW0vdm1zY2FuLmM6NzM2MjpcXHRcXHRcXHRcXHRcXHRrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTczNjMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4KSk7XFxubW0vdm1zY2FuLmMtNzM2NC1cXG5tbS92bXNjYW4uYzo3MzY1OlxcdFxcdFxcdGlmIChSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlcikgXFx1MDAzYyByZWNsYWltX29yZGVyKVxcbm1tL3Ztc2Nhbi5jOjczNjY6XFx0XFx0XFx0XFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyLCByZWNsYWltX29yZGVyKTtcXG5tbS92bXNjYW4uYy03MzY3LVxcdFxcdH1cXG5tbS92bXNjYW4uYy03MzY4LVxcbm1tL3Ztc2Nhbi5jOjczNjk6XFx0XFx0ZmluaXNoX3dhaXQoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCwgXFx1MDAyNndhaXQpO1xcbm1tL3Ztc2Nhbi5jOjczNzA6XFx0XFx0cHJlcGFyZV90b193YWl0KFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQsIFxcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xcbm1tL3Ztc2Nhbi5jLTczNzEtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmMtNzM3Ny1cXHRpZiAoIXJlbWFpbmluZyBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jOjczNzg6XFx0ICAgIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnZGF0LCByZWNsYWltX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKSB7XFxubW0vdm1zY2FuLmM6NzM3OTpcXHRcXHR0cmFjZV9tbV92bXNjYW5fa3N3YXBkX3NsZWVwKHBnZGF0LVxcdTAwM2Vub2RlX2lkKTtcXG5tbS92bXNjYW4uYy03MzgwLVxcbi0tXFxubW0vdm1zY2FuLmMtNzM4NS1cXHRcXHQgKiB3YXRlcm1hcmtzIGJlaW5nIGJyZWFjaGVkIHdoaWxlIHVuZGVyIHByZXNzdXJlLCB3ZSByZWR1Y2UgdGhlXFxubW0vdm1zY2FuLmM6NzM4NjpcXHRcXHQgKiBwZXItY3B1IHZtc3RhdCB0aHJlc2hvbGQgd2hpbGUga3N3YXBkIGlzIGF3YWtlIGFuZCByZXN0b3JlXFxubW0vdm1zY2FuLmMtNzM4Ny1cXHRcXHQgKiB0aGVtIGJlZm9yZSBnb2luZyBiYWNrIHRvIHNsZWVwLlxcbi0tXFxubW0vdm1zY2FuLmMtNzQwMC1cXHR9XFxubW0vdm1zY2FuLmM6NzQwMTpcXHRmaW5pc2hfd2FpdChcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF93YWl0LCBcXHUwMDI2d2FpdCk7XFxubW0vdm1zY2FuLmMtNzQwMi19XFxuLS1cXG5tbS92bXNjYW4uYy03NDE2LSAqL1xcbm1tL3Ztc2Nhbi5jOjc0MTc6c3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcXG5tbS92bXNjYW4uYy03NDE4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0MjYtXFx0ICogYW5kIHRoYXQgaWYgd2UgbmVlZCBtb3JlIG1lbW9yeSB3ZSBzaG91bGQgZ2V0IGFjY2VzcyB0byBpdFxcbm1tL3Ztc2Nhbi5jOjc0Mjc6XFx0ICogcmVnYXJkbGVzcyAoc2VlIFxcXCJfX2FsbG9jX3BhZ2VzKClcXFwiKS4gXFxcImtzd2FwZFxcXCIgc2hvdWxkXFxubW0vdm1zY2FuLmMtNzQyOC1cXHQgKiBuZXZlciBnZXQgY2F1Z2h0IGluIHRoZSBub3JtYWwgcGFnZSBmcmVlaW5nIGxvZ2ljLlxcbi0tXFxubW0vdm1zY2FuLmMtNzQzOC1cXG5tbS92bXNjYW4uYzo3NDM5OlxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XFxubW0vdm1zY2FuLmM6NzQ0MDpcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBNQVhfTlJfWk9ORVMpO1xcbm1tL3Ztc2Nhbi5jLTc0NDEtXFx0YXRvbWljX3NldChcXHUwMDI2cGdkYXQtXFx1MDAzZW5yX3dyaXRlYmFja190aHJvdHRsZWQsIDApO1xcbi0tXFxubW0vdm1zY2FuLmMtNzQ0NC1cXG5tbS92bXNjYW4uYzo3NDQ1OlxcdFxcdGFsbG9jX29yZGVyID0gcmVjbGFpbV9vcmRlciA9IFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyKTtcXG5tbS92bXNjYW4uYzo3NDQ2OlxcdFxcdGhpZ2hlc3Rfem9uZWlkeCA9IGtzd2FwZF9oaWdoZXN0X3pvbmVpZHgocGdkYXQsXFxubW0vdm1zY2FuLmMtNzQ0Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jLTc0NDgtXFxubW0vdm1zY2FuLmM6NzQ0OTprc3dhcGRfdHJ5X3NsZWVwOlxcbm1tL3Ztc2Nhbi5jOjc0NTA6XFx0XFx0a3N3YXBkX3RyeV90b19zbGVlcChwZ2RhdCwgYWxsb2Nfb3JkZXIsIHJlY2xhaW1fb3JkZXIsXFxubW0vdm1zY2FuLmMtNzQ1MS1cXHRcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgpO1xcbi0tXFxubW0vdm1zY2FuLmMtNzQ1My1cXHRcXHQvKiBSZWFkIHRoZSBuZXcgb3JkZXIgYW5kIGhpZ2hlc3Rfem9uZWlkeCAqL1xcbm1tL3Ztc2Nhbi5jOjc0NTQ6XFx0XFx0YWxsb2Nfb3JkZXIgPSBSRUFEX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlcik7XFxubW0vdm1zY2FuLmM6NzQ1NTpcXHRcXHRoaWdoZXN0X3pvbmVpZHggPSBrc3dhcGRfaGlnaGVzdF96b25laWR4KHBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc0NTYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4KTtcXG5tbS92bXNjYW4uYzo3NDU3OlxcdFxcdFdSSVRFX09OQ0UocGdkYXQtXFx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XFxubW0vdm1zY2FuLmM6NzQ1ODpcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBNQVhfTlJfWk9ORVMpO1xcbm1tL3Ztc2Nhbi5jLTc0NTktXFxuLS1cXG5tbS92bXNjYW4uYy03NDcxLVxcdFxcdCAqIFJlY2xhaW0gYmVnaW5zIGF0IHRoZSByZXF1ZXN0ZWQgb3JkZXIgYnV0IGlmIGEgaGlnaC1vcmRlclxcbm1tL3Ztc2Nhbi5jOjc0NzI6XFx0XFx0ICogcmVjbGFpbSBmYWlscyB0aGVuIGtzd2FwZCBmYWxscyBiYWNrIHRvIHJlY2xhaW1pbmcgZm9yXFxubW0vdm1zY2FuLmM6NzQ3MzpcXHRcXHQgKiBvcmRlci0wLiBJZiB0aGF0IGhhcHBlbnMsIGtzd2FwZCB3aWxsIGNvbnNpZGVyIHNsZWVwaW5nXFxubW0vdm1zY2FuLmMtNzQ3NC1cXHRcXHQgKiBmb3IgdGhlIG9yZGVyIGl0IGZpbmlzaGVkIHJlY2xhaW1pbmcgYXQgKHJlY2xhaW1fb3JkZXIpXFxuLS1cXG5tbS92bXNjYW4uYy03NDc3LVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc0Nzg6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF93YWtlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBoaWdoZXN0X3pvbmVpZHgsXFxubW0vdm1zY2FuLmMtNzQ3OS1cXHRcXHRcXHRcXHRcXHRcXHRhbGxvY19vcmRlcik7XFxuLS1cXG5tbS92bXNjYW4uYy03NDgyLVxcdFxcdGlmIChyZWNsYWltX29yZGVyIFxcdTAwM2MgYWxsb2Nfb3JkZXIpXFxubW0vdm1zY2FuLmM6NzQ4MzpcXHRcXHRcXHRnb3RvIGtzd2FwZF90cnlfc2xlZXA7XFxubW0vdm1zY2FuLmMtNzQ4NC1cXHR9XFxuLS1cXG5tbS92bXNjYW4uYy03NDkyLSAqIEEgem9uZSBpcyBsb3cgb24gZnJlZSBtZW1vcnkgb3IgdG9vIGZyYWdtZW50ZWQgZm9yIGhpZ2gtb3JkZXIgbWVtb3J5LiAgSWZcXG5tbS92bXNjYW4uYzo3NDkzOiAqIGtzd2FwZCBzaG91bGQgcmVjbGFpbSAoZGlyZWN0IHJlY2xhaW0gaXMgZGVmZXJyZWQpLCB3YWtlIGl0IHVwIGZvciB0aGUgem9uZSdzXFxubW0vdm1zY2FuLmM6NzQ5NDogKiBwZ2RhdC4gIEl0IHdpbGwgd2FrZSB1cCBrY29tcGFjdGQgYWZ0ZXIgcmVjbGFpbWluZyBtZW1vcnkuICBJZiBrc3dhcGQgcmVjbGFpbVxcbm1tL3Ztc2Nhbi5jLTc0OTUtICogaGFzIGZhaWxlZCBvciBpcyBub3QgbmVlZGVkLCBzdGlsbCB3YWtlIHVwIGtjb21wYWN0ZCBpZiBvbmx5IGNvbXBhY3Rpb24gaXNcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0OTctICovXFxubW0vdm1zY2FuLmM6NzQ5ODp2b2lkIHdha2V1cF9rc3dhcGQoc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9mbGFncywgaW50IG9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTc0OTktXFx0XFx0ICAgZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzUxMC1cXHRwZ2RhdCA9IHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQ7XFxubW0vdm1zY2FuLmM6NzUxMTpcXHRjdXJyX2lkeCA9IFJFQURfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX2hpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmMtNzUxMi1cXG5tbS92bXNjYW4uYy03NTEzLVxcdGlmIChjdXJyX2lkeCA9PSBNQVhfTlJfWk9ORVMgfHwgY3Vycl9pZHggXFx1MDAzYyBoaWdoZXN0X3pvbmVpZHgpXFxubW0vdm1zY2FuLmM6NzUxNDpcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfaGlnaGVzdF96b25laWR4LCBoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jLTc1MTUtXFxubW0vdm1zY2FuLmM6NzUxNjpcXHRpZiAoUkVBRF9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIpIFxcdTAwM2Mgb3JkZXIpXFxubW0vdm1zY2FuLmM6NzUxNzpcXHRcXHRXUklURV9PTkNFKHBnZGF0LVxcdTAwM2Vrc3dhcGRfb3JkZXIsIG9yZGVyKTtcXG5tbS92bXNjYW4uYy03NTE4LVxcbm1tL3Ztc2Nhbi5jOjc1MTk6XFx0aWYgKCF3YWl0cXVldWVfYWN0aXZlKFxcdTAwMjZwZ2RhdC1cXHUwMDNla3N3YXBkX3dhaXQpKVxcbm1tL3Ztc2Nhbi5jLTc1MjAtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmMtNzUyMi1cXHQvKiBIb3BlbGVzcyBub2RlLCBsZWF2ZSBpdCB0byBkaXJlY3QgcmVjbGFpbSBpZiBwb3NzaWJsZSAqL1xcbm1tL3Ztc2Nhbi5jOjc1MjM6XFx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSB8fFxcbm1tL3Ztc2Nhbi5jLTc1MjQtXFx0ICAgIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1MzctXFxubW0vdm1zY2FuLmM6NzUzODpcXHR0cmFjZV9tbV92bXNjYW5fd2FrZXVwX2tzd2FwZChwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgaGlnaGVzdF96b25laWR4LCBvcmRlcixcXG5tbS92bXNjYW4uYy03NTM5LVxcdFxcdFxcdFxcdCAgICAgIGdmcF9mbGFncyk7XFxubW0vdm1zY2FuLmM6NzU0MDpcXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfd2FpdCk7XFxubW0vdm1zY2FuLmMtNzU0MS19XFxubW0vdm1zY2FuLmMtNzU0Mi1cXG5tbS92bXNjYW4uYzo3NTQzOnZvaWQga3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0ga3N3YXBkX2NsZWFyX2hvcGVsZXNzX3JlYXNvbiByZWFzb24pXFxubW0vdm1zY2FuLmMtNzU0NC17XFxubW0vdm1zY2FuLmMtNzU0NS1cXHQvKiBPbmx5IHRyYWNlIGFjdHVhbCByZXNldHMsIG5vdCByZWR1bmRhbnQgemVyby10by16ZXJvICovXFxubW0vdm1zY2FuLmM6NzU0NjpcXHRpZiAoYXRvbWljX3hjaGcoXFx1MDAyNnBnZGF0LVxcdTAwM2Vrc3dhcGRfZmFpbHVyZXMsIDApKVxcbm1tL3Ztc2Nhbi5jOjc1NDc6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgcmVhc29uKTtcXG5tbS92bXNjYW4uYy03NTQ4LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NTAtLypcXG5tbS92bXNjYW4uYzo3NTUxOiAqIFJlc2V0IGtzd2FwZF9mYWlsdXJlcyBvbmx5IHdoZW4gdGhlIG5vZGUgaXMgYmFsYW5jZWQuIFdpdGhvdXQgdGhpc1xcbm1tL3Ztc2Nhbi5jLTc1NTItICogY2hlY2ssIHN1Y2Nlc3NmdWwgZGlyZWN0IHJlY2xhaW0gKGUuZy4sIGZyb20gY2dyb3VwIG1lbW9yeS5oaWdoXFxubW0vdm1zY2FuLmM6NzU1MzogKiB0aHJvdHRsaW5nKSBjYW4ga2VlcCByZXNldHRpbmcga3N3YXBkX2ZhaWx1cmVzIGV2ZW4gd2hlbiB0aGUgbm9kZVxcbm1tL3Ztc2Nhbi5jOjc1NTQ6ICogY2Fubm90IGJlIGJhbGFuY2VkLCBjYXVzaW5nIGtzd2FwZCB0byBydW4gZW5kbGVzc2x5Llxcbm1tL3Ztc2Nhbi5jLTc1NTUtICovXFxubW0vdm1zY2FuLmM6NzU1Njp2b2lkIGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3Moc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03NTU3LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03NTU5LVxcdGlmIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpXFxubW0vdm1zY2FuLmM6NzU2MDpcXHRcXHRrc3dhcGRfY2xlYXJfaG9wZWxlc3MocGdkYXQsIGN1cnJlbnRfaXNfa3N3YXBkKCkgP1xcbm1tL3Ztc2Nhbi5jLTc1NjEtXFx0XFx0XFx0S1NXQVBEX0NMRUFSX0hPUEVMRVNTX0tTV0FQRCA6IEtTV0FQRF9DTEVBUl9IT1BFTEVTU19ESVJFQ1QpO1xcbi0tXFxubW0vdm1zY2FuLmMtNzU2My1cXG5tbS92bXNjYW4uYzo3NTY0OmJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcXG5tbS92bXNjYW4uYy03NTY1LXtcXG5tbS92bXNjYW4uYzo3NTY2OlxcdHJldHVybiBhdG9taWNfcmVhZChcXHUwMDI2cGdkYXQtXFx1MDAzZWtzd2FwZF9mYWlsdXJlcykgXFx1MDAzZT0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG5tbS92bXNjYW4uYy03NTY3LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc1Nzg9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYy03NjA4LS8qXFxubW0vdm1zY2FuLmM6NzYwOTogKiBUaGlzIGtzd2FwZCBzdGFydCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBpbml0IGFuZCBub2RlLWhvdC1hZGQuXFxubW0vdm1zY2FuLmMtNzYxMC0gKi9cXG5tbS92bXNjYW4uYzo3NjExOnZvaWQgX19tZW1pbml0IGtzd2FwZF9ydW4oaW50IG5pZClcXG5tbS92bXNjYW4uYy03NjEyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2MTQtXFxubW0vdm1zY2FuLmM6NzYxNTpcXHRwZ2RhdF9rc3dhcGRfbG9jayhwZ2RhdCk7XFxubW0vdm1zY2FuLmM6NzYxNjpcXHRpZiAoIXBnZGF0LVxcdTAwM2Vrc3dhcGQpIHtcXG5tbS92bXNjYW4uYzo3NjE3OlxcdFxcdHBnZGF0LVxcdTAwM2Vrc3dhcGQgPSBrdGhyZWFkX2NyZWF0ZV9vbl9ub2RlKGtzd2FwZCwgcGdkYXQsIG5pZCwgXFxcImtzd2FwZCVkXFxcIiwgbmlkKTtcXG5tbS92bXNjYW4uYzo3NjE4OlxcdFxcdGlmIChJU19FUlIocGdkYXQtXFx1MDAzZWtzd2FwZCkpIHtcXG5tbS92bXNjYW4uYy03NjE5LVxcdFxcdFxcdC8qIGZhaWx1cmUgYXQgYm9vdCBpcyBmYXRhbCAqL1xcbm1tL3Ztc2Nhbi5jOjc2MjA6XFx0XFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gc3RhcnQga3N3YXBkIG9uIG5vZGUgJWQsIHJldD0lcGVcXFxcblxcXCIsXFxubW0vdm1zY2FuLmM6NzYyMTpcXHRcXHRcXHRcXHQgICBuaWQsIHBnZGF0LVxcdTAwM2Vrc3dhcGQpO1xcbm1tL3Ztc2Nhbi5jLTc2MjItXFx0XFx0XFx0QlVHX09OKHN5c3RlbV9zdGF0ZSBcXHUwMDNjIFNZU1RFTV9SVU5OSU5HKTtcXG5tbS92bXNjYW4uYzo3NjIzOlxcdFxcdFxcdHBnZGF0LVxcdTAwM2Vrc3dhcGQgPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jLTc2MjQtXFx0XFx0fSBlbHNlIHtcXG5tbS92bXNjYW4uYzo3NjI1OlxcdFxcdFxcdHdha2VfdXBfcHJvY2VzcyhwZ2RhdC1cXHUwMDNla3N3YXBkKTtcXG5tbS92bXNjYW4uYy03NjI2LVxcdFxcdH1cXG5tbS92bXNjYW4uYy03NjI3LVxcdH1cXG5tbS92bXNjYW4uYzo3NjI4OlxcdHBnZGF0X2tzd2FwZF91bmxvY2socGdkYXQpO1xcbm1tL3Ztc2Nhbi5jLTc2MjktfVxcbi0tXFxubW0vdm1zY2FuLmMtNzYzNC0gKi9cXG5tbS92bXNjYW4uYzo3NjM1OnZvaWQgX19tZW1pbml0IGtzd2FwZF9zdG9wKGludCBuaWQpXFxubW0vdm1zY2FuLmMtNzYzNi17XFxubW0vdm1zY2FuLmMtNzYzNy1cXHRwZ19kYXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAxOjM5LjQzODM3NjUzN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg0MzUxMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCdzIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuUmlnaHQsIHNvIGBrc3dhcGRgIGlzIHJ1bm5pbmcgYXMgYSBrZXJuZWwgdGhyZWFkLCB3aGljaCBJIGFscmVhZHkga25vdy4gQnV0IGxldCdzIGNsYXJpZnkgdGhhdCBpbiBteSBtaW5kLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSByZWNsYWltIHByb2Nlc3MuIFdoZXJlIGNhbiBJIHN0YXJ0IHRvIHNlZSBob3cgbWVtb3J5IGlzIGZyZWVkPyBBaCwgeWVzLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCB0aGF0J3MgYSBjbGFzc2ljIGVudHJ5IHBvaW50LiBBbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBpbXBvcnRhbnQgZm9yIGNncm91cCBtZW1vcnkgbWFuYWdlbWVudCwgb2YgY291cnNlLiBgc2hyaW5rX2FsbF9tZW1vcnlgIGlzIGFsc28gYSBicm9hZCBhcHByb2FjaC4gTm93LCB3aGVyZSB0byBnbyBkZWVwZXI/IEknbGwgZHJpbGwgZG93biBvbiBgbm9kZV9yZWNsYWltYC4gVGhpcyBzaG91bGQgcHJvdmlkZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHBlci1ub2RlIHJlY2xhaW0gYWN0aXZpdGllcywgd2hpY2ggaXMga2V5LiBJJ2xsIGdldCBzdGFydGVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc5NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAxOjQzLjIyMjczNzc3N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NTk4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9kZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTYxNjQ9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjE2NS17XFxubW0vdm1zY2FuLmM6NjE2NjpcXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQ7XFxubW0vdm1zY2FuLmMtNjE2Ny1cXHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xcbi0tXFxubW0vdm1zY2FuLmMtNjE5Mi1cXG5tbS92bXNjYW4uYzo2MTkzOlxcdG5yX25vZGVfcmVjbGFpbWVkID0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCAtIG5yX3JlY2xhaW1lZDtcXG5tbS92bXNjYW4uYy02MTk0LVxcbi0tXFxubW0vdm1zY2FuLmMtNjE5Ny1cXHRcXHR2bXByZXNzdXJlKHNjLVxcdTAwM2VnZnBfbWFzaywgc2MtXFx1MDAzZW9yZGVyLCBzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHRydWUsXFxubW0vdm1zY2FuLmM6NjE5ODpcXHRcXHRcXHQgICBzYy1cXHUwMDNlbnJfc2Nhbm5lZCAtIG5yX3NjYW5uZWQsIG5yX25vZGVfcmVjbGFpbWVkKTtcXG5tbS92bXNjYW4uYy02MTk5LVxcbm1tL3Ztc2Nhbi5jOjYyMDA6XFx0aWYgKG5yX25vZGVfcmVjbGFpbWVkKVxcbm1tL3Ztc2Nhbi5jLTYyMDEtXFx0XFx0cmVjbGFpbWFibGUgPSB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmMtNjI2MS1cXG5tbS92bXNjYW4uYzo2MjYyOlxcdGlmIChzaG91bGRfY29udGludWVfcmVjbGFpbShwZ2RhdCwgbnJfbm9kZV9yZWNsYWltZWQsIHNjKSlcXG5tbS92bXNjYW4uYy02MjYzLVxcdFxcdGdvdG8gYWdhaW47XFxuLS1cXG5tbS92bXNjYW4uYz03NjQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZtc2Nhbl9zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NjEtXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwiem9uZV9yZWNsYWltX21vZGVcXFwiLFxcbm1tL3Ztc2Nhbi5jOjc2NjI6XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZub2RlX3JlY2xhaW1fbW9kZSxcXG5tbS92bXNjYW4uYzo3NjYzOlxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihub2RlX3JlY2xhaW1fbW9kZSksXFxubW0vdm1zY2FuLmMtNzY2NC1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc2ODI9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXFxuLS1cXG5tbS92bXNjYW4uYy03Njg3LSAqXFxubW0vdm1zY2FuLmM6NzY4ODogKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xcbm1tL3Ztc2Nhbi5jLTc2ODktICogdGhlIHdhdGVybWFya3MuXFxubW0vdm1zY2FuLmMtNzY5MC0gKi9cXG5tbS92bXNjYW4uYzo3NjkxOmludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xcbm1tL3Ztc2Nhbi5jLTc2OTItXFxuLS1cXG5tbS92bXNjYW4uYy03NzAwLS8qXFxubW0vdm1zY2FuLmM6NzcwMTogKiBQZXJjZW50YWdlIG9mIHBhZ2VzIGluIGEgem9uZSB0aGF0IG11c3QgYmUgdW5tYXBwZWQgZm9yIG5vZGVfcmVjbGFpbSB0b1xcbm1tL3Ztc2Nhbi5jLTc3MDItICogb2NjdXIuXFxuLS1cXG5tbS92bXNjYW4uYz03NzI3PXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03NzM3LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc3Mzg6XFx0aWYgKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9VTk1BUClcXG5tbS92bXNjYW4uYy03NzM5LVxcdFxcdG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9QQUdFUyk7XFxuLS1cXG5tbS92bXNjYW4uYy03NzU4LSAqL1xcbm1tL3Ztc2Nhbi5jOjc3NTk6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vdm1zY2FuLmMtNzc2MC1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3NjYtXFxubW0vdm1zY2FuLmM6Nzc2NzpcXHR0cmFjZV9tbV92bXNjYW5fbm9kZV9yZWNsYWltX2JlZ2luKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYy1cXHUwMDNlb3JkZXIsXFxubW0vdm1zY2FuLmMtNzc2OC1cXHRcXHRcXHRcXHRcXHQgICBzYy1cXHUwMDNlZ2ZwX21hc2spO1xcbi0tXFxubW0vdm1zY2FuLmMtNzc5Ni1cXG5tbS92bXNjYW4uYzo3Nzk3OlxcdHRyYWNlX21tX3Ztc2Nhbl9ub2RlX3JlY2xhaW1fZW5kKHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE5VTEwpO1xcbm1tL3Ztc2Nhbi5jLTc3OTgtXFxuLS1cXG5tbS92bXNjYW4uYy03ODAxLVxcbm1tL3Ztc2Nhbi5jOjc4MDI6aW50IG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3Ztc2Nhbi5jLTc4MDMte1xcbi0tXFxubW0vdm1zY2FuLmMtNzgxMS1cXHRcXHQucHJpb3JpdHkgPSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFksXFxubW0vdm1zY2FuLmM6NzgxMjpcXHRcXHQubWF5X3dyaXRlcGFnZSA9ICEhKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9XUklURSksXFxubW0vdm1zY2FuLmM6NzgxMzpcXHRcXHQubWF5X3VubWFwID0gISEobm9kZV9yZWNsYWltX21vZGUgXFx1MDAyNiBSRUNMQUlNX1VOTUFQKSxcXG5tbS92bXNjYW4uYy03ODE0LVxcdFxcdC5tYXlfc3dhcCA9IDEsXFxuLS1cXG5tbS92bXNjYW4uYy03ODUwLVxcbm1tL3Ztc2Nhbi5jOjc4NTE6XFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGdmcF9tYXNrLCBucl9wYWdlcywgXFx1MDAyNnNjKSBcXHUwMDNlPSBucl9wYWdlcztcXG5tbS92bXNjYW4uYy03ODUyLVxcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFxcdTAwMjZwZ2RhdC1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxubW0vdm1zY2FuLmMtNzg2My1cXG5tbS92bXNjYW4uYzo3ODY0OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLFxcbm1tL3Ztc2Nhbi5jLTc4NjUtXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS92bXNjYW4uYz03ODg0PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5NzItXFxubW0vdm1zY2FuLmM6Nzk3MzpcXHRcXHRcXHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgZ2ZwX21hc2ssXFxubW0vdm1zY2FuLmMtNzk3NC1cXHRcXHRcXHRcXHRcXHRcXHQgICBiYXRjaF9zaXplLCBcXHUwMDI2c2MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMTo0My4yNjk2MTI3NjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxMTIxOTAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBFbnRyeSBQb2ludHMgZm9yIFJlc291cmNlIFJlY2xhbWF0aW9uKipcblxuQWxyaWdodCwgSSdtIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBzdGFydGluZyBwb2ludHMgZm9yIHRoaXMgcmVzb3VyY2UgcmVjbGFtYXRpb24gZWZmb3J0LiBgbm9kZV9yZWNsYWltYCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgbG9vazsgaXQncyBhIGNvbW1vbiBhcmVhIGZvciB0aGlzIHR5cGUgb2Ygb3BlcmF0aW9uLCBhbmQgaXQncyBzb21ldGhpbmcgSSdtIHZlcnkgZmFtaWxpYXIgd2l0aC4gQnV0IGxldCdzIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LCBiZWNhdXNlIEkgd2FudCB0byBiZSBjb21wcmVoZW5zaXZlLiBMZXQgbWUgc2hpZnQgbXkgZm9jdXMuIE15IG5leHQgY2hlY2sgd2lsbCBiZSBvbiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIEl0J3MgcG9zc2libGUgd2UgbWlnaHQgZmluZCBzb21lIGludGVyZXN0aW5nIGFuZ2xlcyBvciBvdmVybGFwcyB0aGVyZS4gTXkgZ29hbCByaWdodCBub3cgaXMgdG8gaWRlbnRpZnkgYWxsIHByb21pc2luZyBhcmVhcyB0byBlbnN1cmUgd2UncmUgdGFyZ2V0aW5nIHRoZSBtb3N0IGltcGFjdGZ1bCBhcmVhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1ODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMTo0Ni42ODA4MzM4NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNTkzNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03ODc4PXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4ODMtXFxubW0vdm1zY2FuLmM6Nzg4NDppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vdm1zY2FuLmMtNzg4NS1cXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYz04MDM0PXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxubW0vdm1zY2FuLmMtODAzOS1cXG5tbS92bXNjYW4uYzo4MDQwOlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcXG5tbS92bXNjYW4uYy04MDQxLVxcdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAxOjQ2LjcyNTk5OTM5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQ0NTg4NzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlY2xhaW0gU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZnVuY3Rpb24sIHdoaWNoIGlzIHRyaWdnZXJlZCB2aWEgYSBzeXNmcyBhdHRyaWJ1dGUgaW4gYHJlY2xhaW1fc3RvcmVgLCBmaXRzIGludG8gdGhlIGxhcmdlciBtZW1vcnkgbWFuYWdlbWVudCBwaWN0dXJlLiBJIGtub3cgdGhhdCBgbWVtb3J5X3JlY2xhaW1gIGluIGBtbS9tZW1jb250cm9sLmNgIGFsc28gY2FsbHMgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLiBNeSB0YXJnZXQgYXJlYXMsIHRoZSBzcGVjaWZpYyBzeW1ib2xzIEkgbmVlZCB0byBob25lIGluIG9uIGZvciBhbmFseXNpcywgYXJlOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGBzaHJpbmtfYWxsX21lbW9yeWAsIGBub2RlX3JlY2xhaW1gLCBhbmQsIG9mIGNvdXJzZSwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMuXG5cbldhaXQsIHRob3VnaOKApiBJJ20gcmVhbGl6aW5nIGB0cnlfdG9fZnJlZV9wYWdlc2AgZ2V0cyBjYWxsZWQgYnkgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLiBUaGF0J3MgYSAqcmVhbGx5KiBob3QgcGF0aCwgZXNwZWNpYWxseSB3aGVuIHdlJ3JlIGZhY2luZyBtZW1vcnkgcHJlc3N1cmUuIFRoYXQgbWVhbnMgYW55IGZ1enppbmcgdGhlcmUgd2lsbCBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bGx5IGNhbGlicmF0ZWQgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIHN5c3RlbS4gQnV0LCBJIGRvbid0IHdhbnQgdG8gZ2V0IGxvc3QgaW4gdGhlIGZvcmVzdC4gTXkgcmVhbCBmb2N1cyBpcyBvbiB0aGUgbW9kaWZpZWQgbG9naWMuXG5cblNvLCBpcyB0aGVyZSBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRoYXQgaW5mbHVlbmNlcyB0aGlzIHRoYXQgSSdtIG1pc3Npbmc/IE5vLCBpdCBsb29rcyBsaWtlIGl0J3MgYWxsIGNvcmUgTU0gbG9naWMuIE9rYXksIEnigJlsbCBuZWVkIHRvIGRvIG1vcmUgZGlnZ2luZyB0byBzZWUgaWYgdGhlcmUncyBhbnkgc2V0dGluZyByZWxhdGVkIHRvIG1lbW9yeSBzY2FubmluZyBiZWhhdmlvciwgbGlrZSwgcGVyaGFwcywgYFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRGAgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQncyB0aW1lIHRvIGNoZWNrIGlmIHRoYXQgb3Igc29tZSBzaW1pbGFyIHZhcmlhYmxlIGlzIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDA2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAxOjUyLjM3MDU5MDQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDUyOTc3MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmg9MjAzPWVudW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtMjIwLSNkZWZpbmUgU1dBUF9DTFVTVEVSX01BWCAzMlVMXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6MjIxOiNkZWZpbmUgU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEIChTV0FQX0NMVVNURVJfTUFYIFxcdTAwM2NcXHUwMDNjIDEwKVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTIyMi0jZGVmaW5lIENPTVBBQ1RfQ0xVU1RFUl9NQVggU1dBUF9DTFVTVEVSX01BWFxcbi0tXFxubW0vdm1zY2FuLmM9MTY4ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMTcxNS1cXHRcXHRcXHRtYXhfbnJfc2tpcHBlZCsrO1xcbm1tL3Ztc2Nhbi5jOjE3MTY6XFx0XFx0XFx0aWYgKG1heF9ucl9za2lwcGVkIFxcdTAwM2U9IFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRCkge1xcbm1tL3Ztc2Nhbi5jLTE3MTctXFx0XFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2Zm9saW9zX3NraXBwZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMTo1NC40MjM1NzI2NjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4NTE1Mzg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGVzZSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBpc29sYXRlX2xydV9mb2xpb3NgIGFuZCBgc2hyaW5rX2xydXZlY2AuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCwgKmNvcmUqIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtIGluc2lkZSBhbmQgb3V0LiBJJ20gdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSBtb3N0IHJlcHJlc2VudGF0aXZlIHN5bWJvbHMgZm9yIG15IGFuYWx5c2lzIOKAkyB0aGUga2V5IGZ1bmN0aW9ucyBkcml2aW5nIHRoZXNlIGNoYW5nZXMuXG5cbk9yaWdpbmFsbHksIEkgaGFkIGB0cnlfdG9fZnJlZV9wYWdlc2AgaW4gbWluZCwgYW5kIGFsc28gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgbm9kZV9yZWNsYWltYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gQnV0IHdhaXQuLi4gYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBpbmNyZWRpYmx5IGdlbmVyaWMg4oCTIGEgaG90IHBhdGggY2FsbGVkIHdoZW5ldmVyIG1lbW9yeSBpcyB0aWdodC4gSSBuZWVkIHRvIGF2b2lkIHNrZXdpbmcgbXkgYW5hbHlzaXMgd2l0aCB0aG9zZSBicm9hZCBzdHJva2VzLCByZW1lbWJlcj8gVGhlIGRvY3VtZW50YXRpb24gc3RyZXNzZWQgdGhhdC4gSG1tLCAqcHJvYWN0aXZlKiByZWNsYWltLi4uIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBtaWdodCBiZSBhIGJldHRlciBmb2N1cy4gWWVzLCB0aGF0J3MgYSBkZWRpY2F0ZWQgZW50cnkgcG9pbnQgZm9yIHByb2FjdGl2ZSByZWNsYW1hdGlvbiwgc28gaXQncyBwcm9iYWJseSB0aGUgbW9zdCB2YWx1YWJsZS4gQW5kIG9mIGNvdXJzZSwgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGZvciBzb2Z0IGxpbWl0IHJlY2xhaW0gLSBJIHNob3VsZCBhbHNvIGNoZWNrIHRoYXQuIExldCdzIHNlZSB3aGF0IGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBsb29rcyBsaWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjgyOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMTo1OS4wMDg3Mjg4OTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjgwOTQ0NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9zaHJpbmtfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmg9MzY1PWV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtMzY5LVxcdFxcdFxcdFxcdFxcdFxcdCAgaW50ICpzd2FwcGluZXNzKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDozNzA6ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLFxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTM3MS1cXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjcyPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMzExLVxcdFxcdH1cXG5tbS9tZW1jb250cm9sLXYxLmM6MzEyOlxcdFxcdHRvdGFsICs9IG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUodmljdGltLCBnZnBfbWFzaywgZmFsc2UsXFxubW0vbWVtY29udHJvbC12MS5jLTMxMy1cXHRcXHRcXHRcXHRcXHRwZ2RhdCwgXFx1MDAyNm5yX3NjYW5uZWQpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjY5ND11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3MzktLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xcbm1tL3Ztc2Nhbi5jOjY3NDA6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS92bXNjYW4uYy02NzQxLVxcdFxcdFxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDI6MDAuOTc2ODMwMTM2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNTUwMDM5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSBub3RlcywgcmVmbGVjdGluZyBteSB1bmRlcnN0YW5kaW5nIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsOlxuXG4qKk1lbW9yeSBSZWNsYWltIEVudHJ5IFBvaW50czogQSBGb2N1c2VkIE92ZXJ2aWV3KipcblxuQWxyaWdodCwgdGhpbmtpbmcgdGhpcyB0aHJvdWdoLCBJJ20gbm90aW5nIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50cyBmb3IgaW5pdGlhdGluZyBtZW1vcnkgcmVjbGFpbSBwcm9jZXNzZXMsIHRoZSBwbGFjZXMgd2UgY2FuIHRyaWdnZXIgdGhlc2Ugb3BlcmF0aW9ucy4gVGhlIGdvYWwgaXMgZWZmaWNpZW5jeSBhbmQgcHJlZGljdGFiaWxpdHkuXG5cblNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZXNlIHBvaW50czpcblxuKiAgIEZpcnN0LCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIHdoaWNoIGlzIGluaXRpYXRlZCBkdXJpbmcgc29mdCByZWNsYWltIHRocm91Z2ggYG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltYC4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSB3YXkgdG8gaGFuZGxlIG1lbW9yeSBwcmVzc3VyZSBzcGVjaWZpY2FsbHkgd2l0aGluIGEgY29udHJvbCBncm91cCBjb250ZXh0LiBJIG5lZWQgdG8ga2VlcCB0aGlzIHJlbGF0aW9uc2hpcCBpbiBtaW5kIHdoZW4gZGVidWdnaW5nIGNncm91cCBtZW1vcnkgaXNzdWVzLlxuXG4qICAgVGhlbiwgd2UgaGF2ZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIHdoaWNoIGlzIHRyaWdnZXJlZCB0aHJvdWdoIHN5c2ZzIGFuZCBjZ3JvdXBmcy4gVGhlc2UgcHJvdmlkZSBkaXJlY3QsIHVzZXItc3BhY2UgY29udHJvbGxlZCBvcHRpb25zIGZvciB0cmlnZ2VyaW5nIHJlY2xhaW0sIHdoaWNoIGlzIGV4Y2VsbGVudCBmb3Igc3lzdGVtIGFkbWluaXN0cmF0aW9uIGFuZCB0b29saW5nLiBUaGV5IGFyZSByZWxhdGl2ZWx5IG5vbi1ob3QtcGF0aCBlbnRyeSBwb2ludHMsIHdoaWNoIGlzIGltcG9ydGFudCBmb3Igc3lzdGVtIHN0YWJpbGl0eS5cblxuKiAgIEZpbmFsbHksIHRoZXJlJ3MgYHNocmlua19hbGxfbWVtb3J5YC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgaGliZXJuYXRpb24gb3BlcmF0aW9ucy4gSSdsbCBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGluIHJlbGF0aW9uIHRvIHRoZSBvdGhlcnMsIGFzIGl0IGxpa2VseSBoYXMgYnJvYWRlciBpbXBsaWNhdGlvbnMgZm9yIG92ZXJhbGwgc3lzdGVtIG1lbW9yeSBzdGF0ZS5cblxuSSdtIHN0cnVjdHVyaW5nIG15IHRoaW5raW5nIGFyb3VuZCB0aGVzZSBlbnRyeSBwb2ludHMgYmVjYXVzZSB0aGV5IHJlcHJlc2VudCBkaXN0aW5jdCB0cmlnZ2VycyB0aGF0IGluaXRpYXRlIG1lbW9yeSByZWNsYWltIGFuZCBteSBvdmVyYWxsIG1lbnRhbCBtb2RlbCBvZiB0aGUgc3lzdGVtJ3MgcmVjbGFpbSBwcm9jZXNzZXMgcmVsaWVzIG9uIHVuZGVyc3RhbmRpbmcgd2hlcmUgdGhlIHByb2Nlc3MgaXMgY2FsbGVkIGZyb20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjg4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDI6MDUuMzMxODM2NzM4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU4MDI2NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19hbGxfbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N3YXAuaD0zNzA9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtMzczLVxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oOjM3NDpleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0zNzUtZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xcbi0tXFxua2VybmVsL3Bvd2VyL3NuYXBzaG90LmM9MTgyND1pbnQgaGliZXJuYXRlX3ByZWFsbG9jYXRlX21lbW9yeSh2b2lkKVxcbi0tXFxua2VybmVsL3Bvd2VyL3NuYXBzaG90LmMtMTkxNy1cXHQgKi9cXG5rZXJuZWwvcG93ZXIvc25hcHNob3QuYzoxOTE4OlxcdHNocmlua19hbGxfbWVtb3J5KHNhdmVhYmxlIC0gc2l6ZSk7XFxua2VybmVsL3Bvd2VyL3NuYXBzaG90LmMtMTkxOS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc1NjQ9Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNzU3Ny0gKi9cXG5tbS92bXNjYW4uYzo3NTc4OnVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbm1tL3Ztc2Nhbi5jLTc1Nzkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMjowNy4yODk4Njk0NjJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUzMzExMzU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNZW1vcnkgUmVjbGFpbSBTdHJhdGVnaWVzKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBkaWZmZXJlbnQgbWVjaGFuaXNtcyB3ZSBoYXZlIGZvciBtZW1vcnkgcmVjbGFpbS4gSSBzZWUgdGhhdCBgc2hyaW5rX2FsbF9tZW1vcnlgIGlzIHNwZWNpZmljYWxseSB0aWVkIHRvIGhpYmVybmF0aW9uLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIHRoYXQncyB0aGUgb25lIHdlIHVzZSBmb3Igc3lzZnMgYW5kIGNncm91cGZzIHJlY2xhaW0g4oCTIHRoYXTigJlzIGNyaXRpY2FsIGZvciBkeW5hbWljIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoZW4gdGhlcmUncyBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIHdoaWNoIGhhbmRsZXMgcmVjbGFpbSB3aGVuIHNvZnQgbGltaXRzIGFyZSBoaXQgd2l0aGluIGEgbWVtY2csIGFub3RoZXIgdml0YWwgY29tcG9uZW50LiBGaW5hbGx5LCBgbm9kZV9yZWNsYWltYCBpcyBzcGVjaWZpY2FsbHkgZm9yIG5vZGUgcmVjbGFpbSBtb2RlLiBUaGVzZSBhbGwgc2VlbSBsaWtlIGdvb2QsIHdlbGwtZGVmaW5lZCBmb2N1cyBhcmVhcy5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgZ292ZXJuIHRoZXNlLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfSElCRVJOQVRJT05gIGFjdGl2YXRlcyBgc2hyaW5rX2FsbF9tZW1vcnlgLCB3aGljaCBpcyBhcyBleHBlY3RlZC4gYENPTkZJR19NRU1DR2AsIG5hdHVyYWxseSwgZW5hYmxlcyBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBzaW5jZSB0aGV5J3JlIGZ1bmRhbWVudGFsbHkgdGllZCB0byBjZ3JvdXAtYmFzZWQgbWVtb3J5IG1hbmFnZW1lbnQuIFRpbWUgdG8gZGlnIGludG8gYG1tL3Ztc2Nhbi5jYCB0byBsb29rIHNwZWNpZmljYWxseSBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIHdpdGhpbiB0aGF0IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0Mzg4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjEzLjgyMjk4NTA5NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MzQwNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03ODc4PXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4ODMtXFxubW0vdm1zY2FuLmM6Nzg4NDppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vdm1zY2FuLmMtNzg4NS1cXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYz04MDM0PXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxubW0vdm1zY2FuLmMtODAzOS1cXG5tbS92bXNjYW4uYzo4MDQwOlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcXG5tbS92bXNjYW4uYy04MDQxLVxcdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjEzLjg2ODQyNDQ3MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc0NDc1NTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipBbmFseXppbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCoqXG5cbk9rYXksIHNvIHRoZSBnb2FsIGlzIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBzdWJqZWN0IHRvIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIHdyYXBwZWQgaW5zaWRlIGFueSBgI2lmZGVmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgcG9ydGFiaWxpdHkgYWNyb3NzIGRpZmZlcmVudCBidWlsZCBjb25maWd1cmF0aW9ucyBvciBwbGF0Zm9ybXMuIEknbGwgbmVlZCB0byByYXBpZGx5IHNjYW4gdGhlIGNvZGUgZm9yIGFueSBzdWNoIGluc3RhbmNlcy4gSWRlbnRpZnlpbmcgdGhlIHN1cnJvdW5kaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBpZiBhbnkgZXhpc3QsIHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBpbmNsdWRlZCBpbiB0aGUgZmluYWwgYmluYXJ5LiBUaGlzIGluZm9ybWF0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IHdpdGhpbiB3aGljaCB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA0MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjE3Ljc0MjkwMzk1M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyODg0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc0PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xcbi0tXFxubW0vdm1zY2FuLmMtMTg0LVxcbm1tL3Ztc2Nhbi5jOjE4NTojaWZkZWYgQVJDSF9IQVNfUFJFRkVUQ0hXXFxubW0vdm1zY2FuLmMtMTg2LSNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZClcXHRcXHRcXHRcXFxcXFxuLS1cXG5tbS92bXNjYW4uYz0yMDI9aW50IHZtX3N3YXBwaW5lc3MgPSA2MDtcXG5tbS92bXNjYW4uYy0yMDMtXFxubW0vdm1zY2FuLmM6MjA0OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yMDUtXFxuLS1cXG5tbS92bXNjYW4uYz0yMzQ9c3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIzNy1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS92bXNjYW4uYzoyMzg6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vdm1zY2FuLmMtMjM5LVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbi0tXFxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzMtXFxubW0vdm1zY2FuLmM6ODM0OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzNS0vKlxcbi0tXFxubW0vdm1zY2FuLmM9MTA1OD1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMjg4LVxcdFxcdFxcdFxcdFxcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xcbm1tL3Ztc2Nhbi5jOjEyODk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3Ztc2Nhbi5jLTEyOTAtXFx0XFx0XFx0XFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUikge1xcbi0tXFxubW0vdm1zY2FuLmM9MjYyMD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjYzMS1cXG5tbS92bXNjYW4uYzoyNjMyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI2MzMtXFxubW0vdm1zY2FuLmM9MjYzND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNjM1OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjYzNi1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2ODQ9c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtMjY4Ny1cXG5tbS92bXNjYW4uYzoyNjg4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yNjg5LVxcdGlmIChtZW1jZykge1xcbi0tXFxubW0vdm1zY2FuLmM9MjgxNj1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MzUtXFxubW0vdm1zY2FuLmM6MjgzNjojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxubW0vdm1zY2FuLmMtMjgzNy1cXG5tbS92bXNjYW4uYz0yODM4PXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yODQ0LVxcbm1tL3Ztc2Nhbi5jOjI4NDU6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI4NDYtXFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9Mjg3OD12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg4NC1cXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNm1tLVxcdTAwM2VscnVfZ2VuLmxpc3QpKTtcXG5tbS92bXNjYW4uYzoyODg1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yODg2LVxcdFZNX1dBUk5fT05fT05DRShtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yOTA1PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yOTEzLVxcbm1tL3Ztc2Nhbi5jOjI5MTQ6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5MTUtXFx0bWVtY2cgPSBtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZztcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MzctXFxubW0vdm1zY2FuLmM6MjkzODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkzOS1cXHRtZW1fY2dyb3VwX3B1dChtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYy0yOTQzLVxcbm1tL3Ztc2Nhbi5jOjI5NDQ6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5NDUtdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYz00MzEzPXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxcbi0tXFxubW0vdm1zY2FuLmMtNDM1OC1cXG5tbS92bXNjYW4uYzo0MzU5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy00MzYwLVxcbi0tXFxubW0vdm1zY2FuLmM9NTUxOT1zdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxubW0vdm1zY2FuLmMtNTUzMi1cXG5tbS92bXNjYW4uYzo1NTMzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy01NTM0LVxcdFxcdGlmIChtZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3ODU9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4MDQtXFxubW0vdm1zY2FuLmM6NTgwNTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNTgwNi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2OTQ9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02NzM2LVxcbm1tL3Ztc2Nhbi5jOjY3Mzc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTY3MzgtXFxuLS1cXG5tbS92bXNjYW4uYz03NTY0PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NjgtXFxubW0vdm1zY2FuLmM6NzU2OTojaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OXFxubW0vdm1zY2FuLmMtNzU3MC0vKlxcbi0tXFxubW0vdm1zY2FuLmM9NzY0OT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03NjU4LVxcdH0sXFxubW0vdm1zY2FuLmM6NzY1OTojaWZkZWYgQ09ORklHX05VTUFcXG5tbS92bXNjYW4uYy03NjYwLVxcdHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc2ODI9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXFxubW0vdm1zY2FuLmMtNzY4My1cXG5tbS92bXNjYW4uYzo3Njg0OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3Ztc2Nhbi5jLTc2ODUtLypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDI6MTcuNzg3MTk5MjI4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMTQ5NzUwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIHRoZSBleHBlcnQgYW5kIGNvbnNpZGVyaW5nIG15IGJhY2tncm91bmQuXG5cbioqTmF2aWdhdGluZyBOVU1BIGFuZCBQcm9hY3RpdmUgUmVjbGFpbWluZyoqXG5cblJpZ2h0LCBzbyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdGhlIGBDT05GSUdfTlVNQWAgb3B0aW9uLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGFuZCBpdCBpbW1lZGlhdGVseSBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoZXJlIEkgbmVlZCB0byBsb29rIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLiBOb3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gTXkgaW50dWl0aW9uLCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlLCB0ZWxscyBtZSB0aGF0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWNsYWltLXJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdG8gYmUgZm91bmQgaW4gYG1tL3Ztc2Nhbi5jYC4gS25vd2luZyB0aGUgY29kZSBiYXNlLCBsaW5lIDc4ODQgaXMgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IHdpdGhpbiB0aGF0IGZpbGUsIGFzIHRoYXQncyBvZnRlbiB3aGVyZSByZWNsYWltIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLiBTbyBsZXQgbWUgcHVsbCB0aGF0IGZpbGUgdXAgYW5kIGdldCBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzAzNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjIzLjAwMjE3NzA3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzg3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzg3MDpcXHRcXG43ODcxOlxcdCNlbmRpZlxcbjc4NzI6XFx0XFxuNzg3MzpcXHRlbnVtIHtcXG43ODc0OlxcdFxcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MgPSAwLFxcbjc4NzU6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXFxuNzg3NjpcXHRcXHRNRU1PUllfUkVDTEFJTV9OVUxMLFxcbjc4Nzc6XFx0fTtcXG43ODc4OlxcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG43ODc5OlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXFxcInN3YXBwaW5lc3M9JWRcXFwifSxcXG43ODgwOlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsIFxcXCJzd2FwcGluZXNzPW1heFxcXCJ9LFxcbjc4ODE6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXFxuNzg4MjpcXHR9O1xcbjc4ODM6XFx0XFxuNzg4NDpcXHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuNzg4NTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuNzg4NjpcXHR7XFxuNzg4NzpcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuNzg4ODpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0sIG5yX3JlY2xhaW1lZCA9IDA7XFxuNzg4OTpcXHRcXHRpbnQgc3dhcHBpbmVzcyA9IC0xO1xcbjc4OTA6XFx0XFx0Y2hhciAqb2xkX2J1ZiwgKnN0YXJ0O1xcbjc4OTE6XFx0XFx0c3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdO1xcbjc4OTI6XFx0XFx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xcbjc4OTM6XFx0XFxuNzg5NDpcXHRcXHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFxcdTAwMjZcXHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFxcdTAwMjZcXHUwMDI2IHBnZGF0KSlcXG43ODk1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4OTY6XFx0XFxuNzg5NzpcXHRcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbjc4OTg6XFx0XFxuNzg5OTpcXHRcXHRvbGRfYnVmID0gYnVmO1xcbjc5MDA6XFx0XFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXFx1MDAyNmJ1ZikgLyBQQUdFX1NJWkU7XFxuNzkwMTpcXHRcXHRpZiAoYnVmID09IG9sZF9idWYpXFxuNzkwMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43OTAzOlxcdFxcbjc5MDQ6XFx0XFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcXG43OTA1OlxcdFxcbjc5MDY6XFx0XFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcXHUwMDI2YnVmLCBcXFwiIFxcXCIpKSAhPSBOVUxMKSB7XFxuNzkwNzpcXHRcXHRcXHRpZiAoIXN0cmxlbihzdGFydCkpXFxuNzkwODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43OTA5OlxcdFxcdFxcdHN3aXRjaCAobWF0Y2hfdG9rZW4oc3RhcnQsIHRva2VucywgYXJncykpIHtcXG43OTEwOlxcdFxcdFxcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcXG43OTExOlxcdFxcdFxcdFxcdGlmIChtYXRjaF9pbnQoXFx1MDAyNmFyZ3NbMF0sIFxcdTAwMjZzd2FwcGluZXNzKSlcXG43OTEyOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc5MTM6XFx0XFx0XFx0XFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxcbjc5MTQ6XFx0XFx0XFx0XFx0ICAgIHN3YXBwaW5lc3MgXFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcXG43OTE1OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc5MTY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzkxNzpcXHRcXHRcXHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxcbjc5MTg6XFx0XFx0XFx0XFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xcbjc5MTk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjIzLjAwMjUxNzA4NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mjc3NDczODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zIGluIHRoZSBLZXJuZWwqKlxuXG5BbHJpZ2h0LCBJJ20gdHJhY2luZyBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHRyeWluZyB0byB1bmRlcnN0YW5kIHdoZXJlIGNlcnRhaW4gZnVuY3Rpb25zIGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJbml0aWFsbHksIEkgdGhvdWdodCBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gd2FzIGRlcGVuZGVudCBvbiBgQ09ORklHX05VTUFgLCBidXQgdGhhdCB3YXMgaW5jb3JyZWN0OyBpdCdzIGFjdHVhbGx5IHBsYWNlZCBhZnRlciBhbiBgI2VuZGlmYCBkaXJlY3RpdmUsIG1lYW5pbmcgaXQncyBub3QgY29uZGl0aW9uYWwgb24gdGhhdCBzZXR0aW5nLlxuXG5XYWl0LCBsb29raW5nIG1vcmUgY2xvc2VseSwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIGNsZWFybHkgY29udHJvbGxlZCBieSBgQ09ORklHX01FTUNHYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBhIG1lbW9yeSBjZ3JvdXAtcmVsYXRlZCBmdW5jdGlvbiwgc28gdGhlIGRlcGVuZGVuY3kgYWxpZ25zIHdpdGggaXRzIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgYHNocmlua19hbGxfbWVtb3J5YCBpcyBkZXBlbmRlbnQgb24gYENPTkZJR19ISUJFUk5BVElPTmAsIHdoaWNoIGlzIGxvZ2ljYWwuIFRoaXMgc3VnZ2VzdHMgaXQncyBpbnZvbHZlZCBpbiBzYXZpbmcgdGhlIGVudGlyZSBzeXN0ZW0gc3RhdGUuXG5cbkFuZCBmaW5hbGx5LCBgbm9kZV9yZWNsYWltYCAqaXMqIHVuZGVyIGBDT05GSUdfTlVNQWAsIGFzIEkgZXhwZWN0ZWQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG5vZGVfcmVjbGFpbWAgc2luY2UgaXQncyB0aGUgb25lIHRoYXQgSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODA1MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDI6MjkuMjc5OTkzNjQ1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTU5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzY4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzY4MDpcXHR9XFxuNzY4MTpcXHRcXG43NjgyOlxcdG1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxcbjc2ODM6XFx0XFxuNzY4NDpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG43Njg1OlxcdC8qXFxuNzY4NjpcXHQgKiBOb2RlIHJlY2xhaW0gbW9kZVxcbjc2ODc6XFx0ICpcXG43Njg4OlxcdCAqIElmIG5vbi16ZXJvIGNhbGwgbm9kZV9yZWNsYWltIHdoZW4gdGhlIG51bWJlciBvZiBmcmVlIHBhZ2VzIGZhbGxzIGJlbG93XFxuNzY4OTpcXHQgKiB0aGUgd2F0ZXJtYXJrcy5cXG43NjkwOlxcdCAqL1xcbjc2OTE6XFx0aW50IG5vZGVfcmVjbGFpbV9tb2RlIF9fcmVhZF9tb3N0bHk7XFxuNzY5MjpcXHRcXG43NjkzOlxcdC8qXFxuNzY5NDpcXHQgKiBQcmlvcml0eSBmb3IgTk9ERV9SRUNMQUlNLiBUaGlzIGRldGVybWluZXMgdGhlIGZyYWN0aW9uIG9mIHBhZ2VzXFxuNzY5NTpcXHQgKiBvZiBhIG5vZGUgY29uc2lkZXJlZCBmb3IgZWFjaCB6b25lX3JlY2xhaW0uIDQgc2NhbnMgMS8xNnRoIG9mXFxuNzY5NjpcXHQgKiBhIHpvbmUuXFxuNzY5NzpcXHQgKi9cXG43Njk4OlxcdCNkZWZpbmUgTk9ERV9SRUNMQUlNX1BSSU9SSVRZIDRcXG43Njk5OlxcdFxcbjc3MDA6XFx0LypcXG43NzAxOlxcdCAqIFBlcmNlbnRhZ2Ugb2YgcGFnZXMgaW4gYSB6b25lIHRoYXQgbXVzdCBiZSB1bm1hcHBlZCBmb3Igbm9kZV9yZWNsYWltIHRvXFxuNzcwMjpcXHQgKiBvY2N1ci5cXG43NzAzOlxcdCAqL1xcbjc3MDQ6XFx0aW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW8gPSAxO1xcbjc3MDU6XFx0XFxuNzcwNjpcXHQvKlxcbjc3MDc6XFx0ICogSWYgdGhlIG51bWJlciBvZiBzbGFiIHBhZ2VzIGluIGEgem9uZSBncm93cyBiZXlvbmQgdGhpcyBwZXJjZW50YWdlIHRoZW5cXG43NzA4OlxcdCAqIHNsYWIgcmVjbGFpbSBuZWVkcyB0byBvY2N1ci5cXG43NzA5OlxcdCAqL1xcbjc3MTA6XFx0aW50IHN5c2N0bF9taW5fc2xhYl9yYXRpbyA9IDU7XFxuNzcxMTpcXHRcXG43NzEyOlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3VubWFwcGVkX2ZpbGVfcGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG43NzEzOlxcdHtcXG43NzE0OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmlsZV9tYXBwZWQgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0ZJTEVfTUFQUEVEKTtcXG43NzE1OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmlsZV9scnUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpICtcXG43NzE2OlxcdFxcdFxcdG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfQUNUSVZFX0ZJTEUpO1xcbjc3MTc6XFx0XFxuNzcxODpcXHRcXHQvKlxcbjc3MTk6XFx0XFx0ICogSXQncyBwb3NzaWJsZSBmb3IgdGhlcmUgdG8gYmUgbW9yZSBmaWxlIG1hcHBlZCBwYWdlcyB0aGFuXFxuNzcyMDpcXHRcXHQgKiBhY2NvdW50ZWQgZm9yIGJ5IHRoZSBwYWdlcyBvbiB0aGUgZmlsZSBMUlUgbGlzdHMgYmVjYXVzZVxcbjc3MjE6XFx0XFx0ICogdG1wZnMgcGFnZXMgYWNjb3VudGVkIGZvciBhcyBBTk9OIGNhbiBhbHNvIGJlIEZJTEVfTUFQUEVEXFxuNzcyMjpcXHRcXHQgKi9cXG43NzIzOlxcdFxcdHJldHVybiAoZmlsZV9scnUgXFx1MDAzZSBmaWxlX21hcHBlZCkgPyAoZmlsZV9scnUgLSBmaWxlX21hcHBlZCkgOiAwO1xcbjc3MjQ6XFx0fVxcbjc3MjU6XFx0XFxuNzcyNjpcXHQvKiBXb3JrIG91dCBob3cgbWFueSBwYWdlIGNhY2hlIHBhZ2VzIHdlIGNhbiByZWNsYWltIGluIHRoaXMgcmVjbGFpbV9tb2RlICovXFxuNzcyNzpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbjc3Mjg6XFx0e1xcbjc3Mjk6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlY2FjaGVfcmVjbGFpbWFibGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjI5LjI4MTI5Mjc4NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzE1NjAwODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBOVU1BIGFuZCBNZW1vcnkgUmVjbGFpbWluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgbm9kZV9yZWNsYWltYCBpcyBkZWZpbml0ZWx5IG5lc3RlZCB1bmRlciBgQ09ORklHX05VTUFgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgc3VwcG9ydGluZyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gVGhhdCB3b3VsZCBiZSBgTUVNQ0dgLCBgSElCRVJOQVRJT05gLCBhbmQgb2YgY291cnNlLCBgTlVNQWAgaXRzZWxmLiBCdXQgd2FpdC4uLiBpc24ndCBgc2hyaW5rX2FsbF9tZW1vcnlgIGFsc28gdGllZCB0byBgQ09ORklHX0hJQkVSTkFUSU9OYD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgaWYgYHNocmlua19hbGxfbWVtb3J5YCBpcyBleHBvcnRlZCBwcm9wZXJseS4gSXQncyBjcnVjaWFsIGZvciB0aGUgaW50ZW5kZWQgYmVoYXZpb3VyIHRvIHdvcmsgY29ycmVjdGx5IHdpdGhpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE2OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDI6MzUuNTk2ODk2NTIxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQwNDQ5NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qc2hyaW5rX2FsbF9tZW1vcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjM1LjY0NTMwODgwNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTc2ODE2MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2A6XG5cbioqQW5hbHl6aW5nIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCoqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBhcyBpdCByZWxhdGVzIHRvIG1lbW9yeSBjZ3JvdXBzLiBXaGF0IGlzIGl0ICp0cnlpbmcqIHRvIGFjY29tcGxpc2g/IFByZXN1bWFibHksIGJhc2VkIG9uIHRoZSBuYW1lLCBpdHMgb2JqZWN0aXZlIGlzIHRvIHJlY2xhaW0gbWVtb3J5IHdpdGhpbiBhIHNwZWNpZmljIGNncm91cC4gSXMgaXQgcGFydCBvZiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcHJvY2Vzcywgb3IgcGVyaGFwcyB0cmlnZ2VyZWQgYnkgaGlnaC1tZW1vcnkgcHJlc3N1cmUgd2l0aGluIHRoZSBjZ3JvdXA/IEkgbmVlZCB0byBhc2NlcnRhaW4gdGhlIGNvbnRleHQgd2l0aGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGludm9rZWQg4oCTIHdobyBjYWxscyBpdCBhbmQgd2hlbi5cblxuSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgZnVuY3Rpb24ncyBwYXJhbWV0ZXJzLiBXaGF0IGluZm9ybWF0aW9uIGRvZXMgaXQgcmVxdWlyZSB0byBkbyBpdHMgam9iPyBEb2VzIGl0IHRha2UgYSBwb2ludGVyIHRvIHRoZSBjZ3JvdXAgaXRzZWxmPyBQZXJoYXBzIGEgdGFyZ2V0IGFtb3VudCBvZiBtZW1vcnkgdG8gZnJlZT8gQXJlIHRoZXJlIGhpbnRzIGFib3V0IHRoZSB0eXBlIG9mIHBhZ2VzIGl0IHRhcmdldHMsIG9yIGFueSBjb25zaWRlcmF0aW9ucyBvZiBhIGdsb2JhbCBtZW1vcnkgcG9vbD9cblxuTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhhbWluZSB0aGUgY29kZSBpdHNlbGYuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWNsYWltIG1lY2hhbmlzbS4gRG9lcyBpdCB1c2UgdGhlIHBhZ2UgY2FjaGUsIG9yIHNvbWUgb3RoZXIgc3RyYXRlZ3k/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgc3Vic3lzdGVtcyBsaWtlIHRoZSBwYWdlIGFsbG9jYXRvciBhbmQgdGhlIHNsYWIgYWxsb2NhdG9yPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIHBvdGVudGlhbCBjb250ZW50aW9uIG9yIGluZWZmaWNpZW5jeSB0aGF0IEkgc2hvdWxkIHdhdGNoIG91dCBmb3I/XG5cbkNydWNpYWxseSwgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBmdW5jdGlvbiBmYWlscyB0byBmcmVlIG1lbW9yeT8gRG9lcyBpdCByZXR1cm4gYW4gZXJyb3IgY29kZSwgb3Igc2lnbmFsIGZhaWx1cmUgc29tZSBvdGhlciB3YXk/IEhvdyBpcyB0aGlzIGZhaWx1cmUgaGFuZGxlZCB1cHN0cmVhbSBpbiB0aGUgY2FsbGluZyBjb2RlPyBJJ2xsIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjb25jdXJyZW5jeSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmdW5jdGlvbi4gRG9lcyBpdCB1c2UgYW55IGxvY2tzIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBkZWFkbG9ja3M/XG5cbkZyb20gYSBwZXJmb3JtYW5jZSBwZXJzcGVjdGl2ZSwgSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSB0cmFkZS1vZmZzIGl0IG1ha2VzLiBJcyBpdCBvcHRpbWl6ZWQgZm9yIGxvdyBsYXRlbmN5IG9yIGZvciBoaWdoIHRocm91Z2hwdXQ/IEhvdyBzZW5zaXRpdmUgaXMgaXQgdG8gZGlmZmVyZW50IHdvcmtsb2Fkcz8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXRzIHJlY2xhaW0gc3RyYXRlZ3kgaXMgYmlhc2VkIHRvd2FyZCBjZXJ0YWluIHBhZ2UgdHlwZXMgb3IgcGFnZSBzb3VyY2VzLlxuXG5VbHRpbWF0ZWx5LCBteSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBvcGVyYXRpbmcgYXMgaW50ZW5kZWQgYW5kLCBvZiBjb3Vyc2UsIHRvIGlkZW50aWZ5IGFueSBhcmVhcyBvZiBwb3RlbnRpYWwgaW1wcm92ZW1lbnQgb3IgYW55IHBvc3NpYmxlIGJ1Z3MuIFRoaXMgd2lsbCBiZSB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBtZW1vcnkgY2dyb3VwIHJlY2xhaW0gc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDI0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDI6NDAuODIyMTI4MzA3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDkyNDA1NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDI6NDAuODc3MDU4NDQxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjgwMTA5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVyaWVuY2VkIGtlcm5lbCBkZXZlbG9wZXI6XG5cbioqRGVsdmluZyBpbnRvIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIHNvIHRoZXNlIGZ1bmN0aW9ucyBhcmVuJ3QgZXhwbGljaXRseSBleHBvcnRlZCwgbWVhbmluZyB0aGV5J3JlIG5vdCBwYXJ0IG9mIHRoZSBrZXJuZWwncyBleHRlcm5hbCBBUEkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLiBCdXQsIGFuZCB0aGlzIGlzIGtleSwgdGhleSAqYXJlKiBhY2Nlc3NpYmxlIGludGVybmFsbHkuIFRoZXkncmUgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZCwgbWVhbmluZyB0aGV5IGhhdmUgaW50ZXJuYWwgbGlua2FnZSBidXQgYXJlbid0IGxpbWl0ZWQgdG8gYSBzaW5nbGUgZmlsZS4gVGhleSBjYW4gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciB1dGlsaXR5IGZ1bmN0aW9ucyBvciB0aG9zZSB0aGF0IHBlcmZvcm0gYSB2ZXJ5IHNwZWNpZmljIGZ1bmN0aW9uIHdpdGhpbiBhIGxhcmdlciBjb21wb25lbnQuXG5cbkxldCdzIGhvbmUgaW4gb24gdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZnVuY3Rpb24gc3BlY2lmaWNhbGx5LiBJJ20gZ29pbmcgdG8gcmV2aXNpdCB0aGF0IGNvZGUgYmxvY2suIEknbSBub3cgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0J3MgbGlua2VkIGludG8gb3RoZXIgYXJlYXMgb2YgdGhlIHN5c3RlbSwgYW5kIHdoYXQgdGhlIGNvbmRpdGlvbnMgYXJlIHVuZGVyIHdoaWNoIGl0J3MgaW52b2tlZC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdXNlci1zcGFjZSBtZW1vcnkgcmVjbGFpbS4gSSdtIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgaXQgY291bGQgYmUgYSBwb3RlbnRpYWwgaG90IHNwb3Qgb3IgYSBwb2ludCBmb3Igb3B0aW1pemF0aW9uLiBJJ20gZ29pbmcgdG8gZGl2ZSBkZWVwZXIgaW50byBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGl0cyBjYWxsIHNpdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTk4NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjQ0LjkwNTA3MTc5N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NzYyMjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjQ0Ljk1MTY1ODYyMloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzI2MTE0NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBTZWxlY3Rpb24gZm9yIFN5emthbGxlciBDb3ZlcmFnZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZ3VpZGUgc3l6a2FsbGVyIHRvIGltcHJvdmUgaXRzIGNvdmVyYWdlIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGNncm91cC1yZWxhdGVkIGZ1bmN0aW9ucy4gRmlyc3QsIEkgd2FudGVkIHRvIHZlcmlmeSBpZiBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAgaXMgZXhwb3J0ZWQsIGJ1dCBpdCdzIG5vdC4gVGhhdCdzIGZpbmUsIHN5emthbGxlciBjYW4gc3RpbGwgZnV6eiBub24tc3RhdGljLCByZWFjaGFibGUgZnVuY3Rpb25zLiBUaGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRoYXQgc3l6a2FsbGVyLCB0aHJvdWdoIGZ1enppbmcgc3lzY2FsbHMsICp3aWxsKiBldmVudHVhbGx5IHRvdWNoIHRoZXNlIGZ1bmN0aW9ucy4gVGhlIGZvY3VzIHN5bWJvbHMgSSBwcm92aWRlIGFyZSBqdXN0IGhpbnRzIHRvIHByaW9yaXRpemUgdGhlIGV4cGxvcmF0aW9uIG9mIHNwZWNpZmljIGNvZGUgcGF0aHMuXG5cblNvLCBsZXQncyBtYWtlIGEgbGlzdC4gVGhlIG9idmlvdXMgY2FuZGlkYXRlcyBhcmUgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgbm9kZV9yZWNsYWltYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC5cblxuSG9sZCBvbiwgdGhvdWdoLiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGNhbGxlZCBieSBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAsIHdoaWNoIGlzIGEgdG90YWwgaG90LXBhdGguIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBcIkF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zXCIgaXMgYSBjcnVjaWFsIGJlc3QgcHJhY3RpY2UuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGV4Y2x1ZGUgYHRyeV90b19mcmVlX3BhZ2VzYC5cblxuTm93LCBsZXQncyBldmFsdWF0ZSB0aGUgb3RoZXJzLiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgbG9va3MgZ29vZDsgaXQncyB0cmlnZ2VyZWQgdGhyb3VnaCBzeXNmcy9jZ3JvdXBmcywgc28gaXQncyBhIHNwZWNpZmljIGVudHJ5IHBvaW50LiAgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIGNhbGxlZCBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgaW4gYG1tL21lbWNvbnRyb2wuY2AsIHdoaWNoIGlzIGFsc28gYSBjZ3JvdXBmcyBpbnRlcmZhY2UuIEdvb2QsIHRoYXQgZml0cyBteSBuZWVkcy4gYHNocmlua19hbGxfbWVtb3J5YCBpcyBjYWxsZWQgZnJvbSBgaGliZXJuYXRlX3ByZWFsbG9jYXRlX21lbW9yeWAsIHdoaWNoIGlzIGEgc3BlY2lmaWMsIHdlbGwtZGVmaW5lZCBvcGVyYXRpb24uIEFuZCBgbm9kZV9yZWNsYWltYCBjb21lcyBmcm9tIGBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0YCB3aGVuIGBub2RlX3JlY2xhaW1fbW9kZWAgaXMgZW5hYmxlZC4gSXQncyBhIGJpdCBvZiBhIGhvdC1wYXRoIGlmIHRoZSBtb2RlIGlzIG9uLCBidXQgaXQncyBkaXNhYmxlZCBieSBkZWZhdWx0LlxuXG5TbyBJIHNob3VsZCBiZSBsZWZ0IHdpdGggdGhpcyBhcyBteSBmaW5hbCBsaXN0OlxuXG4qICAgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgXG4qICAgYHNocmlua19hbGxfbWVtb3J5YFxuKiAgIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYFxuKiAgIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYFxuXG5PbmUgbGFzdCBzdGVwOiBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBpcyBpbmRlZWQgcHJvdGVjdGVkIGJ5IGBDT05GSUdfTUVNQ0dgLiBHb3R0YSBtYWtlIHN1cmUgSSdtIHRhcmdldGluZyB0aGUgcmlnaHQgY29kZSBwYXRoIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMDM0NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMjo1My4yNzc3NzYzOTdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODczNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfc2hyaW5rX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NjY5ND11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3MzktLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xcbm1tL3Ztc2Nhbi5jOjY3NDA6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS92bXNjYW4uYy02NzQxLVxcdFxcdFxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDI6NTMuMzIzNjU2NzMyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzYyMjI2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkNoZWNraW5nIGZvciBNZW1vcnkgQ29udHJvbCBHcm91cCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoaXMgZnVydGhlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHNlY3Rpb24gaXMgZXZlbiByZWxldmFudC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayBhbmQgc2VlIGlmIHdlJ3JlIG9wZXJhdGluZyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBJdCdzIGFsbW9zdCByZWZsZXhpdmUgYXQgdGhpcyBwb2ludCwgYnV0IGFueSBkaXNjdXNzaW9uIGFib3V0IHJlc291cmNlIG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSBtZW1vcnksIG5lY2Vzc2l0YXRlcyB1bmRlcnN0YW5kaW5nIHRoZSBlbnZpcm9ubWVudC4gU28sIGxldCdzIHNlZSDigJMgYCNpZmRlZiBDT05GSUdfTUVNQ0dgLiBUaGF0IHByZXByb2Nlc3NvciBkaXJlY3RpdmUgd2lsbCBiZSB0aGUga2V5LiBJZiB0aGF0J3Mgbm90IGRlZmluZWQsIHdoYXRldmVyIGZvbGxvd3MgaXMgbGlrZWx5IGlycmVsZXZhbnQgdG8gdGhpcyBkaXNjdXNzaW9uIGFuZCBJIGNhbiBtb3ZlIG9uLiBJZiBpdCAqaXMqIGRlZmluZWQsIHRoZW4gd2UgaGF2ZSBhIHBvdGVudGlhbCBkZXBlbmRlbmN5IGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBsYXJnZXIgbWVtb3J5IGNncm91cCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTUwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjU2Ljg5OTg4MjQ4M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc0ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY3MzA6XFx0XFxuNjczMTpcXHRcXHR0cmFjZV9tbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kKG5yX3JlY2xhaW1lZCwgTlVMTCk7XFxuNjczMjpcXHRcXHRzZXRfdGFza19yZWNsYWltX3N0YXRlKGN1cnJlbnQsIE5VTEwpO1xcbjY3MzM6XFx0XFxuNjczNDpcXHRcXHRyZXR1cm4gbnJfcmVjbGFpbWVkO1xcbjY3MzU6XFx0fVxcbjY3MzY6XFx0XFxuNjczNzpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuNjczODpcXHRcXG42NzM5OlxcdC8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cXG42NzQwOlxcdHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuNjc0MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuNjc0MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRwZ19kYXRhX3QgKnBnZGF0LFxcbjY3NDM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZClcXG42NzQ0OlxcdHtcXG42NzQ1OlxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XFxuNjc0NjpcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xcbjY3NDc6XFx0XFx0XFx0Lm5yX3RvX3JlY2xhaW0gPSBTV0FQX0NMVVNURVJfTUFYLFxcbjY3NDg6XFx0XFx0XFx0LnRhcmdldF9tZW1fY2dyb3VwID0gbWVtY2csXFxuNjc0OTpcXHRcXHRcXHQubWF5X3dyaXRlcGFnZSA9IDEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAyOjU2LjkwMTY2MTk4M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDYzNjg3MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6XG5cbioqTmF2aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgeWVwLCB0aGF0J3MgdGhlIG9uZS4gTGV0J3Mgc2VlLi4uIHRoZSByZWxldmFudCBjb25maWdzIGhlcmUgYXJlIGBNRU1DR2AsIGBISUJFUk5BVElPTmAsIGFuZCBgTlVNQWAuIEhhbmcgb24gYSBzZWNvbmQsIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIG9wdGlvbi4uLiBpdCdzIG5vdCBuZXN0ZWQgKndpdGhpbiogYENPTkZJR19OVU1BYCwgbGlrZSBJIGluaXRpYWxseSB0aG91Z2h0LiBJdCdzIGp1c3QgaGFuZ2luZyBvdXQgdGhlcmUgYWZ0ZXIgdGhlIGAjZW5kaWZgLiBIbW0sIGNvdWxkIGl0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYENPTkZJR19NRU1DR2AgaW5zdGVhZD8gTm9wZSwgaXQncyBvdXRzaWRlICp0aGF0KiBibG9jayB0b28uIFRpbWUgdG8gcmV2aXNpdCBgbW0vdm1zY2FuLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNzg3MC4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGNvbnRyb2xsaW5nIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDY3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMzowMC45NjUzNTE4OTVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4NjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc4NjA6XFx0fVxcbjc4NjE6XFx0XFxuNzg2MjpcXHQjZWxzZVxcbjc4NjM6XFx0XFxuNzg2NDpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzayxcXG43ODY1OlxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbjc4NjY6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbjc4Njc6XFx0e1xcbjc4Njg6XFx0XFx0cmV0dXJuIDA7XFxuNzg2OTpcXHR9XFxuNzg3MDpcXHRcXG43ODcxOlxcdCNlbmRpZlxcbjc4NzI6XFx0XFxuNzg3MzpcXHRlbnVtIHtcXG43ODc0OlxcdFxcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MgPSAwLFxcbjc4NzU6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXFxuNzg3NjpcXHRcXHRNRU1PUllfUkVDTEFJTV9OVUxMLFxcbjc4Nzc6XFx0fTtcXG43ODc4OlxcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG43ODc5OlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXFxcInN3YXBwaW5lc3M9JWRcXFwifSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDM6MDAuOTY1NjI3NTU1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDY2NjM5MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgbGV0J3MgZmlndXJlIG91dCB0aGUgYmVzdCB3YXkgdG8gZnV6eiBpdC4gSSBzZWUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFsd2F5cyBjb21waWxlZCBpbiwgd2hpY2ggaXMgZ29vZC4gVGhlbiBJIG5vdGUgdGhlIGluY2x1c2lvbiBvZiBjb25maWd1cmF0aW9uczogYE1FTUNHYCBhbmQgYEhJQkVSTkFUSU9OYC4gSSBhbHNvIHNwb3QgYG5vZGVfcmVjbGFpbWAsIHdoaWNoIGlzIGRlcGVuZGVudCBvbiBgQ09ORklHX05VTUFgLiBTbywgdGhlIGVmZmVjdGl2ZSBjb25maWd1cmF0aW9ucyB0aGF0IGVuYWJsZSBkaWZmZXJlbnQgY29kZSBwYXRocyBhcmU6IGBNRU1DR2AsIGBISUJFUk5BVElPTmAsIGFuZCBgTlVNQWAuXG5cbkkgdGhlbiB0b29rIGEgbG9vayBhdCBvdGhlciBlbnRyeSBwb2ludHMuIEkga25vdyB0aGF0IGBrc3dhcGRfcnVuYCBpcyBjYWxsZWQgYXQgYm9vdCBhbmQgZm9yIG5vZGUgaG90LWFkZCwgYW5kIGB3YWtldXBfa3N3YXBkYCBpcyBjYWxsZWQgZnJvbSB0aGUgcGFnZSBhbGxvY2F0b3IsIHNvIHRoZXkgYXJlIGhvdCBwYXRocyBvciBhdCBib290LiBUaGlzIGxlYWRzIG1lIHRvIGlkZW50aWZ5IHRoZSBmb2N1cyBzeW1ib2xzLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBwYXRjaCdzIGNvcmUgaW1wYWN0LCBJJ3ZlIHplcm9lZCBpbiBvbiB0aGUgY3JpdGljYWwgc3ltYm9sczogYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCwgYW5kIGBub2RlX3JlY2xhaW1gLlxuXG5JJ20gZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgcGF0Y2ggYW5kIHRoZSBtb2RpZmljYXRpb25zIGl0IG1ha2VzIHRvIGBpc29sYXRlX2xydV9mb2xpb3NgIGFuZCBgc2hyaW5rX2xydXZlY2AuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMsIHNvIHRoZXkncmUgYWx3YXlzIGNvbXBpbGVkLiBUaGUgY29uZmlncyBhcmUgdGhlcmUgdG8gYWN0aXZhdGUgc3BlY2lmaWMgZW50cnkgcG9pbnRzLiBgaXNvbGF0ZV9scnVfZm9saW9zYCBub3cgY2FwcyB0aGUgbnVtYmVyIG9mIHNraXBwZWQgZm9saW9zLCBwcmV2ZW50aW5nIGZvcmNlZCBpc29sYXRpb24gYWZ0ZXIgYSBjZXJ0YWluIHRocmVzaG9sZC4gQW5kLCB0aGUgYHNocmlua19scnV2ZWNgIGNoYW5nZXMgdGhlIHdheSB0aGUgb3ZlcnNob290IG9mIHNjYW5uZWQgcGFnZXMgYXJlIGNvdW50ZWQgYWdhaW5zdCB0aGUgcXVvdGEuIFRoaXMgc2lnbmFscyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBwYWdlIHJlY2xhaW0gbG9naWMuIERlZmluaXRlbHkgd29ydGggZnV6emluZywgSSB0aGluay5cblxuTXkgcmVhc29uaW5nIGlzIHRoaXM6IFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGNvcmUgcGFnZSByZWNsYWltIGxvZ2ljLiBUaG9zZSBjb3JlIGZ1bmN0aW9ucyBjYW4gYmUgcmVhY2hlZCB2aWEgY2dyb3VwIHJlY2xhaW0sIHByb2FjdGl2ZSByZWNsYWltLCBhbmQgaGliZXJuYXRpb24sIGFtb25nIG90aGVycy4gYG5vZGVfcmVjbGFpbWAgaXMgY29udHJvbGxlZCBieSBhIHN5c2N0bCwgd2hpY2ggaXMgcGVyZmVjdCBmb3IgU3l6a2FsbGVyLlxuXG5UaGVyZWZvcmUsIHRoZSBmb2N1cyBzeW1ib2xzIGFyZTogYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCwgYW5kIGBub2RlX3JlY2xhaW1gLiBUaGUgZW5hYmxlIGNvbmZpZ3MgYXJlIGBNRU1DR2AsIGBISUJFUk5BVElPTmAsIGFuZCBgTlVNQWAuXG5cbkkgY2hlY2tlZCwgYWxsIG9mIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSBndWFyZGVkIGJ5IHRoZXNlIGNvbmZpZ3VyYXRpb25zLlxuXG5JbiBjb25jbHVzaW9uLCBJJ3ZlIGdvdCBhIHNvbGlkIGZyYW1ld29yayBmb3IgaG93IHRvIGFwcHJvYWNoIGZ1enppbmcgdGhpcyBwYXRjaCwgY29uY2VudHJhdGluZyBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjYzMSwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMzoxMi40MzIyNjk2MTVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njg0OTQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkhJQkVSTkFUSU9OXCIsXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIixcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcIm1lbV9jZ3JvdXBfc2hyaW5rX25vZGVcIixcbiAgICBcIm5vZGVfcmVjbGFpbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgcGFnZSByZWNsYWltIGxvZ2ljIGluIGBpc29sYXRlX2xydV9mb2xpb3NgIGFuZCBgc2hyaW5rX2xydXZlY2AgdG8gcHJldmVudCBoYXJkIGxvY2t1cHMgYnkgY2FwcGluZyB0aGUgbnVtYmVyIG9mIHNraXBwZWQgaW5lbGlnaWJsZSBmb2xpb3MgYW5kIGFkanVzdGluZyB0aGUgc2NhbiBxdW90YS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHZhcmlvdXMgcmVjbGFpbSBwYXRocyAoZS5nLiwgY2dyb3VwIHJlY2xhaW0sIHByb2FjdGl2ZSByZWNsYWltLCBoaWJlcm5hdGlvbikuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkhJQkVSTkFUSU9OXCIsXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIixcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcIm1lbV9jZ3JvdXBfc2hyaW5rX25vZGVcIixcbiAgICBcIm5vZGVfcmVjbGFpbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgcGFnZSByZWNsYWltIGxvZ2ljIGluIGBpc29sYXRlX2xydV9mb2xpb3NgIGFuZCBgc2hyaW5rX2xydXZlY2AgdG8gcHJldmVudCBoYXJkIGxvY2t1cHMgYnkgY2FwcGluZyB0aGUgbnVtYmVyIG9mIHNraXBwZWQgaW5lbGlnaWJsZSBmb2xpb3MgYW5kIGFkanVzdGluZyB0aGUgc2NhbiBxdW90YS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHZhcmlvdXMgcmVjbGFpbSBwYXRocyAoZS5nLiwgY2dyb3VwIHJlY2xhaW0sIHByb2FjdGl2ZSByZWNsYWltLCBoaWJlcm5hdGlvbikuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjEyLjUxOTEyNTE0NloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2NTI2ODcxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMzoxMi41MTk2NzA4NjZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzU2NTIxMzgzODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBWTSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0IGludHJvZHVjZXMgYSBuZXcgZmllbGQgYG5yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHRvIHRyYWNrIHRoZSBudW1iZXIgb2Ygc2Nhbm5lZCBwYWdlcywgcmVwbGFjaW5nIGFuIG91dHB1dCBwb2ludGVyIGFyZ3VtZW50IGluIGBpc29sYXRlX2xydV9mb2xpb3MoKWAuIFRoZSBmaWVsZCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoZWl0aGVyIGV4cGxpY2l0bHkgdG8gMCBpbiBgc2hyaW5rX2xydXZlYygpYCBvciB1bmNvbmRpdGlvbmFsbHkgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiBgaXNvbGF0ZV9scnVfZm9saW9zKClgKS4gVGhlIHBhdGNoIGFsc28gY2hhbmdlcyB0aGUgbG9naWMgdG8gc3RvcCBpc29sYXRpbmcgZm9saW9zIHdoZW4gYSBza2lwIHRocmVzaG9sZCBpcyByZWFjaGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkbyBub3QgaW52b2x2ZSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NDc4M2FlNzY2MTI5MGIwMTNiMGFjMWFlYmQ4YWMxYzIxZDNiMmJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDg6MDE6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1NjcwOGQxZDJkZmQ1Li5hYzMyMzdhNThjYjI5IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTY0LDYgKzE2NCw5IEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuIFx0LyogSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBpbmFjdGl2ZSBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xuIFxuK1x0LyogTnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkIGZyb20gaXNvbGF0ZV9scnVfZm9saW9zKCkgKi9cbitcdHVuc2lnbmVkIGxvbmcgbnJfaXNvbGF0ZV9zY2FubmVkO1xuK1xuIFx0LyogTnVtYmVyIG9mIHBhZ2VzIGZyZWVkIHNvIGZhciBkdXJpbmcgYSBjYWxsIHRvIHNocmlua196b25lcygpICovXG4gXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcbiBcbkBAIC0xNjczLDcgKzE2NzYsNiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdXBkYXRlX2xydV9zaXplcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gICogQG5yX3RvX3NjYW46XHRUaGUgbnVtYmVyIG9mIGVsaWdpYmxlIHBhZ2VzIHRvIGxvb2sgdGhyb3VnaCBvbiB0aGUgbGlzdC5cbiAgKiBAbHJ1dmVjOlx0VGhlIExSVSB2ZWN0b3IgdG8gcHVsbCBwYWdlcyBmcm9tLlxuICAqIEBkc3Q6XHRUaGUgdGVtcCBsaXN0IHRvIHB1dCBwYWdlcyBvbiB0by5cbi0gKiBAbnJfc2Nhbm5lZDpcdFRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQuXG4gICogQHNjOlx0XHRUaGUgc2Nhbl9jb250cm9sIHN0cnVjdCBmb3IgdGhpcyByZWNsYWltIHNlc3Npb25cbiAgKiBAbHJ1Olx0TFJVIGxpc3QgaWQgZm9yIGlzb2xhdGluZ1xuICAqXG5AQCAtMTY4MSw4ICsxNjgzLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVwZGF0ZV9scnVfc2l6ZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuICAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGxpc3RfaGVhZCAqZHN0LFxuLVx0XHR1bnNpZ25lZCBsb25nICpucl9zY2FubmVkLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi1cdFx0ZW51bSBscnVfbGlzdCBscnUpXG4rXHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBlbnVtIGxydV9saXN0IGxydSlcbiB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICpzcmMgPSBcdTAwMjZscnV2ZWMtXHUwMDNlbGlzdHNbbHJ1XTtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4gPSAwO1xuQEAgLTE3MDMsMTIgKzE3MDQsMjAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0bnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdHRvdGFsX3NjYW4gKz0gbnJfcGFnZXM7XG4gXG4tXHRcdC8qIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAqL1xuLVx0XHRpZiAobWF4X25yX3NraXBwZWQgXHUwMDNjIFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIChmb2xpb196b25lbnVtKGZvbGlvKSBcdTAwM2Ugc2MtXHUwMDNlcmVjbGFpbV9pZHgpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAuXG4rXHRcdCAqIE9uY2UgdGhlIGNhcCBpcyBoaXQsIHN0b3AgcmF0aGVyIHRoYW4gZm9yY2UtaXNvbGF0aW5nOlxuK1x0XHQgKiByZWNsYWltaW5nIGluZWxpZ2libGUgZm9saW9zIG9ubHkgaW5mbGF0ZXMgbnJfcmVjbGFpbWVkXG4rXHRcdCAqIGludG8gYSBmYWxzZSBwcm9ncmVzcy5cbitcdFx0ICovXG4rXHRcdGlmIChmb2xpb196b25lbnVtKGZvbGlvKSBcdTAwM2Ugc2MtXHUwMDNlcmVjbGFpbV9pZHgpIHtcbiBcdFx0XHRucl9za2lwcGVkW2ZvbGlvX3pvbmVudW0oZm9saW8pXSArPSBucl9wYWdlcztcbi1cdFx0XHRtb3ZlX3RvID0gXHUwMDI2Zm9saW9zX3NraXBwZWQ7XG4gXHRcdFx0bWF4X25yX3NraXBwZWQrKztcbitcdFx0XHRpZiAobWF4X25yX3NraXBwZWQgXHUwMDNlPSBTV0FQX0NMVVNURVJfTUFYX1NLSVBQRUQpIHtcbitcdFx0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmZvbGlvc19za2lwcGVkKTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0XHRtb3ZlX3RvID0gXHUwMDI2Zm9saW9zX3NraXBwZWQ7XG4gXHRcdFx0Z290byBtb3ZlO1xuIFx0XHR9XG4gXG5AQCAtMTc2Niw3ICsxNzc1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0XHRza2lwcGVkICs9IG5yX3NraXBwZWRbemlkXTtcbiBcdFx0fVxuIFx0fVxuLVx0Km5yX3NjYW5uZWQgPSB0b3RhbF9zY2FuO1xuK1x0c2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2NhbjtcbiBcdHRyYWNlX21tX3Ztc2Nhbl9scnVfaXNvbGF0ZShzYy1cdTAwM2VyZWNsYWltX2lkeCwgc2MtXHUwMDNlb3JkZXIsIG5yX3RvX3NjYW4sXG4gXHRcdFx0XHQgICAgdG90YWxfc2Nhbiwgc2tpcHBlZCwgbnJfdGFrZW4sIGxydSk7XG4gXHR1cGRhdGVfbHJ1X3NpemVzKGxydXZlYywgbHJ1LCBucl96b25lX3Rha2VuKTtcbkBAIC0yMDE0LDggKzIwMjMsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbi1cdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2Zm9saW9fbGlzdCxcbi1cdFx0XHRcdCAgICAgXHUwMDI2bnJfc2Nhbm5lZCwgc2MsIGxydSk7XG4rXHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFx1MDAyNmZvbGlvX2xpc3QsIHNjLCBscnUpO1xuK1x0bnJfc2Nhbm5lZCA9IHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZDtcbiBcbiBcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIGZpbGUsIG5yX3Rha2VuKTtcbiBcdGl0ZW0gPSBQR1NDQU5fS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XG5AQCAtMjA3MSw3ICsyMDgwLDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0XHQgICAgICAgZW51bSBscnVfbGlzdCBscnUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl90YWtlbjtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcbiBcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XG4gXHRMSVNUX0hFQUQobF9ob2xkKTtcdC8qIFRoZSBmb2xpb3Mgd2hpY2ggd2VyZSBzbmlwcGVkIG9mZiAqL1xuIFx0TElTVF9IRUFEKGxfYWN0aXZlKTtcbkBAIC0yMDg1LDEyICsyMDkzLDExIEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbi1cdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2bF9ob2xkLFxuLVx0XHRcdFx0ICAgICBcdTAwMjZucl9zY2FubmVkLCBzYywgbHJ1KTtcbitcdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2bF9ob2xkLCBzYywgbHJ1KTtcbiBcbiBcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIGZpbGUsIG5yX3Rha2VuKTtcbiBcbi1cdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JFRklMTCwgbnJfc2Nhbm5lZCk7XG4rXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdSRUZJTEwsIHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCk7XG4gXG4gXHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xuIFxuQEAgLTU5MjAsMTAgKzU5MjcsMjEgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFx0XHRmb3JfZWFjaF9ldmljdGFibGVfbHJ1KGxydSkge1xuIFx0XHRcdGlmIChucltscnVdKSB7XG4gXHRcdFx0XHRucl90b19zY2FuID0gbWluKG5yW2xydV0sIFNXQVBfQ0xVU1RFUl9NQVgpO1xuLVx0XHRcdFx0bnJbbHJ1XSAtPSBucl90b19zY2FuO1xuIFxuK1x0XHRcdFx0c2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gMDtcbiBcdFx0XHRcdG5yX3JlY2xhaW1lZCArPSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sXG4gXHRcdFx0XHRcdFx0XHQgICAgbHJ1dmVjLCBzYyk7XG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogaXNvbGF0ZV9scnVfZm9saW9zKCkgbWF5IHNjYW4gZmFyIG1vcmVcbitcdFx0XHRcdCAqIHRoYW4gbnJfdG9fc2NhbiB3aGVuIHRoZSBMUlUgaG9sZHNcbitcdFx0XHRcdCAqIGluZWxpZ2libGUgZm9saW9zICh6b25lLXNraXApIG9yIGxhcmdlXG4rXHRcdFx0XHQgKiBmb2xpb3MuIENoYXJnZSB0aGF0IG92ZXJzaG9vdCBhZ2FpbnN0IHRoZVxuK1x0XHRcdFx0ICogcmVtYWluaW5nIHF1b3RhIChjbGFtcGVkIGJ5IG1pbigpIHNvIGl0XG4rXHRcdFx0XHQgKiBjYW5ub3QgZ28gbmVnYXRpdmUpIHNvIHRoZSBuZXh0IGl0ZXJhdGlvblxuK1x0XHRcdFx0ICogZG9lcyBub3QgcmVzY2FuIHRoZSBzYW1lIHNraXBwZWQgZm9saW9zLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRucltscnVdIC09IG1pbihucltscnVdLFxuK1x0XHRcdFx0XHQgICAgICAgbWF4KG5yX3RvX3NjYW4sIHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCkpO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDM6MTIuNTE5NjcxODg2WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxMzA0MjI3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2bXNjYW4uYyBQYXRjaDogQSBEZWVwIERpdmUgaW50byBgbnJfaXNvbGF0ZV9zY2FubmVkYCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL3Ztc2Nhbi5jYCwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyB0aGUgTFJVIGlzIHNjYW5uZWQuIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBgbnJfaXNvbGF0ZV9zY2FubmVkYCB0byB0aGUgYHN0cnVjdCBzY2FuX2NvbnRyb2xgLiBJbnN0ZWFkIG9mIHBhc3NpbmcgYXJvdW5kIGFuIG91dHB1dCBwb2ludGVyIGBucl9zY2FubmVkYCBpbiBgaXNvbGF0ZV9scnVfZm9saW9zYCwgaXQncyBub3cgdXNpbmcgdGhpcyBuZXcgZmllbGQgZGlyZWN0bHkgd2l0aGluIHRoZSBgc2Nhbl9jb250cm9sYCBzdHJ1Y3R1cmUuIFNlZW1zIGNsZWFuZXIsIHBvdGVudGlhbGx5IHNhZmVyLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuXG5cbkkgc2VlIHRoYXQgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgaXMgdGhlIHJlYWwgdGFyZ2V0IGFuZCB0aGUgY2FsbCBzaXRlcyBmb3IgaXQgYXJlIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBhbmQgYHNocmlua19scnV2ZWNgLiBMZXQncyBzdGVwIHRocm91Z2ggdGhlIGxvZ2ljLiBJbiBgc2hyaW5rX2xydXZlY2AsIGl0J3MgaW5pdGlhbGl6ZWQgdG8gemVybyBiZWZvcmUgY2FsbGluZyBgc2hyaW5rX2xpc3RgLCB3aGljaCB0aGVuIGNhbGxzIHRoZSBhY3R1YWwgZnVuY3Rpb25zIG9mIGludGVyZXN0OiBgc2hyaW5rX2FjdGl2ZV9saXN0YCBhbmQgYHNocmlua19pbmFjdGl2ZV9saXN0YC4gR3JlYXQuXG5cbkJ1dCwgYSByZWQgZmxhZyBwb3BwZWQgdXAgaW1tZWRpYXRlbHk6IGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCBpcyBvZnRlbiBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgaXQncyBmcmVxdWVudGx5IHVzZWQgaW4gZnVuY3Rpb25zIGxpa2UgYHRyeV90b19mcmVlX3BhZ2VzYCwgYGJhbGFuY2VfcGdkYXRgLCBgc2hyaW5rX2FsbF9tZW1vcnlgIGFuZCBvdGhlcnMgbGlrZSB0aGVzZS4gVGhpcyBtZWFucyB0aGF0IGlmIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIGlzbid0IGluaXRpYWxpemVkICpldmVyeXdoZXJlKiBiZWZvcmUgaXQncyB1c2VkLCB3ZSdyZSBnb2luZyB0byBoYXZlIGEgcHJvYmxlbS4gU3RhY2sgdmFyaWFibGVzIGFyZSB1bmluaXRpYWxpemVkIGJ5IGRlZmF1bHQgaW4gbWFueSBjb250ZXh0cy5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHRoYXQgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gSW4gYHNocmlua19scnV2ZWNgIGl0J3MgZXhwbGljaXRseSBzZXQgdG8gMC4gRXhjZWxsZW50LCB0aGF0J3Mgb25lIHNwb3QgdGFrZW4gY2FyZSBvZi5cblxuTm93IEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgdmFyaWFibGUgaXMgc2V0IGluIHRoZSBgc2hyaW5rX2FjdGl2ZV9saXN0YCBhbmQgYHNocmlua19pbmFjdGl2ZV9saXN0YCBmdW5jdGlvbnMuXG5cbkluIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBpdCBpcyBuZXZlciBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBidXQgdGhlIGNhbGxzIHRvIGBpc29sYXRlX2xydV9mb2xpb3NgIHdyaXRlcyB0aGUgdmFsdWUuXG5gYGBjXG5cdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2bF9ob2xkLCBzYywgbHJ1KTtcblxuXHRfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCBucl90YWtlbik7XG5cblx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQpO1xuYGBgXG5JbiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBpdCBpcyBuZXZlciBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBidXQgdGhlIGNhbGxzIHRvIGBpc29sYXRlX2xydV9mb2xpb3NgIHdyaXRlcyB0aGUgdmFsdWU6XG5gYGBjXG5cdG5yX3Rha2VuID0gaXNvbGF0ZV9scnVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgXHUwMDI2Zm9saW9fbGlzdCwgc2MsIGxydSk7XG5cdG5yX3NjYW5uZWQgPSBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQ7XG5gYGBcbk9rYXksIEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlLiBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhbiBpbml0aWFsaXphdGlvbiB3aXRoaW4gYHNocmlua19hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGp1c3Qgd3JpdGVzIHRvIHRoZSB2YXJpYWJsZSwgYW5kIEkgaGF2ZSB0byBjb25maXJtIHRoZSB2YWx1ZSBpcyBiZWluZyBpbml0aWFsaXplZCBiZWZvcmUgaXQgZ2V0cyB0aGVyZS5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrIGEgbGV2ZWwuIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGFuZCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFyZSBjYWxsZWQgZnJvbSBgc2hyaW5rX2xpc3RgLiBJcyBgbnJfaXNvbGF0ZV9zY2FubmVkYCBpbml0aWFsaXplZCB0aGVyZT8gTm9wZSwgaXQgaXNuJ3QuXG5cbmBzaHJpbmtfbGlzdGAgaXMgY2FsbGVkIGZyb20gYHNocmlua19scnV2ZWNgIGFuZCBgZXZpY3RfZm9saW9zYC4gSW4gYHNocmlua19scnV2ZWNgLCBpdCBpcyBpbml0aWFsaXplZC5cblxuVGhlcmVmb3JlLCB0byBjb21wbGV0ZSBteSBhbmFseXNpcywgSSBuZWVkIHRvIGNoZWNrIGhvdyBgZXZpY3RfZm9saW9zYCBpcyBjYWxsaW5nIGBzaHJpbmtfbGlzdGAgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIHNldHRpbmcgYG5yX2lzb2xhdGVfc2Nhbm5lZGAuXG5cbkxldCdzIGdyZXAgZm9yIGNhbGxzIHRvIGBzaHJpbmtfbGlzdGAgdG8gYmUgZXh0cmEgdGhvcm91Z2gsIGp1c3QgaW4gY2FzZS4gVGhpcyBzaG91bGQgdGVsbCBtZSBpZiB0aGVyZSdzIGFueSBvdGhlciBwbGFjZSB0aGUgYHNjYW5fY29udHJvbGAgc3RydWN0dXJlIG1pZ2h0IGJlIHVzZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gSSBjYW4ndCBsZXQgdGhpcyBzbGlwIHRocm91Z2ggdGhlIGNyYWNrczsgdW5pbml0aWFsaXplZCB2YWx1ZXMgaW4gdGhpcyBjb250ZXh0IGNvdWxkIGJlIGNhdGFzdHJvcGhpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjIxLjY1MDA5ODcxN1oiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0Nzc3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XFxubW0vdm1zY2FuLmM6NzU6XFx0LyogSG93IG1hbnkgcGFnZXMgc2hyaW5rX2xpc3QoKSBzaG91bGQgcmVjbGFpbSAqL1xcbm1tL3Ztc2Nhbi5jLTc2LVxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIxODk9dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS92bXNjYW4uYy0yMjIxLVxcbm1tL3Ztc2Nhbi5jOjIyMjI6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0yMjIzLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmM9NTg4Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTMxLVxcdFxcdFxcdFxcdHNjLVxcdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQgPSAwO1xcbm1tL3Ztc2Nhbi5jOjU5MzI6XFx0XFx0XFx0XFx0bnJfcmVjbGFpbWVkICs9IHNocmlua19saXN0KGxydSwgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy01OTMzLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBscnV2ZWMsIHNjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDM6MjEuNjk1NTgyNTIyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODAxMDkyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byBgc2hyaW5rX2xpc3RgIFVzYWdlKipcblxuT2theSwgc28gSSdtIHNlZWluZyBgc2hyaW5rX2xpc3RgIGNhbGxlZCBleGNsdXNpdmVseSBmcm9tIGBzaHJpbmtfbHJ1dmVjYC4gVGhhdCdzIGEgYml0IHN1c3BpY2lvdXMsIGFuZCBJJ20gaXRjaGluZyB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiBpdC4gSSB3YW50IHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY2FsbCBzaXRlcy4gQSBzaW5nbGUgZnVuY3Rpb24gY2FsbCBmcm9tIGEgc3BlY2lmaWMgY29udGV4dCBjYW4gaGlkZSBhbGwgc29ydHMgb2YgYXNzdW1wdGlvbnMgdGhhdCBtYXkgYmUgYmFrZWQgaW50byB0aGUgY29kZS4gVGhpcyBjb3VsZCBsZWFkIHRvIGRpZmZpY3VsdCB0byBkZWJ1ZyBwcm9ibGVtcyBsYXRlciBvbi4gVGltZSB0byBkaWcgaW4gYW5kIHZlcmlmeSB0aGUgZGVwZW5kZW5jeSB0cmVlIGlzIHByZWNpc2VseSB3aGF0IEknbSBleHBlY3RpbmcuIExldCdzIHRyYWNlIGl0IGFuZCBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mzk2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDM6MjQuNDc1Njk0OTE5WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAyODAzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfbGlzdFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc0PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xcbm1tL3Ztc2Nhbi5jOjc1OlxcdC8qIEhvdyBtYW55IHBhZ2VzIHNocmlua19saXN0KCkgc2hvdWxkIHJlY2xhaW0gKi9cXG5tbS92bXNjYW4uYy03Ni1cXHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW07XFxuLS1cXG5tbS92bXNjYW4uYz0yMTg5PXVuc2lnbmVkIGxvbmcgcmVjbGFpbV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxcbi0tXFxubW0vdm1zY2FuLmMtMjIyMS1cXG5tbS92bXNjYW4uYzoyMjIyOnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19saXN0KGVudW0gbHJ1X2xpc3QgbHJ1LCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxubW0vdm1zY2FuLmMtMjIyMy1cXHRcXHRcXHRcXHQgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4ODM9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTkzMS1cXHRcXHRcXHRcXHRzYy1cXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gMDtcXG5tbS92bXNjYW4uYzo1OTMyOlxcdFxcdFxcdFxcdG5yX3JlY2xhaW1lZCArPSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sXFxubW0vdm1zY2FuLmMtNTkzMy1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgbHJ1dmVjLCBzYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjI0LjUyMDcyNzc1NFoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjkwMzU1MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipDb25zaWRlcmluZyBMaXN0IE9wdGltaXphdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZGVlcCBpbiB0aGlzIGNvZGViYXNlLCBhbmQgSSdtIGxvb2tpbmcgYXQgaG93IHdlJ3JlIG1hbmFnaW5nIHRoZXNlIGFjdGl2ZSBhbmQgaW5hY3RpdmUgbGlzdHMuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gb3B0aW1pemF0aW9uIOKAkyBwYXJ0aWN1bGFybHksIGFyZSB3ZSBiZWluZyBlZmZpY2llbnQgd2l0aCBtZW1vcnkgYW5kIHByb2Nlc3Npbmc/IEkgc2VlIHRoZSBtZW50aW9uIG9mIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGFuZCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBhbmQgdGhhdCdzIHByZWNpc2VseSB0aGUgc29ydCBvZiB0aGluZyB0aGF0IGNhdGNoZXMgbXkgZXllLiBUaG9zZSBuYW1lcyBhcmUgcHJvbWlzaW5nLiBNeSBleHBlcnQga25vd2xlZGdlIHdhbnRzIHRvIGtub3cgLSBhcmUgdGhleSBhY3R1YWxseSBzaHJpbmtpbmcgdGhlc2UgbGlzdHMgZHluYW1pY2FsbHkgYmFzZWQgb24gdXNhZ2UsIG9yIGFyZSB0aGV5IGp1c3Qgc3R1YiBmdW5jdGlvbnM/IEFyZSB0aGV5IGludGVsbGlnZW50bHkgcmVzaXppbmcgYnVmZmVycyBiYXNlZCBvbiBhY3R1YWwgZGF0YSBsb2FkPyBBcmUgdGhleSBjb25zaWRlcmluZyB0aGUgdHJhZGUtb2ZmcyBiZXR3ZWVuIGZyZXF1ZW50IHJlYWxsb2NhdGlvbnMgYW5kIHBvdGVudGlhbCBtZW1vcnkgd2FzdGU/IFdoYXQgYXJlIHRoZSBhY3R1YWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucz8gSSB3YW50IHRvIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0byBrbm93IGlmIHRoaXMgY29kZSBpcyBkb2luZyB3aGF0IGl0J3Mgc3VwcG9zZWQgdG8gZG8gZWZmaWNpZW50bHkhIEkgbmVlZCB0byBkaWcgaW50byB0aGVpciBsb2dpYyBhbmQgdW5kZXJzdGFuZCB0aGUgc2hyaW5raW5nIHBvbGljeSwgdGhlIHRyaWdnZXJzIGZvciB0aGlzIHNocmlua2luZywgYW5kIGlmIGFueSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBtaWdodCBvY2N1ci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkwMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjI4LjIxMTA4NjM3MloiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMzQxNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX2FjdGl2ZV9saXN0XFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MTk5NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuLS1cXG5tbS92bXNjYW4uYy0yMDYwLS8qXFxubW0vdm1zY2FuLmM6MjA2MTogKiBzaHJpbmtfYWN0aXZlX2xpc3QoKSBtb3ZlcyBmb2xpb3MgZnJvbSB0aGUgYWN0aXZlIExSVSB0byB0aGUgaW5hY3RpdmUgTFJVLlxcbm1tL3Ztc2Nhbi5jLTIwNjItICpcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIwNzYtICovXFxubW0vdm1zY2FuLmM6MjA3NzpzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbm1tL3Ztc2Nhbi5jLTIwNzgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIyMjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIyMjYtXFx0XFx0aWYgKHNjLVxcdTAwM2VtYXlfZGVhY3RpdmF0ZSBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIGlzX2ZpbGVfbHJ1KGxydSkpKVxcbm1tL3Ztc2Nhbi5jOjIyMjc6XFx0XFx0XFx0c2hyaW5rX2FjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIGxydSk7XFxubW0vdm1zY2FuLmMtMjIyOC1cXHRcXHRlbHNlXFxuLS1cXG5tbS92bXNjYW4uYz01ODgzPXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwMTAtXFx0ICAgIGluYWN0aXZlX2lzX2xvdyhscnV2ZWMsIExSVV9JTkFDVElWRV9BTk9OKSlcXG5tbS92bXNjYW4uYzo2MDExOlxcdFxcdHNocmlua19hY3RpdmVfbGlzdChTV0FQX0NMVVNURVJfTUFYLCBscnV2ZWMsXFxubW0vdm1zY2FuLmMtNjAxMi1cXHRcXHRcXHRcXHQgICBzYywgTFJVX0FDVElWRV9BTk9OKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4MzE9c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjg1My1cXHRcXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xcbm1tL3Ztc2Nhbi5jOjY4NTQ6XFx0XFx0c2hyaW5rX2FjdGl2ZV9saXN0KFNXQVBfQ0xVU1RFUl9NQVgsIGxydXZlYyxcXG5tbS92bXNjYW4uYy02ODU1LVxcdFxcdFxcdFxcdCAgIHNjLCBMUlVfQUNUSVZFX0FOT04pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMzoyOC4yNTYyMjQ2MjhaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4NDIzNjQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgTFJVIFZlY3RvciBTaHJpbmtpbmcgTG9naWMqKlxuXG5SaWdodCwgc28gSSBzZWUgYHNocmlua19hY3RpdmVfbGlzdGAgaXMgYmVpbmcgY2FsbGVkIGRpcmVjdGx5IGZyb20gYm90aCBgc2hyaW5rX2xydXZlY2AgYW5kIGBrc3dhcGRfYWdlX25vZGVgLiBUaGF0J3MgYW4gaW50ZXJlc3RpbmcgdGlkYml0LCBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBvciBwZXJoYXBzIGEgY2xldmVyIG9wdGltaXphdGlvbiBkZXBlbmRpbmcgb24gaG93IGl0J3MgaW1wbGVtZW50ZWQgaW4gdGhvc2UgdHdvIGNhbGxpbmcgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHRlci4gTGV0J3MgZGlnIGludG8gYHNocmlua19scnV2ZWNgIGFuZCBpbW1lZGlhdGVseSBsb29rIGF0IGxpbmUgNjAxMS4gSSB3YW50IHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoYXQgY2FsbCBzaXRlLCBzcGVjaWZpY2FsbHkgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYHNocmlua19hY3RpdmVfbGlzdGAgYW5kIGFueSBzdXJyb3VuZGluZyBjb250ZXh0IHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiB0aGlzIGR1YWwgdXNhZ2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBob3cgdGhlc2UgY2FsbGVycyBhcmUgdXNpbmcgdGhlIHNocmlua2VyLiBBcmUgdGhleSB0cnlpbmcgdG8gYmFsYW5jZSBtZW1vcnkgaW4gc3BlY2lmaWMgY29uZGl0aW9ucywgb3IgYXJlIHdlIGV4cGVyaWVuY2luZyByZXNvdXJjZSBwcmVzc3VyZT9cblxuXG4iLCJJbnB1dFRva2VucyI6Njc0NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjMxLjU0MDQ2NDA5OFoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTcyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTk5MDpcXHRcXHRcXHQgKiBzY2FuIHRhcmdldCBhbmQgdGhlIHBlcmNlbnRhZ2Ugc2Nhbm5pbmcgYWxyZWFkeSBjb21wbGV0ZVxcbjU5OTE6XFx0XFx0XFx0ICovXFxuNTk5MjpcXHRcXHRcXHRscnUgPSAobHJ1ID09IExSVV9GSUxFKSA/IExSVV9CQVNFIDogTFJVX0ZJTEU7XFxuNTk5MzpcXHRcXHRcXHRucl9zY2FubmVkID0gdGFyZ2V0c1tscnVdIC0gbnJbbHJ1XTtcXG41OTk0OlxcdFxcdFxcdG5yW2xydV0gPSB0YXJnZXRzW2xydV0gKiAoMTAwIC0gcGVyY2VudGFnZSkgLyAxMDA7XFxuNTk5NTpcXHRcXHRcXHRucltscnVdIC09IG1pbihucltscnVdLCBucl9zY2FubmVkKTtcXG41OTk2OlxcdFxcbjU5OTc6XFx0XFx0XFx0bHJ1ICs9IExSVV9BQ1RJVkU7XFxuNTk5ODpcXHRcXHRcXHRucl9zY2FubmVkID0gdGFyZ2V0c1tscnVdIC0gbnJbbHJ1XTtcXG41OTk5OlxcdFxcdFxcdG5yW2xydV0gPSB0YXJnZXRzW2xydV0gKiAoMTAwIC0gcGVyY2VudGFnZSkgLyAxMDA7XFxuNjAwMDpcXHRcXHRcXHRucltscnVdIC09IG1pbihucltscnVdLCBucl9zY2FubmVkKTtcXG42MDAxOlxcdFxcdH1cXG42MDAyOlxcdFxcdGJsa19maW5pc2hfcGx1ZyhcXHUwMDI2cGx1Zyk7XFxuNjAwMzpcXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkICs9IG5yX3JlY2xhaW1lZDtcXG42MDA0OlxcdFxcbjYwMDU6XFx0XFx0LypcXG42MDA2OlxcdFxcdCAqIEV2ZW4gaWYgd2UgZGlkIG5vdCB0cnkgdG8gZXZpY3QgYW5vbiBwYWdlcyBhdCBhbGwsIHdlIHdhbnQgdG9cXG42MDA3OlxcdFxcdCAqIHJlYmFsYW5jZSB0aGUgYW5vbiBscnUgYWN0aXZlL2luYWN0aXZlIHJhdGlvLlxcbjYwMDg6XFx0XFx0ICovXFxuNjAwOTpcXHRcXHRpZiAoY2FuX2FnZV9hbm9uX3BhZ2VzKGxydXZlYywgc2MpIFxcdTAwMjZcXHUwMDI2XFxuNjAxMDpcXHRcXHQgICAgaW5hY3RpdmVfaXNfbG93KGxydXZlYywgTFJVX0lOQUNUSVZFX0FOT04pKVxcbjYwMTE6XFx0XFx0XFx0c2hyaW5rX2FjdGl2ZV9saXN0KFNXQVBfQ0xVU1RFUl9NQVgsIGxydXZlYyxcXG42MDEyOlxcdFxcdFxcdFxcdFxcdCAgIHNjLCBMUlVfQUNUSVZFX0FOT04pO1xcbjYwMTM6XFx0fVxcbjYwMTQ6XFx0XFxuNjAxNTpcXHQvKiBVc2UgcmVjbGFpbS9jb21wYWN0aW9uIGZvciBjb3N0bHkgYWxsb2NzIG9yIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSAqL1xcbjYwMTY6XFx0c3RhdGljIGJvb2wgaW5fcmVjbGFpbV9jb21wYWN0aW9uKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbjYwMTc6XFx0e1xcbjYwMTg6XFx0XFx0aWYgKGdmcF9jb21wYWN0aW9uX2FsbG93ZWQoc2MtXFx1MDAzZWdmcF9tYXNrKSBcXHUwMDI2XFx1MDAyNiBzYy1cXHUwMDNlb3JkZXIgXFx1MDAyNlxcdTAwMjZcXG42MDE5OlxcdFxcdFxcdFxcdChzYy1cXHUwMDNlb3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUiB8fFxcbjYwMjA6XFx0XFx0XFx0XFx0IHNjLVxcdTAwM2Vwcmlvcml0eSBcXHUwMDNjIERFRl9QUklPUklUWSAtIDIpKVxcbjYwMjE6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNjAyMjpcXHRcXG42MDIzOlxcdFxcdHJldHVybiBmYWxzZTtcXG42MDI0OlxcdH1cXG42MDI1OlxcdFxcbjYwMjY6XFx0LypcXG42MDI3OlxcdCAqIFJlY2xhaW0vY29tcGFjdGlvbiBpcyB1c2VkIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb24gcmVxdWVzdHMuIEl0IHJlY2xhaW1zXFxuNjAyODpcXHQgKiBvcmRlci0wIHBhZ2VzIGJlZm9yZSBjb21wYWN0aW5nIHRoZSB6b25lLiBzaG91bGRfY29udGludWVfcmVjbGFpbSgpIHJldHVybnNcXG42MDI5OlxcdCAqIHRydWUgaWYgbW9yZSBwYWdlcyBzaG91bGQgYmUgcmVjbGFpbWVkIHN1Y2ggdGhhdCB3aGVuIHRoZSBwYWdlIGFsbG9jYXRvclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMzozMS41NDA3NjM0MzhaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgxMTcwMTc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYHNocmlua19scnV2ZWNgIGFuZCBgbnJfaXNvbGF0ZV9zY2FubmVkYCoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gSSdtIGZvY3VzaW5nIG9uIGBzaHJpbmtfbHJ1dmVjYCBhcm91bmQgbGluZSA2MDExIGFuZCBJJ20gaW1tZWRpYXRlbHkgY29uY2VybmVkIGFib3V0IHRoZSBjYWxsIHRvIGBzaHJpbmtfYWN0aXZlX2xpc3RgLiBTcGVjaWZpY2FsbHksIGlzIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIGluaXRpYWxpemVkICpiZWZvcmUqIHRoaXMgY2FsbD8gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoZSBjb2RlIGxvb2tzIGxpa2UgaXQncyBpbml0aWFsaXplZCB0byB6ZXJvIGluc2lkZSB0aGUgbG9vcDpcblxuYGBgY1xuXHRcdFx0aWYgKG5yW2xydV0pIHtcblx0XHRcdFx0bnJfdG9fc2NhbiA9IG1pbihucltscnVdLCBTV0FQX0NMVVNURVJfTUFYKTtcblxuXHRcdFx0XHRzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQgPSAwO1xuXHRcdFx0XHRucl9yZWNsYWltZWQgKz0gc2hyaW5rX2xpc3QobHJ1LCBucl90b19zY2FuLFxuXHRcdFx0XHRcdFx0XHQgICAgbHJ1dmVjLCBzYyk7XG5gYGBcblxuQnV0IHdoYXQgaWYgdGhhdCBsb29wICpkb2Vzbid0KiBydW4/IE9yLCBldmVuIHdvcnNlLCB3aGF0IGlmIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIHJldGFpbnMgc29tZSBnYXJiYWdlIHZhbHVlIGZyb20gYSBwcmV2aW91cyBsb29wIGl0ZXJhdGlvbj8gVGhpcyBjb3VsZCBsZWFkIHRvIGEgc2lnbmlmaWNhbnQgcHJvYmxlbSBkb3duIHRoZSBsaW5lIGlmIHRoaXMgdmFyaWFibGUgaXMgdXNlZCBmb3IgdHJhY2tpbmcgcHVycG9zZXMuXG5cblRoZW4sIEkgcmVjYWxsIHRoYXQgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgZG9lcyBzZXQgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gYSB2YWx1ZS4gVGhpcyBzZWVtcyBsaWtlIGl0IHNob3VsZCByZXNvbHZlIGFueSBwcmV2aW91cyBjb25jZXJucy4gU3BlY2lmaWNhbGx5OlxuXG5gYGBjXG5cdHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCA9IHRvdGFsX3NjYW47XG5gYGBcblxuQWgsIHJpZ2h0LCBpdCAqb3ZlcndyaXRlcyogdGhlIHZhbHVlISBJIGNhbiBzZWUgdGhhdCBgaXNvbGF0ZV9scnVfZm9saW9zYCBhbHdheXMgc2V0cyBgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkYC4gSXQgZG9lc24ndCByZWFkIGZyb20gaXQuIFRoZSBjb25jZXJuIGZvciByZXRhaW5lZCBkYXRhIGlzIGdvbmUuIFRoZSB2YWx1ZSBpcyByZXNldCBwcmlvciB0byB0aGUgY2FsbC4gSSB3YXMgcmlnaHQgdG8gY2hlY2sgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc0MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjM3LjM1MjQ2NzYxNVoiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzY5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY4MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2ODA6XFx0ICogQGxydTpcXHRMUlUgbGlzdCBpZCBmb3IgaXNvbGF0aW5nXFxuMTY4MTpcXHQgKlxcbjE2ODI6XFx0ICogcmV0dXJucyBob3cgbWFueSBwYWdlcyB3ZXJlIG1vdmVkIG9udG8gKkBkc3QuXFxuMTY4MzpcXHQgKi9cXG4xNjg0OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzb2xhdGVfbHJ1X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuMTY4NTpcXHRcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCxcXG4xNjg2OlxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBlbnVtIGxydV9saXN0IGxydSlcXG4xNjg3OlxcdHtcXG4xNjg4OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnNyYyA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxpc3RzW2xydV07XFxuMTY4OTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuID0gMDtcXG4xNjkwOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfem9uZV90YWtlbltNQVhfTlJfWk9ORVNdID0geyAwIH07XFxuMTY5MTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3NraXBwZWRbTUFYX05SX1pPTkVTXSA9IHsgMCwgfTtcXG4xNjkyOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2tpcHBlZCA9IDAsIHRvdGFsX3NjYW4gPSAwLCBzY2FuID0gMDtcXG4xNjkzOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XFxuMTY5NDpcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9ucl9za2lwcGVkID0gMDtcXG4xNjk1OlxcdFxcdExJU1RfSEVBRChmb2xpb3Nfc2tpcHBlZCk7XFxuMTY5NjpcXHRcXG4xNjk3OlxcdFxcdHdoaWxlIChzY2FuIFxcdTAwM2MgbnJfdG9fc2NhbiBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShzcmMpKSB7XFxuMTY5ODpcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICptb3ZlX3RvID0gc3JjO1xcbjE2OTk6XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4xNzAwOlxcdFxcbjE3MDE6XFx0XFx0XFx0Zm9saW8gPSBscnVfdG9fZm9saW8oc3JjKTtcXG4xNzAyOlxcdFxcdFxcdHByZWZldGNod19wcmV2X2xydV9mb2xpbyhmb2xpbywgc3JjLCBmbGFncyk7XFxuMTcwMzpcXHRcXG4xNzA0OlxcdFxcdFxcdG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjE3MDU6XFx0XFx0XFx0dG90YWxfc2NhbiArPSBucl9wYWdlcztcXG4xNzA2OlxcdFxcbjE3MDc6XFx0XFx0XFx0LypcXG4xNzA4OlxcdFxcdFxcdCAqIFVzaW5nIG1heF9ucl9za2lwcGVkIHRvIHByZXZlbnQgaGFyZCBMT0NLVVAuXFxuMTcwOTpcXHRcXHRcXHQgKiBPbmNlIHRoZSBjYXAgaXMgaGl0LCBzdG9wIHJhdGhlciB0aGFuIGZvcmNlLWlzb2xhdGluZzpcXG4xNzEwOlxcdFxcdFxcdCAqIHJlY2xhaW1pbmcgaW5lbGlnaWJsZSBmb2xpb3Mgb25seSBpbmZsYXRlcyBucl9yZWNsYWltZWRcXG4xNzExOlxcdFxcdFxcdCAqIGludG8gYSBmYWxzZSBwcm9ncmVzcy5cXG4xNzEyOlxcdFxcdFxcdCAqL1xcbjE3MTM6XFx0XFx0XFx0aWYgKGZvbGlvX3pvbmVudW0oZm9saW8pIFxcdTAwM2Ugc2MtXFx1MDAzZXJlY2xhaW1faWR4KSB7XFxuMTcxNDpcXHRcXHRcXHRcXHRucl9za2lwcGVkW2ZvbGlvX3pvbmVudW0oZm9saW8pXSArPSBucl9wYWdlcztcXG4xNzE1OlxcdFxcdFxcdFxcdG1heF9ucl9za2lwcGVkKys7XFxuMTcxNjpcXHRcXHRcXHRcXHRpZiAobWF4X25yX3NraXBwZWQgXFx1MDAzZT0gU1dBUF9DTFVTVEVSX01BWF9TS0lQUEVEKSB7XFxuMTcxNzpcXHRcXHRcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZmb2xpb3Nfc2tpcHBlZCk7XFxuMTcxODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xNzE5OlxcdFxcdFxcdFxcdH1cXG4xNzIwOlxcdFxcdFxcdFxcdG1vdmVfdG8gPSBcXHUwMDI2Zm9saW9zX3NraXBwZWQ7XFxuMTcyMTpcXHRcXHRcXHRcXHRnb3RvIG1vdmU7XFxuMTcyMjpcXHRcXHRcXHR9XFxuMTcyMzpcXHRcXG4xNzI0OlxcdFxcdFxcdC8qXFxuMTcyNTpcXHRcXHRcXHQgKiBEbyBub3QgY291bnQgc2tpcHBlZCBmb2xpb3MgYmVjYXVzZSB0aGF0IG1ha2VzIHRoZSBmdW5jdGlvblxcbjE3MjY6XFx0XFx0XFx0ICogcmV0dXJuIHdpdGggbm8gaXNvbGF0ZWQgZm9saW9zIGlmIHRoZSBMUlUgbW9zdGx5IGNvbnRhaW5zXFxuMTcyNzpcXHRcXHRcXHQgKiBpbmVsaWdpYmxlIGZvbGlvcy4gIFRoaXMgY2F1c2VzIHRoZSBWTSB0byBub3QgcmVjbGFpbSBhbnlcXG4xNzI4OlxcdFxcdFxcdCAqIGZvbGlvcywgdHJpZ2dlcmluZyBhIHByZW1hdHVyZSBPT00uXFxuMTcyOTpcXHRcXHRcXHQgKiBBY2NvdW50IGFsbCBwYWdlcyBpbiBhIGZvbGlvLlxcbjE3MzA6XFx0XFx0XFx0ICovXFxuMTczMTpcXHRcXHRcXHRzY2FuICs9IG5yX3BhZ2VzO1xcbjE3MzI6XFx0XFxuMTczMzpcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSlcXG4xNzM0OlxcdFxcdFxcdFxcdGdvdG8gbW92ZTtcXG4xNzM1OlxcdFxcdFxcdGlmICghc2MtXFx1MDAzZW1heV91bm1hcCBcXHUwMDI2XFx1MDAyNiBmb2xpb19tYXBwZWQoZm9saW8pKVxcbjE3MzY6XFx0XFx0XFx0XFx0Z290byBtb3ZlO1xcbjE3Mzc6XFx0XFxuMTczODpcXHRcXHRcXHQvKlxcbjE3Mzk6XFx0XFx0XFx0ICogQmUgY2FyZWZ1bCBub3QgdG8gY2xlYXIgdGhlIGxydSBmbGFnIHVudGlsIGFmdGVyIHdlJ3JlXFxuMTc0MDpcXHRcXHRcXHQgKiBzdXJlIHRoZSBmb2xpbyBpcyBub3QgYmVpbmcgZnJlZWQgZWxzZXdoZXJlIC0tIHRoZVxcbjE3NDE6XFx0XFx0XFx0ICogZm9saW8gcmVsZWFzZSBjb2RlIHJlbGllcyBvbiBpdC5cXG4xNzQyOlxcdFxcdFxcdCAqL1xcbjE3NDM6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFmb2xpb190cnlfZ2V0KGZvbGlvKSkpXFxuMTc0NDpcXHRcXHRcXHRcXHRnb3RvIG1vdmU7XFxuMTc0NTpcXHRcXG4xNzQ2OlxcdFxcdFxcdGlmICghZm9saW9fdGVzdF9jbGVhcl9scnUoZm9saW8pKSB7XFxuMTc0NzpcXHRcXHRcXHRcXHQvKiBBbm90aGVyIHRocmVhZCBpcyBhbHJlYWR5IGlzb2xhdGluZyB0aGlzIGZvbGlvICovXFxuMTc0ODpcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjE3NDk6XFx0XFx0XFx0XFx0Z290byBtb3ZlO1xcbjE3NTA6XFx0XFx0XFx0fVxcbjE3NTE6XFx0XFxuMTc1MjpcXHRcXHRcXHRucl90YWtlbiArPSBucl9wYWdlcztcXG4xNzUzOlxcdFxcdFxcdG5yX3pvbmVfdGFrZW5bZm9saW9fem9uZW51bShmb2xpbyldICs9IG5yX3BhZ2VzO1xcbjE3NTQ6XFx0XFx0XFx0bW92ZV90byA9IGRzdDtcXG4xNzU1OlxcdG1vdmU6XFxuMTc1NjpcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIG1vdmVfdG8pO1xcbjE3NTc6XFx0XFx0fVxcbjE3NTg6XFx0XFxuMTc1OTpcXHRcXHQvKlxcbjE3NjA6XFx0XFx0ICogU3BsaWNlIGFueSBza2lwcGVkIGZvbGlvcyB0byB0aGUgc3RhcnQgb2YgdGhlIExSVSBsaXN0LiBOb3RlIHRoYXRcXG4xNzYxOlxcdFxcdCAqIHRoaXMgZGlzcnVwdHMgdGhlIExSVSBvcmRlciB3aGVuIHJlY2xhaW1pbmcgZm9yIGxvd2VyIHpvbmVzIGJ1dFxcbjE3NjI6XFx0XFx0ICogd2UgY2Fubm90IHNwbGljZSB0byB0aGUgdGFpbC4gSWYgd2UgZGlkIHRoZW4gdGhlIFNXQVBfQ0xVU1RFUl9NQVhcXG4xNzYzOlxcdFxcdCAqIHNjYW5uaW5nIHdvdWxkIHNvb24gcmVzY2FuIHRoZSBzYW1lIGZvbGlvcyB0byBza2lwIGFuZCB3YXN0ZSBsb3RzXFxuMTc2NDpcXHRcXHQgKiBvZiBjcHUgY3ljbGVzLlxcbjE3NjU6XFx0XFx0ICovXFxuMTc2NjpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmZvbGlvc19za2lwcGVkKSkge1xcbjE3Njc6XFx0XFx0XFx0aW50IHppZDtcXG4xNzY4OlxcdFxcbjE3Njk6XFx0XFx0XFx0bGlzdF9zcGxpY2UoXFx1MDAyNmZvbGlvc19za2lwcGVkLCBzcmMpO1xcbjE3NzA6XFx0XFx0XFx0Zm9yICh6aWQgPSAwOyB6aWQgXFx1MDAzYyBNQVhfTlJfWk9ORVM7IHppZCsrKSB7XFxuMTc3MTpcXHRcXHRcXHRcXHRpZiAoIW5yX3NraXBwZWRbemlkXSlcXG4xNzcyOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE3NzM6XFx0XFxuMTc3NDpcXHRcXHRcXHRcXHRfX2NvdW50X3ppZF92bV9ldmVudHMoUEdTQ0FOX1NLSVAsIHppZCwgbnJfc2tpcHBlZFt6aWRdKTtcXG4xNzc1OlxcdFxcdFxcdFxcdHNraXBwZWQgKz0gbnJfc2tpcHBlZFt6aWRdO1xcbjE3NzY6XFx0XFx0XFx0fVxcbjE3Nzc6XFx0XFx0fVxcbjE3Nzg6XFx0XFx0c2MtXFx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCA9IHRvdGFsX3NjYW47XFxuMTc3OTpcXHRcXHR0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtXFx1MDAzZXJlY2xhaW1faWR4LCBzYy1cXHUwMDNlb3JkZXIsIG5yX3RvX3NjYW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjM3LjM1MjgwNjYyNVoiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjc4NDk5MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG5yX2lzb2xhdGVfc2Nhbm5lZGAgVmFyaWFibGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBJJ3ZlIGNvbWUgYWNyb3NzIHRoaXMgbGluZTogYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCA9IHRvdGFsX3NjYW47YCBpbiBgaXNvbGF0ZV9scnVfZm9saW9zYC4gSXQncyBhbiB1bmNvbmRpdGlvbmFsIGFzc2lnbm1lbnQsIHJpZ2h0PyBNZWFuaW5nIGl0IGdldHMgc2V0IG5vIG1hdHRlciB3aGF0IGhhcHBlbnMgYmVmb3JlIGl0LiBTbywgSSB0aG91Z2h0IHRoZSBpbml0aWFsIHZhbHVlIHdvdWxkbid0IG1hdHRlci5cblxuQnV0IG5vdywgSSdtIHRoaW5raW5nIGFib3V0IGBzaHJpbmtfbHJ1dmVjYC4gVGhlcmUncyB0aGlzIGNvZGUgYmxvY2s6XG5cbmBgYGNcblx0XHRcdFx0c2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gMDtcblx0XHRcdFx0bnJfcmVjbGFpbWVkICs9IHNocmlua19saXN0KGxydSwgbnJfdG9fc2Nhbixcblx0XHRcdFx0XHRcdFx0ICAgIGxydXZlYywgc2MpO1xuXHRcdFx0XHQvKiAuLi4gKi9cblx0XHRcdFx0bnJbbHJ1XSAtPSBtaW4obnJbbHJ1XSxcblx0XHRcdFx0XHQgICAgICAgbWF4KG5yX3RvX3NjYW4sIHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCkpO1xuYGBgXG5cbldhaXQgYSBtaW51dGUuLi4gSGVyZSwgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAgaXMgZXhwbGljaXRseSBzZXQgdG8gMC4gVGhlbiwgYHNocmlua19saXN0YCBnZXRzIGNhbGxlZC4gQ3J1Y2lhbGx5LCBpZiBgc2hyaW5rX2xpc3RgICpkb2Vzbid0KiBjYWxsIGBpc29sYXRlX2xydV9mb2xpb3NgLCBgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkYCB3aWxsICpzdGF5KiBhdCAwLiBUaGF0J3MgYSBwb3RlbnRpYWwgaXNzdWUuIFRoZSBzdWJzZXF1ZW50IGNhbGN1bGF0aW9ucyBkZXBlbmQgb24gdGhlIHZhbHVlIG9mIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgLiBTbywgZG9lcyBgc2hyaW5rX2xpc3RgICphbHdheXMqIGNhbGwgYGlzb2xhdGVfbHJ1X2ZvbGlvc2A/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSBmb3IgYHNocmlua19saXN0YCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBhbnkgZGlzY3JlcGFuY3kgYmV0d2VlbiBgbnJfdG9fc2NhbmAgYW5kIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIHdpbGwgaW1wYWN0IGhvdyBtYW55IHBhZ2VzIGFyZSBjb25zaWRlcmVkIGZvciByZWNsYW1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowMzo0Mi42MzEzMDk2MDVaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU5MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMjA6XFx0fVxcbjIyMjE6XFx0XFxuMjIyMjpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbjIyMjM6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuMjIyNDpcXHR7XFxuMjIyNTpcXHRcXHRpZiAoaXNfYWN0aXZlX2xydShscnUpKSB7XFxuMjIyNjpcXHRcXHRcXHRpZiAoc2MtXFx1MDAzZW1heV9kZWFjdGl2YXRlIFxcdTAwMjYgKDEgXFx1MDAzY1xcdTAwM2MgaXNfZmlsZV9scnUobHJ1KSkpXFxuMjIyNzpcXHRcXHRcXHRcXHRzaHJpbmtfYWN0aXZlX2xpc3QobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgbHJ1KTtcXG4yMjI4OlxcdFxcdFxcdGVsc2VcXG4yMjI5OlxcdFxcdFxcdFxcdHNjLVxcdTAwM2Vza2lwcGVkX2RlYWN0aXZhdGUgPSAxO1xcbjIyMzA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjIzMTpcXHRcXHR9XFxuMjIzMjpcXHRcXG4yMjMzOlxcdFxcdHJldHVybiBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCBscnV2ZWMsIHNjLCBscnUpO1xcbjIyMzQ6XFx0fVxcbjIyMzU6XFx0XFxuMjIzNjpcXHQvKlxcbjIyMzc6XFx0ICogVGhlIGluYWN0aXZlIGFub24gbGlzdCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRoYXQgdGhlIFZNIG5ldmVyIGhhc1xcbjIyMzg6XFx0ICogdG8gZG8gdG9vIG11Y2ggd29yay5cXG4yMjM5OlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjQyLjYzMTY3MjAxNVoiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODM2MTgyMjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IFNocmlua2FnZSBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGFnYWluLiBUaGUgc2NlbmFyaW8gSSdtIGxvb2tpbmcgYXQgaGluZ2VzIG9uIHRoZXNlIGNvbmRpdGlvbnM6IGBpc19hY3RpdmVfbHJ1KGxydSlgIGlzIHRydWUgYW5kIGBzYy1cdTAwM2VtYXlfZGVhY3RpdmF0ZSBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGlzX2ZpbGVfbHJ1KGxydSkpYCBpcyBmYWxzZS4gSW4gdGhpcyBzcGVjaWZpYyBjYXNlLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCBpcyBza2lwcGVkIGVudGlyZWx5LiBUaGlzIG1lYW5zIGBzaHJpbmtfbGlzdGAgcmV0dXJucyAwLCBhbmQsIGNydWNpYWxseSwgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAgc3RheXMgYXQgemVyby5cblxuTm93LCBsb29raW5nIGF0IGhvdyBgc2hyaW5rX2xydXZlY2AgaGFuZGxlcyB0aGlzLCBJIHNlZTpcblxuYGBgY1xubnJbbHJ1XSAtPSBtaW4obnJbbHJ1XSxcblx0ICAgICAgIG1heChucl90b19zY2FuLCBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQpKTtcbmBgYFxuXG5TaW5jZSBgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkYCBpcyB6ZXJvIGluIHRoaXMgc2l0dWF0aW9uLCBgbWF4KG5yX3RvX3NjYW4sIDApYCBzaW1wbGlmaWVzIHRvIGp1c3QgYG5yX3RvX3NjYW5gLiBTbyB0aGUgbGluZSBlZmZlY3RpdmVseSBiZWNvbWVzIGBucltscnVdIC09IG1pbihucltscnVdLCBucl90b19zY2FuKWAuIFRoYXQncyBjb21wbGV0ZWx5IHNvdW5kOyBpdOKAmXMgZGVjcmVtZW50aW5nIGBucltscnVdYCBieSBhIHZhbGlkIHZhbHVlLCBub3RoaW5nIHNwb29reSBpcyBoYXBwZW5pbmcgdGhlcmUuIFRoZXJlJ3Mgbm8gdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5Ib3dldmVyLCBJJ20gZ2V0dGluZyBhIGxpdHRsZSBwYXJhbm9pZCBub3cuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gdGFrZSBhIHdpZGVyIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIExldCBtZSBjaGVjayBmb3IgYW55IG90aGVyIG9jY3VycmVuY2VzIG9mIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIGluIHRoZSBjb2RlIGJhc2UsIGp1c3QgdG8gYmUgc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGlzc3VlcyBJJ20gb3Zlcmxvb2tpbmcuIEknbSBnb2luZyB0byBncmVwIGZvciBgbnJfaXNvbGF0ZV9zY2FubmVkYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDM6NDguNDY3ODU2ODY5WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDI5MjcwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJucl9pc29sYXRlX3NjYW5uZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XFxuLS1cXG5tbS92bXNjYW4uYy0xNjctXFx0LyogTnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkIGZyb20gaXNvbGF0ZV9scnVfZm9saW9zKCkgKi9cXG5tbS92bXNjYW4uYzoxNjg6XFx0dW5zaWduZWQgbG9uZyBucl9pc29sYXRlX3NjYW5uZWQ7XFxubW0vdm1zY2FuLmMtMTY5LVxcbi0tXFxubW0vdm1zY2FuLmM9MTY4ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMTc3Ny1cXHR9XFxubW0vdm1zY2FuLmM6MTc3ODpcXHRzYy1cXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2NhbjtcXG5tbS92bXNjYW4uYy0xNzc5LVxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfaXNvbGF0ZShzYy1cXHUwMDNlcmVjbGFpbV9pZHgsIHNjLVxcdTAwM2VvcmRlciwgbnJfdG9fc2NhbixcXG4tLVxcbm1tL3Ztc2Nhbi5jPTE5OTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMjAyNi1cXHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFxcdTAwMjZmb2xpb19saXN0LCBzYywgbHJ1KTtcXG5tbS92bXNjYW4uYzoyMDI3OlxcdG5yX3NjYW5uZWQgPSBzYy1cXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkO1xcbm1tL3Ztc2Nhbi5jLTIwMjgtXFxuLS1cXG5tbS92bXNjYW4uYz0yMDc3PXN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuLS1cXG5tbS92bXNjYW4uYy0yMDk5LVxcbm1tL3Ztc2Nhbi5jOjIxMDA6XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVGSUxMLCBzYy1cXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkKTtcXG5tbS92bXNjYW4uYy0yMTAxLVxcbi0tXFxubW0vdm1zY2FuLmM9NTg4Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTMwLVxcbm1tL3Ztc2Nhbi5jOjU5MzE6XFx0XFx0XFx0XFx0c2MtXFx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZCA9IDA7XFxubW0vdm1zY2FuLmMtNTkzMi1cXHRcXHRcXHRcXHRucl9yZWNsYWltZWQgKz0gc2hyaW5rX2xpc3QobHJ1LCBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtNTk0My1cXHRcXHRcXHRcXHRucltscnVdIC09IG1pbihucltscnVdLFxcbm1tL3Ztc2Nhbi5jOjU5NDQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIG1heChucl90b19zY2FuLCBzYy1cXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkKSk7XFxubW0vdm1zY2FuLmMtNTk0NS1cXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjQ4LjU1ODE1NDg2WiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4OTc0MTMxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIElzb2xhdGlvbiBMb2dpYyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYHNocmlua19hY3RpdmVfbGlzdGAsIEkgc2VlIHRoYXQgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAgaXMgYmVpbmcgdXNlZCwgc3BlY2lmaWNhbGx5IHJpZ2h0IGFmdGVyIGNhbGxpbmcgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AuIEknbSB1c2luZyBgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkYCB0byBtb2RpZnkgcGFnZSBzdGF0ZSBhbmQgbHJ1dmVjIHN0YXRlLiBTaW5jZSBgaXNvbGF0ZV9scnVfZm9saW9zYCAqYWx3YXlzKiBzZXRzIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgLCB0aGlzIGxvb2tzIGNvcnJlY3QgYXQgZmlyc3QgZ2xhbmNlLiBJdCBlbnN1cmVzIHRoZSBzdGF0ZSBpcyBjb25zaXN0ZW50LlxuXG5Ob3csIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIHRoZSBzYW1lIHBhdHRlcm4gYXBwZWFycy4gV2UgY2FsbCBgaXNvbGF0ZV9scnVfZm9saW9zYCwgdGhlbiBpbW1lZGlhdGVseSB1c2UgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAuIEFuZCBhZ2FpbiwgSSdtIHJlbHlpbmcgb24gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgdG8gc2V0IHRoaXMgdmFsdWUuIEJ1dCB3YWl0LCBhIG5hZ2dpbmcgdGhvdWdodC4uLndoYXQgaWYgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgKmRvZXNuJ3QqIGFsd2F5cyBzZXQgaXQ/IE15IHdob2xlIGxvZ2ljIGhpbmdlcyBvbiB0aGF0IGFzc3VtcHRpb24uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cbkkgbmVlZCB0byByZS1leGFtaW5lIHRoZSBgaXNvbGF0ZV9scnVfZm9saW9zYCBmdW5jdGlvbiBpdHNlbGYuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNvZGUuIEFoLCBoZXJlIGl0IGlzOiBgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2NhbjtgLiBUaGlzIGFzc2lnbm1lbnQgaXMgcmlnaHQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24sIGp1c3QgYmVmb3JlIHRoYXQgYHRyYWNlX21tX3Ztc2Nhbl9scnVfaXNvbGF0ZWAgY2FsbC4gT2theSwgdGhhdCBjb25maXJtcyBteSBhc3N1bXB0aW9uLCBpdCAqaXMqIHNldCBhdCB0aGUgZW5kLiBCdXQuLi4gYXJlIHRoZXJlIGFueSBlYXJseSByZXR1cm5zIGluIHRoYXQgZnVuY3Rpb24/IEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgc2NhbiB0aGUgZW50aXJlIGBpc29sYXRlX2xydV9mb2xpb3NgIGZ1bmN0aW9uIG5vdyB0byBlbnN1cmUgbm8gY29uZGl0aW9uYWwgcGF0aHMgYnlwYXNzIHRoaXMgY3JpdGljYWwgYXNzaWdubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDM6NTYuNDU1NTcxMDQ4WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjg0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY4NDpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbjE2ODU6XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QsXFxuMTY4NjpcXHRcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgZW51bSBscnVfbGlzdCBscnUpXFxuMTY4NzpcXHR7XFxuMTY4ODpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpzcmMgPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VsaXN0c1tscnVdO1xcbjE2ODk6XFx0XFx0dW5zaWduZWQgbG9uZyBucl90YWtlbiA9IDA7XFxuMTY5MDpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3pvbmVfdGFrZW5bTUFYX05SX1pPTkVTXSA9IHsgMCB9O1xcbjE2OTE6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9za2lwcGVkW01BWF9OUl9aT05FU10gPSB7IDAsIH07XFxuMTY5MjpcXHRcXHR1bnNpZ25lZCBsb25nIHNraXBwZWQgPSAwLCB0b3RhbF9zY2FuID0gMCwgc2NhbiA9IDA7XFxuMTY5MzpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xcbjE2OTQ6XFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfbnJfc2tpcHBlZCA9IDA7XFxuMTY5NTpcXHRcXHRMSVNUX0hFQUQoZm9saW9zX3NraXBwZWQpO1xcbjE2OTY6XFx0XFxuMTY5NzpcXHRcXHR3aGlsZSAoc2NhbiBcXHUwMDNjIG5yX3RvX3NjYW4gXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoc3JjKSkge1xcbjE2OTg6XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqbW92ZV90byA9IHNyYztcXG4xNjk5OlxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuMTcwMDpcXHRcXG4xNzAxOlxcdFxcdFxcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKHNyYyk7XFxuMTcwMjpcXHRcXHRcXHRwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oZm9saW8sIHNyYywgZmxhZ3MpO1xcbjE3MDM6XFx0XFxuMTcwNDpcXHRcXHRcXHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4xNzA1OlxcdFxcdFxcdHRvdGFsX3NjYW4gKz0gbnJfcGFnZXM7XFxuMTcwNjpcXHRcXG4xNzA3OlxcdFxcdFxcdC8qXFxuMTcwODpcXHRcXHRcXHQgKiBVc2luZyBtYXhfbnJfc2tpcHBlZCB0byBwcmV2ZW50IGhhcmQgTE9DS1VQLlxcbjE3MDk6XFx0XFx0XFx0ICogT25jZSB0aGUgY2FwIGlzIGhpdCwgc3RvcCByYXRoZXIgdGhhbiBmb3JjZS1pc29sYXRpbmc6XFxuMTcxMDpcXHRcXHRcXHQgKiByZWNsYWltaW5nIGluZWxpZ2libGUgZm9saW9zIG9ubHkgaW5mbGF0ZXMgbnJfcmVjbGFpbWVkXFxuMTcxMTpcXHRcXHRcXHQgKiBpbnRvIGEgZmFsc2UgcHJvZ3Jlc3MuXFxuMTcxMjpcXHRcXHRcXHQgKi9cXG4xNzEzOlxcdFxcdFxcdGlmIChmb2xpb196b25lbnVtKGZvbGlvKSBcXHUwMDNlIHNjLVxcdTAwM2VyZWNsYWltX2lkeCkge1xcbjE3MTQ6XFx0XFx0XFx0XFx0bnJfc2tpcHBlZFtmb2xpb196b25lbnVtKGZvbGlvKV0gKz0gbnJfcGFnZXM7XFxuMTcxNTpcXHRcXHRcXHRcXHRtYXhfbnJfc2tpcHBlZCsrO1xcbjE3MTY6XFx0XFx0XFx0XFx0aWYgKG1heF9ucl9za2lwcGVkIFxcdTAwM2U9IFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRCkge1xcbjE3MTc6XFx0XFx0XFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2Zm9saW9zX3NraXBwZWQpO1xcbjE3MTg6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTcxOTpcXHRcXHRcXHRcXHR9XFxuMTcyMDpcXHRcXHRcXHRcXHRtb3ZlX3RvID0gXFx1MDAyNmZvbGlvc19za2lwcGVkO1xcbjE3MjE6XFx0XFx0XFx0XFx0Z290byBtb3ZlO1xcbjE3MjI6XFx0XFx0XFx0fVxcbjE3MjM6XFx0XFxuMTcyNDpcXHRcXHRcXHQvKlxcbjE3MjU6XFx0XFx0XFx0ICogRG8gbm90IGNvdW50IHNraXBwZWQgZm9saW9zIGJlY2F1c2UgdGhhdCBtYWtlcyB0aGUgZnVuY3Rpb25cXG4xNzI2OlxcdFxcdFxcdCAqIHJldHVybiB3aXRoIG5vIGlzb2xhdGVkIGZvbGlvcyBpZiB0aGUgTFJVIG1vc3RseSBjb250YWluc1xcbjE3Mjc6XFx0XFx0XFx0ICogaW5lbGlnaWJsZSBmb2xpb3MuICBUaGlzIGNhdXNlcyB0aGUgVk0gdG8gbm90IHJlY2xhaW0gYW55XFxuMTcyODpcXHRcXHRcXHQgKiBmb2xpb3MsIHRyaWdnZXJpbmcgYSBwcmVtYXR1cmUgT09NLlxcbjE3Mjk6XFx0XFx0XFx0ICogQWNjb3VudCBhbGwgcGFnZXMgaW4gYSBmb2xpby5cXG4xNzMwOlxcdFxcdFxcdCAqL1xcbjE3MzE6XFx0XFx0XFx0c2NhbiArPSBucl9wYWdlcztcXG4xNzMyOlxcdFxcbjE3MzM6XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2xydShmb2xpbykpXFxuMTczNDpcXHRcXHRcXHRcXHRnb3RvIG1vdmU7XFxuMTczNTpcXHRcXHRcXHRpZiAoIXNjLVxcdTAwM2VtYXlfdW5tYXAgXFx1MDAyNlxcdTAwMjYgZm9saW9fbWFwcGVkKGZvbGlvKSlcXG4xNzM2OlxcdFxcdFxcdFxcdGdvdG8gbW92ZTtcXG4xNzM3OlxcdFxcbjE3Mzg6XFx0XFx0XFx0LypcXG4xNzM5OlxcdFxcdFxcdCAqIEJlIGNhcmVmdWwgbm90IHRvIGNsZWFyIHRoZSBscnUgZmxhZyB1bnRpbCBhZnRlciB3ZSdyZVxcbjE3NDA6XFx0XFx0XFx0ICogc3VyZSB0aGUgZm9saW8gaXMgbm90IGJlaW5nIGZyZWVkIGVsc2V3aGVyZSAtLSB0aGVcXG4xNzQxOlxcdFxcdFxcdCAqIGZvbGlvIHJlbGVhc2UgY29kZSByZWxpZXMgb24gaXQuXFxuMTc0MjpcXHRcXHRcXHQgKi9cXG4xNzQzOlxcdFxcdFxcdGlmICh1bmxpa2VseSghZm9saW9fdHJ5X2dldChmb2xpbykpKVxcbjE3NDQ6XFx0XFx0XFx0XFx0Z290byBtb3ZlO1xcbjE3NDU6XFx0XFxuMTc0NjpcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfbHJ1KGZvbGlvKSkge1xcbjE3NDc6XFx0XFx0XFx0XFx0LyogQW5vdGhlciB0aHJlYWQgaXMgYWxyZWFkeSBpc29sYXRpbmcgdGhpcyBmb2xpbyAqL1xcbjE3NDg6XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4xNzQ5OlxcdFxcdFxcdFxcdGdvdG8gbW92ZTtcXG4xNzUwOlxcdFxcdFxcdH1cXG4xNzUxOlxcdFxcbjE3NTI6XFx0XFx0XFx0bnJfdGFrZW4gKz0gbnJfcGFnZXM7XFxuMTc1MzpcXHRcXHRcXHRucl96b25lX3Rha2VuW2ZvbGlvX3pvbmVudW0oZm9saW8pXSArPSBucl9wYWdlcztcXG4xNzU0OlxcdFxcdFxcdG1vdmVfdG8gPSBkc3Q7XFxuMTc1NTpcXHRtb3ZlOlxcbjE3NTY6XFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBtb3ZlX3RvKTtcXG4xNzU3OlxcdFxcdH1cXG4xNzU4OlxcdFxcbjE3NTk6XFx0XFx0LypcXG4xNzYwOlxcdFxcdCAqIFNwbGljZSBhbnkgc2tpcHBlZCBmb2xpb3MgdG8gdGhlIHN0YXJ0IG9mIHRoZSBMUlUgbGlzdC4gTm90ZSB0aGF0XFxuMTc2MTpcXHRcXHQgKiB0aGlzIGRpc3J1cHRzIHRoZSBMUlUgb3JkZXIgd2hlbiByZWNsYWltaW5nIGZvciBsb3dlciB6b25lcyBidXRcXG4xNzYyOlxcdFxcdCAqIHdlIGNhbm5vdCBzcGxpY2UgdG8gdGhlIHRhaWwuIElmIHdlIGRpZCB0aGVuIHRoZSBTV0FQX0NMVVNURVJfTUFYXFxuMTc2MzpcXHRcXHQgKiBzY2FubmluZyB3b3VsZCBzb29uIHJlc2NhbiB0aGUgc2FtZSBmb2xpb3MgdG8gc2tpcCBhbmQgd2FzdGUgbG90c1xcbjE3NjQ6XFx0XFx0ICogb2YgY3B1IGN5Y2xlcy5cXG4xNzY1OlxcdFxcdCAqL1xcbjE3NjY6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZmb2xpb3Nfc2tpcHBlZCkpIHtcXG4xNzY3OlxcdFxcdFxcdGludCB6aWQ7XFxuMTc2ODpcXHRcXG4xNzY5OlxcdFxcdFxcdGxpc3Rfc3BsaWNlKFxcdTAwMjZmb2xpb3Nfc2tpcHBlZCwgc3JjKTtcXG4xNzcwOlxcdFxcdFxcdGZvciAoemlkID0gMDsgemlkIFxcdTAwM2MgTUFYX05SX1pPTkVTOyB6aWQrKykge1xcbjE3NzE6XFx0XFx0XFx0XFx0aWYgKCFucl9za2lwcGVkW3ppZF0pXFxuMTc3MjpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xNzczOlxcdFxcbjE3NzQ6XFx0XFx0XFx0XFx0X19jb3VudF96aWRfdm1fZXZlbnRzKFBHU0NBTl9TS0lQLCB6aWQsIG5yX3NraXBwZWRbemlkXSk7XFxuMTc3NTpcXHRcXHRcXHRcXHRza2lwcGVkICs9IG5yX3NraXBwZWRbemlkXTtcXG4xNzc2OlxcdFxcdFxcdH1cXG4xNzc3OlxcdFxcdH1cXG4xNzc4OlxcdFxcdHNjLVxcdTAwM2Vucl9pc29sYXRlX3NjYW5uZWQgPSB0b3RhbF9zY2FuO1xcbjE3Nzk6XFx0XFx0dHJhY2VfbW1fdm1zY2FuX2xydV9pc29sYXRlKHNjLVxcdTAwM2VyZWNsYWltX2lkeCwgc2MtXFx1MDAzZW9yZGVyLCBucl90b19zY2FuLFxcbjE3ODA6XFx0XFx0XFx0XFx0XFx0ICAgIHRvdGFsX3NjYW4sIHNraXBwZWQsIG5yX3Rha2VuLCBscnUpO1xcbjE3ODE6XFx0XFx0dXBkYXRlX2xydV9zaXplcyhscnV2ZWMsIGxydSwgbnJfem9uZV90YWtlbik7XFxuMTc4MjpcXHRcXHRyZXR1cm4gbnJfdGFrZW47XFxuMTc4MzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjAzOjU2LjQ1NjEyMDUyOFoiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTA3NzUxNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AgRnVuY3Rpb24gQ2FsbCoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBgaXNvbGF0ZV9scnVfZm9saW9zYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGl0IGNvbnNpc3RlbnRseSBzZWVtcyB0byByZWFjaCBhIGNlcnRhaW4gcG9pbnQsIHNwZWNpZmljYWxseSB3aGVyZSBgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkID0gdG90YWxfc2NhbjtgLiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgY291bnRlciBgc2MtXHUwMDNlbnJfaXNvbGF0ZV9zY2FubmVkYCwgd2hpY2ggcHJlc3VtYWJseSB0cmFja3MgdGhlIG51bWJlciBvZiBwYWdlcy9mb2xpb3Mgc2Nhbm5lZCBkdXJpbmcgdGhlIGlzb2xhdGlvbiBwcm9jZXNzLCBpcyAqYWx3YXlzKiBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGBpc29sYXRlX2xydV9mb2xpb3NgIGZ1bmN0aW9uLiBUaGVyZSBhcmVuJ3QgYW55IGVhcmx5IHJldHVybnMgdGhhdCB3b3VsZCBwcmV2ZW50IHRoaXMgaW5pdGlhbGl6YXRpb24uIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi5cblxuTm93LCBhIHBvdGVudGlhbCB3cmlua2xlLiBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBgc2hyaW5rX2FjdGl2ZV9saXN0YCBpcyBjYWxsZWQuIEl0IHdvdWxkIGJlIGltcG9ydGFudCBpZiBgc2hyaW5rX2FjdGl2ZV9saXN0YCBpcyBjYWxsZWQgZnJvbSBga3N3YXBkX2FnZV9ub2RlYC5cblxuTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gaW52ZXN0aWdhdGUgdGhlIGNhbGwgcGF0aHMgdG8gYHNocmlua19hY3RpdmVfbGlzdGAgYW5kLCBpbiBwYXJ0aWN1bGFyLCB0byBzY3J1dGluaXplIGBrc3dhcGRfYWdlX25vZGVgLiBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGludGVyYWN0aW5nIHdpdGggdGhlIHByb2Nlc3MgaW4gYSBwb3RlbnRpYWxseSB1bmV4cGVjdGVkIHdheSB0aGF0IGNvdWxkIGFmZmVjdCBob3cgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAgYmVoYXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjA0OjAwLjM2Mzg3NjE3NloiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjg2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjgzMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjgzMTpcXHRzdGF0aWMgdm9pZCBrc3dhcGRfYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNjgzMjpcXHR7XFxuNjgzMzpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNjgzNDpcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XFxuNjgzNTpcXHRcXG42ODM2OlxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSB7XFxuNjgzNzpcXHRcXHRcXHRscnVfZ2VuX2FnZV9ub2RlKHBnZGF0LCBzYyk7XFxuNjgzODpcXHRcXG42ODM5OlxcdFxcdFxcdGlmICghbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcXG42ODQwOlxcdFxcdFxcdFxcdHJldHVybjtcXG42ODQxOlxcdFxcbjY4NDI6XFx0XFx0fVxcbjY4NDM6XFx0XFxuNjg0NDpcXHRcXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhOVUxMLCBwZ2RhdCk7XFxuNjg0NTpcXHRcXHRpZiAoIWNhbl9hZ2VfYW5vbl9wYWdlcyhscnV2ZWMsIHNjKSlcXG42ODQ2OlxcdFxcdFxcdHJldHVybjtcXG42ODQ3OlxcdFxcbjY4NDg6XFx0XFx0aWYgKCFpbmFjdGl2ZV9pc19sb3cobHJ1dmVjLCBMUlVfSU5BQ1RJVkVfQU5PTikpXFxuNjg0OTpcXHRcXHRcXHRyZXR1cm47XFxuNjg1MDpcXHRcXG42ODUxOlxcdFxcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpO1xcbjY4NTI6XFx0XFx0ZG8ge1xcbjY4NTM6XFx0XFx0XFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG42ODU0OlxcdFxcdFxcdHNocmlua19hY3RpdmVfbGlzdChTV0FQX0NMVVNURVJfTUFYLCBscnV2ZWMsXFxuNjg1NTpcXHRcXHRcXHRcXHRcXHQgICBzYywgTFJVX0FDVElWRV9BTk9OKTtcXG42ODU2OlxcdFxcdFxcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKTtcXG42ODU3OlxcdFxcdH0gd2hpbGUgKG1lbWNnKTtcXG42ODU4OlxcdH1cXG42ODU5OlxcdFxcbjY4NjA6XFx0c3RhdGljIGJvb2wgcGdkYXRfd2F0ZXJtYXJrX2Jvb3N0ZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG42ODYxOlxcdHtcXG42ODYyOlxcdFxcdGludCBpO1xcbjY4NjM6XFx0XFx0c3RydWN0IHpvbmUgKnpvbmU7XFxuNjg2NDpcXHRcXG42ODY1OlxcdFxcdC8qXFxuNjg2NjpcXHRcXHQgKiBDaGVjayBmb3Igd2F0ZXJtYXJrIGJvb3N0cyB0b3AtZG93biBhcyB0aGUgaGlnaGVyIHpvbmVzXFxuNjg2NzpcXHRcXHQgKiBhcmUgbW9yZSBsaWtlbHkgdG8gYmUgYm9vc3RlZC4gQm90aCB3YXRlcm1hcmtzIGFuZCBib29zdHNcXG42ODY4OlxcdFxcdCAqIHNob3VsZCBub3QgYmUgY2hlY2tlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIHJlY2xhaW0gd291bGRcXG42ODY5OlxcdFxcdCAqIHN0YXJ0IHByZW1hdHVyZWx5IHdoZW4gdGhlcmUgaXMgbm8gYm9vc3RpbmcgYW5kIGEgbG93ZXJcXG42ODcwOlxcdFxcdCAqIHpvbmUgaXMgYmFsYW5jZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjA0OjAwLjM2NDI0NzMyNVoiLCJTZXEiOjY3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjIxNTM4Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpZ2dpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgTnVhbmNlcyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoaXMgYGtzd2FwZF9hZ2Vfbm9kZWAgZnVuY3Rpb24sIGFuZCBpdCdzIGNhbGxpbmcgYHNocmlua19hY3RpdmVfbGlzdGAuIFJpZ2h0LCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAgY2FsbHMgYGlzb2xhdGVfbHJ1X2ZvbGlvc2AuIE5vdywgdGhhdCBgaXNvbGF0ZV9scnVfZm9saW9zYCBmdW5jdGlvbiwgSSByZW1lbWJlciBpdCBzZXRzIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgLiBBbmQgdGhlbiwgd2l0aGluIGBzaHJpbmtfYWN0aXZlX2xpc3RgIGl0c2VsZiwgaXQgdXNlcyB0aGF0IHZlcnkgdmFsdWUsIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgLCB3aGVuIGl0IGNhbGxzIGBtb2RfbHJ1dmVjX3N0YXRlYC4gU2VlbXMgc29saWQgLSB0aGUgdmFyaWFibGUgaXMgZGVmaW5pdGVseSBpbml0aWFsaXplZCBiZWZvcmUgaXQncyB1c2VkLCB3aGljaCBpcyBnb29kLiBXZeKAmXJlIHNhZmUgdGhlcmUuXG5cbkhvbGQgb24uLi4gYSBuYWdnaW5nIHRob3VnaHQuIFdoYXQgaWYgYHNocmlua19pbmFjdGl2ZV9saXN0YCBpcyBjYWxsZWQgKnNvbWV3aGVyZSogZWxzZSBiZXNpZGVzIGp1c3QgaW5zaWRlIGBzaHJpbmtfbGlzdGA/IFRoYXQgd291bGQgdGhyb3cgYSB3cmVuY2ggaW50byB0aGlzLiBMZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBjYWxsIHNpdGVzIGZvciBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGp1c3QgdG8gYmUgY2VydGFpbi4gWWVzLCBJJ2xsIGdvIHRocm91Z2ggdGhlIGNhbGwgc3RhY2sgZm9yIHRoYXQgZnVuY3Rpb24gYW5kIG1ha2Ugc3VyZS4gQSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIHNob3VsZCBkbyB0aGUgdHJpY2suIFdlIGhhdmUgdG8gYmUgdGhvcm91Z2ggYWJvdXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0ODQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwODowNDowNi41ODU3ODg4MzFaIiwiU2VxIjo2OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTcyNjkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTE5NTM9c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXFxuLS1cXG5tbS92bXNjYW4uYy0xOTkxLS8qXFxubW0vdm1zY2FuLmM6MTk5MjogKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfbm9kZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyXFxubW0vdm1zY2FuLmMtMTk5My0gKiBvZiByZWNsYWltZWQgcGFnZXNcXG5tbS92bXNjYW4uYy0xOTk0LSAqL1xcbm1tL3Ztc2Nhbi5jOjE5OTU6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbm1tL3Ztc2Nhbi5jLTE5OTYtXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIyMjI9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIyMzItXFxubW0vdm1zY2FuLmM6MjIzMzpcXHRyZXR1cm4gc2hyaW5rX2luYWN0aXZlX2xpc3QobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgbHJ1KTtcXG5tbS92bXNjYW4uYy0yMjM0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDg6MDQ6MDYuNjk1NTIyNDVaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE0NzYyNjc4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFZNIFJlY2xhaW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGVzcGVjaWFsbHkgc2luY2UgaXQncyB0b3VjaGluZyB0aGUgY29yZSBWTSByZWNsYWltIGxvZ2ljLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSByZXBsYWNpbmcgYW4gb3V0cHV0IHBhcmFtZXRlciAoYHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWRgKSB3aXRoIGEgbmV3IGZpZWxkIHdpdGhpbiB0aGUgYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHN0cnVjdHVyZSAoYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGApLiBJdCdzIGFsbCBhYm91dCBob3cgdGhlIG51bWJlciBvZiBzY2FubmVkIHBhZ2VzIGlzIHBhc3NlZCBhcm91bmQgd2l0aGluIGBpc29sYXRlX2xydV9mb2xpb3NgLlxuXG5GaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgc2hyaW5rX2xpc3RgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgY2FsbHMgYHNocmlua19pbmFjdGl2ZV9saXN0YC4gTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIGdldHRpbmcgaW5pdGlhbGl6ZWQgY29ycmVjdGx5PyBMb29raW5nIGF0IGBzaHJpbmtfbHJ1dmVjYCwgSSBzZWUgaXQgZXhwbGljaXRseSBzZXRzIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIHRvIDAgYmVmb3JlIGNhbGxpbmcgYHNocmlua19saXN0YC4gQW5kLCBpZiBgaXNvbGF0ZV9scnVfZm9saW9zYCByZXR1cm5zIGVhcmx5IChlLmcuLCBhY3RpdmUgbGlzdCBhbmQgbm8gZGVhY3RpdmF0ZSksIGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIHJlbWFpbnMgYXQgMCwgbWFraW5nIHRoZSBzdWJzZXF1ZW50IGBtYXgoKWAgY2FsbCBwZXJmZWN0bHkgc2FmZS5cblxuSSBncmVwcGVkIGZvciBhbGwgaW5zdGFuY2VzIG9mIGBucl9pc29sYXRlX3NjYW5uZWRgIHRvIGVuc3VyZSBpdCdzIHVzZWQgY29ycmVjdGx5LiBJdCdzIGFkZGVkIHRvIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCwgYXNzaWduZWQgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AsIGFuZCByZWFkIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBhbmQgYHNocmlua19scnV2ZWNgLiBTbywgaXQgbG9va3MgbGlrZSB0aGVyZSdzIG5vIHdheSBmb3IgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gYmUgcmVhZCB3aXRob3V0IGJlaW5nIGluaXRpYWxpemVkLiBUaGlzIG1ha2VzIG1lIGNvbmZpZGVudCB0aGF0IHRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGp1c3QgYSByZWZhY3RvcmluZy4gSXQgcmVtb3ZlcyBhbiBgbnJfc2Nhbm5lZGAgcG9pbnRlciBhcmd1bWVudCBmcm9tIGBpc29sYXRlX2xydV9mb2xpb3NgIGFuZCB1cGRhdGVzIHRoZSBjYWxsZXJzIHRvIHVzZSB0aGUgbmV3IGBzYy1cdTAwM2Vucl9pc29sYXRlX3NjYW5uZWRgIGZpZWxkLiBUaGUgbG9naWMgY2hhbmdlIGluIGBpc29sYXRlX2xydV9mb2xpb3NgIHRvIGJyZWFrIGVhcmx5IGlmIGBtYXhfbnJfc2tpcHBlZCBcdTAwM2U9IFNXQVBfQ0xVU1RFUl9NQVhfU0tJUFBFRGAgcHJldmVudHMgaGFyZCBsb2NrdXBzLlxuXG5ObywgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGluZm9ybWF0aW9uIGxlYWtzIG9yIGNoYW5nZXMgdGhhdCBpbnZvbHZlIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBhbHNvIGRvZXNuJ3QgbW9kaWZ5IGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC4gU2luY2UgdGhlIGNoYW5nZXMgYXJlIGludGVybmFsIHRvIHRoZSBWTSByZWNsYWltIGxvZ2ljLCBhbnkgYnVncyB3b3VsZCBsaWtlbHkgYmUgbG9naWMgYnVncywgb3V0LW9mLWJvdW5kcyBlcnJvcnMsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZXNlIGFyZSBiZXN0IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBzbyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlxuXG5JIGp1c3Qgd2VudCB0aHJvdWdoIHRoZSBkaWZmIGFnYWluIGZvciBhIGZpbmFsIHJldmlldy4gVGhlIGNoYW5nZXMgbG9vayBzdHJhaWdodGZvcndhcmQsIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHNjLVx1MDAzZW5yX2lzb2xhdGVfc2Nhbm5lZGAgc2VlbXMgY29ycmVjdCBpbiBhbGwgcGxhY2VzLiBTbywgSSBhbSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE5MywiT3V0cHV0VG9rZW5zIjoyMzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA4OjA0OjI4LjE3MTc5MzIyNVoiLCJTZXEiOjcwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIFZNIHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQgaW50cm9kdWNlcyBhIG5ldyBmaWVsZCBgbnJfaXNvbGF0ZV9zY2FubmVkYCB0byBgc3RydWN0IHNjYW5fY29udHJvbGAgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBzY2FubmVkIHBhZ2VzLCByZXBsYWNpbmcgYW4gb3V0cHV0IHBvaW50ZXIgYXJndW1lbnQgaW4gYGlzb2xhdGVfbHJ1X2ZvbGlvcygpYC4gVGhlIGZpZWxkIGlzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgdXNlIChlaXRoZXIgZXhwbGljaXRseSB0byAwIGluIGBzaHJpbmtfbHJ1dmVjKClgIG9yIHVuY29uZGl0aW9uYWxseSBhc3NpZ25lZCBhdCB0aGUgZW5kIG9mIGBpc29sYXRlX2xydV9mb2xpb3MoKWApLiBUaGUgcGF0Y2ggYWxzbyBjaGFuZ2VzIHRoZSBsb2dpYyB0byBzdG9wIGlzb2xhdGluZyBmb2xpb3Mgd2hlbiBhIHNraXAgdGhyZXNob2xkIGlzIHJlYWNoZWQuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRvIG5vdCBpbnZvbHZlIGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBWTSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0IGludHJvZHVjZXMgYSBuZXcgZmllbGQgYG5yX2lzb2xhdGVfc2Nhbm5lZGAgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHRvIHRyYWNrIHRoZSBudW1iZXIgb2Ygc2Nhbm5lZCBwYWdlcywgcmVwbGFjaW5nIGFuIG91dHB1dCBwb2ludGVyIGFyZ3VtZW50IGluIGBpc29sYXRlX2xydV9mb2xpb3MoKWAuIFRoZSBmaWVsZCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAoZWl0aGVyIGV4cGxpY2l0bHkgdG8gMCBpbiBgc2hyaW5rX2xydXZlYygpYCBvciB1bmNvbmRpdGlvbmFsbHkgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiBgaXNvbGF0ZV9scnVfZm9saW9zKClgKS4gVGhlIHBhdGNoIGFsc28gY2hhbmdlcyB0aGUgbG9naWMgdG8gc3RvcCBpc29sYXRpbmcgZm9saW9zIHdoZW4gYSBza2lwIHRocmVzaG9sZCBpcyByZWFjaGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkbyBub3QgaW52b2x2ZSBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowh9x9h[1] Phase: Succeeded StartedAt: 2026-08-11 08:04:39 +0000 UTC FinishedAt: 2026-08-11 08:04:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 08:04:40 +0000 UTC FinishedAt: 2026-08-11 08:04:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2] Phase: Succeeded StartedAt: 2026-08-11 08:04:40 +0000 UTC FinishedAt: 2026-08-11 11:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:04:40 +0000 UTC FinishedAt: 2026-08-11 11:53:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:04:40 +0000 UTC FinishedAt: 2026-08-11 08:04:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:04:40 +0000 UTC FinishedAt: 2026-08-11 08:04:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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-workflowh9x9h/series-workflowh9x9h-convert-artifact-2115585220/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:04:52 +0000 UTC FinishedAt: 2026-08-11 08:21:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:04:52 +0000 UTC FinishedAt: 2026-08-11 08:21:34 +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:*6085e3d8-040a-4f45-9a7d-751d936f8c9a,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-workflowh9x9h/series-workflowh9x9h-convert-artifact-2115585220/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": "cccffebc-e509-4808-a71c-3a7b115c2e44", "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-workflowh9x9h/series-workflowh9x9h-build-action-1768916994/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:04:52 +0000 UTC FinishedAt: 2026-08-11 08:21:24 +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:*6085e3d8-040a-4f45-9a7d-751d936f8c9a,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-workflowh9x9h/series-workflowh9x9h-convert-artifact-2115585220/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": "cccffebc-e509-4808-a71c-3a7b115c2e44", "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-workflowh9x9h/series-workflowh9x9h-build-action-1768916994/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:21:34 +0000 UTC FinishedAt: 2026-08-11 08:21:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:21:34 +0000 UTC FinishedAt: 2026-08-11 08:21:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:21:34 +0000 UTC FinishedAt: 2026-08-11 08:21:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:21:34 +0000 UTC FinishedAt: 2026-08-11 08:21:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-workflowh9x9h/series-workflowh9x9h-convert-artifact-1215629379/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:21:44 +0000 UTC FinishedAt: 2026-08-11 08:24:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:21:44 +0000 UTC FinishedAt: 2026-08-11 08:24:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cccffebc-e509-4808-a71c-3a7b115c2e44,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-workflowh9x9h/series-workflowh9x9h-build-action-1768916994/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-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:24:31 +0000 UTC FinishedAt: 2026-08-11 08:24:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:24:31 +0000 UTC FinishedAt: 2026-08-11 08:24:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:24:31 +0000 UTC FinishedAt: 2026-08-11 08:44:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:24:31 +0000 UTC FinishedAt: 2026-08-11 08:44:26 +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:*6085e3d8-040a-4f45-9a7d-751d936f8c9a,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-workflowh9x9h/series-workflowh9x9h-convert-artifact-1215629379/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": "ea7e3ba2-f4b7-4867-af07-30c48daf59ed", "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-workflowh9x9h/series-workflowh9x9h-build-action-2570351351/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:24:31 +0000 UTC FinishedAt: 2026-08-11 08:44:16 +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:*6085e3d8-040a-4f45-9a7d-751d936f8c9a,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-workflowh9x9h/series-workflowh9x9h-convert-artifact-1215629379/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": "ea7e3ba2-f4b7-4867-af07-30c48daf59ed", "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-workflowh9x9h/series-workflowh9x9h-build-action-2570351351/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:44:26 +0000 UTC FinishedAt: 2026-08-11 08:44:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:44:26 +0000 UTC FinishedAt: 2026-08-11 08:44:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:44:26 +0000 UTC FinishedAt: 2026-08-11 08:46:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:44:26 +0000 UTC FinishedAt: 2026-08-11 08:46:17 +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:*ea7e3ba2-f4b7-4867-af07-30c48daf59ed,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-workflowh9x9h/series-workflowh9x9h-build-action-2570351351/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-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:46:27 +0000 UTC FinishedAt: 2026-08-11 11:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:46:27 +0000 UTC FinishedAt: 2026-08-11 11:53:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"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:*cccffebc-e509-4808-a71c-3a7b115c2e44,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ea7e3ba2-f4b7-4867-af07-30c48daf59ed,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-workflowh9x9h/series-workflowh9x9h-build-action-1768916994/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-workflowh9x9h/series-workflowh9x9h-build-action-2570351351/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:46:27 +0000 UTC FinishedAt: 2026-08-11 08:46:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:46:27 +0000 UTC FinishedAt: 2026-08-11 08:46:31 +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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"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-workflowh9x9h/series-workflowh9x9h-convert-artifact-1564338268/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:46:27 +0000 UTC FinishedAt: 2026-08-11 08:46:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:46:27 +0000 UTC FinishedAt: 2026-08-11 08:46:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:46:27 +0000 UTC FinishedAt: 2026-08-11 08:46:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:46:37 +0000 UTC FinishedAt: 2026-08-11 11:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh9x9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"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":["try_to_free_mem_cgroup_pages","shrink_all_memory","user_proactive_reclaim","mem_cgroup_shrink_node","node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","HIBERNATION","NUMA"],"series_id":"b59f645e-2944-4e0f-803b-46464c406ba1","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-11 08:46:37 +0000 UTC FinishedAt: 2026-08-11 11:53:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cccffebc-e509-4808-a71c-3a7b115c2e44,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ea7e3ba2-f4b7-4867-af07-30c48daf59ed,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-workflowh9x9h/series-workflowh9x9h-build-action-1768916994/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-workflowh9x9h/series-workflowh9x9h-build-action-2570351351/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-workflowh9x9h/series-workflowh9x9h-convert-artifact-1564338268/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,}