Name: series-workflowz59mm Phase: Succeeded StartedAt: 2026-08-11 07:27:17 +0000 UTC FinishedAt: 2026-08-11 11:48:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[0] Phase: Succeeded StartedAt: 2026-08-11 07:27:17 +0000 UTC FinishedAt: 2026-08-11 07:59:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 07:27:17 +0000 UTC FinishedAt: 2026-08-11 07:59:07 +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": "b1c9c30778acba94101e0bceb2bc747a49cf0323", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "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": "b1c9c30778acba94101e0bceb2bc747a49cf0323", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "b95fa5d3-a670-49ec-afc0-b9cf6766fbbc" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "user_proactive_reclaim", "try_to_free_mem_cgroup_pages" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGV2aWN0X2ZvbGlvc2AgaW4gYG1tL3Ztc2Nhbi5jYCB0byB0ZW1wb3JhcmlseSB1cGRhdGUgdGhlIG5vZGUgcGFnZSBzdGF0ZSAoYE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZWApIHdpdGggdGhlIG51bWJlciBvZiBpc29sYXRlZCBmb2xpb3MgZHVyaW5nIGV2aWN0aW9uLCBhbmQgdGhlbiByZXZlcnQgaXQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgKGBpc29sYXRlZGAsIGB0eXBlYCkgYXJlIGxvY2FsIGludGVnZXJzLiBgaXNvbGF0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBpZiBgaXNvbGF0ZV9mb2xpb3NgIHNldHMgaXQgdG8gYSBub24temVybyB2YWx1ZSwgaXQgYWxzbyBpbml0aWFsaXplcyBgdHlwZWAuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY2FsY3VsYXRpb25zLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHBhZ2Ugc3RhdGUgYWNjb3VudGluZywgd2hpY2ggaXMgbm90IHNvbWV0aGluZyBLTVNBTiBkZXRlY3RzLiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBldmljdGlvbiBsb2dpYyB0byBjb3JyZWN0bHkgYWNjb3VudCBmb3IgaXNvbGF0ZWQgZm9saW9zIGluIHRoZSBub2RlIHBhZ2Ugc3RhdGUgKE5SX0lTT0xBVEVEX0FOT04gLyBOUl9JU09MQVRFRF9GSUxFKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aCB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgbWVtb3J5IHByZXNzdXJlIG9yIHByb2FjdGl2ZSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODYzMzhiYTZlNjBjM2RjNTRiZjdjM2E1MGMyZDQ1OTMwMjM2MzRhN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA3OjU2OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGJjMzI0ZTM3YzVmMWYuLjcyM2I1MTM1NzRiM2QgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC00ODE3LDYgJiM0Mzs0ODE3LDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xuIFx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcbiBcdGludCBpc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcbiYjNDM7XHRpbnQgaXNvbGF0ZWRfb3JpZyA9IDA7XG4gXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuQEAgLTQ4MjksNiAmIzQzOzQ4MzAsMTEgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcbiBcdFx0XHRcdCBcdTAwMjZsaXN0LCBcdTAwMjZpc29sYXRlZCwgXHUwMDI2dHlwZSwgXHUwMDI2dHlwZV9zY2FubmVkKTtcbiBcbiYjNDM7XHRpc29sYXRlZF9vcmlnID0gaXNvbGF0ZWQ7XG4mIzQzO1x0aWYgKGlzb2xhdGVkKVxuJiM0MztcdFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgaXNvbGF0ZWQpO1xuJiM0MztcbiBcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXG4gXHRpZiAoc2Nhbm5lZClcbiBcdFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XG5AQCAtNDg5MSw2ICYjNDM7NDg5NywxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoaXNvbGF0ZWRfb3JpZylcbiYjNDM7XHRcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgLWlzb2xhdGVkX29yaWcpO1xuJiM0MztcbiBcdHJldHVybiBzY2FubmVkO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBldmljdGlvbiBsb2dpYyB0byBjb3JyZWN0bHkgYWNjb3VudCBmb3IgaXNvbGF0ZWQgZm9saW9zIGluIHRoZSBub2RlIHBhZ2Ugc3RhdGUgKE5SX0lTT0xBVEVEX0FOT04gLyBOUl9JU09MQVRFRF9GSUxFKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aCB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgbWVtb3J5IHByZXNzdXJlIG9yIHByb2FjdGl2ZSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODYzMzhiYTZlNjBjM2RjNTRiZjdjM2E1MGMyZDQ1OTMwMjM2MzRhNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDA3OjU2OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiYzMyNGUzN2M1ZjFmLi43MjNiNTEzNTc0YjNkIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNDgxNyw2ICYjNDM7NDgxNyw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CiAJaW50IHNjYW5uZWQsIHJlY2xhaW1lZDsKIAlpbnQgaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7CiYjNDM7CWludCBpc29sYXRlZF9vcmlnID0gMDsKIAlib29sIHNraXBfcmV0cnkgPSBmYWxzZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7CkBAIC00ODI5LDYgJiM0Mzs0ODMwLDExIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCXNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLAogCQkJCSAmYW1wO2xpc3QsICZhbXA7aXNvbGF0ZWQsICZhbXA7dHlwZSwgJmFtcDt0eXBlX3NjYW5uZWQpOwogCiYjNDM7CWlzb2xhdGVkX29yaWcgPSBpc29sYXRlZDsKJiM0MzsJaWYgKGlzb2xhdGVkKQomIzQzOwkJX19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsCiYjNDM7CQkJCSAgICAgIGlzb2xhdGVkKTsKJiM0MzsKIAkvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqLwogCWlmIChzY2FubmVkKQogCQl0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTsKQEAgLTQ4OTEsNiAmIzQzOzQ4OTcsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWdvdG8gcmV0cnk7CiAJfQogCiYjNDM7CWlmIChpc29sYXRlZF9vcmlnKQomIzQzOwkJbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyB0eXBlLAomIzQzOwkJCQkgICAgLWlzb2xhdGVkX29yaWcpOwomIzQzOwogCXJldHVybiBzY2FubmVkOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2bXNjYW4uYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgcG9raW5nIGFyb3VuZCBpbiBgbW0vdm1zY2FuLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBldmljdF9mb2xpb3NgIGZ1bmN0aW9uLiBNeSBzcGlkZXktc2Vuc2UgaXMgYWxyZWFkeSB0aW5nbGluZyBhIGJpdCwgYXMgYW55IGNoYW5nZSB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBlc3BlY2lhbGx5IHNvbWV0aGluZyB0aGF0IGRlYWxzIHdpdGggZXZpY3Rpb24sIGlzIHNvbWV0aGluZyBJIHdhbnQgdG8gc2NydXRpbml6ZSBjbG9zZWx5LgoKVGhlIGtleSBzZWVtcyB0byBiZSB0aGUgYWRkaXRpb24gb2YgdGhpcyBgaXNvbGF0ZWRfb3JpZ2AgdmFyaWFibGUuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHRyYWNraW5nIHNvbWUgb3JpZ2luYWwgaXNvbGF0ZWQgY291bnQsIGFuZCB0aGVuIHVwZGF0aW5nIHRoZSBub2RlIHBhZ2Ugc3RhdGUgYE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZWAgd2l0aCBhIG5ldyBgaXNvbGF0ZWRgIGNvdW50LCBhbmQgdGhlbiAqc3VidHJhY3RpbmcqIHRoZSBgaXNvbGF0ZWRfb3JpZ2AgdmFsdWUuIFRoaXMgZmVlbHMgbGlrZSB3ZSYjMzk7cmUgZG9pbmcgc29tZSBib29ra2VlcGluZyBhcm91bmQgcGFnZSBpc29sYXRpb24sIHdoaWNoIGlzIGEgY29yZSBjb21wb25lbnQgb2YgaG93IE1HTFJVIHdvcmtzLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGdpdmVuIGl0cyBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCBNR0xSVeKAmXMgZXZpY3Rpb24gcm91dGluZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtb2RpZmljYXRpb24gaW4gZGV0YWlsLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgZXZpY3RfZm9saW9zYCBmdW5jdGlvbiB3aXRoaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgc2VlIGhvdyB0aGlzIG5ldyB2YXJpYWJsZSBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgTUdMUlUgaGFuZGxlcyBwYWdlIGlzb2xhdGlvbiBhbmQgZXZpY3Rpb24uIFRpbWUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ3NzQ9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00ODA3LVxubW0vdm1zY2FuLmM6NDgwODpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ4MDktXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTQ5OTA9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDEzLVx0XHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjUwMTQ6XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUwMTUtXHRcdGlmICghZGVsdGEpXG4tLVxubW0vdm1zY2FuLmM9NTYxNz1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01NjM3LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjU2Mzg6XHRcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTU2MzktXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTUdMUlUmIzM5O3MgQWN0aXZhdGlvbiBQYXRoKioKCk9rYXksIHNvIGBldmljdF9mb2xpb3NgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlLCBnZXR0aW5nIGNhbGxlZCBmcm9tIGJvdGggYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgYHJ1bl9ldmljdGlvbmAuIFJpZ2h0LCB0aGF0JiMzOTtzIHdpdGhpbiB0aGUgTFJVIGdlbmVyYXRpb24gZnVuY3Rpb25hbGl0eSDigJMgc3BlY2lmaWNhbGx5LCB0aGUgTUdMUlUgZmVhdHVyZS4gTXkgcXVlc3Rpb24gaXMsIGlzIE1HTFJVIG9uIGJ5IGRlZmF1bHQsIG9yIGlzIHRoZXJlIGEgc3BlY2lmaWMga2VybmVsIGNvbmZpZyB0aGF0IGVuYWJsZXMgaXQ/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0uIEdpdmVuIGl0JiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQsIGBtbS9LY29uZmlnYCBpcyB0aGUgbW9zdCBsaWtlbHkgbG9jYXRpb24gZm9yIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIHBlcmhhcHMgaXQmIzM5O3MgZGVmaW5lZCBhbmQgY29uZGl0aW9uYWwgaW4gYG1tL3Ztc2Nhbi5jYC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5MD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAwLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDE6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwMi1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQwOS1cbm1tL0tjb25maWc6MTQxMDpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTEtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE1LVxubW0vS2NvbmZpZzoxNDE2OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MTctXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyNC1cbm1tL0tjb25maWc6MTQyNTpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyNi1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjE3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBFdmljdGlvbiBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBidWlsdCBhcm91bmQgdHdvIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZXJwbGF5IGFuZCB3aGF0IGltcGFjdCB0aGV5IGhhdmUuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IGBMUlVfR0VOYCBwcm9iYWJseSBkZWZpbmVzIHRoZSBmcmFtZXdvcmsgaXRzZWxmLCB3aGlsZSBgTFJVX0dFTl9FTkFCTEVEYCBpcyBsaWtlbHkgYSBydW50aW1lIHRvZ2dsZS4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgaG93IHRoZSBmb2xpbyBldmljdGlvbiBtZWNoYW5pc20sIHNwZWNpZmljYWxseSBgZXZpY3RfZm9saW9zYCwgaXMgaGFuZGxlZCB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgZXZpY3RfZm9saW9zYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIHdoZXRoZXIgYENPTkZJR19MUlVfR0VOYCBpcyBkZWZpbmVkLiBUaGlzIHdpbGwgcmV2ZWFsIGlmIHRoZSBldmljdGlvbiBzdHJhdGVneSBpcyBmdW5kYW1lbnRhbGx5IGxpbmtlZCB0byB0aGUgYExSVV9HRU5gIGZyYW1ld29yayBvciBpZiBpdCYjMzk7cyBhIG1vcmUgaW5kZXBlbmRlbnQgY29tcG9uZW50IHRoYXQgKm1pZ2h0KiBiZSB1c2VkIHdpdGggb3RoZXIgY29uZmlndXJhdGlvbnMuIEkgbXVzdCB1bmRlcnN0YW5kIHRoaXMgdG8gc2VlIHRoZSBvdmVyYWxsIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19MUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9ODI1PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODMwLVxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtODMyLS8qXG4tLVxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS92bXNjYW4uYy04NTctfVxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtODU5LVxuLS1cbm1tL3Ztc2Nhbi5jPTI2MTY9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy0yNjI3LVxubW0vdm1zY2FuLmM6MjYyODojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTI2MjktXG5tbS92bXNjYW4uYz0yNjMwPURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmM6MjYzMTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmMtMjYzMi1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbi0tXG5tbS92bXNjYW4uYz0yODE2PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4MzUtXG5tbS92bXNjYW4uYzoyODM2OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI4MzctXG4tLVxubW0vdm1zY2FuLmM9Mjk0NT12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTczLVxubW0vdm1zY2FuLmM6Mjk3NDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXG5tbS92bXNjYW4uYy0yOTc1LVxuLS1cbm1tL3Ztc2Nhbi5jPTU4ODY9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xubW0vdm1zY2FuLmMtNTg4Ny1cbm1tL3Ztc2Nhbi5jOjU4ODg6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy01ODg5LVxuLS1cbm1tL3Ztc2Nhbi5jPTU5MDA9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTA0LVxubW0vdm1zY2FuLmM6NTkwNTojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTU5MDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU2MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBldmljdF9mb2xpb3NgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCB5ZXAsIGBldmljdF9mb2xpb3NgIGlzIHJpZ2h0IGFyb3VuZCBsaW5lIDQ4MDgsIHdoaWNoIGZhbGxzIHNtYWNrIGRhYiBiZXR3ZWVuIGxpbmVzIDI2MjggYW5kIDU4ODgsIHdoZXJlIHRoYXQgYCNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL2AgYml0IGlzLiBUaGF0IHRlbGxzIG1lIHRoYXQgdGhpcyBmdW5jdGlvbiYjMzk7cyBnb2luZyB0byBuZWVkIGBDT05GSUdfTFJVX0dFTmAgZW5hYmxlZCB0byBldmVuIGJlIGluIHBsYXkuIFNlZW1zIGxvZ2ljYWwsIGdpdmVuIHRoZSBuYW1lLiBUbyBtYWtlIHRoZSBmdW5jdGlvbiBhY3RpdmUgYnkgZGVmYXVsdCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgaXMgYWxzbyBwcm9iYWJseSBpbXBvcnRhbnQuCgpOZXh0LCBJIG5lZWQgdG8ga25vdyB0aGUgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiB5ZXAsIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLiBTbywgd2hvJiMzOTtzICpjYWxsaW5nKiBpdD8gSSBuZWVkIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgdXNlIGBldmljdF9mb2xpb3NgLiBPa2F5LCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgICppcyogc3RhdGljLiBTYW1lIHdpdGggYHJ1bl9ldmljdGlvbmAuIE5vdyBJIG5lZWQgdG8gdHJhY2UgKnVwd2FyZCogdG8gc2VlIHdoZXJlIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDk1NT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5ODktICovXG5tbS92bXNjYW4uYzo0OTkwOnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy00OTkxLXtcbi0tXG5tbS92bXNjYW4uYz01MDM1PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwNTQtXG5tbS92bXNjYW4uYzo1MDU1Olx0bmVlZF9yb3RhdGUgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUwNTYtXG4tLVxubW0vdm1zY2FuLmM9NTE0Nj1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTU4LVxubW0vdm1zY2FuLmM6NTE1OTpcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jLTUxNjAtXHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqVHJhY2luZyBgc2hyaW5rX29uZWAgYW5kIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHplcm9pbmcgaW4gb24gYHNocmlua19vbmVgIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYC4gVGhlc2UgYXJlIHRoZSB0d28gZnVuY3Rpb25zIEkgd2FudCB0byBmb2xsb3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IHdvcmsgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlciB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yIHRyeWluZyB0byBkZWJ1ZyBzb21ldGhpbmcgc3BlY2lmaWMsIHNvIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb25zIGlzIGtleS4gSSBuZWVkIHRvIHNlZSBob3cgYHNocmlua19vbmVgIGFmZmVjdHMgdGhlIExSVSBjYWNoZSByZXByZXNlbnRlZCBieSBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYC4gSXMgaXQgYSBkaXJlY3QgY2FsbCwgb3Igc29tZXRoaW5nIG1vcmUgaW5kaXJlY3Q/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGhzIGZvciBlYWNoLCBhbmQgdGhlbiBwZXJoYXBzIHN0ZXAgdGhyb3VnaCB0aGVpciBleGVjdXRpb24gdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIGRhdGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX29uZXxscnVfZ2VuX3Nocmlua19scnV2ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00OTkwPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTAzNC1cbm1tL3Ztc2Nhbi5jOjUwMzU6c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MDM2LXtcbi0tXG5tbS92bXNjYW4uYz01MDc2PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxMTctXG5tbS92bXNjYW4uYzo1MTE4Olx0XHRvcCA9IHNocmlua19vbmUobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01MTE5LVxuLS1cbm1tL3Ztc2Nhbi5jLTUxNDUtXG5tbS92bXNjYW4uYzo1MTQ2OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTE0Ny17XG4tLVxubW0vdm1zY2FuLmM9NTE2Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxOTMtXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vdm1zY2FuLmM6NTE5NDpcdFx0c2hyaW5rX29uZShcdTAwMjZwZ2RhdC1cdTAwM2VfX2xydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNTE5NS1cdGVsc2Vcbi0tXG5tbS92bXNjYW4uYz01ODkwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTg5NC1cbm1tL3Ztc2Nhbi5jOjU4OTU6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01ODk2LXtcbi0tXG5tbS92bXNjYW4uYz01OTA3PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTE4LVx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jOjU5MTk6XHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTU5MjAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMjQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGBzaHJpbmtfbHJ1dmVjYCYjMzk7cyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkgc2VlIGEgY2FsbCB0byBgc2hyaW5rX2xydXZlY2AgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGp1bXBzIHRvOiAqSXMgdGhpcyBub24tc3RhdGljPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiogRnJvbSBleHBlcmllbmNlLCB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSBpcyBjcnVjaWFsIGZvciBhbnkgcG90ZW50aWFsIHJlZmFjdG9yaW5nIG9yIGRlZXBlciBhbmFseXNpcy4gU28sIGxldCBtZSBjaGVjayB3aGVyZSBgc2hyaW5rX2xydXZlY2AgaXMgZGVmaW5lZC4gVGhlIGltcGxpY2F0aW9ucyBvZiBzdGF0aWMgdnMuIG5vbi1zdGF0aWMgaGVyZSBjYW4gYmUgc2lnbmlmaWNhbnQsIGVzcGVjaWFsbHkgaW4gdGVybXMgb2YgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGNvbXBvbmVudHMgb2YgdGhlIGNvZGUgYW5kIGlmIGl0JiMzOTtzIHBvdGVudGlhbGx5IGV4cG9zZWQgdGhyb3VnaCBhIG1vZHVsZSBib3VuZGFyeSwgYW5kIGlmIHNvLCBob3cuIFRoaXMgYWxzbyBzdWdnZXN0cyB0byBtZSB0aGVyZSYjMzk7cyBwb3RlbnRpYWxseSBhbm90aGVyIGZ1bmN0aW9uIHdpdGggYSBzaW1pbGFyIG5hbWUsIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLCBpdCBpcyBsaWtlbHkgYSByZWxhdGVkIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19scnV2ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00OTU1PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDk4OS0gKi9cbm1tL3Ztc2Nhbi5jOjQ5OTA6c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTQ5OTEte1xuLS1cbm1tL3Ztc2Nhbi5jPTUwMzU9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTA1NC1cbm1tL3Ztc2Nhbi5jOjUwNTU6XHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNTA1Ni1cbi0tXG5tbS92bXNjYW4uYz01MDc2PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxNDUtXG5tbS92bXNjYW4uYzo1MTQ2OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTE0Ny17XG4tLVxubW0vdm1zY2FuLmMtNTE1OC1cbm1tL3Ztc2Nhbi5jOjUxNTk6XHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MTYwLVx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XG4tLVxubW0vdm1zY2FuLmM9NTg5MD1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU4OTQtXG5tbS92bXNjYW4uYzo1ODk1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTg5Ni17XG4tLVxubW0vdm1zY2FuLmM9NTkwMD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5MDYtXG5tbS92bXNjYW4uYzo1OTA3OnN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTU5MDgte1xuLS1cbm1tL3Ztc2Nhbi5jLTU5MTgtXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFx1MDAyNlx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmM6NTkxOTpcdFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNTkyMC1cbi0tXG5tbS92bXNjYW4uYz02MDk4PXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTU3LVxubW0vdm1zY2FuLmM6NjE1ODpcdFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYxNTktXG4tLVxubW0vdm1zY2FuLmM9Njc1Mz11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3ODMtXHQgKi9cbm1tL3Ztc2Nhbi5jOjY3ODQ6XHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNjc4NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBNZW50YWwgRmxvdyBvbiBNZW1vcnkgU2hyaW5rYWdlKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgcGF0aCBvZiBtZW1vcnkgc2hyaW5rYWdlIGluIHRoZSBzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBzaHJpbmtfbm9kZV9tZW1jZ3NgIGFuZCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAgYm90aCB1bHRpbWF0ZWx5IGNhbGwgYHNocmlua19scnV2ZWNgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIGZ1bmN0aW9uLiBgc2hyaW5rX25vZGVfbWVtY2dzYCBpcyB0aGVuIGludm9rZWQgYnkgYHNocmlua19ub2RlYC4gTm93LCB0aGUgY3J1Y2lhbCBwYXJ0OiBgc2hyaW5rX25vZGVgIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGJhbGFuY2VfcGdkYXRgLCB3aGljaCB3ZSBrbm93IGlzIGtzd2FwZCwgdGhlIGtlcm5lbCYjMzk7cyBiYWNrZ3JvdW5kIG1lbW9yeSBtYW5hZ2VtZW50IGRhZW1vbiwgYW5kIGFsc28gYnkgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCwgd2hpY2ggaXMgZGlyZWN0IHJlY2xhaW0uCgpTbywgbG9naWNhbGx5LCB0aGF0IG1lYW5zIGBiYWxhbmNlX3BnZGF0YCBhbmQgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCBhcmUgbXkgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgc2hyaW5rYWdlIHByb2Nlc3Mgc3RhcnRzLiBBbmQsIG9oIHllYWgsIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBpcyBhbHNvIGFuIGVudHJ5IHBvaW50IC0gbWFrZXMgc2Vuc2UsIG1lbW9yeSBjZ3JvdXBzIGhhdmUgdGhlaXIgb3duIHNocmluayBwcm9jZXNzLiBXYWl0IGEgbWludXRlLi4uIGBzaHJpbmtfbm9kZWAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4KCkkgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxscyB0byBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgYmFsYW5jZV9wZ2RhdGAgbW9yZSBjYXJlZnVsbHkgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fdHJ5X3RvX2ZyZWVfcGFnZXN8YmFsYW5jZV9wZ2RhdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTY0NTQ9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy02NDg0LSAqL1xubW0vdm1zY2FuLmM6NjQ4NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxubW0vdm1zY2FuLmMtNjQ4Ni1cdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz02NzA3PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3NDEtXG5tbS92bXNjYW4uYzo2NzQyOlx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY3NDMtXG4tLVxubW0vdm1zY2FuLmM9Njc1Mz11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3NzktXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cbm1tL3Ztc2Nhbi5jOjY3ODA6XHQgKiBpZiB3ZSBkb24mIzM5O3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XG5tbS92bXNjYW4uYy02NzgxLVx0ICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCYjMzk7cyBhcyB3ZWxsLiBXZSBoYWNrXG4tLVxubW0vdm1zY2FuLmM9Njc5Mz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4MjQtXG5tbS92bXNjYW4uYzo2ODI1Olx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY4MjYtXG4tLVxubW0vdm1zY2FuLmM9Njk4Mz1zdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjk4Ni1cdC8qXG5tbS92bXNjYW4uYzo2OTg3Olx0ICogVGhlIHRocm90dGxlZCBwcm9jZXNzZXMgYXJlIG5vcm1hbGx5IHdva2VuIHVwIGluIGJhbGFuY2VfcGdkYXQoKSBhc1xubW0vdm1zY2FuLmMtNjk4OC1cdCAqIHNvb24gYXMgYWxsb3dfZGlyZWN0X3JlY2xhaW0oKSBpcyB0cnVlLiBCdXQgdGhlcmUgaXMgYSBwb3RlbnRpYWxcbi0tXG5tbS92bXNjYW4uYy02OTkxLVx0ICogdGhyb3R0bGVkLCBrc3dhcGQgd2FrZXMsIGEgbGFyZ2UgcHJvY2VzcyBleGl0cyB0aGVyZWJ5IGJhbGFuY2luZyB0aGVcbm1tL3Ztc2Nhbi5jOjY5OTI6XHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcbm1tL3Ztc2Nhbi5jLTY5OTMtXHQgKiB0aGUgd2FrZSB1cCBjaGVja3MuIElmIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgbm8gcHJvY2VzcyBzaG91bGRcbi0tXG5tbS92bXNjYW4uYy02OTk1LVx0ICogdGhlIHdha2UgdXAgaXMgcHJlbWF0dXJlLCBwcm9jZXNzZXMgd2lsbCB3YWtlIGtzd2FwZCBhbmQgZ2V0XG5tbS92bXNjYW4uYzo2OTk2Olx0ICogdGhyb3R0bGVkIGFnYWluLiBUaGUgZGlmZmVyZW5jZSBmcm9tIHdha2UgdXBzIGluIGJhbGFuY2VfcGdkYXQoKSBpc1xubW0vdm1zY2FuLmMtNjk5Ny1cdCAqIHRoYXQgaGVyZSB3ZSBhcmUgdW5kZXIgcHJlcGFyZV90b193YWl0KCkuXG4tLVxubW0vdm1zY2FuLmM9NzA3Nz1jbGVhcl9yZWNsYWltX2FjdGl2ZShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTcwODItLypcbm1tL3Ztc2Nhbi5jOjcwODM6ICogRm9yIGtzd2FwZCwgYmFsYW5jZV9wZ2RhdCgpIHdpbGwgcmVjbGFpbSBwYWdlcyBhY3Jvc3MgYSBub2RlIGZyb20gem9uZXNcbm1tL3Ztc2Nhbi5jLTcwODQtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXG4tLVxubW0vdm1zY2FuLmMtNzA5NC0gKi9cbm1tL3Ztc2Nhbi5jOjcwOTU6c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbm1tL3Ztc2Nhbi5jLTcwOTYte1xuLS1cbm1tL3Ztc2Nhbi5jLTcxMTAtXG5tbS92bXNjYW4uYzo3MTExOlx0dHJhY2VfbW1fdm1zY2FuX2JhbGFuY2VfcGdkYXRfYmVnaW4ocGdkYXQtXHUwMDNlbm9kZV9pZCwgb3JkZXIsXG5tbS92bXNjYW4uYy03MTEyLVx0XHRcdFx0XHQgICAgaGlnaGVzdF96b25laWR4KTtcbi0tXG5tbS92bXNjYW4uYy03MzA1LVxubW0vdm1zY2FuLmM6NzMwNjpcdHRyYWNlX21tX3Ztc2Nhbl9iYWxhbmNlX3BnZGF0X2VuZChwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYy5vcmRlcixcbm1tL3Ztc2Nhbi5jLTczMDctXHRcdFx0XHRcdCAgaGlnaGVzdF96b25laWR4LCBzYy5ucl9yZWNsYWltZWQpO1xuLS1cbm1tL3Ztc2Nhbi5jPTc0MzA9c3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcbi0tXG5tbS92bXNjYW4uYy03NDc2LVx0XHQvKlxubW0vdm1zY2FuLmM6NzQ3NzpcdFx0ICogV2UgY2FuIHNwZWVkIHVwIHRoYXdpbmcgdGFza3MgaWYgd2UgZG9uJiMzOTt0IGNhbGwgYmFsYW5jZV9wZ2RhdFxubW0vdm1zY2FuLmMtNzQ3OC1cdFx0ICogYWZ0ZXIgcmV0dXJuaW5nIGZyb20gdGhlIHJlZnJpZ2VyYXRvclxuLS1cbm1tL3Ztc2Nhbi5jLTc0OTItXHRcdFx0XHRcdFx0YWxsb2Nfb3JkZXIpO1xubW0vdm1zY2FuLmM6NzQ5MzpcdFx0cmVjbGFpbV9vcmRlciA9IGJhbGFuY2VfcGdkYXQocGdkYXQsIGFsbG9jX29yZGVyLFxubW0vdm1zY2FuLmMtNzQ5NC1cdFx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpO1xuLS1cbm1tL3Ztc2Nhbi5jPTc1OTE9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG4tLVxubW0vdm1zY2FuLmMtNzYxMC1cbm1tL3Ztc2Nhbi5jOjc2MTE6XHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNzYxMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIwMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDU2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBSZWNsYWltIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4gemVyb2VzIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAuIFRoZXNlIGFyZSB0aGUgbWVtb3J5IHJlY2xhaW0gZW50cnkgcG9pbnRzLiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgZXZpY3RfZm9saW9zYCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbSAqd2hlbiogYENPTkZJR19MUlVfR0VOYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkcmlsbCBkb3duLgoKRXNzZW50aWFsbHksIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdXBkYXRpbmcgdGhlIG5vZGUgcGFnZSBzdGF0ZSDigJMgc3BlY2lmaWNhbGx5IGBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGVgIOKAkyB3aXRoIHRoZSBjb3VudCBvZiBpc29sYXRlZCBmb2xpb3Mgd2l0aGluIGBldmljdF9mb2xpb3NgLCBhbmQgdGhlbiBzdWJ0cmFjdGluZyBpdCBhdCB0aGUgZW5kLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGNsZWFyIGZpeCBmb3IgaG93IGlzb2xhdGVkIGZvbGlvcyBhcmUgYWNjb3VudGVkIGZvciBkdXJpbmcgTUdMUlUgZXZpY3Rpb24sIHdoaWNoIG1lYW5zIHRoaXMgaXMgd29ydGggcGF5aW5nIGF0dGVudGlvbiB0by4gSXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nLgoKTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBgdHlwZWAgdmFyaWFibGUuIFdoZXJlIGRvZXMgdGhhdCBjb21lIGZyb20/IEl0JiMzOTtzIHJldHVybmVkIGJ5IGBpc29sYXRlX2ZvbGlvc2AsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBjb250ZXh0LiBBbHNvLCB0aGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgd2hlcmUgaXNvbGF0ZWQgZm9saW9zIHdlcmVuJiMzOTt0IGJlaW5nIGNvcnJlY3RseSBhY2NvdW50ZWQgZm9yIGluIGBOUl9JU09MQVRFRF9BTk9OYCBhbmQgYE5SX0lTT0xBVEVEX0ZJTEVgIHdoaWxlIGlzb2xhdGVkLCB3aGljaCBpcyBhIGJpZyBkZWFsIGZvciBhY2N1cmF0ZSBtZW1vcnkgYWNjb3VudGluZy4KClRoZSBvYnZpb3VzIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcgYXJlIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAuIE5vdywgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBhIGhvdCBwYXRoIHdoZW4gbWVtb3J5IGlzIGxvdywgdGhhdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGEgZ29vZCB0YXJnZXQuIEJ1dCBhcmUgdGhlcmUgb3RoZXIgZW50cnkgcG9pbnRzPyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBrc3dhcGRgLCB0aGUga2VybmVsIHRocmVhZC4gSXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBwcmVzc3VyZSwgc28gYW55IHN5c2NhbGxzIHRoYXQgZ2VuZXJhdGUgbWVtb3J5IHByZXNzdXJlIOKAkyBsaWtlIGBtbWFwYCwgYG1hZHZpc2VgLCBgbWxvY2tgLCBgZmFsbG9jYXRlYCwgYHdyaXRlYCDigJMgYXJlIGFsbCBldmVudHVhbGx5IGdvaW5nIHRvIGhpdCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLiBUaGlzIGlzIGNvcmUgTU0gcmVjbGFpbSBsb2dpYywgc28gZnV6emluZyBzaG91bGQgc2ltcGx5IGludm9sdmUgbWVtb3J5LWludGVuc2l2ZSB3b3JrbG9hZHMgdG8gZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuIEkgd2lsbCBmb2N1cyBvbiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgYXMgdGhlIG1haW4gc3ltYm9scyBmb3IgZnV6emluZy4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIGxldCYjMzk7cyBtYWtlIHN1cmUgYExSVV9HRU5gIGlzIGV2ZW4gZW5hYmxlZCBieSBkZWZhdWx0LiBBIHF1aWNrIGNoZWNrIG9mIGBtbS9LY29uZmlnYCBzaG93cyB0aGF0IGl0JiMzOTtzIGNvbmZpZ3VyYWJsZSwgYW5kIGRlcGVuZGVudCBvbiBNTVUuIFdlIHNob3VsZCBiZSBzdXJlIHdlIGVuYWJsZSBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBXaXRoIHRoYXQgaW4gcGxhY2UsIHdlIHNob3VsZCBiZSBhYmxlIHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNDAxPWNvbmZpZyBMUlVfR0VOXG4tLVxubW0vS2NvbmZpZy0xNDA5LVxubW0vS2NvbmZpZzoxNDEwOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxMS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NzAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIHBhZ2UgZ2VuZXJhdGlvbiwgYW5kIEkgbmVlZCB0byBnZXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24ga25vYnMgYXNzb2NpYXRlZCB3aXRoIGl0LiBBaCwgeWVzLCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURg4oCUdGhhdCYjMzk7cyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vay4gVGhvc2Ugc291bmQgZmFtaWxpYXIuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGxvY2F0aW9uIGludGVyYWN0cyB3aXRoIGlzb2xhdGluZyBmb2xpb3MuIFRoZSBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgaG93IGBpc29sYXRlX2ZvbGlvc2AgaXMgYmVpbmcgZGVmaW5lZCwgd2hpY2ggaW5jbHVkZXMgdW5kZXJzdGFuZGluZyB0aGUgYHR5cGVgIGRlZmluaXRpb24gaW4gdGhhdCBjb2RlIHBhdGguIFRoYXQgd2lsbCBtYWtlIGl0IGVhc2llciB0byByZWFzb24gYWJvdXQgdGhlIExSVSBnZW5lcmF0aW9uIHByb2Nlc3MgYW5kIGhvdyBpdCBpcyBiZWluZyBpbmZsdWVuY2VkIGJ5IGFsbG9jYXRpb24gc2V0dGluZ3MuIEdvb2QuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzb2xhdGVfZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDc1NT1zdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00NzczLVxubW0vdm1zY2FuLmM6NDc3NDpzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDc3NS1cdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcbi0tXG5tbS92bXNjYW4uYz00ODA4PXN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ4MjktXG5tbS92bXNjYW4uYzo0ODMwOlx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXG5tbS92bXNjYW4uYy00ODMxLVx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk1NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRm9saW8gSXNvbGF0aW9uIGluIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBoYW5kbGluZyBmb2xpbyBpc29sYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBgdHlwZWAgdmFyaWFibGUsIGZyb20gd2hhdCBJIGNhbiBnYXRoZXIsIGlzIGVpdGhlciBgTFJVX0dFTl9BTk9OYCAoMCkgb3IgYExSVV9HRU5fRklMRWAgKDEpLiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEl0IGRpY3RhdGVzIHdoZXRoZXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbm9ueW1vdXMgbWVtb3J5IG9yIGZpbGUtYmFja2VkIG1lbW9yeS4gVGhlIGV4cHJlc3Npb24gYE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZWAgd2lsbCBldmFsdWF0ZSB0byBlaXRoZXIgYE5SX0lTT0xBVEVEX0FOT05gIG9yIGBOUl9JU09MQVRFRF9GSUxFYCwgcHJvdmlkaW5nIGFuIGVhc3kgbWVjaGFuaXNtIHRvIGNsYXNzaWZ5IHRoZSBpc29sYXRlZCBmb2xpb3MuCgpOb3csIHRoZSBtYWluIGZvY3VzIGhlcmUgaXMgb24gdGhlIGBldmljdF9mb2xpb3NgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggc3VnZ2VzdHMgYSB0ZW1wb3JhcnkgbW9kaWZpY2F0aW9uIHRvIHRoZSBub2RlIHBhZ2Ugc3RhdGUgd2l0aGluIGBldmljdF9mb2xpb3NgLiBJdCYjMzk7cyBhZGRpbmcgdGhlIG51bWJlciBvZiBpc29sYXRlZCBmb2xpb3MsIGFuZCBpbW1lZGlhdGVseSBzdWJ0cmFjdGluZyB0aGVtIGJlZm9yZSByZXR1cm5pbmcuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbC4gSXQgaW5kaWNhdGVzIHRoYXQgYGV2aWN0X2ZvbGlvc2AgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWNjdXJhdGVseSByZWZsZWN0IHRoZSBzdGF0ZSBvZiBpc29sYXRlZCBmb2xpb3MsIHBhcnRpY3VsYXJseSBmb3IgY29uY3VycmVudCBhY2Nlc3MuIFRoZSBpZGVhIGlzIHRvIGVuc3VyZSB0aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0sIGxpa2UgYHRvb19tYW55X2lzb2xhdGVkYCBpbiBjb21wYWN0aW9uIG9yIHRoZSBWTSBzY2FubmVyLCBzZWUgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGlzb2xhdGVkIGZvbGlvcy4gVGhpcyB3b3VsZCBiZSB0byBwcmV2ZW50IGluYWNjdXJhdGUgZGVjaXNpb24gbWFraW5nIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLgoKSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBzY2VuYXJpb3MgdGhhdCB0cmlnZ2VyIHRoaXMgYmVoYXZpb3IuIElzIHRoZXJlIGEgc3BlY2lmaWMgc3lzdGVtIGNhbGwgb3IgYWN0aW9uIHRoYXQgaW5pdGlhdGVzIHRoaXMgaXNvbGF0aW9uIGFuZCBldmljdGlvbiBwcm9jZXNzPyBJdCBzZWVtcyBtZW1vcnkgcHJlc3N1cmUgaXMgdGhlIGRyaXZpbmcgZm9yY2UgaGVyZS4gUGVyaGFwcyBgbWFkdmlzZShNQURWX1BBR0VPVVQpYCBjb3VsZCBiZSBkaXJlY3RseSBpbnZvbHZlZCwgYXMgaXQgY2FuIHRyaWdnZXIgcmVjbGFpbS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGBtYWR2aXNlKE1BRFZfUEFHRU9VVClgIGFjdHVhbGx5IGNhbGxzIGBzaHJpbmtfZm9saW9fbGlzdGAgb3IgZGlyZWN0bHkgYGV2aWN0X2ZvbGlvc2AuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFEVl9QQUdFT1VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3ZhZGRyLmM9ODc5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3ZhX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vdmFkZHIuYy04OTItXHRjYXNlIERBTU9TX1BBR0VPVVQ6XG5tbS9kYW1vbi92YWRkci5jOjg5MzpcdFx0bWFkdl9hY3Rpb24gPSBNQURWX1BBR0VPVVQ7XG5tbS9kYW1vbi92YWRkci5jLTg5NC1cdFx0YnJlYWs7XG4tLVxubW0vbWFkdmlzZS5jPTEzMzg9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM1NS1cdFx0cmV0dXJuIG1hZHZpc2VfY29sZChtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYzoxMzU2Olx0Y2FzZSBNQURWX1BBR0VPVVQ6XG5tbS9tYWR2aXNlLmMtMTM1Ny1cdFx0cmV0dXJuIG1hZHZpc2VfcGFnZW91dChtYWR2X2JlaGF2aW9yKTtcbi0tXG5tbS9tYWR2aXNlLmM9MTUxOD1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTUzMS1cdGNhc2UgTUFEVl9DT0xEOlxubW0vbWFkdmlzZS5jOjE1MzI6XHRjYXNlIE1BRFZfUEFHRU9VVDpcbm1tL21hZHZpc2UuYy0xNTMzLVx0Y2FzZSBNQURWX1BPUFVMQVRFX1JFQUQ6XG4tLVxubW0vbWFkdmlzZS5jPTE1NjI9c3RhdGljIGJvb2wgcHJvY2Vzc19tYWR2aXNlX3JlbW90ZV92YWxpZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE1NjUtXHRjYXNlIE1BRFZfQ09MRDpcbm1tL21hZHZpc2UuYzoxNTY2Olx0Y2FzZSBNQURWX1BBR0VPVVQ6XG5tbS9tYWR2aXNlLmMtMTU2Ny1cdGNhc2UgTUFEVl9XSUxMTkVFRDpcbi0tXG5tbS9tYWR2aXNlLmM9MTc0Mj1zdGF0aWMgZW51bSBtYWR2aXNlX2xvY2tfbW9kZSBnZXRfbG9ja19tb2RlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNzUwLVx0Y2FzZSBNQURWX0NPTEQ6XG5tbS9tYWR2aXNlLmM6MTc1MTpcdGNhc2UgTUFEVl9QQUdFT1VUOlxubW0vbWFkdmlzZS5jLTE3NTItXHRjYXNlIE1BRFZfUE9QVUxBVEVfUkVBRDpcbi0tXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTk2Mi0gKlx0XHRlYXNpbHkgaWYgbWVtb3J5IHByZXNzdXJlIGhhcHBlbnMuXG5tbS9tYWR2aXNlLmM6MTk2MzogKiAgTUFEVl9QQUdFT1VUIC0gdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBleHBlY3RlZCB0byB1c2UgdGhpcyBtZW1vcnkgc29vbixcbm1tL21hZHZpc2UuYy0xOTY0LSAqXHRcdHBhZ2Ugb3V0IHRoZSBwYWdlcyBpbiB0aGlzIHJhbmdlIGltbWVkaWF0ZWx5LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI0NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbWFkdmlzZV9wYWdlb3V0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYG1hZHZpc2VfcGFnZW91dGAuIEl0JiMzOTtzIHByZXR0eSBmdW5kYW1lbnRhbCwgcmlnaHQ/IFdlJiMzOTtyZSBlc3NlbnRpYWxseSB0ZWxsaW5nIHRoZSBrZXJuZWwgdG8gdHJ5IGFuZCByZWNsYWltIG1lbW9yeSB0aGF0JiMzOTtzIGJlZW4gbWFwcGVkLCBidXQgaXNuJiMzOTt0IGFjdGl2ZWx5IGJlaW5nIHVzZWQuIFRoZSBpbXBsaWNhdGlvbnMgaGVyZSBhcmUgaHVnZSwgYW5kIEkmIzM5O20gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHRoZSB1c2UgY2FzZXMgaW4gbXkgaGVhZDogcG90ZW50aWFsIGZvciBpbXByb3ZlZCBtZW1vcnkgdXRpbGl6YXRpb24gaW4gYSBzeXN0ZW0gd2l0aCBtZW1vcnkgcHJlc3N1cmUsIG1pdGlnYXRpbmcgbWVtb3J5IGxlYWtzIG9yIGZyYWdtZW50YXRpb24sIGFuZCBvcHRpbWl6aW5nIHBlcmZvcm1hbmNlIHVuZGVyIHZhcmlvdXMgd29ya2xvYWRzLiBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgb2YgY291cnNlLiBJcyBpdCBsZXZlcmFnaW5nIGRpcnR5IHBhZ2UgdHJhY2tpbmcgZWZmZWN0aXZlbHk/IFdoYXQmIzM5O3MgdGhlIGdyYW51bGFyaXR5IG9mIGl0cyBhY3Rpb25zIC0gcGFnZSwgb3IgcmFuZ2VzPyBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBhY3Q7IGBtYWR2aXNlYCBjYWxscyBhcmVuJiMzOTt0IGZyZWUuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gYmVuY2htYXJrIHRoaXMgYW5kIGNvbnNpZGVyIHRoZSBjb3N0L2JlbmVmaXQgdHJhZGUtb2Zmcy4gV2hhdCYjMzk7cyB0aGUgYmVzdCB3YXkgdG8gbGV2ZXJhZ2UgdGhpcyBBUEk/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfcGFnZW91dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9NTk1PXN0YXRpYyBsb25nIG1hZHZpc2VfY29sZChzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtNjEwLVxubW0vbWFkdmlzZS5jOjYxMTpzdGF0aWMgdm9pZCBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxubW0vbWFkdmlzZS5jLTYxMi1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWFkdmlzZS5jLTYyNS1cbm1tL21hZHZpc2UuYzo2MjY6c3RhdGljIGxvbmcgbWFkdmlzZV9wYWdlb3V0KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTYyNy17XG4tLVxubW0vbWFkdmlzZS5jLTY0NS1cdHRsYl9nYXRoZXJfbW11KFx1MDAyNnRsYiwgbWFkdl9iZWhhdmlvci1cdTAwM2VtbSk7XG5tbS9tYWR2aXNlLmM6NjQ2Olx0bWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2UoXHUwMDI2dGxiLCB2bWEsIFx1MDAyNm1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2UpO1xubW0vbWFkdmlzZS5jLTY0Ny1cdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4tLVxubW0vbWFkdmlzZS5jPTEzMzg9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM1Ni1cdGNhc2UgTUFEVl9QQUdFT1VUOlxubW0vbWFkdmlzZS5jOjEzNTc6XHRcdHJldHVybiBtYWR2aXNlX3BhZ2VvdXQobWFkdl9iZWhhdmlvcik7XG5tbS9tYWR2aXNlLmMtMTM1OC1cdGNhc2UgTUFEVl9GUkVFOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg5MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgbWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2VgKioKClJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuICYjMzQ7bWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2UmIzM0Oy4uLiBUaGF0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgc3BlY2lmaWMgYXJlYSBvZiBpbnRlcmVzdDogbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBob3cgd2UmIzM5O3JlIGluZmx1ZW5jaW5nIHRoZSBwYWdlLW91dCBiZWhhdmlvciBvZiB0aGUga2VybmVsLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgZ2VuZXJpYyBgbWFkdmlzZWAgY2FsbDsgdGhlICYjMzQ7cGFnZW91dCYjMzQ7IGFzcGVjdCBpcyBjcml0aWNhbC4gU28sIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgdXNlIGNhc2VzLiBJcyB0aGlzIHJlbGF0ZWQgdG8gd29ya2xvYWQgaXNvbGF0aW9uPyBQZXJmb3JtYW5jZSB0dW5pbmcgZm9yIG1lbW9yeS1pbnRlbnNpdmUgYXBwbGljYXRpb25zPyBPciBwZXJoYXBzIHdlJiMzOTtyZSBleHBlcmltZW50aW5nIHdpdGggbm92ZWwgbWVtb3J5IHJlY2xhbWF0aW9uIHN0cmF0ZWdpZXM/CgpHaXZlbiB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpbnNpZ2h0cyBpbnRvIGEgbWVjaGFuaXNtIHdoZXJlIHdlIGNhbiAqc3BlY2lmeSBhIHJhbmdlKiBvZiBwYWdlcyBmb3IgdGhlIGtlcm5lbCB0byBjb25zaWRlciBmb3IgcGFnaW5nIG91dC4gVGhhdCBsZXZlbCBvZiBjb250cm9sIGlzIGludGVyZXN0aW5nLiBJdCBjb3VsZCBiZSB1c2VkIHRvIHByb2FjdGl2ZWx5IHB1c2ggaW5hY3RpdmUgcGFnZXMgdG8gZGlzaywgZnJlZWluZyB1cCBwaHlzaWNhbCBSQU0gZm9yIG1vcmUgY3JpdGljYWwgZGF0YS4gQ29udmVyc2VseSwgaXQgbWlnaHQgYmUgdXNlZCB0byAqcHJldmVudCogY2VydGFpbiBwYWdlcyBmcm9tIGJlaW5nIGV2aWN0ZWQsIHBlcmhhcHMgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgZHVyaW5nIGEgY3JpdGljYWwgcGhhc2UuCgpNeSBtaW5kIGlzIGFscmVhZHkgcmFjaW5nIHdpdGggcXVlc3Rpb25zOiBXaGF0JiMzOTtzIHRoZSBncmFudWxhcml0eSBvZiBjb250cm9sPyBJcyBpdCBwYWdlLWFsaWduZWQ/IEFyZSB0aGVyZSBhbnkgcmVzdHJpY3Rpb25zIG9uIHRoZSBtZW1vcnkgcmVnaW9ucyB3ZSBjYW4gaW5mbHVlbmNlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBOVU1BIHN5c3RlbXMsIGFuZCBob3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IG1lY2hhbmlzbXMsIGxpa2UgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBvciBLU00/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBgTUFEVl9QQUdFT1VUYCBhbmQgb3RoZXIgYG1hZHZpc2VgIGZsYWdzLCBidXQgdGhlIGBfcGFnZV9yYW5nZWAgcGFydCBpbmRpY2F0ZXMgdGhpcyBpcyBzb21ldGhpbmcgc3BlY2lhbGl6ZWQuIExldCYjMzk7cyBzZWUgaG93IGl0IG9wZXJhdGVzLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlLCB0cmFjZSBpdHMgdXNhZ2UgcGF0dGVybnMgd2l0aGluIHRoZSBrZXJuZWwsIGFuZCB0aGVuIHNlZSBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIGJlbmNobWFya3Mgb3IgZGlzY3Vzc2lvbnMgYWJvdXQgaXQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBvdXQgdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz01OTU9c3RhdGljIGxvbmcgbWFkdmlzZV9jb2xkKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy02MTAtXG5tbS9tYWR2aXNlLmM6NjExOnN0YXRpYyB2b2lkIG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG5tbS9tYWR2aXNlLmMtNjEyLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tYWR2aXNlLmM9NjI2PXN0YXRpYyBsb25nIG1hZHZpc2VfcGFnZW91dChzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtNjQ1LVx0dGxiX2dhdGhlcl9tbXUoXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yLVx1MDAzZW1tKTtcbm1tL21hZHZpc2UuYzo2NDY6XHRtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZShcdTAwMjZ0bGIsIHZtYSwgXHUwMDI2bWFkdl9iZWhhdmlvci1cdTAwM2VyYW5nZSk7XG5tbS9tYWR2aXNlLmMtNjQ3LVx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1OTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpdmluZyBpbnRvIGBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBmb3IgYG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIGFuZCB3aGF0IGl0cyBzcGVjaWZpYyBwdXJwb3NlIGlzLiBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggYG1hZHZpc2VgIGluIGdlbmVyYWwsIHRoZSBoaW50cyBpdCBwcm92aWRlcyB0byB0aGUga2VybmVsIGFib3V0IG1lbW9yeSB1c2FnZSwgYnV0IHRoaXMgcmFuZ2Utc3BlY2lmaWMgdmVyc2lvbiBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGRlc2lnbmVkIGZvciBtb3JlIHRhcmdldGVkIHBhZ2Utb3V0IG9wZXJhdGlvbnMuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IHdoZXJlIHRoaXMgd291bGQgYmUgKmJldHRlciogdGhhbiBhIG1vcmUgZ2VuZXJhbCBgTUFEVl9QQUdFT1VUYCBhcHBsaWVkIHRvIHRoZSB3aG9sZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBwcm9jZXNzIG9yIGEgc3RhbmRhcmQgc3lzdGVtLXdpZGUgcGFnZS1vdXQgdHJpZ2dlcj8gQW0gSSBsb29raW5nIGF0IHNpdHVhdGlvbnMgd2hlcmUgYW4gYXBwbGljYXRpb24gaGFzIGEgZGV0YWlsZWQga25vd2xlZGdlIG9mIHRoZSBtZW1vcnkgaXQgd2FudHMgdG8gZXZpY3QgYW5kIGNhbiBzaWduYWwgdGhlIGtlcm5lbCB3aXRoIGEgZmluZXIgbGV2ZWwgb2YgZ3JhbnVsYXJpdHk/IElzIHRoaXMgc29tZXRoaW5nIHRoYXQmIzM5O3Mgb25seSByZWxldmFudCBpbiBzcGVjaWZpYyB3b3JrbG9hZHM/CgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBEb2VzIGl0IGFsbG93IGZvciBtb3JlIGVmZmljaWVudCBwYWdlIHJlcGxhY2VtZW50IGFsZ29yaXRobXM/IERvZXMgaXQgZ2l2ZSB0aGUgdXNlciBtb3JlIGNvbnRyb2wgb3ZlciB0aGUgc2VsZWN0aW9uIG9mIHRoZSBwYWdlcywgdGh1cyBhdm9pZGluZyB1bm5lY2Vzc2FyeSBkaXNrIEkvTz8gT3IgZG9lcyB0aGUgb3ZlcmhlYWQgb2YgY2FsbGluZyB0aGUgZnVuY3Rpb24gYW5kIG1hbmFnaW5nIHRoZSByYW5nZXMgZGltaW5pc2ggdGhlIGJlbmVmaXQgaWYgaXQmIzM5O3Mgbm90IGhhbmRsZWQgd2VsbD8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgZm9yIGRlYWRsb2NrcyBvciBjb250ZW50aW9uLCBlc3BlY2lhbGx5IGlmIHRoZSBwYWdlcyBhcmUgaGVhdmlseSB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBoYXBwZW5zIGlmIHRoZSBwcm9jZXNzIGNhbGxpbmcgaXQgaXMgbXVsdGktdGhyZWFkZWQuCgpJJiMzOTttIGFsc28gbG9va2luZyBmb3IgYW55IHN1YnRsZXRpZXMgaW4gdGhlIGFyZ3VtZW50IGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGhvdyBkb2VzIGl0IGRlYWwgd2l0aCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBhZGRyZXNzZXMsIGFuZCB3aGF0IGFyZSB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cz8gQXJlIHRoZXJlIHNwZWNpZmljIGVycm9yIGNhc2VzIHRvIGNvbnNpZGVyLCBhbmQgaG93IGFyZSB0aG9zZSBoYW5kbGVkIGJ5IHRoZSBrZXJuZWw/CgpJbiBzdW1tYXJ5LCBteSBtYWluIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24mIzM5O3MgY2FwYWJpbGl0aWVzLCBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgYW5kIHRoZSBzY2VuYXJpb3Mgd2hlcmUgaXQgc2hvdWxkIChvciBzaG91bGRuJiMzOTt0KSBiZSBlbXBsb3llZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYxMTpcdHN0YXRpYyB2b2lkIG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gNjEyOlx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDYxMzpcdFx0XHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UpXG4gNjE0Olx0e1xuIDYxNTpcdFx0c3RydWN0IG1hZHZpc2Vfd2Fsa19wcml2YXRlIHdhbGtfcHJpdmF0ZSA9IHtcbiA2MTY6XHRcdFx0LnBhZ2VvdXQgPSB0cnVlLFxuIDYxNzpcdFx0XHQudGxiID0gdGxiLFxuIDYxODpcdFx0fTtcbiA2MTk6XHRcbiA2MjA6XHRcdHRsYl9zdGFydF92bWEodGxiLCB2bWEpO1xuIDYyMTpcdFx0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsIFx1MDAyNmNvbGRfd2Fsa19vcHMsXG4gNjIyOlx0XHRcdFx0ICAgIFx1MDAyNndhbGtfcHJpdmF0ZSk7XG4gNjIzOlx0XHR0bGJfZW5kX3ZtYSh0bGIsIHZtYSk7XG4gNjI0Olx0fVxuIDYyNTpcdFxuIDYyNjpcdHN0YXRpYyBsb25nIG1hZHZpc2VfcGFnZW91dChzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbiA2Mjc6XHR7XG4gNjI4Olx0XHRzdHJ1Y3QgbW11X2dhdGhlciB0bGI7XG4gNjI5Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1hZHZfYmVoYXZpb3ItXHUwMDNldm1hO1xuIDYzMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQxNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBgY29sZF93YWxrX29wc2Agd2l0aGluIGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHdhbGtfcGFnZV9yYW5nZV92bWFgLCBhbmQgSSBzZWUgaXQmIzM5O3MgdXNpbmcgYGNvbGRfd2Fsa19vcHNgLiAgVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBteSBleHBlcnQgYnJhaW4gdG8gemVybyBpbiBvbiB3aGF0IHRoYXQgbWVhbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgb3BlcmF0aW9uIHNldC4gSXMgdGhpcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50PyBQYWdlIHRhYmxlIG1hbmlwdWxhdGlvbj8gV2hhdCBkZWZpbmVzICYjMzQ7Y29sZCYjMzQ7IGluIHRoaXMgY29udGV4dD8gSXMgdGhpcyBhc3NvY2lhdGVkIHdpdGggYW4gTFJVIHN0cmF0ZWd5PyBJcyB0aGlzIGFib3V0IHRoZSBpbml0aWFsIG1hcHBpbmcgb2YgYSBWTUEgdmVyc3VzIGEgc3Vic2VxdWVudCBhY2Nlc3M/ICBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBjb2xkX3dhbGtfb3BzYCBhbmQgZmlndXJlIG91dCBob3cgaXQgZGlmZmVycyBmcm9tIG90aGVyIHdhbGsgb3BlcmF0aW9ucywgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3IgcGVyZm9ybWFuY2UsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIG9yIHdvcmtsb2FkIHNjZW5hcmlvcy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhlc2Ugd2Fsa2luZyBvcGVyYXRpb25zIGlzIGNydWNpYWwgZm9yIG9wdGltYWwgbWVtb3J5IHBlcmZvcm1hbmNlLCBzbyBsZXQmIzM5O3Mgc3RhcnQgZGlzc2VjdGluZyBgY29sZF93YWxrX29wc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGRfd2Fsa19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTM1Mz1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy01NjctXG5tbS9tYWR2aXNlLmM6NTY4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcbm1tL21hZHZpc2UuYy01NjktXHQucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlLFxuLS1cbm1tL21hZHZpc2UuYz01NzM9c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xkX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tYWR2aXNlLmMtNTg0LVx0dGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSk7XG5tbS9tYWR2aXNlLmM6NTg1Olx0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsIFx1MDAyNmNvbGRfd2Fsa19vcHMsXG5tbS9tYWR2aXNlLmMtNTg2LVx0XHRcdFx1MDAyNndhbGtfcHJpdmF0ZSk7XG4tLVxubW0vbWFkdmlzZS5jPTYxMT1zdGF0aWMgdm9pZCBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21hZHZpc2UuYy02MjAtXHR0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKTtcbm1tL21hZHZpc2UuYzo2MjE6XHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCwgXHUwMDI2Y29sZF93YWxrX29wcyxcbm1tL21hZHZpc2UuYy02MjItXHRcdFx0ICAgIFx1MDAyNndhbGtfcHJpdmF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDc3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGlzIGZ1bmN0aW9uOiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYC4gSSBrbm93IEkmIzM5O3ZlIGVuY291bnRlcmVkIHRoaXMgYmVmb3JlOyBpdCBkZWFscyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB1c2VyIGhpbnRzIGFib3V0IHBhZ2UgdXNhZ2UsIHBhcnRpY3VsYXJseSBhcm91bmQgY29sZCBvciBwYWdlLW91dCBiZWhhdmlvcnMuIExldCYjMzk7cyBzZWUuLi4gdGhlIG5hbWUgaXRzZWxmIGdpdmVzIGF3YXkgYSBiaXQgb2YgaXRzIHB1cnBvc2UuIEl0JiMzOTtzIGRlYWxpbmcgd2l0aCBhIHJhbmdlIG9mIFBURXMgKHBhZ2UgdGFibGUgZW50cmllcyksIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHdvcmtpbmcgYXQgYSBmYWlybHkgbG93IGxldmVsLCBtYW5hZ2luZyB0aGUgbWFwcGluZyBvZiB2aXJ0dWFsIG1lbW9yeSB0byBwaHlzaWNhbCBtZW1vcnkuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdGFraW5nIGBtYWR2aXNlYCBoaW50cyDigJMgbGlrZWx5IGBNQURWX0NPTERgIG9yIHBvdGVudGlhbGx5IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBwYWdlLW91dCBzdWJzeXN0ZW0sIGp1ZGdpbmcgYnkgdGhlIG5hbWUg4oCTIGFuZCBhcHBseWluZyB0aGVtIHRvIHRob3NlIGVudHJpZXMuIFRoaXMgbGlrZWx5IGludm9sdmVzIHRoaW5ncyBsaWtlIG1hcmtpbmcgcGFnZXMgYXMgbGVzcy1yZWNlbnRseSB1c2VkLCBwb3RlbnRpYWxseSB0cmlnZ2VyaW5nIHBhZ2Utb3V0IGFjdGl2aXRpZXMgdG8gZnJlZSB1cCBwaHlzaWNhbCBSQU0sIG9yIGFsdGVyaW5nIHRoZSBwYWdlJiMzOTtzIGNhY2hpbmcgYmVoYXZpb3IuIFRoZSBjaGFsbGVuZ2UgaGVyZSBwcm9iYWJseSBsaWVzIGluIHRoZSBzeW5jaHJvbml6YXRpb24gcmVxdWlyZWQgdG8gbW9kaWZ5IHRoZXNlIFBURXMgc2FmZWx5LCBoYW5kbGluZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGggb3RoZXIgcHJvY2Vzc2VzIGFjY2Vzc2luZyB0aGUgc2FtZSBtZW1vcnkgcmFuZ2UsIGFuZCBlbnN1cmluZyB0aGUgY2hhbmdlcyBhcmUgY29oZXJlbnQgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgdGhlIGV4YWN0IG1lY2hhbmljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0zNDM9c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9mb2xpb19wdGVfYmF0Y2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9tYWR2aXNlLmMtMzUyLVxubW0vbWFkdmlzZS5jOjM1MzpzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxubW0vbWFkdmlzZS5jLTM1NC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vbWFkdmlzZS5jPTU2OD1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGNvbGRfd2Fsa19vcHMgPSB7XG5tbS9tYWR2aXNlLmM6NTY5Olx0LnBtZF9lbnRyeSA9IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSxcbm1tL21hZHZpc2UuYy01NzAtXHQud2Fsa19sb2NrID0gUEdXQUxLX1JETE9DSyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MzgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGZsb3cgaGVyZS4uLgoKKipEZWNvbnN0cnVjdGluZyBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIHdvcmtzIGludGVybmFsbHksIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBldmljdGluZyBwYWdlcy4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGl0IGRpcmVjdGx5IGNhbGwgYGV2aWN0X2ZvbGlvc2A/IFRoYXQgZG9lc24mIzM5O3Qgc2VlbSByaWdodC4gTG9va2luZyBhdCB0aGUgY29kZSwgYGV2aWN0X2ZvbGlvc2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBub3QgYSBnbG9iYWwgZnVuY3Rpb24sIGFuZCBJJiMzOTtkIGV4cGVjdCB0aGF0IGtpbmQgb2YgdXRpbGl0eSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZnJvbSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdCYjMzk7cyBhIGRpcmVjdCBjYWxsLgoKU28sIGlmIGl0JiMzOTtzIG5vdCBgZXZpY3RfZm9saW9zYCwgd2hhdCYjMzk7cyBhY3R1YWxseSBkb2luZyB0aGUgd29yaz8gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgY2FsbHMgYSBoaWdoZXItbGV2ZWwgcmVjbGFpbSBmdW5jdGlvbiwgc29tZXRoaW5nIGxpa2UgYHJlY2xhaW1fcGFnZXNgIG9yIGFub3RoZXIgc2ltaWxhciBmdW5jdGlvbiB0aGF0IGRlYWxzIHdpdGggcGFnZSBldmljdGlvbi4gSXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwYXRoLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY2FsbCBzdGFjayB0byBjb25maXJtIHRoYXQsIGJ1dCBteSBodW5jaCBpcyB0aGF0IGByZWNsYWltX3BhZ2VzYCBvciBhbiBlcXVpdmFsZW50IGlzIGhhbmRsaW5nIHRoZSBhY3R1YWwgcGFnZSBldmljdGlvbiB1bmRlciB0aGUgaG9vZC4gSSBzaG91bGQgYmUgYWJsZSB0byBjb25maXJtIHdpdGggYSBiaXQgbW9yZSBjb2RlIGRpdmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjbGFpbV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9wYWRkci5jPTIyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yNzEtXHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XG5tbS9kYW1vbi9wYWRkci5jOjI3MjpcdGFwcGxpZWQgPSByZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xubW0vZGFtb24vcGFkZHIuYy0yNzMtXHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS9pbnRlcm5hbC5oPTEyMDU9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgIF9fbXVzdF9jaGVjayB2bV9tbWFwX3Bnb2ZmKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsXG4tLVxubW0vaW50ZXJuYWwuaC0xMjA4LVxubW0vaW50ZXJuYWwuaDoxMjA5OnVuc2lnbmVkIGxvbmcgcmVjbGFpbV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcbm1tL2ludGVybmFsLmgtMTIxMC11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbWFkdmlzZS5jPTM1Mz1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy00NDItXHRcdGlmIChwYWdlb3V0KVxubW0vbWFkdmlzZS5jOjQ0MzpcdFx0XHRyZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xubW0vbWFkdmlzZS5jLTQ0NC1cdFx0cmV0dXJuIDA7XG4tLVxubW0vbWFkdmlzZS5jLTU2MS1cdGlmIChwYWdlb3V0KVxubW0vbWFkdmlzZS5jOjU2MjpcdFx0cmVjbGFpbV9wYWdlcyhcdTAwMjZmb2xpb19saXN0KTtcbm1tL21hZHZpc2UuYy01NjMtXHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS92bXNjYW4uYz0yMTUwPXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjbGFpbV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMjE2OS1cdH1cbm1tL3Ztc2Nhbi5jOjIxNzA6XHR0cmFjZV9tbV92bXNjYW5fcmVjbGFpbV9wYWdlcyhwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYy5ucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQpO1xubW0vdm1zY2FuLmMtMjE3MS1cbi0tXG5tbS92bXNjYW4uYy0yMTc0LVxubW0vdm1zY2FuLmM6MjE3NTp1bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcbm1tL3Ztc2Nhbi5jLTIxNzYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU4NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmRlcnN0YW5kaW5nIFBhZ2UgUmVjbGFpbSBhbmQgTUdMUlUgSW50ZXJhY3Rpb24qKgoKT2theSwgc28gbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYWdlIHJlY2xhaW0gcHJvY2Vzcy4gSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGNvZGUgcGF0aCwgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZzogYHJlY2xhaW1fcGFnZXNgIGlzIHRoZSBlbnRyeSBwb2ludCwgd2hpY2ggbGVhZHMgdG8gYHJlY2xhaW1fZm9saW9fbGlzdGAuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBgcmVjbGFpbV9mb2xpb19saXN0YCBldmVudHVhbGx5IGZ1bm5lbCBpbnRvIGBldmljdF9mb2xpb3NgIGZyb20gTUdMUlU/IE5vLCB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZS4gYGV2aWN0X2ZvbGlvc2AgaXMgcGFydCBvZiBNR0xSVSBhbmQgaXMgYWN0dWFsbHkgY2FsbGVkIHRocm91Z2ggYHNocmlua19scnV2ZWNgLiBTbywgYHJlY2xhaW1fcGFnZXNgIGJ5cGFzc2VzIHRoZSBNR0xSVSBwYXRoIGFuZCBnb2VzIGRpcmVjdGx5IHRvIHJlY2xhaW1pbmcgdGhlIGZvbGlvIGxpc3QuCgpUaGF0IGNsYXJpZmllcyBhIGNydWNpYWwgcG9pbnQ6IGBtYWR2aXNlKE1BRFZfUEFHRU9VVClgIGRvZXNuJiMzOTt0IHRyaWdnZXIgYGV2aWN0X2ZvbGlvc2AgZGlyZWN0bHkuIFRoYXQmIzM5O3MgYSBrZXkgdGFrZWF3YXkuCgpJZiB0aGUgZ29hbCBpcyB0byB0cmlnZ2VyIGBldmljdF9mb2xpb3NgLCB3ZSAqbXVzdCogaGl0IGBzaHJpbmtfbHJ1dmVjYC4gVGhhdCYjMzk7cyBkb25lIHZpYSBgdHJ5X3RvX2ZyZWVfcGFnZXNgIG9yIHRoZSBrZXJuZWwmIzM5O3MgYGtzd2FwZGAgcHJvY2Vzcy4gU28gSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIHR3byBmdW5jdGlvbnMsIGFsb25nIHdpdGggYHNocmlua19hbGxfbWVtb3J5YCwgd2hlbiBsb29raW5nIGZvciB0cmlnZ2Vycy4gRm9yZ2V0IGFib3V0IGBtYWR2aXNlKE1BRFZfUEFHRU9VVClgIGZvciB0aGlzIHBhcnRpY3VsYXIgbmVlZC4KCkl0IHNlZW1zIHdlIGNhbiBkaXJlY3RseSBjYWxsIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYC4gV2FpdCwgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBjYWxsZWQgYnkgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLiBIbW0uIElzIHRoZXJlIGFueSBzeXN0ZW0gY2FsbCB0aGF0IGRpcmVjdGx5IHRyaWdnZXJzIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYD8gSSB0aGluayB0aGVyZSBpcywgaWYgSSByZWNhbGwgY29ycmVjdGx5Li4uIFllcywgdXNpbmcgY2dyb3VwIHYyLCB3cml0aW5nIHRvIHRoZSBgbWVtb3J5LnJlY2xhaW1gIGZpbGUgdHJpZ2dlcnMgdGhhdCBmdW5jdGlvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIGBtZW1vcnkucmVjbGFpbWAgYW5kIHNlZSB3aGF0IGl0IGRvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD03NT11bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuLS1cbm1tL2ludGVybmFsLmgtODUtXG5tbS9pbnRlcm5hbC5oOjg2OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9pbnRlcm5hbC5oLTg3LVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xNzcyPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTgxNi1cbm1tL21lbWNvbnRyb2wtdjEuYzoxODE3Olx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG5tbS9tZW1jb250cm9sLXYxLmMtMTgxOC1cdFx0XHRcdG1lbXN3ID8gMCA6IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE4MzU9c3RhdGljIGludCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg1Mi1cbm1tL21lbWNvbnRyb2wtdjEuYzoxODUzOlx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG5tbS9tZW1jb250cm9sLXYxLmMtMTg1NC1cdFx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlY2xhaW1faGlnaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTIzNDgtXHRcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xubW0vbWVtY29udHJvbC5jOjIzNDk6XHRcdG5yX3JlY2xhaW1lZCAmIzQzOz0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgbnJfcGFnZXMsXG5tbS9tZW1jb250cm9sLmMtMjM1MC1cdFx0XHRcdFx0XHRcdGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNjAwPXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjU5LVx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG5tbS9tZW1jb250cm9sLmM6MjY2MDpcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxubW0vbWVtY29udHJvbC5jLTI2NjEtXHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00Nzc4PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5tbS9tZW1jb250cm9sLmMtNDgxNi1cbm1tL21lbWNvbnRyb2wuYzo0ODE3Olx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIGhpZ2gsXG5tbS9tZW1jb250cm9sLmMtNDgxOC1cdFx0XHRcdFx0R0ZQX0tFUk5FTCwgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ4MzQ9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ4NzItXHRcdGlmIChucl9yZWNsYWltcykge1xubW0vbWVtY29udHJvbC5jOjQ4NzM6XHRcdFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIG1heCxcbm1tL21lbWNvbnRyb2wuYy00ODc0LVx0XHRcdFx0XHRHRlBfS0VSTkVMLCBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcbi0tXG5tbS92bXNjYW4uYz02NzUzPXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjc5Mi1cbm1tL3Ztc2Nhbi5jOjY3OTM6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTY3OTQtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vdm1zY2FuLmMtNjgzMy0jZWxzZVxubW0vdm1zY2FuLmM6NjgzNDp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjgzNS1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYz03ODk2PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbi0tXG5tbS92bXNjYW4uYy03OTY3LVx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFO1xubW0vdm1zY2FuLmM6Nzk2ODpcdFx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxubW0vdm1zY2FuLmMtNzk2OS1cdFx0XHRcdFx0XHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTAwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgUmVjbGFtYXRpb24gU3RyYXRlZ2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRoaXMgbWVtb3J5IHJlY2xhbWF0aW9uIGlzIHdvcmtpbmcuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBub3RpY2luZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIHdoaWNoIGlzIGNhbGxlZCBieSBgbWVtb3J5LnJlY2xhaW1gIHdyaXRlcywgYW5kIGFsc28gYG1lbW9yeV9oaWdoX3dyaXRlYCBhbmQgYG1lbW9yeV9tYXhfd3JpdGVgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSB0aGluayBmb2N1c2luZyBvbiBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgYSBzb2xpZCBtb3ZlLCBhbmQgYHRyeV90b19mcmVlX3BhZ2VzYCBjYWxsZWQgYnkgdGhlIHBhZ2UgYWxsb2NhdG9yIGlzIGFub3RoZXIga2V5IHBvaW50LgoKUmlnaHQsIHNvIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZnVuY3Rpb24uIEkgcmVtZW1iZXIgc2VlaW5nIHRoaXMgZnVuY3Rpb24gaW4gYG1tL3Ztc2Nhbi5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBiZWdpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oPTcwNT1leHRlcm4gdm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbik7XG5tbS9pbnRlcm5hbC5oOjcwNjppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS9pbnRlcm5hbC5oLTcwNy1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MDA3PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MDEyLVxubW0vbWVtY29udHJvbC5jOjUwMTM6XHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGJ1ZiwgbWVtY2csIE5VTEwpO1xubW0vbWVtY29udHJvbC5jLTUwMTQtXHRpZiAocmV0KVxuLS1cbm1tL3Ztc2Nhbi5jPTc4OTA9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc4OTUtXG5tbS92bXNjYW4uYzo3ODk2OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL3Ztc2Nhbi5jLTc4OTctXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jPTgwNDk9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxubW0vdm1zY2FuLmMtODA1NC1cbm1tL3Ztc2Nhbi5jOjgwNTU6XHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XG5tbS92bXNjYW4uYy04MDU2LVx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIxMQoJCQkJCQkJb3V0cHV0OiAxMzkKCQkJCQkJCXRob3VnaHRzOiA4NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNR0xSVSBFdmljdGlvbiBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBgZXZpY3RfZm9saW9zYCBmdW5jdGlvbiwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aCB3aXRoaW4gYENPTkZJR19MUlVfR0VOYC4gIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBrZXJuZWwgbmVlZHMgdG8gZnJlZSB1cCBtZW1vcnksIHRyaWdnZXJlZCBlaXRoZXIgcmVhY3RpdmVseSBkdWUgdG8gbWVtb3J5IHByZXNzdXJlLCBvciBwcm9hY3RpdmVseSwgbGlrZSB3aGVuIGEgY2dyb3VwJiMzOTtzIGBtZW1vcnkucmVjbGFpbWAgaXMgdXNlZCwgb3IgZXZlbiBkdXJpbmcgaGliZXJuYXRpb24gKHRob3VnaCB0aGF0JiMzOTtzIGhhbmRsZWQgZGlmZmVyZW50bHksIHZpYSBgc2hyaW5rX2FsbF9tZW1vcnlgKS4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBmaXhpbmcgaG93IGlzb2xhdGVkIGZvbGlvcyBhcmUgYWNjb3VudGVkIGZvciwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB0aGUgbm9kZSBwYWdlIHN0YXRlIChOUl9JU09MQVRFRF9BTk9OL05SX0lTT0xBVEVEX0ZJTEUpLiAgTG9va2luZyBhdCB0aGUgY29kZSBkaWZmIGFnYWluLCB5ZXMsIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgbG9naWMgcmVsYXRlZCB0byBgaXNvbGF0ZWRfb3JpZ2AgYW5kIHRoZSBub2RlIHBhZ2Ugc3RhdGUgdXBkYXRlcy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0IGltcGFjdHMgaG93IG1lbW9yeSBpcyByZWNsYWltZWQgYW5kIHRyYWNrZWQuICBJdCBjb3VsZCBpbnRyb2R1Y2Ugc29tZSB0cmlja3kgZWRnZSBjYXNlcywgYW5kIGl04oCZcyBzb21ldGhpbmcgd2Ugc2hvdWxkIGFic29sdXRlbHkgZnV6ei4KCkluaXRpYWxseSwgSSB0aG91Z2h0IGFib3V0IGluY2x1ZGluZyBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGFzIGEgZm9jdXMgc3ltYm9sIGJlY2F1c2UgaXTigJlzIGEgaG90IHBhdGgsIGJ1dCBmb2N1c2luZyBvbiBwcm9hY3RpdmUgcmVjbGFpbSBwYXRocyB2aWEgY2dyb3VwIG1lbW9yeSByZWNsYWltLCB1c2luZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBzZWVtcyBsaWtlIGEgc21hcnRlciBtb3ZlLiBJdCBoaXRzIHRoZSBzYW1lIGNvZGUgcGF0aCB3aXRoaW4gYGV2aWN0X2ZvbGlvc2AsIGJ1dCB0YXJnZXRzIGEgcG90ZW50aWFsbHkgbGVzcy1mcmVxdWVudGx5LXRlc3RlZCBhcmVhIGFuZCBkaXJlY3RseSByZWxhdGVkIHRvIGEgdXNlciBzcGFjZSB0cmlnZ2VyLiBBbmQsIHllcywgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFuIGV4Y2VsbGVudCBlbnRyeSBwb2ludCBhcyBpdCYjMzk7cyBkaXJlY3RseSB0cmlnZ2VyZWQgYnkgdXNlcnNwYWNlIGludGVyYWN0aW9uIHdpdGggc3lzZnMvY2dyb3VwZnMuCgpJJiMzOTt2ZSBhbHNvIGNoZWNrZWQgdGhlIGBMUlVfR0VOYCBjb25maWd1cmF0aW9uIGFuZCBpdHMgZGVwZW5kZW5jaWVzLCB3aGljaCBhcHBlYXIgdG8gYmUgc3RhbmRhcmQgb24geDg2XzY0IHN5c3RlbXMuICBHb29kLgoKU28sIGhlcmUmIzM5O3MgdGhlIGZ1enppbmcgc2V0dXA6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIGJlY2F1c2UgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBNR0xSVSBldmljdGlvbiBwYXRoLCBjcml0aWNhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgYWNjb3VudGluZyBmb3IgaXNvbGF0ZWQgZm9saW9zIHdpdGhpbiBgZXZpY3RfZm9saW9zYCwgYSBjb3JlIHBhcnQgb2YgbWVtb3J5IHJlY2xhaW0sIHNwZWNpZmljYWxseSB0aGUgbm9kZSBwYWdlIHN0YXRlLCBtYWtpbmcgaXQgYSBmdW5jdGlvbmFsIGNoYW5nZS4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIC0gdG8gdGFyZ2V0IHRoZSBwcm9hY3RpdmUgcmVjbGFpbSBwYXRoLgoqICAgKipFbmFibGVDb25maWdzOioqIGBMUlVfR0VOYCwgYExSVV9HRU5fRU5BQkxFRGAgLSB0aGVzZSBjb25maWdzIGFyZSBlc3NlbnRpYWwgZm9yIHJ1bm5pbmcgdGhlIE1HTFJVIGNvZGUgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBldmljdGlvbiBsb2dpYyB0byBjb3JyZWN0bHkgYWNjb3VudCBmb3IgaXNvbGF0ZWQgZm9saW9zIGluIHRoZSBub2RlIHBhZ2Ugc3RhdGUgKE5SX0lTT0xBVEVEX0FOT04gLyBOUl9JU09MQVRFRF9GSUxFKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aCB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgbWVtb3J5IHByZXNzdXJlIG9yIHByb2FjdGl2ZSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGV2aWN0aW9uIGxvZ2ljIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBpc29sYXRlZCBmb2xpb3MgaW4gdGhlIG5vZGUgcGFnZSBzdGF0ZSAoTlJfSVNPTEFURURfQU5PTiAvIE5SX0lTT0xBVEVEX0ZJTEUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRoIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBtZW1vcnkgcHJlc3N1cmUgb3IgcHJvYWN0aXZlIHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGV2aWN0X2ZvbGlvc2AgaW4gYG1tL3Ztc2Nhbi5jYCB0byB0ZW1wb3JhcmlseSB1cGRhdGUgdGhlIG5vZGUgcGFnZSBzdGF0ZSAoYE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZWApIHdpdGggdGhlIG51bWJlciBvZiBpc29sYXRlZCBmb2xpb3MgZHVyaW5nIGV2aWN0aW9uLCBhbmQgdGhlbiByZXZlcnQgaXQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgKGBpc29sYXRlZGAsIGB0eXBlYCkgYXJlIGxvY2FsIGludGVnZXJzLiBgaXNvbGF0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBpZiBgaXNvbGF0ZV9mb2xpb3NgIHNldHMgaXQgdG8gYSBub24temVybyB2YWx1ZSwgaXQgYWxzbyBpbml0aWFsaXplcyBgdHlwZWAuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY2FsY3VsYXRpb25zLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHBhZ2Ugc3RhdGUgYWNjb3VudGluZywgd2hpY2ggaXMgbm90IHNvbWV0aGluZyBLTVNBTiBkZXRlY3RzLiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODYzMzhiYTZlNjBjM2RjNTRiZjdjM2E1MGMyZDQ1OTMwMjM2MzRhNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDA3OjU2OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiYzMyNGUzN2M1ZjFmLi43MjNiNTEzNTc0YjNkIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNDgxNyw2ICYjNDM7NDgxNyw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CiAJaW50IHNjYW5uZWQsIHJlY2xhaW1lZDsKIAlpbnQgaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7CiYjNDM7CWludCBpc29sYXRlZF9vcmlnID0gMDsKIAlib29sIHNraXBfcmV0cnkgPSBmYWxzZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7CkBAIC00ODI5LDYgJiM0Mzs0ODMwLDExIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCXNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLAogCQkJCSAmYW1wO2xpc3QsICZhbXA7aXNvbGF0ZWQsICZhbXA7dHlwZSwgJmFtcDt0eXBlX3NjYW5uZWQpOwogCiYjNDM7CWlzb2xhdGVkX29yaWcgPSBpc29sYXRlZDsKJiM0MzsJaWYgKGlzb2xhdGVkKQomIzQzOwkJX19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsCiYjNDM7CQkJCSAgICAgIGlzb2xhdGVkKTsKJiM0MzsKIAkvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqLwogCWlmIChzY2FubmVkKQogCQl0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTsKQEAgLTQ4OTEsNiAmIzQzOzQ4OTcsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWdvdG8gcmV0cnk7CiAJfQogCiYjNDM7CWlmIChpc29sYXRlZF9vcmlnKQomIzQzOwkJbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyB0eXBlLAomIzQzOwkJCQkgICAgLWlzb2xhdGVkX29yaWcpOwomIzQzOwogCXJldHVybiBzY2FubmVkOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjkxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFZNU2NhbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyB0d2Vha2luZyB0aGUgYGV2aWN0X2ZvbGlvc2AgZnVuY3Rpb24sIHdoaWNoIGlzIGFsd2F5cyBhbiBpbnRlcmVzdGluZyBhcmVhLiBUaGUgZ2lzdCBvZiBpdCBpcyBhZGRpbmcgc29tZSBib29ra2VlcGluZyByZWxhdGVkIHRvIGlzb2xhdGVkIGZvbGlvcywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgd2UmIzM5O3JlIHRyeWluZyB0byBpbXByb3ZlIHRoZSBhY2N1cmFjeSBvZiBvdXIgbWVtb3J5IGFjY291bnRpbmcgZHVyaW5nIHBhZ2UgZXZpY3Rpb24uCgpTcGVjaWZpY2FsbHksIEkgc2VlIGEgbmV3IHZhcmlhYmxlIGNhbGxlZCBgaXNvbGF0ZWRfb3JpZ2AgYmVpbmcgaW50cm9kdWNlZC4gSXQmIzM5O3MgaW5pdGlhbGl6ZWQgdG8gemVybywgdGhlbiBzZXQgdG8gdGhlIHZhbHVlIG9mIGBpc29sYXRlZGAgKmFmdGVyKiBgaXNvbGF0ZV9mb2xpb3NgIGlzIGNhbGxlZC4gVGhhdCB0ZWxscyBtZSBgaXNvbGF0ZV9mb2xpb3NgIGlzIGxpa2VseSBzZXR0aW5nIGBpc29sYXRlZGAsIHdoaWNoIHByb2JhYmx5IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBmb2xpb3MgdGhhdCB3ZXJlIGFjdHVhbGx5IHN1Y2Nlc3NmdWxseSBpc29sYXRlZC4KClRoZW4sIHRoZXJlJiMzOTtzIHRoaXMgY29uZGl0aW9uYWw6IGlmIGBpc29sYXRlZGAgaXMgbm9uLXplcm8gKG1lYW5pbmcgZm9saW9zICp3ZXJlKiBpc29sYXRlZCksIGl0IGNhbGxzIGBfX21vZF9ub2RlX3BhZ2Vfc3RhdGVgIHRvIHVwZGF0ZSBhIG5vZGUgcGFnZSBzdGF0ZSBjb3VudGVyLCBzcGVjaWZpY2FsbHkgYE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZWAuIEkmIzM5O20gZ3Vlc3NpbmcgYHR5cGVgIGRlZmluZXMgdGhlIHR5cGUgb2YgcGFnZSAoZS5nLiwgYW5vbnltb3VzLCBmaWxlLWJhY2tlZCkgYmVpbmcgaXNvbGF0ZWQuIExhdGVyLCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiwgdGhlIHBhdGNoIHNlZW1zIHRvICp1bmRvKiB0aGlzIGFkanVzdG1lbnQsIHN1YnRyYWN0aW5nIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiBgaXNvbGF0ZWRgIGZyb20gdGhlIHNhbWUgY291bnRlci4gVGhpcyBzdWdnZXN0cyB0aGUgaXNvbGF0ZWQgZm9saW9zIGFyZSBiZWluZyByZWNsYWltZWQuCgpNeSBpbW1lZGlhdGUgYXNzZXNzbWVudCBpcyB0aGlzIHBhdGNoIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyBhbnl0aGluZyBkcmFzdGljIG9yIHJpc2t5LiBJdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGNyZWF0ZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGl0JiMzOTtzIG5vdCBjb3B5aW5nIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYmVjYXVzZSB2YXJpYWJsZXMgYGlzb2xhdGVkYCwgYHR5cGVgLCBhbmQgYHR5cGVfc2Nhbm5lZGAgYXJlIHBhc3NlZCBieSByZWZlcmVuY2UgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSBgaXNvbGF0ZV9mb2xpb3NgIGZ1bmN0aW9uLiBCdXQsIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGBpc29sYXRlX2ZvbGlvc2AgYWN0dWFsbHkgd29ya3MgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgZW5zdXJlIHRoZXJlJiMzOTtzIG5vIHN1YnRsZSBpbnRlcmFjdGlvbiBJJiMzOTttIG1pc3NpbmcuIFRoaXMgZmVlbHMgbGlrZSBhIHByZXR0eSB0YXJnZXRlZCB1cGRhdGUgdG8gbm9kZSBwYWdlIHN0YXRlIGZvciBtb3JlIGFjY3VyYXRlIGFjY291bnRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzb2xhdGVfZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDc1NT1zdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00NzczLVxubW0vdm1zY2FuLmM6NDc3NDpzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDc3NS1cdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcbi0tXG5tbS92bXNjYW4uYz00ODA4PXN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ4MjktXG5tbS92bXNjYW4uYzo0ODMwOlx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXG5tbS92bXNjYW4uYy00ODMxLVx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjI4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBpc29sYXRlX2ZvbGlvc2AgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhhdCBgaXNvbGF0ZV9mb2xpb3NgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZG9pbmcgd2hhdCBJIGV4cGVjdCBpdCB0bywgYW5kIGVmZmljaWVudGx5LiBGaXJzdCwgSSYjMzk7bSBjaGVja2luZyB0aGUgY29yZSBsb2dpYy4gQXJlIHRoZSBlZGdlIGNhc2VzIGhhbmRsZWQgY29ycmVjdGx5PyBTcGVjaWZpY2FsbHksIGFtIEkgc2VlaW5nIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBlbXB0eSBpbnB1dCBzZXRzLCBudWxsIHZhbHVlcywgb3IgdW5leHBlY3RlZCBkYXRhIHN0cnVjdHVyZXM/IEkmIzM5O20gbG9va2luZyBmb3IgYW55IHNob3J0Y3V0cyB0YWtlbiB0aGF0IG1pZ2h0IGludHJvZHVjZSBzdWJ0bGUgYnVncyBkb3duIHRoZSBsaW5lLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIHRoaXMgd2VyZSBtdWx0aS10aHJlYWRlZC4gSXMgaXQgdXRpbGl6aW5nIHRoZSBvcHRpbWFsIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIGV4cGVjdGVkIGlucHV0IHNpemU/IEFyZSB0aGVyZSBhcmVhcyB3aGVyZSBJIGNvdWxkIG9wdGltaXplIHRoZSBhbGdvcml0aG1zIHRvIGltcHJvdmUgc3BlZWQsIGV2ZW4gb24gbGFyZ2UgZm9saW9zPyBJJiMzOTtsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIHRoZSBtYWludGFpbmFiaWxpdHkgb2YgdGhpcyBjb2RlLiBJcyBpdCB3ZWxsLWNvbW1lbnRlZCwgbW9kdWxhciwgYW5kIGVhc3kgZm9yIG90aGVyIGRldmVsb3BlcnMsIG9yIGV2ZW4gbXlzZWxmIGluIGEgZmV3IG1vbnRocywgdG8gdW5kZXJzdGFuZCBhbmQgbW9kaWZ5PyBBbnkgb3Bwb3J0dW5pdHkgdG8gcmVmYWN0b3IgZm9yIGNsYXJpdHkgb3IgdG8gZW5oYW5jZSB0ZXN0YWJpbGl0eSBpcyB3b3J0aCBleHBsb3JpbmcgcmlnaHQgbm93LiBGaW5hbGx5LCBhcmUgdGhlIHVuaXQgdGVzdHMgc3VmZmljaWVudCwgb3Igc2hvdWxkIEkgd3JpdGUgYSBmZXcgbW9yZSBjb3JuZXItY2FzZSB0ZXN0cyB0byBjaGVjayBpdHMgc3RhYmlsaXR5PyBJIG5lZWQgdG8gYmUgY29uZmlkZW50IHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBwcm9kdWN0aW9uLXJlYWR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDc3NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0Nzc0Olx0c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbjQ3NzU6XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcbjQ3NzY6XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWQsXG40Nzc3Olx0XHRcdFx0ICBpbnQgKmlzb2xhdGVfdHlwZSwgaW50ICppc29sYXRlX3NjYW5uZWQpXG40Nzc4Olx0e1xuNDc3OTpcdFx0aW50IGk7XG40NzgwOlx0XHRpbnQgdG90YWxfc2Nhbm5lZCA9IDA7XG40NzgxOlx0XHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbjQ3ODI6XHRcbjQ3ODM6XHRcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcbjQ3ODQ6XHRcdFx0aW50IHNjYW5uZWQ7XG40Nzg1Olx0XHRcdGludCB0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7XG40Nzg2Olx0XG40Nzg3Olx0XHRcdHNjYW5uZWQgPSBzY2FuX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLFxuNDc4ODpcdFx0XHRcdFx0ICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQpO1xuNDc4OTpcdFxuNDc5MDpcdFx0XHR0b3RhbF9zY2FubmVkICYjNDM7PSBzY2FubmVkO1xuNDc5MTpcdFx0XHRpZiAoKmlzb2xhdGVkKSB7XG40NzkyOlx0XHRcdFx0Kmlzb2xhdGVfdHlwZSA9IHR5cGU7XG40NzkzOlx0XHRcdFx0Kmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7XG40Nzk0Olx0XHRcdFx0YnJlYWs7XG40Nzk1Olx0XHRcdH1cbjQ3OTY6XHRcdFx0LypcbjQ3OTc6XHRcdFx0ICogSWYgc2Nhbm5lZCBcdTAwM2UgMCBhbmQgaXNvbGF0ZWQgPT0gMCwgYXZvaWQgZmFsbGluZyBiYWNrIHRvIHRoZVxuNDc5ODpcdFx0XHQgKiBvdGhlciB0eXBlLCBhcyB0aGlzIHR5cGUgcmVtYWlucyBzdWZmaWNpZW50LiBGYWxsaW5nIGJhY2tcbjQ3OTk6XHRcdFx0ICogdG9vIHJlYWRpbHkgY2FuIGRpc3J1cHQgdGhlIHBvc2l0aXZlX2N0cmxfZXJyKCkgYmlhcy5cbjQ4MDA6XHRcdFx0ICovXG40ODAxOlx0XHRcdGlmICghc2Nhbm5lZClcbjQ4MDI6XHRcdFx0XHR0eXBlID0gIXR5cGU7XG40ODAzOlx0XHR9XG40ODA0Olx0XG40ODA1Olx0XHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcbjQ4MDY6XHR9XG40ODA3Olx0XG40ODA4Olx0c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG40ODA5Olx0XHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuNDgxMDpcdHtcbjQ4MTE6XHRcdExJU1RfSEVBRChsaXN0KTtcbjQ4MTI6XHRcdExJU1RfSEVBRChjbGVhbik7XG40ODEzOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuNDgxNDpcdFx0c3RydWN0IGZvbGlvICpuZXh0O1xuNDgxNTpcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xuNDgxNjpcdFx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xuNDgxNzpcdFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbjQ4MTg6XHRcdGludCBzY2FubmVkLCByZWNsYWltZWQ7XG40ODE5Olx0XHRpbnQgaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XG40ODIwOlx0XHRpbnQgaXNvbGF0ZWRfb3JpZyA9IDA7XG40ODIxOlx0XHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcbjQ4MjI6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuNDgyMzpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzA0CgkJCQkJCQlvdXRwdXQ6IDIwMAoJCQkJCQkJdGhvdWdodHM6IDQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCBvbiBVbmluaXRpYWxpemVkIE1lbW9yeSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMsIGdpdmVuIEtNU0FOJiMzOTtzIHJvbGUuIGBpc29sYXRlX2ZvbGlvc2AgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBpdCBzZWVtcyB0byB0YWtlIGBpc29sYXRlZGAsIGBpc29sYXRlX3R5cGVgLCBhbmQgYGlzb2xhdGVfc2Nhbm5lZGAgYnkgcG9pbnRlci4gSXQgY2FsbHMgYHNjYW5fZm9saW9zYCwgd2hpY2ggaXMgdGhlIGxpa2VseSBzb3VyY2Ugb2YgdGhpcyBkYXRhLCBiZWZvcmUgc2V0dGluZyB0aGVzZSB2YWx1ZXMuIElmIGAqaXNvbGF0ZWRgIGlzIG5vbi16ZXJvLCBpbmRpY2F0aW5nIGZvbGlvcyAqd2VyZSogaXNvbGF0ZWQsIHRoZW4gYCppc29sYXRlX3R5cGUgPSB0eXBlO2AgYW5kIGAqaXNvbGF0ZV9zY2FubmVkID0gc2Nhbm5lZDtgIGFyZSBzZXQuIFRoaXMgbG9va3MgaW1wb3J0YW50LgoKTXkgY29uY2VybiBpbml0aWFsbHkgd2FzIHRoZSBgdHlwZWAgdmFyaWFibGUuIElmIGAqaXNvbGF0ZWRgIGJlY29tZXMgbm9uLXplcm8gaW4gYGlzb2xhdGVfZm9saW9zYCwgdGhlIHZhbHVlIGlzIHNldCB0byBgdHlwZWAuIEJ1dCBgZXZpY3RfZm9saW9zYCBhbHNvIHVzZXMgdGhpcyB2YXJpYWJsZS4gSSBuZWVkZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIGB0eXBlYCAuIEkgY2FuIHNlZSBub3csIGBldmljdF9mb2xpb3NgIGluaXRpYWxpemVzIGBpc29sYXRlZGAgdG8gMC4gU28sIGB0eXBlYCBpcyBvbmx5IGV2ZXIgdXNlZCAqYWZ0ZXIqIGBpc29sYXRlX2ZvbGlvc2AgaGFzIHNldCBpdCwgd2hpY2ggaW1wbGllcyBhIHNhZmUgaW5pdGlhbGl6YXRpb24gcGF0aCBmb3IgdGhlIHZhbHVlIG9mIHR5cGUuCgpOb3csIGxvb2tpbmcgYXQgdGhlIGNvZGUgaW4gYGV2aWN0X2ZvbGlvc2AsIHRoZXJlJiMzOTtzIGEgYmxvY2s6CgpgYGBjCglpc29sYXRlZF9vcmlnID0gaXNvbGF0ZWQ7CglpZiAoaXNvbGF0ZWQpCgkJX19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsCgkJCQkgICAgICBpc29sYXRlZCk7CmBgYAoKU2luY2UgYHR5cGVgIGlzIG9ubHkgZXZlciB1c2VkICppZiogYGlzb2xhdGVkYCBpcyBub24temVybyAoZHVlIHRvIHRoZSBgaWZgIHN0YXRlbWVudCksIGFuZCBgdHlwZWAgaXMgaW5pdGlhbGl6ZWQgaWYgYGlzb2xhdGVkYCBpcyBub24temVybyAoZnJvbSB0aGUgYGlzb2xhdGVfZm9saW9zYCBjYWxsIHBhdGgpLCB0aGVyZSBpcyBubyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIGhlcmUuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBjcmVhdGUgYW55IG1lbW9yeSByaXNrcywgYW5kIG15IGluaXRpYWwgY29uY2VybnMgYXJlIGFsbGV2aWF0ZWQuIEl0JiMzOTtzIGp1c3QgcGFnZSBzdGF0ZSBhY2NvdW50aW5nLCBhbmQgdGhhdCBpcyBub3Qgd2hhdCBLTVNBTiBkZXRlY3RzLgoKVGhpcyBwYXRjaCBzaW1wbHkgdXBkYXRlcyB0aGUgbm9kZSBwYWdlIHN0YXRlIGJ5IHVwZGF0aW5nIHRoZSBwYWdlIHN0YXRlIChgTlJfSVNPTEFURURfQU5PTiAmIzQzOyB0eXBlYCkgd2l0aCB0aGUgbnVtYmVyIG9mIGlzb2xhdGVkIGZvbGlvcyBkdXJpbmcgZXZpY3Rpb24gYW5kIHRoZW4gcmV2ZXJ0cyBpdCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4KVGhlIGxvY2FsIGludGVnZXIgdmFyaWFibGVzIGludm9sdmVkIChgaXNvbGF0ZWRgLCBgdHlwZWApIGFyZSBjbGVhcmx5IGluaXRpYWxpemVkLiBgaXNvbGF0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBpZiBgaXNvbGF0ZV9mb2xpb3NgIHNldHMgaXQgdG8gYSBub24temVybyB2YWx1ZSwgaXQgdGhlbiBhbHNvIGluaXRpYWxpemVzIGB0eXBlYC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYW5kIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIGFzIGFueSBwb3RlbnRpYWwgYnVncyBhcmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgcGFnZSBzdGF0ZSBhY2NvdW50aW5nLCB3aGljaCBjYW4gYmUgaGFuZGxlZCB3aXRoIEtBU0FOIG9yIG1vcmUgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLgoKU28sIHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBuZWVkIEtNU0FOLiBJdCYjMzk7cyBzYWZlIGluIHRlcm1zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZXZpY3RfZm9saW9zYCBpbiBgbW0vdm1zY2FuLmNgIHRvIHRlbXBvcmFyaWx5IHVwZGF0ZSB0aGUgbm9kZSBwYWdlIHN0YXRlIChgTlJfSVNPTEFURURfQU5PTiAmIzQzOyB0eXBlYCkgd2l0aCB0aGUgbnVtYmVyIG9mIGlzb2xhdGVkIGZvbGlvcyBkdXJpbmcgZXZpY3Rpb24sIGFuZCB0aGVuIHJldmVydCBpdCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4gVGhlIHZhcmlhYmxlcyBpbnZvbHZlZCAoYGlzb2xhdGVkYCwgYHR5cGVgKSBhcmUgbG9jYWwgaW50ZWdlcnMuIGBpc29sYXRlZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCwgYW5kIGlmIGBpc29sYXRlX2ZvbGlvc2Agc2V0cyBpdCB0byBhIG5vbi16ZXJvIHZhbHVlLCBpdCBhbHNvIGluaXRpYWxpemVzIGB0eXBlYC4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdyBvciBjYWxjdWxhdGlvbnMuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYW5kIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgcGFnZSBzdGF0ZSBhY2NvdW50aW5nLCB3aGljaCBpcyBub3Qgc29tZXRoaW5nIEtNU0FOIGRldGVjdHMuIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHBhdGNoLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGV2aWN0X2ZvbGlvc2AgaW4gYG1tL3Ztc2Nhbi5jYCB0byB0ZW1wb3JhcmlseSB1cGRhdGUgdGhlIG5vZGUgcGFnZSBzdGF0ZSAoYE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZWApIHdpdGggdGhlIG51bWJlciBvZiBpc29sYXRlZCBmb2xpb3MgZHVyaW5nIGV2aWN0aW9uLCBhbmQgdGhlbiByZXZlcnQgaXQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgKGBpc29sYXRlZGAsIGB0eXBlYCkgYXJlIGxvY2FsIGludGVnZXJzLiBgaXNvbGF0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBpZiBgaXNvbGF0ZV9mb2xpb3NgIHNldHMgaXQgdG8gYSBub24temVybyB2YWx1ZSwgaXQgYWxzbyBpbml0aWFsaXplcyBgdHlwZWAuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY2FsY3VsYXRpb25zLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHBhZ2Ugc3RhdGUgYWNjb3VudGluZywgd2hpY2ggaXMgbm90IHNvbWV0aGluZyBLTVNBTiBkZXRlY3RzLiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTY6NTguNzIyNzgxODg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MDc5NzU1NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBldmljdF9mb2xpb3NgIGluIGBtbS92bXNjYW4uY2AgdG8gdGVtcG9yYXJpbHkgdXBkYXRlIHRoZSBub2RlIHBhZ2Ugc3RhdGUgKGBOUl9JU09MQVRFRF9BTk9OICsgdHlwZWApIHdpdGggdGhlIG51bWJlciBvZiBpc29sYXRlZCBmb2xpb3MgZHVyaW5nIGV2aWN0aW9uLCBhbmQgdGhlbiByZXZlcnQgaXQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgKGBpc29sYXRlZGAsIGB0eXBlYCkgYXJlIGxvY2FsIGludGVnZXJzLiBgaXNvbGF0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBpZiBgaXNvbGF0ZV9mb2xpb3NgIHNldHMgaXQgdG8gYSBub24temVybyB2YWx1ZSwgaXQgYWxzbyBpbml0aWFsaXplcyBgdHlwZWAuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY2FsY3VsYXRpb25zLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHBhZ2Ugc3RhdGUgYWNjb3VudGluZywgd2hpY2ggaXMgbm90IHNvbWV0aGluZyBLTVNBTiBkZXRlY3RzLiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGV2aWN0aW9uIGxvZ2ljIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBpc29sYXRlZCBmb2xpb3MgaW4gdGhlIG5vZGUgcGFnZSBzdGF0ZSAoTlJfSVNPTEFURURfQU5PTiAvIE5SX0lTT0xBVEVEX0ZJTEUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRoIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBtZW1vcnkgcHJlc3N1cmUgb3IgcHJvYWN0aXZlIHJlY2xhaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU2OjU4LjcyMjc4NzUwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5OTk1NTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg2MzM4YmE2ZTYwYzNkYzU0YmY3YzNhNTBjMmQ0NTkzMDIzNjM0YTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDc6NTY6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGJjMzI0ZTM3YzVmMWYuLjcyM2I1MTM1NzRiM2QgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC00ODE3LDYgKzQ4MTcsNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcXG4gXFx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcXG4gXFx0aW50IGlzb2xhdGVkID0gMCwgdHlwZSwgdHlwZV9zY2FubmVkO1xcbitcXHRpbnQgaXNvbGF0ZWRfb3JpZyA9IDA7XFxuIFxcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG4gXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xcbkBAIC00ODI5LDYgKzQ4MzAsMTEgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxcbiBcXHRcXHRcXHRcXHQgXFx1MDAyNmxpc3QsIFxcdTAwMjZpc29sYXRlZCwgXFx1MDAyNnR5cGUsIFxcdTAwMjZ0eXBlX3NjYW5uZWQpO1xcbiBcXG4rXFx0aXNvbGF0ZWRfb3JpZyA9IGlzb2xhdGVkO1xcbitcXHRpZiAoaXNvbGF0ZWQpXFxuK1xcdFxcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGlzb2xhdGVkKTtcXG4rXFxuIFxcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXFxuIFxcdGlmIChzY2FubmVkKVxcbiBcXHRcXHR0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTtcXG5AQCAtNDg5MSw2ICs0ODk3LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRnb3RvIHJldHJ5O1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoaXNvbGF0ZWRfb3JpZylcXG4rXFx0XFx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAtaXNvbGF0ZWRfb3JpZyk7XFxuK1xcbiBcXHRyZXR1cm4gc2Nhbm5lZDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6MDAuMjIzNzUzMzg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTY0NzA3NTg4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZXZpY3Rpb24gbG9naWMgdG8gY29ycmVjdGx5IGFjY291bnQgZm9yIGlzb2xhdGVkIGZvbGlvcyBpbiB0aGUgbm9kZSBwYWdlIHN0YXRlIChOUl9JU09MQVRFRF9BTk9OIC8gTlJfSVNPTEFURURfRklMRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGggdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBwcmVzc3VyZSBvciBwcm9hY3RpdmUgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODYzMzhiYTZlNjBjM2RjNTRiZjdjM2E1MGMyZDQ1OTMwMjM2MzRhN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA3OjU2OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYmMzMjRlMzdjNWYxZi4uNzIzYjUxMzU3NGIzZCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTQ4MTcsNiArNDgxNyw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbiBcdGludCBzY2FubmVkLCByZWNsYWltZWQ7XG4gXHRpbnQgaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XG4rXHRpbnQgaXNvbGF0ZWRfb3JpZyA9IDA7XG4gXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuQEAgLTQ4MjksNiArNDgzMCwxMSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxuIFx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuIFxuK1x0aXNvbGF0ZWRfb3JpZyA9IGlzb2xhdGVkO1xuK1x0aWYgKGlzb2xhdGVkKVxuK1x0XHRfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLFxuK1x0XHRcdFx0ICAgICAgaXNvbGF0ZWQpO1xuK1xuIFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cbiBcdGlmIChzY2FubmVkKVxuIFx0XHR0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTtcbkBAIC00ODkxLDYgKzQ4OTcsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGdvdG8gcmV0cnk7XG4gXHR9XG4gXG4rXHRpZiAoaXNvbGF0ZWRfb3JpZylcbitcdFx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsXG4rXHRcdFx0XHQgICAgLWlzb2xhdGVkX29yaWcpO1xuK1xuIFx0cmV0dXJuIHNjYW5uZWQ7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6MDAuMjIzNzU1MzI0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1Njk3NTQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZtc2Nhbi5jIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBwb2tpbmcgYXJvdW5kIGluIGBtbS92bXNjYW4uY2AsIHNwZWNpZmljYWxseSB0aGUgYGV2aWN0X2ZvbGlvc2AgZnVuY3Rpb24uIE15IHNwaWRleS1zZW5zZSBpcyBhbHJlYWR5IHRpbmdsaW5nIGEgYml0LCBhcyBhbnkgY2hhbmdlIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGVzcGVjaWFsbHkgc29tZXRoaW5nIHRoYXQgZGVhbHMgd2l0aCBldmljdGlvbiwgaXMgc29tZXRoaW5nIEkgd2FudCB0byBzY3J1dGluaXplIGNsb3NlbHkuXG5cblRoZSBrZXkgc2VlbXMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIHRoaXMgYGlzb2xhdGVkX29yaWdgIHZhcmlhYmxlLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHRyYWNraW5nIHNvbWUgb3JpZ2luYWwgaXNvbGF0ZWQgY291bnQsIGFuZCB0aGVuIHVwZGF0aW5nIHRoZSBub2RlIHBhZ2Ugc3RhdGUgYE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlYCB3aXRoIGEgbmV3IGBpc29sYXRlZGAgY291bnQsIGFuZCB0aGVuICpzdWJ0cmFjdGluZyogdGhlIGBpc29sYXRlZF9vcmlnYCB2YWx1ZS4gVGhpcyBmZWVscyBsaWtlIHdlJ3JlIGRvaW5nIHNvbWUgYm9va2tlZXBpbmcgYXJvdW5kIHBhZ2UgaXNvbGF0aW9uLCB3aGljaCBpcyBhIGNvcmUgY29tcG9uZW50IG9mIGhvdyBNR0xSVSB3b3Jrcy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBnaXZlbiBpdHMgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggTUdMUlXigJlzIGV2aWN0aW9uIHJvdXRpbmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbW9kaWZpY2F0aW9uIGluIGRldGFpbC4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgZXZpY3RfZm9saW9zYCBmdW5jdGlvbiB3aXRoaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgc2VlIGhvdyB0aGlzIG5ldyB2YXJpYWJsZSBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgTUdMUlUgaGFuZGxlcyBwYWdlIGlzb2xhdGlvbiBhbmQgZXZpY3Rpb24uIFRpbWUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1NzowNC43ODA3MzQzOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcyNTU0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ3NzQ9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4MDctXFxubW0vdm1zY2FuLmM6NDgwODpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00ODA5LVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5OTA9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMTMtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTAxNDpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTAxNS1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTYxNz1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU2MzctXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU2Mzg6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU2MzktXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjA0Ljg4Nzk5ODg4OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTM2MTQ3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNR0xSVSdzIEFjdGl2YXRpb24gUGF0aCoqXG5cbk9rYXksIHNvIGBldmljdF9mb2xpb3NgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlLCBnZXR0aW5nIGNhbGxlZCBmcm9tIGJvdGggYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgYHJ1bl9ldmljdGlvbmAuIFJpZ2h0LCB0aGF0J3Mgd2l0aGluIHRoZSBMUlUgZ2VuZXJhdGlvbiBmdW5jdGlvbmFsaXR5IOKAkyBzcGVjaWZpY2FsbHksIHRoZSBNR0xSVSBmZWF0dXJlLiBNeSBxdWVzdGlvbiBpcywgaXMgTUdMUlUgb24gYnkgZGVmYXVsdCwgb3IgaXMgdGhlcmUgYSBzcGVjaWZpYyBrZXJuZWwgY29uZmlnIHRoYXQgZW5hYmxlcyBpdD8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtLiBHaXZlbiBpdCdzIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQsIGBtbS9LY29uZmlnYCBpcyB0aGUgbW9zdCBsaWtlbHkgbG9jYXRpb24gZm9yIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIHBlcmhhcHMgaXQncyBkZWZpbmVkIGFuZCBjb25kaXRpb25hbCBpbiBgbW0vdm1zY2FuLmNgLiBMZXQncyBzdGFydCB3aXRoIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTExLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6MDguNjAxNjE3MjUxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODQ4MTczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5MD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDAtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDE6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDItXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQwOS1cXG5tbS9LY29uZmlnOjE0MTA6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxMS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxNS1cXG5tbS9LY29uZmlnOjE0MTY6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MTctXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDI0LVxcbm1tL0tjb25maWc6MTQyNTpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjYtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1NzowOS4yNzAxMDc5NjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc0MzA4MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBhbmQgRXZpY3Rpb24gU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGJ1aWx0IGFyb3VuZCB0d28gY29uZmlndXJhdGlvbiBvcHRpb25zOiBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcnBsYXkgYW5kIHdoYXQgaW1wYWN0IHRoZXkgaGF2ZS4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgYExSVV9HRU5gIHByb2JhYmx5IGRlZmluZXMgdGhlIGZyYW1ld29yayBpdHNlbGYsIHdoaWxlIGBMUlVfR0VOX0VOQUJMRURgIGlzIGxpa2VseSBhIHJ1bnRpbWUgdG9nZ2xlLiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyBob3cgdGhlIGZvbGlvIGV2aWN0aW9uIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGBldmljdF9mb2xpb3NgLCBpcyBoYW5kbGVkIHdpdGhpbiB0aGlzIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBldmljdF9mb2xpb3NgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gd2hldGhlciBgQ09ORklHX0xSVV9HRU5gIGlzIGRlZmluZWQuIFRoaXMgd2lsbCByZXZlYWwgaWYgdGhlIGV2aWN0aW9uIHN0cmF0ZWd5IGlzIGZ1bmRhbWVudGFsbHkgbGlua2VkIHRvIHRoZSBgTFJVX0dFTmAgZnJhbWV3b3JrIG9yIGlmIGl0J3MgYSBtb3JlIGluZGVwZW5kZW50IGNvbXBvbmVudCB0aGF0ICptaWdodCogYmUgdXNlZCB3aXRoIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBJIG11c3QgdW5kZXJzdGFuZCB0aGlzIHRvIHNlZSB0aGUgb3ZlcmFsbCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYxNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjEyLjU0NDQyMDM4MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM1NTIzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0xSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9ODI1PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzAtXFxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzMi0vKlxcbi0tXFxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg1Ny19XFxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTg1OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2MTY9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2MjctXFxubW0vdm1zY2FuLmM6MjYyODojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNjI5LVxcbm1tL3Ztc2Nhbi5jPTI2MzA9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjYzMTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI2MzItREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODE2PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgzNS1cXG5tbS92bXNjYW4uYzoyODM2OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yODM3LVxcbi0tXFxubW0vdm1zY2FuLmM9Mjk0NT12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NzMtXFxubW0vdm1zY2FuLmM6Mjk3NDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXFxubW0vdm1zY2FuLmMtMjk3NS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4ODY9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbm1tL3Ztc2Nhbi5jLTU4ODctXFxubW0vdm1zY2FuLmM6NTg4ODojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy01ODg5LVxcbi0tXFxubW0vdm1zY2FuLmM9NTkwMD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTkwNC1cXG5tbS92bXNjYW4uYzo1OTA1OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTU5MDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjEyLjY5Nzk4MjIyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyMTQ4NzIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBldmljdF9mb2xpb3NgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgeWVwLCBgZXZpY3RfZm9saW9zYCBpcyByaWdodCBhcm91bmQgbGluZSA0ODA4LCB3aGljaCBmYWxscyBzbWFjayBkYWIgYmV0d2VlbiBsaW5lcyAyNjI4IGFuZCA1ODg4LCB3aGVyZSB0aGF0IGAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9gIGJpdCBpcy4gVGhhdCB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24ncyBnb2luZyB0byBuZWVkIGBDT05GSUdfTFJVX0dFTmAgZW5hYmxlZCB0byBldmVuIGJlIGluIHBsYXkuIFNlZW1zIGxvZ2ljYWwsIGdpdmVuIHRoZSBuYW1lLiBUbyBtYWtlIHRoZSBmdW5jdGlvbiBhY3RpdmUgYnkgZGVmYXVsdCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgaXMgYWxzbyBwcm9iYWJseSBpbXBvcnRhbnQuXG5cbk5leHQsIEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQncyBzZWUuLi4geWVwLCBpdCdzIGRlY2xhcmVkIGBzdGF0aWNgLiBTbywgd2hvJ3MgKmNhbGxpbmcqIGl0PyBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCB1c2UgYGV2aWN0X2ZvbGlvc2AuIE9rYXksIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgKmlzKiBzdGF0aWMuIFNhbWUgd2l0aCBgcnVuX2V2aWN0aW9uYC4gTm93IEkgbmVlZCB0byB0cmFjZSAqdXB3YXJkKiB0byBzZWUgd2hlcmUgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU2MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1NzoxNi44MTk0NzIwMjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NTI5MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ5NTU9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5ODktICovXFxubW0vdm1zY2FuLmM6NDk5MDpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTQ5OTEte1xcbi0tXFxubW0vdm1zY2FuLmM9NTAzNT1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNTQtXFxubW0vdm1zY2FuLmM6NTA1NTpcXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUwNTYtXFxuLS1cXG5tbS92bXNjYW4uYz01MTQ2PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE1OC1cXG5tbS92bXNjYW4uYzo1MTU5OlxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MTYwLVxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6MTYuOTE4MDA3MDg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODg2NDEzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipUcmFjaW5nIGBzaHJpbmtfb25lYCBhbmQgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIHplcm9pbmcgaW4gb24gYHNocmlua19vbmVgIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYC4gVGhlc2UgYXJlIHRoZSB0d28gZnVuY3Rpb25zIEkgd2FudCB0byBmb2xsb3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IHdvcmsgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlciB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3IgdHJ5aW5nIHRvIGRlYnVnIHNvbWV0aGluZyBzcGVjaWZpYywgc28gdW5kZXJzdGFuZGluZyB0aGVpciBpbnRlcmFjdGlvbnMgaXMga2V5LiBJIG5lZWQgdG8gc2VlIGhvdyBgc2hyaW5rX29uZWAgYWZmZWN0cyB0aGUgTFJVIGNhY2hlIHJlcHJlc2VudGVkIGJ5IGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLiBJcyBpdCBhIGRpcmVjdCBjYWxsLCBvciBzb21ldGhpbmcgbW9yZSBpbmRpcmVjdD8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHRoZSBjYWxsIGdyYXBocyBmb3IgZWFjaCwgYW5kIHRoZW4gcGVyaGFwcyBzdGVwIHRocm91Z2ggdGhlaXIgZXhlY3V0aW9uIHRvIGdldCBhIGZlZWwgZm9yIHRoZSBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1NzoxOS45MDY2NTEzMDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDg1OTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfb25lfGxydV9nZW5fc2hyaW5rX2xydXZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00OTkwPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MDM0LVxcbm1tL3Ztc2Nhbi5jOjUwMzU6c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTAzNi17XFxuLS1cXG5tbS92bXNjYW4uYz01MDc2PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTExNy1cXG5tbS92bXNjYW4uYzo1MTE4OlxcdFxcdG9wID0gc2hyaW5rX29uZShscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy01MTE5LVxcbi0tXFxubW0vdm1zY2FuLmMtNTE0NS1cXG5tbS92bXNjYW4uYzo1MTQ2OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUxNDcte1xcbi0tXFxubW0vdm1zY2FuLmM9NTE2Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE5My1cXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL3Ztc2Nhbi5jOjUxOTQ6XFx0XFx0c2hyaW5rX29uZShcXHUwMDI2cGdkYXQtXFx1MDAzZV9fbHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTE5NS1cXHRlbHNlXFxuLS1cXG5tbS92bXNjYW4uYz01ODkwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01ODk0LVxcbm1tL3Ztc2Nhbi5jOjU4OTU6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTg5Ni17XFxuLS1cXG5tbS92bXNjYW4uYz01OTA3PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5MTgtXFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcXHUwMDI2XFx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jOjU5MTk6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTU5MjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjIwLjA2NzUxNjMyNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ3NjA0Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBzaHJpbmtfbHJ1dmVjYCdzIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIGNhbGwgdG8gYHNocmlua19scnV2ZWNgIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBqdW1wcyB0bzogKklzIHRoaXMgbm9uLXN0YXRpYz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC4qIEZyb20gZXhwZXJpZW5jZSwgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgaXMgY3J1Y2lhbCBmb3IgYW55IHBvdGVudGlhbCByZWZhY3RvcmluZyBvciBkZWVwZXIgYW5hbHlzaXMuIFNvLCBsZXQgbWUgY2hlY2sgd2hlcmUgYHNocmlua19scnV2ZWNgIGlzIGRlZmluZWQuIFRoZSBpbXBsaWNhdGlvbnMgb2Ygc3RhdGljIHZzLiBub24tc3RhdGljIGhlcmUgY2FuIGJlIHNpZ25pZmljYW50LCBlc3BlY2lhbGx5IGluIHRlcm1zIG9mIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBjb21wb25lbnRzIG9mIHRoZSBjb2RlIGFuZCBpZiBpdCdzIHBvdGVudGlhbGx5IGV4cG9zZWQgdGhyb3VnaCBhIG1vZHVsZSBib3VuZGFyeSwgYW5kIGlmIHNvLCBob3cuIFRoaXMgYWxzbyBzdWdnZXN0cyB0byBtZSB0aGVyZSdzIHBvdGVudGlhbGx5IGFub3RoZXIgZnVuY3Rpb24gd2l0aCBhIHNpbWlsYXIgbmFtZSwgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AsIGl0IGlzIGxpa2VseSBhIHJlbGF0ZWQgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjIzLjQxNTEzMDY5OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMDgxNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19scnV2ZWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDk1NT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDk4OS0gKi9cXG5tbS92bXNjYW4uYzo0OTkwOnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNDk5MS17XFxuLS1cXG5tbS92bXNjYW4uYz01MDM1PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTA1NC1cXG5tbS92bXNjYW4uYzo1MDU1OlxcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTA1Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwNzY9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTQ1LVxcbm1tL3Ztc2Nhbi5jOjUxNDY6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTE0Ny17XFxuLS1cXG5tbS92bXNjYW4uYy01MTU4LVxcbm1tL3Ztc2Nhbi5jOjUxNTk6XFx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUxNjAtXFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xcbi0tXFxubW0vdm1zY2FuLmM9NTg5MD1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTg5NC1cXG5tbS92bXNjYW4uYzo1ODk1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTU4OTYte1xcbi0tXFxubW0vdm1zY2FuLmM9NTkwMD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTkwNi1cXG5tbS92bXNjYW4uYzo1OTA3OnN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01OTA4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5MTgtXFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcXHUwMDI2XFx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jOjU5MTk6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTU5MjAtXFxuLS1cXG5tbS92bXNjYW4uYz02MDk4PXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNTctXFxubW0vdm1zY2FuLmM6NjE1ODpcXHRcXHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYxNTktXFxuLS1cXG5tbS92bXNjYW4uYz02NzUzPXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02NzgzLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjY3ODQ6XFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjc4NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6MjMuNTM1MjE3NzQ4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTk1NTYyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTWVudGFsIEZsb3cgb24gTWVtb3J5IFNocmlua2FnZSoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBwYXRoIG9mIG1lbW9yeSBzaHJpbmthZ2UgaW4gdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHNocmlua19ub2RlX21lbWNnc2AgYW5kIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBib3RoIHVsdGltYXRlbHkgY2FsbCBgc2hyaW5rX2xydXZlY2AuIFRoYXQncyB0aGUgY29yZSBmdW5jdGlvbi4gYHNocmlua19ub2RlX21lbWNnc2AgaXMgdGhlbiBpbnZva2VkIGJ5IGBzaHJpbmtfbm9kZWAuIE5vdywgdGhlIGNydWNpYWwgcGFydDogYHNocmlua19ub2RlYCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBiYWxhbmNlX3BnZGF0YCwgd2hpY2ggd2Uga25vdyBpcyBrc3dhcGQsIHRoZSBrZXJuZWwncyBiYWNrZ3JvdW5kIG1lbW9yeSBtYW5hZ2VtZW50IGRhZW1vbiwgYW5kIGFsc28gYnkgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCwgd2hpY2ggaXMgZGlyZWN0IHJlY2xhaW0uXG5cblNvLCBsb2dpY2FsbHksIHRoYXQgbWVhbnMgYGJhbGFuY2VfcGdkYXRgIGFuZCBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgIGFyZSBteSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzaHJpbmthZ2UgcHJvY2VzcyBzdGFydHMuIEFuZCwgb2ggeWVhaCwgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGlzIGFsc28gYW4gZW50cnkgcG9pbnQgLSBtYWtlcyBzZW5zZSwgbWVtb3J5IGNncm91cHMgaGF2ZSB0aGVpciBvd24gc2hyaW5rIHByb2Nlc3MuIFdhaXQgYSBtaW51dGUuLi4gYHNocmlua19ub2RlYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5JIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IEknbSB0aGlua2luZyBhYm91dCB0aGlzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxzIHRvIGBkb190cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCBtb3JlIGNhcmVmdWxseSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzgwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjI3LjkzNDc3NzQxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwOTA0MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3RyeV90b19mcmVlX3BhZ2VzfGJhbGFuY2VfcGdkYXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NjQ1ND1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNjQ4NC0gKi9cXG5tbS92bXNjYW4uYzo2NDg1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3RyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxubW0vdm1zY2FuLmMtNjQ4Ni1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmM9NjcwNz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3NDEtXFxubW0vdm1zY2FuLmM6Njc0MjpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02NzQzLVxcbi0tXFxubW0vdm1zY2FuLmM9Njc1Mz11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjc3OS1cXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cXG5tbS92bXNjYW4uYzo2NzgwOlxcdCAqIGlmIHdlIGRvbid0IHJlY2xhaW0gaGVyZSwgdGhlIHNocmlua19ub2RlIGZyb20gYmFsYW5jZV9wZ2RhdFxcbm1tL3Ztc2Nhbi5jLTY3ODEtXFx0ICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCdzIGFzIHdlbGwuIFdlIGhhY2tcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY3OTM9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4MjQtXFxubW0vdm1zY2FuLmM6NjgyNTpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02ODI2LVxcbi0tXFxubW0vdm1zY2FuLmM9Njk4Mz1zdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02OTg2LVxcdC8qXFxubW0vdm1zY2FuLmM6Njk4NzpcXHQgKiBUaGUgdGhyb3R0bGVkIHByb2Nlc3NlcyBhcmUgbm9ybWFsbHkgd29rZW4gdXAgaW4gYmFsYW5jZV9wZ2RhdCgpIGFzXFxubW0vdm1zY2FuLmMtNjk4OC1cXHQgKiBzb29uIGFzIGFsbG93X2RpcmVjdF9yZWNsYWltKCkgaXMgdHJ1ZS4gQnV0IHRoZXJlIGlzIGEgcG90ZW50aWFsXFxuLS1cXG5tbS92bXNjYW4uYy02OTkxLVxcdCAqIHRocm90dGxlZCwga3N3YXBkIHdha2VzLCBhIGxhcmdlIHByb2Nlc3MgZXhpdHMgdGhlcmVieSBiYWxhbmNpbmcgdGhlXFxubW0vdm1zY2FuLmM6Njk5MjpcXHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcXG5tbS92bXNjYW4uYy02OTkzLVxcdCAqIHRoZSB3YWtlIHVwIGNoZWNrcy4gSWYga3N3YXBkIGlzIGdvaW5nIHRvIHNsZWVwLCBubyBwcm9jZXNzIHNob3VsZFxcbi0tXFxubW0vdm1zY2FuLmMtNjk5NS1cXHQgKiB0aGUgd2FrZSB1cCBpcyBwcmVtYXR1cmUsIHByb2Nlc3NlcyB3aWxsIHdha2Uga3N3YXBkIGFuZCBnZXRcXG5tbS92bXNjYW4uYzo2OTk2OlxcdCAqIHRocm90dGxlZCBhZ2Fpbi4gVGhlIGRpZmZlcmVuY2UgZnJvbSB3YWtlIHVwcyBpbiBiYWxhbmNlX3BnZGF0KCkgaXNcXG5tbS92bXNjYW4uYy02OTk3LVxcdCAqIHRoYXQgaGVyZSB3ZSBhcmUgdW5kZXIgcHJlcGFyZV90b193YWl0KCkuXFxuLS1cXG5tbS92bXNjYW4uYz03MDc3PWNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MDgyLS8qXFxubW0vdm1zY2FuLmM6NzA4MzogKiBGb3Iga3N3YXBkLCBiYWxhbmNlX3BnZGF0KCkgd2lsbCByZWNsYWltIHBhZ2VzIGFjcm9zcyBhIG5vZGUgZnJvbSB6b25lc1xcbm1tL3Ztc2Nhbi5jLTcwODQtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXFxuLS1cXG5tbS92bXNjYW4uYy03MDk0LSAqL1xcbm1tL3Ztc2Nhbi5jOjcwOTU6c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG5tbS92bXNjYW4uYy03MDk2LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxMTAtXFxubW0vdm1zY2FuLmM6NzExMTpcXHR0cmFjZV9tbV92bXNjYW5fYmFsYW5jZV9wZ2RhdF9iZWdpbihwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgb3JkZXIsXFxubW0vdm1zY2FuLmMtNzExMi1cXHRcXHRcXHRcXHRcXHQgICAgaGlnaGVzdF96b25laWR4KTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTczMDUtXFxubW0vdm1zY2FuLmM6NzMwNjpcXHR0cmFjZV9tbV92bXNjYW5fYmFsYW5jZV9wZ2RhdF9lbmQocGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjLm9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTczMDctXFx0XFx0XFx0XFx0XFx0ICBoaWdoZXN0X3pvbmVpZHgsIHNjLm5yX3JlY2xhaW1lZCk7XFxuLS1cXG5tbS92bXNjYW4uYz03NDMwPXN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXFxuLS1cXG5tbS92bXNjYW4uYy03NDc2LVxcdFxcdC8qXFxubW0vdm1zY2FuLmM6NzQ3NzpcXHRcXHQgKiBXZSBjYW4gc3BlZWQgdXAgdGhhd2luZyB0YXNrcyBpZiB3ZSBkb24ndCBjYWxsIGJhbGFuY2VfcGdkYXRcXG5tbS92bXNjYW4uYy03NDc4LVxcdFxcdCAqIGFmdGVyIHJldHVybmluZyBmcm9tIHRoZSByZWZyaWdlcmF0b3JcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0OTItXFx0XFx0XFx0XFx0XFx0XFx0YWxsb2Nfb3JkZXIpO1xcbm1tL3Ztc2Nhbi5jOjc0OTM6XFx0XFx0cmVjbGFpbV9vcmRlciA9IGJhbGFuY2VfcGdkYXQocGdkYXQsIGFsbG9jX29yZGVyLFxcbm1tL3Ztc2Nhbi5jLTc0OTQtXFx0XFx0XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4KTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc1OTE9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYy03NjEwLVxcbm1tL3Ztc2Nhbi5jOjc2MTE6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNzYxMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6MjguMTI1Njg2NzYzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1MTUyOTcwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgUmVjbGFpbSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBicmFpbiB6ZXJvZXMgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQ6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YC4gVGhlc2UgYXJlIHRoZSBtZW1vcnkgcmVjbGFpbSBlbnRyeSBwb2ludHMuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIGBldmljdF9mb2xpb3NgLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltICp3aGVuKiBgQ09ORklHX0xSVV9HRU5gIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZHJpbGwgZG93bi5cblxuRXNzZW50aWFsbHksIGl0IGxvb2tzIGxpa2UgaXQncyB1cGRhdGluZyB0aGUgbm9kZSBwYWdlIHN0YXRlIOKAkyBzcGVjaWZpY2FsbHkgYE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlYCDigJMgd2l0aCB0aGUgY291bnQgb2YgaXNvbGF0ZWQgZm9saW9zIHdpdGhpbiBgZXZpY3RfZm9saW9zYCwgYW5kIHRoZW4gc3VidHJhY3RpbmcgaXQgYXQgdGhlIGVuZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBjbGVhciBmaXggZm9yIGhvdyBpc29sYXRlZCBmb2xpb3MgYXJlIGFjY291bnRlZCBmb3IgZHVyaW5nIE1HTFJVIGV2aWN0aW9uLCB3aGljaCBtZWFucyB0aGlzIGlzIHdvcnRoIHBheWluZyBhdHRlbnRpb24gdG8uIEl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nLlxuXG5NeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGB0eXBlYCB2YXJpYWJsZS4gV2hlcmUgZG9lcyB0aGF0IGNvbWUgZnJvbT8gSXQncyByZXR1cm5lZCBieSBgaXNvbGF0ZV9mb2xpb3NgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgY29udGV4dC4gQWxzbywgdGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIGlzb2xhdGVkIGZvbGlvcyB3ZXJlbid0IGJlaW5nIGNvcnJlY3RseSBhY2NvdW50ZWQgZm9yIGluIGBOUl9JU09MQVRFRF9BTk9OYCBhbmQgYE5SX0lTT0xBVEVEX0ZJTEVgIHdoaWxlIGlzb2xhdGVkLCB3aGljaCBpcyBhIGJpZyBkZWFsIGZvciBhY2N1cmF0ZSBtZW1vcnkgYWNjb3VudGluZy5cblxuVGhlIG9idmlvdXMgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyBhcmUgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YC4gTm93LCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGEgaG90IHBhdGggd2hlbiBtZW1vcnkgaXMgbG93LCB0aGF0J3MgYWxtb3N0IGFsd2F5cyBhIGdvb2QgdGFyZ2V0LiBCdXQgYXJlIHRoZXJlIG90aGVyIGVudHJ5IHBvaW50cz8gSSdtIHRoaW5raW5nIGFib3V0IGBrc3dhcGRgLCB0aGUga2VybmVsIHRocmVhZC4gSXQncyB0cmlnZ2VyZWQgYnkgbWVtb3J5IHByZXNzdXJlLCBzbyBhbnkgc3lzY2FsbHMgdGhhdCBnZW5lcmF0ZSBtZW1vcnkgcHJlc3N1cmUg4oCTIGxpa2UgYG1tYXBgLCBgbWFkdmlzZWAsIGBtbG9ja2AsIGBmYWxsb2NhdGVgLCBgd3JpdGVgIOKAkyBhcmUgYWxsIGV2ZW50dWFsbHkgZ29pbmcgdG8gaGl0IGB0cnlfdG9fZnJlZV9wYWdlc2AuIFRoaXMgaXMgY29yZSBNTSByZWNsYWltIGxvZ2ljLCBzbyBmdXp6aW5nIHNob3VsZCBzaW1wbHkgaW52b2x2ZSBtZW1vcnktaW50ZW5zaXZlIHdvcmtsb2FkcyB0byBleGVyY2lzZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocy4gSSB3aWxsIGZvY3VzIG9uIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBhcyB0aGUgbWFpbiBzeW1ib2xzIGZvciBmdXp6aW5nLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQncyBtYWtlIHN1cmUgYExSVV9HRU5gIGlzIGV2ZW4gZW5hYmxlZCBieSBkZWZhdWx0LiBBIHF1aWNrIGNoZWNrIG9mIGBtbS9LY29uZmlnYCBzaG93cyB0aGF0IGl0J3MgY29uZmlndXJhYmxlLCBhbmQgZGVwZW5kZW50IG9uIE1NVS4gV2Ugc2hvdWxkIGJlIHN1cmUgd2UgZW5hYmxlIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAuIFdpdGggdGhhdCBpbiBwbGFjZSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjAzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjM3LjY0MTAwMTUxMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMDg3MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOX0VOQUJMRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTE0MDE9Y29uZmlnIExSVV9HRU5cXG4tLVxcbm1tL0tjb25maWctMTQwOS1cXG5tbS9LY29uZmlnOjE0MTA6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxMS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6MzcuODAxMDk3OTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMjQ0MTY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBwYWdlIGdlbmVyYXRpb24sIGFuZCBJIG5lZWQgdG8gZ2V0IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGtub2JzIGFzc29jaWF0ZWQgd2l0aCBpdC4gQWgsIHllcywgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYOKAlHRoYXQncyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vay4gVGhvc2Ugc291bmQgZmFtaWxpYXIuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGxvY2F0aW9uIGludGVyYWN0cyB3aXRoIGlzb2xhdGluZyBmb2xpb3MuIFRoZSBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgaG93IGBpc29sYXRlX2ZvbGlvc2AgaXMgYmVpbmcgZGVmaW5lZCwgd2hpY2ggaW5jbHVkZXMgdW5kZXJzdGFuZGluZyB0aGUgYHR5cGVgIGRlZmluaXRpb24gaW4gdGhhdCBjb2RlIHBhdGguIFRoYXQgd2lsbCBtYWtlIGl0IGVhc2llciB0byByZWFzb24gYWJvdXQgdGhlIExSVSBnZW5lcmF0aW9uIHByb2Nlc3MgYW5kIGhvdyBpdCBpcyBiZWluZyBpbmZsdWVuY2VkIGJ5IGFsbG9jYXRpb24gc2V0dGluZ3MuIEdvb2QuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NzAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1Nzo0MC45MzM1NDM4NjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzODc5ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzb2xhdGVfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ3NTU9c3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00NzczLVxcbm1tL3Ztc2Nhbi5jOjQ3NzQ6c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00Nzc1LVxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLFxcbi0tXFxubW0vdm1zY2FuLmM9NDgwOD1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4MjktXFxubW0vdm1zY2FuLmM6NDgzMDpcXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcXG5tbS92bXNjYW4uYy00ODMxLVxcdFxcdFxcdFxcdCBcXHUwMDI2bGlzdCwgXFx1MDAyNmlzb2xhdGVkLCBcXHUwMDI2dHlwZSwgXFx1MDAyNnR5cGVfc2Nhbm5lZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjQxLjAyNzQzMzIzNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjM3MDUwMDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGb2xpbyBJc29sYXRpb24gaW4gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGhhbmRsaW5nIGZvbGlvIGlzb2xhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGB0eXBlYCB2YXJpYWJsZSwgZnJvbSB3aGF0IEkgY2FuIGdhdGhlciwgaXMgZWl0aGVyIGBMUlVfR0VOX0FOT05gICgwKSBvciBgTFJVX0dFTl9GSUxFYCAoMSkuIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gSXQgZGljdGF0ZXMgd2hldGhlciB3ZSdyZSBkZWFsaW5nIHdpdGggYW5vbnltb3VzIG1lbW9yeSBvciBmaWxlLWJhY2tlZCBtZW1vcnkuIFRoZSBleHByZXNzaW9uIGBOUl9JU09MQVRFRF9BTk9OICsgdHlwZWAgd2lsbCBldmFsdWF0ZSB0byBlaXRoZXIgYE5SX0lTT0xBVEVEX0FOT05gIG9yIGBOUl9JU09MQVRFRF9GSUxFYCwgcHJvdmlkaW5nIGFuIGVhc3kgbWVjaGFuaXNtIHRvIGNsYXNzaWZ5IHRoZSBpc29sYXRlZCBmb2xpb3MuXG5cbk5vdywgdGhlIG1haW4gZm9jdXMgaGVyZSBpcyBvbiB0aGUgYGV2aWN0X2ZvbGlvc2AgZnVuY3Rpb24uIFRoZSBwYXRjaCBzdWdnZXN0cyBhIHRlbXBvcmFyeSBtb2RpZmljYXRpb24gdG8gdGhlIG5vZGUgcGFnZSBzdGF0ZSB3aXRoaW4gYGV2aWN0X2ZvbGlvc2AuIEl0J3MgYWRkaW5nIHRoZSBudW1iZXIgb2YgaXNvbGF0ZWQgZm9saW9zLCBhbmQgaW1tZWRpYXRlbHkgc3VidHJhY3RpbmcgdGhlbSBiZWZvcmUgcmV0dXJuaW5nLiBUaGlzIGlzIGEgY3J1Y2lhbCBkZXRhaWwuIEl0IGluZGljYXRlcyB0aGF0IGBldmljdF9mb2xpb3NgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGFjY3VyYXRlbHkgcmVmbGVjdCB0aGUgc3RhdGUgb2YgaXNvbGF0ZWQgZm9saW9zLCBwYXJ0aWN1bGFybHkgZm9yIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGUgaWRlYSBpcyB0byBlbnN1cmUgdGhhdCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLCBsaWtlIGB0b29fbWFueV9pc29sYXRlZGAgaW4gY29tcGFjdGlvbiBvciB0aGUgVk0gc2Nhbm5lciwgc2VlIHRoZSBjb3JyZWN0IG51bWJlciBvZiBpc29sYXRlZCBmb2xpb3MuIFRoaXMgd291bGQgYmUgdG8gcHJldmVudCBpbmFjY3VyYXRlIGRlY2lzaW9uIG1ha2luZyBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbi5cblxuSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyB0aGF0IHRyaWdnZXIgdGhpcyBiZWhhdmlvci4gSXMgdGhlcmUgYSBzcGVjaWZpYyBzeXN0ZW0gY2FsbCBvciBhY3Rpb24gdGhhdCBpbml0aWF0ZXMgdGhpcyBpc29sYXRpb24gYW5kIGV2aWN0aW9uIHByb2Nlc3M/IEl0IHNlZW1zIG1lbW9yeSBwcmVzc3VyZSBpcyB0aGUgZHJpdmluZyBmb3JjZSBoZXJlLiBQZXJoYXBzIGBtYWR2aXNlKE1BRFZfUEFHRU9VVClgIGNvdWxkIGJlIGRpcmVjdGx5IGludm9sdmVkLCBhcyBpdCBjYW4gdHJpZ2dlciByZWNsYWltLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiBgbWFkdmlzZShNQURWX1BBR0VPVVQpYCBhY3R1YWxseSBjYWxscyBgc2hyaW5rX2ZvbGlvX2xpc3RgIG9yIGRpcmVjdGx5IGBldmljdF9mb2xpb3NgLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NTUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6NDcuMjY0NDg2NjY4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY0Nzk2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFEVl9QQUdFT1VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi92YWRkci5jPTg3OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl92YV9hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy04OTItXFx0Y2FzZSBEQU1PU19QQUdFT1VUOlxcbm1tL2RhbW9uL3ZhZGRyLmM6ODkzOlxcdFxcdG1hZHZfYWN0aW9uID0gTUFEVl9QQUdFT1VUO1xcbm1tL2RhbW9uL3ZhZGRyLmMtODk0LVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vbWFkdmlzZS5jPTEzMzg9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xMzU1LVxcdFxcdHJldHVybiBtYWR2aXNlX2NvbGQobWFkdl9iZWhhdmlvcik7XFxubW0vbWFkdmlzZS5jOjEzNTY6XFx0Y2FzZSBNQURWX1BBR0VPVVQ6XFxubW0vbWFkdmlzZS5jLTEzNTctXFx0XFx0cmV0dXJuIG1hZHZpc2VfcGFnZW91dChtYWR2X2JlaGF2aW9yKTtcXG4tLVxcbm1tL21hZHZpc2UuYz0xNTE4PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1MzEtXFx0Y2FzZSBNQURWX0NPTEQ6XFxubW0vbWFkdmlzZS5jOjE1MzI6XFx0Y2FzZSBNQURWX1BBR0VPVVQ6XFxubW0vbWFkdmlzZS5jLTE1MzMtXFx0Y2FzZSBNQURWX1BPUFVMQVRFX1JFQUQ6XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTU2Mj1zdGF0aWMgYm9vbCBwcm9jZXNzX21hZHZpc2VfcmVtb3RlX3ZhbGlkKGludCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTY1LVxcdGNhc2UgTUFEVl9DT0xEOlxcbm1tL21hZHZpc2UuYzoxNTY2OlxcdGNhc2UgTUFEVl9QQUdFT1VUOlxcbm1tL21hZHZpc2UuYy0xNTY3LVxcdGNhc2UgTUFEVl9XSUxMTkVFRDpcXG4tLVxcbm1tL21hZHZpc2UuYz0xNzQyPXN0YXRpYyBlbnVtIG1hZHZpc2VfbG9ja19tb2RlIGdldF9sb2NrX21vZGUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTc1MC1cXHRjYXNlIE1BRFZfQ09MRDpcXG5tbS9tYWR2aXNlLmM6MTc1MTpcXHRjYXNlIE1BRFZfUEFHRU9VVDpcXG5tbS9tYWR2aXNlLmMtMTc1Mi1cXHRjYXNlIE1BRFZfUE9QVUxBVEVfUkVBRDpcXG4tLVxcbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE5NjItICpcXHRcXHRlYXNpbHkgaWYgbWVtb3J5IHByZXNzdXJlIGhhcHBlbnMuXFxubW0vbWFkdmlzZS5jOjE5NjM6ICogIE1BRFZfUEFHRU9VVCAtIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgZXhwZWN0ZWQgdG8gdXNlIHRoaXMgbWVtb3J5IHNvb24sXFxubW0vbWFkdmlzZS5jLTE5NjQtICpcXHRcXHRwYWdlIG91dCB0aGUgcGFnZXMgaW4gdGhpcyByYW5nZSBpbW1lZGlhdGVseS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6NDcuMzgwOTcxNzU4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODc0OTQzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbWFkdmlzZV9wYWdlb3V0YCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gdGhpbmtpbmcgYWJvdXQgYG1hZHZpc2VfcGFnZW91dGAuIEl0J3MgcHJldHR5IGZ1bmRhbWVudGFsLCByaWdodD8gV2UncmUgZXNzZW50aWFsbHkgdGVsbGluZyB0aGUga2VybmVsIHRvIHRyeSBhbmQgcmVjbGFpbSBtZW1vcnkgdGhhdCdzIGJlZW4gbWFwcGVkLCBidXQgaXNuJ3QgYWN0aXZlbHkgYmVpbmcgdXNlZC4gVGhlIGltcGxpY2F0aW9ucyBoZXJlIGFyZSBodWdlLCBhbmQgSSdtIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdXNlIGNhc2VzIGluIG15IGhlYWQ6IHBvdGVudGlhbCBmb3IgaW1wcm92ZWQgbWVtb3J5IHV0aWxpemF0aW9uIGluIGEgc3lzdGVtIHdpdGggbWVtb3J5IHByZXNzdXJlLCBtaXRpZ2F0aW5nIG1lbW9yeSBsZWFrcyBvciBmcmFnbWVudGF0aW9uLCBhbmQgb3B0aW1pemluZyBwZXJmb3JtYW5jZSB1bmRlciB2YXJpb3VzIHdvcmtsb2Fkcy4gSSdtIHdvbmRlcmluZyBhYm91dCB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgb2YgY291cnNlLiBJcyBpdCBsZXZlcmFnaW5nIGRpcnR5IHBhZ2UgdHJhY2tpbmcgZWZmZWN0aXZlbHk/IFdoYXQncyB0aGUgZ3JhbnVsYXJpdHkgb2YgaXRzIGFjdGlvbnMgLSBwYWdlLCBvciByYW5nZXM/IEknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wYWN0OyBgbWFkdmlzZWAgY2FsbHMgYXJlbid0IGZyZWUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBiZW5jaG1hcmsgdGhpcyBhbmQgY29uc2lkZXIgdGhlIGNvc3QvYmVuZWZpdCB0cmFkZS1vZmZzLiBXaGF0J3MgdGhlIGJlc3Qgd2F5IHRvIGxldmVyYWdlIHRoaXMgQVBJP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI0NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjUwLjk2ODQ2OTUyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzUyMzEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX3BhZ2VvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz01OTU9c3RhdGljIGxvbmcgbWFkdmlzZV9jb2xkKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTYxMC1cXG5tbS9tYWR2aXNlLmM6NjExOnN0YXRpYyB2b2lkIG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxubW0vbWFkdmlzZS5jLTYxMi1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21hZHZpc2UuYy02MjUtXFxubW0vbWFkdmlzZS5jOjYyNjpzdGF0aWMgbG9uZyBtYWR2aXNlX3BhZ2VvdXQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTYyNy17XFxuLS1cXG5tbS9tYWR2aXNlLmMtNjQ1LVxcdHRsYl9nYXRoZXJfbW11KFxcdTAwMjZ0bGIsIG1hZHZfYmVoYXZpb3ItXFx1MDAzZW1tKTtcXG5tbS9tYWR2aXNlLmM6NjQ2OlxcdG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKFxcdTAwMjZ0bGIsIHZtYSwgXFx1MDAyNm1hZHZfYmVoYXZpb3ItXFx1MDAzZXJhbmdlKTtcXG5tbS9tYWR2aXNlLmMtNjQ3LVxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcbi0tXFxubW0vbWFkdmlzZS5jPTEzMzg9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xMzU2LVxcdGNhc2UgTUFEVl9QQUdFT1VUOlxcbm1tL21hZHZpc2UuYzoxMzU3OlxcdFxcdHJldHVybiBtYWR2aXNlX3BhZ2VvdXQobWFkdl9iZWhhdmlvcik7XFxubW0vbWFkdmlzZS5jLTEzNTgtXFx0Y2FzZSBNQURWX0ZSRUU6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjUxLjA1NTk5ODgyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTY4OTI5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgbWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2VgKipcblxuUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gXCJtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZVwiLi4uIFRoYXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBzcGVjaWZpYyBhcmVhIG9mIGludGVyZXN0OiBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGhvdyB3ZSdyZSBpbmZsdWVuY2luZyB0aGUgcGFnZS1vdXQgYmVoYXZpb3Igb2YgdGhlIGtlcm5lbC4gVGhpcyBpc24ndCBqdXN0IGEgZ2VuZXJpYyBgbWFkdmlzZWAgY2FsbDsgdGhlIFwicGFnZW91dFwiIGFzcGVjdCBpcyBjcml0aWNhbC4gU28sIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCB1c2UgY2FzZXMuIElzIHRoaXMgcmVsYXRlZCB0byB3b3JrbG9hZCBpc29sYXRpb24/IFBlcmZvcm1hbmNlIHR1bmluZyBmb3IgbWVtb3J5LWludGVuc2l2ZSBhcHBsaWNhdGlvbnM/IE9yIHBlcmhhcHMgd2UncmUgZXhwZXJpbWVudGluZyB3aXRoIG5vdmVsIG1lbW9yeSByZWNsYW1hdGlvbiBzdHJhdGVnaWVzP1xuXG5HaXZlbiB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGluc2lnaHRzIGludG8gYSBtZWNoYW5pc20gd2hlcmUgd2UgY2FuICpzcGVjaWZ5IGEgcmFuZ2UqIG9mIHBhZ2VzIGZvciB0aGUga2VybmVsIHRvIGNvbnNpZGVyIGZvciBwYWdpbmcgb3V0LiBUaGF0IGxldmVsIG9mIGNvbnRyb2wgaXMgaW50ZXJlc3RpbmcuIEl0IGNvdWxkIGJlIHVzZWQgdG8gcHJvYWN0aXZlbHkgcHVzaCBpbmFjdGl2ZSBwYWdlcyB0byBkaXNrLCBmcmVlaW5nIHVwIHBoeXNpY2FsIFJBTSBmb3IgbW9yZSBjcml0aWNhbCBkYXRhLiBDb252ZXJzZWx5LCBpdCBtaWdodCBiZSB1c2VkIHRvICpwcmV2ZW50KiBjZXJ0YWluIHBhZ2VzIGZyb20gYmVpbmcgZXZpY3RlZCwgcGVyaGFwcyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBkdXJpbmcgYSBjcml0aWNhbCBwaGFzZS5cblxuTXkgbWluZCBpcyBhbHJlYWR5IHJhY2luZyB3aXRoIHF1ZXN0aW9uczogV2hhdCdzIHRoZSBncmFudWxhcml0eSBvZiBjb250cm9sPyBJcyBpdCBwYWdlLWFsaWduZWQ/IEFyZSB0aGVyZSBhbnkgcmVzdHJpY3Rpb25zIG9uIHRoZSBtZW1vcnkgcmVnaW9ucyB3ZSBjYW4gaW5mbHVlbmNlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBOVU1BIHN5c3RlbXMsIGFuZCBob3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IG1lY2hhbmlzbXMsIGxpa2UgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBvciBLU00/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBgTUFEVl9QQUdFT1VUYCBhbmQgb3RoZXIgYG1hZHZpc2VgIGZsYWdzLCBidXQgdGhlIGBfcGFnZV9yYW5nZWAgcGFydCBpbmRpY2F0ZXMgdGhpcyBpcyBzb21ldGhpbmcgc3BlY2lhbGl6ZWQuIExldCdzIHNlZSBob3cgaXQgb3BlcmF0ZXMuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc291cmNlIGNvZGUsIHRyYWNlIGl0cyB1c2FnZSBwYXR0ZXJucyB3aXRoaW4gdGhlIGtlcm5lbCwgYW5kIHRoZW4gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgYmVuY2htYXJrcyBvciBkaXNjdXNzaW9ucyBhYm91dCBpdC4gTGV0J3Mgc2VlIHdoYXQncyBvdXQgdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODkzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6NTYuNTEyOTE0NDg4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjY1NjQxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTU5NT1zdGF0aWMgbG9uZyBtYWR2aXNlX2NvbGQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtNjEwLVxcbm1tL21hZHZpc2UuYzo2MTE6c3RhdGljIHZvaWQgbWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5tbS9tYWR2aXNlLmMtNjEyLVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWFkdmlzZS5jPTYyNj1zdGF0aWMgbG9uZyBtYWR2aXNlX3BhZ2VvdXQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtNjQ1LVxcdHRsYl9nYXRoZXJfbW11KFxcdTAwMjZ0bGIsIG1hZHZfYmVoYXZpb3ItXFx1MDAzZW1tKTtcXG5tbS9tYWR2aXNlLmM6NjQ2OlxcdG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKFxcdTAwMjZ0bGIsIHZtYSwgXFx1MDAyNm1hZHZfYmVoYXZpb3ItXFx1MDAzZXJhbmdlKTtcXG5tbS9tYWR2aXNlLmMtNjQ3LVxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1Nzo1Ni42MDk1Nzc1MTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzMjMyNjM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIGBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBzb3VyY2UgZm9yIGBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZWAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLCBhbmQgd2hhdCBpdHMgc3BlY2lmaWMgcHVycG9zZSBpcy4gSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggYG1hZHZpc2VgIGluIGdlbmVyYWwsIHRoZSBoaW50cyBpdCBwcm92aWRlcyB0byB0aGUga2VybmVsIGFib3V0IG1lbW9yeSB1c2FnZSwgYnV0IHRoaXMgcmFuZ2Utc3BlY2lmaWMgdmVyc2lvbiBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGRlc2lnbmVkIGZvciBtb3JlIHRhcmdldGVkIHBhZ2Utb3V0IG9wZXJhdGlvbnMuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBXaGF0J3MgdGhlIGNvbnRleHQgd2hlcmUgdGhpcyB3b3VsZCBiZSAqYmV0dGVyKiB0aGFuIGEgbW9yZSBnZW5lcmFsIGBNQURWX1BBR0VPVVRgIGFwcGxpZWQgdG8gdGhlIHdob2xlIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIHByb2Nlc3Mgb3IgYSBzdGFuZGFyZCBzeXN0ZW0td2lkZSBwYWdlLW91dCB0cmlnZ2VyPyBBbSBJIGxvb2tpbmcgYXQgc2l0dWF0aW9ucyB3aGVyZSBhbiBhcHBsaWNhdGlvbiBoYXMgYSBkZXRhaWxlZCBrbm93bGVkZ2Ugb2YgdGhlIG1lbW9yeSBpdCB3YW50cyB0byBldmljdCBhbmQgY2FuIHNpZ25hbCB0aGUga2VybmVsIHdpdGggYSBmaW5lciBsZXZlbCBvZiBncmFudWxhcml0eT8gSXMgdGhpcyBzb21ldGhpbmcgdGhhdCdzIG9ubHkgcmVsZXZhbnQgaW4gc3BlY2lmaWMgd29ya2xvYWRzP1xuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIERvZXMgaXQgYWxsb3cgZm9yIG1vcmUgZWZmaWNpZW50IHBhZ2UgcmVwbGFjZW1lbnQgYWxnb3JpdGhtcz8gRG9lcyBpdCBnaXZlIHRoZSB1c2VyIG1vcmUgY29udHJvbCBvdmVyIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHBhZ2VzLCB0aHVzIGF2b2lkaW5nIHVubmVjZXNzYXJ5IGRpc2sgSS9PPyBPciBkb2VzIHRoZSBvdmVyaGVhZCBvZiBjYWxsaW5nIHRoZSBmdW5jdGlvbiBhbmQgbWFuYWdpbmcgdGhlIHJhbmdlcyBkaW1pbmlzaCB0aGUgYmVuZWZpdCBpZiBpdCdzIG5vdCBoYW5kbGVkIHdlbGw/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGZvciBkZWFkbG9ja3Mgb3IgY29udGVudGlvbiwgZXNwZWNpYWxseSBpZiB0aGUgcGFnZXMgYXJlIGhlYXZpbHkgdXNlZC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBoYXBwZW5zIGlmIHRoZSBwcm9jZXNzIGNhbGxpbmcgaXQgaXMgbXVsdGktdGhyZWFkZWQuXG5cbkknbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGV0aWVzIGluIHRoZSBhcmd1bWVudCBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBob3cgZG9lcyBpdCBkZWFsIHdpdGggdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgYWRkcmVzc2VzLCBhbmQgd2hhdCBhcmUgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudHM/IEFyZSB0aGVyZSBzcGVjaWZpYyBlcnJvciBjYXNlcyB0byBjb25zaWRlciwgYW5kIGhvdyBhcmUgdGhvc2UgaGFuZGxlZCBieSB0aGUga2VybmVsP1xuXG5JbiBzdW1tYXJ5LCBteSBtYWluIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24ncyBjYXBhYmlsaXRpZXMsIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLCBhbmQgdGhlIHNjZW5hcmlvcyB3aGVyZSBpdCBzaG91bGQgKG9yIHNob3VsZG4ndCkgYmUgZW1wbG95ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTkyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTg6MDAuOTQxOTA3MzM1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tYWR2aXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjExLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjExOlxcdHN0YXRpYyB2b2lkIG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuIDYxMjpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gNjEzOlxcdFxcdFxcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yX3JhbmdlICpyYW5nZSlcXG4gNjE0OlxcdHtcXG4gNjE1OlxcdFxcdHN0cnVjdCBtYWR2aXNlX3dhbGtfcHJpdmF0ZSB3YWxrX3ByaXZhdGUgPSB7XFxuIDYxNjpcXHRcXHRcXHQucGFnZW91dCA9IHRydWUsXFxuIDYxNzpcXHRcXHRcXHQudGxiID0gdGxiLFxcbiA2MTg6XFx0XFx0fTtcXG4gNjE5OlxcdFxcbiA2MjA6XFx0XFx0dGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSk7XFxuIDYyMTpcXHRcXHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgcmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kLCBcXHUwMDI2Y29sZF93YWxrX29wcyxcXG4gNjIyOlxcdFxcdFxcdFxcdCAgICBcXHUwMDI2d2Fsa19wcml2YXRlKTtcXG4gNjIzOlxcdFxcdHRsYl9lbmRfdm1hKHRsYiwgdm1hKTtcXG4gNjI0OlxcdH1cXG4gNjI1OlxcdFxcbiA2MjY6XFx0c3RhdGljIGxvbmcgbWFkdmlzZV9wYWdlb3V0KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbiA2Mjc6XFx0e1xcbiA2Mjg6XFx0XFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xcbiA2Mjk6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtYWR2X2JlaGF2aW9yLVxcdTAwM2V2bWE7XFxuIDYzMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTg6MDAuOTQyMDYyNzM1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzAwNTc5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgY29sZF93YWxrX29wc2Agd2l0aGluIGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hYCwgYW5kIEkgc2VlIGl0J3MgdXNpbmcgYGNvbGRfd2Fsa19vcHNgLiAgVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBteSBleHBlcnQgYnJhaW4gdG8gemVybyBpbiBvbiB3aGF0IHRoYXQgbWVhbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgb3BlcmF0aW9uIHNldC4gSXMgdGhpcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50PyBQYWdlIHRhYmxlIG1hbmlwdWxhdGlvbj8gV2hhdCBkZWZpbmVzIFwiY29sZFwiIGluIHRoaXMgY29udGV4dD8gSXMgdGhpcyBhc3NvY2lhdGVkIHdpdGggYW4gTFJVIHN0cmF0ZWd5PyBJcyB0aGlzIGFib3V0IHRoZSBpbml0aWFsIG1hcHBpbmcgb2YgYSBWTUEgdmVyc3VzIGEgc3Vic2VxdWVudCBhY2Nlc3M/ICBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBjb2xkX3dhbGtfb3BzYCBhbmQgZmlndXJlIG91dCBob3cgaXQgZGlmZmVycyBmcm9tIG90aGVyIHdhbGsgb3BlcmF0aW9ucywgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3IgcGVyZm9ybWFuY2UsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIG9yIHdvcmtsb2FkIHNjZW5hcmlvcy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhlc2Ugd2Fsa2luZyBvcGVyYXRpb25zIGlzIGNydWNpYWwgZm9yIG9wdGltYWwgbWVtb3J5IHBlcmZvcm1hbmNlLCBzbyBsZXQncyBzdGFydCBkaXNzZWN0aW5nIGBjb2xkX3dhbGtfb3BzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU4OjA1LjA3MjEyNDcwNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc4NDM1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sZF93YWxrX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTM1Mz1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbi0tXFxubW0vbWFkdmlzZS5jLTU2Ny1cXG5tbS9tYWR2aXNlLmM6NTY4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcXG5tbS9tYWR2aXNlLmMtNTY5LVxcdC5wbWRfZW50cnkgPSBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UsXFxuLS1cXG5tbS9tYWR2aXNlLmM9NTczPXN0YXRpYyB2b2lkIG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tYWR2aXNlLmMtNTg0LVxcdHRsYl9zdGFydF92bWEodGxiLCB2bWEpO1xcbm1tL21hZHZpc2UuYzo1ODU6XFx0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCwgXFx1MDAyNmNvbGRfd2Fsa19vcHMsXFxubW0vbWFkdmlzZS5jLTU4Ni1cXHRcXHRcXHRcXHUwMDI2d2Fsa19wcml2YXRlKTtcXG4tLVxcbm1tL21hZHZpc2UuYz02MTE9c3RhdGljIHZvaWQgbWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21hZHZpc2UuYy02MjAtXFx0dGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSk7XFxubW0vbWFkdmlzZS5jOjYyMTpcXHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgcmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kLCBcXHUwMDI2Y29sZF93YWxrX29wcyxcXG5tbS9tYWR2aXNlLmMtNjIyLVxcdFxcdFxcdCAgICBcXHUwMDI2d2Fsa19wcml2YXRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTg6MDUuMTU5OTczNDAzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NTMxMzAyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGlzIGZ1bmN0aW9uOiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYC4gSSBrbm93IEkndmUgZW5jb3VudGVyZWQgdGhpcyBiZWZvcmU7IGl0IGRlYWxzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHVzZXIgaGludHMgYWJvdXQgcGFnZSB1c2FnZSwgcGFydGljdWxhcmx5IGFyb3VuZCBjb2xkIG9yIHBhZ2Utb3V0IGJlaGF2aW9ycy4gTGV0J3Mgc2VlLi4uIHRoZSBuYW1lIGl0c2VsZiBnaXZlcyBhd2F5IGEgYml0IG9mIGl0cyBwdXJwb3NlLiBJdCdzIGRlYWxpbmcgd2l0aCBhIHJhbmdlIG9mIFBURXMgKHBhZ2UgdGFibGUgZW50cmllcyksIHdoaWNoIG1lYW5zIGl0J3Mgd29ya2luZyBhdCBhIGZhaXJseSBsb3cgbGV2ZWwsIG1hbmFnaW5nIHRoZSBtYXBwaW5nIG9mIHZpcnR1YWwgbWVtb3J5IHRvIHBoeXNpY2FsIG1lbW9yeS4gU3BlY2lmaWNhbGx5LCBpdCdzIHRha2luZyBgbWFkdmlzZWAgaGludHMg4oCTIGxpa2VseSBgTUFEVl9DT0xEYCBvciBwb3RlbnRpYWxseSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgcGFnZS1vdXQgc3Vic3lzdGVtLCBqdWRnaW5nIGJ5IHRoZSBuYW1lIOKAkyBhbmQgYXBwbHlpbmcgdGhlbSB0byB0aG9zZSBlbnRyaWVzLiBUaGlzIGxpa2VseSBpbnZvbHZlcyB0aGluZ3MgbGlrZSBtYXJraW5nIHBhZ2VzIGFzIGxlc3MtcmVjZW50bHkgdXNlZCwgcG90ZW50aWFsbHkgdHJpZ2dlcmluZyBwYWdlLW91dCBhY3Rpdml0aWVzIHRvIGZyZWUgdXAgcGh5c2ljYWwgUkFNLCBvciBhbHRlcmluZyB0aGUgcGFnZSdzIGNhY2hpbmcgYmVoYXZpb3IuIFRoZSBjaGFsbGVuZ2UgaGVyZSBwcm9iYWJseSBsaWVzIGluIHRoZSBzeW5jaHJvbml6YXRpb24gcmVxdWlyZWQgdG8gbW9kaWZ5IHRoZXNlIFBURXMgc2FmZWx5LCBoYW5kbGluZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGggb3RoZXIgcHJvY2Vzc2VzIGFjY2Vzc2luZyB0aGUgc2FtZSBtZW1vcnkgcmFuZ2UsIGFuZCBlbnN1cmluZyB0aGUgY2hhbmdlcyBhcmUgY29oZXJlbnQgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIExldCdzIGRpZyBpbiBhbmQgc2VlIHRoZSBleGFjdCBtZWNoYW5pY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDc3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTg6MDkuNjEzMTA3MzU5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTkwOTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0zNDM9c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9mb2xpb19wdGVfYmF0Y2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zNTItXFxubW0vbWFkdmlzZS5jOjM1MzpzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbm1tL21hZHZpc2UuYy0zNTQtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21hZHZpc2UuYz01Njg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xcbm1tL21hZHZpc2UuYzo1Njk6XFx0LnBtZF9lbnRyeSA9IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSxcXG5tbS9tYWR2aXNlLmMtNTcwLVxcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODowOS43MTMwMjE2OTlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwMzg2MzgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBmbG93IGhlcmUuLi5cblxuKipEZWNvbnN0cnVjdGluZyBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UqKlxuXG5SaWdodCwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCB3b3JrcyBpbnRlcm5hbGx5LCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgZXZpY3RpbmcgcGFnZXMuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBpdCBkaXJlY3RseSBjYWxsIGBldmljdF9mb2xpb3NgPyBUaGF0IGRvZXNuJ3Qgc2VlbSByaWdodC4gTG9va2luZyBhdCB0aGUgY29kZSwgYGV2aWN0X2ZvbGlvc2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIG5vdCBhIGdsb2JhbCBmdW5jdGlvbiwgYW5kIEknZCBleHBlY3QgdGhhdCBraW5kIG9mIHV0aWxpdHkgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZyb20gdGhlIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyBpdCBkb2Vzbid0IGxvb2sgbGlrZSBpdCdzIGEgZGlyZWN0IGNhbGwuXG5cblNvLCBpZiBpdCdzIG5vdCBgZXZpY3RfZm9saW9zYCwgd2hhdCdzIGFjdHVhbGx5IGRvaW5nIHRoZSB3b3JrPyBJdCdzIGxpa2VseSB0aGF0IGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIGNhbGxzIGEgaGlnaGVyLWxldmVsIHJlY2xhaW0gZnVuY3Rpb24sIHNvbWV0aGluZyBsaWtlIGByZWNsYWltX3BhZ2VzYCBvciBhbm90aGVyIHNpbWlsYXIgZnVuY3Rpb24gdGhhdCBkZWFscyB3aXRoIHBhZ2UgZXZpY3Rpb24uIEl0J3MgdGhlIG1vc3QgbG9naWNhbCBwYXRoLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjYWxsIHN0YWNrIHRvIGNvbmZpcm0gdGhhdCwgYnV0IG15IGh1bmNoIGlzIHRoYXQgYHJlY2xhaW1fcGFnZXNgIG9yIGFuIGVxdWl2YWxlbnQgaXMgaGFuZGxpbmcgdGhlIGFjdHVhbCBwYWdlIGV2aWN0aW9uIHVuZGVyIHRoZSBob29kLiBJIHNob3VsZCBiZSBhYmxlIHRvIGNvbmZpcm0gd2l0aCBhIGJpdCBtb3JlIGNvZGUgZGl2aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTYzOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU4OjEzLjkxNjg5MDIxN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MTMwMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlY2xhaW1fcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3BhZGRyLmM9MjIwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjcxLVxcdFxcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XFxubW0vZGFtb24vcGFkZHIuYzoyNzI6XFx0YXBwbGllZCA9IHJlY2xhaW1fcGFnZXMoXFx1MDAyNmZvbGlvX2xpc3QpO1xcbm1tL2RhbW9uL3BhZGRyLmMtMjczLVxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubW0vaW50ZXJuYWwuaD0xMjA1PWV4dGVybiB1bnNpZ25lZCBsb25nICBfX211c3RfY2hlY2sgdm1fbW1hcF9wZ29mZihzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xMjA4LVxcbm1tL2ludGVybmFsLmg6MTIwOTp1bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCk7XFxubW0vaW50ZXJuYWwuaC0xMjEwLXVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL21hZHZpc2UuYz0zNTM9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21hZHZpc2UuYy00NDItXFx0XFx0aWYgKHBhZ2VvdXQpXFxubW0vbWFkdmlzZS5jOjQ0MzpcXHRcXHRcXHRyZWNsYWltX3BhZ2VzKFxcdTAwMjZmb2xpb19saXN0KTtcXG5tbS9tYWR2aXNlLmMtNDQ0LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vbWFkdmlzZS5jLTU2MS1cXHRpZiAocGFnZW91dClcXG5tbS9tYWR2aXNlLmM6NTYyOlxcdFxcdHJlY2xhaW1fcGFnZXMoXFx1MDAyNmZvbGlvX2xpc3QpO1xcbm1tL21hZHZpc2UuYy01NjMtXFx0Y29uZF9yZXNjaGVkKCk7XFxuLS1cXG5tbS92bXNjYW4uYz0yMTUwPXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjbGFpbV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0yMTY5LVxcdH1cXG5tbS92bXNjYW4uYzoyMTcwOlxcdHRyYWNlX21tX3Ztc2Nhbl9yZWNsYWltX3BhZ2VzKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYy5ucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFxcdTAwMjZzdGF0KTtcXG5tbS92bXNjYW4uYy0yMTcxLVxcbi0tXFxubW0vdm1zY2FuLmMtMjE3NC1cXG5tbS92bXNjYW4uYzoyMTc1OnVuc2lnbmVkIGxvbmcgcmVjbGFpbV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxcbm1tL3Ztc2Nhbi5jLTIxNzYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODoxNC4wNzQwMjkwNTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIwOTM2NzU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbmRlcnN0YW5kaW5nIFBhZ2UgUmVjbGFpbSBhbmQgTUdMUlUgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBsZXQncyBicmVhayBkb3duIHRoaXMgcGFnZSByZWNsYWltIHByb2Nlc3MuIEknbSBmb2xsb3dpbmcgdGhlIGNvZGUgcGF0aCwgYW5kIGhlcmUncyB3aGF0IEknbSBzZWVpbmc6IGByZWNsYWltX3BhZ2VzYCBpcyB0aGUgZW50cnkgcG9pbnQsIHdoaWNoIGxlYWRzIHRvIGByZWNsYWltX2ZvbGlvX2xpc3RgLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgYHJlY2xhaW1fZm9saW9fbGlzdGAgZXZlbnR1YWxseSBmdW5uZWwgaW50byBgZXZpY3RfZm9saW9zYCBmcm9tIE1HTFJVPyBObywgdGhhdCdzIG5vdCB0aGUgY2FzZS4gYGV2aWN0X2ZvbGlvc2AgaXMgcGFydCBvZiBNR0xSVSBhbmQgaXMgYWN0dWFsbHkgY2FsbGVkIHRocm91Z2ggYHNocmlua19scnV2ZWNgLiBTbywgYHJlY2xhaW1fcGFnZXNgIGJ5cGFzc2VzIHRoZSBNR0xSVSBwYXRoIGFuZCBnb2VzIGRpcmVjdGx5IHRvIHJlY2xhaW1pbmcgdGhlIGZvbGlvIGxpc3QuXG5cblRoYXQgY2xhcmlmaWVzIGEgY3J1Y2lhbCBwb2ludDogYG1hZHZpc2UoTUFEVl9QQUdFT1VUKWAgZG9lc24ndCB0cmlnZ2VyIGBldmljdF9mb2xpb3NgIGRpcmVjdGx5LiBUaGF0J3MgYSBrZXkgdGFrZWF3YXkuXG5cbklmIHRoZSBnb2FsIGlzIHRvIHRyaWdnZXIgYGV2aWN0X2ZvbGlvc2AsIHdlICptdXN0KiBoaXQgYHNocmlua19scnV2ZWNgLiBUaGF0J3MgZG9uZSB2aWEgYHRyeV90b19mcmVlX3BhZ2VzYCBvciB0aGUga2VybmVsJ3MgYGtzd2FwZGAgcHJvY2Vzcy4gU28gSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIHR3byBmdW5jdGlvbnMsIGFsb25nIHdpdGggYHNocmlua19hbGxfbWVtb3J5YCwgd2hlbiBsb29raW5nIGZvciB0cmlnZ2Vycy4gRm9yZ2V0IGFib3V0IGBtYWR2aXNlKE1BRFZfUEFHRU9VVClgIGZvciB0aGlzIHBhcnRpY3VsYXIgbmVlZC5cblxuSXQgc2VlbXMgd2UgY2FuIGRpcmVjdGx5IGNhbGwgYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLiBXYWl0LCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGNhbGxlZCBieSBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAuIEhtbS4gSXMgdGhlcmUgYW55IHN5c3RlbSBjYWxsIHRoYXQgZGlyZWN0bHkgdHJpZ2dlcnMgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgPyBJIHRoaW5rIHRoZXJlIGlzLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkuLi4gWWVzLCB1c2luZyBjZ3JvdXAgdjIsIHdyaXRpbmcgdG8gdGhlIGBtZW1vcnkucmVjbGFpbWAgZmlsZSB0cmlnZ2VycyB0aGF0IGZ1bmN0aW9uLiBMZXQncyBkaWcgaW50byBgbWVtb3J5LnJlY2xhaW1gIGFuZCBzZWUgd2hhdCBpdCBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU4NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODoyMC4yODM0MDAzOTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzgwOTk1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTc1PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTg1LVxcbm1tL2ludGVybmFsLmg6ODY6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9pbnRlcm5hbC5oLTg3LVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTc3Mj1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTgxNi1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTgxNzpcXHRcXHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXFxubW0vbWVtY29udHJvbC12MS5jLTE4MTgtXFx0XFx0XFx0XFx0bWVtc3cgPyAwIDogTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCkpIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xODM1PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTg1Mi1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTg1MzpcXHRcXHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXFxubW0vbWVtY29udHJvbC12MS5jLTE4NTQtXFx0XFx0XFx0XFx0XFx0XFx0ICBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yMzMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlY2xhaW1faGlnaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjM0OC1cXHRcXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxubW0vbWVtY29udHJvbC5jOjIzNDk6XFx0XFx0bnJfcmVjbGFpbWVkICs9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIG5yX3BhZ2VzLFxcbm1tL21lbWNvbnRyb2wuYy0yMzUwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI2MDA9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY1OS1cXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxubW0vbWVtY29udHJvbC5jOjI2NjA6XFx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXFxubW0vbWVtY29udHJvbC5jLTI2NjEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ3Nzg9c3RhdGljIHNzaXplX3QgbWVtb3J5X2hpZ2hfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ4MTYtXFxubW0vbWVtY29udHJvbC5jOjQ4MTc6XFx0XFx0cmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgbnJfcGFnZXMgLSBoaWdoLFxcbm1tL21lbWNvbnRyb2wuYy00ODE4LVxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwsIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ4MzQ9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDg3Mi1cXHRcXHRpZiAobnJfcmVjbGFpbXMpIHtcXG5tbS9tZW1jb250cm9sLmM6NDg3MzpcXHRcXHRcXHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIG5yX3BhZ2VzIC0gbWF4LFxcbm1tL21lbWNvbnRyb2wuYy00ODc0LVxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwsIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxcbi0tXFxubW0vdm1zY2FuLmM9Njc1Mz11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjc5Mi1cXG5tbS92bXNjYW4uYzo2NzkzOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjc5NC1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmMtNjgzMy0jZWxzZVxcbm1tL3Ztc2Nhbi5jOjY4MzQ6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS92bXNjYW4uYy02ODM1LVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS92bXNjYW4uYz03ODk2PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5NjctXFx0XFx0XFx0XFx0XFx0ICBNRU1DR19SRUNMQUlNX1BST0FDVElWRTtcXG5tbS92bXNjYW4uYzo3OTY4OlxcdFxcdFxcdHJlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csXFxubW0vdm1zY2FuLmMtNzk2OS1cXHRcXHRcXHRcXHRcXHRcXHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU4OjIwLjQ4NzIxNjI3N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg0NTQ5MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgUmVjbGFtYXRpb24gU3RyYXRlZ2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byBob3cgdGhpcyBtZW1vcnkgcmVjbGFtYXRpb24gaXMgd29ya2luZy4gTGV0J3Mgc2VlLi4uIEknbSBub3RpY2luZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIHdoaWNoIGlzIGNhbGxlZCBieSBgbWVtb3J5LnJlY2xhaW1gIHdyaXRlcywgYW5kIGFsc28gYG1lbW9yeV9oaWdoX3dyaXRlYCBhbmQgYG1lbW9yeV9tYXhfd3JpdGVgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSB0aGluayBmb2N1c2luZyBvbiBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgYSBzb2xpZCBtb3ZlLCBhbmQgYHRyeV90b19mcmVlX3BhZ2VzYCBjYWxsZWQgYnkgdGhlIHBhZ2UgYWxsb2NhdG9yIGlzIGFub3RoZXIga2V5IHBvaW50LlxuXG5SaWdodCwgc28gdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyB0aGlzIGZ1bmN0aW9uIGluIGBtbS92bXNjYW4uY2AsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUwMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODoyNC43NzE3NzA0ODVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDIwMzI3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTcwNT1leHRlcm4gdm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbik7XFxubW0vaW50ZXJuYWwuaDo3MDY6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL2ludGVybmFsLmgtNzA3LVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTAwNz1zdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDEyLVxcbm1tL21lbWNvbnRyb2wuYzo1MDEzOlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XFxubW0vbWVtY29udHJvbC5jLTUwMTQtXFx0aWYgKHJldClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4OTA9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNzg5NS1cXG5tbS92bXNjYW4uYzo3ODk2OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS92bXNjYW4uYy03ODk3LVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwNDk9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDU0LVxcbm1tL3Ztc2Nhbi5jOjgwNTU6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xcbm1tL3Ztc2Nhbi5jLTgwNTYtXFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODoyNC45MTE5NzkzMDRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2MTIyNzA1MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNR0xSVSBFdmljdGlvbiBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgYGV2aWN0X2ZvbGlvc2AgZnVuY3Rpb24sIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIHBhdGggd2l0aGluIGBDT05GSUdfTFJVX0dFTmAuICBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUga2VybmVsIG5lZWRzIHRvIGZyZWUgdXAgbWVtb3J5LCB0cmlnZ2VyZWQgZWl0aGVyIHJlYWN0aXZlbHkgZHVlIHRvIG1lbW9yeSBwcmVzc3VyZSwgb3IgcHJvYWN0aXZlbHksIGxpa2Ugd2hlbiBhIGNncm91cCdzIGBtZW1vcnkucmVjbGFpbWAgaXMgdXNlZCwgb3IgZXZlbiBkdXJpbmcgaGliZXJuYXRpb24gKHRob3VnaCB0aGF0J3MgaGFuZGxlZCBkaWZmZXJlbnRseSwgdmlhIGBzaHJpbmtfYWxsX21lbW9yeWApLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgZml4aW5nIGhvdyBpc29sYXRlZCBmb2xpb3MgYXJlIGFjY291bnRlZCBmb3IsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdGhlIG5vZGUgcGFnZSBzdGF0ZSAoTlJfSVNPTEFURURfQU5PTi9OUl9JU09MQVRFRF9GSUxFKS4gIExvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZiBhZ2FpbiwgeWVzLCBpdCdzIG1vZGlmeWluZyB0aGUgbG9naWMgcmVsYXRlZCB0byBgaXNvbGF0ZWRfb3JpZ2AgYW5kIHRoZSBub2RlIHBhZ2Ugc3RhdGUgdXBkYXRlcy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0IGltcGFjdHMgaG93IG1lbW9yeSBpcyByZWNsYWltZWQgYW5kIHRyYWNrZWQuICBJdCBjb3VsZCBpbnRyb2R1Y2Ugc29tZSB0cmlja3kgZWRnZSBjYXNlcywgYW5kIGl04oCZcyBzb21ldGhpbmcgd2Ugc2hvdWxkIGFic29sdXRlbHkgZnV6ei5cblxuSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgaW5jbHVkaW5nIGB0cnlfdG9fZnJlZV9wYWdlc2AgYXMgYSBmb2N1cyBzeW1ib2wgYmVjYXVzZSBpdOKAmXMgYSBob3QgcGF0aCwgYnV0IGZvY3VzaW5nIG9uIHByb2FjdGl2ZSByZWNsYWltIHBhdGhzIHZpYSBjZ3JvdXAgbWVtb3J5IHJlY2xhaW0sIHVzaW5nIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHNlZW1zIGxpa2UgYSBzbWFydGVyIG1vdmUuIEl0IGhpdHMgdGhlIHNhbWUgY29kZSBwYXRoIHdpdGhpbiBgZXZpY3RfZm9saW9zYCwgYnV0IHRhcmdldHMgYSBwb3RlbnRpYWxseSBsZXNzLWZyZXF1ZW50bHktdGVzdGVkIGFyZWEgYW5kIGRpcmVjdGx5IHJlbGF0ZWQgdG8gYSB1c2VyIHNwYWNlIHRyaWdnZXIuIEFuZCwgeWVzLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgYW4gZXhjZWxsZW50IGVudHJ5IHBvaW50IGFzIGl0J3MgZGlyZWN0bHkgdHJpZ2dlcmVkIGJ5IHVzZXJzcGFjZSBpbnRlcmFjdGlvbiB3aXRoIHN5c2ZzL2Nncm91cGZzLlxuXG5JJ3ZlIGFsc28gY2hlY2tlZCB0aGUgYExSVV9HRU5gIGNvbmZpZ3VyYXRpb24gYW5kIGl0cyBkZXBlbmRlbmNpZXMsIHdoaWNoIGFwcGVhciB0byBiZSBzdGFuZGFyZCBvbiB4ODZfNjQgc3lzdGVtcy4gIEdvb2QuXG5cblNvLCBoZXJlJ3MgdGhlIGZ1enppbmcgc2V0dXA6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gYmVjYXVzZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE1HTFJVIGV2aWN0aW9uIHBhdGgsIGNyaXRpY2FsIGZvciBtZW1vcnkgbWFuYWdlbWVudC5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgYWNjb3VudGluZyBmb3IgaXNvbGF0ZWQgZm9saW9zIHdpdGhpbiBgZXZpY3RfZm9saW9zYCwgYSBjb3JlIHBhcnQgb2YgbWVtb3J5IHJlY2xhaW0sIHNwZWNpZmljYWxseSB0aGUgbm9kZSBwYWdlIHN0YXRlLCBtYWtpbmcgaXQgYSBmdW5jdGlvbmFsIGNoYW5nZS5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCAtIHRvIHRhcmdldCB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYExSVV9HRU5gLCBgTFJVX0dFTl9FTkFCTEVEYCAtIHRoZXNlIGNvbmZpZ3MgYXJlIGVzc2VudGlhbCBmb3IgcnVubmluZyB0aGUgTUdMUlUgY29kZSB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjExLCJPdXRwdXRUb2tlbnMiOjEzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODozNi41MjQyNTMyOTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAyNTQ1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGV2aWN0aW9uIGxvZ2ljIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBpc29sYXRlZCBmb2xpb3MgaW4gdGhlIG5vZGUgcGFnZSBzdGF0ZSAoTlJfSVNPTEFURURfQU5PTiAvIE5SX0lTT0xBVEVEX0ZJTEUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRoIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBtZW1vcnkgcHJlc3N1cmUgb3IgcHJvYWN0aXZlIHJlY2xhaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZXZpY3Rpb24gbG9naWMgdG8gY29ycmVjdGx5IGFjY291bnQgZm9yIGlzb2xhdGVkIGZvbGlvcyBpbiB0aGUgbm9kZSBwYWdlIHN0YXRlIChOUl9JU09MQVRFRF9BTk9OIC8gTlJfSVNPTEFURURfRklMRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGggdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBwcmVzc3VyZSBvciBwcm9hY3RpdmUgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTg6MzYuNjk0NTE3MTI1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTEwODAwNzkzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU4OjM2LjY5NTQyMDQxNVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTEwNzA5OTg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGV2aWN0X2ZvbGlvc2AgaW4gYG1tL3Ztc2Nhbi5jYCB0byB0ZW1wb3JhcmlseSB1cGRhdGUgdGhlIG5vZGUgcGFnZSBzdGF0ZSAoYE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlYCkgd2l0aCB0aGUgbnVtYmVyIG9mIGlzb2xhdGVkIGZvbGlvcyBkdXJpbmcgZXZpY3Rpb24sIGFuZCB0aGVuIHJldmVydCBpdCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4gVGhlIHZhcmlhYmxlcyBpbnZvbHZlZCAoYGlzb2xhdGVkYCwgYHR5cGVgKSBhcmUgbG9jYWwgaW50ZWdlcnMuIGBpc29sYXRlZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCwgYW5kIGlmIGBpc29sYXRlX2ZvbGlvc2Agc2V0cyBpdCB0byBhIG5vbi16ZXJvIHZhbHVlLCBpdCBhbHNvIGluaXRpYWxpemVzIGB0eXBlYC4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdyBvciBjYWxjdWxhdGlvbnMuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYW5kIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgcGFnZSBzdGF0ZSBhY2NvdW50aW5nLCB3aGljaCBpcyBub3Qgc29tZXRoaW5nIEtNU0FOIGRldGVjdHMuIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHBhdGNoLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2MzM4YmE2ZTYwYzNkYzU0YmY3YzNhNTBjMmQ0NTkzMDIzNjM0YTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzo1Njo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGJjMzI0ZTM3YzVmMWYuLjcyM2I1MTM1NzRiM2QgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC00ODE3LDYgKzQ4MTcsNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG4gXHRpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkO1xuIFx0aW50IGlzb2xhdGVkID0gMCwgdHlwZSwgdHlwZV9zY2FubmVkO1xuK1x0aW50IGlzb2xhdGVkX29yaWcgPSAwO1xuIFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbkBAIC00ODI5LDYgKzQ4MzAsMTEgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcbiBcdFx0XHRcdCBcdTAwMjZsaXN0LCBcdTAwMjZpc29sYXRlZCwgXHUwMDI2dHlwZSwgXHUwMDI2dHlwZV9zY2FubmVkKTtcbiBcbitcdGlzb2xhdGVkX29yaWcgPSBpc29sYXRlZDtcbitcdGlmIChpc29sYXRlZClcbitcdFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgdHlwZSxcbitcdFx0XHRcdCAgICAgIGlzb2xhdGVkKTtcbitcbiBcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXG4gXHRpZiAoc2Nhbm5lZClcbiBcdFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XG5AQCAtNDg5MSw2ICs0ODk3LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuK1x0aWYgKGlzb2xhdGVkX29yaWcpXG4rXHRcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLFxuK1x0XHRcdFx0ICAgIC1pc29sYXRlZF9vcmlnKTtcbitcbiBcdHJldHVybiBzY2FubmVkO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU4OjM2LjY5NTQyMjQ5NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDUyOTMyMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZNU2NhbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYG1tL3Ztc2Nhbi5jYC4gSXQncyB0d2Vha2luZyB0aGUgYGV2aWN0X2ZvbGlvc2AgZnVuY3Rpb24sIHdoaWNoIGlzIGFsd2F5cyBhbiBpbnRlcmVzdGluZyBhcmVhLiBUaGUgZ2lzdCBvZiBpdCBpcyBhZGRpbmcgc29tZSBib29ra2VlcGluZyByZWxhdGVkIHRvIGlzb2xhdGVkIGZvbGlvcywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgd2UncmUgdHJ5aW5nIHRvIGltcHJvdmUgdGhlIGFjY3VyYWN5IG9mIG91ciBtZW1vcnkgYWNjb3VudGluZyBkdXJpbmcgcGFnZSBldmljdGlvbi5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSBhIG5ldyB2YXJpYWJsZSBjYWxsZWQgYGlzb2xhdGVkX29yaWdgIGJlaW5nIGludHJvZHVjZWQuIEl0J3MgaW5pdGlhbGl6ZWQgdG8gemVybywgdGhlbiBzZXQgdG8gdGhlIHZhbHVlIG9mIGBpc29sYXRlZGAgKmFmdGVyKiBgaXNvbGF0ZV9mb2xpb3NgIGlzIGNhbGxlZC4gVGhhdCB0ZWxscyBtZSBgaXNvbGF0ZV9mb2xpb3NgIGlzIGxpa2VseSBzZXR0aW5nIGBpc29sYXRlZGAsIHdoaWNoIHByb2JhYmx5IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBmb2xpb3MgdGhhdCB3ZXJlIGFjdHVhbGx5IHN1Y2Nlc3NmdWxseSBpc29sYXRlZC5cblxuVGhlbiwgdGhlcmUncyB0aGlzIGNvbmRpdGlvbmFsOiBpZiBgaXNvbGF0ZWRgIGlzIG5vbi16ZXJvIChtZWFuaW5nIGZvbGlvcyAqd2VyZSogaXNvbGF0ZWQpLCBpdCBjYWxscyBgX19tb2Rfbm9kZV9wYWdlX3N0YXRlYCB0byB1cGRhdGUgYSBub2RlIHBhZ2Ugc3RhdGUgY291bnRlciwgc3BlY2lmaWNhbGx5IGBOUl9JU09MQVRFRF9BTk9OICsgdHlwZWAuIEknbSBndWVzc2luZyBgdHlwZWAgZGVmaW5lcyB0aGUgdHlwZSBvZiBwYWdlIChlLmcuLCBhbm9ueW1vdXMsIGZpbGUtYmFja2VkKSBiZWluZyBpc29sYXRlZC4gTGF0ZXIsIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLCB0aGUgcGF0Y2ggc2VlbXMgdG8gKnVuZG8qIHRoaXMgYWRqdXN0bWVudCwgc3VidHJhY3RpbmcgdGhlIG9yaWdpbmFsIHZhbHVlIG9mIGBpc29sYXRlZGAgZnJvbSB0aGUgc2FtZSBjb3VudGVyLiBUaGlzIHN1Z2dlc3RzIHRoZSBpc29sYXRlZCBmb2xpb3MgYXJlIGJlaW5nIHJlY2xhaW1lZC5cblxuTXkgaW1tZWRpYXRlIGFzc2Vzc21lbnQgaXMgdGhpcyBwYXRjaCBpc24ndCBpbnRyb2R1Y2luZyBhbnl0aGluZyBkcmFzdGljIG9yIHJpc2t5LiBJdCBkb2Vzbid0IHNlZW0gdG8gY3JlYXRlIGFueSBuZXcgc3RydWN0dXJlcywgaXQncyBub3QgY29weWluZyBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYmVjYXVzZSB2YXJpYWJsZXMgYGlzb2xhdGVkYCwgYHR5cGVgLCBhbmQgYHR5cGVfc2Nhbm5lZGAgYXJlIHBhc3NlZCBieSByZWZlcmVuY2UgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSBgaXNvbGF0ZV9mb2xpb3NgIGZ1bmN0aW9uLiBCdXQsIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgYGlzb2xhdGVfZm9saW9zYCBhY3R1YWxseSB3b3JrcyB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBlbnN1cmUgdGhlcmUncyBubyBzdWJ0bGUgaW50ZXJhY3Rpb24gSSdtIG1pc3NpbmcuIFRoaXMgZmVlbHMgbGlrZSBhIHByZXR0eSB0YXJnZXRlZCB1cGRhdGUgdG8gbm9kZSBwYWdlIHN0YXRlIGZvciBtb3JlIGFjY3VyYXRlIGFjY291bnRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODo0Mi4xNDgzNTkzODRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzQ2Mjg1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc29sYXRlX2ZvbGlvc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00NzU1PXN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtNDc3My1cXG5tbS92bXNjYW4uYzo0Nzc0OnN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxubW0vdm1zY2FuLmMtNDc3NS1cXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4MDg9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00ODI5LVxcbm1tL3Ztc2Nhbi5jOjQ4MzA6XFx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXFxubW0vdm1zY2FuLmMtNDgzMS1cXHRcXHRcXHRcXHQgXFx1MDAyNmxpc3QsIFxcdTAwMjZpc29sYXRlZCwgXFx1MDAyNnR5cGUsIFxcdTAwMjZ0eXBlX3NjYW5uZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODo0Mi4yNTE4NTgxMTNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2MDExMTkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBpc29sYXRlX2ZvbGlvc2AgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGF0IGBpc29sYXRlX2ZvbGlvc2AgZnVuY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBkb2luZyB3aGF0IEkgZXhwZWN0IGl0IHRvLCBhbmQgZWZmaWNpZW50bHkuIEZpcnN0LCBJJ20gY2hlY2tpbmcgdGhlIGNvcmUgbG9naWMuIEFyZSB0aGUgZWRnZSBjYXNlcyBoYW5kbGVkIGNvcnJlY3RseT8gU3BlY2lmaWNhbGx5LCBhbSBJIHNlZWluZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggZW1wdHkgaW5wdXQgc2V0cywgbnVsbCB2YWx1ZXMsIG9yIHVuZXhwZWN0ZWQgZGF0YSBzdHJ1Y3R1cmVzPyBJJ20gbG9va2luZyBmb3IgYW55IHNob3J0Y3V0cyB0YWtlbiB0aGF0IG1pZ2h0IGludHJvZHVjZSBzdWJ0bGUgYnVncyBkb3duIHRoZSBsaW5lLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIHRoaXMgd2VyZSBtdWx0aS10aHJlYWRlZC4gSXMgaXQgdXRpbGl6aW5nIHRoZSBvcHRpbWFsIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIGV4cGVjdGVkIGlucHV0IHNpemU/IEFyZSB0aGVyZSBhcmVhcyB3aGVyZSBJIGNvdWxkIG9wdGltaXplIHRoZSBhbGdvcml0aG1zIHRvIGltcHJvdmUgc3BlZWQsIGV2ZW4gb24gbGFyZ2UgZm9saW9zPyBJJ2xsIGFsc28gYmUgY29uc2lkZXJpbmcgdGhlIG1haW50YWluYWJpbGl0eSBvZiB0aGlzIGNvZGUuIElzIGl0IHdlbGwtY29tbWVudGVkLCBtb2R1bGFyLCBhbmQgZWFzeSBmb3Igb3RoZXIgZGV2ZWxvcGVycywgb3IgZXZlbiBteXNlbGYgaW4gYSBmZXcgbW9udGhzLCB0byB1bmRlcnN0YW5kIGFuZCBtb2RpZnk/IEFueSBvcHBvcnR1bml0eSB0byByZWZhY3RvciBmb3IgY2xhcml0eSBvciB0byBlbmhhbmNlIHRlc3RhYmlsaXR5IGlzIHdvcnRoIGV4cGxvcmluZyByaWdodCBub3cuIEZpbmFsbHksIGFyZSB0aGUgdW5pdCB0ZXN0cyBzdWZmaWNpZW50LCBvciBzaG91bGQgSSB3cml0ZSBhIGZldyBtb3JlIGNvcm5lci1jYXNlIHRlc3RzIHRvIGNoZWNrIGl0cyBzdGFiaWxpdHk/IEkgbmVlZCB0byBiZSBjb25maWRlbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHByb2R1Y3Rpb24tcmVhZHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODo0Ni41MTE5NzQ1MTFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0Nzc0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0Nzc0OlxcdHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuNDc3NTpcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcXG40Nzc2OlxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCxcXG40Nzc3OlxcdFxcdFxcdFxcdCAgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKVxcbjQ3Nzg6XFx0e1xcbjQ3Nzk6XFx0XFx0aW50IGk7XFxuNDc4MDpcXHRcXHRpbnQgdG90YWxfc2Nhbm5lZCA9IDA7XFxuNDc4MTpcXHRcXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcXG40NzgyOlxcdFxcbjQ3ODM6XFx0XFx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUoaSwgc3dhcHBpbmVzcykge1xcbjQ3ODQ6XFx0XFx0XFx0aW50IHNjYW5uZWQ7XFxuNDc4NTpcXHRcXHRcXHRpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xcbjQ3ODY6XFx0XFxuNDc4NzpcXHRcXHRcXHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcXG40Nzg4OlxcdFxcdFxcdFxcdFxcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkKTtcXG40Nzg5OlxcdFxcbjQ3OTA6XFx0XFx0XFx0dG90YWxfc2Nhbm5lZCArPSBzY2FubmVkO1xcbjQ3OTE6XFx0XFx0XFx0aWYgKCppc29sYXRlZCkge1xcbjQ3OTI6XFx0XFx0XFx0XFx0Kmlzb2xhdGVfdHlwZSA9IHR5cGU7XFxuNDc5MzpcXHRcXHRcXHRcXHQqaXNvbGF0ZV9zY2FubmVkID0gc2Nhbm5lZDtcXG40Nzk0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQ3OTU6XFx0XFx0XFx0fVxcbjQ3OTY6XFx0XFx0XFx0LypcXG40Nzk3OlxcdFxcdFxcdCAqIElmIHNjYW5uZWQgXFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXFxuNDc5ODpcXHRcXHRcXHQgKiBvdGhlciB0eXBlLCBhcyB0aGlzIHR5cGUgcmVtYWlucyBzdWZmaWNpZW50LiBGYWxsaW5nIGJhY2tcXG40Nzk5OlxcdFxcdFxcdCAqIHRvbyByZWFkaWx5IGNhbiBkaXNydXB0IHRoZSBwb3NpdGl2ZV9jdHJsX2VycigpIGJpYXMuXFxuNDgwMDpcXHRcXHRcXHQgKi9cXG40ODAxOlxcdFxcdFxcdGlmICghc2Nhbm5lZClcXG40ODAyOlxcdFxcdFxcdFxcdHR5cGUgPSAhdHlwZTtcXG40ODAzOlxcdFxcdH1cXG40ODA0OlxcdFxcbjQ4MDU6XFx0XFx0cmV0dXJuIHRvdGFsX3NjYW5uZWQ7XFxuNDgwNjpcXHR9XFxuNDgwNzpcXHRcXG40ODA4OlxcdHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbjQ4MDk6XFx0XFx0XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxcbjQ4MTA6XFx0e1xcbjQ4MTE6XFx0XFx0TElTVF9IRUFEKGxpc3QpO1xcbjQ4MTI6XFx0XFx0TElTVF9IRUFEKGNsZWFuKTtcXG40ODEzOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuNDgxNDpcXHRcXHRzdHJ1Y3QgZm9saW8gKm5leHQ7XFxuNDgxNTpcXHRcXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XFxuNDgxNjpcXHRcXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XFxuNDgxNzpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xcbjQ4MTg6XFx0XFx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcXG40ODE5OlxcdFxcdGludCBpc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcXG40ODIwOlxcdFxcdGludCBpc29sYXRlZF9vcmlnID0gMDtcXG40ODIxOlxcdFxcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xcbjQ4MjI6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XFxuNDgyMzpcXHRcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU4OjQ2LjUxNDM0NjQzMVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Mjg4MTQ2NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBJbXBhY3Qgb24gVW5pbml0aWFsaXplZCBNZW1vcnkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcywgZ2l2ZW4gS01TQU4ncyByb2xlLiBgaXNvbGF0ZV9mb2xpb3NgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgaXQgc2VlbXMgdG8gdGFrZSBgaXNvbGF0ZWRgLCBgaXNvbGF0ZV90eXBlYCwgYW5kIGBpc29sYXRlX3NjYW5uZWRgIGJ5IHBvaW50ZXIuIEl0IGNhbGxzIGBzY2FuX2ZvbGlvc2AsIHdoaWNoIGlzIHRoZSBsaWtlbHkgc291cmNlIG9mIHRoaXMgZGF0YSwgYmVmb3JlIHNldHRpbmcgdGhlc2UgdmFsdWVzLiBJZiBgKmlzb2xhdGVkYCBpcyBub24temVybywgaW5kaWNhdGluZyBmb2xpb3MgKndlcmUqIGlzb2xhdGVkLCB0aGVuIGAqaXNvbGF0ZV90eXBlID0gdHlwZTtgIGFuZCBgKmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7YCBhcmUgc2V0LiBUaGlzIGxvb2tzIGltcG9ydGFudC5cblxuTXkgY29uY2VybiBpbml0aWFsbHkgd2FzIHRoZSBgdHlwZWAgdmFyaWFibGUuIElmIGAqaXNvbGF0ZWRgIGJlY29tZXMgbm9uLXplcm8gaW4gYGlzb2xhdGVfZm9saW9zYCwgdGhlIHZhbHVlIGlzIHNldCB0byBgdHlwZWAuIEJ1dCBgZXZpY3RfZm9saW9zYCBhbHNvIHVzZXMgdGhpcyB2YXJpYWJsZS4gSSBuZWVkZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIGB0eXBlYCAuIEkgY2FuIHNlZSBub3csIGBldmljdF9mb2xpb3NgIGluaXRpYWxpemVzIGBpc29sYXRlZGAgdG8gMC4gU28sIGB0eXBlYCBpcyBvbmx5IGV2ZXIgdXNlZCAqYWZ0ZXIqIGBpc29sYXRlX2ZvbGlvc2AgaGFzIHNldCBpdCwgd2hpY2ggaW1wbGllcyBhIHNhZmUgaW5pdGlhbGl6YXRpb24gcGF0aCBmb3IgdGhlIHZhbHVlIG9mIHR5cGUuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgY29kZSBpbiBgZXZpY3RfZm9saW9zYCwgdGhlcmUncyBhIGJsb2NrOlxuXG5gYGBjXG5cdGlzb2xhdGVkX29yaWcgPSBpc29sYXRlZDtcblx0aWYgKGlzb2xhdGVkKVxuXHRcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsXG5cdFx0XHRcdCAgICAgIGlzb2xhdGVkKTtcbmBgYFxuXG5TaW5jZSBgdHlwZWAgaXMgb25seSBldmVyIHVzZWQgKmlmKiBgaXNvbGF0ZWRgIGlzIG5vbi16ZXJvIChkdWUgdG8gdGhlIGBpZmAgc3RhdGVtZW50KSwgYW5kIGB0eXBlYCBpcyBpbml0aWFsaXplZCBpZiBgaXNvbGF0ZWRgIGlzIG5vbi16ZXJvIChmcm9tIHRoZSBgaXNvbGF0ZV9mb2xpb3NgIGNhbGwgcGF0aCksIHRoZXJlIGlzIG5vIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgaGVyZS4gVGhlIHBhdGNoIGRvZXNuJ3QgY3JlYXRlIGFueSBtZW1vcnkgcmlza3MsIGFuZCBteSBpbml0aWFsIGNvbmNlcm5zIGFyZSBhbGxldmlhdGVkLiBJdCdzIGp1c3QgcGFnZSBzdGF0ZSBhY2NvdW50aW5nLCBhbmQgdGhhdCBpcyBub3Qgd2hhdCBLTVNBTiBkZXRlY3RzLlxuXG5UaGlzIHBhdGNoIHNpbXBseSB1cGRhdGVzIHRoZSBub2RlIHBhZ2Ugc3RhdGUgYnkgdXBkYXRpbmcgdGhlIHBhZ2Ugc3RhdGUgKGBOUl9JU09MQVRFRF9BTk9OICsgdHlwZWApIHdpdGggdGhlIG51bWJlciBvZiBpc29sYXRlZCBmb2xpb3MgZHVyaW5nIGV2aWN0aW9uIGFuZCB0aGVuIHJldmVydHMgaXQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uXG5UaGUgbG9jYWwgaW50ZWdlciB2YXJpYWJsZXMgaW52b2x2ZWQgKGBpc29sYXRlZGAsIGB0eXBlYCkgYXJlIGNsZWFybHkgaW5pdGlhbGl6ZWQuIGBpc29sYXRlZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCwgYW5kIGlmIGBpc29sYXRlX2ZvbGlvc2Agc2V0cyBpdCB0byBhIG5vbi16ZXJvIHZhbHVlLCBpdCB0aGVuIGFsc28gaW5pdGlhbGl6ZXMgYHR5cGVgLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYXMgYW55IHBvdGVudGlhbCBidWdzIGFyZSByZWxhdGVkIHRvIGluY29ycmVjdCBwYWdlIHN0YXRlIGFjY291bnRpbmcsIHdoaWNoIGNhbiBiZSBoYW5kbGVkIHdpdGggS0FTQU4gb3IgbW9yZSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMuXG5cblNvLCB0aGlzIHBhdGNoIGRvZXMgKm5vdCogbmVlZCBLTVNBTi4gSXQncyBzYWZlIGluIHRlcm1zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzA0LCJPdXRwdXRUb2tlbnMiOjIwMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU4OjU1LjgwMjQ5NjJaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBldmljdF9mb2xpb3NgIGluIGBtbS92bXNjYW4uY2AgdG8gdGVtcG9yYXJpbHkgdXBkYXRlIHRoZSBub2RlIHBhZ2Ugc3RhdGUgKGBOUl9JU09MQVRFRF9BTk9OICsgdHlwZWApIHdpdGggdGhlIG51bWJlciBvZiBpc29sYXRlZCBmb2xpb3MgZHVyaW5nIGV2aWN0aW9uLCBhbmQgdGhlbiByZXZlcnQgaXQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgKGBpc29sYXRlZGAsIGB0eXBlYCkgYXJlIGxvY2FsIGludGVnZXJzLiBgaXNvbGF0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBpZiBgaXNvbGF0ZV9mb2xpb3NgIHNldHMgaXQgdG8gYSBub24temVybyB2YWx1ZSwgaXQgYWxzbyBpbml0aWFsaXplcyBgdHlwZWAuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY2FsY3VsYXRpb25zLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHBhZ2Ugc3RhdGUgYWNjb3VudGluZywgd2hpY2ggaXMgbm90IHNvbWV0aGluZyBLTVNBTiBkZXRlY3RzLiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZXZpY3RfZm9saW9zYCBpbiBgbW0vdm1zY2FuLmNgIHRvIHRlbXBvcmFyaWx5IHVwZGF0ZSB0aGUgbm9kZSBwYWdlIHN0YXRlIChgTlJfSVNPTEFURURfQU5PTiArIHR5cGVgKSB3aXRoIHRoZSBudW1iZXIgb2YgaXNvbGF0ZWQgZm9saW9zIGR1cmluZyBldmljdGlvbiwgYW5kIHRoZW4gcmV2ZXJ0IGl0IGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLiBUaGUgdmFyaWFibGVzIGludm9sdmVkIChgaXNvbGF0ZWRgLCBgdHlwZWApIGFyZSBsb2NhbCBpbnRlZ2Vycy4gYGlzb2xhdGVkYCBpcyBpbml0aWFsaXplZCB0byAwLCBhbmQgaWYgYGlzb2xhdGVfZm9saW9zYCBzZXRzIGl0IHRvIGEgbm9uLXplcm8gdmFsdWUsIGl0IGFsc28gaW5pdGlhbGl6ZXMgYHR5cGVgLiBUaHVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGNhbGN1bGF0aW9ucy4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGluY29ycmVjdCBwYWdlIHN0YXRlIGFjY291bnRpbmcsIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgS01TQU4gZGV0ZWN0cy4gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgcGF0Y2guXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz59mm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 07:27:17 +0000 UTC FinishedAt: 2026-08-11 07:58:57 +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": "b1c9c30778acba94101e0bceb2bc747a49cf0323", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "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": "b1c9c30778acba94101e0bceb2bc747a49cf0323", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "b95fa5d3-a670-49ec-afc0-b9cf6766fbbc" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "user_proactive_reclaim", "try_to_free_mem_cgroup_pages" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGV2aWN0X2ZvbGlvc2AgaW4gYG1tL3Ztc2Nhbi5jYCB0byB0ZW1wb3JhcmlseSB1cGRhdGUgdGhlIG5vZGUgcGFnZSBzdGF0ZSAoYE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZWApIHdpdGggdGhlIG51bWJlciBvZiBpc29sYXRlZCBmb2xpb3MgZHVyaW5nIGV2aWN0aW9uLCBhbmQgdGhlbiByZXZlcnQgaXQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgKGBpc29sYXRlZGAsIGB0eXBlYCkgYXJlIGxvY2FsIGludGVnZXJzLiBgaXNvbGF0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBpZiBgaXNvbGF0ZV9mb2xpb3NgIHNldHMgaXQgdG8gYSBub24temVybyB2YWx1ZSwgaXQgYWxzbyBpbml0aWFsaXplcyBgdHlwZWAuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY2FsY3VsYXRpb25zLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHBhZ2Ugc3RhdGUgYWNjb3VudGluZywgd2hpY2ggaXMgbm90IHNvbWV0aGluZyBLTVNBTiBkZXRlY3RzLiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBldmljdGlvbiBsb2dpYyB0byBjb3JyZWN0bHkgYWNjb3VudCBmb3IgaXNvbGF0ZWQgZm9saW9zIGluIHRoZSBub2RlIHBhZ2Ugc3RhdGUgKE5SX0lTT0xBVEVEX0FOT04gLyBOUl9JU09MQVRFRF9GSUxFKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aCB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgbWVtb3J5IHByZXNzdXJlIG9yIHByb2FjdGl2ZSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODYzMzhiYTZlNjBjM2RjNTRiZjdjM2E1MGMyZDQ1OTMwMjM2MzRhN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA3OjU2OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGJjMzI0ZTM3YzVmMWYuLjcyM2I1MTM1NzRiM2QgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC00ODE3LDYgJiM0Mzs0ODE3LDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xuIFx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcbiBcdGludCBpc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcbiYjNDM7XHRpbnQgaXNvbGF0ZWRfb3JpZyA9IDA7XG4gXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuQEAgLTQ4MjksNiAmIzQzOzQ4MzAsMTEgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcbiBcdFx0XHRcdCBcdTAwMjZsaXN0LCBcdTAwMjZpc29sYXRlZCwgXHUwMDI2dHlwZSwgXHUwMDI2dHlwZV9zY2FubmVkKTtcbiBcbiYjNDM7XHRpc29sYXRlZF9vcmlnID0gaXNvbGF0ZWQ7XG4mIzQzO1x0aWYgKGlzb2xhdGVkKVxuJiM0MztcdFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgaXNvbGF0ZWQpO1xuJiM0MztcbiBcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXG4gXHRpZiAoc2Nhbm5lZClcbiBcdFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XG5AQCAtNDg5MSw2ICYjNDM7NDg5NywxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoaXNvbGF0ZWRfb3JpZylcbiYjNDM7XHRcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgLWlzb2xhdGVkX29yaWcpO1xuJiM0MztcbiBcdHJldHVybiBzY2FubmVkO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBldmljdGlvbiBsb2dpYyB0byBjb3JyZWN0bHkgYWNjb3VudCBmb3IgaXNvbGF0ZWQgZm9saW9zIGluIHRoZSBub2RlIHBhZ2Ugc3RhdGUgKE5SX0lTT0xBVEVEX0FOT04gLyBOUl9JU09MQVRFRF9GSUxFKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aCB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgbWVtb3J5IHByZXNzdXJlIG9yIHByb2FjdGl2ZSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODYzMzhiYTZlNjBjM2RjNTRiZjdjM2E1MGMyZDQ1OTMwMjM2MzRhNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDA3OjU2OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiYzMyNGUzN2M1ZjFmLi43MjNiNTEzNTc0YjNkIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNDgxNyw2ICYjNDM7NDgxNyw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CiAJaW50IHNjYW5uZWQsIHJlY2xhaW1lZDsKIAlpbnQgaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7CiYjNDM7CWludCBpc29sYXRlZF9vcmlnID0gMDsKIAlib29sIHNraXBfcmV0cnkgPSBmYWxzZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7CkBAIC00ODI5LDYgJiM0Mzs0ODMwLDExIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCXNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLAogCQkJCSAmYW1wO2xpc3QsICZhbXA7aXNvbGF0ZWQsICZhbXA7dHlwZSwgJmFtcDt0eXBlX3NjYW5uZWQpOwogCiYjNDM7CWlzb2xhdGVkX29yaWcgPSBpc29sYXRlZDsKJiM0MzsJaWYgKGlzb2xhdGVkKQomIzQzOwkJX19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsCiYjNDM7CQkJCSAgICAgIGlzb2xhdGVkKTsKJiM0MzsKIAkvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqLwogCWlmIChzY2FubmVkKQogCQl0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTsKQEAgLTQ4OTEsNiAmIzQzOzQ4OTcsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWdvdG8gcmV0cnk7CiAJfQogCiYjNDM7CWlmIChpc29sYXRlZF9vcmlnKQomIzQzOwkJbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyB0eXBlLAomIzQzOwkJCQkgICAgLWlzb2xhdGVkX29yaWcpOwomIzQzOwogCXJldHVybiBzY2FubmVkOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2bXNjYW4uYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgcG9raW5nIGFyb3VuZCBpbiBgbW0vdm1zY2FuLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBldmljdF9mb2xpb3NgIGZ1bmN0aW9uLiBNeSBzcGlkZXktc2Vuc2UgaXMgYWxyZWFkeSB0aW5nbGluZyBhIGJpdCwgYXMgYW55IGNoYW5nZSB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBlc3BlY2lhbGx5IHNvbWV0aGluZyB0aGF0IGRlYWxzIHdpdGggZXZpY3Rpb24sIGlzIHNvbWV0aGluZyBJIHdhbnQgdG8gc2NydXRpbml6ZSBjbG9zZWx5LgoKVGhlIGtleSBzZWVtcyB0byBiZSB0aGUgYWRkaXRpb24gb2YgdGhpcyBgaXNvbGF0ZWRfb3JpZ2AgdmFyaWFibGUuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHRyYWNraW5nIHNvbWUgb3JpZ2luYWwgaXNvbGF0ZWQgY291bnQsIGFuZCB0aGVuIHVwZGF0aW5nIHRoZSBub2RlIHBhZ2Ugc3RhdGUgYE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZWAgd2l0aCBhIG5ldyBgaXNvbGF0ZWRgIGNvdW50LCBhbmQgdGhlbiAqc3VidHJhY3RpbmcqIHRoZSBgaXNvbGF0ZWRfb3JpZ2AgdmFsdWUuIFRoaXMgZmVlbHMgbGlrZSB3ZSYjMzk7cmUgZG9pbmcgc29tZSBib29ra2VlcGluZyBhcm91bmQgcGFnZSBpc29sYXRpb24sIHdoaWNoIGlzIGEgY29yZSBjb21wb25lbnQgb2YgaG93IE1HTFJVIHdvcmtzLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGdpdmVuIGl0cyBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCBNR0xSVeKAmXMgZXZpY3Rpb24gcm91dGluZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtb2RpZmljYXRpb24gaW4gZGV0YWlsLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgZXZpY3RfZm9saW9zYCBmdW5jdGlvbiB3aXRoaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgc2VlIGhvdyB0aGlzIG5ldyB2YXJpYWJsZSBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgTUdMUlUgaGFuZGxlcyBwYWdlIGlzb2xhdGlvbiBhbmQgZXZpY3Rpb24uIFRpbWUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ3NzQ9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00ODA3LVxubW0vdm1zY2FuLmM6NDgwODpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ4MDktXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTQ5OTA9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDEzLVx0XHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjUwMTQ6XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUwMTUtXHRcdGlmICghZGVsdGEpXG4tLVxubW0vdm1zY2FuLmM9NTYxNz1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01NjM3LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjU2Mzg6XHRcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTU2MzktXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTUdMUlUmIzM5O3MgQWN0aXZhdGlvbiBQYXRoKioKCk9rYXksIHNvIGBldmljdF9mb2xpb3NgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlLCBnZXR0aW5nIGNhbGxlZCBmcm9tIGJvdGggYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgYHJ1bl9ldmljdGlvbmAuIFJpZ2h0LCB0aGF0JiMzOTtzIHdpdGhpbiB0aGUgTFJVIGdlbmVyYXRpb24gZnVuY3Rpb25hbGl0eSDigJMgc3BlY2lmaWNhbGx5LCB0aGUgTUdMUlUgZmVhdHVyZS4gTXkgcXVlc3Rpb24gaXMsIGlzIE1HTFJVIG9uIGJ5IGRlZmF1bHQsIG9yIGlzIHRoZXJlIGEgc3BlY2lmaWMga2VybmVsIGNvbmZpZyB0aGF0IGVuYWJsZXMgaXQ/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0uIEdpdmVuIGl0JiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQsIGBtbS9LY29uZmlnYCBpcyB0aGUgbW9zdCBsaWtlbHkgbG9jYXRpb24gZm9yIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIHBlcmhhcHMgaXQmIzM5O3MgZGVmaW5lZCBhbmQgY29uZGl0aW9uYWwgaW4gYG1tL3Ztc2Nhbi5jYC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5MD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAwLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDE6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwMi1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQwOS1cbm1tL0tjb25maWc6MTQxMDpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTEtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE1LVxubW0vS2NvbmZpZzoxNDE2OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MTctXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyNC1cbm1tL0tjb25maWc6MTQyNTpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyNi1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjE3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBFdmljdGlvbiBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBidWlsdCBhcm91bmQgdHdvIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZXJwbGF5IGFuZCB3aGF0IGltcGFjdCB0aGV5IGhhdmUuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IGBMUlVfR0VOYCBwcm9iYWJseSBkZWZpbmVzIHRoZSBmcmFtZXdvcmsgaXRzZWxmLCB3aGlsZSBgTFJVX0dFTl9FTkFCTEVEYCBpcyBsaWtlbHkgYSBydW50aW1lIHRvZ2dsZS4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgaG93IHRoZSBmb2xpbyBldmljdGlvbiBtZWNoYW5pc20sIHNwZWNpZmljYWxseSBgZXZpY3RfZm9saW9zYCwgaXMgaGFuZGxlZCB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgZXZpY3RfZm9saW9zYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIHdoZXRoZXIgYENPTkZJR19MUlVfR0VOYCBpcyBkZWZpbmVkLiBUaGlzIHdpbGwgcmV2ZWFsIGlmIHRoZSBldmljdGlvbiBzdHJhdGVneSBpcyBmdW5kYW1lbnRhbGx5IGxpbmtlZCB0byB0aGUgYExSVV9HRU5gIGZyYW1ld29yayBvciBpZiBpdCYjMzk7cyBhIG1vcmUgaW5kZXBlbmRlbnQgY29tcG9uZW50IHRoYXQgKm1pZ2h0KiBiZSB1c2VkIHdpdGggb3RoZXIgY29uZmlndXJhdGlvbnMuIEkgbXVzdCB1bmRlcnN0YW5kIHRoaXMgdG8gc2VlIHRoZSBvdmVyYWxsIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19MUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9ODI1PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODMwLVxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtODMyLS8qXG4tLVxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS92bXNjYW4uYy04NTctfVxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtODU5LVxuLS1cbm1tL3Ztc2Nhbi5jPTI2MTY9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy0yNjI3LVxubW0vdm1zY2FuLmM6MjYyODojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTI2MjktXG5tbS92bXNjYW4uYz0yNjMwPURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmM6MjYzMTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmMtMjYzMi1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbi0tXG5tbS92bXNjYW4uYz0yODE2PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4MzUtXG5tbS92bXNjYW4uYzoyODM2OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI4MzctXG4tLVxubW0vdm1zY2FuLmM9Mjk0NT12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTczLVxubW0vdm1zY2FuLmM6Mjk3NDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXG5tbS92bXNjYW4uYy0yOTc1LVxuLS1cbm1tL3Ztc2Nhbi5jPTU4ODY9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xubW0vdm1zY2FuLmMtNTg4Ny1cbm1tL3Ztc2Nhbi5jOjU4ODg6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy01ODg5LVxuLS1cbm1tL3Ztc2Nhbi5jPTU5MDA9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTA0LVxubW0vdm1zY2FuLmM6NTkwNTojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTU5MDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU2MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBldmljdF9mb2xpb3NgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCB5ZXAsIGBldmljdF9mb2xpb3NgIGlzIHJpZ2h0IGFyb3VuZCBsaW5lIDQ4MDgsIHdoaWNoIGZhbGxzIHNtYWNrIGRhYiBiZXR3ZWVuIGxpbmVzIDI2MjggYW5kIDU4ODgsIHdoZXJlIHRoYXQgYCNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL2AgYml0IGlzLiBUaGF0IHRlbGxzIG1lIHRoYXQgdGhpcyBmdW5jdGlvbiYjMzk7cyBnb2luZyB0byBuZWVkIGBDT05GSUdfTFJVX0dFTmAgZW5hYmxlZCB0byBldmVuIGJlIGluIHBsYXkuIFNlZW1zIGxvZ2ljYWwsIGdpdmVuIHRoZSBuYW1lLiBUbyBtYWtlIHRoZSBmdW5jdGlvbiBhY3RpdmUgYnkgZGVmYXVsdCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgaXMgYWxzbyBwcm9iYWJseSBpbXBvcnRhbnQuCgpOZXh0LCBJIG5lZWQgdG8ga25vdyB0aGUgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiB5ZXAsIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLiBTbywgd2hvJiMzOTtzICpjYWxsaW5nKiBpdD8gSSBuZWVkIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgdXNlIGBldmljdF9mb2xpb3NgLiBPa2F5LCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgICppcyogc3RhdGljLiBTYW1lIHdpdGggYHJ1bl9ldmljdGlvbmAuIE5vdyBJIG5lZWQgdG8gdHJhY2UgKnVwd2FyZCogdG8gc2VlIHdoZXJlIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDk1NT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5ODktICovXG5tbS92bXNjYW4uYzo0OTkwOnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy00OTkxLXtcbi0tXG5tbS92bXNjYW4uYz01MDM1PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwNTQtXG5tbS92bXNjYW4uYzo1MDU1Olx0bmVlZF9yb3RhdGUgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUwNTYtXG4tLVxubW0vdm1zY2FuLmM9NTE0Nj1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTU4LVxubW0vdm1zY2FuLmM6NTE1OTpcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jLTUxNjAtXHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqVHJhY2luZyBgc2hyaW5rX29uZWAgYW5kIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHplcm9pbmcgaW4gb24gYHNocmlua19vbmVgIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYC4gVGhlc2UgYXJlIHRoZSB0d28gZnVuY3Rpb25zIEkgd2FudCB0byBmb2xsb3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IHdvcmsgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlciB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yIHRyeWluZyB0byBkZWJ1ZyBzb21ldGhpbmcgc3BlY2lmaWMsIHNvIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb25zIGlzIGtleS4gSSBuZWVkIHRvIHNlZSBob3cgYHNocmlua19vbmVgIGFmZmVjdHMgdGhlIExSVSBjYWNoZSByZXByZXNlbnRlZCBieSBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYC4gSXMgaXQgYSBkaXJlY3QgY2FsbCwgb3Igc29tZXRoaW5nIG1vcmUgaW5kaXJlY3Q/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGhzIGZvciBlYWNoLCBhbmQgdGhlbiBwZXJoYXBzIHN0ZXAgdGhyb3VnaCB0aGVpciBleGVjdXRpb24gdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIGRhdGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX29uZXxscnVfZ2VuX3Nocmlua19scnV2ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00OTkwPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTAzNC1cbm1tL3Ztc2Nhbi5jOjUwMzU6c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MDM2LXtcbi0tXG5tbS92bXNjYW4uYz01MDc2PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxMTctXG5tbS92bXNjYW4uYzo1MTE4Olx0XHRvcCA9IHNocmlua19vbmUobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01MTE5LVxuLS1cbm1tL3Ztc2Nhbi5jLTUxNDUtXG5tbS92bXNjYW4uYzo1MTQ2OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTE0Ny17XG4tLVxubW0vdm1zY2FuLmM9NTE2Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxOTMtXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxubW0vdm1zY2FuLmM6NTE5NDpcdFx0c2hyaW5rX29uZShcdTAwMjZwZ2RhdC1cdTAwM2VfX2xydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNTE5NS1cdGVsc2Vcbi0tXG5tbS92bXNjYW4uYz01ODkwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTg5NC1cbm1tL3Ztc2Nhbi5jOjU4OTU6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01ODk2LXtcbi0tXG5tbS92bXNjYW4uYz01OTA3PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01OTE4LVx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jOjU5MTk6XHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTU5MjAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMjQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGBzaHJpbmtfbHJ1dmVjYCYjMzk7cyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkgc2VlIGEgY2FsbCB0byBgc2hyaW5rX2xydXZlY2AgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGp1bXBzIHRvOiAqSXMgdGhpcyBub24tc3RhdGljPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiogRnJvbSBleHBlcmllbmNlLCB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSBpcyBjcnVjaWFsIGZvciBhbnkgcG90ZW50aWFsIHJlZmFjdG9yaW5nIG9yIGRlZXBlciBhbmFseXNpcy4gU28sIGxldCBtZSBjaGVjayB3aGVyZSBgc2hyaW5rX2xydXZlY2AgaXMgZGVmaW5lZC4gVGhlIGltcGxpY2F0aW9ucyBvZiBzdGF0aWMgdnMuIG5vbi1zdGF0aWMgaGVyZSBjYW4gYmUgc2lnbmlmaWNhbnQsIGVzcGVjaWFsbHkgaW4gdGVybXMgb2YgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGNvbXBvbmVudHMgb2YgdGhlIGNvZGUgYW5kIGlmIGl0JiMzOTtzIHBvdGVudGlhbGx5IGV4cG9zZWQgdGhyb3VnaCBhIG1vZHVsZSBib3VuZGFyeSwgYW5kIGlmIHNvLCBob3cuIFRoaXMgYWxzbyBzdWdnZXN0cyB0byBtZSB0aGVyZSYjMzk7cyBwb3RlbnRpYWxseSBhbm90aGVyIGZ1bmN0aW9uIHdpdGggYSBzaW1pbGFyIG5hbWUsIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLCBpdCBpcyBsaWtlbHkgYSByZWxhdGVkIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19scnV2ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00OTU1PXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDk4OS0gKi9cbm1tL3Ztc2Nhbi5jOjQ5OTA6c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTQ5OTEte1xuLS1cbm1tL3Ztc2Nhbi5jPTUwMzU9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTA1NC1cbm1tL3Ztc2Nhbi5jOjUwNTU6XHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNTA1Ni1cbi0tXG5tbS92bXNjYW4uYz01MDc2PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxNDUtXG5tbS92bXNjYW4uYzo1MTQ2OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTE0Ny17XG4tLVxubW0vdm1zY2FuLmMtNTE1OC1cbm1tL3Ztc2Nhbi5jOjUxNTk6XHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MTYwLVx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XG4tLVxubW0vdm1zY2FuLmM9NTg5MD1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU4OTQtXG5tbS92bXNjYW4uYzo1ODk1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTg5Ni17XG4tLVxubW0vdm1zY2FuLmM9NTkwMD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5MDYtXG5tbS92bXNjYW4uYzo1OTA3OnN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTU5MDgte1xuLS1cbm1tL3Ztc2Nhbi5jLTU5MTgtXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFx1MDAyNlx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmM6NTkxOTpcdFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xubW0vdm1zY2FuLmMtNTkyMC1cbi0tXG5tbS92bXNjYW4uYz02MDk4PXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTU3LVxubW0vdm1zY2FuLmM6NjE1ODpcdFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYxNTktXG4tLVxubW0vdm1zY2FuLmM9Njc1Mz11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3ODMtXHQgKi9cbm1tL3Ztc2Nhbi5jOjY3ODQ6XHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNjc4NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBNZW50YWwgRmxvdyBvbiBNZW1vcnkgU2hyaW5rYWdlKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgcGF0aCBvZiBtZW1vcnkgc2hyaW5rYWdlIGluIHRoZSBzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBzaHJpbmtfbm9kZV9tZW1jZ3NgIGFuZCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAgYm90aCB1bHRpbWF0ZWx5IGNhbGwgYHNocmlua19scnV2ZWNgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIGZ1bmN0aW9uLiBgc2hyaW5rX25vZGVfbWVtY2dzYCBpcyB0aGVuIGludm9rZWQgYnkgYHNocmlua19ub2RlYC4gTm93LCB0aGUgY3J1Y2lhbCBwYXJ0OiBgc2hyaW5rX25vZGVgIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGJhbGFuY2VfcGdkYXRgLCB3aGljaCB3ZSBrbm93IGlzIGtzd2FwZCwgdGhlIGtlcm5lbCYjMzk7cyBiYWNrZ3JvdW5kIG1lbW9yeSBtYW5hZ2VtZW50IGRhZW1vbiwgYW5kIGFsc28gYnkgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCwgd2hpY2ggaXMgZGlyZWN0IHJlY2xhaW0uCgpTbywgbG9naWNhbGx5LCB0aGF0IG1lYW5zIGBiYWxhbmNlX3BnZGF0YCBhbmQgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCBhcmUgbXkgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgc2hyaW5rYWdlIHByb2Nlc3Mgc3RhcnRzLiBBbmQsIG9oIHllYWgsIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBpcyBhbHNvIGFuIGVudHJ5IHBvaW50IC0gbWFrZXMgc2Vuc2UsIG1lbW9yeSBjZ3JvdXBzIGhhdmUgdGhlaXIgb3duIHNocmluayBwcm9jZXNzLiBXYWl0IGEgbWludXRlLi4uIGBzaHJpbmtfbm9kZWAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4KCkkgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxscyB0byBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgYmFsYW5jZV9wZ2RhdGAgbW9yZSBjYXJlZnVsbHkgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fdHJ5X3RvX2ZyZWVfcGFnZXN8YmFsYW5jZV9wZ2RhdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTY0NTQ9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy02NDg0LSAqL1xubW0vdm1zY2FuLmM6NjQ4NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxubW0vdm1zY2FuLmMtNjQ4Ni1cdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYz02NzA3PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3NDEtXG5tbS92bXNjYW4uYzo2NzQyOlx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY3NDMtXG4tLVxubW0vdm1zY2FuLmM9Njc1Mz11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY3NzktXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cbm1tL3Ztc2Nhbi5jOjY3ODA6XHQgKiBpZiB3ZSBkb24mIzM5O3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XG5tbS92bXNjYW4uYy02NzgxLVx0ICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCYjMzk7cyBhcyB3ZWxsLiBXZSBoYWNrXG4tLVxubW0vdm1zY2FuLmM9Njc5Mz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4MjQtXG5tbS92bXNjYW4uYzo2ODI1Olx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY4MjYtXG4tLVxubW0vdm1zY2FuLmM9Njk4Mz1zdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjk4Ni1cdC8qXG5tbS92bXNjYW4uYzo2OTg3Olx0ICogVGhlIHRocm90dGxlZCBwcm9jZXNzZXMgYXJlIG5vcm1hbGx5IHdva2VuIHVwIGluIGJhbGFuY2VfcGdkYXQoKSBhc1xubW0vdm1zY2FuLmMtNjk4OC1cdCAqIHNvb24gYXMgYWxsb3dfZGlyZWN0X3JlY2xhaW0oKSBpcyB0cnVlLiBCdXQgdGhlcmUgaXMgYSBwb3RlbnRpYWxcbi0tXG5tbS92bXNjYW4uYy02OTkxLVx0ICogdGhyb3R0bGVkLCBrc3dhcGQgd2FrZXMsIGEgbGFyZ2UgcHJvY2VzcyBleGl0cyB0aGVyZWJ5IGJhbGFuY2luZyB0aGVcbm1tL3Ztc2Nhbi5jOjY5OTI6XHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcbm1tL3Ztc2Nhbi5jLTY5OTMtXHQgKiB0aGUgd2FrZSB1cCBjaGVja3MuIElmIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgbm8gcHJvY2VzcyBzaG91bGRcbi0tXG5tbS92bXNjYW4uYy02OTk1LVx0ICogdGhlIHdha2UgdXAgaXMgcHJlbWF0dXJlLCBwcm9jZXNzZXMgd2lsbCB3YWtlIGtzd2FwZCBhbmQgZ2V0XG5tbS92bXNjYW4uYzo2OTk2Olx0ICogdGhyb3R0bGVkIGFnYWluLiBUaGUgZGlmZmVyZW5jZSBmcm9tIHdha2UgdXBzIGluIGJhbGFuY2VfcGdkYXQoKSBpc1xubW0vdm1zY2FuLmMtNjk5Ny1cdCAqIHRoYXQgaGVyZSB3ZSBhcmUgdW5kZXIgcHJlcGFyZV90b193YWl0KCkuXG4tLVxubW0vdm1zY2FuLmM9NzA3Nz1jbGVhcl9yZWNsYWltX2FjdGl2ZShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTcwODItLypcbm1tL3Ztc2Nhbi5jOjcwODM6ICogRm9yIGtzd2FwZCwgYmFsYW5jZV9wZ2RhdCgpIHdpbGwgcmVjbGFpbSBwYWdlcyBhY3Jvc3MgYSBub2RlIGZyb20gem9uZXNcbm1tL3Ztc2Nhbi5jLTcwODQtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXG4tLVxubW0vdm1zY2FuLmMtNzA5NC0gKi9cbm1tL3Ztc2Nhbi5jOjcwOTU6c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbm1tL3Ztc2Nhbi5jLTcwOTYte1xuLS1cbm1tL3Ztc2Nhbi5jLTcxMTAtXG5tbS92bXNjYW4uYzo3MTExOlx0dHJhY2VfbW1fdm1zY2FuX2JhbGFuY2VfcGdkYXRfYmVnaW4ocGdkYXQtXHUwMDNlbm9kZV9pZCwgb3JkZXIsXG5tbS92bXNjYW4uYy03MTEyLVx0XHRcdFx0XHQgICAgaGlnaGVzdF96b25laWR4KTtcbi0tXG5tbS92bXNjYW4uYy03MzA1LVxubW0vdm1zY2FuLmM6NzMwNjpcdHRyYWNlX21tX3Ztc2Nhbl9iYWxhbmNlX3BnZGF0X2VuZChwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYy5vcmRlcixcbm1tL3Ztc2Nhbi5jLTczMDctXHRcdFx0XHRcdCAgaGlnaGVzdF96b25laWR4LCBzYy5ucl9yZWNsYWltZWQpO1xuLS1cbm1tL3Ztc2Nhbi5jPTc0MzA9c3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcbi0tXG5tbS92bXNjYW4uYy03NDc2LVx0XHQvKlxubW0vdm1zY2FuLmM6NzQ3NzpcdFx0ICogV2UgY2FuIHNwZWVkIHVwIHRoYXdpbmcgdGFza3MgaWYgd2UgZG9uJiMzOTt0IGNhbGwgYmFsYW5jZV9wZ2RhdFxubW0vdm1zY2FuLmMtNzQ3OC1cdFx0ICogYWZ0ZXIgcmV0dXJuaW5nIGZyb20gdGhlIHJlZnJpZ2VyYXRvclxuLS1cbm1tL3Ztc2Nhbi5jLTc0OTItXHRcdFx0XHRcdFx0YWxsb2Nfb3JkZXIpO1xubW0vdm1zY2FuLmM6NzQ5MzpcdFx0cmVjbGFpbV9vcmRlciA9IGJhbGFuY2VfcGdkYXQocGdkYXQsIGFsbG9jX29yZGVyLFxubW0vdm1zY2FuLmMtNzQ5NC1cdFx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpO1xuLS1cbm1tL3Ztc2Nhbi5jPTc1OTE9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXG4tLVxubW0vdm1zY2FuLmMtNzYxMC1cbm1tL3Ztc2Nhbi5jOjc2MTE6XHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNzYxMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIwMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDU2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBSZWNsYWltIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4gemVyb2VzIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkOiBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAuIFRoZXNlIGFyZSB0aGUgbWVtb3J5IHJlY2xhaW0gZW50cnkgcG9pbnRzLiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgZXZpY3RfZm9saW9zYCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBtZW1vcnkgcmVjbGFpbSAqd2hlbiogYENPTkZJR19MUlVfR0VOYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkcmlsbCBkb3duLgoKRXNzZW50aWFsbHksIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdXBkYXRpbmcgdGhlIG5vZGUgcGFnZSBzdGF0ZSDigJMgc3BlY2lmaWNhbGx5IGBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGVgIOKAkyB3aXRoIHRoZSBjb3VudCBvZiBpc29sYXRlZCBmb2xpb3Mgd2l0aGluIGBldmljdF9mb2xpb3NgLCBhbmQgdGhlbiBzdWJ0cmFjdGluZyBpdCBhdCB0aGUgZW5kLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGNsZWFyIGZpeCBmb3IgaG93IGlzb2xhdGVkIGZvbGlvcyBhcmUgYWNjb3VudGVkIGZvciBkdXJpbmcgTUdMUlUgZXZpY3Rpb24sIHdoaWNoIG1lYW5zIHRoaXMgaXMgd29ydGggcGF5aW5nIGF0dGVudGlvbiB0by4gSXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nLgoKTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBgdHlwZWAgdmFyaWFibGUuIFdoZXJlIGRvZXMgdGhhdCBjb21lIGZyb20/IEl0JiMzOTtzIHJldHVybmVkIGJ5IGBpc29sYXRlX2ZvbGlvc2AsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBjb250ZXh0LiBBbHNvLCB0aGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgd2hlcmUgaXNvbGF0ZWQgZm9saW9zIHdlcmVuJiMzOTt0IGJlaW5nIGNvcnJlY3RseSBhY2NvdW50ZWQgZm9yIGluIGBOUl9JU09MQVRFRF9BTk9OYCBhbmQgYE5SX0lTT0xBVEVEX0ZJTEVgIHdoaWxlIGlzb2xhdGVkLCB3aGljaCBpcyBhIGJpZyBkZWFsIGZvciBhY2N1cmF0ZSBtZW1vcnkgYWNjb3VudGluZy4KClRoZSBvYnZpb3VzIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcgYXJlIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAuIE5vdywgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBhIGhvdCBwYXRoIHdoZW4gbWVtb3J5IGlzIGxvdywgdGhhdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGEgZ29vZCB0YXJnZXQuIEJ1dCBhcmUgdGhlcmUgb3RoZXIgZW50cnkgcG9pbnRzPyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBrc3dhcGRgLCB0aGUga2VybmVsIHRocmVhZC4gSXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBwcmVzc3VyZSwgc28gYW55IHN5c2NhbGxzIHRoYXQgZ2VuZXJhdGUgbWVtb3J5IHByZXNzdXJlIOKAkyBsaWtlIGBtbWFwYCwgYG1hZHZpc2VgLCBgbWxvY2tgLCBgZmFsbG9jYXRlYCwgYHdyaXRlYCDigJMgYXJlIGFsbCBldmVudHVhbGx5IGdvaW5nIHRvIGhpdCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLiBUaGlzIGlzIGNvcmUgTU0gcmVjbGFpbSBsb2dpYywgc28gZnV6emluZyBzaG91bGQgc2ltcGx5IGludm9sdmUgbWVtb3J5LWludGVuc2l2ZSB3b3JrbG9hZHMgdG8gZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuIEkgd2lsbCBmb2N1cyBvbiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgYXMgdGhlIG1haW4gc3ltYm9scyBmb3IgZnV6emluZy4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIGxldCYjMzk7cyBtYWtlIHN1cmUgYExSVV9HRU5gIGlzIGV2ZW4gZW5hYmxlZCBieSBkZWZhdWx0LiBBIHF1aWNrIGNoZWNrIG9mIGBtbS9LY29uZmlnYCBzaG93cyB0aGF0IGl0JiMzOTtzIGNvbmZpZ3VyYWJsZSwgYW5kIGRlcGVuZGVudCBvbiBNTVUuIFdlIHNob3VsZCBiZSBzdXJlIHdlIGVuYWJsZSBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBXaXRoIHRoYXQgaW4gcGxhY2UsIHdlIHNob3VsZCBiZSBhYmxlIHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNDAxPWNvbmZpZyBMUlVfR0VOXG4tLVxubW0vS2NvbmZpZy0xNDA5LVxubW0vS2NvbmZpZzoxNDEwOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxMS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NzAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIHBhZ2UgZ2VuZXJhdGlvbiwgYW5kIEkgbmVlZCB0byBnZXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24ga25vYnMgYXNzb2NpYXRlZCB3aXRoIGl0LiBBaCwgeWVzLCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURg4oCUdGhhdCYjMzk7cyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vay4gVGhvc2Ugc291bmQgZmFtaWxpYXIuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGxvY2F0aW9uIGludGVyYWN0cyB3aXRoIGlzb2xhdGluZyBmb2xpb3MuIFRoZSBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgaG93IGBpc29sYXRlX2ZvbGlvc2AgaXMgYmVpbmcgZGVmaW5lZCwgd2hpY2ggaW5jbHVkZXMgdW5kZXJzdGFuZGluZyB0aGUgYHR5cGVgIGRlZmluaXRpb24gaW4gdGhhdCBjb2RlIHBhdGguIFRoYXQgd2lsbCBtYWtlIGl0IGVhc2llciB0byByZWFzb24gYWJvdXQgdGhlIExSVSBnZW5lcmF0aW9uIHByb2Nlc3MgYW5kIGhvdyBpdCBpcyBiZWluZyBpbmZsdWVuY2VkIGJ5IGFsbG9jYXRpb24gc2V0dGluZ3MuIEdvb2QuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzb2xhdGVfZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDc1NT1zdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00NzczLVxubW0vdm1zY2FuLmM6NDc3NDpzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDc3NS1cdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcbi0tXG5tbS92bXNjYW4uYz00ODA4PXN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ4MjktXG5tbS92bXNjYW4uYzo0ODMwOlx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXG5tbS92bXNjYW4uYy00ODMxLVx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk1NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRm9saW8gSXNvbGF0aW9uIGluIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBoYW5kbGluZyBmb2xpbyBpc29sYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBgdHlwZWAgdmFyaWFibGUsIGZyb20gd2hhdCBJIGNhbiBnYXRoZXIsIGlzIGVpdGhlciBgTFJVX0dFTl9BTk9OYCAoMCkgb3IgYExSVV9HRU5fRklMRWAgKDEpLiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEl0IGRpY3RhdGVzIHdoZXRoZXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbm9ueW1vdXMgbWVtb3J5IG9yIGZpbGUtYmFja2VkIG1lbW9yeS4gVGhlIGV4cHJlc3Npb24gYE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZWAgd2lsbCBldmFsdWF0ZSB0byBlaXRoZXIgYE5SX0lTT0xBVEVEX0FOT05gIG9yIGBOUl9JU09MQVRFRF9GSUxFYCwgcHJvdmlkaW5nIGFuIGVhc3kgbWVjaGFuaXNtIHRvIGNsYXNzaWZ5IHRoZSBpc29sYXRlZCBmb2xpb3MuCgpOb3csIHRoZSBtYWluIGZvY3VzIGhlcmUgaXMgb24gdGhlIGBldmljdF9mb2xpb3NgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggc3VnZ2VzdHMgYSB0ZW1wb3JhcnkgbW9kaWZpY2F0aW9uIHRvIHRoZSBub2RlIHBhZ2Ugc3RhdGUgd2l0aGluIGBldmljdF9mb2xpb3NgLiBJdCYjMzk7cyBhZGRpbmcgdGhlIG51bWJlciBvZiBpc29sYXRlZCBmb2xpb3MsIGFuZCBpbW1lZGlhdGVseSBzdWJ0cmFjdGluZyB0aGVtIGJlZm9yZSByZXR1cm5pbmcuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbC4gSXQgaW5kaWNhdGVzIHRoYXQgYGV2aWN0X2ZvbGlvc2AgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWNjdXJhdGVseSByZWZsZWN0IHRoZSBzdGF0ZSBvZiBpc29sYXRlZCBmb2xpb3MsIHBhcnRpY3VsYXJseSBmb3IgY29uY3VycmVudCBhY2Nlc3MuIFRoZSBpZGVhIGlzIHRvIGVuc3VyZSB0aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0sIGxpa2UgYHRvb19tYW55X2lzb2xhdGVkYCBpbiBjb21wYWN0aW9uIG9yIHRoZSBWTSBzY2FubmVyLCBzZWUgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGlzb2xhdGVkIGZvbGlvcy4gVGhpcyB3b3VsZCBiZSB0byBwcmV2ZW50IGluYWNjdXJhdGUgZGVjaXNpb24gbWFraW5nIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLgoKSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBzY2VuYXJpb3MgdGhhdCB0cmlnZ2VyIHRoaXMgYmVoYXZpb3IuIElzIHRoZXJlIGEgc3BlY2lmaWMgc3lzdGVtIGNhbGwgb3IgYWN0aW9uIHRoYXQgaW5pdGlhdGVzIHRoaXMgaXNvbGF0aW9uIGFuZCBldmljdGlvbiBwcm9jZXNzPyBJdCBzZWVtcyBtZW1vcnkgcHJlc3N1cmUgaXMgdGhlIGRyaXZpbmcgZm9yY2UgaGVyZS4gUGVyaGFwcyBgbWFkdmlzZShNQURWX1BBR0VPVVQpYCBjb3VsZCBiZSBkaXJlY3RseSBpbnZvbHZlZCwgYXMgaXQgY2FuIHRyaWdnZXIgcmVjbGFpbS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGBtYWR2aXNlKE1BRFZfUEFHRU9VVClgIGFjdHVhbGx5IGNhbGxzIGBzaHJpbmtfZm9saW9fbGlzdGAgb3IgZGlyZWN0bHkgYGV2aWN0X2ZvbGlvc2AuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFEVl9QQUdFT1VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3ZhZGRyLmM9ODc5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3ZhX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vdmFkZHIuYy04OTItXHRjYXNlIERBTU9TX1BBR0VPVVQ6XG5tbS9kYW1vbi92YWRkci5jOjg5MzpcdFx0bWFkdl9hY3Rpb24gPSBNQURWX1BBR0VPVVQ7XG5tbS9kYW1vbi92YWRkci5jLTg5NC1cdFx0YnJlYWs7XG4tLVxubW0vbWFkdmlzZS5jPTEzMzg9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM1NS1cdFx0cmV0dXJuIG1hZHZpc2VfY29sZChtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYzoxMzU2Olx0Y2FzZSBNQURWX1BBR0VPVVQ6XG5tbS9tYWR2aXNlLmMtMTM1Ny1cdFx0cmV0dXJuIG1hZHZpc2VfcGFnZW91dChtYWR2X2JlaGF2aW9yKTtcbi0tXG5tbS9tYWR2aXNlLmM9MTUxOD1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTUzMS1cdGNhc2UgTUFEVl9DT0xEOlxubW0vbWFkdmlzZS5jOjE1MzI6XHRjYXNlIE1BRFZfUEFHRU9VVDpcbm1tL21hZHZpc2UuYy0xNTMzLVx0Y2FzZSBNQURWX1BPUFVMQVRFX1JFQUQ6XG4tLVxubW0vbWFkdmlzZS5jPTE1NjI9c3RhdGljIGJvb2wgcHJvY2Vzc19tYWR2aXNlX3JlbW90ZV92YWxpZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE1NjUtXHRjYXNlIE1BRFZfQ09MRDpcbm1tL21hZHZpc2UuYzoxNTY2Olx0Y2FzZSBNQURWX1BBR0VPVVQ6XG5tbS9tYWR2aXNlLmMtMTU2Ny1cdGNhc2UgTUFEVl9XSUxMTkVFRDpcbi0tXG5tbS9tYWR2aXNlLmM9MTc0Mj1zdGF0aWMgZW51bSBtYWR2aXNlX2xvY2tfbW9kZSBnZXRfbG9ja19tb2RlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNzUwLVx0Y2FzZSBNQURWX0NPTEQ6XG5tbS9tYWR2aXNlLmM6MTc1MTpcdGNhc2UgTUFEVl9QQUdFT1VUOlxubW0vbWFkdmlzZS5jLTE3NTItXHRjYXNlIE1BRFZfUE9QVUxBVEVfUkVBRDpcbi0tXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTk2Mi0gKlx0XHRlYXNpbHkgaWYgbWVtb3J5IHByZXNzdXJlIGhhcHBlbnMuXG5tbS9tYWR2aXNlLmM6MTk2MzogKiAgTUFEVl9QQUdFT1VUIC0gdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBleHBlY3RlZCB0byB1c2UgdGhpcyBtZW1vcnkgc29vbixcbm1tL21hZHZpc2UuYy0xOTY0LSAqXHRcdHBhZ2Ugb3V0IHRoZSBwYWdlcyBpbiB0aGlzIHJhbmdlIGltbWVkaWF0ZWx5LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI0NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbWFkdmlzZV9wYWdlb3V0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYG1hZHZpc2VfcGFnZW91dGAuIEl0JiMzOTtzIHByZXR0eSBmdW5kYW1lbnRhbCwgcmlnaHQ/IFdlJiMzOTtyZSBlc3NlbnRpYWxseSB0ZWxsaW5nIHRoZSBrZXJuZWwgdG8gdHJ5IGFuZCByZWNsYWltIG1lbW9yeSB0aGF0JiMzOTtzIGJlZW4gbWFwcGVkLCBidXQgaXNuJiMzOTt0IGFjdGl2ZWx5IGJlaW5nIHVzZWQuIFRoZSBpbXBsaWNhdGlvbnMgaGVyZSBhcmUgaHVnZSwgYW5kIEkmIzM5O20gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHRoZSB1c2UgY2FzZXMgaW4gbXkgaGVhZDogcG90ZW50aWFsIGZvciBpbXByb3ZlZCBtZW1vcnkgdXRpbGl6YXRpb24gaW4gYSBzeXN0ZW0gd2l0aCBtZW1vcnkgcHJlc3N1cmUsIG1pdGlnYXRpbmcgbWVtb3J5IGxlYWtzIG9yIGZyYWdtZW50YXRpb24sIGFuZCBvcHRpbWl6aW5nIHBlcmZvcm1hbmNlIHVuZGVyIHZhcmlvdXMgd29ya2xvYWRzLiBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgb2YgY291cnNlLiBJcyBpdCBsZXZlcmFnaW5nIGRpcnR5IHBhZ2UgdHJhY2tpbmcgZWZmZWN0aXZlbHk/IFdoYXQmIzM5O3MgdGhlIGdyYW51bGFyaXR5IG9mIGl0cyBhY3Rpb25zIC0gcGFnZSwgb3IgcmFuZ2VzPyBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBhY3Q7IGBtYWR2aXNlYCBjYWxscyBhcmVuJiMzOTt0IGZyZWUuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gYmVuY2htYXJrIHRoaXMgYW5kIGNvbnNpZGVyIHRoZSBjb3N0L2JlbmVmaXQgdHJhZGUtb2Zmcy4gV2hhdCYjMzk7cyB0aGUgYmVzdCB3YXkgdG8gbGV2ZXJhZ2UgdGhpcyBBUEk/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfcGFnZW91dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9NTk1PXN0YXRpYyBsb25nIG1hZHZpc2VfY29sZChzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtNjEwLVxubW0vbWFkdmlzZS5jOjYxMTpzdGF0aWMgdm9pZCBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxubW0vbWFkdmlzZS5jLTYxMi1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWFkdmlzZS5jLTYyNS1cbm1tL21hZHZpc2UuYzo2MjY6c3RhdGljIGxvbmcgbWFkdmlzZV9wYWdlb3V0KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTYyNy17XG4tLVxubW0vbWFkdmlzZS5jLTY0NS1cdHRsYl9nYXRoZXJfbW11KFx1MDAyNnRsYiwgbWFkdl9iZWhhdmlvci1cdTAwM2VtbSk7XG5tbS9tYWR2aXNlLmM6NjQ2Olx0bWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2UoXHUwMDI2dGxiLCB2bWEsIFx1MDAyNm1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2UpO1xubW0vbWFkdmlzZS5jLTY0Ny1cdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4tLVxubW0vbWFkdmlzZS5jPTEzMzg9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM1Ni1cdGNhc2UgTUFEVl9QQUdFT1VUOlxubW0vbWFkdmlzZS5jOjEzNTc6XHRcdHJldHVybiBtYWR2aXNlX3BhZ2VvdXQobWFkdl9iZWhhdmlvcik7XG5tbS9tYWR2aXNlLmMtMTM1OC1cdGNhc2UgTUFEVl9GUkVFOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg5MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgbWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2VgKioKClJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuICYjMzQ7bWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2UmIzM0Oy4uLiBUaGF0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgc3BlY2lmaWMgYXJlYSBvZiBpbnRlcmVzdDogbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBob3cgd2UmIzM5O3JlIGluZmx1ZW5jaW5nIHRoZSBwYWdlLW91dCBiZWhhdmlvciBvZiB0aGUga2VybmVsLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgZ2VuZXJpYyBgbWFkdmlzZWAgY2FsbDsgdGhlICYjMzQ7cGFnZW91dCYjMzQ7IGFzcGVjdCBpcyBjcml0aWNhbC4gU28sIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgdXNlIGNhc2VzLiBJcyB0aGlzIHJlbGF0ZWQgdG8gd29ya2xvYWQgaXNvbGF0aW9uPyBQZXJmb3JtYW5jZSB0dW5pbmcgZm9yIG1lbW9yeS1pbnRlbnNpdmUgYXBwbGljYXRpb25zPyBPciBwZXJoYXBzIHdlJiMzOTtyZSBleHBlcmltZW50aW5nIHdpdGggbm92ZWwgbWVtb3J5IHJlY2xhbWF0aW9uIHN0cmF0ZWdpZXM/CgpHaXZlbiB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpbnNpZ2h0cyBpbnRvIGEgbWVjaGFuaXNtIHdoZXJlIHdlIGNhbiAqc3BlY2lmeSBhIHJhbmdlKiBvZiBwYWdlcyBmb3IgdGhlIGtlcm5lbCB0byBjb25zaWRlciBmb3IgcGFnaW5nIG91dC4gVGhhdCBsZXZlbCBvZiBjb250cm9sIGlzIGludGVyZXN0aW5nLiBJdCBjb3VsZCBiZSB1c2VkIHRvIHByb2FjdGl2ZWx5IHB1c2ggaW5hY3RpdmUgcGFnZXMgdG8gZGlzaywgZnJlZWluZyB1cCBwaHlzaWNhbCBSQU0gZm9yIG1vcmUgY3JpdGljYWwgZGF0YS4gQ29udmVyc2VseSwgaXQgbWlnaHQgYmUgdXNlZCB0byAqcHJldmVudCogY2VydGFpbiBwYWdlcyBmcm9tIGJlaW5nIGV2aWN0ZWQsIHBlcmhhcHMgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgZHVyaW5nIGEgY3JpdGljYWwgcGhhc2UuCgpNeSBtaW5kIGlzIGFscmVhZHkgcmFjaW5nIHdpdGggcXVlc3Rpb25zOiBXaGF0JiMzOTtzIHRoZSBncmFudWxhcml0eSBvZiBjb250cm9sPyBJcyBpdCBwYWdlLWFsaWduZWQ/IEFyZSB0aGVyZSBhbnkgcmVzdHJpY3Rpb25zIG9uIHRoZSBtZW1vcnkgcmVnaW9ucyB3ZSBjYW4gaW5mbHVlbmNlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBOVU1BIHN5c3RlbXMsIGFuZCBob3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IG1lY2hhbmlzbXMsIGxpa2UgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBvciBLU00/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBgTUFEVl9QQUdFT1VUYCBhbmQgb3RoZXIgYG1hZHZpc2VgIGZsYWdzLCBidXQgdGhlIGBfcGFnZV9yYW5nZWAgcGFydCBpbmRpY2F0ZXMgdGhpcyBpcyBzb21ldGhpbmcgc3BlY2lhbGl6ZWQuIExldCYjMzk7cyBzZWUgaG93IGl0IG9wZXJhdGVzLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlLCB0cmFjZSBpdHMgdXNhZ2UgcGF0dGVybnMgd2l0aGluIHRoZSBrZXJuZWwsIGFuZCB0aGVuIHNlZSBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIGJlbmNobWFya3Mgb3IgZGlzY3Vzc2lvbnMgYWJvdXQgaXQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBvdXQgdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz01OTU9c3RhdGljIGxvbmcgbWFkdmlzZV9jb2xkKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy02MTAtXG5tbS9tYWR2aXNlLmM6NjExOnN0YXRpYyB2b2lkIG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG5tbS9tYWR2aXNlLmMtNjEyLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tYWR2aXNlLmM9NjI2PXN0YXRpYyBsb25nIG1hZHZpc2VfcGFnZW91dChzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtNjQ1LVx0dGxiX2dhdGhlcl9tbXUoXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yLVx1MDAzZW1tKTtcbm1tL21hZHZpc2UuYzo2NDY6XHRtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZShcdTAwMjZ0bGIsIHZtYSwgXHUwMDI2bWFkdl9iZWhhdmlvci1cdTAwM2VyYW5nZSk7XG5tbS9tYWR2aXNlLmMtNjQ3LVx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1OTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpdmluZyBpbnRvIGBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBmb3IgYG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIGFuZCB3aGF0IGl0cyBzcGVjaWZpYyBwdXJwb3NlIGlzLiBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggYG1hZHZpc2VgIGluIGdlbmVyYWwsIHRoZSBoaW50cyBpdCBwcm92aWRlcyB0byB0aGUga2VybmVsIGFib3V0IG1lbW9yeSB1c2FnZSwgYnV0IHRoaXMgcmFuZ2Utc3BlY2lmaWMgdmVyc2lvbiBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGRlc2lnbmVkIGZvciBtb3JlIHRhcmdldGVkIHBhZ2Utb3V0IG9wZXJhdGlvbnMuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IHdoZXJlIHRoaXMgd291bGQgYmUgKmJldHRlciogdGhhbiBhIG1vcmUgZ2VuZXJhbCBgTUFEVl9QQUdFT1VUYCBhcHBsaWVkIHRvIHRoZSB3aG9sZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBwcm9jZXNzIG9yIGEgc3RhbmRhcmQgc3lzdGVtLXdpZGUgcGFnZS1vdXQgdHJpZ2dlcj8gQW0gSSBsb29raW5nIGF0IHNpdHVhdGlvbnMgd2hlcmUgYW4gYXBwbGljYXRpb24gaGFzIGEgZGV0YWlsZWQga25vd2xlZGdlIG9mIHRoZSBtZW1vcnkgaXQgd2FudHMgdG8gZXZpY3QgYW5kIGNhbiBzaWduYWwgdGhlIGtlcm5lbCB3aXRoIGEgZmluZXIgbGV2ZWwgb2YgZ3JhbnVsYXJpdHk/IElzIHRoaXMgc29tZXRoaW5nIHRoYXQmIzM5O3Mgb25seSByZWxldmFudCBpbiBzcGVjaWZpYyB3b3JrbG9hZHM/CgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBEb2VzIGl0IGFsbG93IGZvciBtb3JlIGVmZmljaWVudCBwYWdlIHJlcGxhY2VtZW50IGFsZ29yaXRobXM/IERvZXMgaXQgZ2l2ZSB0aGUgdXNlciBtb3JlIGNvbnRyb2wgb3ZlciB0aGUgc2VsZWN0aW9uIG9mIHRoZSBwYWdlcywgdGh1cyBhdm9pZGluZyB1bm5lY2Vzc2FyeSBkaXNrIEkvTz8gT3IgZG9lcyB0aGUgb3ZlcmhlYWQgb2YgY2FsbGluZyB0aGUgZnVuY3Rpb24gYW5kIG1hbmFnaW5nIHRoZSByYW5nZXMgZGltaW5pc2ggdGhlIGJlbmVmaXQgaWYgaXQmIzM5O3Mgbm90IGhhbmRsZWQgd2VsbD8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgZm9yIGRlYWRsb2NrcyBvciBjb250ZW50aW9uLCBlc3BlY2lhbGx5IGlmIHRoZSBwYWdlcyBhcmUgaGVhdmlseSB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBoYXBwZW5zIGlmIHRoZSBwcm9jZXNzIGNhbGxpbmcgaXQgaXMgbXVsdGktdGhyZWFkZWQuCgpJJiMzOTttIGFsc28gbG9va2luZyBmb3IgYW55IHN1YnRsZXRpZXMgaW4gdGhlIGFyZ3VtZW50IGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGhvdyBkb2VzIGl0IGRlYWwgd2l0aCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBhZGRyZXNzZXMsIGFuZCB3aGF0IGFyZSB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cz8gQXJlIHRoZXJlIHNwZWNpZmljIGVycm9yIGNhc2VzIHRvIGNvbnNpZGVyLCBhbmQgaG93IGFyZSB0aG9zZSBoYW5kbGVkIGJ5IHRoZSBrZXJuZWw/CgpJbiBzdW1tYXJ5LCBteSBtYWluIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24mIzM5O3MgY2FwYWJpbGl0aWVzLCBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgYW5kIHRoZSBzY2VuYXJpb3Mgd2hlcmUgaXQgc2hvdWxkIChvciBzaG91bGRuJiMzOTt0KSBiZSBlbXBsb3llZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYxMTpcdHN0YXRpYyB2b2lkIG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gNjEyOlx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDYxMzpcdFx0XHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UpXG4gNjE0Olx0e1xuIDYxNTpcdFx0c3RydWN0IG1hZHZpc2Vfd2Fsa19wcml2YXRlIHdhbGtfcHJpdmF0ZSA9IHtcbiA2MTY6XHRcdFx0LnBhZ2VvdXQgPSB0cnVlLFxuIDYxNzpcdFx0XHQudGxiID0gdGxiLFxuIDYxODpcdFx0fTtcbiA2MTk6XHRcbiA2MjA6XHRcdHRsYl9zdGFydF92bWEodGxiLCB2bWEpO1xuIDYyMTpcdFx0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsIFx1MDAyNmNvbGRfd2Fsa19vcHMsXG4gNjIyOlx0XHRcdFx0ICAgIFx1MDAyNndhbGtfcHJpdmF0ZSk7XG4gNjIzOlx0XHR0bGJfZW5kX3ZtYSh0bGIsIHZtYSk7XG4gNjI0Olx0fVxuIDYyNTpcdFxuIDYyNjpcdHN0YXRpYyBsb25nIG1hZHZpc2VfcGFnZW91dChzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbiA2Mjc6XHR7XG4gNjI4Olx0XHRzdHJ1Y3QgbW11X2dhdGhlciB0bGI7XG4gNjI5Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1hZHZfYmVoYXZpb3ItXHUwMDNldm1hO1xuIDYzMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQxNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBgY29sZF93YWxrX29wc2Agd2l0aGluIGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHdhbGtfcGFnZV9yYW5nZV92bWFgLCBhbmQgSSBzZWUgaXQmIzM5O3MgdXNpbmcgYGNvbGRfd2Fsa19vcHNgLiAgVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBteSBleHBlcnQgYnJhaW4gdG8gemVybyBpbiBvbiB3aGF0IHRoYXQgbWVhbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgb3BlcmF0aW9uIHNldC4gSXMgdGhpcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50PyBQYWdlIHRhYmxlIG1hbmlwdWxhdGlvbj8gV2hhdCBkZWZpbmVzICYjMzQ7Y29sZCYjMzQ7IGluIHRoaXMgY29udGV4dD8gSXMgdGhpcyBhc3NvY2lhdGVkIHdpdGggYW4gTFJVIHN0cmF0ZWd5PyBJcyB0aGlzIGFib3V0IHRoZSBpbml0aWFsIG1hcHBpbmcgb2YgYSBWTUEgdmVyc3VzIGEgc3Vic2VxdWVudCBhY2Nlc3M/ICBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBjb2xkX3dhbGtfb3BzYCBhbmQgZmlndXJlIG91dCBob3cgaXQgZGlmZmVycyBmcm9tIG90aGVyIHdhbGsgb3BlcmF0aW9ucywgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3IgcGVyZm9ybWFuY2UsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIG9yIHdvcmtsb2FkIHNjZW5hcmlvcy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhlc2Ugd2Fsa2luZyBvcGVyYXRpb25zIGlzIGNydWNpYWwgZm9yIG9wdGltYWwgbWVtb3J5IHBlcmZvcm1hbmNlLCBzbyBsZXQmIzM5O3Mgc3RhcnQgZGlzc2VjdGluZyBgY29sZF93YWxrX29wc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGRfd2Fsa19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTM1Mz1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy01NjctXG5tbS9tYWR2aXNlLmM6NTY4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcbm1tL21hZHZpc2UuYy01NjktXHQucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlLFxuLS1cbm1tL21hZHZpc2UuYz01NzM9c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xkX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tYWR2aXNlLmMtNTg0LVx0dGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSk7XG5tbS9tYWR2aXNlLmM6NTg1Olx0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsIFx1MDAyNmNvbGRfd2Fsa19vcHMsXG5tbS9tYWR2aXNlLmMtNTg2LVx0XHRcdFx1MDAyNndhbGtfcHJpdmF0ZSk7XG4tLVxubW0vbWFkdmlzZS5jPTYxMT1zdGF0aWMgdm9pZCBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21hZHZpc2UuYy02MjAtXHR0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKTtcbm1tL21hZHZpc2UuYzo2MjE6XHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCwgXHUwMDI2Y29sZF93YWxrX29wcyxcbm1tL21hZHZpc2UuYy02MjItXHRcdFx0ICAgIFx1MDAyNndhbGtfcHJpdmF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDc3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGlzIGZ1bmN0aW9uOiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYC4gSSBrbm93IEkmIzM5O3ZlIGVuY291bnRlcmVkIHRoaXMgYmVmb3JlOyBpdCBkZWFscyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB1c2VyIGhpbnRzIGFib3V0IHBhZ2UgdXNhZ2UsIHBhcnRpY3VsYXJseSBhcm91bmQgY29sZCBvciBwYWdlLW91dCBiZWhhdmlvcnMuIExldCYjMzk7cyBzZWUuLi4gdGhlIG5hbWUgaXRzZWxmIGdpdmVzIGF3YXkgYSBiaXQgb2YgaXRzIHB1cnBvc2UuIEl0JiMzOTtzIGRlYWxpbmcgd2l0aCBhIHJhbmdlIG9mIFBURXMgKHBhZ2UgdGFibGUgZW50cmllcyksIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHdvcmtpbmcgYXQgYSBmYWlybHkgbG93IGxldmVsLCBtYW5hZ2luZyB0aGUgbWFwcGluZyBvZiB2aXJ0dWFsIG1lbW9yeSB0byBwaHlzaWNhbCBtZW1vcnkuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdGFraW5nIGBtYWR2aXNlYCBoaW50cyDigJMgbGlrZWx5IGBNQURWX0NPTERgIG9yIHBvdGVudGlhbGx5IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBwYWdlLW91dCBzdWJzeXN0ZW0sIGp1ZGdpbmcgYnkgdGhlIG5hbWUg4oCTIGFuZCBhcHBseWluZyB0aGVtIHRvIHRob3NlIGVudHJpZXMuIFRoaXMgbGlrZWx5IGludm9sdmVzIHRoaW5ncyBsaWtlIG1hcmtpbmcgcGFnZXMgYXMgbGVzcy1yZWNlbnRseSB1c2VkLCBwb3RlbnRpYWxseSB0cmlnZ2VyaW5nIHBhZ2Utb3V0IGFjdGl2aXRpZXMgdG8gZnJlZSB1cCBwaHlzaWNhbCBSQU0sIG9yIGFsdGVyaW5nIHRoZSBwYWdlJiMzOTtzIGNhY2hpbmcgYmVoYXZpb3IuIFRoZSBjaGFsbGVuZ2UgaGVyZSBwcm9iYWJseSBsaWVzIGluIHRoZSBzeW5jaHJvbml6YXRpb24gcmVxdWlyZWQgdG8gbW9kaWZ5IHRoZXNlIFBURXMgc2FmZWx5LCBoYW5kbGluZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGggb3RoZXIgcHJvY2Vzc2VzIGFjY2Vzc2luZyB0aGUgc2FtZSBtZW1vcnkgcmFuZ2UsIGFuZCBlbnN1cmluZyB0aGUgY2hhbmdlcyBhcmUgY29oZXJlbnQgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgdGhlIGV4YWN0IG1lY2hhbmljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0zNDM9c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9mb2xpb19wdGVfYmF0Y2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9tYWR2aXNlLmMtMzUyLVxubW0vbWFkdmlzZS5jOjM1MzpzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxubW0vbWFkdmlzZS5jLTM1NC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vbWFkdmlzZS5jPTU2OD1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGNvbGRfd2Fsa19vcHMgPSB7XG5tbS9tYWR2aXNlLmM6NTY5Olx0LnBtZF9lbnRyeSA9IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSxcbm1tL21hZHZpc2UuYy01NzAtXHQud2Fsa19sb2NrID0gUEdXQUxLX1JETE9DSyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MzgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGZsb3cgaGVyZS4uLgoKKipEZWNvbnN0cnVjdGluZyBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIHdvcmtzIGludGVybmFsbHksIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBldmljdGluZyBwYWdlcy4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGl0IGRpcmVjdGx5IGNhbGwgYGV2aWN0X2ZvbGlvc2A/IFRoYXQgZG9lc24mIzM5O3Qgc2VlbSByaWdodC4gTG9va2luZyBhdCB0aGUgY29kZSwgYGV2aWN0X2ZvbGlvc2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBub3QgYSBnbG9iYWwgZnVuY3Rpb24sIGFuZCBJJiMzOTtkIGV4cGVjdCB0aGF0IGtpbmQgb2YgdXRpbGl0eSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZnJvbSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdCYjMzk7cyBhIGRpcmVjdCBjYWxsLgoKU28sIGlmIGl0JiMzOTtzIG5vdCBgZXZpY3RfZm9saW9zYCwgd2hhdCYjMzk7cyBhY3R1YWxseSBkb2luZyB0aGUgd29yaz8gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgY2FsbHMgYSBoaWdoZXItbGV2ZWwgcmVjbGFpbSBmdW5jdGlvbiwgc29tZXRoaW5nIGxpa2UgYHJlY2xhaW1fcGFnZXNgIG9yIGFub3RoZXIgc2ltaWxhciBmdW5jdGlvbiB0aGF0IGRlYWxzIHdpdGggcGFnZSBldmljdGlvbi4gSXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwYXRoLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY2FsbCBzdGFjayB0byBjb25maXJtIHRoYXQsIGJ1dCBteSBodW5jaCBpcyB0aGF0IGByZWNsYWltX3BhZ2VzYCBvciBhbiBlcXVpdmFsZW50IGlzIGhhbmRsaW5nIHRoZSBhY3R1YWwgcGFnZSBldmljdGlvbiB1bmRlciB0aGUgaG9vZC4gSSBzaG91bGQgYmUgYWJsZSB0byBjb25maXJtIHdpdGggYSBiaXQgbW9yZSBjb2RlIGRpdmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjbGFpbV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9wYWRkci5jPTIyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yNzEtXHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XG5tbS9kYW1vbi9wYWRkci5jOjI3MjpcdGFwcGxpZWQgPSByZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xubW0vZGFtb24vcGFkZHIuYy0yNzMtXHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS9pbnRlcm5hbC5oPTEyMDU9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgIF9fbXVzdF9jaGVjayB2bV9tbWFwX3Bnb2ZmKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsXG4tLVxubW0vaW50ZXJuYWwuaC0xMjA4LVxubW0vaW50ZXJuYWwuaDoxMjA5OnVuc2lnbmVkIGxvbmcgcmVjbGFpbV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcbm1tL2ludGVybmFsLmgtMTIxMC11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbWFkdmlzZS5jPTM1Mz1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy00NDItXHRcdGlmIChwYWdlb3V0KVxubW0vbWFkdmlzZS5jOjQ0MzpcdFx0XHRyZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xubW0vbWFkdmlzZS5jLTQ0NC1cdFx0cmV0dXJuIDA7XG4tLVxubW0vbWFkdmlzZS5jLTU2MS1cdGlmIChwYWdlb3V0KVxubW0vbWFkdmlzZS5jOjU2MjpcdFx0cmVjbGFpbV9wYWdlcyhcdTAwMjZmb2xpb19saXN0KTtcbm1tL21hZHZpc2UuYy01NjMtXHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS92bXNjYW4uYz0yMTUwPXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjbGFpbV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMjE2OS1cdH1cbm1tL3Ztc2Nhbi5jOjIxNzA6XHR0cmFjZV9tbV92bXNjYW5fcmVjbGFpbV9wYWdlcyhwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYy5ucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQpO1xubW0vdm1zY2FuLmMtMjE3MS1cbi0tXG5tbS92bXNjYW4uYy0yMTc0LVxubW0vdm1zY2FuLmM6MjE3NTp1bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcbm1tL3Ztc2Nhbi5jLTIxNzYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU4NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmRlcnN0YW5kaW5nIFBhZ2UgUmVjbGFpbSBhbmQgTUdMUlUgSW50ZXJhY3Rpb24qKgoKT2theSwgc28gbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYWdlIHJlY2xhaW0gcHJvY2Vzcy4gSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGNvZGUgcGF0aCwgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZzogYHJlY2xhaW1fcGFnZXNgIGlzIHRoZSBlbnRyeSBwb2ludCwgd2hpY2ggbGVhZHMgdG8gYHJlY2xhaW1fZm9saW9fbGlzdGAuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBgcmVjbGFpbV9mb2xpb19saXN0YCBldmVudHVhbGx5IGZ1bm5lbCBpbnRvIGBldmljdF9mb2xpb3NgIGZyb20gTUdMUlU/IE5vLCB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZS4gYGV2aWN0X2ZvbGlvc2AgaXMgcGFydCBvZiBNR0xSVSBhbmQgaXMgYWN0dWFsbHkgY2FsbGVkIHRocm91Z2ggYHNocmlua19scnV2ZWNgLiBTbywgYHJlY2xhaW1fcGFnZXNgIGJ5cGFzc2VzIHRoZSBNR0xSVSBwYXRoIGFuZCBnb2VzIGRpcmVjdGx5IHRvIHJlY2xhaW1pbmcgdGhlIGZvbGlvIGxpc3QuCgpUaGF0IGNsYXJpZmllcyBhIGNydWNpYWwgcG9pbnQ6IGBtYWR2aXNlKE1BRFZfUEFHRU9VVClgIGRvZXNuJiMzOTt0IHRyaWdnZXIgYGV2aWN0X2ZvbGlvc2AgZGlyZWN0bHkuIFRoYXQmIzM5O3MgYSBrZXkgdGFrZWF3YXkuCgpJZiB0aGUgZ29hbCBpcyB0byB0cmlnZ2VyIGBldmljdF9mb2xpb3NgLCB3ZSAqbXVzdCogaGl0IGBzaHJpbmtfbHJ1dmVjYC4gVGhhdCYjMzk7cyBkb25lIHZpYSBgdHJ5X3RvX2ZyZWVfcGFnZXNgIG9yIHRoZSBrZXJuZWwmIzM5O3MgYGtzd2FwZGAgcHJvY2Vzcy4gU28gSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIHR3byBmdW5jdGlvbnMsIGFsb25nIHdpdGggYHNocmlua19hbGxfbWVtb3J5YCwgd2hlbiBsb29raW5nIGZvciB0cmlnZ2Vycy4gRm9yZ2V0IGFib3V0IGBtYWR2aXNlKE1BRFZfUEFHRU9VVClgIGZvciB0aGlzIHBhcnRpY3VsYXIgbmVlZC4KCkl0IHNlZW1zIHdlIGNhbiBkaXJlY3RseSBjYWxsIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYC4gV2FpdCwgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBjYWxsZWQgYnkgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLiBIbW0uIElzIHRoZXJlIGFueSBzeXN0ZW0gY2FsbCB0aGF0IGRpcmVjdGx5IHRyaWdnZXJzIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYD8gSSB0aGluayB0aGVyZSBpcywgaWYgSSByZWNhbGwgY29ycmVjdGx5Li4uIFllcywgdXNpbmcgY2dyb3VwIHYyLCB3cml0aW5nIHRvIHRoZSBgbWVtb3J5LnJlY2xhaW1gIGZpbGUgdHJpZ2dlcnMgdGhhdCBmdW5jdGlvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIGBtZW1vcnkucmVjbGFpbWAgYW5kIHNlZSB3aGF0IGl0IGRvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD03NT11bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuLS1cbm1tL2ludGVybmFsLmgtODUtXG5tbS9pbnRlcm5hbC5oOjg2OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9pbnRlcm5hbC5oLTg3LVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xNzcyPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTgxNi1cbm1tL21lbWNvbnRyb2wtdjEuYzoxODE3Olx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG5tbS9tZW1jb250cm9sLXYxLmMtMTgxOC1cdFx0XHRcdG1lbXN3ID8gMCA6IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE4MzU9c3RhdGljIGludCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg1Mi1cbm1tL21lbWNvbnRyb2wtdjEuYzoxODUzOlx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG5tbS9tZW1jb250cm9sLXYxLmMtMTg1NC1cdFx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlY2xhaW1faGlnaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTIzNDgtXHRcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xubW0vbWVtY29udHJvbC5jOjIzNDk6XHRcdG5yX3JlY2xhaW1lZCAmIzQzOz0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgbnJfcGFnZXMsXG5tbS9tZW1jb250cm9sLmMtMjM1MC1cdFx0XHRcdFx0XHRcdGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNjAwPXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjU5LVx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG5tbS9tZW1jb250cm9sLmM6MjY2MDpcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxubW0vbWVtY29udHJvbC5jLTI2NjEtXHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00Nzc4PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5tbS9tZW1jb250cm9sLmMtNDgxNi1cbm1tL21lbWNvbnRyb2wuYzo0ODE3Olx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIGhpZ2gsXG5tbS9tZW1jb250cm9sLmMtNDgxOC1cdFx0XHRcdFx0R0ZQX0tFUk5FTCwgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ4MzQ9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ4NzItXHRcdGlmIChucl9yZWNsYWltcykge1xubW0vbWVtY29udHJvbC5jOjQ4NzM6XHRcdFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIG1heCxcbm1tL21lbWNvbnRyb2wuYy00ODc0LVx0XHRcdFx0XHRHRlBfS0VSTkVMLCBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcbi0tXG5tbS92bXNjYW4uYz02NzUzPXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjc5Mi1cbm1tL3Ztc2Nhbi5jOjY3OTM6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTY3OTQtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vdm1zY2FuLmMtNjgzMy0jZWxzZVxubW0vdm1zY2FuLmM6NjgzNDp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjgzNS1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYz03ODk2PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbi0tXG5tbS92bXNjYW4uYy03OTY3LVx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFO1xubW0vdm1zY2FuLmM6Nzk2ODpcdFx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxubW0vdm1zY2FuLmMtNzk2OS1cdFx0XHRcdFx0XHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTAwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgUmVjbGFtYXRpb24gU3RyYXRlZ2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRoaXMgbWVtb3J5IHJlY2xhbWF0aW9uIGlzIHdvcmtpbmcuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBub3RpY2luZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIHdoaWNoIGlzIGNhbGxlZCBieSBgbWVtb3J5LnJlY2xhaW1gIHdyaXRlcywgYW5kIGFsc28gYG1lbW9yeV9oaWdoX3dyaXRlYCBhbmQgYG1lbW9yeV9tYXhfd3JpdGVgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSB0aGluayBmb2N1c2luZyBvbiBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgYSBzb2xpZCBtb3ZlLCBhbmQgYHRyeV90b19mcmVlX3BhZ2VzYCBjYWxsZWQgYnkgdGhlIHBhZ2UgYWxsb2NhdG9yIGlzIGFub3RoZXIga2V5IHBvaW50LgoKUmlnaHQsIHNvIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZnVuY3Rpb24uIEkgcmVtZW1iZXIgc2VlaW5nIHRoaXMgZnVuY3Rpb24gaW4gYG1tL3Ztc2Nhbi5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBiZWdpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oPTcwNT1leHRlcm4gdm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbik7XG5tbS9pbnRlcm5hbC5oOjcwNjppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS9pbnRlcm5hbC5oLTcwNy1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MDA3PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MDEyLVxubW0vbWVtY29udHJvbC5jOjUwMTM6XHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGJ1ZiwgbWVtY2csIE5VTEwpO1xubW0vbWVtY29udHJvbC5jLTUwMTQtXHRpZiAocmV0KVxuLS1cbm1tL3Ztc2Nhbi5jPTc4OTA9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc4OTUtXG5tbS92bXNjYW4uYzo3ODk2OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL3Ztc2Nhbi5jLTc4OTctXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jPTgwNDk9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxubW0vdm1zY2FuLmMtODA1NC1cbm1tL3Ztc2Nhbi5jOjgwNTU6XHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XG5tbS92bXNjYW4uYy04MDU2LVx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIxMQoJCQkJCQkJb3V0cHV0OiAxMzkKCQkJCQkJCXRob3VnaHRzOiA4NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNR0xSVSBFdmljdGlvbiBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBgZXZpY3RfZm9saW9zYCBmdW5jdGlvbiwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aCB3aXRoaW4gYENPTkZJR19MUlVfR0VOYC4gIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBrZXJuZWwgbmVlZHMgdG8gZnJlZSB1cCBtZW1vcnksIHRyaWdnZXJlZCBlaXRoZXIgcmVhY3RpdmVseSBkdWUgdG8gbWVtb3J5IHByZXNzdXJlLCBvciBwcm9hY3RpdmVseSwgbGlrZSB3aGVuIGEgY2dyb3VwJiMzOTtzIGBtZW1vcnkucmVjbGFpbWAgaXMgdXNlZCwgb3IgZXZlbiBkdXJpbmcgaGliZXJuYXRpb24gKHRob3VnaCB0aGF0JiMzOTtzIGhhbmRsZWQgZGlmZmVyZW50bHksIHZpYSBgc2hyaW5rX2FsbF9tZW1vcnlgKS4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBmaXhpbmcgaG93IGlzb2xhdGVkIGZvbGlvcyBhcmUgYWNjb3VudGVkIGZvciwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB0aGUgbm9kZSBwYWdlIHN0YXRlIChOUl9JU09MQVRFRF9BTk9OL05SX0lTT0xBVEVEX0ZJTEUpLiAgTG9va2luZyBhdCB0aGUgY29kZSBkaWZmIGFnYWluLCB5ZXMsIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgbG9naWMgcmVsYXRlZCB0byBgaXNvbGF0ZWRfb3JpZ2AgYW5kIHRoZSBub2RlIHBhZ2Ugc3RhdGUgdXBkYXRlcy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0IGltcGFjdHMgaG93IG1lbW9yeSBpcyByZWNsYWltZWQgYW5kIHRyYWNrZWQuICBJdCBjb3VsZCBpbnRyb2R1Y2Ugc29tZSB0cmlja3kgZWRnZSBjYXNlcywgYW5kIGl04oCZcyBzb21ldGhpbmcgd2Ugc2hvdWxkIGFic29sdXRlbHkgZnV6ei4KCkluaXRpYWxseSwgSSB0aG91Z2h0IGFib3V0IGluY2x1ZGluZyBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGFzIGEgZm9jdXMgc3ltYm9sIGJlY2F1c2UgaXTigJlzIGEgaG90IHBhdGgsIGJ1dCBmb2N1c2luZyBvbiBwcm9hY3RpdmUgcmVjbGFpbSBwYXRocyB2aWEgY2dyb3VwIG1lbW9yeSByZWNsYWltLCB1c2luZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBzZWVtcyBsaWtlIGEgc21hcnRlciBtb3ZlLiBJdCBoaXRzIHRoZSBzYW1lIGNvZGUgcGF0aCB3aXRoaW4gYGV2aWN0X2ZvbGlvc2AsIGJ1dCB0YXJnZXRzIGEgcG90ZW50aWFsbHkgbGVzcy1mcmVxdWVudGx5LXRlc3RlZCBhcmVhIGFuZCBkaXJlY3RseSByZWxhdGVkIHRvIGEgdXNlciBzcGFjZSB0cmlnZ2VyLiBBbmQsIHllcywgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFuIGV4Y2VsbGVudCBlbnRyeSBwb2ludCBhcyBpdCYjMzk7cyBkaXJlY3RseSB0cmlnZ2VyZWQgYnkgdXNlcnNwYWNlIGludGVyYWN0aW9uIHdpdGggc3lzZnMvY2dyb3VwZnMuCgpJJiMzOTt2ZSBhbHNvIGNoZWNrZWQgdGhlIGBMUlVfR0VOYCBjb25maWd1cmF0aW9uIGFuZCBpdHMgZGVwZW5kZW5jaWVzLCB3aGljaCBhcHBlYXIgdG8gYmUgc3RhbmRhcmQgb24geDg2XzY0IHN5c3RlbXMuICBHb29kLgoKU28sIGhlcmUmIzM5O3MgdGhlIGZ1enppbmcgc2V0dXA6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIGJlY2F1c2UgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBNR0xSVSBldmljdGlvbiBwYXRoLCBjcml0aWNhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgYWNjb3VudGluZyBmb3IgaXNvbGF0ZWQgZm9saW9zIHdpdGhpbiBgZXZpY3RfZm9saW9zYCwgYSBjb3JlIHBhcnQgb2YgbWVtb3J5IHJlY2xhaW0sIHNwZWNpZmljYWxseSB0aGUgbm9kZSBwYWdlIHN0YXRlLCBtYWtpbmcgaXQgYSBmdW5jdGlvbmFsIGNoYW5nZS4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIC0gdG8gdGFyZ2V0IHRoZSBwcm9hY3RpdmUgcmVjbGFpbSBwYXRoLgoqICAgKipFbmFibGVDb25maWdzOioqIGBMUlVfR0VOYCwgYExSVV9HRU5fRU5BQkxFRGAgLSB0aGVzZSBjb25maWdzIGFyZSBlc3NlbnRpYWwgZm9yIHJ1bm5pbmcgdGhlIE1HTFJVIGNvZGUgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBldmljdGlvbiBsb2dpYyB0byBjb3JyZWN0bHkgYWNjb3VudCBmb3IgaXNvbGF0ZWQgZm9saW9zIGluIHRoZSBub2RlIHBhZ2Ugc3RhdGUgKE5SX0lTT0xBVEVEX0FOT04gLyBOUl9JU09MQVRFRF9GSUxFKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aCB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgbWVtb3J5IHByZXNzdXJlIG9yIHByb2FjdGl2ZSByZWNsYWltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGV2aWN0aW9uIGxvZ2ljIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBpc29sYXRlZCBmb2xpb3MgaW4gdGhlIG5vZGUgcGFnZSBzdGF0ZSAoTlJfSVNPTEFURURfQU5PTiAvIE5SX0lTT0xBVEVEX0ZJTEUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRoIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBtZW1vcnkgcHJlc3N1cmUgb3IgcHJvYWN0aXZlIHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGV2aWN0X2ZvbGlvc2AgaW4gYG1tL3Ztc2Nhbi5jYCB0byB0ZW1wb3JhcmlseSB1cGRhdGUgdGhlIG5vZGUgcGFnZSBzdGF0ZSAoYE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZWApIHdpdGggdGhlIG51bWJlciBvZiBpc29sYXRlZCBmb2xpb3MgZHVyaW5nIGV2aWN0aW9uLCBhbmQgdGhlbiByZXZlcnQgaXQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgKGBpc29sYXRlZGAsIGB0eXBlYCkgYXJlIGxvY2FsIGludGVnZXJzLiBgaXNvbGF0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBpZiBgaXNvbGF0ZV9mb2xpb3NgIHNldHMgaXQgdG8gYSBub24temVybyB2YWx1ZSwgaXQgYWxzbyBpbml0aWFsaXplcyBgdHlwZWAuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY2FsY3VsYXRpb25zLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHBhZ2Ugc3RhdGUgYWNjb3VudGluZywgd2hpY2ggaXMgbm90IHNvbWV0aGluZyBLTVNBTiBkZXRlY3RzLiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODYzMzhiYTZlNjBjM2RjNTRiZjdjM2E1MGMyZDQ1OTMwMjM2MzRhNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDA3OjU2OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiYzMyNGUzN2M1ZjFmLi43MjNiNTEzNTc0YjNkIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNDgxNyw2ICYjNDM7NDgxNyw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CiAJaW50IHNjYW5uZWQsIHJlY2xhaW1lZDsKIAlpbnQgaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7CiYjNDM7CWludCBpc29sYXRlZF9vcmlnID0gMDsKIAlib29sIHNraXBfcmV0cnkgPSBmYWxzZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7CkBAIC00ODI5LDYgJiM0Mzs0ODMwLDExIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCXNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLAogCQkJCSAmYW1wO2xpc3QsICZhbXA7aXNvbGF0ZWQsICZhbXA7dHlwZSwgJmFtcDt0eXBlX3NjYW5uZWQpOwogCiYjNDM7CWlzb2xhdGVkX29yaWcgPSBpc29sYXRlZDsKJiM0MzsJaWYgKGlzb2xhdGVkKQomIzQzOwkJX19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsCiYjNDM7CQkJCSAgICAgIGlzb2xhdGVkKTsKJiM0MzsKIAkvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqLwogCWlmIChzY2FubmVkKQogCQl0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTsKQEAgLTQ4OTEsNiAmIzQzOzQ4OTcsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWdvdG8gcmV0cnk7CiAJfQogCiYjNDM7CWlmIChpc29sYXRlZF9vcmlnKQomIzQzOwkJbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyB0eXBlLAomIzQzOwkJCQkgICAgLWlzb2xhdGVkX29yaWcpOwomIzQzOwogCXJldHVybiBzY2FubmVkOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjkxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFZNU2NhbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyB0d2Vha2luZyB0aGUgYGV2aWN0X2ZvbGlvc2AgZnVuY3Rpb24sIHdoaWNoIGlzIGFsd2F5cyBhbiBpbnRlcmVzdGluZyBhcmVhLiBUaGUgZ2lzdCBvZiBpdCBpcyBhZGRpbmcgc29tZSBib29ra2VlcGluZyByZWxhdGVkIHRvIGlzb2xhdGVkIGZvbGlvcywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgd2UmIzM5O3JlIHRyeWluZyB0byBpbXByb3ZlIHRoZSBhY2N1cmFjeSBvZiBvdXIgbWVtb3J5IGFjY291bnRpbmcgZHVyaW5nIHBhZ2UgZXZpY3Rpb24uCgpTcGVjaWZpY2FsbHksIEkgc2VlIGEgbmV3IHZhcmlhYmxlIGNhbGxlZCBgaXNvbGF0ZWRfb3JpZ2AgYmVpbmcgaW50cm9kdWNlZC4gSXQmIzM5O3MgaW5pdGlhbGl6ZWQgdG8gemVybywgdGhlbiBzZXQgdG8gdGhlIHZhbHVlIG9mIGBpc29sYXRlZGAgKmFmdGVyKiBgaXNvbGF0ZV9mb2xpb3NgIGlzIGNhbGxlZC4gVGhhdCB0ZWxscyBtZSBgaXNvbGF0ZV9mb2xpb3NgIGlzIGxpa2VseSBzZXR0aW5nIGBpc29sYXRlZGAsIHdoaWNoIHByb2JhYmx5IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBmb2xpb3MgdGhhdCB3ZXJlIGFjdHVhbGx5IHN1Y2Nlc3NmdWxseSBpc29sYXRlZC4KClRoZW4sIHRoZXJlJiMzOTtzIHRoaXMgY29uZGl0aW9uYWw6IGlmIGBpc29sYXRlZGAgaXMgbm9uLXplcm8gKG1lYW5pbmcgZm9saW9zICp3ZXJlKiBpc29sYXRlZCksIGl0IGNhbGxzIGBfX21vZF9ub2RlX3BhZ2Vfc3RhdGVgIHRvIHVwZGF0ZSBhIG5vZGUgcGFnZSBzdGF0ZSBjb3VudGVyLCBzcGVjaWZpY2FsbHkgYE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZWAuIEkmIzM5O20gZ3Vlc3NpbmcgYHR5cGVgIGRlZmluZXMgdGhlIHR5cGUgb2YgcGFnZSAoZS5nLiwgYW5vbnltb3VzLCBmaWxlLWJhY2tlZCkgYmVpbmcgaXNvbGF0ZWQuIExhdGVyLCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiwgdGhlIHBhdGNoIHNlZW1zIHRvICp1bmRvKiB0aGlzIGFkanVzdG1lbnQsIHN1YnRyYWN0aW5nIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiBgaXNvbGF0ZWRgIGZyb20gdGhlIHNhbWUgY291bnRlci4gVGhpcyBzdWdnZXN0cyB0aGUgaXNvbGF0ZWQgZm9saW9zIGFyZSBiZWluZyByZWNsYWltZWQuCgpNeSBpbW1lZGlhdGUgYXNzZXNzbWVudCBpcyB0aGlzIHBhdGNoIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyBhbnl0aGluZyBkcmFzdGljIG9yIHJpc2t5LiBJdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGNyZWF0ZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGl0JiMzOTtzIG5vdCBjb3B5aW5nIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYmVjYXVzZSB2YXJpYWJsZXMgYGlzb2xhdGVkYCwgYHR5cGVgLCBhbmQgYHR5cGVfc2Nhbm5lZGAgYXJlIHBhc3NlZCBieSByZWZlcmVuY2UgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSBgaXNvbGF0ZV9mb2xpb3NgIGZ1bmN0aW9uLiBCdXQsIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGBpc29sYXRlX2ZvbGlvc2AgYWN0dWFsbHkgd29ya3MgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgZW5zdXJlIHRoZXJlJiMzOTtzIG5vIHN1YnRsZSBpbnRlcmFjdGlvbiBJJiMzOTttIG1pc3NpbmcuIFRoaXMgZmVlbHMgbGlrZSBhIHByZXR0eSB0YXJnZXRlZCB1cGRhdGUgdG8gbm9kZSBwYWdlIHN0YXRlIGZvciBtb3JlIGFjY3VyYXRlIGFjY291bnRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzb2xhdGVfZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDc1NT1zdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00NzczLVxubW0vdm1zY2FuLmM6NDc3NDpzdGF0aWMgaW50IGlzb2xhdGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmMtNDc3NS1cdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcbi0tXG5tbS92bXNjYW4uYz00ODA4PXN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ4MjktXG5tbS92bXNjYW4uYzo0ODMwOlx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXG5tbS92bXNjYW4uYy00ODMxLVx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjI4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBpc29sYXRlX2ZvbGlvc2AgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhhdCBgaXNvbGF0ZV9mb2xpb3NgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZG9pbmcgd2hhdCBJIGV4cGVjdCBpdCB0bywgYW5kIGVmZmljaWVudGx5LiBGaXJzdCwgSSYjMzk7bSBjaGVja2luZyB0aGUgY29yZSBsb2dpYy4gQXJlIHRoZSBlZGdlIGNhc2VzIGhhbmRsZWQgY29ycmVjdGx5PyBTcGVjaWZpY2FsbHksIGFtIEkgc2VlaW5nIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBlbXB0eSBpbnB1dCBzZXRzLCBudWxsIHZhbHVlcywgb3IgdW5leHBlY3RlZCBkYXRhIHN0cnVjdHVyZXM/IEkmIzM5O20gbG9va2luZyBmb3IgYW55IHNob3J0Y3V0cyB0YWtlbiB0aGF0IG1pZ2h0IGludHJvZHVjZSBzdWJ0bGUgYnVncyBkb3duIHRoZSBsaW5lLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIHRoaXMgd2VyZSBtdWx0aS10aHJlYWRlZC4gSXMgaXQgdXRpbGl6aW5nIHRoZSBvcHRpbWFsIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIGV4cGVjdGVkIGlucHV0IHNpemU/IEFyZSB0aGVyZSBhcmVhcyB3aGVyZSBJIGNvdWxkIG9wdGltaXplIHRoZSBhbGdvcml0aG1zIHRvIGltcHJvdmUgc3BlZWQsIGV2ZW4gb24gbGFyZ2UgZm9saW9zPyBJJiMzOTtsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIHRoZSBtYWludGFpbmFiaWxpdHkgb2YgdGhpcyBjb2RlLiBJcyBpdCB3ZWxsLWNvbW1lbnRlZCwgbW9kdWxhciwgYW5kIGVhc3kgZm9yIG90aGVyIGRldmVsb3BlcnMsIG9yIGV2ZW4gbXlzZWxmIGluIGEgZmV3IG1vbnRocywgdG8gdW5kZXJzdGFuZCBhbmQgbW9kaWZ5PyBBbnkgb3Bwb3J0dW5pdHkgdG8gcmVmYWN0b3IgZm9yIGNsYXJpdHkgb3IgdG8gZW5oYW5jZSB0ZXN0YWJpbGl0eSBpcyB3b3J0aCBleHBsb3JpbmcgcmlnaHQgbm93LiBGaW5hbGx5LCBhcmUgdGhlIHVuaXQgdGVzdHMgc3VmZmljaWVudCwgb3Igc2hvdWxkIEkgd3JpdGUgYSBmZXcgbW9yZSBjb3JuZXItY2FzZSB0ZXN0cyB0byBjaGVjayBpdHMgc3RhYmlsaXR5PyBJIG5lZWQgdG8gYmUgY29uZmlkZW50IHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBwcm9kdWN0aW9uLXJlYWR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDc3NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0Nzc0Olx0c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbjQ3NzU6XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcbjQ3NzY6XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWQsXG40Nzc3Olx0XHRcdFx0ICBpbnQgKmlzb2xhdGVfdHlwZSwgaW50ICppc29sYXRlX3NjYW5uZWQpXG40Nzc4Olx0e1xuNDc3OTpcdFx0aW50IGk7XG40NzgwOlx0XHRpbnQgdG90YWxfc2Nhbm5lZCA9IDA7XG40NzgxOlx0XHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcbjQ3ODI6XHRcbjQ3ODM6XHRcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcbjQ3ODQ6XHRcdFx0aW50IHNjYW5uZWQ7XG40Nzg1Olx0XHRcdGludCB0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7XG40Nzg2Olx0XG40Nzg3Olx0XHRcdHNjYW5uZWQgPSBzY2FuX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLFxuNDc4ODpcdFx0XHRcdFx0ICAgICAgdHlwZSwgdGllciwgbGlzdCwgaXNvbGF0ZWQpO1xuNDc4OTpcdFxuNDc5MDpcdFx0XHR0b3RhbF9zY2FubmVkICYjNDM7PSBzY2FubmVkO1xuNDc5MTpcdFx0XHRpZiAoKmlzb2xhdGVkKSB7XG40NzkyOlx0XHRcdFx0Kmlzb2xhdGVfdHlwZSA9IHR5cGU7XG40NzkzOlx0XHRcdFx0Kmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7XG40Nzk0Olx0XHRcdFx0YnJlYWs7XG40Nzk1Olx0XHRcdH1cbjQ3OTY6XHRcdFx0LypcbjQ3OTc6XHRcdFx0ICogSWYgc2Nhbm5lZCBcdTAwM2UgMCBhbmQgaXNvbGF0ZWQgPT0gMCwgYXZvaWQgZmFsbGluZyBiYWNrIHRvIHRoZVxuNDc5ODpcdFx0XHQgKiBvdGhlciB0eXBlLCBhcyB0aGlzIHR5cGUgcmVtYWlucyBzdWZmaWNpZW50LiBGYWxsaW5nIGJhY2tcbjQ3OTk6XHRcdFx0ICogdG9vIHJlYWRpbHkgY2FuIGRpc3J1cHQgdGhlIHBvc2l0aXZlX2N0cmxfZXJyKCkgYmlhcy5cbjQ4MDA6XHRcdFx0ICovXG40ODAxOlx0XHRcdGlmICghc2Nhbm5lZClcbjQ4MDI6XHRcdFx0XHR0eXBlID0gIXR5cGU7XG40ODAzOlx0XHR9XG40ODA0Olx0XG40ODA1Olx0XHRyZXR1cm4gdG90YWxfc2Nhbm5lZDtcbjQ4MDY6XHR9XG40ODA3Olx0XG40ODA4Olx0c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG40ODA5Olx0XHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuNDgxMDpcdHtcbjQ4MTE6XHRcdExJU1RfSEVBRChsaXN0KTtcbjQ4MTI6XHRcdExJU1RfSEVBRChjbGVhbik7XG40ODEzOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuNDgxNDpcdFx0c3RydWN0IGZvbGlvICpuZXh0O1xuNDgxNTpcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xuNDgxNjpcdFx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xuNDgxNzpcdFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbjQ4MTg6XHRcdGludCBzY2FubmVkLCByZWNsYWltZWQ7XG40ODE5Olx0XHRpbnQgaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XG40ODIwOlx0XHRpbnQgaXNvbGF0ZWRfb3JpZyA9IDA7XG40ODIxOlx0XHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcbjQ4MjI6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuNDgyMzpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzA0CgkJCQkJCQlvdXRwdXQ6IDIwMAoJCQkJCQkJdGhvdWdodHM6IDQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCBvbiBVbmluaXRpYWxpemVkIE1lbW9yeSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMsIGdpdmVuIEtNU0FOJiMzOTtzIHJvbGUuIGBpc29sYXRlX2ZvbGlvc2AgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBpdCBzZWVtcyB0byB0YWtlIGBpc29sYXRlZGAsIGBpc29sYXRlX3R5cGVgLCBhbmQgYGlzb2xhdGVfc2Nhbm5lZGAgYnkgcG9pbnRlci4gSXQgY2FsbHMgYHNjYW5fZm9saW9zYCwgd2hpY2ggaXMgdGhlIGxpa2VseSBzb3VyY2Ugb2YgdGhpcyBkYXRhLCBiZWZvcmUgc2V0dGluZyB0aGVzZSB2YWx1ZXMuIElmIGAqaXNvbGF0ZWRgIGlzIG5vbi16ZXJvLCBpbmRpY2F0aW5nIGZvbGlvcyAqd2VyZSogaXNvbGF0ZWQsIHRoZW4gYCppc29sYXRlX3R5cGUgPSB0eXBlO2AgYW5kIGAqaXNvbGF0ZV9zY2FubmVkID0gc2Nhbm5lZDtgIGFyZSBzZXQuIFRoaXMgbG9va3MgaW1wb3J0YW50LgoKTXkgY29uY2VybiBpbml0aWFsbHkgd2FzIHRoZSBgdHlwZWAgdmFyaWFibGUuIElmIGAqaXNvbGF0ZWRgIGJlY29tZXMgbm9uLXplcm8gaW4gYGlzb2xhdGVfZm9saW9zYCwgdGhlIHZhbHVlIGlzIHNldCB0byBgdHlwZWAuIEJ1dCBgZXZpY3RfZm9saW9zYCBhbHNvIHVzZXMgdGhpcyB2YXJpYWJsZS4gSSBuZWVkZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIGB0eXBlYCAuIEkgY2FuIHNlZSBub3csIGBldmljdF9mb2xpb3NgIGluaXRpYWxpemVzIGBpc29sYXRlZGAgdG8gMC4gU28sIGB0eXBlYCBpcyBvbmx5IGV2ZXIgdXNlZCAqYWZ0ZXIqIGBpc29sYXRlX2ZvbGlvc2AgaGFzIHNldCBpdCwgd2hpY2ggaW1wbGllcyBhIHNhZmUgaW5pdGlhbGl6YXRpb24gcGF0aCBmb3IgdGhlIHZhbHVlIG9mIHR5cGUuCgpOb3csIGxvb2tpbmcgYXQgdGhlIGNvZGUgaW4gYGV2aWN0X2ZvbGlvc2AsIHRoZXJlJiMzOTtzIGEgYmxvY2s6CgpgYGBjCglpc29sYXRlZF9vcmlnID0gaXNvbGF0ZWQ7CglpZiAoaXNvbGF0ZWQpCgkJX19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsCgkJCQkgICAgICBpc29sYXRlZCk7CmBgYAoKU2luY2UgYHR5cGVgIGlzIG9ubHkgZXZlciB1c2VkICppZiogYGlzb2xhdGVkYCBpcyBub24temVybyAoZHVlIHRvIHRoZSBgaWZgIHN0YXRlbWVudCksIGFuZCBgdHlwZWAgaXMgaW5pdGlhbGl6ZWQgaWYgYGlzb2xhdGVkYCBpcyBub24temVybyAoZnJvbSB0aGUgYGlzb2xhdGVfZm9saW9zYCBjYWxsIHBhdGgpLCB0aGVyZSBpcyBubyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIGhlcmUuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBjcmVhdGUgYW55IG1lbW9yeSByaXNrcywgYW5kIG15IGluaXRpYWwgY29uY2VybnMgYXJlIGFsbGV2aWF0ZWQuIEl0JiMzOTtzIGp1c3QgcGFnZSBzdGF0ZSBhY2NvdW50aW5nLCBhbmQgdGhhdCBpcyBub3Qgd2hhdCBLTVNBTiBkZXRlY3RzLgoKVGhpcyBwYXRjaCBzaW1wbHkgdXBkYXRlcyB0aGUgbm9kZSBwYWdlIHN0YXRlIGJ5IHVwZGF0aW5nIHRoZSBwYWdlIHN0YXRlIChgTlJfSVNPTEFURURfQU5PTiAmIzQzOyB0eXBlYCkgd2l0aCB0aGUgbnVtYmVyIG9mIGlzb2xhdGVkIGZvbGlvcyBkdXJpbmcgZXZpY3Rpb24gYW5kIHRoZW4gcmV2ZXJ0cyBpdCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4KVGhlIGxvY2FsIGludGVnZXIgdmFyaWFibGVzIGludm9sdmVkIChgaXNvbGF0ZWRgLCBgdHlwZWApIGFyZSBjbGVhcmx5IGluaXRpYWxpemVkLiBgaXNvbGF0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBpZiBgaXNvbGF0ZV9mb2xpb3NgIHNldHMgaXQgdG8gYSBub24temVybyB2YWx1ZSwgaXQgdGhlbiBhbHNvIGluaXRpYWxpemVzIGB0eXBlYC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYW5kIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIGFzIGFueSBwb3RlbnRpYWwgYnVncyBhcmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgcGFnZSBzdGF0ZSBhY2NvdW50aW5nLCB3aGljaCBjYW4gYmUgaGFuZGxlZCB3aXRoIEtBU0FOIG9yIG1vcmUgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLgoKU28sIHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBuZWVkIEtNU0FOLiBJdCYjMzk7cyBzYWZlIGluIHRlcm1zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZXZpY3RfZm9saW9zYCBpbiBgbW0vdm1zY2FuLmNgIHRvIHRlbXBvcmFyaWx5IHVwZGF0ZSB0aGUgbm9kZSBwYWdlIHN0YXRlIChgTlJfSVNPTEFURURfQU5PTiAmIzQzOyB0eXBlYCkgd2l0aCB0aGUgbnVtYmVyIG9mIGlzb2xhdGVkIGZvbGlvcyBkdXJpbmcgZXZpY3Rpb24sIGFuZCB0aGVuIHJldmVydCBpdCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4gVGhlIHZhcmlhYmxlcyBpbnZvbHZlZCAoYGlzb2xhdGVkYCwgYHR5cGVgKSBhcmUgbG9jYWwgaW50ZWdlcnMuIGBpc29sYXRlZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCwgYW5kIGlmIGBpc29sYXRlX2ZvbGlvc2Agc2V0cyBpdCB0byBhIG5vbi16ZXJvIHZhbHVlLCBpdCBhbHNvIGluaXRpYWxpemVzIGB0eXBlYC4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdyBvciBjYWxjdWxhdGlvbnMuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYW5kIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgcGFnZSBzdGF0ZSBhY2NvdW50aW5nLCB3aGljaCBpcyBub3Qgc29tZXRoaW5nIEtNU0FOIGRldGVjdHMuIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHBhdGNoLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGV2aWN0X2ZvbGlvc2AgaW4gYG1tL3Ztc2Nhbi5jYCB0byB0ZW1wb3JhcmlseSB1cGRhdGUgdGhlIG5vZGUgcGFnZSBzdGF0ZSAoYE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZWApIHdpdGggdGhlIG51bWJlciBvZiBpc29sYXRlZCBmb2xpb3MgZHVyaW5nIGV2aWN0aW9uLCBhbmQgdGhlbiByZXZlcnQgaXQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgKGBpc29sYXRlZGAsIGB0eXBlYCkgYXJlIGxvY2FsIGludGVnZXJzLiBgaXNvbGF0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBpZiBgaXNvbGF0ZV9mb2xpb3NgIHNldHMgaXQgdG8gYSBub24temVybyB2YWx1ZSwgaXQgYWxzbyBpbml0aWFsaXplcyBgdHlwZWAuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY2FsY3VsYXRpb25zLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHBhZ2Ugc3RhdGUgYWNjb3VudGluZywgd2hpY2ggaXMgbm90IHNvbWV0aGluZyBLTVNBTiBkZXRlY3RzLiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTY6NTguNzIyNzgxODg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MDc5NzU1NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBldmljdF9mb2xpb3NgIGluIGBtbS92bXNjYW4uY2AgdG8gdGVtcG9yYXJpbHkgdXBkYXRlIHRoZSBub2RlIHBhZ2Ugc3RhdGUgKGBOUl9JU09MQVRFRF9BTk9OICsgdHlwZWApIHdpdGggdGhlIG51bWJlciBvZiBpc29sYXRlZCBmb2xpb3MgZHVyaW5nIGV2aWN0aW9uLCBhbmQgdGhlbiByZXZlcnQgaXQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgKGBpc29sYXRlZGAsIGB0eXBlYCkgYXJlIGxvY2FsIGludGVnZXJzLiBgaXNvbGF0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBpZiBgaXNvbGF0ZV9mb2xpb3NgIHNldHMgaXQgdG8gYSBub24temVybyB2YWx1ZSwgaXQgYWxzbyBpbml0aWFsaXplcyBgdHlwZWAuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY2FsY3VsYXRpb25zLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHBhZ2Ugc3RhdGUgYWNjb3VudGluZywgd2hpY2ggaXMgbm90IHNvbWV0aGluZyBLTVNBTiBkZXRlY3RzLiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGV2aWN0aW9uIGxvZ2ljIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBpc29sYXRlZCBmb2xpb3MgaW4gdGhlIG5vZGUgcGFnZSBzdGF0ZSAoTlJfSVNPTEFURURfQU5PTiAvIE5SX0lTT0xBVEVEX0ZJTEUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRoIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBtZW1vcnkgcHJlc3N1cmUgb3IgcHJvYWN0aXZlIHJlY2xhaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU2OjU4LjcyMjc4NzUwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5OTk1NTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg2MzM4YmE2ZTYwYzNkYzU0YmY3YzNhNTBjMmQ0NTkzMDIzNjM0YTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDc6NTY6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGJjMzI0ZTM3YzVmMWYuLjcyM2I1MTM1NzRiM2QgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC00ODE3LDYgKzQ4MTcsNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcXG4gXFx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcXG4gXFx0aW50IGlzb2xhdGVkID0gMCwgdHlwZSwgdHlwZV9zY2FubmVkO1xcbitcXHRpbnQgaXNvbGF0ZWRfb3JpZyA9IDA7XFxuIFxcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG4gXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xcbkBAIC00ODI5LDYgKzQ4MzAsMTEgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxcbiBcXHRcXHRcXHRcXHQgXFx1MDAyNmxpc3QsIFxcdTAwMjZpc29sYXRlZCwgXFx1MDAyNnR5cGUsIFxcdTAwMjZ0eXBlX3NjYW5uZWQpO1xcbiBcXG4rXFx0aXNvbGF0ZWRfb3JpZyA9IGlzb2xhdGVkO1xcbitcXHRpZiAoaXNvbGF0ZWQpXFxuK1xcdFxcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGlzb2xhdGVkKTtcXG4rXFxuIFxcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXFxuIFxcdGlmIChzY2FubmVkKVxcbiBcXHRcXHR0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTtcXG5AQCAtNDg5MSw2ICs0ODk3LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRnb3RvIHJldHJ5O1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoaXNvbGF0ZWRfb3JpZylcXG4rXFx0XFx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAtaXNvbGF0ZWRfb3JpZyk7XFxuK1xcbiBcXHRyZXR1cm4gc2Nhbm5lZDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6MDAuMjIzNzUzMzg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTY0NzA3NTg4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZXZpY3Rpb24gbG9naWMgdG8gY29ycmVjdGx5IGFjY291bnQgZm9yIGlzb2xhdGVkIGZvbGlvcyBpbiB0aGUgbm9kZSBwYWdlIHN0YXRlIChOUl9JU09MQVRFRF9BTk9OIC8gTlJfSVNPTEFURURfRklMRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGggdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBwcmVzc3VyZSBvciBwcm9hY3RpdmUgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODYzMzhiYTZlNjBjM2RjNTRiZjdjM2E1MGMyZDQ1OTMwMjM2MzRhN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDA3OjU2OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYmMzMjRlMzdjNWYxZi4uNzIzYjUxMzU3NGIzZCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTQ4MTcsNiArNDgxNyw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbiBcdGludCBzY2FubmVkLCByZWNsYWltZWQ7XG4gXHRpbnQgaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XG4rXHRpbnQgaXNvbGF0ZWRfb3JpZyA9IDA7XG4gXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuQEAgLTQ4MjksNiArNDgzMCwxMSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxuIFx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuIFxuK1x0aXNvbGF0ZWRfb3JpZyA9IGlzb2xhdGVkO1xuK1x0aWYgKGlzb2xhdGVkKVxuK1x0XHRfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLFxuK1x0XHRcdFx0ICAgICAgaXNvbGF0ZWQpO1xuK1xuIFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cbiBcdGlmIChzY2FubmVkKVxuIFx0XHR0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTtcbkBAIC00ODkxLDYgKzQ4OTcsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGdvdG8gcmV0cnk7XG4gXHR9XG4gXG4rXHRpZiAoaXNvbGF0ZWRfb3JpZylcbitcdFx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsXG4rXHRcdFx0XHQgICAgLWlzb2xhdGVkX29yaWcpO1xuK1xuIFx0cmV0dXJuIHNjYW5uZWQ7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6MDAuMjIzNzU1MzI0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1Njk3NTQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZtc2Nhbi5jIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBwb2tpbmcgYXJvdW5kIGluIGBtbS92bXNjYW4uY2AsIHNwZWNpZmljYWxseSB0aGUgYGV2aWN0X2ZvbGlvc2AgZnVuY3Rpb24uIE15IHNwaWRleS1zZW5zZSBpcyBhbHJlYWR5IHRpbmdsaW5nIGEgYml0LCBhcyBhbnkgY2hhbmdlIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGVzcGVjaWFsbHkgc29tZXRoaW5nIHRoYXQgZGVhbHMgd2l0aCBldmljdGlvbiwgaXMgc29tZXRoaW5nIEkgd2FudCB0byBzY3J1dGluaXplIGNsb3NlbHkuXG5cblRoZSBrZXkgc2VlbXMgdG8gYmUgdGhlIGFkZGl0aW9uIG9mIHRoaXMgYGlzb2xhdGVkX29yaWdgIHZhcmlhYmxlLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHRyYWNraW5nIHNvbWUgb3JpZ2luYWwgaXNvbGF0ZWQgY291bnQsIGFuZCB0aGVuIHVwZGF0aW5nIHRoZSBub2RlIHBhZ2Ugc3RhdGUgYE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlYCB3aXRoIGEgbmV3IGBpc29sYXRlZGAgY291bnQsIGFuZCB0aGVuICpzdWJ0cmFjdGluZyogdGhlIGBpc29sYXRlZF9vcmlnYCB2YWx1ZS4gVGhpcyBmZWVscyBsaWtlIHdlJ3JlIGRvaW5nIHNvbWUgYm9va2tlZXBpbmcgYXJvdW5kIHBhZ2UgaXNvbGF0aW9uLCB3aGljaCBpcyBhIGNvcmUgY29tcG9uZW50IG9mIGhvdyBNR0xSVSB3b3Jrcy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBnaXZlbiBpdHMgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggTUdMUlXigJlzIGV2aWN0aW9uIHJvdXRpbmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbW9kaWZpY2F0aW9uIGluIGRldGFpbC4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgZXZpY3RfZm9saW9zYCBmdW5jdGlvbiB3aXRoaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgc2VlIGhvdyB0aGlzIG5ldyB2YXJpYWJsZSBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgTUdMUlUgaGFuZGxlcyBwYWdlIGlzb2xhdGlvbiBhbmQgZXZpY3Rpb24uIFRpbWUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1NzowNC43ODA3MzQzOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcyNTU0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ3NzQ9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4MDctXFxubW0vdm1zY2FuLmM6NDgwODpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00ODA5LVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5OTA9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMTMtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTAxNDpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTAxNS1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTYxNz1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU2MzctXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU2Mzg6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU2MzktXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjA0Ljg4Nzk5ODg4OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTM2MTQ3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNR0xSVSdzIEFjdGl2YXRpb24gUGF0aCoqXG5cbk9rYXksIHNvIGBldmljdF9mb2xpb3NgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlLCBnZXR0aW5nIGNhbGxlZCBmcm9tIGJvdGggYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgYHJ1bl9ldmljdGlvbmAuIFJpZ2h0LCB0aGF0J3Mgd2l0aGluIHRoZSBMUlUgZ2VuZXJhdGlvbiBmdW5jdGlvbmFsaXR5IOKAkyBzcGVjaWZpY2FsbHksIHRoZSBNR0xSVSBmZWF0dXJlLiBNeSBxdWVzdGlvbiBpcywgaXMgTUdMUlUgb24gYnkgZGVmYXVsdCwgb3IgaXMgdGhlcmUgYSBzcGVjaWZpYyBrZXJuZWwgY29uZmlnIHRoYXQgZW5hYmxlcyBpdD8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtLiBHaXZlbiBpdCdzIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQsIGBtbS9LY29uZmlnYCBpcyB0aGUgbW9zdCBsaWtlbHkgbG9jYXRpb24gZm9yIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIHBlcmhhcHMgaXQncyBkZWZpbmVkIGFuZCBjb25kaXRpb25hbCBpbiBgbW0vdm1zY2FuLmNgLiBMZXQncyBzdGFydCB3aXRoIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTExLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6MDguNjAxNjE3MjUxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODQ4MTczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5MD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDAtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDE6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDItXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQwOS1cXG5tbS9LY29uZmlnOjE0MTA6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxMS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxNS1cXG5tbS9LY29uZmlnOjE0MTY6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MTctXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDI0LVxcbm1tL0tjb25maWc6MTQyNTpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjYtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1NzowOS4yNzAxMDc5NjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc0MzA4MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBhbmQgRXZpY3Rpb24gU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGJ1aWx0IGFyb3VuZCB0d28gY29uZmlndXJhdGlvbiBvcHRpb25zOiBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcnBsYXkgYW5kIHdoYXQgaW1wYWN0IHRoZXkgaGF2ZS4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgYExSVV9HRU5gIHByb2JhYmx5IGRlZmluZXMgdGhlIGZyYW1ld29yayBpdHNlbGYsIHdoaWxlIGBMUlVfR0VOX0VOQUJMRURgIGlzIGxpa2VseSBhIHJ1bnRpbWUgdG9nZ2xlLiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyBob3cgdGhlIGZvbGlvIGV2aWN0aW9uIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGBldmljdF9mb2xpb3NgLCBpcyBoYW5kbGVkIHdpdGhpbiB0aGlzIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBldmljdF9mb2xpb3NgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gd2hldGhlciBgQ09ORklHX0xSVV9HRU5gIGlzIGRlZmluZWQuIFRoaXMgd2lsbCByZXZlYWwgaWYgdGhlIGV2aWN0aW9uIHN0cmF0ZWd5IGlzIGZ1bmRhbWVudGFsbHkgbGlua2VkIHRvIHRoZSBgTFJVX0dFTmAgZnJhbWV3b3JrIG9yIGlmIGl0J3MgYSBtb3JlIGluZGVwZW5kZW50IGNvbXBvbmVudCB0aGF0ICptaWdodCogYmUgdXNlZCB3aXRoIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBJIG11c3QgdW5kZXJzdGFuZCB0aGlzIHRvIHNlZSB0aGUgb3ZlcmFsbCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYxNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjEyLjU0NDQyMDM4MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM1NTIzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0xSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9ODI1PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzAtXFxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzMi0vKlxcbi0tXFxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg1Ny19XFxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTg1OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2MTY9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2MjctXFxubW0vdm1zY2FuLmM6MjYyODojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNjI5LVxcbm1tL3Ztc2Nhbi5jPTI2MzA9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjYzMTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI2MzItREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODE2PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgzNS1cXG5tbS92bXNjYW4uYzoyODM2OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yODM3LVxcbi0tXFxubW0vdm1zY2FuLmM9Mjk0NT12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NzMtXFxubW0vdm1zY2FuLmM6Mjk3NDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXFxubW0vdm1zY2FuLmMtMjk3NS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4ODY9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbm1tL3Ztc2Nhbi5jLTU4ODctXFxubW0vdm1zY2FuLmM6NTg4ODojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy01ODg5LVxcbi0tXFxubW0vdm1zY2FuLmM9NTkwMD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTkwNC1cXG5tbS92bXNjYW4uYzo1OTA1OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTU5MDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjEyLjY5Nzk4MjIyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyMTQ4NzIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBldmljdF9mb2xpb3NgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgeWVwLCBgZXZpY3RfZm9saW9zYCBpcyByaWdodCBhcm91bmQgbGluZSA0ODA4LCB3aGljaCBmYWxscyBzbWFjayBkYWIgYmV0d2VlbiBsaW5lcyAyNjI4IGFuZCA1ODg4LCB3aGVyZSB0aGF0IGAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9gIGJpdCBpcy4gVGhhdCB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24ncyBnb2luZyB0byBuZWVkIGBDT05GSUdfTFJVX0dFTmAgZW5hYmxlZCB0byBldmVuIGJlIGluIHBsYXkuIFNlZW1zIGxvZ2ljYWwsIGdpdmVuIHRoZSBuYW1lLiBUbyBtYWtlIHRoZSBmdW5jdGlvbiBhY3RpdmUgYnkgZGVmYXVsdCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgaXMgYWxzbyBwcm9iYWJseSBpbXBvcnRhbnQuXG5cbk5leHQsIEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQncyBzZWUuLi4geWVwLCBpdCdzIGRlY2xhcmVkIGBzdGF0aWNgLiBTbywgd2hvJ3MgKmNhbGxpbmcqIGl0PyBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCB1c2UgYGV2aWN0X2ZvbGlvc2AuIE9rYXksIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgKmlzKiBzdGF0aWMuIFNhbWUgd2l0aCBgcnVuX2V2aWN0aW9uYC4gTm93IEkgbmVlZCB0byB0cmFjZSAqdXB3YXJkKiB0byBzZWUgd2hlcmUgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU2MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1NzoxNi44MTk0NzIwMjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NTI5MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ5NTU9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5ODktICovXFxubW0vdm1zY2FuLmM6NDk5MDpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTQ5OTEte1xcbi0tXFxubW0vdm1zY2FuLmM9NTAzNT1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNTQtXFxubW0vdm1zY2FuLmM6NTA1NTpcXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUwNTYtXFxuLS1cXG5tbS92bXNjYW4uYz01MTQ2PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE1OC1cXG5tbS92bXNjYW4uYzo1MTU5OlxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MTYwLVxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6MTYuOTE4MDA3MDg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODg2NDEzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipUcmFjaW5nIGBzaHJpbmtfb25lYCBhbmQgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIHplcm9pbmcgaW4gb24gYHNocmlua19vbmVgIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYC4gVGhlc2UgYXJlIHRoZSB0d28gZnVuY3Rpb25zIEkgd2FudCB0byBmb2xsb3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IHdvcmsgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlciB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3IgdHJ5aW5nIHRvIGRlYnVnIHNvbWV0aGluZyBzcGVjaWZpYywgc28gdW5kZXJzdGFuZGluZyB0aGVpciBpbnRlcmFjdGlvbnMgaXMga2V5LiBJIG5lZWQgdG8gc2VlIGhvdyBgc2hyaW5rX29uZWAgYWZmZWN0cyB0aGUgTFJVIGNhY2hlIHJlcHJlc2VudGVkIGJ5IGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLiBJcyBpdCBhIGRpcmVjdCBjYWxsLCBvciBzb21ldGhpbmcgbW9yZSBpbmRpcmVjdD8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHRoZSBjYWxsIGdyYXBocyBmb3IgZWFjaCwgYW5kIHRoZW4gcGVyaGFwcyBzdGVwIHRocm91Z2ggdGhlaXIgZXhlY3V0aW9uIHRvIGdldCBhIGZlZWwgZm9yIHRoZSBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1NzoxOS45MDY2NTEzMDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDg1OTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfb25lfGxydV9nZW5fc2hyaW5rX2xydXZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00OTkwPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MDM0LVxcbm1tL3Ztc2Nhbi5jOjUwMzU6c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTAzNi17XFxuLS1cXG5tbS92bXNjYW4uYz01MDc2PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTExNy1cXG5tbS92bXNjYW4uYzo1MTE4OlxcdFxcdG9wID0gc2hyaW5rX29uZShscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy01MTE5LVxcbi0tXFxubW0vdm1zY2FuLmMtNTE0NS1cXG5tbS92bXNjYW4uYzo1MTQ2OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUxNDcte1xcbi0tXFxubW0vdm1zY2FuLmM9NTE2Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE5My1cXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL3Ztc2Nhbi5jOjUxOTQ6XFx0XFx0c2hyaW5rX29uZShcXHUwMDI2cGdkYXQtXFx1MDAzZV9fbHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTE5NS1cXHRlbHNlXFxuLS1cXG5tbS92bXNjYW4uYz01ODkwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01ODk0LVxcbm1tL3Ztc2Nhbi5jOjU4OTU6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTg5Ni17XFxuLS1cXG5tbS92bXNjYW4uYz01OTA3PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5MTgtXFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcXHUwMDI2XFx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jOjU5MTk6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTU5MjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjIwLjA2NzUxNjMyNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ3NjA0Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBzaHJpbmtfbHJ1dmVjYCdzIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIGNhbGwgdG8gYHNocmlua19scnV2ZWNgIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBqdW1wcyB0bzogKklzIHRoaXMgbm9uLXN0YXRpYz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC4qIEZyb20gZXhwZXJpZW5jZSwgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgaXMgY3J1Y2lhbCBmb3IgYW55IHBvdGVudGlhbCByZWZhY3RvcmluZyBvciBkZWVwZXIgYW5hbHlzaXMuIFNvLCBsZXQgbWUgY2hlY2sgd2hlcmUgYHNocmlua19scnV2ZWNgIGlzIGRlZmluZWQuIFRoZSBpbXBsaWNhdGlvbnMgb2Ygc3RhdGljIHZzLiBub24tc3RhdGljIGhlcmUgY2FuIGJlIHNpZ25pZmljYW50LCBlc3BlY2lhbGx5IGluIHRlcm1zIG9mIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBjb21wb25lbnRzIG9mIHRoZSBjb2RlIGFuZCBpZiBpdCdzIHBvdGVudGlhbGx5IGV4cG9zZWQgdGhyb3VnaCBhIG1vZHVsZSBib3VuZGFyeSwgYW5kIGlmIHNvLCBob3cuIFRoaXMgYWxzbyBzdWdnZXN0cyB0byBtZSB0aGVyZSdzIHBvdGVudGlhbGx5IGFub3RoZXIgZnVuY3Rpb24gd2l0aCBhIHNpbWlsYXIgbmFtZSwgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AsIGl0IGlzIGxpa2VseSBhIHJlbGF0ZWQgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjIzLjQxNTEzMDY5OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMDgxNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19scnV2ZWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDk1NT1zdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDk4OS0gKi9cXG5tbS92bXNjYW4uYzo0OTkwOnN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNDk5MS17XFxuLS1cXG5tbS92bXNjYW4uYz01MDM1PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTA1NC1cXG5tbS92bXNjYW4uYzo1MDU1OlxcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTA1Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwNzY9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTQ1LVxcbm1tL3Ztc2Nhbi5jOjUxNDY6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTE0Ny17XFxuLS1cXG5tbS92bXNjYW4uYy01MTU4LVxcbm1tL3Ztc2Nhbi5jOjUxNTk6XFx0aWYgKHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTUxNjAtXFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfWU9VTkcpO1xcbi0tXFxubW0vdm1zY2FuLmM9NTg5MD1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTg5NC1cXG5tbS92bXNjYW4uYzo1ODk1OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTU4OTYte1xcbi0tXFxubW0vdm1zY2FuLmM9NTkwMD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTkwNi1cXG5tbS92bXNjYW4uYzo1OTA3OnN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01OTA4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5MTgtXFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcXHUwMDI2XFx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jOjU5MTk6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTU5MjAtXFxuLS1cXG5tbS92bXNjYW4uYz02MDk4PXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNTctXFxubW0vdm1zY2FuLmM6NjE1ODpcXHRcXHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYxNTktXFxuLS1cXG5tbS92bXNjYW4uYz02NzUzPXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02NzgzLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjY3ODQ6XFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjc4NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6MjMuNTM1MjE3NzQ4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTk1NTYyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTWVudGFsIEZsb3cgb24gTWVtb3J5IFNocmlua2FnZSoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBwYXRoIG9mIG1lbW9yeSBzaHJpbmthZ2UgaW4gdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHNocmlua19ub2RlX21lbWNnc2AgYW5kIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCBib3RoIHVsdGltYXRlbHkgY2FsbCBgc2hyaW5rX2xydXZlY2AuIFRoYXQncyB0aGUgY29yZSBmdW5jdGlvbi4gYHNocmlua19ub2RlX21lbWNnc2AgaXMgdGhlbiBpbnZva2VkIGJ5IGBzaHJpbmtfbm9kZWAuIE5vdywgdGhlIGNydWNpYWwgcGFydDogYHNocmlua19ub2RlYCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBiYWxhbmNlX3BnZGF0YCwgd2hpY2ggd2Uga25vdyBpcyBrc3dhcGQsIHRoZSBrZXJuZWwncyBiYWNrZ3JvdW5kIG1lbW9yeSBtYW5hZ2VtZW50IGRhZW1vbiwgYW5kIGFsc28gYnkgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCwgd2hpY2ggaXMgZGlyZWN0IHJlY2xhaW0uXG5cblNvLCBsb2dpY2FsbHksIHRoYXQgbWVhbnMgYGJhbGFuY2VfcGdkYXRgIGFuZCBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgIGFyZSBteSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzaHJpbmthZ2UgcHJvY2VzcyBzdGFydHMuIEFuZCwgb2ggeWVhaCwgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGlzIGFsc28gYW4gZW50cnkgcG9pbnQgLSBtYWtlcyBzZW5zZSwgbWVtb3J5IGNncm91cHMgaGF2ZSB0aGVpciBvd24gc2hyaW5rIHByb2Nlc3MuIFdhaXQgYSBtaW51dGUuLi4gYHNocmlua19ub2RlYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5JIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IEknbSB0aGlua2luZyBhYm91dCB0aGlzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxzIHRvIGBkb190cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCBtb3JlIGNhcmVmdWxseSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzgwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjI3LjkzNDc3NzQxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwOTA0MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3RyeV90b19mcmVlX3BhZ2VzfGJhbGFuY2VfcGdkYXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NjQ1ND1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNjQ4NC0gKi9cXG5tbS92bXNjYW4uYzo2NDg1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3RyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXFxubW0vdm1zY2FuLmMtNjQ4Ni1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmM9NjcwNz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3NDEtXFxubW0vdm1zY2FuLmM6Njc0MjpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02NzQzLVxcbi0tXFxubW0vdm1zY2FuLmM9Njc1Mz11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjc3OS1cXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cXG5tbS92bXNjYW4uYzo2NzgwOlxcdCAqIGlmIHdlIGRvbid0IHJlY2xhaW0gaGVyZSwgdGhlIHNocmlua19ub2RlIGZyb20gYmFsYW5jZV9wZ2RhdFxcbm1tL3Ztc2Nhbi5jLTY3ODEtXFx0ICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCdzIGFzIHdlbGwuIFdlIGhhY2tcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY3OTM9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4MjQtXFxubW0vdm1zY2FuLmM6NjgyNTpcXHRucl9yZWNsYWltZWQgPSBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy02ODI2LVxcbi0tXFxubW0vdm1zY2FuLmM9Njk4Mz1zdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02OTg2LVxcdC8qXFxubW0vdm1zY2FuLmM6Njk4NzpcXHQgKiBUaGUgdGhyb3R0bGVkIHByb2Nlc3NlcyBhcmUgbm9ybWFsbHkgd29rZW4gdXAgaW4gYmFsYW5jZV9wZ2RhdCgpIGFzXFxubW0vdm1zY2FuLmMtNjk4OC1cXHQgKiBzb29uIGFzIGFsbG93X2RpcmVjdF9yZWNsYWltKCkgaXMgdHJ1ZS4gQnV0IHRoZXJlIGlzIGEgcG90ZW50aWFsXFxuLS1cXG5tbS92bXNjYW4uYy02OTkxLVxcdCAqIHRocm90dGxlZCwga3N3YXBkIHdha2VzLCBhIGxhcmdlIHByb2Nlc3MgZXhpdHMgdGhlcmVieSBiYWxhbmNpbmcgdGhlXFxubW0vdm1zY2FuLmM6Njk5MjpcXHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcXG5tbS92bXNjYW4uYy02OTkzLVxcdCAqIHRoZSB3YWtlIHVwIGNoZWNrcy4gSWYga3N3YXBkIGlzIGdvaW5nIHRvIHNsZWVwLCBubyBwcm9jZXNzIHNob3VsZFxcbi0tXFxubW0vdm1zY2FuLmMtNjk5NS1cXHQgKiB0aGUgd2FrZSB1cCBpcyBwcmVtYXR1cmUsIHByb2Nlc3NlcyB3aWxsIHdha2Uga3N3YXBkIGFuZCBnZXRcXG5tbS92bXNjYW4uYzo2OTk2OlxcdCAqIHRocm90dGxlZCBhZ2Fpbi4gVGhlIGRpZmZlcmVuY2UgZnJvbSB3YWtlIHVwcyBpbiBiYWxhbmNlX3BnZGF0KCkgaXNcXG5tbS92bXNjYW4uYy02OTk3LVxcdCAqIHRoYXQgaGVyZSB3ZSBhcmUgdW5kZXIgcHJlcGFyZV90b193YWl0KCkuXFxuLS1cXG5tbS92bXNjYW4uYz03MDc3PWNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MDgyLS8qXFxubW0vdm1zY2FuLmM6NzA4MzogKiBGb3Iga3N3YXBkLCBiYWxhbmNlX3BnZGF0KCkgd2lsbCByZWNsYWltIHBhZ2VzIGFjcm9zcyBhIG5vZGUgZnJvbSB6b25lc1xcbm1tL3Ztc2Nhbi5jLTcwODQtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXFxuLS1cXG5tbS92bXNjYW4uYy03MDk0LSAqL1xcbm1tL3Ztc2Nhbi5jOjcwOTU6c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG5tbS92bXNjYW4uYy03MDk2LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxMTAtXFxubW0vdm1zY2FuLmM6NzExMTpcXHR0cmFjZV9tbV92bXNjYW5fYmFsYW5jZV9wZ2RhdF9iZWdpbihwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgb3JkZXIsXFxubW0vdm1zY2FuLmMtNzExMi1cXHRcXHRcXHRcXHRcXHQgICAgaGlnaGVzdF96b25laWR4KTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTczMDUtXFxubW0vdm1zY2FuLmM6NzMwNjpcXHR0cmFjZV9tbV92bXNjYW5fYmFsYW5jZV9wZ2RhdF9lbmQocGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjLm9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTczMDctXFx0XFx0XFx0XFx0XFx0ICBoaWdoZXN0X3pvbmVpZHgsIHNjLm5yX3JlY2xhaW1lZCk7XFxuLS1cXG5tbS92bXNjYW4uYz03NDMwPXN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXFxuLS1cXG5tbS92bXNjYW4uYy03NDc2LVxcdFxcdC8qXFxubW0vdm1zY2FuLmM6NzQ3NzpcXHRcXHQgKiBXZSBjYW4gc3BlZWQgdXAgdGhhd2luZyB0YXNrcyBpZiB3ZSBkb24ndCBjYWxsIGJhbGFuY2VfcGdkYXRcXG5tbS92bXNjYW4uYy03NDc4LVxcdFxcdCAqIGFmdGVyIHJldHVybmluZyBmcm9tIHRoZSByZWZyaWdlcmF0b3JcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0OTItXFx0XFx0XFx0XFx0XFx0XFx0YWxsb2Nfb3JkZXIpO1xcbm1tL3Ztc2Nhbi5jOjc0OTM6XFx0XFx0cmVjbGFpbV9vcmRlciA9IGJhbGFuY2VfcGdkYXQocGdkYXQsIGFsbG9jX29yZGVyLFxcbm1tL3Ztc2Nhbi5jLTc0OTQtXFx0XFx0XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4KTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc1OTE9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYy03NjEwLVxcbm1tL3Ztc2Nhbi5jOjc2MTE6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNzYxMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6MjguMTI1Njg2NzYzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1MTUyOTcwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgUmVjbGFpbSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBicmFpbiB6ZXJvZXMgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQ6IGB0cnlfdG9fZnJlZV9wYWdlc2AsIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YC4gVGhlc2UgYXJlIHRoZSBtZW1vcnkgcmVjbGFpbSBlbnRyeSBwb2ludHMuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIGBldmljdF9mb2xpb3NgLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltICp3aGVuKiBgQ09ORklHX0xSVV9HRU5gIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZHJpbGwgZG93bi5cblxuRXNzZW50aWFsbHksIGl0IGxvb2tzIGxpa2UgaXQncyB1cGRhdGluZyB0aGUgbm9kZSBwYWdlIHN0YXRlIOKAkyBzcGVjaWZpY2FsbHkgYE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlYCDigJMgd2l0aCB0aGUgY291bnQgb2YgaXNvbGF0ZWQgZm9saW9zIHdpdGhpbiBgZXZpY3RfZm9saW9zYCwgYW5kIHRoZW4gc3VidHJhY3RpbmcgaXQgYXQgdGhlIGVuZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBjbGVhciBmaXggZm9yIGhvdyBpc29sYXRlZCBmb2xpb3MgYXJlIGFjY291bnRlZCBmb3IgZHVyaW5nIE1HTFJVIGV2aWN0aW9uLCB3aGljaCBtZWFucyB0aGlzIGlzIHdvcnRoIHBheWluZyBhdHRlbnRpb24gdG8uIEl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nLlxuXG5NeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGB0eXBlYCB2YXJpYWJsZS4gV2hlcmUgZG9lcyB0aGF0IGNvbWUgZnJvbT8gSXQncyByZXR1cm5lZCBieSBgaXNvbGF0ZV9mb2xpb3NgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgY29udGV4dC4gQWxzbywgdGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIGlzb2xhdGVkIGZvbGlvcyB3ZXJlbid0IGJlaW5nIGNvcnJlY3RseSBhY2NvdW50ZWQgZm9yIGluIGBOUl9JU09MQVRFRF9BTk9OYCBhbmQgYE5SX0lTT0xBVEVEX0ZJTEVgIHdoaWxlIGlzb2xhdGVkLCB3aGljaCBpcyBhIGJpZyBkZWFsIGZvciBhY2N1cmF0ZSBtZW1vcnkgYWNjb3VudGluZy5cblxuVGhlIG9idmlvdXMgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyBhcmUgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YC4gTm93LCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGEgaG90IHBhdGggd2hlbiBtZW1vcnkgaXMgbG93LCB0aGF0J3MgYWxtb3N0IGFsd2F5cyBhIGdvb2QgdGFyZ2V0LiBCdXQgYXJlIHRoZXJlIG90aGVyIGVudHJ5IHBvaW50cz8gSSdtIHRoaW5raW5nIGFib3V0IGBrc3dhcGRgLCB0aGUga2VybmVsIHRocmVhZC4gSXQncyB0cmlnZ2VyZWQgYnkgbWVtb3J5IHByZXNzdXJlLCBzbyBhbnkgc3lzY2FsbHMgdGhhdCBnZW5lcmF0ZSBtZW1vcnkgcHJlc3N1cmUg4oCTIGxpa2UgYG1tYXBgLCBgbWFkdmlzZWAsIGBtbG9ja2AsIGBmYWxsb2NhdGVgLCBgd3JpdGVgIOKAkyBhcmUgYWxsIGV2ZW50dWFsbHkgZ29pbmcgdG8gaGl0IGB0cnlfdG9fZnJlZV9wYWdlc2AuIFRoaXMgaXMgY29yZSBNTSByZWNsYWltIGxvZ2ljLCBzbyBmdXp6aW5nIHNob3VsZCBzaW1wbHkgaW52b2x2ZSBtZW1vcnktaW50ZW5zaXZlIHdvcmtsb2FkcyB0byBleGVyY2lzZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocy4gSSB3aWxsIGZvY3VzIG9uIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBhcyB0aGUgbWFpbiBzeW1ib2xzIGZvciBmdXp6aW5nLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQncyBtYWtlIHN1cmUgYExSVV9HRU5gIGlzIGV2ZW4gZW5hYmxlZCBieSBkZWZhdWx0LiBBIHF1aWNrIGNoZWNrIG9mIGBtbS9LY29uZmlnYCBzaG93cyB0aGF0IGl0J3MgY29uZmlndXJhYmxlLCBhbmQgZGVwZW5kZW50IG9uIE1NVS4gV2Ugc2hvdWxkIGJlIHN1cmUgd2UgZW5hYmxlIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAuIFdpdGggdGhhdCBpbiBwbGFjZSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjAzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjM3LjY0MTAwMTUxMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMDg3MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOX0VOQUJMRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTE0MDE9Y29uZmlnIExSVV9HRU5cXG4tLVxcbm1tL0tjb25maWctMTQwOS1cXG5tbS9LY29uZmlnOjE0MTA6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxMS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6MzcuODAxMDk3OTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMjQ0MTY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBwYWdlIGdlbmVyYXRpb24sIGFuZCBJIG5lZWQgdG8gZ2V0IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGtub2JzIGFzc29jaWF0ZWQgd2l0aCBpdC4gQWgsIHllcywgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYOKAlHRoYXQncyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vay4gVGhvc2Ugc291bmQgZmFtaWxpYXIuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGxvY2F0aW9uIGludGVyYWN0cyB3aXRoIGlzb2xhdGluZyBmb2xpb3MuIFRoZSBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgaG93IGBpc29sYXRlX2ZvbGlvc2AgaXMgYmVpbmcgZGVmaW5lZCwgd2hpY2ggaW5jbHVkZXMgdW5kZXJzdGFuZGluZyB0aGUgYHR5cGVgIGRlZmluaXRpb24gaW4gdGhhdCBjb2RlIHBhdGguIFRoYXQgd2lsbCBtYWtlIGl0IGVhc2llciB0byByZWFzb24gYWJvdXQgdGhlIExSVSBnZW5lcmF0aW9uIHByb2Nlc3MgYW5kIGhvdyBpdCBpcyBiZWluZyBpbmZsdWVuY2VkIGJ5IGFsbG9jYXRpb24gc2V0dGluZ3MuIEdvb2QuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NzAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1Nzo0MC45MzM1NDM4NjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzODc5ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzb2xhdGVfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ3NTU9c3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00NzczLVxcbm1tL3Ztc2Nhbi5jOjQ3NzQ6c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00Nzc1LVxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzLFxcbi0tXFxubW0vdm1zY2FuLmM9NDgwOD1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4MjktXFxubW0vdm1zY2FuLmM6NDgzMDpcXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcXG5tbS92bXNjYW4uYy00ODMxLVxcdFxcdFxcdFxcdCBcXHUwMDI2bGlzdCwgXFx1MDAyNmlzb2xhdGVkLCBcXHUwMDI2dHlwZSwgXFx1MDAyNnR5cGVfc2Nhbm5lZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjQxLjAyNzQzMzIzNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjM3MDUwMDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGb2xpbyBJc29sYXRpb24gaW4gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGhhbmRsaW5nIGZvbGlvIGlzb2xhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGB0eXBlYCB2YXJpYWJsZSwgZnJvbSB3aGF0IEkgY2FuIGdhdGhlciwgaXMgZWl0aGVyIGBMUlVfR0VOX0FOT05gICgwKSBvciBgTFJVX0dFTl9GSUxFYCAoMSkuIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gSXQgZGljdGF0ZXMgd2hldGhlciB3ZSdyZSBkZWFsaW5nIHdpdGggYW5vbnltb3VzIG1lbW9yeSBvciBmaWxlLWJhY2tlZCBtZW1vcnkuIFRoZSBleHByZXNzaW9uIGBOUl9JU09MQVRFRF9BTk9OICsgdHlwZWAgd2lsbCBldmFsdWF0ZSB0byBlaXRoZXIgYE5SX0lTT0xBVEVEX0FOT05gIG9yIGBOUl9JU09MQVRFRF9GSUxFYCwgcHJvdmlkaW5nIGFuIGVhc3kgbWVjaGFuaXNtIHRvIGNsYXNzaWZ5IHRoZSBpc29sYXRlZCBmb2xpb3MuXG5cbk5vdywgdGhlIG1haW4gZm9jdXMgaGVyZSBpcyBvbiB0aGUgYGV2aWN0X2ZvbGlvc2AgZnVuY3Rpb24uIFRoZSBwYXRjaCBzdWdnZXN0cyBhIHRlbXBvcmFyeSBtb2RpZmljYXRpb24gdG8gdGhlIG5vZGUgcGFnZSBzdGF0ZSB3aXRoaW4gYGV2aWN0X2ZvbGlvc2AuIEl0J3MgYWRkaW5nIHRoZSBudW1iZXIgb2YgaXNvbGF0ZWQgZm9saW9zLCBhbmQgaW1tZWRpYXRlbHkgc3VidHJhY3RpbmcgdGhlbSBiZWZvcmUgcmV0dXJuaW5nLiBUaGlzIGlzIGEgY3J1Y2lhbCBkZXRhaWwuIEl0IGluZGljYXRlcyB0aGF0IGBldmljdF9mb2xpb3NgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGFjY3VyYXRlbHkgcmVmbGVjdCB0aGUgc3RhdGUgb2YgaXNvbGF0ZWQgZm9saW9zLCBwYXJ0aWN1bGFybHkgZm9yIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGUgaWRlYSBpcyB0byBlbnN1cmUgdGhhdCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLCBsaWtlIGB0b29fbWFueV9pc29sYXRlZGAgaW4gY29tcGFjdGlvbiBvciB0aGUgVk0gc2Nhbm5lciwgc2VlIHRoZSBjb3JyZWN0IG51bWJlciBvZiBpc29sYXRlZCBmb2xpb3MuIFRoaXMgd291bGQgYmUgdG8gcHJldmVudCBpbmFjY3VyYXRlIGRlY2lzaW9uIG1ha2luZyBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbi5cblxuSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyB0aGF0IHRyaWdnZXIgdGhpcyBiZWhhdmlvci4gSXMgdGhlcmUgYSBzcGVjaWZpYyBzeXN0ZW0gY2FsbCBvciBhY3Rpb24gdGhhdCBpbml0aWF0ZXMgdGhpcyBpc29sYXRpb24gYW5kIGV2aWN0aW9uIHByb2Nlc3M/IEl0IHNlZW1zIG1lbW9yeSBwcmVzc3VyZSBpcyB0aGUgZHJpdmluZyBmb3JjZSBoZXJlLiBQZXJoYXBzIGBtYWR2aXNlKE1BRFZfUEFHRU9VVClgIGNvdWxkIGJlIGRpcmVjdGx5IGludm9sdmVkLCBhcyBpdCBjYW4gdHJpZ2dlciByZWNsYWltLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiBgbWFkdmlzZShNQURWX1BBR0VPVVQpYCBhY3R1YWxseSBjYWxscyBgc2hyaW5rX2ZvbGlvX2xpc3RgIG9yIGRpcmVjdGx5IGBldmljdF9mb2xpb3NgLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NTUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6NDcuMjY0NDg2NjY4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY0Nzk2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFEVl9QQUdFT1VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi92YWRkci5jPTg3OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl92YV9hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy04OTItXFx0Y2FzZSBEQU1PU19QQUdFT1VUOlxcbm1tL2RhbW9uL3ZhZGRyLmM6ODkzOlxcdFxcdG1hZHZfYWN0aW9uID0gTUFEVl9QQUdFT1VUO1xcbm1tL2RhbW9uL3ZhZGRyLmMtODk0LVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vbWFkdmlzZS5jPTEzMzg9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xMzU1LVxcdFxcdHJldHVybiBtYWR2aXNlX2NvbGQobWFkdl9iZWhhdmlvcik7XFxubW0vbWFkdmlzZS5jOjEzNTY6XFx0Y2FzZSBNQURWX1BBR0VPVVQ6XFxubW0vbWFkdmlzZS5jLTEzNTctXFx0XFx0cmV0dXJuIG1hZHZpc2VfcGFnZW91dChtYWR2X2JlaGF2aW9yKTtcXG4tLVxcbm1tL21hZHZpc2UuYz0xNTE4PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1MzEtXFx0Y2FzZSBNQURWX0NPTEQ6XFxubW0vbWFkdmlzZS5jOjE1MzI6XFx0Y2FzZSBNQURWX1BBR0VPVVQ6XFxubW0vbWFkdmlzZS5jLTE1MzMtXFx0Y2FzZSBNQURWX1BPUFVMQVRFX1JFQUQ6XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTU2Mj1zdGF0aWMgYm9vbCBwcm9jZXNzX21hZHZpc2VfcmVtb3RlX3ZhbGlkKGludCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTY1LVxcdGNhc2UgTUFEVl9DT0xEOlxcbm1tL21hZHZpc2UuYzoxNTY2OlxcdGNhc2UgTUFEVl9QQUdFT1VUOlxcbm1tL21hZHZpc2UuYy0xNTY3LVxcdGNhc2UgTUFEVl9XSUxMTkVFRDpcXG4tLVxcbm1tL21hZHZpc2UuYz0xNzQyPXN0YXRpYyBlbnVtIG1hZHZpc2VfbG9ja19tb2RlIGdldF9sb2NrX21vZGUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTc1MC1cXHRjYXNlIE1BRFZfQ09MRDpcXG5tbS9tYWR2aXNlLmM6MTc1MTpcXHRjYXNlIE1BRFZfUEFHRU9VVDpcXG5tbS9tYWR2aXNlLmMtMTc1Mi1cXHRjYXNlIE1BRFZfUE9QVUxBVEVfUkVBRDpcXG4tLVxcbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE5NjItICpcXHRcXHRlYXNpbHkgaWYgbWVtb3J5IHByZXNzdXJlIGhhcHBlbnMuXFxubW0vbWFkdmlzZS5jOjE5NjM6ICogIE1BRFZfUEFHRU9VVCAtIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgZXhwZWN0ZWQgdG8gdXNlIHRoaXMgbWVtb3J5IHNvb24sXFxubW0vbWFkdmlzZS5jLTE5NjQtICpcXHRcXHRwYWdlIG91dCB0aGUgcGFnZXMgaW4gdGhpcyByYW5nZSBpbW1lZGlhdGVseS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6NDcuMzgwOTcxNzU4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODc0OTQzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbWFkdmlzZV9wYWdlb3V0YCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gdGhpbmtpbmcgYWJvdXQgYG1hZHZpc2VfcGFnZW91dGAuIEl0J3MgcHJldHR5IGZ1bmRhbWVudGFsLCByaWdodD8gV2UncmUgZXNzZW50aWFsbHkgdGVsbGluZyB0aGUga2VybmVsIHRvIHRyeSBhbmQgcmVjbGFpbSBtZW1vcnkgdGhhdCdzIGJlZW4gbWFwcGVkLCBidXQgaXNuJ3QgYWN0aXZlbHkgYmVpbmcgdXNlZC4gVGhlIGltcGxpY2F0aW9ucyBoZXJlIGFyZSBodWdlLCBhbmQgSSdtIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdXNlIGNhc2VzIGluIG15IGhlYWQ6IHBvdGVudGlhbCBmb3IgaW1wcm92ZWQgbWVtb3J5IHV0aWxpemF0aW9uIGluIGEgc3lzdGVtIHdpdGggbWVtb3J5IHByZXNzdXJlLCBtaXRpZ2F0aW5nIG1lbW9yeSBsZWFrcyBvciBmcmFnbWVudGF0aW9uLCBhbmQgb3B0aW1pemluZyBwZXJmb3JtYW5jZSB1bmRlciB2YXJpb3VzIHdvcmtsb2Fkcy4gSSdtIHdvbmRlcmluZyBhYm91dCB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgb2YgY291cnNlLiBJcyBpdCBsZXZlcmFnaW5nIGRpcnR5IHBhZ2UgdHJhY2tpbmcgZWZmZWN0aXZlbHk/IFdoYXQncyB0aGUgZ3JhbnVsYXJpdHkgb2YgaXRzIGFjdGlvbnMgLSBwYWdlLCBvciByYW5nZXM/IEknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wYWN0OyBgbWFkdmlzZWAgY2FsbHMgYXJlbid0IGZyZWUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBiZW5jaG1hcmsgdGhpcyBhbmQgY29uc2lkZXIgdGhlIGNvc3QvYmVuZWZpdCB0cmFkZS1vZmZzLiBXaGF0J3MgdGhlIGJlc3Qgd2F5IHRvIGxldmVyYWdlIHRoaXMgQVBJP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI0NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjUwLjk2ODQ2OTUyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzUyMzEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX3BhZ2VvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz01OTU9c3RhdGljIGxvbmcgbWFkdmlzZV9jb2xkKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTYxMC1cXG5tbS9tYWR2aXNlLmM6NjExOnN0YXRpYyB2b2lkIG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxubW0vbWFkdmlzZS5jLTYxMi1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21hZHZpc2UuYy02MjUtXFxubW0vbWFkdmlzZS5jOjYyNjpzdGF0aWMgbG9uZyBtYWR2aXNlX3BhZ2VvdXQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTYyNy17XFxuLS1cXG5tbS9tYWR2aXNlLmMtNjQ1LVxcdHRsYl9nYXRoZXJfbW11KFxcdTAwMjZ0bGIsIG1hZHZfYmVoYXZpb3ItXFx1MDAzZW1tKTtcXG5tbS9tYWR2aXNlLmM6NjQ2OlxcdG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKFxcdTAwMjZ0bGIsIHZtYSwgXFx1MDAyNm1hZHZfYmVoYXZpb3ItXFx1MDAzZXJhbmdlKTtcXG5tbS9tYWR2aXNlLmMtNjQ3LVxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcbi0tXFxubW0vbWFkdmlzZS5jPTEzMzg9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xMzU2LVxcdGNhc2UgTUFEVl9QQUdFT1VUOlxcbm1tL21hZHZpc2UuYzoxMzU3OlxcdFxcdHJldHVybiBtYWR2aXNlX3BhZ2VvdXQobWFkdl9iZWhhdmlvcik7XFxubW0vbWFkdmlzZS5jLTEzNTgtXFx0Y2FzZSBNQURWX0ZSRUU6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU3OjUxLjA1NTk5ODgyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTY4OTI5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgbWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2VgKipcblxuUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gXCJtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZVwiLi4uIFRoYXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBzcGVjaWZpYyBhcmVhIG9mIGludGVyZXN0OiBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGhvdyB3ZSdyZSBpbmZsdWVuY2luZyB0aGUgcGFnZS1vdXQgYmVoYXZpb3Igb2YgdGhlIGtlcm5lbC4gVGhpcyBpc24ndCBqdXN0IGEgZ2VuZXJpYyBgbWFkdmlzZWAgY2FsbDsgdGhlIFwicGFnZW91dFwiIGFzcGVjdCBpcyBjcml0aWNhbC4gU28sIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCB1c2UgY2FzZXMuIElzIHRoaXMgcmVsYXRlZCB0byB3b3JrbG9hZCBpc29sYXRpb24/IFBlcmZvcm1hbmNlIHR1bmluZyBmb3IgbWVtb3J5LWludGVuc2l2ZSBhcHBsaWNhdGlvbnM/IE9yIHBlcmhhcHMgd2UncmUgZXhwZXJpbWVudGluZyB3aXRoIG5vdmVsIG1lbW9yeSByZWNsYW1hdGlvbiBzdHJhdGVnaWVzP1xuXG5HaXZlbiB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGluc2lnaHRzIGludG8gYSBtZWNoYW5pc20gd2hlcmUgd2UgY2FuICpzcGVjaWZ5IGEgcmFuZ2UqIG9mIHBhZ2VzIGZvciB0aGUga2VybmVsIHRvIGNvbnNpZGVyIGZvciBwYWdpbmcgb3V0LiBUaGF0IGxldmVsIG9mIGNvbnRyb2wgaXMgaW50ZXJlc3RpbmcuIEl0IGNvdWxkIGJlIHVzZWQgdG8gcHJvYWN0aXZlbHkgcHVzaCBpbmFjdGl2ZSBwYWdlcyB0byBkaXNrLCBmcmVlaW5nIHVwIHBoeXNpY2FsIFJBTSBmb3IgbW9yZSBjcml0aWNhbCBkYXRhLiBDb252ZXJzZWx5LCBpdCBtaWdodCBiZSB1c2VkIHRvICpwcmV2ZW50KiBjZXJ0YWluIHBhZ2VzIGZyb20gYmVpbmcgZXZpY3RlZCwgcGVyaGFwcyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBkdXJpbmcgYSBjcml0aWNhbCBwaGFzZS5cblxuTXkgbWluZCBpcyBhbHJlYWR5IHJhY2luZyB3aXRoIHF1ZXN0aW9uczogV2hhdCdzIHRoZSBncmFudWxhcml0eSBvZiBjb250cm9sPyBJcyBpdCBwYWdlLWFsaWduZWQ/IEFyZSB0aGVyZSBhbnkgcmVzdHJpY3Rpb25zIG9uIHRoZSBtZW1vcnkgcmVnaW9ucyB3ZSBjYW4gaW5mbHVlbmNlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBOVU1BIHN5c3RlbXMsIGFuZCBob3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IG1lY2hhbmlzbXMsIGxpa2UgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBvciBLU00/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBgTUFEVl9QQUdFT1VUYCBhbmQgb3RoZXIgYG1hZHZpc2VgIGZsYWdzLCBidXQgdGhlIGBfcGFnZV9yYW5nZWAgcGFydCBpbmRpY2F0ZXMgdGhpcyBpcyBzb21ldGhpbmcgc3BlY2lhbGl6ZWQuIExldCdzIHNlZSBob3cgaXQgb3BlcmF0ZXMuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc291cmNlIGNvZGUsIHRyYWNlIGl0cyB1c2FnZSBwYXR0ZXJucyB3aXRoaW4gdGhlIGtlcm5lbCwgYW5kIHRoZW4gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgYmVuY2htYXJrcyBvciBkaXNjdXNzaW9ucyBhYm91dCBpdC4gTGV0J3Mgc2VlIHdoYXQncyBvdXQgdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODkzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTc6NTYuNTEyOTE0NDg4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjY1NjQxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTU5NT1zdGF0aWMgbG9uZyBtYWR2aXNlX2NvbGQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtNjEwLVxcbm1tL21hZHZpc2UuYzo2MTE6c3RhdGljIHZvaWQgbWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG5tbS9tYWR2aXNlLmMtNjEyLVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWFkdmlzZS5jPTYyNj1zdGF0aWMgbG9uZyBtYWR2aXNlX3BhZ2VvdXQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtNjQ1LVxcdHRsYl9nYXRoZXJfbW11KFxcdTAwMjZ0bGIsIG1hZHZfYmVoYXZpb3ItXFx1MDAzZW1tKTtcXG5tbS9tYWR2aXNlLmM6NjQ2OlxcdG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKFxcdTAwMjZ0bGIsIHZtYSwgXFx1MDAyNm1hZHZfYmVoYXZpb3ItXFx1MDAzZXJhbmdlKTtcXG5tbS9tYWR2aXNlLmMtNjQ3LVxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1Nzo1Ni42MDk1Nzc1MTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzMjMyNjM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIGBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBzb3VyY2UgZm9yIGBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZWAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLCBhbmQgd2hhdCBpdHMgc3BlY2lmaWMgcHVycG9zZSBpcy4gSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggYG1hZHZpc2VgIGluIGdlbmVyYWwsIHRoZSBoaW50cyBpdCBwcm92aWRlcyB0byB0aGUga2VybmVsIGFib3V0IG1lbW9yeSB1c2FnZSwgYnV0IHRoaXMgcmFuZ2Utc3BlY2lmaWMgdmVyc2lvbiBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGRlc2lnbmVkIGZvciBtb3JlIHRhcmdldGVkIHBhZ2Utb3V0IG9wZXJhdGlvbnMuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBXaGF0J3MgdGhlIGNvbnRleHQgd2hlcmUgdGhpcyB3b3VsZCBiZSAqYmV0dGVyKiB0aGFuIGEgbW9yZSBnZW5lcmFsIGBNQURWX1BBR0VPVVRgIGFwcGxpZWQgdG8gdGhlIHdob2xlIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIHByb2Nlc3Mgb3IgYSBzdGFuZGFyZCBzeXN0ZW0td2lkZSBwYWdlLW91dCB0cmlnZ2VyPyBBbSBJIGxvb2tpbmcgYXQgc2l0dWF0aW9ucyB3aGVyZSBhbiBhcHBsaWNhdGlvbiBoYXMgYSBkZXRhaWxlZCBrbm93bGVkZ2Ugb2YgdGhlIG1lbW9yeSBpdCB3YW50cyB0byBldmljdCBhbmQgY2FuIHNpZ25hbCB0aGUga2VybmVsIHdpdGggYSBmaW5lciBsZXZlbCBvZiBncmFudWxhcml0eT8gSXMgdGhpcyBzb21ldGhpbmcgdGhhdCdzIG9ubHkgcmVsZXZhbnQgaW4gc3BlY2lmaWMgd29ya2xvYWRzP1xuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIERvZXMgaXQgYWxsb3cgZm9yIG1vcmUgZWZmaWNpZW50IHBhZ2UgcmVwbGFjZW1lbnQgYWxnb3JpdGhtcz8gRG9lcyBpdCBnaXZlIHRoZSB1c2VyIG1vcmUgY29udHJvbCBvdmVyIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHBhZ2VzLCB0aHVzIGF2b2lkaW5nIHVubmVjZXNzYXJ5IGRpc2sgSS9PPyBPciBkb2VzIHRoZSBvdmVyaGVhZCBvZiBjYWxsaW5nIHRoZSBmdW5jdGlvbiBhbmQgbWFuYWdpbmcgdGhlIHJhbmdlcyBkaW1pbmlzaCB0aGUgYmVuZWZpdCBpZiBpdCdzIG5vdCBoYW5kbGVkIHdlbGw/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGZvciBkZWFkbG9ja3Mgb3IgY29udGVudGlvbiwgZXNwZWNpYWxseSBpZiB0aGUgcGFnZXMgYXJlIGhlYXZpbHkgdXNlZC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBoYXBwZW5zIGlmIHRoZSBwcm9jZXNzIGNhbGxpbmcgaXQgaXMgbXVsdGktdGhyZWFkZWQuXG5cbkknbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGV0aWVzIGluIHRoZSBhcmd1bWVudCBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBob3cgZG9lcyBpdCBkZWFsIHdpdGggdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgYWRkcmVzc2VzLCBhbmQgd2hhdCBhcmUgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudHM/IEFyZSB0aGVyZSBzcGVjaWZpYyBlcnJvciBjYXNlcyB0byBjb25zaWRlciwgYW5kIGhvdyBhcmUgdGhvc2UgaGFuZGxlZCBieSB0aGUga2VybmVsP1xuXG5JbiBzdW1tYXJ5LCBteSBtYWluIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24ncyBjYXBhYmlsaXRpZXMsIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLCBhbmQgdGhlIHNjZW5hcmlvcyB3aGVyZSBpdCBzaG91bGQgKG9yIHNob3VsZG4ndCkgYmUgZW1wbG95ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTkyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTg6MDAuOTQxOTA3MzM1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tYWR2aXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjExLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjExOlxcdHN0YXRpYyB2b2lkIG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuIDYxMjpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gNjEzOlxcdFxcdFxcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yX3JhbmdlICpyYW5nZSlcXG4gNjE0OlxcdHtcXG4gNjE1OlxcdFxcdHN0cnVjdCBtYWR2aXNlX3dhbGtfcHJpdmF0ZSB3YWxrX3ByaXZhdGUgPSB7XFxuIDYxNjpcXHRcXHRcXHQucGFnZW91dCA9IHRydWUsXFxuIDYxNzpcXHRcXHRcXHQudGxiID0gdGxiLFxcbiA2MTg6XFx0XFx0fTtcXG4gNjE5OlxcdFxcbiA2MjA6XFx0XFx0dGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSk7XFxuIDYyMTpcXHRcXHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgcmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kLCBcXHUwMDI2Y29sZF93YWxrX29wcyxcXG4gNjIyOlxcdFxcdFxcdFxcdCAgICBcXHUwMDI2d2Fsa19wcml2YXRlKTtcXG4gNjIzOlxcdFxcdHRsYl9lbmRfdm1hKHRsYiwgdm1hKTtcXG4gNjI0OlxcdH1cXG4gNjI1OlxcdFxcbiA2MjY6XFx0c3RhdGljIGxvbmcgbWFkdmlzZV9wYWdlb3V0KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbiA2Mjc6XFx0e1xcbiA2Mjg6XFx0XFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xcbiA2Mjk6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtYWR2X2JlaGF2aW9yLVxcdTAwM2V2bWE7XFxuIDYzMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTg6MDAuOTQyMDYyNzM1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzAwNTc5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgY29sZF93YWxrX29wc2Agd2l0aGluIGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hYCwgYW5kIEkgc2VlIGl0J3MgdXNpbmcgYGNvbGRfd2Fsa19vcHNgLiAgVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBteSBleHBlcnQgYnJhaW4gdG8gemVybyBpbiBvbiB3aGF0IHRoYXQgbWVhbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgb3BlcmF0aW9uIHNldC4gSXMgdGhpcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50PyBQYWdlIHRhYmxlIG1hbmlwdWxhdGlvbj8gV2hhdCBkZWZpbmVzIFwiY29sZFwiIGluIHRoaXMgY29udGV4dD8gSXMgdGhpcyBhc3NvY2lhdGVkIHdpdGggYW4gTFJVIHN0cmF0ZWd5PyBJcyB0aGlzIGFib3V0IHRoZSBpbml0aWFsIG1hcHBpbmcgb2YgYSBWTUEgdmVyc3VzIGEgc3Vic2VxdWVudCBhY2Nlc3M/ICBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBjb2xkX3dhbGtfb3BzYCBhbmQgZmlndXJlIG91dCBob3cgaXQgZGlmZmVycyBmcm9tIG90aGVyIHdhbGsgb3BlcmF0aW9ucywgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3IgcGVyZm9ybWFuY2UsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIG9yIHdvcmtsb2FkIHNjZW5hcmlvcy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhlc2Ugd2Fsa2luZyBvcGVyYXRpb25zIGlzIGNydWNpYWwgZm9yIG9wdGltYWwgbWVtb3J5IHBlcmZvcm1hbmNlLCBzbyBsZXQncyBzdGFydCBkaXNzZWN0aW5nIGBjb2xkX3dhbGtfb3BzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU4OjA1LjA3MjEyNDcwNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc4NDM1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sZF93YWxrX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTM1Mz1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbi0tXFxubW0vbWFkdmlzZS5jLTU2Ny1cXG5tbS9tYWR2aXNlLmM6NTY4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcXG5tbS9tYWR2aXNlLmMtNTY5LVxcdC5wbWRfZW50cnkgPSBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UsXFxuLS1cXG5tbS9tYWR2aXNlLmM9NTczPXN0YXRpYyB2b2lkIG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tYWR2aXNlLmMtNTg0LVxcdHRsYl9zdGFydF92bWEodGxiLCB2bWEpO1xcbm1tL21hZHZpc2UuYzo1ODU6XFx0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCwgXFx1MDAyNmNvbGRfd2Fsa19vcHMsXFxubW0vbWFkdmlzZS5jLTU4Ni1cXHRcXHRcXHRcXHUwMDI2d2Fsa19wcml2YXRlKTtcXG4tLVxcbm1tL21hZHZpc2UuYz02MTE9c3RhdGljIHZvaWQgbWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21hZHZpc2UuYy02MjAtXFx0dGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSk7XFxubW0vbWFkdmlzZS5jOjYyMTpcXHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgcmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kLCBcXHUwMDI2Y29sZF93YWxrX29wcyxcXG5tbS9tYWR2aXNlLmMtNjIyLVxcdFxcdFxcdCAgICBcXHUwMDI2d2Fsa19wcml2YXRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTg6MDUuMTU5OTczNDAzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NTMxMzAyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGlzIGZ1bmN0aW9uOiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYC4gSSBrbm93IEkndmUgZW5jb3VudGVyZWQgdGhpcyBiZWZvcmU7IGl0IGRlYWxzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHVzZXIgaGludHMgYWJvdXQgcGFnZSB1c2FnZSwgcGFydGljdWxhcmx5IGFyb3VuZCBjb2xkIG9yIHBhZ2Utb3V0IGJlaGF2aW9ycy4gTGV0J3Mgc2VlLi4uIHRoZSBuYW1lIGl0c2VsZiBnaXZlcyBhd2F5IGEgYml0IG9mIGl0cyBwdXJwb3NlLiBJdCdzIGRlYWxpbmcgd2l0aCBhIHJhbmdlIG9mIFBURXMgKHBhZ2UgdGFibGUgZW50cmllcyksIHdoaWNoIG1lYW5zIGl0J3Mgd29ya2luZyBhdCBhIGZhaXJseSBsb3cgbGV2ZWwsIG1hbmFnaW5nIHRoZSBtYXBwaW5nIG9mIHZpcnR1YWwgbWVtb3J5IHRvIHBoeXNpY2FsIG1lbW9yeS4gU3BlY2lmaWNhbGx5LCBpdCdzIHRha2luZyBgbWFkdmlzZWAgaGludHMg4oCTIGxpa2VseSBgTUFEVl9DT0xEYCBvciBwb3RlbnRpYWxseSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgcGFnZS1vdXQgc3Vic3lzdGVtLCBqdWRnaW5nIGJ5IHRoZSBuYW1lIOKAkyBhbmQgYXBwbHlpbmcgdGhlbSB0byB0aG9zZSBlbnRyaWVzLiBUaGlzIGxpa2VseSBpbnZvbHZlcyB0aGluZ3MgbGlrZSBtYXJraW5nIHBhZ2VzIGFzIGxlc3MtcmVjZW50bHkgdXNlZCwgcG90ZW50aWFsbHkgdHJpZ2dlcmluZyBwYWdlLW91dCBhY3Rpdml0aWVzIHRvIGZyZWUgdXAgcGh5c2ljYWwgUkFNLCBvciBhbHRlcmluZyB0aGUgcGFnZSdzIGNhY2hpbmcgYmVoYXZpb3IuIFRoZSBjaGFsbGVuZ2UgaGVyZSBwcm9iYWJseSBsaWVzIGluIHRoZSBzeW5jaHJvbml6YXRpb24gcmVxdWlyZWQgdG8gbW9kaWZ5IHRoZXNlIFBURXMgc2FmZWx5LCBoYW5kbGluZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGggb3RoZXIgcHJvY2Vzc2VzIGFjY2Vzc2luZyB0aGUgc2FtZSBtZW1vcnkgcmFuZ2UsIGFuZCBlbnN1cmluZyB0aGUgY2hhbmdlcyBhcmUgY29oZXJlbnQgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIExldCdzIGRpZyBpbiBhbmQgc2VlIHRoZSBleGFjdCBtZWNoYW5pY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDc3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTg6MDkuNjEzMTA3MzU5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTkwOTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0zNDM9c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9mb2xpb19wdGVfYmF0Y2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zNTItXFxubW0vbWFkdmlzZS5jOjM1MzpzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbm1tL21hZHZpc2UuYy0zNTQtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21hZHZpc2UuYz01Njg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xcbm1tL21hZHZpc2UuYzo1Njk6XFx0LnBtZF9lbnRyeSA9IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSxcXG5tbS9tYWR2aXNlLmMtNTcwLVxcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODowOS43MTMwMjE2OTlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwMzg2MzgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBmbG93IGhlcmUuLi5cblxuKipEZWNvbnN0cnVjdGluZyBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UqKlxuXG5SaWdodCwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCB3b3JrcyBpbnRlcm5hbGx5LCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgZXZpY3RpbmcgcGFnZXMuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBpdCBkaXJlY3RseSBjYWxsIGBldmljdF9mb2xpb3NgPyBUaGF0IGRvZXNuJ3Qgc2VlbSByaWdodC4gTG9va2luZyBhdCB0aGUgY29kZSwgYGV2aWN0X2ZvbGlvc2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIG5vdCBhIGdsb2JhbCBmdW5jdGlvbiwgYW5kIEknZCBleHBlY3QgdGhhdCBraW5kIG9mIHV0aWxpdHkgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZyb20gdGhlIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyBpdCBkb2Vzbid0IGxvb2sgbGlrZSBpdCdzIGEgZGlyZWN0IGNhbGwuXG5cblNvLCBpZiBpdCdzIG5vdCBgZXZpY3RfZm9saW9zYCwgd2hhdCdzIGFjdHVhbGx5IGRvaW5nIHRoZSB3b3JrPyBJdCdzIGxpa2VseSB0aGF0IGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIGNhbGxzIGEgaGlnaGVyLWxldmVsIHJlY2xhaW0gZnVuY3Rpb24sIHNvbWV0aGluZyBsaWtlIGByZWNsYWltX3BhZ2VzYCBvciBhbm90aGVyIHNpbWlsYXIgZnVuY3Rpb24gdGhhdCBkZWFscyB3aXRoIHBhZ2UgZXZpY3Rpb24uIEl0J3MgdGhlIG1vc3QgbG9naWNhbCBwYXRoLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjYWxsIHN0YWNrIHRvIGNvbmZpcm0gdGhhdCwgYnV0IG15IGh1bmNoIGlzIHRoYXQgYHJlY2xhaW1fcGFnZXNgIG9yIGFuIGVxdWl2YWxlbnQgaXMgaGFuZGxpbmcgdGhlIGFjdHVhbCBwYWdlIGV2aWN0aW9uIHVuZGVyIHRoZSBob29kLiBJIHNob3VsZCBiZSBhYmxlIHRvIGNvbmZpcm0gd2l0aCBhIGJpdCBtb3JlIGNvZGUgZGl2aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTYzOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU4OjEzLjkxNjg5MDIxN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MTMwMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlY2xhaW1fcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3BhZGRyLmM9MjIwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjcxLVxcdFxcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XFxubW0vZGFtb24vcGFkZHIuYzoyNzI6XFx0YXBwbGllZCA9IHJlY2xhaW1fcGFnZXMoXFx1MDAyNmZvbGlvX2xpc3QpO1xcbm1tL2RhbW9uL3BhZGRyLmMtMjczLVxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubW0vaW50ZXJuYWwuaD0xMjA1PWV4dGVybiB1bnNpZ25lZCBsb25nICBfX211c3RfY2hlY2sgdm1fbW1hcF9wZ29mZihzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xMjA4LVxcbm1tL2ludGVybmFsLmg6MTIwOTp1bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCk7XFxubW0vaW50ZXJuYWwuaC0xMjEwLXVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL21hZHZpc2UuYz0zNTM9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21hZHZpc2UuYy00NDItXFx0XFx0aWYgKHBhZ2VvdXQpXFxubW0vbWFkdmlzZS5jOjQ0MzpcXHRcXHRcXHRyZWNsYWltX3BhZ2VzKFxcdTAwMjZmb2xpb19saXN0KTtcXG5tbS9tYWR2aXNlLmMtNDQ0LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vbWFkdmlzZS5jLTU2MS1cXHRpZiAocGFnZW91dClcXG5tbS9tYWR2aXNlLmM6NTYyOlxcdFxcdHJlY2xhaW1fcGFnZXMoXFx1MDAyNmZvbGlvX2xpc3QpO1xcbm1tL21hZHZpc2UuYy01NjMtXFx0Y29uZF9yZXNjaGVkKCk7XFxuLS1cXG5tbS92bXNjYW4uYz0yMTUwPXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjbGFpbV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0yMTY5LVxcdH1cXG5tbS92bXNjYW4uYzoyMTcwOlxcdHRyYWNlX21tX3Ztc2Nhbl9yZWNsYWltX3BhZ2VzKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYy5ucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFxcdTAwMjZzdGF0KTtcXG5tbS92bXNjYW4uYy0yMTcxLVxcbi0tXFxubW0vdm1zY2FuLmMtMjE3NC1cXG5tbS92bXNjYW4uYzoyMTc1OnVuc2lnbmVkIGxvbmcgcmVjbGFpbV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxcbm1tL3Ztc2Nhbi5jLTIxNzYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODoxNC4wNzQwMjkwNTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIwOTM2NzU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbmRlcnN0YW5kaW5nIFBhZ2UgUmVjbGFpbSBhbmQgTUdMUlUgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBsZXQncyBicmVhayBkb3duIHRoaXMgcGFnZSByZWNsYWltIHByb2Nlc3MuIEknbSBmb2xsb3dpbmcgdGhlIGNvZGUgcGF0aCwgYW5kIGhlcmUncyB3aGF0IEknbSBzZWVpbmc6IGByZWNsYWltX3BhZ2VzYCBpcyB0aGUgZW50cnkgcG9pbnQsIHdoaWNoIGxlYWRzIHRvIGByZWNsYWltX2ZvbGlvX2xpc3RgLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgYHJlY2xhaW1fZm9saW9fbGlzdGAgZXZlbnR1YWxseSBmdW5uZWwgaW50byBgZXZpY3RfZm9saW9zYCBmcm9tIE1HTFJVPyBObywgdGhhdCdzIG5vdCB0aGUgY2FzZS4gYGV2aWN0X2ZvbGlvc2AgaXMgcGFydCBvZiBNR0xSVSBhbmQgaXMgYWN0dWFsbHkgY2FsbGVkIHRocm91Z2ggYHNocmlua19scnV2ZWNgLiBTbywgYHJlY2xhaW1fcGFnZXNgIGJ5cGFzc2VzIHRoZSBNR0xSVSBwYXRoIGFuZCBnb2VzIGRpcmVjdGx5IHRvIHJlY2xhaW1pbmcgdGhlIGZvbGlvIGxpc3QuXG5cblRoYXQgY2xhcmlmaWVzIGEgY3J1Y2lhbCBwb2ludDogYG1hZHZpc2UoTUFEVl9QQUdFT1VUKWAgZG9lc24ndCB0cmlnZ2VyIGBldmljdF9mb2xpb3NgIGRpcmVjdGx5LiBUaGF0J3MgYSBrZXkgdGFrZWF3YXkuXG5cbklmIHRoZSBnb2FsIGlzIHRvIHRyaWdnZXIgYGV2aWN0X2ZvbGlvc2AsIHdlICptdXN0KiBoaXQgYHNocmlua19scnV2ZWNgLiBUaGF0J3MgZG9uZSB2aWEgYHRyeV90b19mcmVlX3BhZ2VzYCBvciB0aGUga2VybmVsJ3MgYGtzd2FwZGAgcHJvY2Vzcy4gU28gSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIHR3byBmdW5jdGlvbnMsIGFsb25nIHdpdGggYHNocmlua19hbGxfbWVtb3J5YCwgd2hlbiBsb29raW5nIGZvciB0cmlnZ2Vycy4gRm9yZ2V0IGFib3V0IGBtYWR2aXNlKE1BRFZfUEFHRU9VVClgIGZvciB0aGlzIHBhcnRpY3VsYXIgbmVlZC5cblxuSXQgc2VlbXMgd2UgY2FuIGRpcmVjdGx5IGNhbGwgYHRyeV90b19mcmVlX3BhZ2VzYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLiBXYWl0LCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGNhbGxlZCBieSBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAuIEhtbS4gSXMgdGhlcmUgYW55IHN5c3RlbSBjYWxsIHRoYXQgZGlyZWN0bHkgdHJpZ2dlcnMgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgPyBJIHRoaW5rIHRoZXJlIGlzLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkuLi4gWWVzLCB1c2luZyBjZ3JvdXAgdjIsIHdyaXRpbmcgdG8gdGhlIGBtZW1vcnkucmVjbGFpbWAgZmlsZSB0cmlnZ2VycyB0aGF0IGZ1bmN0aW9uLiBMZXQncyBkaWcgaW50byBgbWVtb3J5LnJlY2xhaW1gIGFuZCBzZWUgd2hhdCBpdCBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU4NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODoyMC4yODM0MDAzOTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzgwOTk1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTc1PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTg1LVxcbm1tL2ludGVybmFsLmg6ODY6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9pbnRlcm5hbC5oLTg3LVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTc3Mj1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTgxNi1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTgxNzpcXHRcXHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXFxubW0vbWVtY29udHJvbC12MS5jLTE4MTgtXFx0XFx0XFx0XFx0bWVtc3cgPyAwIDogTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCkpIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xODM1PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTg1Mi1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTg1MzpcXHRcXHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXFxubW0vbWVtY29udHJvbC12MS5jLTE4NTQtXFx0XFx0XFx0XFx0XFx0XFx0ICBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yMzMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlY2xhaW1faGlnaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjM0OC1cXHRcXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxubW0vbWVtY29udHJvbC5jOjIzNDk6XFx0XFx0bnJfcmVjbGFpbWVkICs9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIG5yX3BhZ2VzLFxcbm1tL21lbWNvbnRyb2wuYy0yMzUwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI2MDA9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY1OS1cXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxubW0vbWVtY29udHJvbC5jOjI2NjA6XFx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXFxubW0vbWVtY29udHJvbC5jLTI2NjEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ3Nzg9c3RhdGljIHNzaXplX3QgbWVtb3J5X2hpZ2hfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ4MTYtXFxubW0vbWVtY29udHJvbC5jOjQ4MTc6XFx0XFx0cmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgbnJfcGFnZXMgLSBoaWdoLFxcbm1tL21lbWNvbnRyb2wuYy00ODE4LVxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwsIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ4MzQ9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDg3Mi1cXHRcXHRpZiAobnJfcmVjbGFpbXMpIHtcXG5tbS9tZW1jb250cm9sLmM6NDg3MzpcXHRcXHRcXHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIG5yX3BhZ2VzIC0gbWF4LFxcbm1tL21lbWNvbnRyb2wuYy00ODc0LVxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwsIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxcbi0tXFxubW0vdm1zY2FuLmM9Njc1Mz11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjc5Mi1cXG5tbS92bXNjYW4uYzo2NzkzOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjc5NC1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmMtNjgzMy0jZWxzZVxcbm1tL3Ztc2Nhbi5jOjY4MzQ6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS92bXNjYW4uYy02ODM1LVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS92bXNjYW4uYz03ODk2PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5NjctXFx0XFx0XFx0XFx0XFx0ICBNRU1DR19SRUNMQUlNX1BST0FDVElWRTtcXG5tbS92bXNjYW4uYzo3OTY4OlxcdFxcdFxcdHJlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csXFxubW0vdm1zY2FuLmMtNzk2OS1cXHRcXHRcXHRcXHRcXHRcXHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU4OjIwLjQ4NzIxNjI3N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg0NTQ5MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgUmVjbGFtYXRpb24gU3RyYXRlZ2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byBob3cgdGhpcyBtZW1vcnkgcmVjbGFtYXRpb24gaXMgd29ya2luZy4gTGV0J3Mgc2VlLi4uIEknbSBub3RpY2luZyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIHdoaWNoIGlzIGNhbGxlZCBieSBgbWVtb3J5LnJlY2xhaW1gIHdyaXRlcywgYW5kIGFsc28gYG1lbW9yeV9oaWdoX3dyaXRlYCBhbmQgYG1lbW9yeV9tYXhfd3JpdGVgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSB0aGluayBmb2N1c2luZyBvbiBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgYSBzb2xpZCBtb3ZlLCBhbmQgYHRyeV90b19mcmVlX3BhZ2VzYCBjYWxsZWQgYnkgdGhlIHBhZ2UgYWxsb2NhdG9yIGlzIGFub3RoZXIga2V5IHBvaW50LlxuXG5SaWdodCwgc28gdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyB0aGlzIGZ1bmN0aW9uIGluIGBtbS92bXNjYW4uY2AsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUwMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODoyNC43NzE3NzA0ODVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDIwMzI3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTcwNT1leHRlcm4gdm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbik7XFxubW0vaW50ZXJuYWwuaDo3MDY6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL2ludGVybmFsLmgtNzA3LVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTAwNz1zdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDEyLVxcbm1tL21lbWNvbnRyb2wuYzo1MDEzOlxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XFxubW0vbWVtY29udHJvbC5jLTUwMTQtXFx0aWYgKHJldClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4OTA9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNzg5NS1cXG5tbS92bXNjYW4uYzo3ODk2OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS92bXNjYW4uYy03ODk3LVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwNDk9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDU0LVxcbm1tL3Ztc2Nhbi5jOjgwNTU6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xcbm1tL3Ztc2Nhbi5jLTgwNTYtXFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODoyNC45MTE5NzkzMDRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2MTIyNzA1MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNR0xSVSBFdmljdGlvbiBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgYGV2aWN0X2ZvbGlvc2AgZnVuY3Rpb24sIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIHBhdGggd2l0aGluIGBDT05GSUdfTFJVX0dFTmAuICBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUga2VybmVsIG5lZWRzIHRvIGZyZWUgdXAgbWVtb3J5LCB0cmlnZ2VyZWQgZWl0aGVyIHJlYWN0aXZlbHkgZHVlIHRvIG1lbW9yeSBwcmVzc3VyZSwgb3IgcHJvYWN0aXZlbHksIGxpa2Ugd2hlbiBhIGNncm91cCdzIGBtZW1vcnkucmVjbGFpbWAgaXMgdXNlZCwgb3IgZXZlbiBkdXJpbmcgaGliZXJuYXRpb24gKHRob3VnaCB0aGF0J3MgaGFuZGxlZCBkaWZmZXJlbnRseSwgdmlhIGBzaHJpbmtfYWxsX21lbW9yeWApLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgZml4aW5nIGhvdyBpc29sYXRlZCBmb2xpb3MgYXJlIGFjY291bnRlZCBmb3IsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdGhlIG5vZGUgcGFnZSBzdGF0ZSAoTlJfSVNPTEFURURfQU5PTi9OUl9JU09MQVRFRF9GSUxFKS4gIExvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZiBhZ2FpbiwgeWVzLCBpdCdzIG1vZGlmeWluZyB0aGUgbG9naWMgcmVsYXRlZCB0byBgaXNvbGF0ZWRfb3JpZ2AgYW5kIHRoZSBub2RlIHBhZ2Ugc3RhdGUgdXBkYXRlcy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0IGltcGFjdHMgaG93IG1lbW9yeSBpcyByZWNsYWltZWQgYW5kIHRyYWNrZWQuICBJdCBjb3VsZCBpbnRyb2R1Y2Ugc29tZSB0cmlja3kgZWRnZSBjYXNlcywgYW5kIGl04oCZcyBzb21ldGhpbmcgd2Ugc2hvdWxkIGFic29sdXRlbHkgZnV6ei5cblxuSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgaW5jbHVkaW5nIGB0cnlfdG9fZnJlZV9wYWdlc2AgYXMgYSBmb2N1cyBzeW1ib2wgYmVjYXVzZSBpdOKAmXMgYSBob3QgcGF0aCwgYnV0IGZvY3VzaW5nIG9uIHByb2FjdGl2ZSByZWNsYWltIHBhdGhzIHZpYSBjZ3JvdXAgbWVtb3J5IHJlY2xhaW0sIHVzaW5nIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIHNlZW1zIGxpa2UgYSBzbWFydGVyIG1vdmUuIEl0IGhpdHMgdGhlIHNhbWUgY29kZSBwYXRoIHdpdGhpbiBgZXZpY3RfZm9saW9zYCwgYnV0IHRhcmdldHMgYSBwb3RlbnRpYWxseSBsZXNzLWZyZXF1ZW50bHktdGVzdGVkIGFyZWEgYW5kIGRpcmVjdGx5IHJlbGF0ZWQgdG8gYSB1c2VyIHNwYWNlIHRyaWdnZXIuIEFuZCwgeWVzLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgYW4gZXhjZWxsZW50IGVudHJ5IHBvaW50IGFzIGl0J3MgZGlyZWN0bHkgdHJpZ2dlcmVkIGJ5IHVzZXJzcGFjZSBpbnRlcmFjdGlvbiB3aXRoIHN5c2ZzL2Nncm91cGZzLlxuXG5JJ3ZlIGFsc28gY2hlY2tlZCB0aGUgYExSVV9HRU5gIGNvbmZpZ3VyYXRpb24gYW5kIGl0cyBkZXBlbmRlbmNpZXMsIHdoaWNoIGFwcGVhciB0byBiZSBzdGFuZGFyZCBvbiB4ODZfNjQgc3lzdGVtcy4gIEdvb2QuXG5cblNvLCBoZXJlJ3MgdGhlIGZ1enppbmcgc2V0dXA6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gYmVjYXVzZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE1HTFJVIGV2aWN0aW9uIHBhdGgsIGNyaXRpY2FsIGZvciBtZW1vcnkgbWFuYWdlbWVudC5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgYWNjb3VudGluZyBmb3IgaXNvbGF0ZWQgZm9saW9zIHdpdGhpbiBgZXZpY3RfZm9saW9zYCwgYSBjb3JlIHBhcnQgb2YgbWVtb3J5IHJlY2xhaW0sIHNwZWNpZmljYWxseSB0aGUgbm9kZSBwYWdlIHN0YXRlLCBtYWtpbmcgaXQgYSBmdW5jdGlvbmFsIGNoYW5nZS5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCAtIHRvIHRhcmdldCB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYExSVV9HRU5gLCBgTFJVX0dFTl9FTkFCTEVEYCAtIHRoZXNlIGNvbmZpZ3MgYXJlIGVzc2VudGlhbCBmb3IgcnVubmluZyB0aGUgTUdMUlUgY29kZSB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjExLCJPdXRwdXRUb2tlbnMiOjEzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODozNi41MjQyNTMyOTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAyNTQ1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGV2aWN0aW9uIGxvZ2ljIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBpc29sYXRlZCBmb2xpb3MgaW4gdGhlIG5vZGUgcGFnZSBzdGF0ZSAoTlJfSVNPTEFURURfQU5PTiAvIE5SX0lTT0xBVEVEX0ZJTEUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRoIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBtZW1vcnkgcHJlc3N1cmUgb3IgcHJvYWN0aXZlIHJlY2xhaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZXZpY3Rpb24gbG9naWMgdG8gY29ycmVjdGx5IGFjY291bnQgZm9yIGlzb2xhdGVkIGZvbGlvcyBpbiB0aGUgbm9kZSBwYWdlIHN0YXRlIChOUl9JU09MQVRFRF9BTk9OIC8gTlJfSVNPTEFURURfRklMRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGggdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBwcmVzc3VyZSBvciBwcm9hY3RpdmUgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6NTg6MzYuNjk0NTE3MTI1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTEwODAwNzkzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU4OjM2LjY5NTQyMDQxNVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTEwNzA5OTg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGV2aWN0X2ZvbGlvc2AgaW4gYG1tL3Ztc2Nhbi5jYCB0byB0ZW1wb3JhcmlseSB1cGRhdGUgdGhlIG5vZGUgcGFnZSBzdGF0ZSAoYE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlYCkgd2l0aCB0aGUgbnVtYmVyIG9mIGlzb2xhdGVkIGZvbGlvcyBkdXJpbmcgZXZpY3Rpb24sIGFuZCB0aGVuIHJldmVydCBpdCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4gVGhlIHZhcmlhYmxlcyBpbnZvbHZlZCAoYGlzb2xhdGVkYCwgYHR5cGVgKSBhcmUgbG9jYWwgaW50ZWdlcnMuIGBpc29sYXRlZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCwgYW5kIGlmIGBpc29sYXRlX2ZvbGlvc2Agc2V0cyBpdCB0byBhIG5vbi16ZXJvIHZhbHVlLCBpdCBhbHNvIGluaXRpYWxpemVzIGB0eXBlYC4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdyBvciBjYWxjdWxhdGlvbnMuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgYW5kIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgcGFnZSBzdGF0ZSBhY2NvdW50aW5nLCB3aGljaCBpcyBub3Qgc29tZXRoaW5nIEtNU0FOIGRldGVjdHMuIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHBhdGNoLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2MzM4YmE2ZTYwYzNkYzU0YmY3YzNhNTBjMmQ0NTkzMDIzNjM0YTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzo1Njo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGJjMzI0ZTM3YzVmMWYuLjcyM2I1MTM1NzRiM2QgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC00ODE3LDYgKzQ4MTcsNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG4gXHRpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkO1xuIFx0aW50IGlzb2xhdGVkID0gMCwgdHlwZSwgdHlwZV9zY2FubmVkO1xuK1x0aW50IGlzb2xhdGVkX29yaWcgPSAwO1xuIFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbkBAIC00ODI5LDYgKzQ4MzAsMTEgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcbiBcdFx0XHRcdCBcdTAwMjZsaXN0LCBcdTAwMjZpc29sYXRlZCwgXHUwMDI2dHlwZSwgXHUwMDI2dHlwZV9zY2FubmVkKTtcbiBcbitcdGlzb2xhdGVkX29yaWcgPSBpc29sYXRlZDtcbitcdGlmIChpc29sYXRlZClcbitcdFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgdHlwZSxcbitcdFx0XHRcdCAgICAgIGlzb2xhdGVkKTtcbitcbiBcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXG4gXHRpZiAoc2Nhbm5lZClcbiBcdFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XG5AQCAtNDg5MSw2ICs0ODk3LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuK1x0aWYgKGlzb2xhdGVkX29yaWcpXG4rXHRcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLFxuK1x0XHRcdFx0ICAgIC1pc29sYXRlZF9vcmlnKTtcbitcbiBcdHJldHVybiBzY2FubmVkO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU4OjM2LjY5NTQyMjQ5NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDUyOTMyMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZNU2NhbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYG1tL3Ztc2Nhbi5jYC4gSXQncyB0d2Vha2luZyB0aGUgYGV2aWN0X2ZvbGlvc2AgZnVuY3Rpb24sIHdoaWNoIGlzIGFsd2F5cyBhbiBpbnRlcmVzdGluZyBhcmVhLiBUaGUgZ2lzdCBvZiBpdCBpcyBhZGRpbmcgc29tZSBib29ra2VlcGluZyByZWxhdGVkIHRvIGlzb2xhdGVkIGZvbGlvcywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgd2UncmUgdHJ5aW5nIHRvIGltcHJvdmUgdGhlIGFjY3VyYWN5IG9mIG91ciBtZW1vcnkgYWNjb3VudGluZyBkdXJpbmcgcGFnZSBldmljdGlvbi5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSBhIG5ldyB2YXJpYWJsZSBjYWxsZWQgYGlzb2xhdGVkX29yaWdgIGJlaW5nIGludHJvZHVjZWQuIEl0J3MgaW5pdGlhbGl6ZWQgdG8gemVybywgdGhlbiBzZXQgdG8gdGhlIHZhbHVlIG9mIGBpc29sYXRlZGAgKmFmdGVyKiBgaXNvbGF0ZV9mb2xpb3NgIGlzIGNhbGxlZC4gVGhhdCB0ZWxscyBtZSBgaXNvbGF0ZV9mb2xpb3NgIGlzIGxpa2VseSBzZXR0aW5nIGBpc29sYXRlZGAsIHdoaWNoIHByb2JhYmx5IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBmb2xpb3MgdGhhdCB3ZXJlIGFjdHVhbGx5IHN1Y2Nlc3NmdWxseSBpc29sYXRlZC5cblxuVGhlbiwgdGhlcmUncyB0aGlzIGNvbmRpdGlvbmFsOiBpZiBgaXNvbGF0ZWRgIGlzIG5vbi16ZXJvIChtZWFuaW5nIGZvbGlvcyAqd2VyZSogaXNvbGF0ZWQpLCBpdCBjYWxscyBgX19tb2Rfbm9kZV9wYWdlX3N0YXRlYCB0byB1cGRhdGUgYSBub2RlIHBhZ2Ugc3RhdGUgY291bnRlciwgc3BlY2lmaWNhbGx5IGBOUl9JU09MQVRFRF9BTk9OICsgdHlwZWAuIEknbSBndWVzc2luZyBgdHlwZWAgZGVmaW5lcyB0aGUgdHlwZSBvZiBwYWdlIChlLmcuLCBhbm9ueW1vdXMsIGZpbGUtYmFja2VkKSBiZWluZyBpc29sYXRlZC4gTGF0ZXIsIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLCB0aGUgcGF0Y2ggc2VlbXMgdG8gKnVuZG8qIHRoaXMgYWRqdXN0bWVudCwgc3VidHJhY3RpbmcgdGhlIG9yaWdpbmFsIHZhbHVlIG9mIGBpc29sYXRlZGAgZnJvbSB0aGUgc2FtZSBjb3VudGVyLiBUaGlzIHN1Z2dlc3RzIHRoZSBpc29sYXRlZCBmb2xpb3MgYXJlIGJlaW5nIHJlY2xhaW1lZC5cblxuTXkgaW1tZWRpYXRlIGFzc2Vzc21lbnQgaXMgdGhpcyBwYXRjaCBpc24ndCBpbnRyb2R1Y2luZyBhbnl0aGluZyBkcmFzdGljIG9yIHJpc2t5LiBJdCBkb2Vzbid0IHNlZW0gdG8gY3JlYXRlIGFueSBuZXcgc3RydWN0dXJlcywgaXQncyBub3QgY29weWluZyBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYmVjYXVzZSB2YXJpYWJsZXMgYGlzb2xhdGVkYCwgYHR5cGVgLCBhbmQgYHR5cGVfc2Nhbm5lZGAgYXJlIHBhc3NlZCBieSByZWZlcmVuY2UgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSBgaXNvbGF0ZV9mb2xpb3NgIGZ1bmN0aW9uLiBCdXQsIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgYGlzb2xhdGVfZm9saW9zYCBhY3R1YWxseSB3b3JrcyB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBlbnN1cmUgdGhlcmUncyBubyBzdWJ0bGUgaW50ZXJhY3Rpb24gSSdtIG1pc3NpbmcuIFRoaXMgZmVlbHMgbGlrZSBhIHByZXR0eSB0YXJnZXRlZCB1cGRhdGUgdG8gbm9kZSBwYWdlIHN0YXRlIGZvciBtb3JlIGFjY3VyYXRlIGFjY291bnRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODo0Mi4xNDgzNTkzODRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzQ2Mjg1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc29sYXRlX2ZvbGlvc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00NzU1PXN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtNDc3My1cXG5tbS92bXNjYW4uYzo0Nzc0OnN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxubW0vdm1zY2FuLmMtNDc3NS1cXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4MDg9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00ODI5LVxcbm1tL3Ztc2Nhbi5jOjQ4MzA6XFx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXFxubW0vdm1zY2FuLmMtNDgzMS1cXHRcXHRcXHRcXHQgXFx1MDAyNmxpc3QsIFxcdTAwMjZpc29sYXRlZCwgXFx1MDAyNnR5cGUsIFxcdTAwMjZ0eXBlX3NjYW5uZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODo0Mi4yNTE4NTgxMTNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2MDExMTkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBpc29sYXRlX2ZvbGlvc2AgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGF0IGBpc29sYXRlX2ZvbGlvc2AgZnVuY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBkb2luZyB3aGF0IEkgZXhwZWN0IGl0IHRvLCBhbmQgZWZmaWNpZW50bHkuIEZpcnN0LCBJJ20gY2hlY2tpbmcgdGhlIGNvcmUgbG9naWMuIEFyZSB0aGUgZWRnZSBjYXNlcyBoYW5kbGVkIGNvcnJlY3RseT8gU3BlY2lmaWNhbGx5LCBhbSBJIHNlZWluZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggZW1wdHkgaW5wdXQgc2V0cywgbnVsbCB2YWx1ZXMsIG9yIHVuZXhwZWN0ZWQgZGF0YSBzdHJ1Y3R1cmVzPyBJJ20gbG9va2luZyBmb3IgYW55IHNob3J0Y3V0cyB0YWtlbiB0aGF0IG1pZ2h0IGludHJvZHVjZSBzdWJ0bGUgYnVncyBkb3duIHRoZSBsaW5lLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIHRoaXMgd2VyZSBtdWx0aS10aHJlYWRlZC4gSXMgaXQgdXRpbGl6aW5nIHRoZSBvcHRpbWFsIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIGV4cGVjdGVkIGlucHV0IHNpemU/IEFyZSB0aGVyZSBhcmVhcyB3aGVyZSBJIGNvdWxkIG9wdGltaXplIHRoZSBhbGdvcml0aG1zIHRvIGltcHJvdmUgc3BlZWQsIGV2ZW4gb24gbGFyZ2UgZm9saW9zPyBJJ2xsIGFsc28gYmUgY29uc2lkZXJpbmcgdGhlIG1haW50YWluYWJpbGl0eSBvZiB0aGlzIGNvZGUuIElzIGl0IHdlbGwtY29tbWVudGVkLCBtb2R1bGFyLCBhbmQgZWFzeSBmb3Igb3RoZXIgZGV2ZWxvcGVycywgb3IgZXZlbiBteXNlbGYgaW4gYSBmZXcgbW9udGhzLCB0byB1bmRlcnN0YW5kIGFuZCBtb2RpZnk/IEFueSBvcHBvcnR1bml0eSB0byByZWZhY3RvciBmb3IgY2xhcml0eSBvciB0byBlbmhhbmNlIHRlc3RhYmlsaXR5IGlzIHdvcnRoIGV4cGxvcmluZyByaWdodCBub3cuIEZpbmFsbHksIGFyZSB0aGUgdW5pdCB0ZXN0cyBzdWZmaWNpZW50LCBvciBzaG91bGQgSSB3cml0ZSBhIGZldyBtb3JlIGNvcm5lci1jYXNlIHRlc3RzIHRvIGNoZWNrIGl0cyBzdGFiaWxpdHk/IEkgbmVlZCB0byBiZSBjb25maWRlbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHByb2R1Y3Rpb24tcmVhZHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzo1ODo0Ni41MTE5NzQ1MTFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0Nzc0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0Nzc0OlxcdHN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuNDc3NTpcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcyxcXG40Nzc2OlxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZCxcXG40Nzc3OlxcdFxcdFxcdFxcdCAgaW50ICppc29sYXRlX3R5cGUsIGludCAqaXNvbGF0ZV9zY2FubmVkKVxcbjQ3Nzg6XFx0e1xcbjQ3Nzk6XFx0XFx0aW50IGk7XFxuNDc4MDpcXHRcXHRpbnQgdG90YWxfc2Nhbm5lZCA9IDA7XFxuNDc4MTpcXHRcXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcXG40NzgyOlxcdFxcbjQ3ODM6XFx0XFx0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUoaSwgc3dhcHBpbmVzcykge1xcbjQ3ODQ6XFx0XFx0XFx0aW50IHNjYW5uZWQ7XFxuNDc4NTpcXHRcXHRcXHRpbnQgdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpO1xcbjQ3ODY6XFx0XFxuNDc4NzpcXHRcXHRcXHRzY2FubmVkID0gc2Nhbl9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYyxcXG40Nzg4OlxcdFxcdFxcdFxcdFxcdCAgICAgIHR5cGUsIHRpZXIsIGxpc3QsIGlzb2xhdGVkKTtcXG40Nzg5OlxcdFxcbjQ3OTA6XFx0XFx0XFx0dG90YWxfc2Nhbm5lZCArPSBzY2FubmVkO1xcbjQ3OTE6XFx0XFx0XFx0aWYgKCppc29sYXRlZCkge1xcbjQ3OTI6XFx0XFx0XFx0XFx0Kmlzb2xhdGVfdHlwZSA9IHR5cGU7XFxuNDc5MzpcXHRcXHRcXHRcXHQqaXNvbGF0ZV9zY2FubmVkID0gc2Nhbm5lZDtcXG40Nzk0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQ3OTU6XFx0XFx0XFx0fVxcbjQ3OTY6XFx0XFx0XFx0LypcXG40Nzk3OlxcdFxcdFxcdCAqIElmIHNjYW5uZWQgXFx1MDAzZSAwIGFuZCBpc29sYXRlZCA9PSAwLCBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlXFxuNDc5ODpcXHRcXHRcXHQgKiBvdGhlciB0eXBlLCBhcyB0aGlzIHR5cGUgcmVtYWlucyBzdWZmaWNpZW50LiBGYWxsaW5nIGJhY2tcXG40Nzk5OlxcdFxcdFxcdCAqIHRvbyByZWFkaWx5IGNhbiBkaXNydXB0IHRoZSBwb3NpdGl2ZV9jdHJsX2VycigpIGJpYXMuXFxuNDgwMDpcXHRcXHRcXHQgKi9cXG40ODAxOlxcdFxcdFxcdGlmICghc2Nhbm5lZClcXG40ODAyOlxcdFxcdFxcdFxcdHR5cGUgPSAhdHlwZTtcXG40ODAzOlxcdFxcdH1cXG40ODA0OlxcdFxcbjQ4MDU6XFx0XFx0cmV0dXJuIHRvdGFsX3NjYW5uZWQ7XFxuNDgwNjpcXHR9XFxuNDgwNzpcXHRcXG40ODA4OlxcdHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbjQ4MDk6XFx0XFx0XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxcbjQ4MTA6XFx0e1xcbjQ4MTE6XFx0XFx0TElTVF9IRUFEKGxpc3QpO1xcbjQ4MTI6XFx0XFx0TElTVF9IRUFEKGNsZWFuKTtcXG40ODEzOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuNDgxNDpcXHRcXHRzdHJ1Y3QgZm9saW8gKm5leHQ7XFxuNDgxNTpcXHRcXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XFxuNDgxNjpcXHRcXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XFxuNDgxNzpcXHRcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xcbjQ4MTg6XFx0XFx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcXG40ODE5OlxcdFxcdGludCBpc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcXG40ODIwOlxcdFxcdGludCBpc29sYXRlZF9vcmlnID0gMDtcXG40ODIxOlxcdFxcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xcbjQ4MjI6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XFxuNDgyMzpcXHRcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU4OjQ2LjUxNDM0NjQzMVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Mjg4MTQ2NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBJbXBhY3Qgb24gVW5pbml0aWFsaXplZCBNZW1vcnkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcywgZ2l2ZW4gS01TQU4ncyByb2xlLiBgaXNvbGF0ZV9mb2xpb3NgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgaXQgc2VlbXMgdG8gdGFrZSBgaXNvbGF0ZWRgLCBgaXNvbGF0ZV90eXBlYCwgYW5kIGBpc29sYXRlX3NjYW5uZWRgIGJ5IHBvaW50ZXIuIEl0IGNhbGxzIGBzY2FuX2ZvbGlvc2AsIHdoaWNoIGlzIHRoZSBsaWtlbHkgc291cmNlIG9mIHRoaXMgZGF0YSwgYmVmb3JlIHNldHRpbmcgdGhlc2UgdmFsdWVzLiBJZiBgKmlzb2xhdGVkYCBpcyBub24temVybywgaW5kaWNhdGluZyBmb2xpb3MgKndlcmUqIGlzb2xhdGVkLCB0aGVuIGAqaXNvbGF0ZV90eXBlID0gdHlwZTtgIGFuZCBgKmlzb2xhdGVfc2Nhbm5lZCA9IHNjYW5uZWQ7YCBhcmUgc2V0LiBUaGlzIGxvb2tzIGltcG9ydGFudC5cblxuTXkgY29uY2VybiBpbml0aWFsbHkgd2FzIHRoZSBgdHlwZWAgdmFyaWFibGUuIElmIGAqaXNvbGF0ZWRgIGJlY29tZXMgbm9uLXplcm8gaW4gYGlzb2xhdGVfZm9saW9zYCwgdGhlIHZhbHVlIGlzIHNldCB0byBgdHlwZWAuIEJ1dCBgZXZpY3RfZm9saW9zYCBhbHNvIHVzZXMgdGhpcyB2YXJpYWJsZS4gSSBuZWVkZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIGB0eXBlYCAuIEkgY2FuIHNlZSBub3csIGBldmljdF9mb2xpb3NgIGluaXRpYWxpemVzIGBpc29sYXRlZGAgdG8gMC4gU28sIGB0eXBlYCBpcyBvbmx5IGV2ZXIgdXNlZCAqYWZ0ZXIqIGBpc29sYXRlX2ZvbGlvc2AgaGFzIHNldCBpdCwgd2hpY2ggaW1wbGllcyBhIHNhZmUgaW5pdGlhbGl6YXRpb24gcGF0aCBmb3IgdGhlIHZhbHVlIG9mIHR5cGUuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgY29kZSBpbiBgZXZpY3RfZm9saW9zYCwgdGhlcmUncyBhIGJsb2NrOlxuXG5gYGBjXG5cdGlzb2xhdGVkX29yaWcgPSBpc29sYXRlZDtcblx0aWYgKGlzb2xhdGVkKVxuXHRcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsXG5cdFx0XHRcdCAgICAgIGlzb2xhdGVkKTtcbmBgYFxuXG5TaW5jZSBgdHlwZWAgaXMgb25seSBldmVyIHVzZWQgKmlmKiBgaXNvbGF0ZWRgIGlzIG5vbi16ZXJvIChkdWUgdG8gdGhlIGBpZmAgc3RhdGVtZW50KSwgYW5kIGB0eXBlYCBpcyBpbml0aWFsaXplZCBpZiBgaXNvbGF0ZWRgIGlzIG5vbi16ZXJvIChmcm9tIHRoZSBgaXNvbGF0ZV9mb2xpb3NgIGNhbGwgcGF0aCksIHRoZXJlIGlzIG5vIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgaGVyZS4gVGhlIHBhdGNoIGRvZXNuJ3QgY3JlYXRlIGFueSBtZW1vcnkgcmlza3MsIGFuZCBteSBpbml0aWFsIGNvbmNlcm5zIGFyZSBhbGxldmlhdGVkLiBJdCdzIGp1c3QgcGFnZSBzdGF0ZSBhY2NvdW50aW5nLCBhbmQgdGhhdCBpcyBub3Qgd2hhdCBLTVNBTiBkZXRlY3RzLlxuXG5UaGlzIHBhdGNoIHNpbXBseSB1cGRhdGVzIHRoZSBub2RlIHBhZ2Ugc3RhdGUgYnkgdXBkYXRpbmcgdGhlIHBhZ2Ugc3RhdGUgKGBOUl9JU09MQVRFRF9BTk9OICsgdHlwZWApIHdpdGggdGhlIG51bWJlciBvZiBpc29sYXRlZCBmb2xpb3MgZHVyaW5nIGV2aWN0aW9uIGFuZCB0aGVuIHJldmVydHMgaXQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uXG5UaGUgbG9jYWwgaW50ZWdlciB2YXJpYWJsZXMgaW52b2x2ZWQgKGBpc29sYXRlZGAsIGB0eXBlYCkgYXJlIGNsZWFybHkgaW5pdGlhbGl6ZWQuIGBpc29sYXRlZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCwgYW5kIGlmIGBpc29sYXRlX2ZvbGlvc2Agc2V0cyBpdCB0byBhIG5vbi16ZXJvIHZhbHVlLCBpdCB0aGVuIGFsc28gaW5pdGlhbGl6ZXMgYHR5cGVgLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYXMgYW55IHBvdGVudGlhbCBidWdzIGFyZSByZWxhdGVkIHRvIGluY29ycmVjdCBwYWdlIHN0YXRlIGFjY291bnRpbmcsIHdoaWNoIGNhbiBiZSBoYW5kbGVkIHdpdGggS0FTQU4gb3IgbW9yZSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMuXG5cblNvLCB0aGlzIHBhdGNoIGRvZXMgKm5vdCogbmVlZCBLTVNBTi4gSXQncyBzYWZlIGluIHRlcm1zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzA0LCJPdXRwdXRUb2tlbnMiOjIwMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjU4OjU1LjgwMjQ5NjJaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBldmljdF9mb2xpb3NgIGluIGBtbS92bXNjYW4uY2AgdG8gdGVtcG9yYXJpbHkgdXBkYXRlIHRoZSBub2RlIHBhZ2Ugc3RhdGUgKGBOUl9JU09MQVRFRF9BTk9OICsgdHlwZWApIHdpdGggdGhlIG51bWJlciBvZiBpc29sYXRlZCBmb2xpb3MgZHVyaW5nIGV2aWN0aW9uLCBhbmQgdGhlbiByZXZlcnQgaXQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgKGBpc29sYXRlZGAsIGB0eXBlYCkgYXJlIGxvY2FsIGludGVnZXJzLiBgaXNvbGF0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAsIGFuZCBpZiBgaXNvbGF0ZV9mb2xpb3NgIHNldHMgaXQgdG8gYSBub24temVybyB2YWx1ZSwgaXQgYWxzbyBpbml0aWFsaXplcyBgdHlwZWAuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY2FsY3VsYXRpb25zLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGFuZCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IHBhZ2Ugc3RhdGUgYWNjb3VudGluZywgd2hpY2ggaXMgbm90IHNvbWV0aGluZyBLTVNBTiBkZXRlY3RzLiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZXZpY3RfZm9saW9zYCBpbiBgbW0vdm1zY2FuLmNgIHRvIHRlbXBvcmFyaWx5IHVwZGF0ZSB0aGUgbm9kZSBwYWdlIHN0YXRlIChgTlJfSVNPTEFURURfQU5PTiArIHR5cGVgKSB3aXRoIHRoZSBudW1iZXIgb2YgaXNvbGF0ZWQgZm9saW9zIGR1cmluZyBldmljdGlvbiwgYW5kIHRoZW4gcmV2ZXJ0IGl0IGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLiBUaGUgdmFyaWFibGVzIGludm9sdmVkIChgaXNvbGF0ZWRgLCBgdHlwZWApIGFyZSBsb2NhbCBpbnRlZ2Vycy4gYGlzb2xhdGVkYCBpcyBpbml0aWFsaXplZCB0byAwLCBhbmQgaWYgYGlzb2xhdGVfZm9saW9zYCBzZXRzIGl0IHRvIGEgbm9uLXplcm8gdmFsdWUsIGl0IGFsc28gaW5pdGlhbGl6ZXMgYHR5cGVgLiBUaHVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGNhbGN1bGF0aW9ucy4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBhbmQgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGluY29ycmVjdCBwYWdlIHN0YXRlIGFjY291bnRpbmcsIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgS01TQU4gZGV0ZWN0cy4gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgcGF0Y2guXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz59mm[1] Phase: Succeeded StartedAt: 2026-08-11 07:59:07 +0000 UTC FinishedAt: 2026-08-11 07:59:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 07:59:07 +0000 UTC FinishedAt: 2026-08-11 07:59:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2] Phase: Succeeded StartedAt: 2026-08-11 07:59:07 +0000 UTC FinishedAt: 2026-08-11 11:48:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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 07:59:07 +0000 UTC FinishedAt: 2026-08-11 11:48:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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 07:59:07 +0000 UTC FinishedAt: 2026-08-11 07:59:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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 07:59:07 +0000 UTC FinishedAt: 2026-08-11 07:59:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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-workflowz59mm/series-workflowz59mm-convert-artifact-289193368/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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 07:59:17 +0000 UTC FinishedAt: 2026-08-11 08:19:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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 07:59:17 +0000 UTC FinishedAt: 2026-08-11 08:19:52 +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:*64712285-8901-425b-a38c-5e6da2dc86b3,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-workflowz59mm/series-workflowz59mm-convert-artifact-289193368/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": "236e7e43-a9f6-4c47-a276-ca334c896fff", "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-workflowz59mm/series-workflowz59mm-build-action-1869347534/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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 07:59:17 +0000 UTC FinishedAt: 2026-08-11 08:19:42 +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:*64712285-8901-425b-a38c-5e6da2dc86b3,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-workflowz59mm/series-workflowz59mm-convert-artifact-289193368/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": "236e7e43-a9f6-4c47-a276-ca334c896fff", "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-workflowz59mm/series-workflowz59mm-build-action-1869347534/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:19:52 +0000 UTC FinishedAt: 2026-08-11 08:19:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:19:52 +0000 UTC FinishedAt: 2026-08-11 08:19:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:19:52 +0000 UTC FinishedAt: 2026-08-11 08:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:19:52 +0000 UTC FinishedAt: 2026-08-11 08:20:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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-workflowz59mm/series-workflowz59mm-convert-artifact-2943712255/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:20:16 +0000 UTC FinishedAt: 2026-08-11 08:22:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:20:16 +0000 UTC FinishedAt: 2026-08-11 08:22:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*236e7e43-a9f6-4c47-a276-ca334c896fff,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-workflowz59mm/series-workflowz59mm-build-action-1869347534/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-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:22:18 +0000 UTC FinishedAt: 2026-08-11 08:22:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:22:18 +0000 UTC FinishedAt: 2026-08-11 08:22:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:22:18 +0000 UTC FinishedAt: 2026-08-11 08:42:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:22:18 +0000 UTC FinishedAt: 2026-08-11 08:42:38 +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:*64712285-8901-425b-a38c-5e6da2dc86b3,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-workflowz59mm/series-workflowz59mm-convert-artifact-2943712255/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": "86478df8-f7aa-4669-baee-182cc01eda88", "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-workflowz59mm/series-workflowz59mm-build-action-193479187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:22:18 +0000 UTC FinishedAt: 2026-08-11 08:42:28 +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:*64712285-8901-425b-a38c-5e6da2dc86b3,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-workflowz59mm/series-workflowz59mm-convert-artifact-2943712255/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": "86478df8-f7aa-4669-baee-182cc01eda88", "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-workflowz59mm/series-workflowz59mm-build-action-193479187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:42:38 +0000 UTC FinishedAt: 2026-08-11 08:42:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:42:38 +0000 UTC FinishedAt: 2026-08-11 08:42:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:42:38 +0000 UTC FinishedAt: 2026-08-11 08:45:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:42:38 +0000 UTC FinishedAt: 2026-08-11 08:44:54 +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:*86478df8-f7aa-4669-baee-182cc01eda88,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-workflowz59mm/series-workflowz59mm-build-action-193479187/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-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:45:03 +0000 UTC FinishedAt: 2026-08-11 11:48:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:45:03 +0000 UTC FinishedAt: 2026-08-11 11:48:19 +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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"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:*236e7e43-a9f6-4c47-a276-ca334c896fff,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*86478df8-f7aa-4669-baee-182cc01eda88,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-workflowz59mm/series-workflowz59mm-build-action-1869347534/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-workflowz59mm/series-workflowz59mm-build-action-193479187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:45:03 +0000 UTC FinishedAt: 2026-08-11 08:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:45:03 +0000 UTC FinishedAt: 2026-08-11 08:45:08 +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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"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-workflowz59mm/series-workflowz59mm-convert-artifact-2303259800/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:45:03 +0000 UTC FinishedAt: 2026-08-11 08:45:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:45:03 +0000 UTC FinishedAt: 2026-08-11 08:45:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:45:03 +0000 UTC FinishedAt: 2026-08-11 08:45:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:45:13 +0000 UTC FinishedAt: 2026-08-11 11:48:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz59mm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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":["user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b1c9c30778acba94101e0bceb2bc747a49cf0323","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b95fa5d3-a670-49ec-afc0-b9cf6766fbbc","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:45:13 +0000 UTC FinishedAt: 2026-08-11 11:48:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*236e7e43-a9f6-4c47-a276-ca334c896fff,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*86478df8-f7aa-4669-baee-182cc01eda88,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-workflowz59mm/series-workflowz59mm-build-action-1869347534/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-workflowz59mm/series-workflowz59mm-build-action-193479187/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-workflowz59mm/series-workflowz59mm-convert-artifact-2303259800/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,}